devtools/repotest.py
changeset 4773 6ab9ca63531f
parent 4766 162b2b127b15
child 4835 13b0b96d7982
equal deleted inserted replaced
4772:ae1b2a0c8e86 4773:6ab9ca63531f
   173         assert self.ueid != -1
   173         assert self.ueid != -1
   174         self.repo._type_source_cache = {} # clear cache
   174         self.repo._type_source_cache = {} # clear cache
   175         self.pool = self.session.set_pool()
   175         self.pool = self.session.set_pool()
   176         self.maxeid = self.get_max_eid()
   176         self.maxeid = self.get_max_eid()
   177         do_monkey_patch()
   177         do_monkey_patch()
       
   178         self._dumb_sessions = []
   178 
   179 
   179     def get_max_eid(self):
   180     def get_max_eid(self):
   180         return self.session.unsafe_execute('Any MAX(X)')[0][0]
   181         return self.session.unsafe_execute('Any MAX(X)')[0][0]
   181     def cleanup(self):
   182     def cleanup(self):
   182         self.session.unsafe_execute('DELETE Any X WHERE X eid > %s' % self.maxeid)
   183         self.session.unsafe_execute('DELETE Any X WHERE X eid > %s' % self.maxeid)
   184     def tearDown(self):
   185     def tearDown(self):
   185         undo_monkey_patch()
   186         undo_monkey_patch()
   186         self.session.rollback()
   187         self.session.rollback()
   187         self.cleanup()
   188         self.cleanup()
   188         self.commit()
   189         self.commit()
       
   190         # properly close dumb sessions
       
   191         for session in self._dumb_sessions:
       
   192             session.rollback()
       
   193             session.close()
   189         self.repo._free_pool(self.pool)
   194         self.repo._free_pool(self.pool)
   190         assert self.session.user.eid != -1
   195         assert self.session.user.eid != -1
   191 
   196 
   192     def set_debug(self, debug):
   197     def set_debug(self, debug):
   193         set_debug(debug)
   198         set_debug(debug)
   221         # use self.session.user.eid to get correct owned_by relation, unless explicit eid
   226         # use self.session.user.eid to get correct owned_by relation, unless explicit eid
   222         u = self.repo._build_user(self.session, self.session.user.eid)
   227         u = self.repo._build_user(self.session, self.session.user.eid)
   223         u._groups = set(groups)
   228         u._groups = set(groups)
   224         s = Session(u, self.repo)
   229         s = Session(u, self.repo)
   225         s._threaddata.pool = self.pool
   230         s._threaddata.pool = self.pool
       
   231         # register session to ensure it gets closed
       
   232         self._dumb_sessions.append(s)
   226         return s
   233         return s
   227 
   234 
   228     def execute(self, rql, args=None, eid_key=None, build_descr=True):
   235     def execute(self, rql, args=None, eid_key=None, build_descr=True):
   229         return self.o.execute(self.session, rql, args, eid_key, build_descr)
   236         return self.o.execute(self.session, rql, args, eid_key, build_descr)
   230 
   237 
   246         self.pool = self.session.set_pool()
   253         self.pool = self.session.set_pool()
   247         self.schema = self.o.schema
   254         self.schema = self.o.schema
   248         self.sources = self.o._repo.sources
   255         self.sources = self.o._repo.sources
   249         self.system = self.sources[-1]
   256         self.system = self.sources[-1]
   250         do_monkey_patch()
   257         do_monkey_patch()
       
   258         self._dumb_sessions = [] # by hi-jacked parent setup
   251 
   259 
   252     def add_source(self, sourcecls, uri):
   260     def add_source(self, sourcecls, uri):
   253         self.sources.append(sourcecls(self.repo, self.o.schema,
   261         self.sources.append(sourcecls(self.repo, self.o.schema,
   254                                       {'uri': uri}))
   262                                       {'uri': uri}))
   255         self.repo.sources_by_uri[uri] = self.sources[-1]
   263         self.repo.sources_by_uri[uri] = self.sources[-1]
   260         while self.newsources:
   268         while self.newsources:
   261             source = self.sources.pop(-1)
   269             source = self.sources.pop(-1)
   262             del self.repo.sources_by_uri[source.uri]
   270             del self.repo.sources_by_uri[source.uri]
   263             self.newsources -= 1
   271             self.newsources -= 1
   264         undo_monkey_patch()
   272         undo_monkey_patch()
       
   273         for session in self._dumb_sessions:
       
   274             session._threaddata.pool = None
       
   275             session.close()
   265 
   276 
   266     def _prepare_plan(self, rql, kwargs=None):
   277     def _prepare_plan(self, rql, kwargs=None):
   267         rqlst = self.o.parse(rql, annotate=True)
   278         rqlst = self.o.parse(rql, annotate=True)
   268         self.o.solutions(self.session, rqlst, kwargs)
   279         self.o.solutions(self.session, rqlst, kwargs)
   269         if rqlst.TYPE == 'select':
   280         if rqlst.TYPE == 'select':