This repository has been archived by the owner on Dec 17, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 4768711
Showing
18 changed files
with
1,761 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
======= | ||
CHANGES | ||
======= | ||
|
||
Version 0.5.0 (unreleased) | ||
------------------------- | ||
|
||
- Initial Release |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
This package provides basic JSON components like JSON reader and writer | ||
utilities and a JSON-RPC client proxy including the transport implementation | ||
for Zope3. | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
==== | ||
TODO | ||
==== | ||
|
||
- add tests and use testing stub for fake the JSONRPC server response | ||
|
||
- improve coverage, write tests for all untested code, most of this is related | ||
to error handling. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
############################################################################## | ||
# | ||
# Copyright (c) 2007 Zope Corporation and Contributors. | ||
# All Rights Reserved. | ||
# | ||
# This software is subject to the provisions of the Zope Public License, | ||
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. | ||
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED | ||
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS | ||
# FOR A PARTICULAR PURPOSE. | ||
# | ||
############################################################################## | ||
"""Bootstrap a buildout-based project | ||
Simply run this script in a directory containing a buildout.cfg. | ||
The script accepts buildout command-line options, so you can | ||
use the -c option to specify an alternate configuration file. | ||
$Id: bootstrap.py 75940 2007-05-24 14:45:00Z srichter $ | ||
""" | ||
|
||
import os, shutil, sys, tempfile, urllib2 | ||
|
||
tmpeggs = tempfile.mkdtemp() | ||
|
||
ez = {} | ||
exec urllib2.urlopen('http://peak.telecommunity.com/dist/ez_setup.py' | ||
).read() in ez | ||
ez['use_setuptools'](to_dir=tmpeggs, download_delay=0) | ||
|
||
import pkg_resources | ||
|
||
cmd = 'from setuptools.command.easy_install import main; main()' | ||
if sys.platform == 'win32': | ||
cmd = '"%s"' % cmd # work around spawn lamosity on windows | ||
|
||
ws = pkg_resources.working_set | ||
assert os.spawnle( | ||
os.P_WAIT, sys.executable, sys.executable, | ||
'-c', cmd, '-mqNxd', tmpeggs, 'zc.buildout', | ||
dict(os.environ, | ||
PYTHONPATH= | ||
ws.find(pkg_resources.Requirement.parse('setuptools')).location | ||
), | ||
) == 0 | ||
|
||
ws.add_entry(tmpeggs) | ||
ws.require('zc.buildout') | ||
import zc.buildout.buildout | ||
zc.buildout.buildout.main(sys.argv[1:] + ['bootstrap']) | ||
shutil.rmtree(tmpeggs) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
[buildout] | ||
develop = . | ||
parts = test checker coverage | ||
|
||
[test] | ||
recipe = zc.recipe.testrunner | ||
eggs = z3c.json [test] | ||
|
||
[checker] | ||
recipe = lovely.recipe:importchecker | ||
path = src/z3c/json | ||
|
||
[coverage] | ||
recipe = zc.recipe.egg | ||
eggs = z3c.coverage |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
############################################################################## | ||
# | ||
# Copyright (c) 2007 Zope Foundation and Contributors. | ||
# All Rights Reserved. | ||
# | ||
# This software is subject to the provisions of the Zope Public License, | ||
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. | ||
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED | ||
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS | ||
# FOR A PARTICULAR PURPOSE. | ||
# | ||
############################################################################## | ||
"""Setup | ||
$Id:$ | ||
""" | ||
import os | ||
from setuptools import setup, find_packages | ||
|
||
def read(*rnames): | ||
return open(os.path.join(os.path.dirname(__file__), *rnames)).read() | ||
|
||
setup ( | ||
name='z3c.json', | ||
version='0.5.0dev', | ||
author = "Roger Ineichen and the Zope Community", | ||
author_email = "zope3-dev@zope.org", | ||
description = "Zope3 JSON base libraries used for z3c.jsonpage and z3c.jsonrpc", | ||
long_description=( | ||
read('README.txt') | ||
+ '\n\n' + | ||
read('CHANGES.txt') | ||
), | ||
license = "ZPL 2.1", | ||
keywords = "zope3 z3c json base library", | ||
classifiers = [ | ||
'Development Status :: 4 - Beta', | ||
'Environment :: Web Environment', | ||
'Intended Audience :: Developers', | ||
'License :: OSI Approved :: Zope Public License', | ||
'Programming Language :: Python', | ||
'Natural Language :: English', | ||
'Operating System :: OS Independent', | ||
'Topic :: Internet :: WWW/HTTP', | ||
'Framework :: Zope3'], | ||
url = 'http://cheeseshop.python.org/pypi/z3c.json', | ||
packages = find_packages('src'), | ||
include_package_data = True, | ||
package_dir = {'':'src'}, | ||
namespace_packages = ['z3c'], | ||
extras_require = dict( | ||
test = [ | ||
'z3c.coverage', | ||
'zope.app.testing',], | ||
), | ||
install_requires = [ | ||
'setuptools', | ||
'zope.component', | ||
], | ||
zip_safe = False, | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
# this is a namespace package | ||
try: | ||
import pkg_resources | ||
pkg_resources.declare_namespace(__name__) | ||
except ImportError: | ||
import pkgutil | ||
__path__ = pkgutil.extend_path(__path__, __name__) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
<data-files zopeskel/etc/package-includes> | ||
z3c.json-*.zcml | ||
</data-files> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
# Make a package. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
<configure | ||
xmlns="http://namespaces.zope.org/zope" | ||
xmlns:browser="http://namespaces.zope.org/browser" | ||
xmlns:i18n="http://namespaces.zope.org/i18n" | ||
i18n_domain="z3c"> | ||
|
||
<!-- JSON reader and writer utility --> | ||
<utility | ||
factory=".converter.JSONReader" | ||
provides=".interfaces.IJSONReader" | ||
/> | ||
|
||
<utility | ||
factory=".converter.JSONWriter" | ||
provides=".interfaces.IJSONWriter" | ||
/> | ||
|
||
|
||
<!-- marshaller --> | ||
<adapter | ||
for="list" | ||
factory=".converter.ListPreMarshaller" | ||
/> | ||
|
||
<adapter | ||
for="tuple" | ||
factory=".converter.ListPreMarshaller" | ||
/> | ||
|
||
<adapter | ||
factory=".converter.DictPreMarshaller" | ||
for="dict" | ||
/> | ||
|
||
</configure> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,112 @@ | ||
############################################################################## | ||
# | ||
# Copyright (c) 2007 Zope Foundation and Contributors. | ||
# All Rights Reserved. | ||
# | ||
# This software is subject to the provisions of the Zope Public License, | ||
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. | ||
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED | ||
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS | ||
# FOR A PARTICULAR PURPOSE. | ||
# | ||
############################################################################## | ||
""" | ||
$Id:$ | ||
""" | ||
__docformat__ = "reStructuredText" | ||
|
||
import zope.interface | ||
|
||
from z3c.json import interfaces | ||
from z3c.json import minjson | ||
from z3c.json import exceptions | ||
|
||
|
||
try: | ||
import cjson | ||
hasCJson = True | ||
except ImportError: | ||
import logging | ||
logger = logging.getLogger() | ||
logger.log(logging.INFO, | ||
"Using minjson only. cjson is much faster and available at the cheese " | ||
"shop. easy_install python-cjson") | ||
hasCJson = False | ||
|
||
|
||
class JSONReader(object): | ||
"""JSON reader utility.""" | ||
zope.interface.implements(interfaces.IJSONReader) | ||
|
||
def read(self, aString, encoding=None): | ||
if hasCJson: | ||
try: | ||
# the True parameter here tells cjson to make all strings | ||
# unicode. This is a good idea here. | ||
return cjson.decode(aString, True) | ||
except cjson.DecodeError: | ||
# fall back to minjson | ||
pass | ||
# This is a fall-back position for less-well-constructed JSON | ||
try: | ||
return minjson.read(aString, encoding) | ||
except minjson.ReadException, e: | ||
raise exceptions.ResponseError(e) | ||
|
||
|
||
class JSONWriter(object): | ||
"""JSON writer utility.""" | ||
zope.interface.implements(interfaces.IJSONWriter) | ||
|
||
def write(self, anObject): | ||
if hasCJson: | ||
try: | ||
return unicode(cjson.encode(anObject)) | ||
except cjson.EncodeError: | ||
# fall back to minjson | ||
pass | ||
try: | ||
return minjson.write(anObject) | ||
except minjson.WriteException, e: | ||
raise TypeError, e | ||
|
||
|
||
def premarshal(data): | ||
"""Premarshal data before handing it to JSON writer for marshalling | ||
The initial purpose of this function is to remove security proxies | ||
without resorting to removeSecurityProxy. This way, we can avoid | ||
inadvertently providing access to data that should be protected. | ||
""" | ||
premarshaller = interfaces.IJSONRPCPremarshaller(data, alternate=None) | ||
if premarshaller is not None: | ||
return premarshaller() | ||
return data | ||
|
||
|
||
class PreMarshallerBase(object): | ||
"""Abstract base class for pre-marshallers.""" | ||
zope.interface.implements(interfaces.IJSONRPCPremarshaller) | ||
|
||
def __init__(self, data): | ||
self.data = data | ||
|
||
def __call__(self): | ||
raise Exception, "Not implemented" | ||
|
||
|
||
class DictPreMarshaller(PreMarshallerBase): | ||
"""Pre-marshaller for dicts""" | ||
|
||
def __call__(self): | ||
return dict([(premarshal(k), premarshal(v)) | ||
for (k, v) in self.data.items()]) | ||
|
||
|
||
class ListPreMarshaller(PreMarshallerBase): | ||
"""Pre-marshaller for list""" | ||
|
||
def __call__(self): | ||
return map(premarshal, self.data) | ||
|
Oops, something went wrong.