[python2.6] careful: json-py provides a json package. We don't want that. stable
authorAlexandre Fayolle <alexandre.fayolle@logilab.fr>
Fri, 23 Apr 2010 12:19:54 +0200
branchstable
changeset 5389 809d3b5b3d31
parent 5388 9167751463d4
child 5390 a40ffdce549d
[python2.6] careful: json-py provides a json package. We don't want that. To simplify usage, import json via cubicweb.web
devtools/test/unittest_testlib.py
devtools/testlib.py
test/unittest_utils.py
utils.py
view.py
web/__init__.py
web/_exceptions.py
web/component.py
web/request.py
web/test/unittest_views_basecontrollers.py
web/test/unittest_views_baseviews.py
web/views/autoform.py
web/views/basecontrollers.py
web/views/editforms.py
web/views/facets.py
web/views/formrenderers.py
web/views/igeocodable.py
web/views/plots.py
web/views/timeline.py
web/views/treeview.py
--- a/devtools/test/unittest_testlib.py	Fri Apr 23 14:55:10 2010 +0200
+++ b/devtools/test/unittest_testlib.py	Fri Apr 23 12:19:54 2010 +0200
@@ -21,7 +21,7 @@
     def setUp(self):
         output = StringIO()
         self.runner = SkipAwareTextTestRunner(stream=output)
-
+        self.output = output
     def test_error_raised(self):
         class MyWebTest(CubicWebTC):
 
@@ -34,6 +34,7 @@
 
         tests = [MyWebTest('test_error_view'), MyWebTest('test_correct_view')]
         result = self.runner.run(TestSuite(tests))
+        print self.output.getvalue()
         self.assertEquals(result.testsRun, 2)
         self.assertEquals(len(result.errors), 0)
         self.assertEquals(len(result.failures), 1)
--- a/devtools/testlib.py	Fri Apr 23 14:55:10 2010 +0200
+++ b/devtools/testlib.py	Fri Apr 23 12:19:54 2010 +0200
@@ -14,11 +14,6 @@
 from math import log
 from contextlib import contextmanager
 
-try:
-    import json
-except ImportError:
-    import simplejson as json
-
 import yams.schema
 
 from logilab.common.testlib import TestCase, InnerTest
@@ -35,7 +30,7 @@
 from cubicweb.web import Redirect, application
 from cubicweb.devtools import SYSTEM_ENTITIES, SYSTEM_RELATIONS, VIEW_VALIDATORS
 from cubicweb.devtools import fake, htmlparser
-
+from cubicweb.utils import json
 
 # low-level utilities ##########################################################
 
--- a/test/unittest_utils.py	Fri Apr 23 14:55:10 2010 +0200
+++ b/test/unittest_utils.py	Fri Apr 23 12:19:54 2010 +0200
@@ -14,11 +14,7 @@
 from cubicweb.utils import make_uid, UStringIO, SizeConstrainedList, RepeatList
 
 try:
-    try:
-        import json 
-    except ImportError:
-        import simplejson as json
-    from cubicweb.utils import CubicWebJsonEncoder
+    from cubicweb.utils import CubicWebJsonEncoder, json
 except ImportError:
     json = None
 
--- a/utils.py	Fri Apr 23 14:55:10 2010 +0200
+++ b/utils.py	Fri Apr 23 12:19:54 2010 +0200
@@ -240,7 +240,7 @@
         if self.jsvars:
             w(u'<script type="text/javascript"><!--//--><![CDATA[//><!--\n')
             for var, value, override in self.jsvars:
-                vardecl = u'%s = %s;' % (var, dumps(value))
+                vardecl = u'%s = %s;' % (var, json.dumps(value))
                 if not override:
                     vardecl = (u'if (typeof %s == "undefined") {%s}' %
                                (var, vardecl))
@@ -339,16 +339,16 @@
     return __answer_cache[0]
 
 try:
-    try:
-        # may not be there if cubicweb-web not installed
-        from json import dumps, JSONEncoder
-    except ImportError:
-        from simplejson import dumps, JSONEncoder
+    # may not be there if cubicweb-web not installed
+    if sys.version_info < (2,6):
+        import simplejson as json
+    else:
+        import json
 except ImportError:
     pass
 else:
 
-    class CubicWebJsonEncoder(JSONEncoder):
+    class CubicWebJsonEncoder(json.JSONEncoder):
         """define a json encoder to be able to encode yams std types"""
 
         # _iterencode is the only entry point I've found to use a custom encode
@@ -356,14 +356,14 @@
         # .iterencode() is called once on the main structure to encode and then
         # never gets called again.
         # For the record, our main use case is in FormValidateController with:
