dbapi.py
changeset 6581 4a3b264589dc
parent 6494 70c87c717e4a
child 6613 e7ff604491b2
--- a/dbapi.py	Thu Oct 21 18:07:44 2010 +0200
+++ b/dbapi.py	Thu Oct 21 18:38:36 2010 +0200
@@ -48,6 +48,9 @@
     except KeyError:
         return ''
 
+def fake(*args, **kwargs):
+    return None
+
 def multiple_connections_fix():
     """some monkey patching necessary when an application has to deal with
     several connections to different repositories. It tries to hide buggy class
@@ -480,6 +483,7 @@
         self.sessionid = cnxid
         self._close_on_del = getattr(cnxprops, 'close_on_del', True)
         self._cnxtype = getattr(cnxprops, 'cnxtype', 'pyro')
+        self._web_request = False
         if cnxprops and cnxprops.log_queries:
             self.executed_queries = []
             self.cursor_class = LogCursor
@@ -544,35 +548,32 @@
 
         You should call `load_appobjects` at some point to register those views.
         """
-        from cubicweb.web.request import CubicWebRequestBase as cwrb
-        DBAPIRequest.build_ajax_replace_url = cwrb.build_ajax_replace_url.im_func
-        DBAPIRequest.ajax_replace_url = cwrb.ajax_replace_url.im_func
-        DBAPIRequest.list_form_param = cwrb.list_form_param.im_func
         DBAPIRequest.property_value = _fake_property_value
         DBAPIRequest.next_tabindex = count().next
-        DBAPIRequest.form = {}
-        DBAPIRequest.data = {}
-        fake = lambda *args, **kwargs: None
         DBAPIRequest.relative_path = fake
         DBAPIRequest.url = fake
-        DBAPIRequest.next_tabindex = fake
         DBAPIRequest.get_page_data = fake
         DBAPIRequest.set_page_data = fake
-        DBAPIRequest.add_js = fake #cwrb.add_js.im_func
-        DBAPIRequest.add_css = fake #cwrb.add_css.im_func
         # XXX could ask the repo for it's base-url configuration
         self.vreg.config.set_option('base-url', baseurl)
+        self.vreg.config.uiprops = {}
+        self.vreg.config.datadir_url = baseurl + '/data'
         # XXX why is this needed? if really needed, could be fetched by a query
         if sitetitle is not None:
             self.vreg['propertydefs']['ui.site-title'] = {'default': sitetitle}
+        self._web_request = True
 
-    @check_not_closed
-    def source_defs(self):
-        """Return the definition of sources used by the repository.
-
-        This is NOT part of the DB-API.
-        """
-        return self._repo.source_defs()
+    def request(self):
+        if self._web_request:
+            from cubicweb.web.request import CubicWebRequestBase
+            req = CubicWebRequestBase(self.vreg, False)
+            req.get_header = lambda x, default=None: default
+            req.set_session = lambda session, user=None: DBAPIRequest.set_session(
+                req, session, user)
+        else:
+            req = DBAPIRequest(self.vreg)
+        req.set_session(DBAPISession(self))
+        return req
 
     @check_not_closed
     def user(self, req=None, props=None):
@@ -604,9 +605,6 @@
         # return a dict as bw compat trick
         return {'txid': currentThread().getName()}
 
-    def request(self):
-        return DBAPIRequest(self.vreg, DBAPISession(self))
-
     # session data methods #####################################################
 
     @check_not_closed
@@ -639,6 +637,11 @@
     # meta-data accessors ######################################################
 
     @check_not_closed
+    def source_defs(self):
+        """Return the definition of sources used by the repository."""
+        return self._repo.source_defs()
+
+    @check_not_closed
     def get_schema(self):
         """Return the schema currently used by the repository."""
         return self._repo.get_schema()