You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
2.5 KiB
Python
98 lines
2.5 KiB
Python
import string
|
|
|
|
class template:
|
|
def __init__(self):
|
|
self.local_address = ''
|
|
self.local_sysop = ''
|
|
self.local_location = ''
|
|
self.local_phone = ''
|
|
self.remote_address = ''
|
|
self.remote_sysop = ''
|
|
self.remote_location = ''
|
|
self.remote_phone = ''
|
|
self.remote_cid = ''
|
|
self.limit_size_day = -1
|
|
self.limit_size_week = -1
|
|
self.limit_size_month = -1
|
|
self.sent_size_day = -1
|
|
self.sent_size_week = -1
|
|
self.sent_size_month = -1
|
|
self.sent_size = -1
|
|
self.conn_speed = -1
|
|
self.text = None
|
|
|
|
def set(self, srif=None, conf=None, nodestat=None):
|
|
if srif:
|
|
self.remote_address = srif.aka.string()
|
|
self.remote_sysop = srif.sysop
|
|
self.remote_location = srif.site
|
|
self.remote_cid = srif.callerid
|
|
self.conn_speed = srif.baud
|
|
if conf:
|
|
self.local_address = conf.local_address.string()
|
|
self.limit_size_day = conf.limit_size_day
|
|
self.limit_size_week = conf.limit_size_week
|
|
self.limit_size_month = conf.limit_size_month
|
|
if nodestat:
|
|
self.sent_session_size = nodestat.stat_session_size
|
|
self.sent_session_num = nodestat.stat_session_num
|
|
self.sent_day_size = nodestat.stat_day_size
|
|
self.sent_day_num = nodestat.stat_day_num
|
|
self.sent_week_size = nodestat.stat_week_size
|
|
self.sent_week_num = nodestat.stat_week_num
|
|
self.sent_month_size = nodestat.stat_month_size
|
|
self.sent_month_num = nodestat.stat_month_num
|
|
self.sent_total_size = nodestat.stat_total_size
|
|
self.sent_total_num = nodestat.stat_total_num
|
|
|
|
def __cmd__(self, str):
|
|
try:
|
|
[fmt, arg] = string.split(str, ',', 1)
|
|
return eval('"' + fmt + '" % self.' + arg)
|
|
except ValueError:
|
|
return '@ValueError@'
|
|
except AttributeError:
|
|
return '@AttributeError@'
|
|
|
|
def process(self, text=None):
|
|
if text == None:
|
|
text = self.text
|
|
if text == None:
|
|
return None
|
|
pos = 0
|
|
while 1:
|
|
pos = string.find(text, '@', pos)
|
|
if pos < 0:
|
|
break
|
|
end_pos = string.find(text, '@', pos+1)
|
|
if end_pos < 0:
|
|
break
|
|
if end_pos - pos > 1:
|
|
# Process escaped command
|
|
replace = self.__cmd__(text[pos+1:end_pos])
|
|
if replace:
|
|
text = text[:pos]+replace+text[end_pos+1:]
|
|
# Fix the current position
|
|
pos = end_pos + len(replace)-(end_pos-pos+1)
|
|
else:
|
|
# Leave text untouched
|
|
pos = end_pos + 1
|
|
else:
|
|
# Replace '@@' by the single '@'
|
|
text = text[:pos+1]+text[pos+2:]
|
|
pos = end_pos
|
|
return text
|
|
|
|
def readfile(self, path):
|
|
try:
|
|
fp = open(path, 'r')
|
|
self.text = fp.read()
|
|
fp.close()
|
|
except IOError:
|
|
pass
|
|
|
|
if __name__ == "__main__":
|
|
test = template()
|
|
print test.process("'@@'\n'@@'\n'@%d,conn_speed@'\n'@@@'")
|
|
|