-        #   dumps((status, args, entity), cls=CubicWebJsonEncoder)
+        #   json.dumps((status, args, entity), cls=CubicWebJsonEncoder)
         # where we want all the entity attributes, including eid, to be part
         # of the json object dumped.
         # This would have once more been easier if Entity didn't extend dict.
         def _iterencode(self, obj, markers=None):
             if hasattr(obj, '__json_encode__'):
                 obj = obj.__json_encode__()
-            return JSONEncoder._iterencode(self, obj, markers)
+            return json.JSONEncoder._iterencode(self, obj, markers)
 
         def default(self, obj):
             if isinstance(obj, datetime.datetime):
@@ -377,7 +377,7 @@
             elif isinstance(obj, decimal.Decimal):
                 return float(obj)
             try:
-                return JSONEncoder.default(self, obj)
+                return json.JSONEncoder.default(self, obj)
             except TypeError:
                 # we never ever want to fail because of an unknown type,
                 # just return None in those cases.
--- a/view.py	Fri Apr 23 14:55:10 2010 +0200
+++ b/view.py	Fri Apr 23 12:19:54 2010 +0200
@@ -12,11 +12,7 @@
 from cStringIO import StringIO
 from warnings import warn
 
-try:
-    from json import dumps
-except ImportError:
-    from simplejson import dumps
-
+from cubicweb.utils import json
 from logilab.common.deprecation import deprecated
 from logilab.mtconverter import xml_escape
 
@@ -487,11 +483,11 @@
     def build_update_js_call(self, cbname, msg):
         rql = self.cw_rset.printable_rql()
         return "javascript:userCallbackThenUpdateUI('%s', '%s', %s, %s, '%s', '%s')" % (
-            cbname, self.id, dumps(rql), dumps(msg),
+            cbname, self.id, json.dumps(rql), json.dumps(msg),
             self.__registry__, self.div_id())
 
     def build_reload_js_call(self, cbname, msg):
-        return "javascript:userCallbackThenReloadPage('%s', %s)" % (cbname, dumps(msg))
+        return "javascript:userCallbackThenReloadPage('%s', %s)" % (cbname, json.dumps(msg))
 
     build_js = build_update_js_call # expect updatable component by default
 
--- a/web/__init__.py	Fri Apr 23 14:55:10 2010 +0200
+++ b/web/__init__.py	Fri Apr 23 12:19:54 2010 +0200
@@ -10,10 +10,14 @@
 __docformat__ = "restructuredtext en"
 _ = unicode
 
-try:
-    from json import dumps
-except ImportError:
-    from simplejson import dumps
+import sys
+if sys.version_info < (2,6):
+    import simplejson as json
+else:
+    import json
+
+dumps = json.dumps
+
 from urllib import quote as urlquote
 
 from logilab.common.deprecation import deprecated
--- a/web/_exceptions.py	Fri Apr 23 14:55:10 2010 +0200
+++ b/web/_exceptions.py	Fri Apr 23 12:19:54 2010 +0200
@@ -57,8 +57,5 @@
         self.reason = reason
 
     def dumps(self):
-        try:
-            from json import dumps
-        except ImportError:
-            from simplejson import dumps
-        return dumps({'reason': self.reason})
+        from cubicweb.web import json
+        return json.dumps({'reason': self.reason})
--- a/web/component.py	Fri Apr 23 14:55:10 2010 +0200
+++ b/web/component.py	Fri Apr 23 12:19:54 2010 +0200
@@ -8,15 +8,11 @@
 __docformat__ = "restructuredtext en"
 _ = unicode
 
-try:
-    from json import dumps
-except ImportError:
-    from simplejson import dumps
-
 from logilab.common.deprecation import class_renamed
 from logilab.mtconverter import xml_escape
 
 from cubicweb import role
+from cubicweb.web import json
 from cubicweb.view import Component
 from cubicweb.selectors import (
     paginated_rset, one_line_rset, primary_view, match_context_prop,
@@ -125,8 +121,8 @@
             rql = params.pop('rql', self.cw_rset.printable_rql())
             # latest 'true' used for 'swap' mode
             url = 'javascript: replacePageChunk(%s, %s, %s, %s, true)' % (
-                dumps(params.get('divid', 'paginated-content')),
-                dumps(rql), dumps(params.pop('vid', None)), dumps(params))
+                json.dumps(params.get('divid', 'paginated-content')),
+                json.dumps(rql), json.dumps(params.pop('vid', None)), json.dumps(params))
         else:
             url = self._cw.build_url(path, **params)
         return url
--- a/web/request.py	Fri Apr 23 14:55:10 2010 +0200
+++ b/web/request.py	Fri Apr 23 12:19:54 2010 +0200
@@ -16,11 +16,6 @@
 from urlparse import urlsplit
 from itertools import count
 
