diff planemo/lib/python3.7/site-packages/rdflib/plugins/sparql/results/jsonlayer.py @ 1:56ad4e20f292 draft

"planemo upload commit 6eee67778febed82ddd413c3ca40b3183a3898f1"
author guerler
date Fri, 31 Jul 2020 00:32:28 -0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/planemo/lib/python3.7/site-packages/rdflib/plugins/sparql/results/jsonlayer.py	Fri Jul 31 00:32:28 2020 -0400
@@ -0,0 +1,163 @@
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2009 Christopher Lenz
+# All rights reserved.
+#
+
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+# 3. The name of the author may not be used to endorse or promote
+# products derived from this software without specific prior
+# written permission.
+
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Thin abstraction layer over the different available modules for decoding
+and encoding JSON data.
+
+This module currently supports the following JSON modules:
+ - ``simplejson``: http://code.google.com/p/simplejson/
+ - ``cjson``: http://pypi.python.org/pypi/python-cjson
+ - ``json``: This is the version of ``simplejson`` that is bundled with the
+   Python standard library since version 2.6
+   (see http://docs.python.org/library/json.html)
+
+The default behavior is to use ``simplejson`` if installed, and otherwise
+fallback to the standard library module. To explicitly tell SPARQLWrapper
+which module to use, invoke the `use()` function with the module name::
+
+    import jsonlayer
+    jsonlayer.use('cjson')
+
+In addition to choosing one of the above modules, you can also configure
+SPARQLWrapper to use custom decoding and encoding functions::
+
+    import jsonlayer
+    jsonlayer.use(decode=my_decode, encode=my_encode)
+
+"""
+
+__all__ = ['decode', 'encode', 'use']
+
+_initialized = False
+_using = None
+_decode = None
+_encode = None
+
+
+def decode(string):
+    """Decode the given JSON string.
+
+    :param string: the JSON string to decode
+    :type string: basestring
+    :return: the corresponding Python data structure
+    :rtype: object
+    """
+    if not _initialized:
+        _initialize()
+    return _decode(string)
+
+
+def encode(obj):
+    """Encode the given object as a JSON string.
+
+    :param obj: the Python data structure to encode
+    :type obj: object
+    :return: the corresponding JSON string
+    :rtype: basestring
+    """
+    if not _initialized:
+        _initialize()
+    return _encode(obj)
+
+
+def use(module=None, decode=None, encode=None):
+    """Set the JSON library that should be used, either by specifying a known
+    module name, or by providing a decode and encode function.
+
+    The modules "simplejson", "cjson", and "json" are currently supported for
+    the ``module`` parameter.
+
+    If provided, the ``decode`` parameter must be a callable that accepts a
+    JSON string and returns a corresponding Python data structure. The
+    ``encode`` callable must accept a Python data structure and return the
+    corresponding JSON string. Exceptions raised by decoding and encoding
+    should be propagated up unaltered.
+
+    :param module: the name of the JSON library module to use, or the module
+                   object itself
+    :type module: str or module
+    :param decode: a function for decoding JSON strings
+    :type decode: callable
+    :param encode: a function for encoding objects as JSON strings
+    :type encode: callable
+    """
+    global _decode, _encode, _initialized, _using
+    if module is not None:
+        if not isinstance(module, str):
+            module = module.__name__
+        if module not in ('cjson', 'json', 'simplejson'):
+            raise ValueError('Unsupported JSON module %s' % module)
+        _using = module
+        _initialized = False
+    else:
+        assert decode is not None and encode is not None
+        _using = 'custom'
+        _decode = decode
+        _encode = encode
+        _initialized = True
+
+
+def _initialize():
+    global _initialized
+
+    def _init_simplejson():
+        global _decode, _encode
+        import simplejson
+        _decode = lambda string, loads=simplejson.loads: loads(string)
+        _encode = lambda obj, dumps=simplejson.dumps: \
+            dumps(obj, allow_nan=False, ensure_ascii=False)
+
+    def _init_cjson():
+        global _decode, _encode
+        import cjson
+        _decode = lambda string, decode=cjson.decode: decode(string)
+        _encode = lambda obj, encode=cjson.encode: encode(obj)
+
+    def _init_stdlib():
+        global _decode, _encode
+        json = __import__('json', {}, {})
+        _decode = lambda string, loads=json.loads: loads(string)
+        _encode = lambda obj, dumps=json.dumps: \
+            dumps(obj, allow_nan=False, ensure_ascii=False)
+
+    if _using == 'simplejson':
+        _init_simplejson()
+    elif _using == 'cjson':
+        _init_cjson()
+    elif _using == 'json':
+        _init_stdlib()
+    elif _using != 'custom':
+        try:
+            _init_simplejson()
+        except ImportError:
+            _init_stdlib()
+    _initialized = True