diff -r b6003d74a600 -r 06390418cd9a server/sources/pyrorql.py --- a/server/sources/pyrorql.py Thu Jan 29 15:26:09 2009 +0100 +++ b/server/sources/pyrorql.py Thu Jan 29 16:26:33 2009 +0100 @@ -159,7 +159,8 @@ external repository """ self.info('synchronizing pyro source %s', self.uri) - extrepo = self.get_connection()._repo + cnx = self.get_connection() + extrepo = cnx._repo etypes = self.support_entities.keys() if mtime is None: mtime = self.last_update_time() @@ -170,11 +171,13 @@ try: for etype, extid in modified: try: - eid = self.extid2eid(extid, etype, session) - rset = session.eid_rset(eid, etype) - entity = rset.get_entity(0, 0) - entity.complete(entity.e_schema.indexable_attributes()) - repo.index_entity(session, entity) + exturi = cnx.describe(extid)[1] + if exturi == 'system' or not exturi in repo.sources_by_uri: + eid = self.extid2eid(extid, etype, session) + rset = session.eid_rset(eid, etype) + entity = rset.get_entity(0, 0) + entity.complete(entity.e_schema.indexable_attributes()) + repo.index_entity(session, entity) except: self.exception('while updating %s with external id %s of source %s', etype, extid, self.uri) @@ -277,18 +280,29 @@ descr = rset.description if rset: needtranslation = [] + rows = rset.rows for i, etype in enumerate(descr[0]): if (etype is None or not self.schema.eschema(etype).is_final() or getattr(union.locate_subquery(i, etype, args).selection[i], 'uidtype', None)): needtranslation.append(i) if needtranslation: - for rowindex, row in enumerate(rset): + cnx = session.pool.connection(self.uri) + for rowindex in xrange(rset.rowcount - 1, -1, -1): + row = rows[rowindex] for colindex in needtranslation: if row[colindex] is not None: # optional variable etype = descr[rowindex][colindex] - eid = self.extid2eid(row[colindex], etype, session) - row[colindex] = eid - results = rset.rows + exttype, exturi, extid = cnx.describe(row[colindex]) + if exturi == 'system' or not exturi in self.repo.sources_by_uri: + eid = self.extid2eid(row[colindex], etype, session) + row[colindex] = eid + else: + # skip this row + print 'skip external', etype, exturi, extid, self.uri + del rows[rowindex] + del descr[rowindex] + break + results = rows else: results = [] if server.DEBUG: