server/sources/native.py
changeset 7645 cb2459aaa7d7
parent 7562 cdef82ca9eab
child 7646 91a984ba420f
equal deleted inserted replaced
7644:7a0914469618 7645:cb2459aaa7d7
   587         """remove temporary data, usually associated to temporary tables"""
   587         """remove temporary data, usually associated to temporary tables"""
   588         if temptables:
   588         if temptables:
   589             for table in temptables:
   589             for table in temptables:
   590                 try:
   590                 try:
   591                     self.doexec(session,'DROP TABLE %s' % table)
   591                     self.doexec(session,'DROP TABLE %s' % table)
   592                 except:
   592                 except Exception:
   593                     pass
   593                     pass
   594                 try:
   594                 try:
   595                     del self._temp_table_data[table]
   595                     del self._temp_table_data[table]
   596                 except KeyError:
   596                 except KeyError:
   597                     continue
   597                     continue
   789                               query, args, ex.args[0])
   789                               query, args, ex.args[0])
   790             try:
   790             try:
   791                 session.cnxset.connection(self.uri).rollback()
   791                 session.cnxset.connection(self.uri).rollback()
   792                 if self.repo.config.mode != 'test':
   792                 if self.repo.config.mode != 'test':
   793                     self.critical('transaction has been rollbacked')
   793                     self.critical('transaction has been rollbacked')
   794             except:
   794             except Exception:
   795                 pass
   795                 pass
   796             raise
   796             raise
   797 
   797 
   798     # short cut to method requiring advanced db helper usage ##################
   798     # short cut to method requiring advanced db helper usage ##################
   799 
   799 
   846         cursor = LogCursor(session.cnxset[self.uri])
   846         cursor = LogCursor(session.cnxset[self.uri])
   847         self.dbhelper.drop_index(cursor, table, column, unique)
   847         self.dbhelper.drop_index(cursor, table, column, unique)
   848 
   848 
   849     # system source interface #################################################
   849     # system source interface #################################################
   850 
   850 
       
   851     def _eid_type_source(self, session, eid, sql, _retry=True):
       
   852         try:
       
   853             return self.doexec(session, sql).fetchone()
       
   854         except (self.OperationalError, self.InterfaceError):
       
   855             if session.mode == 'read' and _retry:
       
   856                 self.warning("trying to reconnect (eid_type_source())")
       
   857                 session.cnxset.reconnect(self)
       
   858                 return self._eid_type_source(session, eid, sql, _retry=False)
       
   859         except Exception:
       
   860             assert session.cnxset, 'session has no connections set'
       
   861             self.exception('failed to query entities table for eid %s', eid)
       
   862         raise UnknownEid(eid)
       
   863 
   851     def eid_type_source(self, session, eid):
   864     def eid_type_source(self, session, eid):
   852         """return a tuple (type, source, extid) for the entity with id <eid>"""
   865         """return a tuple (type, source, extid) for the entity with id <eid>"""
   853         sql = 'SELECT type, source, extid, asource FROM entities WHERE eid=%s' % eid
   866         sql = 'SELECT type, source, extid, asource FROM entities WHERE eid=%s' % eid
   854         try:
   867         res = self._eid_type_source(session, eid, sql)
   855             res = self.doexec(session, sql).fetchone()
       
   856         except:
       
   857             assert session.cnxset, 'session has no connections set'
       
   858             raise UnknownEid(eid)
       
   859         if res is None:
       
   860             raise UnknownEid(eid)
       
   861         if res[-2] is not None:
   868         if res[-2] is not None:
   862             if not isinstance(res, list):
   869             if not isinstance(res, list):
   863                 res = list(res)
   870                 res = list(res)
   864             res[-2] = b64decode(res[-2])
   871             res[-2] = b64decode(res[-2])
   865         return res
   872         return res
   866 
   873 
   867     def eid_type_source_pre_131(self, session, eid):
   874     def eid_type_source_pre_131(self, session, eid):
   868         """return a tuple (type, source, extid) for the entity with id <eid>"""
   875         """return a tuple (type, source, extid) for the entity with id <eid>"""
   869         sql = 'SELECT type, source, extid FROM entities WHERE eid=%s' % eid
   876         sql = 'SELECT type, source, extid FROM entities WHERE eid=%s' % eid
   870         try:
   877         res = self._eid_type_source(session, eid, sql)
   871             res = self.doexec(session, sql).fetchone()
       
   872         except:
       
   873             assert session.cnxset, 'session has no connections set'
       
   874             raise UnknownEid(eid)
       
   875         if res is None:
       
   876             raise UnknownEid(eid)
       
   877         if not isinstance(res, list):
   878         if not isinstance(res, list):
   878             res = list(res)
   879             res = list(res)
   879         if res[-1] is not None:
   880         if res[-1] is not None:
   880             res[-1] = b64decode(res[-1])
   881             res[-1] = b64decode(res[-1])
   881         res.append(res[1])
   882         res.append(res[1])
   893         #if cursor.rowcount > 0:
   894         #if cursor.rowcount > 0:
   894         try:
   895         try:
   895             result = cursor.fetchone()
   896             result = cursor.fetchone()
   896             if result:
   897             if result:
   897                 return result[0]
   898                 return result[0]
   898         except:
   899         except Exception:
   899             pass
   900             pass
   900         return None
   901         return None
   901 
   902 
   902     def make_temp_table_name(self, table):
   903     def make_temp_table_name(self, table):
   903         return self.dbhelper.temporary_table_name(table)
   904         return self.dbhelper.temporary_table_name(table)
   948                 self.warning("trying to reconnect create eid connection")
   949                 self.warning("trying to reconnect create eid connection")
   949                 self._eid_creation_cnx = None
   950                 self._eid_creation_cnx = None
   950                 return self._create_eid()
   951                 return self._create_eid()
   951             else:
   952             else:
   952                 raise
   953                 raise
   953         except: # WTF?
   954         except Exception: # WTF?
   954             cnx.rollback()
   955             cnx.rollback()
   955             self._eid_creation_cnx = None
   956             self._eid_creation_cnx = None
   956             self.exception('create eid failed in an unforeseen way on SQL statement %s', sql)
   957             self.exception('create eid failed in an unforeseen way on SQL statement %s', sql)
   957             raise
   958             raise
   958         else:
   959         else: