Ejemplo n.º 1
0
    def delete(self, name, rev):
        '''
        Removes a record.
        '''
        with self.session as session:
            query = session.query(AliasRecord)
            query = query.filter(AliasRecord.name == name)

            try:
                record = query.one()
            except NoResultFound as err:
                raise NoRecordFound('no record found')
            except MultipleResultsFound as err:
                raise MultipleRecordsFound('multiple records found')

            if rev != record.rev:
                raise RevisionMismatch('revision mismatch')

            session.delete(record)
Ejemplo n.º 2
0
    def delete(self, name, rev=None):
        """
        Removes a record.
        """
        with self.session as session:
            query = session.query(AliasRecord)
            query = query.filter(AliasRecord.name == name)

            try:
                record = query.one()
            except NoResultFound as err:
                raise NoRecordFound("no record found")
            except MultipleResultsFound as err:
                raise MultipleRecordsFound("multiple records found")

            if rev is not None and rev != record.rev:
                raise RevisionMismatch("revision mismatch")

            session.delete(record)
Ejemplo n.º 3
0
    def upsert(self,
               name,
               rev=None,
               size=None,
               hashes={},
               release=None,
               metastring=None,
               host_authorities=[],
               keeper_authority=None):
        '''
        Updates or inserts a new record.
        '''

        with self.session as session:
            query = session.query(AliasRecord)
            query = query.filter(AliasRecord.name == name)

            try:
                record = query.one()
            except NoResultFound as err:
                record = AliasRecord()
            except MultipleResultsFound as err:
                raise MultipleRecordsFound('multiple records found')

            record.name = name

            if record.rev and rev != record.rev:
                raise RevisionMismatch('revision mismatch')

            if size is not None:
                record.size = size

            if hashes is not None:
                record.hashes = [
                    AliasRecordHash(
                        name=record,
                        hash_type=h,
                        hash_value=v,
                    ) for h, v in hashes.items()
                ]

            if release is not None:
                record.release = release

            if metastring is not None:
                record.metastring = metastring

            if host_authorities is not None:
                record.host_authorities = [
                    AliasRecordHostAuthority(
                        name=name,
                        host=host,
                    ) for host in host_authorities
                ]

            if keeper_authority is not None:
                record.keeper_authority = keeper_authority

            record.rev = str(uuid.uuid4())[:8]

            session.add(record)

            return record.name, record.rev