aboutsummaryrefslogtreecommitdiffstats
path: root/src/py/square.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/py/square.py')
-rw-r--r--src/py/square.py311
1 files changed, 311 insertions, 0 deletions
diff --git a/src/py/square.py b/src/py/square.py
new file mode 100644
index 0000000..68f1be4
--- /dev/null
+++ b/src/py/square.py
@@ -0,0 +1,311 @@
+from tojauth import TOJAuth
+from asyncdb import AsyncDB
+from user import UserMg
+import imc.proxy
+import config
+
+class SquareMg:
+ _accessid = 4
+
+ TITLE_LEN_MIN = 1
+ TITLE_LEN_MAX = 100
+
+ SQUARE_CATE_NUM_MAX = 50
+
+ def __init__(self, mod_idendesc, get_link_fn):
+ SquareMg.instance = self
+ SquareMg.db = AsyncDB(config.CORE_DBNAME, config.CORE_DBUSER,
+ config.CORE_DBPASSWORD)
+ SquareMg._idendesc = mod_idendesc
+ self.get_link = get_link_fn
+
+ @imc.async.caller
+ def create_square(self, title, hidden, sqmodid, category = []):
+ if(
+ type(title) != str or
+ type(hidden) != bool or
+ type(sqmodid) != int or
+ type(category) != list
+ ):
+ return 'Eparameter'
+
+ for cateid in category:
+ if(
+ type(cateid) != int
+ ):
+ return 'Eparameter'
+
+ if len(title) < self.TITLE_LEN_MIN:
+ return 'Etitle_too_short'
+ elif len(title) > self.TITLE_LEN_MAX:
+ return 'Etitle_too_long'
+
+ if len(category) > self.SQUARE_CATE_NUM_MAX:
+ return 'Etoo_many_category'
+
+ category = list(set(category))
+
+ for cateid in category:
+ if not self.does_cateid_exist(cateid):
+ return 'Eno_such_cateid'
+
+ sqid = self._create_square(title, hidden, sqmodid)
+ self._set_square_category(sqid, category)
+ return {'sqid': sqid}
+
+ @TOJAuth.check_access(_accessid, TOJAuth.ACCESS_CREATE)
+ def _create_square(self, title, hidden, sqmodid):
+ cur = self.db.cursor()
+ sqlstr = ('INSERT INTO "SQUARE" ("title", "hidden", "sqmodid", '
+ '"accessid") VALUES (%s, %s, %s, %s) RETURNING "sqid";')
+ sqlarr = (title, hidden, sqmodid, 0)
+ cur.execute(sqlstr, sqlarr)
+
+ sqid = None
+ for data in cur:
+ sqid = data[0]
+
+ if sqid != None:
+ user_idenid = TOJAuth.get_current_iden()['idenid']
+ with TOJAuth.change_current_iden(self._idendesc):
+ accessid = TOJAuth.instance.create_access(user_idenid)
+
+ sqlstr = ('UPDATE "SQUARE" SET "accessid" = %s WHERE "sqid" = %s;')
+ sqlarr = (accessid, sqid)
+ cur.execute(sqlstr, sqlarr)
+
+ with TOJAuth.change_current_iden(self._idendesc):
+ TOJAuth.instance.set_access_list(
+ accessid, TOJAuth.ROLEID_SQUARE_ADMIN_GROUP,
+ TOJAuth.ACCESS_ALL
+ )
+
+ # sqmod.create_square_data(sqid)
+
+ return sqid;
+
+ @imc.async.caller
+ def delete_square(self, sqid):
+ if(
+ type(sqid) != int
+ ):
+ return 'Eparameter'
+
+ if not self.does_sqid_exist(sqid):
+ return 'Eno_such_sqid'
+
+ self._delete_square(self, sqid)
+
+ def _delete_square(self, sqid):
+ accessid = self.get_accessid_by_sqid(sqid)
+ TOJAuth.check_access_func(accessid, TOJAuth.ACCESS_DELETE)
+
+ # sqmod.delete_square_data(sqid)
+
+ with TOJAuth.change_current_iden(self._idendesc):
+ TOJAuth.instance.del_access(accessid)
+
+ cur = self.db.cursor()
+ sqlstr = ('DELETE FROM "SQUARE" WHERE "sqid" = %s;')
+ sqlarr = (sqid, )
+ cur.execute()
+
+ @imc.async.caller
+ def list_square(self, cateid = None):
+ if(
+ cateid != None and type(cateid) != int
+ ):
+ return 'Eparameter'
+
+ ret = None
+ if cateid == None:
+ ret = self._list_square_all()
+ else:
+ if not self.does_cateid_exist(cateid):
+ return 'Eno_such_cateid'
+ ret = self._list_square_category(cateid)
+
+ return ret
+
+ def _list_square_category(self, cateid):
+ cur = self.db.cursor()
+ sqlstr = ('SELECT "sqid", "title", "start_time", "end_time", "hidden",'
+ ' "sqmodid" FROM "SQUARE" WHERE %s = ANY ("cateid");')
+ sqlarr = (cateid, )
+ cur.execute(sqlstr, sqlarr)
+
+ ret = []
+ for data in cur:
+ obj = {}
+ obj['sqid'] = data[0]
+ obj['title'] = data[1]
+ obj['start_time'] = data[2]
+ obj['end_time'] = data[3]
+ obj['hidden'] = data[4]
+ obj['sqmodid'] = data[5]
+ ret.append(obj)
+
+ return ret
+
+ def _list_square_all(self):
+ cur = self.db.cursor()
+ sqlstr = ('SELECT "sqid", "title", "start_time", "end_time", "hidden",'
+ ' "sqmodid" FROM "SQUARE";')
+ cur.execute(sqlstr)
+
+ ret = []
+ for data in cur:
+ obj = {}
+ obj['sqid'] = data[0]
+ obj['title'] = data[1]
+ obj['start_time'] = data[2]
+ obj['end_time'] = data[3]
+ obj['hidden'] = data[4]
+ obj['sqmodid'] = data[5]
+ ret.append(obj)
+
+ return ret
+
+ @imc.async.caller
+ def create_group():
+ pass
+
+ @imc.async.caller
+ def del_group():
+ pass
+
+ @imc.async.caller
+ def list_group():
+ pass
+
+ @imc.async.caller
+ def group_create_square():
+ pass
+
+ @imc.async.caller
+ def group_remove_square():
+ pass
+
+ @imc.async.caller
+ def group_list_square():
+ pass
+
+ @imc.async.caller
+ def create_category(self, catename):
+ if(
+ type(catename) != str
+ ):
+ return 'Eparameter'
+
+ cateid = self._create_category(catename)
+ return cateid
+
+ @TOJAuth.check_access(_accessid, TOJAuth.ACCESS_CREATE)
+ def _create_category(self, catename):
+ cur = self.db.cursor()
+ sqlstr = ('INSERT INTO "CATEGORY" ("catename") VALUES (%s) RETURNING '
+ '"cateid";')
+ sqlarr = (catename, )
+ cur.execute(sqlstr, sqlarr)
+
+ cateid = None
+ for data in cur:
+ cateid = data[0]
+
+ return cateid
+
+ @imc.async.caller
+ def set_square_category(self, sqid, category):
+ if(
+ type(sqid) != int or
+ type(category) != list
+ ):
+ return 'Eparameter'
+
+ for cateid in category:
+ if(
+ type(cateid) != int
+ ):
+ return 'Eparameter'
+
+ if len(category) > self.SQUARE_CATE_NUM_MAX:
+ return 'Etoo_many_category'
+
+ category = list(set(category))
+
+ if not self.does_sqid_exist(sqid):
+ return 'Eno_such_sqid'
+
+ for cateid in category:
+ if not self.does_cateid_exist(cateid):
+ return 'Eno_such_cateid'
+
+ self._set_square_category(sqid, category)
+
+ def _set_square_category(self, sqid, category):
+ sq_accessid = self.get_accessid_by_sqid(sqid)
+ TOJAuth.check_access_func(sq_accessid, TOJAuth.ACCESS_WRITE)
+
+ cur = self.db.cursor()
+ sqlstr = ('UPDATE "SQUARE" SET "cateid" = %s WHERE "sqid" = %s;')
+ sqlarr = (category, sqid)
+ cur.execute(sqlstr, sqlarr)
+
+ def get_square_info_by_sqid(self, sqid):
+ cur = self.db.cursor()
+ sqlstr = ('SELECT "sqid", "title", "start_time", "end_time", '
+ '"hidden", "sqmodid", "cateid" FROM "SQUARE" WHERE '
+ '"sqid" = %s;')
+ sqlarr = (sqid, )
+ cur.execute(sqlstr, sqlarr)
+
+ ret = None
+ for data in cur:
+ ret = {}
+ ret['sqid'] = data[0]
+ ret['title'] = data[1]
+ ret['start_time'] = data[2]
+ ret['end_time'] = data[3]
+ ret['hidden'] = data[4]
+ ret['sqmodid'] = data[5]
+ ret['cateid'] = data[6]
+
+ return ret
+
+ def does_sqid_exist(self, sqid):
+ ret = self.get_square_info_by_sqid(sqid)
+ return ret != None
+
+ def get_accessid_by_sqid(self, sqid):
+ cur = self.db.cursor()
+ sqlstr = ('SELECT "accessid" FROM "SQUARE" WHERE "sqid" = %s;')
+ sqlarr = (sqid, )
+ cur.execute(sqlstr, sqlarr)
+
+ accessid = None
+ for data in cur:
+ accessid = data[0]
+
+ return accessid
+
+ def get_catename_by_cateid(self, cateid):
+ cur = self.db.cursor()
+ sqlstr = ('SELECT "catename" FROM "CATEGORY" WHERE "cateid" = %s;')
+ sqlarr = (cateid, )
+ cur.execute(sqlstr, sqlarr)
+
+ catename = None
+ for data in cur:
+ catename = data[0]
+
+ return catename
+
+ def does_cateid_exist(self, cateid):
+ catename = self.get_catename_by_cateid(cateid)
+ return catename != None
+
+class Square:
+ pass
+
+class Group:
+ pass