def update_mapping(self, uuid, **kwargs): session = db.get_session() try: with session.begin(): q = session.query(models.HashMapMapping) q = q.filter(models.HashMapMapping.mapping_id == uuid) mapping_db = q.with_lockmode('update').one() if kwargs: # NOTE(sheeprine): We want to check that value is not set # to a None value. if mapping_db.field_id and not kwargs.get('value', 'GOOD'): raise api.ClientHashMapError('You must specify a value' ' for a field mapping.') # Resolve FK if 'group_id' in kwargs: group_id = kwargs.pop('group_id') if group_id: group_db = self.get_group(group_id) mapping_db.group_id = group_db.id # Service and Field shouldn't be updated excluded_cols = ['mapping_id', 'service_id', 'field_id'] for col in excluded_cols: if col in kwargs: kwargs.pop(col) for attribute, value in six.iteritems(kwargs): if hasattr(mapping_db, attribute): setattr(mapping_db, attribute, value) else: raise api.ClientHashMapError( 'No such attribute: {}'.format(attribute)) else: raise api.ClientHashMapError('No attribute to update.') return mapping_db except sqlalchemy.orm.exc.NoResultFound: raise api.NoSuchMapping(uuid)
def delete_mapping(self, uuid): session = db.get_session() q = utils.model_query(models.HashMapMapping, session) q = q.filter(models.HashMapMapping.mapping_id == uuid) r = q.delete() if not r: raise api.NoSuchMapping(uuid)
def update_mapping(self, uuid, **kwargs): session = db.get_session() try: with session.begin(): q = session.query(models.HashMapMapping) q = q.filter(models.HashMapMapping.mapping_id == uuid) mapping_db = q.with_lockmode('update').one() if kwargs: # Resolve FK if 'group_id' in kwargs: group_id = kwargs.pop('group_id') if group_id: group_db = self.get_group(group_id) mapping_db.group_id = group_db.id # Service and Field shouldn't be updated excluded_cols = ['mapping_id', 'service_id', 'field_id'] for col in excluded_cols: if col in kwargs: kwargs.pop(col) for attribute, value in six.iteritems(kwargs): if hasattr(mapping_db, attribute): setattr(mapping_db, attribute, value) else: raise ValueError( 'No such attribute: {}'.format(attribute)) else: raise ValueError('No attribute to update.') return mapping_db except sqlalchemy.orm.exc.NoResultFound: raise api.NoSuchMapping(uuid)
def get_mapping(self, uuid): session = db.get_session() try: q = session.query(models.HashMapMapping) q = q.filter(models.HashMapMapping.mapping_id == uuid) res = q.one() return res except sqlalchemy.orm.exc.NoResultFound: raise api.NoSuchMapping(uuid)