diff --git a/lib_python/lib/idea-format/bench_idea.py b/lib_python/lib/idea-format/bench_idea.py index 47e1608ca694190d75edee66b75162e8735850e1..39efcdbf24d03debeae81f084f8155c6546a1dd0 100755 --- a/lib_python/lib/idea-format/bench_idea.py +++ b/lib_python/lib/idea-format/bench_idea.py @@ -8,7 +8,6 @@ from idea import lite from idea import valid import json from jsonschema import Draft4Validator -import typedcol import timeit raw_idea = { diff --git a/lib_python/lib/idea-format/idea/__init__.py b/lib_python/lib/idea-format/idea/__init__.py index 9e32ead8a100f4c3d5fadd1a05e684a8e5707ac6..1e3d9a46009c078cf3408df612fa6e3a99ae3ca2 100644 --- a/lib_python/lib/idea-format/idea/__init__.py +++ b/lib_python/lib/idea-format/idea/__init__.py @@ -1,8 +1,8 @@ #!/usr/bin/python # -*- coding: utf-8 -*- # -# Copyright (c) 2016, CESNET, z. s. p. o. +# Copyright (c) since 2016, CESNET, z. s. p. o. # Use of this source is governed by an ISC license, see LICENSE file. -__version__ = '0.1.7' +__version__ = '0.1.8' __author__ = 'Pavel Kácha <pavel.kacha@cesnet.cz>' diff --git a/lib_python/lib/idea-format/idea/base.py b/lib_python/lib/idea-format/idea/base.py index da5228fa4a087d597d839b9f49998421009f0d8f..72dad74082bd8b3145f849380d542470e9f0f87f 100644 --- a/lib_python/lib/idea-format/idea/base.py +++ b/lib_python/lib/idea-format/idea/base.py @@ -336,10 +336,14 @@ class IdeaBase(typedcols.TypedDict): allow_unknown = True typedef = {} -def json_default(o): - if isinstance(o, typedcols.TypedDict): - return o.data - elif isinstance(o, typedcols.TypedList): - return o.data - else: - raise ValueError(o) + @staticmethod + def json_default(o): + if isinstance(o, typedcols.TypedDict): + return o.data + elif isinstance(o, typedcols.TypedList): + return o.data + else: + raise ValueError(o) + + def to_json(self, *args, **kwargs): + return json.dumps(self, default=self.json_default, *args, **kwargs) diff --git a/lib_python/lib/idea-format/idea/lite.py b/lib_python/lib/idea-format/idea/lite.py index f5c7e4aa22470338f617947fada01929f6df4108..6a38f61b3e3f4b1cfd3acaa41c8e12953f22f415 100644 --- a/lib_python/lib/idea-format/idea/lite.py +++ b/lib_python/lib/idea-format/idea/lite.py @@ -232,15 +232,16 @@ class Idea(base.IdeaBase): typedcols.typed_list("AttachList", AttachDict), typedcols.typed_list("NodeList", NodeDict)) -def json_default(o): - if isinstance(o, (ipranges.IPBase, uuid.UUID)): - return str(o) - elif isinstance(o, datetime.datetime): - return o.isoformat() + "Z" - elif isinstance(o, datetime.timedelta): - hours = o.seconds // 3600 - mins = (o.seconds % 3600) // 60 - secs = o.seconds % 60 - return "%s%02i:%02i:%02i%s" % (("%iD" % o.days) if o.days else "", hours, mins, secs, (".%i" % o.microseconds) if o.microseconds else "") - else: - return base.json_default(o) + @staticmethod + def json_default(o): + if isinstance(o, (ipranges.IPBase, uuid.UUID)): + return str(o) + elif isinstance(o, datetime.datetime): + return o.isoformat() + "Z" + elif isinstance(o, datetime.timedelta): + hours = o.seconds // 3600 + mins = (o.seconds % 3600) // 60 + secs = o.seconds % 60 + return "%s%02i:%02i:%02i%s" % (("%iD" % o.days) if o.days else "", hours, mins, secs, (".%i" % o.microseconds) if o.microseconds else "") + else: + return base.IdeaBase.json_default(o) diff --git a/lib_python/lib/idea-format/idea/valid.py b/lib_python/lib/idea-format/idea/valid.py index dc4c27b1e39b7779117a0958276464774de52bad..59a87c63a1d973d50fa683a18f5c01bd62857026 100644 --- a/lib_python/lib/idea-format/idea/valid.py +++ b/lib_python/lib/idea-format/idea/valid.py @@ -11,7 +11,6 @@ import struct import socket from .base import unicode -from .base import json_default def Version(s): diff --git a/lib_python/lib/idea-format/setup.py b/lib_python/lib/idea-format/setup.py index 9f22c72cb13cfad13d073daa6412f92155a8ec56..8f9d8b8aa29611aaa75bec42b51de77cc19c443d 100644 --- a/lib_python/lib/idea-format/setup.py +++ b/lib_python/lib/idea-format/setup.py @@ -17,6 +17,8 @@ from setuptools import setup, find_packages from codecs import open from os import path +import idea + here = path.abspath(path.dirname(__file__)) # Get the long description from the README file @@ -25,7 +27,8 @@ with open(path.join(here, 'README.rst'), encoding='utf-8') as f: setup( name = 'idea-format', - version = '0.1.7', + #version = '0.1.8', + version = idea.__version__, description = 'Python library for working with IDEA messages.', long_description = long_description, classifiers = [ diff --git a/lib_python/lib/idea-format/test_idea.py b/lib_python/lib/idea-format/test_idea.py index 14056ceefa491967e853a7426237655d5264c711..e91ba5ead78b4eabeab1eedd255d1b47a560ca75 100755 --- a/lib_python/lib/idea-format/test_idea.py +++ b/lib_python/lib/idea-format/test_idea.py @@ -4,7 +4,6 @@ # Copyright (c) 2016, CESNET, z. s. p. o. # Use of this source is governed by an ISC license, see LICENSE file. -import typedcol import unittest import json import difflib @@ -80,13 +79,13 @@ class TestIdea(unittest.TestCase): def testLiteIdea(self): idea = lite.Idea(raw_idea) orig = json.dumps(raw_idea, indent=4, sort_keys=True) - new = json.dumps(idea, indent=4, sort_keys=True, default=lite.json_default) + new = idea.to_json(indent=4, sort_keys=True) self.assertEqual(orig, new, "\n".join([l for l in difflib.context_diff(orig.split("\n"), new.split("\n"))])) def testValidIdea(self): idea = valid.Idea(raw_idea) orig = json.dumps(raw_idea, indent=4, sort_keys=True) - new = json.dumps(idea, indent=4, sort_keys=True, default=valid.json_default) + new = idea.to_json(indent=4, sort_keys=True) self.assertEqual(orig, new, "\n".join([l for l in difflib.context_diff(orig.split("\n"), new.split("\n"))]))