dataimport.py
changeset 9770 112c884b2d8d
parent 9750 566f8fce5168
parent 9697 d96b5e72717c
child 9827 c7ce035aede8
equal deleted inserted replaced
9765:5607ef9ab9f5 9770:112c884b2d8d
   139         if skipfirst:
   139         if skipfirst:
   140             it.next()
   140             it.next()
   141         for row in it:
   141         for row in it:
   142             decoded = [item.decode(encoding) for item in row]
   142             decoded = [item.decode(encoding) for item in row]
   143             if not skip_empty or any(decoded):
   143             if not skip_empty or any(decoded):
   144                 yield [item.decode(encoding) for item in row]
   144                 yield decoded
   145     else:
   145     else:
   146         # Skip first line
   146         if skipfirst:
   147         try:
   147             try:
   148             row = it.next()
   148                 row = it.next()
   149         except csv.Error:
   149             except csv.Error:
   150             pass
   150                 pass
   151         # Safe version, that can cope with error in CSV file
   151         # Safe version, that can cope with error in CSV file
   152         while True:
   152         while True:
   153             try:
   153             try:
   154                 row = it.next()
   154                 row = it.next()
   155             # End of CSV, break
   155             # End of CSV, break
   470                 if value is None:
   470                 if value is None:
   471                     return
   471                     return
   472                 if isinstance(value, unicode):
   472                 if isinstance(value, unicode):
   473                     value = value.encode(encoding)
   473                     value = value.encode(encoding)
   474             elif isinstance(value, (date, datetime)):
   474             elif isinstance(value, (date, datetime)):
   475                 # Do not use strftime, as it yields issue
       
   476                 # with date < 1900
       
   477                 value = '%04d-%02d-%02d' % (value.year,
   475                 value = '%04d-%02d-%02d' % (value.year,
   478                                             value.month,
   476                                             value.month,
   479                                             value.day)
   477                                             value.day)
       
   478                 if isinstance(value, datetime):
       
   479                     value += ' %02d:%02d:%02d' % (value.hour,
       
   480                                                   value.minutes,
       
   481                                                   value.second)
   480             else:
   482             else:
   481                 return None
   483                 return None
   482             # We push the value to the new formatted row
   484             # We push the value to the new formatted row
   483             # if the value is not None and could be converted to a string.
   485             # if the value is not None and could be converted to a string.
   484             formatted_row.append(value)
   486             formatted_row.append(value)
   858         entity = self.session.vreg['etypes'].etype_class(etype)(self.session)
   860         entity = self.session.vreg['etypes'].etype_class(etype)(self.session)
   859         # entity are "surface" copied, avoid shared dict between copies
   861         # entity are "surface" copied, avoid shared dict between copies
   860         del entity.cw_extra_kwargs
   862         del entity.cw_extra_kwargs
   861         entity.cw_edited = EditedEntity(entity)
   863         entity.cw_edited = EditedEntity(entity)
   862         for attr in self.etype_attrs:
   864         for attr in self.etype_attrs:
   863             entity.cw_edited.edited_attribute(attr, self.generate(entity, attr))
   865             genfunc = self.generate(attr)
       
   866             if genfunc:
       
   867                 entity.cw_edited.edited_attribute(attr, genfunc(entity))
   864         rels = {}
   868         rels = {}
   865         for rel in self.etype_rels:
   869         for rel in self.etype_rels:
   866             rels[rel] = self.generate(entity, rel)
   870             genfunc = self.generate(rel)
       
   871             if genfunc:
       
   872                 rels[rel] = genfunc(entity)
   867         return entity, rels
   873         return entity, rels
   868 
   874 
   869     def init_entity(self, entity):
   875     def init_entity(self, entity):
   870         entity.eid = self.source.create_eid(self.session)
   876         entity.eid = self.source.create_eid(self.session)
   871         for attr in self.entity_attrs:
   877         for attr in self.entity_attrs:
   872             entity.cw_edited.edited_attribute(attr, self.generate(entity, attr))
   878             genfunc = self.generate(attr)
   873 
   879             if genfunc:
   874     def generate(self, entity, rtype):
   880                 entity.cw_edited.edited_attribute(attr, genfunc(entity))
   875         return getattr(self, 'gen_%s' % rtype)(entity)
   881 
       
   882     def generate(self, rtype):
       
   883         return getattr(self, 'gen_%s' % rtype, None)
   876 
   884 
   877     def gen_cwuri(self, entity):
   885     def gen_cwuri(self, entity):
   878         return u'%s%s' % (self.baseurl, entity.eid)
   886         return u'%s%s' % (self.baseurl, entity.eid)
   879 
   887 
   880     def gen_creation_date(self, entity):
   888     def gen_creation_date(self, entity):
   881         return self.time
   889         return self.time
       
   890 
   882     def gen_modification_date(self, entity):
   891     def gen_modification_date(self, entity):
   883         return self.time
   892         return self.time
   884 
   893 
   885     def gen_created_by(self, entity):
   894     def gen_created_by(self, entity):
   886         return self.session.user.eid
   895         return self.session.user.eid
       
   896 
   887     def gen_owned_by(self, entity):
   897     def gen_owned_by(self, entity):
   888         return self.session.user.eid
   898         return self.session.user.eid
   889 
   899 
   890 
   900 
   891 ###########################################################################
   901 ###########################################################################