Beispiel #1
0
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)
Beispiel #2
0
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)
Beispiel #3
0
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)