dataimport.py
changeset 6149 57e956441ca4
parent 6142 8bc6eac1fac1
parent 6136 79da6f969b15
child 6173 eb386e473044
equal deleted inserted replaced
6147:95c604ec89bf 6149:57e956441ca4
    32            ('Nom', 'surname', ()),
    32            ('Nom', 'surname', ()),
    33            ('Identifiant', 'login', ()),
    33            ('Identifiant', 'login', ()),
    34            ]
    34            ]
    35 
    35 
    36   def gen_users(ctl):
    36   def gen_users(ctl):
    37       for row in ctl.get_data('utilisateurs'):
    37       for row in ctl.iter_and_commit('utilisateurs'):
    38           entity = mk_entity(row, USERS)
    38           entity = mk_entity(row, USERS)
    39           entity['upassword'] = u'motdepasse'
    39           entity['upassword'] = u'motdepasse'
    40           ctl.check('login', entity['login'], None)
    40           ctl.check('login', entity['login'], None)
    41           ctl.store.add('CWUser', entity)
    41           ctl.store.add('CWUser', entity)
    42           email = {'address': row['email']}
    42           email = {'address': row['email']}
   123     if skipfirst:
   123     if skipfirst:
   124         it.next()
   124         it.next()
   125     for row in it:
   125     for row in it:
   126         yield [item.decode(encoding) for item in row]
   126         yield [item.decode(encoding) for item in row]
   127 
   127 
   128 def commit_every(nbit, store, it):
   128 def callfunc_every(func, number, iterable):
   129     for i, x in enumerate(it):
   129     """yield items of `iterable` one by one and call function `func`
   130         yield x
   130     every `number` iterations. Always call function `func` at the end.
   131         if nbit is not None and i % nbit:
   131     """
   132             store.commit()
   132     for idx, item in enumerate(iterable):
   133     if nbit is not None:
   133         yield item
   134         store.commit()
   134         if idx % number:
       
   135             func()
       
   136     func()
   135 
   137 
   136 def lazytable(reader):
   138 def lazytable(reader):
   137     """The first row is taken to be the header of the table and
   139     """The first row is taken to be the header of the table and
   138     used to output a dict for each row of data.
   140     used to output a dict for each row of data.
   139 
   141 
   228     if value:
   230     if value:
   229         return value
   231         return value
   230     return None
   232     return None
   231 
   233 
   232 def required(value):
   234 def required(value):
   233     """raise ValueError is value is empty
   235     """raise ValueError if value is empty
   234 
   236 
   235     This check should be often found in last position in the chain.
   237     This check should be often found in last position in the chain.
   236     """
   238     """
   237     if value:
   239     if value:
   238         return value
   240         return value
   569     def tell(self, msg):
   571     def tell(self, msg):
   570         self._tell(msg)
   572         self._tell(msg)
   571 
   573 
   572     def iter_and_commit(self, datakey):
   574     def iter_and_commit(self, datakey):
   573         """iter rows, triggering commit every self.commitevery iterations"""
   575         """iter rows, triggering commit every self.commitevery iterations"""
   574         return commit_every(self.commitevery, self.store, self.get_data(datakey))
   576         if self.commitevery is None:
       
   577             return self.get_data(datakey)
       
   578         else:
       
   579             return callfunc_every(self.commitevery, self.store.commit, self.get_data(datakey))
   575 
   580 
   576 
   581 
   577 
   582 
   578 from datetime import datetime
   583 from datetime import datetime
   579 from cubicweb.schema import META_RTYPES, VIRTUAL_RTYPES
   584 from cubicweb.schema import META_RTYPES, VIRTUAL_RTYPES