コード例 #1
0
 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))
コード例 #2
0
ファイル: base.py プロジェクト: biruce-openstack/neutron
    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()
コード例 #3
0
 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)
コード例 #4
0
 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)
コード例 #5
0
ファイル: base.py プロジェクト: zainubwahid/neutron
    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)
コード例 #6
0
ファイル: base.py プロジェクト: sebrandon1/neutron
    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)
コード例 #7
0
 def test_not_a_model(self):
     self.assertEqual([], model_base.get_unique_keys(None))
コード例 #8
0
 def test_not_a_model(self):
     self.assertEqual([], model_base.get_unique_keys(None))
コード例 #9
0
 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))