
When running some tests on another project I stumbled upon a failed test that revealed a bug in colander's iso8601. If you try to deserialize "2014-09-09T15:15:57.516967" into a datetime object you get `datetime.datetime(2014, 9, 9, 15, 15, 57, 516966)` (notice the microseconds are off by 1). I traced it down to this: ``` groups["fraction"] = int(float("0.%s" % groups["fraction"]) * 1e6) ``` `int(float("0.%s" % "516967") * 1e6)` is equal to 516966 due to rounding. I was going to fix it, but iso8601 is a currently maintained project on pypi that has this issue (and possibly others) already fixed. So, it makes much more sense to offload everything back to that project. The only difference (besides the bug fixes) is following: `iso8601.Utc` => `iso8601.iso8601.Utc` `iso8601.FixedOffset` => `iso8601.iso8601.FixedOffset`
71 lines
2.4 KiB
Python
71 lines
2.4 KiB
Python
##############################################################################
|
|
#
|
|
# Copyright (c) 2011 Agendaless Consulting and Contributors.
|
|
# All Rights Reserved.
|
|
#
|
|
# This software is subject to the provisions of the BSD-like license at
|
|
# http://www.repoze.org/LICENSE.txt. A copy of the license 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
|
|
#
|
|
##############################################################################
|
|
|
|
import os
|
|
|
|
from setuptools import setup
|
|
from setuptools import find_packages
|
|
|
|
here = os.path.abspath(os.path.dirname(__file__))
|
|
|
|
def read(fname):
|
|
with open(fname) as fp:
|
|
return fp.read()
|
|
|
|
try:
|
|
README = read(os.path.join(here, 'README.txt'))
|
|
CHANGES = read(os.path.join(here, 'CHANGES.txt'))
|
|
except:
|
|
README = ''
|
|
CHANGES = ''
|
|
|
|
requires = ['translationstring', 'iso8601']
|
|
|
|
testing_extras = ['nose', 'coverage']
|
|
docs_extras = ['Sphinx']
|
|
|
|
setup(name='colander',
|
|
version='1.0b1',
|
|
description=('A simple schema-based serialization and deserialization '
|
|
'library'),
|
|
long_description=README + '\n\n' + CHANGES,
|
|
classifiers=[
|
|
"Intended Audience :: Developers",
|
|
"Programming Language :: Python",
|
|
"Programming Language :: Python",
|
|
"Programming Language :: Python :: 2.6",
|
|
"Programming Language :: Python :: 2.7",
|
|
"Programming Language :: Python :: 3",
|
|
"Programming Language :: Python :: 3.2",
|
|
"Programming Language :: Python :: 3.3",
|
|
"Programming Language :: Python :: Implementation :: CPython",
|
|
"Programming Language :: Python :: Implementation :: PyPy",
|
|
],
|
|
keywords='serialize deserialize validate schema validation',
|
|
author="Agendaless Consulting",
|
|
author_email="pylons-discuss@googlegroups.com",
|
|
url="http://docs.pylonsproject.org/projects/colander/en/latest/",
|
|
license="BSD-derived (http://www.repoze.org/LICENSE.txt)",
|
|
packages=find_packages(),
|
|
include_package_data=True,
|
|
zip_safe=False,
|
|
install_requires = requires,
|
|
test_suite="colander",
|
|
extras_require = {
|
|
'testing':testing_extras,
|
|
'docs':docs_extras,
|
|
},
|
|
)
|
|
|