-try:
-    from json import dumps
-except ImportError:
-    from simplejson import dumps
-
 from rql.utils import rqlvar_maker
 
 from logilab.common.decorators import cached
@@ -33,7 +28,8 @@
 from cubicweb.utils import SizeConstrainedList, HTMLHead, make_uid
 from cubicweb.view import STRICT_DOCTYPE, TRANSITIONAL_DOCTYPE_NOEXT
 from cubicweb.web import (INTERNAL_FIELD_VALUE, LOGGER, NothingToEdit,
-                          RequestError, StatusResponse)
+                          RequestError, StatusResponse, json)
+dumps = json.dumps
 
 _MARKER = object()
 
--- a/web/test/unittest_views_basecontrollers.py	Fri Apr 23 14:55:10 2010 +0200
+++ b/web/test/unittest_views_basecontrollers.py	Fri Apr 23 12:19:54 2010 +0200
@@ -5,10 +5,6 @@
 :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
 :license: GNU Lesser General Public License, v2.1 - http://www.gnu.org/licenses
 """
-try:
-    import json
-except ImportError:
-    import simplejson as json
 
 from logilab.common.testlib import unittest_main, mock_object
 
@@ -16,7 +12,7 @@
 from cubicweb.view import STRICT_DOCTYPE
 from cubicweb.devtools.testlib import CubicWebTC
 from cubicweb.uilib import rql_for_eid
-from cubicweb.web import INTERNAL_FIELD_VALUE, Redirect, RequestError
+from cubicweb.web import INTERNAL_FIELD_VALUE, Redirect, RequestError, json
 from cubicweb.entities.authobjs import CWUser
 from cubicweb.web.views.autoform import get_pending_inserts, get_pending_deletes
 u = unicode
--- a/web/test/unittest_views_baseviews.py	Fri Apr 23 14:55:10 2010 +0200
+++ b/web/test/unittest_views_baseviews.py	Fri Apr 23 12:19:54 2010 +0200
@@ -5,11 +5,6 @@
 :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
 :license: GNU Lesser General Public License, v2.1 - http://www.gnu.org/licenses
 """
-try:
-    from json import loads
-except ImportError:
-    from simplejson import loads
-
 from logilab.common.testlib import unittest_main
 from logilab.mtconverter import html_unescape
 
@@ -17,6 +12,8 @@
 
 from cubicweb.web.htmlwidgets import TableWidget
 from cubicweb.web.views import vid_from_rset
+from cubicweb.web import json
+loads = json.loads
 
 def loadjson(value):
     return loads(html_unescape(value))
--- a/web/views/autoform.py	Fri Apr 23 14:55:10 2010 +0200
+++ b/web/views/autoform.py	Fri Apr 23 12:19:54 2010 +0200
@@ -109,11 +109,6 @@
 
 from warnings import warn
 
-try:
-    from json import dumps
-except ImportError:
-    from simplejson import dumps
-
 from logilab.mtconverter import xml_escape
 from logilab.common.decorators import iclassmethod, cached
 
@@ -123,7 +118,7 @@
 from cubicweb.selectors import (
     match_kwargs, match_form_params, non_final_entity,
     specified_etype_implements)
-from cubicweb.web import stdmsgs, uicfg, eid_param, \
+from cubicweb.web import stdmsgs, uicfg, eid_param, dumps, \
      form as f, formwidgets as fw, formfields as ff
 from cubicweb.web.views import forms
 
--- a/web/views/basecontrollers.py	Fri Apr 23 14:55:10 2010 +0200
+++ b/web/views/basecontrollers.py	Fri Apr 23 12:19:54 2010 +0200
@@ -12,11 +12,6 @@
 
 from smtplib import SMTP
 
-try:
-    import json
-except ImportError:
-    import simplejson as json
-
 from logilab.common.decorators import cached
 from logilab.common.date import strptime
 
@@ -25,7 +20,7 @@
 from cubicweb.utils import CubicWebJsonEncoder
 from cubicweb.selectors import authenticated_user, match_form_params
 from cubicweb.mail import format_mail
-from cubicweb.web import ExplicitLogin, Redirect, RemoteCallFailed, json_dumps
+from cubicweb.web import ExplicitLogin, Redirect, RemoteCallFailed, json_dumps, json
 from cubicweb.web.controller import Controller
 from cubicweb.web.views import vid_from_rset
 from cubicweb.web.views.formrenderers import FormRenderer
--- a/web/views/editforms.py	Fri Apr 23 14:55:10 2010 +0200
+++ b/web/views/editforms.py	Fri Apr 23 12:19:54 2010 +0200
@@ -11,11 +11,6 @@
 
 from copy import copy
 
-try:
-    from json import dumps
-except ImportError:
-    from simplejson import dumps
-
 from logilab.mtconverter import xml_escape
 from logilab.common.decorators import cached
 
