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 |