dataimport.py
changeset 10295 080ac14df6fa
parent 10294 277074659cad
child 10349 efbbf1e93a04
child 10971 de59a60a9e40
equal deleted inserted replaced
10294:277074659cad 10295:080ac14df6fa
   787         entity, rels = self.metagen.base_etype_dicts(etype)
   787         entity, rels = self.metagen.base_etype_dicts(etype)
   788         # make a copy to keep cached entity pristine
   788         # make a copy to keep cached entity pristine
   789         entity = copy(entity)
   789         entity = copy(entity)
   790         entity.cw_edited = copy(entity.cw_edited)
   790         entity.cw_edited = copy(entity.cw_edited)
   791         entity.cw_clear_relation_cache()
   791         entity.cw_clear_relation_cache()
   792         self.metagen.init_entity(entity)
       
   793         entity.cw_edited.update(kwargs, skipsec=False)
   792         entity.cw_edited.update(kwargs, skipsec=False)
       
   793         entity_source, extid = self.metagen.init_entity(entity)
   794         cnx = self._cnx
   794         cnx = self._cnx
   795         self.source.add_entity(cnx, entity)
   795         self.source.add_entity(cnx, entity)
   796         self.source.add_info(cnx, entity, self.source, None)
   796         self.source.add_info(cnx, entity, entity_source, extid)
   797         kwargs = dict()
   797         kwargs = dict()
   798         if inspect.getargspec(self.add_relation).keywords:
   798         if inspect.getargspec(self.add_relation).keywords:
   799             kwargs['subjtype'] = entity.cw_etype
   799             kwargs['subjtype'] = entity.cw_etype
   800         for rtype, targeteids in rels.iteritems():
   800         for rtype, targeteids in rels.iteritems():
   801             # targeteids may be a single eid or a list of eids
   801             # targeteids may be a single eid or a list of eids
   834     META_RELATIONS = (META_RTYPES
   834     META_RELATIONS = (META_RTYPES
   835                       - VIRTUAL_RTYPES
   835                       - VIRTUAL_RTYPES
   836                       - set(('eid', 'cwuri',
   836                       - set(('eid', 'cwuri',
   837                              'is', 'is_instance_of', 'cw_source')))
   837                              'is', 'is_instance_of', 'cw_source')))
   838 
   838 
   839     def __init__(self, cnx, baseurl=None):
   839     def __init__(self, cnx, baseurl=None, source=None):
   840         self._cnx = cnx
   840         self._cnx = cnx
   841         self.source = cnx.repo.system_source
       
   842         self.time = datetime.now()
       
   843         if baseurl is None:
   841         if baseurl is None:
   844             config = cnx.vreg.config
   842             config = cnx.vreg.config
   845             baseurl = config['base-url'] or config.default_base_url()
   843             baseurl = config['base-url'] or config.default_base_url()
   846         if not baseurl[-1] == '/':
   844         if not baseurl[-1] == '/':
   847             baseurl += '/'
   845             baseurl += '/'
   848         self.baseurl =  baseurl
   846         self.baseurl = baseurl
       
   847         if source is None:
       
   848             source = cnx.repo.system_source
       
   849         self.source = source
       
   850         self.create_eid = cnx.repo.system_source.create_eid
       
   851         self.time = datetime.now()
   849         # attributes/relations shared by all entities of the same type
   852         # attributes/relations shared by all entities of the same type
   850         self.etype_attrs = []
   853         self.etype_attrs = []
   851         self.etype_rels = []
   854         self.etype_rels = []
   852         # attributes/relations specific to each entity
   855         # attributes/relations specific to each entity
   853         self.entity_attrs = ['cwuri']
   856         self.entity_attrs = ['cwuri']
   879             if genfunc:
   882             if genfunc:
   880                 rels[rel] = genfunc(entity)
   883                 rels[rel] = genfunc(entity)
   881         return entity, rels
   884         return entity, rels
   882 
   885 
   883     def init_entity(self, entity):
   886     def init_entity(self, entity):
   884         entity.eid = self.source.create_eid(self._cnx)
   887         entity.eid = self.create_eid(self._cnx)
       
   888         extid = entity.cw_edited.get('cwuri')
   885         for attr in self.entity_attrs:
   889         for attr in self.entity_attrs:
   886             if attr in entity.cw_edited:
   890             if attr in entity.cw_edited:
   887                 # already set, skip this attribute
   891                 # already set, skip this attribute
   888                 continue
   892                 continue
   889             genfunc = self.generate(attr)
   893             genfunc = self.generate(attr)
   890             if genfunc:
   894             if genfunc:
   891                 entity.cw_edited.edited_attribute(attr, genfunc(entity))
   895                 entity.cw_edited.edited_attribute(attr, genfunc(entity))
       
   896         if isinstance(extid, unicode):
       
   897             extid = extid.encode('utf-8')
       
   898         return self.source, extid
   892 
   899 
   893     def generate(self, rtype):
   900     def generate(self, rtype):
   894         return getattr(self, 'gen_%s' % rtype, None)
   901         return getattr(self, 'gen_%s' % rtype, None)
   895 
   902 
   896     def gen_cwuri(self, entity):
   903     def gen_cwuri(self, entity):