devtools/repotest.py
branchtls-sprint
changeset 1802 d628defebc17
parent 1789 03c9ea459ff4
child 1977 606923dff11b
equal deleted inserted replaced
1801:672acc730ce5 1802:d628defebc17
   101 from cubicweb.server.session import Session
   101 from cubicweb.server.session import Session
   102 from cubicweb.server.sources.rql2sql import remove_unused_solutions
   102 from cubicweb.server.sources.rql2sql import remove_unused_solutions
   103 
   103 
   104 class RQLGeneratorTC(TestCase):
   104 class RQLGeneratorTC(TestCase):
   105     schema = None # set this in concret test
   105     schema = None # set this in concret test
   106     
   106 
   107     def setUp(self):
   107     def setUp(self):
   108         self.rqlhelper = RQLHelper(self.schema, special_relations={'eid': 'uid',
   108         self.rqlhelper = RQLHelper(self.schema, special_relations={'eid': 'uid',
   109                                                                    'has_text': 'fti'})
   109                                                                    'has_text': 'fti'})
   110         self.qhelper = QuerierHelper(FakeRepo(self.schema), self.schema)
   110         self.qhelper = QuerierHelper(FakeRepo(self.schema), self.schema)
   111         ExecutionPlan._check_permissions = _dummy_check_permissions
   111         ExecutionPlan._check_permissions = _dummy_check_permissions
   112         rqlannotation._select_principal = _select_principal
   112         rqlannotation._select_principal = _select_principal
   113 
   113 
   114     def tearDown(self):
   114     def tearDown(self):
   115         ExecutionPlan._check_permissions = _orig_check_permissions
   115         ExecutionPlan._check_permissions = _orig_check_permissions
   116         rqlannotation._select_principal = _orig_select_principal
   116         rqlannotation._select_principal = _orig_select_principal
   117         
   117 
   118     def _prepare(self, rql):
   118     def _prepare(self, rql):
   119         #print '******************** prepare', rql
   119         #print '******************** prepare', rql
   120         union = self.rqlhelper.parse(rql)
   120         union = self.rqlhelper.parse(rql)
   121         #print '********* parsed', union.as_string()
   121         #print '********* parsed', union.as_string()
   122         self.rqlhelper.compute_solutions(union)
   122         self.rqlhelper.compute_solutions(union)
   131         return union
   131         return union
   132 
   132 
   133 
   133 
   134 class BaseQuerierTC(TestCase):
   134 class BaseQuerierTC(TestCase):
   135     repo = None # set this in concret test
   135     repo = None # set this in concret test
   136     
   136 
   137     def setUp(self):
   137     def setUp(self):
   138         self.o = self.repo.querier
   138         self.o = self.repo.querier
   139         self.session = self.repo._sessions.values()[0]
   139         self.session = self.repo._sessions.values()[0]
   140         self.ueid = self.session.user.eid
   140         self.ueid = self.session.user.eid
   141         assert self.ueid != -1
   141         assert self.ueid != -1
   146 
   146 
   147     def get_max_eid(self):
   147     def get_max_eid(self):
   148         return self.session.unsafe_execute('Any MAX(X)')[0][0]
   148         return self.session.unsafe_execute('Any MAX(X)')[0][0]
   149     def cleanup(self):
   149     def cleanup(self):
   150         self.session.unsafe_execute('DELETE Any X WHERE X eid > %s' % self.maxeid)
   150         self.session.unsafe_execute('DELETE Any X WHERE X eid > %s' % self.maxeid)
   151         
   151 
   152     def tearDown(self):
   152     def tearDown(self):
   153         undo_monkey_patch()
   153         undo_monkey_patch()
   154         self.session.rollback()
   154         self.session.rollback()
   155         self.cleanup()
   155         self.cleanup()
   156         self.commit()
   156         self.commit()
   157         self.repo._free_pool(self.pool)
   157         self.repo._free_pool(self.pool)
   158         assert self.session.user.eid != -1
   158         assert self.session.user.eid != -1
   159 
   159 
   160     def set_debug(self, debug):
   160     def set_debug(self, debug):
   161         set_debug(debug)
   161         set_debug(debug)
   162         
   162 
   163     def _rqlhelper(self):
   163     def _rqlhelper(self):
   164         rqlhelper = self.o._rqlhelper
   164         rqlhelper = self.o._rqlhelper
   165         # reset uid_func so it don't try to get type from eids
   165         # reset uid_func so it don't try to get type from eids
   166         rqlhelper._analyser.uid_func = None
   166         rqlhelper._analyser.uid_func = None
   167         rqlhelper._analyser.uid_func_mapping = {}
   167         rqlhelper._analyser.uid_func_mapping = {}
   173         rqlhelper.compute_solutions(rqlst, kwargs=kwargs)
   173         rqlhelper.compute_solutions(rqlst, kwargs=kwargs)
   174         rqlhelper.simplify(rqlst)
   174         rqlhelper.simplify(rqlst)
   175         for select in rqlst.children:
   175         for select in rqlst.children:
   176             select.solutions.sort()
   176             select.solutions.sort()
   177         return self.o.plan_factory(rqlst, kwargs, self.session)
   177         return self.o.plan_factory(rqlst, kwargs, self.session)
   178         
   178 
   179     def _prepare(self, rql, kwargs=None):    
   179     def _prepare(self, rql, kwargs=None):
   180         plan = self._prepare_plan(rql, kwargs)
   180         plan = self._prepare_plan(rql, kwargs)
   181         plan.preprocess(plan.rqlst)
   181         plan.preprocess(plan.rqlst)
   182         rqlst = plan.rqlst.children[0]
   182         rqlst = plan.rqlst.children[0]
   183         rqlst.solutions = remove_unused_solutions(rqlst, rqlst.solutions, {}, self.repo.schema)[0]
   183         rqlst.solutions = remove_unused_solutions(rqlst, rqlst.solutions, {}, self.repo.schema)[0]
   184         return rqlst
   184         return rqlst
   193         s._threaddata.pool = self.pool
   193         s._threaddata.pool = self.pool
   194         return u, s
   194         return u, s
   195 
   195 
   196     def execute(self, rql, args=None, eid_key=None, build_descr=True):
   196     def execute(self, rql, args=None, eid_key=None, build_descr=True):
   197         return self.o.execute(self.session, rql, args, eid_key, build_descr)
   197         return self.o.execute(self.session, rql, args, eid_key, build_descr)
   198     
   198 
   199     def commit(self):
   199     def commit(self):
   200         self.session.commit()
   200         self.session.commit()
   201         self.session.set_pool()        
   201         self.session.set_pool()
   202 
   202 
   203 
   203 
   204 class BasePlannerTC(BaseQuerierTC):
   204 class BasePlannerTC(BaseQuerierTC):
   205 
   205 
   206     def _prepare_plan(self, rql, kwargs=None):
   206     def _prepare_plan(self, rql, kwargs=None):
   268 except ImportError:
   268 except ImportError:
   269     class PartPlanInformation(object):
   269     class PartPlanInformation(object):
   270         def merge_input_maps(self, *args):
   270         def merge_input_maps(self, *args):
   271             pass
   271             pass
   272         def _choose_term(self, sourceterms):
   272         def _choose_term(self, sourceterms):
   273             pass    
   273             pass
   274 _orig_merge_input_maps = PartPlanInformation.merge_input_maps
   274 _orig_merge_input_maps = PartPlanInformation.merge_input_maps
   275 _orig_choose_term = PartPlanInformation._choose_term
   275 _orig_choose_term = PartPlanInformation._choose_term
   276 
   276 
   277 def _merge_input_maps(*args):
   277 def _merge_input_maps(*args):
   278     return sorted(_orig_merge_input_maps(*args))
   278     return sorted(_orig_merge_input_maps(*args))
   307     RQLRewriter.build_variantes = _orig_build_variantes
   307     RQLRewriter.build_variantes = _orig_build_variantes
   308     ExecutionPlan._check_permissions = _orig_check_permissions
   308     ExecutionPlan._check_permissions = _orig_check_permissions
   309     ExecutionPlan.init_temp_table = _orig_init_temp_table
   309     ExecutionPlan.init_temp_table = _orig_init_temp_table
   310     PartPlanInformation.merge_input_maps = _orig_merge_input_maps
   310     PartPlanInformation.merge_input_maps = _orig_merge_input_maps
   311     PartPlanInformation._choose_term = _orig_choose_term
   311     PartPlanInformation._choose_term = _orig_choose_term
   312