class UserService(): def __init__(self): """Arguments: name -- string type item_id -- BSON ObjectId type """ self.dao = UserDao() self.roles = ['Admin', 'User'] self.titles = ['Project Manager', 'Team Lead', 'Developer', 'Tester'] # The order should confirm with users.html def get_role(self, role): if role < len(self.roles): return self.roles[role] else: return 'None' def get_title(self, title): if title < len(self.titles): return self.titles[title] else: return 'None' def get_user(self, sid): """ Argument: sid -- string type """ if sid != '': oid = ObjectId(sid) user = self.dao.find_one({'_id':oid}) return {'id':str(user['_id']), 'username':user['username'], 'email':user['email'], 'phone':user['phone'], 'created':user['created'], 'role':self.get_role(user['role']), 'title':self.get_title(user['title'])} else: return None def delete_user(self, sid): if sid != '': oid = ObjectId(sid) self.dao.remove({'_id':oid}) def get_users(self, query={}): """ Get the users for rendering the html """ users = self.dao.find(query) if users is not None: _users = [] for user in users: _users.append({'id':str(user['_id']), 'username':user['username'], 'email':user['email'], 'role':self.get_role(user['role']), 'title':self.get_title(user['title'])}) return _users else: return [] def save_user(self, user, mode): """ Arguments: user -- dictionary type Return: The '_id' value of to_save or [None] if manipulate is False and to_save has no _id field. """ _dict = dict(user) # Clone user is a must if '_id' in _dict: del _dict['_id'] if mode == Mode.EDIT: if 'id' in user.keys(): _dict['_id'] = user['id'] else: _dict['created'] = time.time() return self.dao.save(_dict) def login(self, account, password, remember_me=False): """ Arguments: account: string type, can be username or email address password: string type Return True if the log in attempt succeeds, otherwise Error code """ user = self.dao.find_one({'$or':[{'email':account}, {'username':account}]}) if user is None: return LoginError.USER_NOT_EXIT else: if user['password'] == password: login_user(User(user), remember=remember_me) return LoginError.NO_ERROR else: return LoginError.WRONG_PASSWORD