コード例 #1
0
ファイル: staging.py プロジェクト: b8va/everest
 def remove(self, entity):
     trv = SourceTargetDataTreeTraverser.make_traverser(
                                             None,
                                             entity,
                                             RELATION_OPERATIONS.REMOVE,
                                             accessor=self)
     trv.run(self.__visitor)
コード例 #2
0
ファイル: staging.py プロジェクト: papagr/everest
 def remove(self, entity):
     trv = SourceTargetDataTreeTraverser.make_traverser(
                                             None,
                                             entity,
                                             RELATION_OPERATIONS.REMOVE,
                                             accessor=self)
     trv.run(self.__visitor)
コード例 #3
0
ファイル: staging.py プロジェクト: b8va/everest
 def add(self, entity):
     trv = SourceTargetDataTreeTraverser.make_traverser(
                                             entity,
                                             None,
                                             RELATION_OPERATIONS.ADD,
                                             accessor=self)
     trv.run(self.__visitor)
コード例 #4
0
ファイル: staging.py プロジェクト: papagr/everest
 def add(self, entity):
     trv = SourceTargetDataTreeTraverser.make_traverser(
                                             entity,
                                             None,
                                             RELATION_OPERATIONS.ADD,
                                             accessor=self)
     trv.run(self.__visitor)
コード例 #5
0
ファイル: staging.py プロジェクト: b8va/everest
 def update(self, entity, target=None):
     trv = SourceTargetDataTreeTraverser.make_traverser(
                                             entity,
                                             target,
                                             RELATION_OPERATIONS.UPDATE,
                                             accessor=self)
     trv.run(self.__visitor)
     return self.__visitor.root
コード例 #6
0
ファイル: staging.py プロジェクト: papagr/everest
 def update(self, entity, target=None):
     trv = SourceTargetDataTreeTraverser.make_traverser(
                                             entity,
                                             target,
                                             RELATION_OPERATIONS.UPDATE,
                                             accessor=self)
     trv.run(self.__visitor)
     return self.__visitor.root
コード例 #7
0
 def test_make_traverser_update(self):
     ent0 = create_entity(entity_id=0)
     ent1 = create_entity(entity_id=None)
     agg = create_staging_collection(IMyEntity).get_aggregate()
     agg.add(ent0)
     agg.add(ent1)
     ent01 = create_entity(entity_id=0)
     ent11 = create_entity(entity_id=None)
     # With many as source and one as target.
     with self.assert_raises(ValueError) as cm:
         SourceTargetDataTreeTraverser.make_traverser(
             [ent01, ent1], ent0, RELATION_OPERATIONS.UPDATE, accessor=agg)
     self.assert_true(
         cm.exception.args[0].endswith('or both not be sequences.'))
     # Without target.
     trv = SourceTargetDataTreeTraverser.make_traverser(
         [ent01, ent11], None, RELATION_OPERATIONS.UPDATE, accessor=agg)
     self.assert_is_not_none(getattr(trv, '_tgt_prx'))
コード例 #8
0
 def test_traverse_with_remove_sequence(self):
     ent0 = create_entity(entity_id=0)
     ent1 = create_entity(entity_id=None)
     cache = EntityCacheMap()
     agg = StagingAggregate(MyEntity, cache=cache)
     agg.add(ent0)
     agg.add(ent1)
     trv = SourceTargetDataTreeTraverser.make_traverser(
         None, [ent0, ent1], RELATION_OPERATIONS.REMOVE)
     vst = AruVisitor(MyEntity, remove_callback=agg.remove)
     trv.run(vst)
     self.assert_equal(len(list(iter(agg))), 0)
コード例 #9
0
 def __traverse(self, entity_class, source_data, target_data, rel_op):
     agg = self.__repository.get_aggregate(entity_class)
     trv = SourceTargetDataTreeTraverser.make_traverser(source_data,
                                                        target_data,
                                                        rel_op,
                                                        accessor=agg)
     vst = AruVisitor(entity_class, self.__add, self.__remove,
                      self.__update)
     trv.run(vst)
     # Indicate that we need to flush the changes.
     self.__needs_flushing = True
     return vst.root
コード例 #10
0
ファイル: session.py プロジェクト: helixyte/everest
 def __traverse(self, entity_class, source_data, target_data, rel_op):
     agg = self.__repository.get_aggregate(entity_class)
     trv = SourceTargetDataTreeTraverser.make_traverser(source_data,
                                                        target_data,
                                                        rel_op,
                                                        accessor=agg)
     vst = AruVisitor(entity_class,
                      self.__add, self.__remove, self.__update)
     trv.run(vst)
     # Indicate that we need to flush the changes.
     self.__needs_flushing = True
     return vst.root
