예제 #1
0
    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
예제 #2
0
    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
예제 #3
0
    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
예제 #4
0
    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
예제 #5
0
파일: model.py 프로젝트: Nivola/beehive
    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