class UserService: def __init__(self): self.global_model_dao = GlobalModelDAO() self.local_model_dao = LocalModelDAO() self.session_dao = SessionDAO() self.user_dao = UserDAO() def create_user(self, email, password, name="default"): user_po = po_creator.create_user_po() user_po.pop("_id") user_po.update({'email': email, 'password': password, 'name': name}) return self.user_dao.insert_one(user_po) @check_session def remove_user(self, session_id, user_id): return self.user_dao.delete_one_by_id(user_id) def update_user(self, session_id, user_id, email=None, password=None, name=None): user_po = self.user_dao.find_one_by_id(user_id) user_po.update({ 'email': email if email else user_po['email'], 'password': email if password else user_po['password'], 'name': email if name else user_po['name'], }) return self.user_dao.replace_one_by_id(user_id, user_po) def find_one_user_by_id(self, session_id): user_id = self.session_dao.find_one_by_id(session_id)['user_id'] return self.user_dao.find_one_by_id(user_id) def create_session(self, user_id, password): user_po = self.user_dao.find_one_by_id(user_id) if not user_po['password'] == password: return None session_po = po_creator.create_session_po() session_po.pop('_id') session_po.update({'user_id': user_id, 'created_time': time.time()}) inserted_id = self.session_dao.inert_one(session_po) return inserted_id def find_one_session_by_id(self, session_id): return self.session_dao.find_one_by_id(session_id)
class GlobalModelService: def __init__(self): self.global_model_dao = GlobalModelDAO() self.local_model_dao = LocalModelDAO() self.session_dao = SessionDAO() self.user_dao = UserDAO() def create_global_model(self, session_id, name="default", version="0", type="default", status="default", description="default"): user_id = self.session_dao.find_one_by_id(session_id).get('user_id') if not user_id: return None global_model_po = po_creator.create_global_model_po() global_model_po.pop("_id", None) global_model_po.update({ "name": name, "version": version, "type": type, "status": status, "description": description }) global_model_id = self.global_model_dao.insert_one(global_model_po) user_po = self.user_dao.find_one_by_id(user_id) user_po['global_model_ids'].append(global_model_id) self.user_dao.replace_one_by_id(user_id, user_po) return global_model_id def update_global_model(self, session_id, global_model_id, name=None, version=None, type=None, status=None, description=None): user_id = self.session_dao.find_one_by_id(session_id).get('user_id') if not user_id: return None if global_model_id not in self.user_dao.find_one_by_id( user_id)['global_model_ids']: return None global_model_po = self.global_model_dao.find_one_by_id(global_model_id) global_model_po.update({ "name": name if name else global_model_po.name, "version": version if version else global_model_po.version, "type": type if type else global_model_po.type, "status": status if status else global_model_po.status, "description": description if description else global_model_po.description, }) return self.global_model_dao.replace_one_by_id(global_model_id, global_model_po) def find_one_global_models_by_id(self, session_id, global_model_id): user_id = self.session_dao.find_one_by_id(session_id).get('user_id') if not user_id: return None global_model = self.global_model_dao.find_one_by_id(global_model_id) global_model = json_util.dumps(global_model) return global_model @check_session def find_all_global_models(self, session_id): global_model_pos = self.global_model_dao.find_many_by_criteria({}) global_model_pos = json_util.dumps(global_model_pos) return global_model_pos def remove_global_model(self, session_id, global_model_id): user_id = self.session_dao.find_one_by_id(session_id)['user_id'] if global_model_id in self.user_dao.find_one_by_id( user_id)["global_model_ids"]: user_po = self.user_dao.find_one_by_id("user_id") user_po['global_model_ids'].pop(global_model_id) self.user_dao.replace_one_by_id(user_id, user_po) global_model_po = self.global_model_dao.find_one_by_id( global_model_id) local_model_ids = global_model_po['local_model_ids'] for local_model_id in local_model_ids: self.local_model_dao.delete_one_by_id(local_model_id) self.global_model_dao.delete_one_by_id(global_model_id) else: return None def insert_subscribe_global_model(self, session_id, global_model_id, address, condition): user_id = self.session_dao.find_one_by_id(session_id)['user_id'] if not user_id: return None global_model = self.global_model_dao.find_one_by_id(global_model_id) return self.global_model_dao.replace_one_by_id(global_model_id, global_model) def remove_subscribe_global_model(self, session_id, global_model_id, address, condition): user_id = self.session_dao.find_one_by_id(session_id)['user_id'] if not user_id: return None global_model = self.global_model_dao.find_one_by_id(global_model_id) global_model['subscriptions'].remove({ "user_id": user_id, "address": address, "condition": condition }) return self.global_model_dao.replace_one_by_id(global_model_id, global_model) def insert_label_global_model(self, session_id, global_model_id, key, value): user_id = self.session_dao.find_one_by_id(session_id)['user_id'] if global_model_id not in self.user_dao.find_one_by_id(user_id): return None global_model = self.global_model_dao.find_one_by_id(global_model_id) global_model['labels'][key] = value return self.global_model_dao.replace_one_by_id(global_model_id, global_model) def remove_label_global_model(self, session_id, global_model_id, key): user_id = self.session_dao.find_one_by_id(session_id)['user_id'] if global_model_id not in self.user_dao.find_one_by_id(user_id): return None global_model = self.global_model_dao.find_one_by_id(global_model_id) global_model['labels'].pop(key) return self.global_model_dao.replace_one_by_id(global_model_id, global_model) def upload_global_model_file(self, session_id, global_model_id, file_upload): file = file_upload.file user_id = self.session_dao.find_one_by_id(session_id)['user_id'] if not user_id: return None file_id = self.global_model_dao.insert_file_one(file) global_model = self.global_model_dao.find_one_by_id(global_model_id) global_model['file_id'] = file_id self.global_model_dao.replace_one_by_id(global_model_id, global_model) return file_id def download_global_model_file(self, session_id, global_model_id): user_id = self.session_dao.find_one_by_id(session_id)['user_id'] if not user_id: return None file_id = self.global_model_dao.find_one_by_id( global_model_id)['file_id'] return self.global_model_dao.find_file_one_by_id(file_id)
class LocalModelService: def __init__(self): self.global_model_dao = GlobalModelDAO() self.local_model_dao = LocalModelDAO() self.session_dao = SessionDAO() self.user_dao = UserDAO() def create_local_model(self, session_id, global_model_id, message="default"): user_id = self.session_dao.find_one_by_id(session_id).get('user_id') if not user_id: return None local_model_po = po_creator.create_local_model_po() local_model_po.pop("_id") local_model_po.update({ "message": message }) local_model_id = self.local_model_dao.insert_one(local_model_po) global_model = self.global_model_dao.find_one_by_id(global_model_id) global_model['local_model_ids'].append(local_model_id) self.global_model_dao.replace_one_by_id(global_model_id, global_model) user_po = self.user_dao.find_one_by_id(user_id) user_po['local_model_ids'].append(local_model_id) self.user_dao.replace_one_by_id(user_id, user_po) return local_model_id def remove_local_model(self, session_id, local_model_id): user_id = self.session_dao.find_one_by_id(session_id).get('user_id') if not user_id: return None result = self.local_model_dao.delete_one_by_id(local_model_id) global_model_po = self.global_model_dao.find_one_by_local_model_id(local_model_id)['local_model_ids'] global_model_po.pop( local_model_id) self.global_model_dao.replace_one_by_id(global_model_po['_id'], global_model_po) user_po = self.user_dao.find_one_by_id(user_id) user_po['local_model_ids'].pop(local_model_id) self.user_dao.replace_one_by_id(user_id, user_po) return result @check_session def find_one_local_model_by_id(self, session_id, local_model_id): return self.local_model_dao.find_one_by_id(local_model_id) @check_session def find_all_local_models_by_global_model_id(self, session_id, global_model_id): local_model_ids = self.global_model_dao.find_one_by_id(global_model_id)['local_model_ids'] return self.local_model_dao.find_many_by_criteria({"_id": {"$in": local_model_ids}}) @check_session def insert_label_local_model(self, session_id, local_model_id, key, value): local_model_po = self.local_model_dao.find_one_by_id(local_model_id) local_model_po['labels'][key] = value return self.local_model_dao.replace_one_by_id(local_model_id, local_model_po) @check_session def remove_label_local_model(self, session_id, local_model_id, key): local_model_po = self.local_model_dao.find_one_by_id(local_model_id) local_model_po['labels'].pop(key) return self.local_model_dao.replace_one_by_id(local_model_id, local_model_po) @check_session def upload_local_model_file(self, session_id, local_model_id, file_upload): file = file_upload.file file_id = self.local_model_dao.insert_file_one(file) local_model_po = self.local_model_dao.find_one_by_id(local_model_id) local_model_po['file_id'] = file_id self.local_model_dao.replace_one_by_id(local_model_id, local_model_po) return file_id @check_session def download_local_model_file(self, session_id, local_model_id): file_id = self.local_model_dao.find_one_by_id(local_model_id)['file_id'] return self.local_model_dao.find_file_one_by_id(file_id)