コード例 #1
0
    def test_match_many_to_many(self):

        from cocktail.schema import Schema, Reference, Collection
        from cocktail.schema.exceptions import SchemaIntegrityError

        a = Schema("a")
        b = Schema("b")

        a.add_member(
            Collection("rel_b", items=Reference(type=b), bidirectional=True))
        b.add_member(
            Collection("rel_a", items=Reference(type=a), bidirectional=True))

        self.assertTrue(a["rel_b"].related_end is b["rel_a"])
        self.assertTrue(a["rel_b"].related_type is b)
        self.assertTrue(b["rel_a"].related_end is a["rel_b"])
        self.assertTrue(b["rel_a"].related_type is a)
コード例 #2
0
    def test_max(self):

        from cocktail.schema import Collection, exceptions

        self._test_validation(
            Collection(max=3, required=False),
            [None, [], ["a"], (1, 2), set([1, 2, 3])],
            [["a", "b", "c", "d"], list(range(10))], exceptions.MaxItemsError)
コード例 #3
0
    def test_min(self):

        from cocktail.schema import Collection, exceptions

        self._test_validation(
            Collection(min=3, required=False),
            [None, [1, 2, 3], ["a", "b", "c", "d"],
             list(range(50))], [[], ["a"], [1, 2]], exceptions.MinItemsError)
コード例 #4
0
    def test_items(self):

        from cocktail.schema import Collection, Integer, exceptions

        self._test_validation(
            Collection(items=Integer(), required=False),
            [None, [], [1], [1, 2],
             set([1, 2, 3]),
             tuple(range(10))], [["a", "b", "c"], [3.5, 2.7, 1.4]],
            exceptions.TypeCheckError,
            error_count=3)
コード例 #5
0
        class Document(PersistentObject):
            parent = Reference(
                bidirectional = True,
                related_key = "children"
            )
            children = Collection(
                bidirectional = True,
                related_key = "parent"
            )

            extension = Reference(
                bidirectional = True,
                related_key = "extended"
            )
            extended = Reference(
                bidirectional = True,
                related_key = "extension"
            )

            improvement = Reference()
            related_documents = Collection()
コード例 #6
0
 def relation_selection(self):
     member = self.relation_member
     value = get_parameter(
         Collection(
             name = "relation_selection-" + member.name,
             items = Reference(type = member.related_type)
         )
     )
     if not value:
         return []
     else:
         enum = frozenset(self.stack_node.form_data.get(member.name))
         return [item for item in value if item in enum]
コード例 #7
0
    def get_schema(self):

        from cocktail.schema import Schema, Reference, Collection

        schema = Schema()

        schema.add_member(Reference("parent", type=schema, bidirectional=True))

        schema.add_member(
            Collection("children",
                       items=Reference(type=schema),
                       bidirectional=True))

        return schema
コード例 #8
0
    def test_new_related_collection_many_to_many(self):

        from cocktail.schema import SchemaObject, Reference, Collection

        class Foo(SchemaObject):
            pass

        backref = Collection()

        class Bar(SchemaObject):
            foo = Collection(items=Reference(type=Foo), related_end=backref)

        self.assertTrue(backref.schema is Foo)
        self.assertTrue(backref.name)
        self.assertTrue(getattr(Foo, backref.name) is backref)
        self.assertTrue(Bar.foo.bidirectional)
        self.assertTrue(backref.bidirectional)
        self.assertTrue(isinstance(backref.items, Reference))
        self.assertTrue(backref.items.type is Bar)
        self.assertTrue(Bar.foo.related_end is backref)
