from roxiadebug import *
from setting import setting
## Index
INDEX,DAY,MONTH,YEAR,YEARLY, HOLIDAY,MEMO = range(7)
record = 'index','day','month','year','yearly' 'holiday', 'memo'
class NamedListMetaClass(type):
def __init__(cls, cls_name, bases, attrs):
# cls -> cls_nameÀ» °®´Â class
members = attrs['members']
member_list = members.split()
setattr(cls, '__slots__', ())
def property_factory(index):
def property_get(self):
return self[index]
def property_set(self, v):
self[index] = v
return property_get, property_set
for i, member in enumerate(member_list):
setattr(cls, member, property(*property_factory(i)))
super(NamedListMetaClass, cls).__init__(cls_name, bases, attrs)
def __call__(self, *args):
# self: class
instance = super(NamedListMetaClass, self).__call__(args)
return instance
class CalendarItem(list):
__metaclass__ = NamedListMetaClass
members = 'index day month year yearly holiday memo'
def __init__(self, args):
if not args:
import time,ntptime
year,month,day = time.localtime(setting.current_time)[:3]
lst = ['0',str(day),str(month),str(year),'0','0','']
list.__init__(self, lst)
elif len(args) == 1:
list.__init__(self, *args)
else:
list.__init__(self, args)
def is_valid(self):
return self[0] or self[1] or self[2] or self[3] or self[4]
class CalendarDB:
def __init__(self):
self.db = []
try:
self.load_db()
except:
pass
def new_item(self, item=None):
if item: CalendarItem(item)
return CalendarItem()
def is_empty(self):
return len(self.db) == 0
def load_db(self):
for line in file('calendar.txt'):
try:
item = line[:-1].split('\t')
self.db.append(CalendarItem(item))
except:
pass
self.sort()
def find(self, number):
if not number:
return -1
for i, item in enumerate(self.db):
if number == item[index]:
return i
return -1
def has_date(self, year,month,day):
for item in self.db:
if item[1] == day and item[2] == month and item[3] == year:
return True
return False
def get_event_days_of_the_month(self, year, month):
event_days = []
for item in self.db:
if item[2] == str(month) and item[3] == str(year):
event_days.append(int(item[1]))
return event_days
def get_item(self, i):
return self.db[i]
def get_date(self, year,month,day):
s=''
for item in self.db:
if item[1] == str(day) and item[2] == str(month) and item[3] == str(year):
s = '%s' % (item[6])
return s
return s
def find_by_item(self, item):
return self.db.index(item)
def count(self):
return len(self.db)
def insert_item(self, item):
self.db.append(item)
self.sort()
self.save()
def sort(self):
def sort_func(x, y):
xname = x[0] or x[1] or x[2] or x[3]
yname = y[0] or y[1] or y[2] or y[3]
xname = xname.lower()
yname = yname.lower()
return cmp(xname, yname)
self.db.sort(sort_func)
def remove(self, index):
#assert 0 <= index < len(self.db)
item = self.db[index]
del self.db[index]
self.save()
def get_names(self):
list = []
for item in self.db:
s = ''
s = '%4d/%02d/%02d %s' % (int(item[3]),int(item[2]),int(item[1]),item[6])
list.append(s)
return list
def save(self):
fp = open('calendar.txt','w')
for item in self.db:
fp.write('\t'.join(item) + '\n')
def reset(self):
self.db = []
self.save()
def __del__(self):
pass
#print 'Calendardb destroy'
calendardb = CalendarDB()
if __name__ == '__main__':
calendardb.save()