def remove_entity(self, entityclass, *args, **kvargs): """Remove entity. :param entityclass: entity model class :param args: positional args :param kvargs: date to update. [optional] :param kvargs.oid: database id [optional] :param kvargs.uuid: unique id [optional] :return: entity oid :raises TransactionError: raise :class:`TransactionError` """ session = self.get_session() # get entity query = self.query_entities(entityclass, session, **kvargs) # check entity exists entity = query.first() if entity is None: msg = 'No %s found' % entityclass.__name__ self.logger.error(msg) raise ModelError(msg, code=404) # delete entity session.delete(entity) self.logger.debug2('Remove %s %s' % (entityclass.__name__, entity.id)) return entity.id
def update_entity(self, entityclass, *args, **kvargs): """Update entity. :param entityclass: entity model class :param args: positional args :param kvargs: date to update. [optional] :param kvargs.oid: database id [optional] :param kvargs.uuid: unique id [optional] :return: entity oid :raises TransactionError: raise :class:`TransactionError` """ session = self.get_session() # get entity oid = kvargs.pop('oid', None) uuid = kvargs.pop('uuid', None) if oid is not None: query = self.query_entities(entityclass, session, oid=oid) elif uuid is not None: query = self.query_entities(entityclass, session, uuid=uuid) oid = uuid else: raise ModelError('Neither oid nor uuid are been specified', code=400) # check entity exists entity = query.first() if entity is None: msg = 'No %s found' % entityclass.__name__ self.logger.error(msg) raise ModelError(msg, code=404) params = {} for k, v in kvargs.items(): if v is not None: params[k] = v # if v is None: # kvargs.pop(k) # create data dict with update if getattr(entityclass, 'modification_date', None) is not None: kvargs['modification_date'] = datetime.today() query.update(kvargs) session.flush() self.logger.debug2('Update %s %s with data: %s' % (entityclass.__name__, oid, kvargs)) return oid
def query_entities(self, entityclass, session, oid=None, objid=None, uuid=None, name=None, *args, **kvargs): """Get model entities query :param entityclass: entity model class :param session: db session :param int oid: entity id. [optional] :param str objid: entity authorization id. [optional] :param str uuid: entity uuid. [optional] :param str name: entity name. [optional] :return: list of entityclass :raises ModelError: raise :class:`ModelError` """ #session = self.get_session() if oid is not None: query = session.query(entityclass).filter_by(id=oid) elif objid is not None: query = session.query(entityclass).filter_by(objid=objid) elif uuid is not None: query = session.query(entityclass).filter_by(uuid=uuid) elif name is not None: query = session.query(entityclass).filter_by(name=name) else: query = session.query(entityclass) entity = query.first() if entity is None: msg = u'No %s found' % entityclass.__name__ self.logger.error(msg) raise ModelError(msg, code=404) self.logger.debug(u'Get %s: %s' % (entityclass.__name__, truncate(entity))) return entity
def remove_entity(self, entityclass, *args, **kvargs): """Remove entity. :param entityclass: entity model class :param int oid: entity id. [optional] :param str objid: entity authorization id. [optional] :param str uuid: entity uuid. [optional] :param str name: entity name. [optional] :return: entity :raises TransactionError: raise :class:`TransactionError` """ session = self.get_session() # get entity query = self.query_entities(entityclass, session, **kvargs) # delete entity entity = query.first() session.delete(entity) self.logger.debug(u'Remove %s %s' % (entityclass.__name__, entity.id)) return entity.id
def get_event(self, oid): """Method used by authentication manager :param oid: can be db id or event_id :return: DbEvent instance """ session = self.get_session() # get obj by uuid if match('[0-9a-z]+', str(oid)): query = session.query(DbEvent).filter_by(event_id=oid) # get obj by id elif match('[0-9]+', str(oid)): query = session.query(DbEvent).filter_by(id=oid) entity = query.first() if entity is None: msg = 'No event found' self.logger.error(msg) raise ModelError(msg, code=404) self.logger.debug('Get event: %s' % (truncate(entity))) return entity