コード例 #9
0
    def test_one_to_many(self):

        from cocktail.schema import SchemaObject, Reference, Collection
        from cocktail.schema.exceptions import SchemaIntegrityError

        class Foo(SchemaObject):
            pass

        class Bar(SchemaObject):
            pass

        Foo.add_member(Reference("bar", type=Bar, bidirectional=True))
        Bar.add_member(
            Collection("foos", items=Reference(type=Foo), bidirectional=True))

        foo = Foo()
        bar = Bar()
        foo.bidirectional = False
        foo.bar = bar

        self.assertTrue(foo.bar is bar)
        self.assertFalse(bar.foos)

        bar.foos = [foo]
        self.assertEqual(bar.foos, [foo])
        self.assertTrue(foo.bar is bar)

        foo.bidirectional = True
        foo.bar = None
        self.assertTrue(foo.bar is None)
        self.assertFalse(bar.foos)

        bar.bidirectional = False
        bar.foos = [foo]
        self.assertEqual(bar.foos, [foo])
        self.assertTrue(foo.bar is None)
コード例 #10
0
 class Foo(PersistentObject):
     bar = Collection(bidirectional=True)
コード例 #11
0
 class Foo(PersistentObject):
     bar = Collection()
コード例 #12
0
 def selection(self):
     return self.params.read(
         Collection("selection", items = Reference(type = Item))
     )
コード例 #13
0
 class Container(SchemaObject):
     components = Collection(bidirectional=True, integral=True)
コード例 #14
0
 class Component(SchemaObject):
     containers = Collection(bidirectional=True)
コード例 #15
0
 class TestObject(PersistentObject):
     collection = Collection(cascade_delete=True)
コード例 #16
0
 class TestObject(PersistentObject):
     collection = Collection()
コード例 #17
0
        class TestObject(PersistentObject):
            collection = Collection(cascade_delete=True)

            def _should_cascade_delete_member(self, member):
                return False
コード例 #18
0
 class Bar(SchemaObject):
     foos = Collection(bidirectional=True)
コード例 #19
0
    def test_collection_relation_constraints(self):

        from cocktail.schema import Collection, Integer, exceptions, get

        foreign_field = Integer("foo")

        collection = Collection(relation_constraints=[
            foreign_field.not_equal(None),
            foreign_field.greater(3),
            foreign_field.lower(8),
            lambda owner, related: get(related, "foo", None) is None or get(
                related, "foo", None) % 5 != 0
        ])

        self._test_validation(collection, [[], [None], [{
            "foo": 4
        }, {
            "foo": 6
        }], [{
            "foo": 4
        }, {
            "foo": 7
        }]])

        self._test_validation(
            collection,
            None,
            [[{}], [{
                "foo": None
            }], [{
                "foo": 6
            }, {}]],
            exceptions.RelationConstraintError,
            error_count=2  # Note that x > None is always True
        )

        self._test_validation(
            collection,
            None, [[{
                "foo": -6
            }, {
                "foo": 1
            }, {
                "foo": 3
            }]],
            exceptions.RelationConstraintError,
            {"constraint": collection.relation_constraints[1]},
            error_count=3)

        self._test_validation(
            collection,
            None, [[{
                "foo": 8
            }, {
                "foo": 12
            }, {
                "foo": 134
            }]],
            exceptions.RelationConstraintError,
            {"constraint": collection.relation_constraints[2]},
            error_count=3)

        self._test_validation(
            collection, None, [[{
                "foo": 5
            }]], exceptions.RelationConstraintError,
            {"constraint": collection.relation_constraints[3]})
コード例 #20
0
 class Bar(SchemaObject):
     foo = Collection(items=Reference(type=Foo), related_end=backref)
コード例 #21
0
 class TestObject(PersistentObject):
     test_field = String(unique=True, indexed=True)
     test_ref = Reference()
     test_collection = Collection()
     test_translated_field = String(indexed=True, translated=True)
コード例 #22
0
 class Foo(SchemaObject):
     bars = Collection(bidirectional=True)
コード例 #23
0
        class TestObject(PersistentObject):

            parent = Reference(bidirectional=True)

            collection = Collection(cascade_delete=True, bidirectional=True)