@@ -23,7 +18,7 @@
                                 specified_etype_implements, implements, yes)
 from cubicweb.view import EntityView
 from cubicweb import tags
-from cubicweb.web import uicfg, stdmsgs, eid_param, \
+from cubicweb.web import uicfg, stdmsgs, eid_param, dumps, \
      formfields as ff, formwidgets as fw
 from cubicweb.web.form import FormViewMixIn, FieldNotFound
 from cubicweb.web.views import forms
--- a/web/views/facets.py	Fri Apr 23 14:55:10 2010 +0200
+++ b/web/views/facets.py	Fri Apr 23 12:19:54 2010 +0200
@@ -7,16 +7,12 @@
 """
 __docformat__ = "restructuredtext en"
 
-try:
-    from json import dumps
-except ImportError:
-    from simplejson import dumps
-
 from logilab.mtconverter import xml_escape
 
 from cubicweb.appobject import objectify_selector
 from cubicweb.selectors import (non_final_entity, multi_lines_rset,
                                 match_context_prop, yes, relation_possible)
+from cubicweb.web import dumps
 from cubicweb.web.box import BoxTemplate
 from cubicweb.web.facet import (AbstractFacet, FacetStringWidget, RelationFacet,
                                 prepare_facets_rqlst, filter_hiddens, _cleanup_rqlst,
--- a/web/views/formrenderers.py	Fri Apr 23 14:55:10 2010 +0200
+++ b/web/views/formrenderers.py	Fri Apr 23 12:19:54 2010 +0200
@@ -25,15 +25,10 @@
 from logilab.common import dictattr
 from logilab.mtconverter import xml_escape
 
-try:
-    from json import dumps
-except ImportError:
-    from simplejson import dumps
-
 from cubicweb import tags
 from cubicweb.appobject import AppObject
 from cubicweb.selectors import implements, yes
-from cubicweb.web import eid_param, formwidgets as fwdgs
+from cubicweb.web import dumps, eid_param, formwidgets as fwdgs
 
 
 def checkbox(name, value, attrs='', checked=None):
--- a/web/views/igeocodable.py	Fri Apr 23 14:55:10 2010 +0200
+++ b/web/views/igeocodable.py	Fri Apr 23 12:19:54 2010 +0200
@@ -7,14 +7,10 @@
 """
 __docformat__ = "restructuredtext en"
 
-try:
-    import json
-except ImportError:
-    import simplejson as json
-
 from cubicweb.interfaces import IGeocodable
 from cubicweb.view import EntityView
 from cubicweb.selectors import implements
+from cubicweb.web import json
 
 class GeocodingJsonView(EntityView):
     __regid__ = 'geocoding-json'
--- a/web/views/plots.py	Fri Apr 23 14:55:10 2010 +0200
+++ b/web/views/plots.py	Fri Apr 23 12:19:54 2010 +0200
@@ -7,17 +7,13 @@
 """
 __docformat__ = "restructuredtext en"
 
-try:
-    from json import dumps
-except ImportError:
-    from simplejson import dumps
-
 from logilab.common.date import datetime2ticks
 from logilab.mtconverter import xml_escape
 
 from cubicweb.utils import UStringIO
 from cubicweb.appobject import objectify_selector
 from cubicweb.selectors import multi_columns_rset
+from cubicweb.web import dumps
 from cubicweb.web.views import baseviews
 
 @objectify_selector
--- a/web/views/timeline.py	Fri Apr 23 14:55:10 2010 +0200
+++ b/web/views/timeline.py	Fri Apr 23 12:19:54 2010 +0200
@@ -9,16 +9,12 @@
 """
 __docformat__ = "restructuredtext en"
 
-try:
-    import json
-except ImportError:
-    import simplejson as json
-
 from logilab.mtconverter import xml_escape
 
 from cubicweb.interfaces import ICalendarable
 from cubicweb.selectors import implements
 from cubicweb.view import EntityView, StartupView
+from cubicweb.web import json
 
 _ = unicode
 
--- a/web/views/treeview.py	Fri Apr 23 14:55:10 2010 +0200
+++ b/web/views/treeview.py	Fri Apr 23 12:19:54 2010 +0200
@@ -7,16 +7,12 @@
 """
 __docformat__ = "restructuredtext en"
 
-try:
-    import json
-except ImportError:
-    import simplejson as json
-
 from logilab.mtconverter import xml_escape
 from cubicweb.utils import make_uid
 from cubicweb.interfaces import ITree
 from cubicweb.selectors import implements
 from cubicweb.view import EntityView
+from cubicweb.web import json
 
 def treecookiename(treeid):
     return str('%s-treestate' % treeid)