Newer
Older
Import / projects / LGN-IP3870 / t / orig / calendardb.py
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()