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.
bforce/contrib/u-srif/lib/utmpl.py

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'@@@'")