devtools/repotest.py
changeset 10711 d7f009a3b960
parent 10663 54b8a1f249fb
child 10747 cf711d1c951f
equal deleted inserted replaced
10710:37d7a1187af7 10711:d7f009a3b960
    28 from logilab.common.testlib import SkipTest
    28 from logilab.common.testlib import SkipTest
    29 
    29 
    30 def tuplify(mylist):
    30 def tuplify(mylist):
    31     return [tuple(item) for item in mylist]
    31     return [tuple(item) for item in mylist]
    32 
    32 
    33 def snippet_cmp(a, b):
    33 def snippet_key(a):
    34     a = (a[0], [e.expression for e in a[1]])
    34     # a[0] may be a dict or a key/value tuple
    35     b = (b[0], [e.expression for e in b[1]])
    35     return (sorted(dict(a[0]).items()), [e.expression for e in a[1]])
    36     return cmp(a, b)
       
    37 
    36 
    38 def test_plan(self, rql, expected, kwargs=None):
    37 def test_plan(self, rql, expected, kwargs=None):
    39     with self.session.new_cnx() as cnx:
    38     with self.session.new_cnx() as cnx:
    40         plan = self._prepare_plan(cnx, rql, kwargs)
    39         plan = self._prepare_plan(cnx, rql, kwargs)
    41         self.planner.build_plan(plan)
    40         self.planner.build_plan(plan)
   291         else:
   290         else:
   292             rqlst.solutions.sort()
   291             rqlst.solutions.sort()
   293         return self.o.plan_factory(rqlst, kwargs, cnx)
   292         return self.o.plan_factory(rqlst, kwargs, cnx)
   294 
   293 
   295 
   294 
   296 # monkey patch some methods to get predicatable results #######################
   295 # monkey patch some methods to get predictable results #######################
   297 
   296 
   298 from cubicweb import rqlrewrite
   297 from cubicweb import rqlrewrite
   299 _orig_iter_relations = rqlrewrite.iter_relations
   298 _orig_iter_relations = rqlrewrite.iter_relations
   300 _orig_insert_snippets = rqlrewrite.RQLRewriter.insert_snippets
   299 _orig_insert_snippets = rqlrewrite.RQLRewriter.insert_snippets
   301 _orig_build_variantes = rqlrewrite.RQLRewriter.build_variantes
   300 _orig_build_variantes = rqlrewrite.RQLRewriter.build_variantes
   302 
   301 
   303 def _insert_snippets(self, snippets, varexistsmap=None):
   302 def _insert_snippets(self, snippets, varexistsmap=None):
   304     _orig_insert_snippets(self, sorted(snippets, snippet_cmp), varexistsmap)
   303     _orig_insert_snippets(self, sorted(snippets, key=snippet_key), varexistsmap)
   305 
   304 
   306 def _build_variantes(self, newsolutions):
   305 def _build_variantes(self, newsolutions):
   307     variantes = _orig_build_variantes(self, newsolutions)
   306     variantes = _orig_build_variantes(self, newsolutions)
   308     sortedvariantes = []
   307     sortedvariantes = []
   309     for variante in variantes:
   308     for variante in variantes:
   310         orderedkeys = sorted((k[1], k[2], v) for k, v in variante.items())
   309         orderedkeys = sorted((k[1], k[2], v) for k, v in variante.items())
   311         variante = DumbOrderedDict(sorted(variante.items(),
   310         variante = DumbOrderedDict(sorted(variante.items(),
   312                                           lambda a, b: cmp((a[0][1],a[0][2],a[1]),
   311                                           key=lambda a: (a[0][1], a[0][2], a[1])))
   313                                                            (b[0][1],b[0][2],b[1]))))
       
   314         sortedvariantes.append( (orderedkeys, variante) )
   312         sortedvariantes.append( (orderedkeys, variante) )
   315     return [v for ok, v in sorted(sortedvariantes)]
   313     return [v for ok, v in sorted(sortedvariantes)]
   316 
   314 
   317 from cubicweb.server.querier import ExecutionPlan
   315 from cubicweb.server.querier import ExecutionPlan
   318 _orig_check_permissions = ExecutionPlan._check_permissions
   316 _orig_check_permissions = ExecutionPlan._check_permissions
   319 
   317 
   320 def _check_permissions(*args, **kwargs):
   318 def _check_permissions(*args, **kwargs):
   321     res, restricted = _orig_check_permissions(*args, **kwargs)
   319     res, restricted = _orig_check_permissions(*args, **kwargs)
   322     res = DumbOrderedDict(sorted(res.items(), lambda a, b: cmp(a[1], b[1])))
   320     res = DumbOrderedDict(sorted(res.items(), key=lambda x: x[1]))
   323     return res, restricted
   321     return res, restricted
   324 
   322 
   325 def _dummy_check_permissions(self, rqlst):
   323 def _dummy_check_permissions(self, rqlst):
   326     return {(): rqlst.solutions}, set()
   324     return {(): rqlst.solutions}, set()
   327 
   325