Ejemplo n.º 1
0
    def test_unique_indexes(self, unique_field):
        @self.instance.register
        class NestedDoc(EmbeddedDocument):
            simple = fields.StrField(unique=True)

        u_field, index = {
            "nested": (
                fields.EmbeddedField(NestedDoc),
                IndexModel([('field.simple', ASCENDING)],
                           unique=True,
                           sparse=True),
            ),
            "list": (
                fields.ListField(fields.EmbeddedField(NestedDoc)),
                IndexModel([('field.simple', ASCENDING)],
                           unique=True,
                           sparse=True),
            ),
        }[unique_field]

        @self.instance.register
        class Doc(Document):
            field = u_field

        assert_indexes(Doc.opts.indexes, [index])
Ejemplo n.º 2
0
 def test_parse_index(self):
     for value, expected in (
         ('my_index', IndexModel([('my_index', ASCENDING)])),
         ('+my_index', IndexModel([('my_index', ASCENDING)])),
         ('-my_index', IndexModel([('my_index', DESCENDING)])),
         ('$my_index', IndexModel([('my_index', TEXT)])),
         ('#my_index', IndexModel([('my_index', HASHED)])),
             # Compound indexes
         (('index1', '-index2'),
          IndexModel([('index1', ASCENDING), ('index2', DESCENDING)])),
             # No changes if not needed
         (IndexModel([('my_index', ASCENDING)]),
          IndexModel([('my_index', ASCENDING)])),
             # Custom index
         ({
             'name': 'my-custom-index',
             'key': ['+index1', '-index2'],
             'sparse': True,
             'unique': True,
             'expireAfterSeconds': 42
         },
          IndexModel([('index1', ASCENDING), ('index2', DESCENDING)],
                     name='my-custom-index',
                     sparse=True,
                     unique=True,
                     expireAfterSeconds=42)),
     ):
         assert_indexes(parse_index(value), expected)
Ejemplo n.º 3
0
    def test_nested_indexes(self):
        """Test multikey indexes

        Note: umongo does not check that indexes entered in Meta match existing fields
        """
        @self.instance.register
        class Doc(Document):
            class Meta:
                indexes = [
                    'parent',
                    'parent.child',
                    'parent.child.grandchild',
                ]

        assert_indexes(Doc.opts.indexes, [
            IndexModel([('parent', ASCENDING)]),
            IndexModel([('parent.child', ASCENDING)]),
            IndexModel([('parent.child.grandchild', ASCENDING)]),
        ])
Ejemplo n.º 4
0
    def test_inheritance(self):
        class Parent(Document):
            last_name = fields.StrField()

            class Meta:
                allow_inheritance = True
                indexes = ['last_name']

        class Child(Parent):
            first_name = fields.StrField()

            class Meta:
                indexes = ['-first_name']

        assert_indexes(Parent.opts.indexes,
                       [IndexModel([('last_name', ASCENDING)])])
        assert_indexes(Child.opts.indexes, [
            IndexModel([('last_name', ASCENDING)]),
            IndexModel([('first_name', DESCENDING), ('_cls', ASCENDING)]),
            IndexModel([('_cls', ASCENDING)])
        ])
Ejemplo n.º 5
0
    def test_nested_indexes(self):
        class NestedDoc(EmbeddedDocument):
            simple = fields.StrField()
            listed = fields.ListField(fields.StrField())

        class Doc(Document):
            nested = fields.EmbeddedField(NestedDoc)
            listed = fields.ListField(fields.EmbeddedField(NestedDoc))

            class Meta:
                indexes = [
                    'nested', 'nested.simple', 'listed', 'listed.simple',
                    'listed.listed'
                ]

        assert_indexes(Doc.opts.indexes, [
            IndexModel([('nested', ASCENDING)]),
            IndexModel([('nested.simple', ASCENDING)]),
            IndexModel([('listed', ASCENDING)]),
            IndexModel([('listed.simple', ASCENDING)]),
            IndexModel([('listed.listed', ASCENDING)]),
        ])
Ejemplo n.º 6
0
    def test_inheritance(self):
        @self.instance.register
        class Parent(Document):
            last_name = fields.StrField()

            class Meta:
                indexes = ['last_name']

        @self.instance.register
        class Child(Parent):
            first_name = fields.StrField()

            class Meta:
                indexes = ['-first_name']

        assert_indexes(Parent.indexes,
                       [IndexModel([('last_name', ASCENDING)])])
        assert_indexes(Child.indexes, [
            IndexModel([('last_name', ASCENDING)]),
            IndexModel([('first_name', DESCENDING), ('_cls', ASCENDING)]),
            IndexModel([('_cls', ASCENDING)])
        ])