コード例 #11
0
ファイル: session.py プロジェクト: papagr/everest
 def __run_traversal(self, entity_class, source_data, target_data, rel_op):
     agg = self.__repository.get_aggregate(entity_class)
     trv = SourceTargetDataTreeTraverser.make_traverser(
                                 source_data, target_data, rel_op,
                                 accessor=agg,
                                 manage_back_references=False)
     vst = AruVisitor(entity_class,
                      add_callback=self.__add,
                      remove_callback=self.__remove,
                      update_callback=self.__update,
                      pass_path_to_callbacks=True)
     trv.run(vst)
     return vst.root
コード例 #12
0
 def test_traverse_with_remove_sequence(self):
     ent0 = create_entity(entity_id=0)
     ent1 = create_entity(entity_id=None)
     cache = EntityCacheMap()
     agg = StagingAggregate(MyEntity, cache=cache)
     agg.add(ent0)
     agg.add(ent1)
     trv = SourceTargetDataTreeTraverser.make_traverser(
                                             None, [ent0, ent1],
                                             RELATION_OPERATIONS.REMOVE)
     vst = AruVisitor(MyEntity, remove_callback=agg.remove)
     trv.run(vst)
     self.assert_equal(len(list(iter(agg))), 0)
コード例 #13
0
 def test_make_traverser_update(self):
     ent0 = create_entity(entity_id=0)
     ent1 = create_entity(entity_id=None)
     agg = create_staging_collection(IMyEntity).get_aggregate()
     agg.add(ent0)
     agg.add(ent1)
     ent01 = create_entity(entity_id=0)
     ent11 = create_entity(entity_id=None)
     # With many as source and one as target.
     with self.assert_raises(ValueError) as cm:
         SourceTargetDataTreeTraverser.make_traverser(
                                             [ent01, ent1], ent0,
                                             RELATION_OPERATIONS.UPDATE,
                                             accessor=agg)
     self.assert_true(
             cm.exception.args[0].endswith('or both not be sequences.'))
     # Without target.
     trv = SourceTargetDataTreeTraverser.make_traverser(
                                             [ent01, ent11], None,
                                             RELATION_OPERATIONS.UPDATE,
                                             accessor=agg)
     self.assert_is_not_none(getattr(trv, '_tgt_prx'))
コード例 #14
0
 def test_traverse_with_add(self):
     mock_vst = MagicMock()
     ent = create_entity(entity_id=None)
     trv = SourceTargetDataTreeTraverser.make_traverser(
         ent, None, RELATION_OPERATIONS.ADD)
     trv.run(mock_vst)
     parent_attr = get_domain_class_attribute(MyEntity, 'parent')
     children_attr = get_domain_class_attribute(MyEntity, 'children')
     grandchildren_attr = get_domain_class_attribute(
         MyEntityChild, 'children')
     # Check the visiting sequence and args (depth first).
     for idx, (meth_name, attr) \
         in enumerate([('visit', parent_attr),
                       ('visit', grandchildren_attr),
                       ('visit', children_attr),
                       ]):
         meth_call = mock_vst.method_calls[idx + 1]
         self.assert_equal(meth_call[0], meth_name)
         self.assert_equal(meth_call[1][1], attr)
         prx = meth_call[1][2]
         self.assert_true(isinstance(prx, DomainDataTraversalProxy))
         self.assert_true(isinstance(prx.get_entity(), Entity))
         self.assert_is_none(meth_call[1][3])
コード例 #15
0
 def test_traverse_with_add(self):
     mock_vst = MagicMock()
     ent = create_entity(entity_id=None)
     trv = SourceTargetDataTreeTraverser.make_traverser(
                                                 ent, None,
                                                 RELATION_OPERATIONS.ADD)
     trv.run(mock_vst)
     parent_attr = get_domain_class_attribute(MyEntity, 'parent')
     children_attr = get_domain_class_attribute(MyEntity, 'children')
     grandchildren_attr = get_domain_class_attribute(MyEntityChild,
                                                     'children')
     # Check the visiting sequence and args (depth first).
     for idx, (meth_name, attr) \
         in enumerate([('visit', parent_attr),
                       ('visit', grandchildren_attr),
                       ('visit', children_attr),
                       ]):
         meth_call = mock_vst.method_calls[idx + 1]
         self.assert_equal(meth_call[0], meth_name)
         self.assert_equal(meth_call[1][1], attr)
         prx = meth_call[1][2]
         self.assert_true(isinstance(prx, DomainDataTraversalProxy))
         self.assert_true(isinstance(prx.get_entity(), Entity))
         self.assert_is_none(meth_call[1][3])