示例#1
0
 def test_dont_generate_relation_to_internal_manager(self):
     with self.admin_access.repo_cnx() as cnx:
         metagen = stores.MetadataGenerator(cnx)
         self.assertIn('created_by', metagen.etype_rels('CWUser'))
         self.assertIn('owned_by', metagen.etype_rels('CWUser'))
     with self.repo.internal_cnx() as cnx:
         metagen = stores.MetadataGenerator(cnx)
         self.assertNotIn('created_by', metagen.etype_rels('CWUser'))
         self.assertNotIn('owned_by', metagen.etype_rels('CWUser'))
示例#2
0
    def __init__(self,
                 cnx,
                 slave_mode=False,
                 eids_seq_range=10000,
                 metagen=None):
        """Create a MassiveObject store, with the following arguments:

        - `cnx`, a connection to the repository
        - `metagen`, optional :class:`MetadataGenerator` instance
        - `eids_seq_range`: size of eid range reserved by the store for each batch
        """
        super(MassiveObjectStore, self).__init__(cnx)

        self.uuid = str(uuid4()).replace('-', '')
        self.slave_mode = slave_mode
        if metagen is None:
            metagen = stores.MetadataGenerator(cnx)
        self.metagen = metagen

        self.logger = logging.getLogger('dataimport.massive_store')
        self.sql = cnx.system_sql
        self.schema = cnx.vreg.schema
        self.default_values = get_default_values(self.schema)
        self.get_next_eid = lambda g=self._get_eid_gen(eids_seq_range): next(g)
        self._source_dbhelper = cnx.repo.system_source.dbhelper
        self._dbh = PGHelper(cnx)

        self._data_entities = defaultdict(list)
        self._data_relations = defaultdict(list)
        self._initialized = {}
示例#3
0
 def store_impl(self, cnx):
     source = cnx.create_entity('CWSource',
                                type=u'datafeed',
                                name=u'test',
                                url=u'test')
     cnx.commit()
     metagen = stores.MetadataGenerator(cnx,
                                        source=cnx.repo.source_by_eid(
                                            source.eid))
     return stores.NoHookRQLObjectStore(cnx, metagen)
示例#4
0
 def test_dont_generate_specified_values(self):
     with self.admin_access.repo_cnx() as cnx:
         metagen = stores.MetadataGenerator(cnx)
         # hijack gen_modification_date to ensure we don't go through it
         metagen.gen_modification_date = None
         md = DT.datetime.now(pytz.utc) - DT.timedelta(days=1)
         attrs = metagen.base_etype_attrs('CWUser')
         attrs.update(dict(modification_date=md))
         metagen.init_entity_attrs('CWUser', 1, attrs)
         self.assertEqual(attrs['modification_date'], md)
示例#5
0
    def test_consider_metagen(self):
        """Ensure index on owned_by is not deleted if we don't consider this metadata."""
        with self.admin_access.repo_cnx() as cnx:
            metagen = stores.MetadataGenerator(cnx, meta_skipped=('owned_by',))
            store = MassiveObjectStore(cnx, metagen=metagen)
            store._drop_metadata_constraints()

            indexes = all_indexes(cnx)
            self.assertIn(build_index_name('owned_by_relation', ['eid_from', 'eid_to'], 'key_'),
                          indexes)
            self.assertIn(build_index_name('owned_by_relation', ['eid_from'], 'idx_'),
                          indexes)
示例#6
0
 def metagenerator_impl(cnx):
     return stores._MetaGeneratorBWCompatWrapper(
         stores.MetadataGenerator(cnx))