def test_without_unique_constraints(self): model = mock.Mock() metadata = sa.MetaData() model.__table__ = sa.Table("test_table", metadata, sa.Column("a", sa.Integer), sa.Column("b", sa.Integer)) self.assertEqual([], model_base.get_unique_keys(model))
def __init__(cls, name, bases, dct): super(DeclarativeObject, cls).__init__(name, bases, dct) for base in itertools.chain([cls], bases): if hasattr(base, 'primary_keys'): cls.fields_no_update += base.primary_keys # avoid duplicate entries cls.fields_no_update = list(set(cls.fields_no_update)) # generate unique_keys from the model model = getattr(cls, 'db_model', None) if model and not getattr(cls, 'unique_keys', None): cls.unique_keys = [] obj_field_names = set(cls.fields.keys()) model_to_obj_translation = { v: k for (k, v) in cls.fields_need_translation.items()} for model_unique_key in model_base.get_unique_keys(model): obj_unique_key = [model_to_obj_translation.get(key, key) for key in model_unique_key] if obj_field_names.issuperset(obj_unique_key): cls.unique_keys.append(obj_unique_key) if (hasattr(cls, 'has_standard_attributes') and cls.has_standard_attributes()): standardattributes.add_standard_attributes(cls) # Instantiate extra filters per class cls.extra_filter_names = set()
def test_with_unique_constraints(self): model = mock.Mock() metadata = sa.MetaData() model.__table__ = sa.Table("test_table", metadata, sa.Column("a", sa.Integer, unique=True), sa.Column("b", sa.Integer), sa.Column("c", sa.Integer), sa.Column("d", sa.Integer), sa.UniqueConstraint("c", "d")) expected = {("a", ), ("c", "d")} observed = { tuple(sorted(key)) for key in model_base.get_unique_keys(model) } self.assertEqual(expected, observed)
def test_with_unique_constraints(self): model = mock.Mock() metadata = sa.MetaData() model.__table__ = sa.Table( "test_table", metadata, sa.Column("a", sa.Integer, unique=True), sa.Column("b", sa.Integer), sa.Column("c", sa.Integer), sa.Column("d", sa.Integer), sa.UniqueConstraint("c", "d"), ) expected = {("a",), ("c", "d")} observed = {tuple(sorted(key)) for key in model_base.get_unique_keys(model)} self.assertEqual(expected, observed)
def __init__(cls, name, bases, dct): super(DeclarativeObject, cls).__init__(name, bases, dct) if 'project_id' in cls.fields: obj_extra_fields_set = set(cls.obj_extra_fields) obj_extra_fields_set.add('tenant_id') cls.obj_extra_fields = list(obj_extra_fields_set) setattr(cls, 'tenant_id', property(lambda x: x.get('project_id', None))) fields_no_update_set = set(cls.fields_no_update) for base in itertools.chain([cls], bases): keys_set = set() if hasattr(base, 'primary_keys'): keys_set.update(base.primary_keys) if hasattr(base, 'obj_extra_fields'): keys_set.update(base.obj_extra_fields) for key in keys_set: if key in cls.fields or key in cls.obj_extra_fields: fields_no_update_set.add(key) cls.fields_no_update = list(fields_no_update_set) model = getattr(cls, 'db_model', None) if model: # generate unique_keys from the model if not getattr(cls, 'unique_keys', None): cls.unique_keys = [] obj_field_names = set(cls.fields.keys()) model_to_obj_translation = { v: k for (k, v) in cls.fields_need_translation.items() } for model_unique_key in model_base.get_unique_keys(model): obj_unique_key = [ model_to_obj_translation.get(key, key) for key in model_unique_key ] if obj_field_names.issuperset(obj_unique_key): cls.unique_keys.append(obj_unique_key) # detach db_obj right after object is loaded from the model cls.create = _detach_db_obj(cls.create) cls.update = _detach_db_obj(cls.update) if (hasattr(cls, 'has_standard_attributes') and cls.has_standard_attributes()): standardattributes.add_standard_attributes(cls) # Instantiate extra filters per class cls.extra_filter_names = set(cls.extra_filter_names)
def __init__(cls, name, bases, dct): super(DeclarativeObject, cls).__init__(name, bases, dct) if 'project_id' in cls.fields: obj_extra_fields_set = set(cls.obj_extra_fields) obj_extra_fields_set.add('tenant_id') cls.obj_extra_fields = list(obj_extra_fields_set) setattr(cls, 'tenant_id', property(lambda x: x.get('project_id', None))) fields_no_update_set = set(cls.fields_no_update) for base in itertools.chain([cls], bases): keys_set = set() if hasattr(base, 'primary_keys'): keys_set.update(base.primary_keys) if hasattr(base, 'obj_extra_fields'): keys_set.update(base.obj_extra_fields) for key in keys_set: if key in cls.fields or key in cls.obj_extra_fields: fields_no_update_set.add(key) cls.fields_no_update = list(fields_no_update_set) model = getattr(cls, 'db_model', None) if model: # generate unique_keys from the model if not getattr(cls, 'unique_keys', None): cls.unique_keys = [] obj_field_names = set(cls.fields.keys()) model_to_obj_translation = { v: k for (k, v) in cls.fields_need_translation.items()} for model_unique_key in model_base.get_unique_keys(model): obj_unique_key = [model_to_obj_translation.get(key, key) for key in model_unique_key] if obj_field_names.issuperset(obj_unique_key): cls.unique_keys.append(obj_unique_key) # detach db_obj right after object is loaded from the model cls.create = _detach_db_obj(cls.create) cls.update = _detach_db_obj(cls.update) if (hasattr(cls, 'has_standard_attributes') and cls.has_standard_attributes()): standardattributes.add_standard_attributes(cls) # Instantiate extra filters per class cls.extra_filter_names = set(cls.extra_filter_names)
def test_not_a_model(self): self.assertEqual([], model_base.get_unique_keys(None))