devtools/testlib.py
changeset 5174 78438ad513ca
parent 5159 2543cfa5d54a
child 5177 395e1ff018ae
equal deleted inserted replaced
5173:73760bbb66bd 5174:78438ad513ca
    13 import sys
    13 import sys
    14 import re
    14 import re
    15 from urllib import unquote
    15 from urllib import unquote
    16 from math import log
    16 from math import log
    17 from contextlib import contextmanager
    17 from contextlib import contextmanager
       
    18 from warnings import warn
    18 
    19 
    19 import simplejson
    20 import simplejson
    20 
    21 
    21 import yams.schema
    22 import yams.schema
    22 
    23 
   287             req = self._orig_cnx.request()
   288             req = self._orig_cnx.request()
   288         user = req.create_entity('CWUser', login=unicode(login),
   289         user = req.create_entity('CWUser', login=unicode(login),
   289                                  upassword=password, **kwargs)
   290                                  upassword=password, **kwargs)
   290         req.execute('SET X in_group G WHERE X eid %%(x)s, G name IN(%s)'
   291         req.execute('SET X in_group G WHERE X eid %%(x)s, G name IN(%s)'
   291                     % ','.join(repr(g) for g in groups),
   292                     % ','.join(repr(g) for g in groups),
   292                     {'x': user.eid}, 'x')
   293                     {'x': user.eid})
   293         user.clear_related_cache('in_group', 'subject')
   294         user.clear_related_cache('in_group', 'subject')
   294         if commit:
   295         if commit:
   295             req.cnx.commit()
   296             req.cnx.commit()
   296         return user
   297         return user
   297 
   298 
   326     @nocoverage
   327     @nocoverage
   327     def execute(self, rql, args=None, eidkey=None, req=None):
   328     def execute(self, rql, args=None, eidkey=None, req=None):
   328         """executes <rql>, builds a resultset, and returns a couple (rset, req)
   329         """executes <rql>, builds a resultset, and returns a couple (rset, req)
   329         where req is a FakeRequest
   330         where req is a FakeRequest
   330         """
   331         """
       
   332         if eidkey is not None:
       
   333             warn('[3.8] eidkey is deprecated, you can safely remove this argument',
       
   334                  DeprecationWarning, stacklevel=2)
   331         req = req or self.request(rql=rql)
   335         req = req or self.request(rql=rql)
   332         return self.cnx.cursor(req).execute(unicode(rql), args, eidkey)
   336         return req.execute(unicode(rql), args)
   333 
   337 
   334     @nocoverage
   338     @nocoverage
   335     def commit(self):
   339     def commit(self):
   336         try:
   340         try:
   337             return self.cnx.commit()
   341             return self.cnx.commit()
   348             self.session.set_pool() # ensure pool still set after commit
   352             self.session.set_pool() # ensure pool still set after commit
   349 
   353 
   350     # # server side db api #######################################################
   354     # # server side db api #######################################################
   351 
   355 
   352     def sexecute(self, rql, args=None, eid_key=None):
   356     def sexecute(self, rql, args=None, eid_key=None):
       
   357         if eid_key is not None:
       
   358             warn('[3.8] eid_key is deprecated, you can safely remove this argument',
       
   359                  DeprecationWarning, stacklevel=2)
   353         self.session.set_pool()
   360         self.session.set_pool()
   354         return self.session.execute(rql, args, eid_key)
   361         return self.session.execute(rql, args)
   355 
   362 
   356     # other utilities #########################################################
   363     # other utilities #########################################################
   357 
       
   358     def entity(self, rql, args=None, eidkey=None, req=None):
       
   359         return self.execute(rql, args, eidkey, req=req).get_entity(0, 0)
       
   360 
   364 
   361     @contextmanager
   365     @contextmanager
   362     def temporary_appobjects(self, *appobjects):
   366     def temporary_appobjects(self, *appobjects):
   363         self.vreg._loadedmods.setdefault(self.__module__, {})
   367         self.vreg._loadedmods.setdefault(self.__module__, {})
   364         for obj in appobjects:
   368         for obj in appobjects:
   679             output = re.sub('<canvas.*?></canvas>', '', output)
   683             output = re.sub('<canvas.*?></canvas>', '', output)
   680         return validator.parse_string(output.strip())
   684         return validator.parse_string(output.strip())
   681 
   685 
   682     # deprecated ###############################################################
   686     # deprecated ###############################################################
   683 
   687 
       
   688     @deprecated('[3.8] use self.execute(...).get_entity(0, 0)')
       
   689     def entity(self, rql, args=None, eidkey=None, req=None):
       
   690         if eidkey is not None:
       
   691             warn('[3.8] eidkey is deprecated, you can safely remove this argument',
       
   692                  DeprecationWarning, stacklevel=2)
       
   693         return self.execute(rql, args, req=req).get_entity(0, 0)
       
   694 
   684     @deprecated('[3.6] use self.request().create_entity(...)')
   695     @deprecated('[3.6] use self.request().create_entity(...)')
   685     def add_entity(self, etype, req=None, **kwargs):
   696     def add_entity(self, etype, req=None, **kwargs):
   686         if req is None:
   697         if req is None:
   687             req = self.request()
   698             req = self.request()
   688         return req.create_entity(etype, **kwargs)
   699         return req.create_entity(etype, **kwargs)
   689 
       
   690     @deprecated('[3.4] use self.vreg["etypes"].etype_class(etype)(self.request())')
       
   691     def etype_instance(self, etype, req=None):
       
   692         req = req or self.request()
       
   693         e = self.vreg['etypes'].etype_class(etype)(req)
       
   694         e.eid = None
       
   695         return e
       
   696 
       
   697     @nocoverage
       
   698     @deprecated('[3.4] use req = self.request(); rset = req.execute()',
       
   699                 stacklevel=3)
       
   700     def rset_and_req(self, rql, optional_args=None, args=None, eidkey=None):
       
   701         """executes <rql>, builds a resultset, and returns a
       
   702         couple (rset, req) where req is a FakeRequest
       
   703         """
       
   704         return (self.execute(rql, args, eidkey),
       
   705                 self.request(rql=rql, **optional_args or {}))
       
   706 
   700 
   707 
   701 
   708 # auto-populating test classes and utilities ###################################
   702 # auto-populating test classes and utilities ###################################
   709 
   703 
   710 from cubicweb.devtools.fill import insert_entity_queries, make_relations_queries
   704 from cubicweb.devtools.fill import insert_entity_queries, make_relations_queries