dkorytkin / json_checker Goto Github PK
View Code? Open in Web Editor NEWValidate json data and etc...
License: MIT License
Validate json data and etc...
License: MIT License
from checker import Checker, Or, OptionalKey
ex = [
{'caption': basestring, 'data': Or(
{'max': Or(int, None), 'min': Or(int, None), OptionalKey('presets'): [int]},
{'values': [
{'count': int, 'caption': basestring, 'id': Or(int, basestring)}
]
}), 'key': basestring}]
cu = [
{'caption': 'price', 'data': {'max': None, 'min': None}, 'key': 'price'},
{'caption': 'state', 'data': {'values': [
{'caption': 'ru', 'count': 23, 'id': 1123},
{'caption': 122, 'count': 21, 'id': 666}]},
'key': 'bss1'}
]
Checker(ex).validate(cu)
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/IPython/core/interactiveshell.py", line 2882, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-7-3f95426b5a59>", line 1, in <module>
Checker(ex, ignore_extra_keys=True).validate(cu)
File "/home/dkorytkin/json_checker/checker.py", line 326, in validate
result = checker.validate(data)
File "/home/dkorytkin/json_checker/checker.py", line 261, in validate
return list_checker.validate(data)
File "/home/dkorytkin/json_checker/checker.py", line 102, in validate
result = checker.validate(data)
File "/home/dkorytkin/json_checker/checker.py", line 268, in validate
return dict_checker.validate(data)
File "/home/dkorytkin/json_checker/checker.py", line 160, in validate
self._append_errors_or_raise(key, result)
File "/home/dkorytkin/json_checker/checker.py", line 143, in _append_errors_or_raise
raise DictCheckerError(DICT_ERROR_TEMPLATE.format(key, result))
DictCheckerError:
From key="data"
Not valid data Or("{'max': Or(<type 'int'>, None), OptionalKey(presets): [<type 'int'>], 'min': Or(<type 'int'>, None)}", "{'values': [{'count': <type 'int'>, 'caption': <type 'basestring'>, 'id': Or(<type 'int'>, <type 'basestring'>)}]}")
DictCheckerErrors:
Missing keys: max, values, min
DictCheckerErrors:
From key="values"
ListCheckerErrors:
DictCheckerErrors:
From key="caption"
current value 122 is not basestring
example code:
from json_checker import Checker, Or
Checker(Or({'key': int}, {})).validate({})
return log:
2017-09-26 10:29:22,558 - INFO - Checker settings ignore_extra_keys=False, soft=False
2017-09-26 10:29:22,559 - INFO - Run Or validation {}
2017-09-26 10:29:22,559 - INFO - Or expected data ({'key': <class 'int'>}, {})
2017-09-26 10:29:22,559 - WARNING - Or selected dict={}
2017-09-26 10:29:22,559 - INFO - Run dict validation {}
2017-09-26 10:29:22,559 - INFO - Run dict validation {}
2017-09-26 10:29:22,559 - INFO - Run dict validation {}
2017-09-26 10:29:22,559 - INFO - Run dict validation {'key': <class 'int'>}
2017-09-26 10:29:22,560 - WARNING - Have error key=key result=Missing key
2017-09-26 10:29:22,560 - INFO - Run dict validation {}
2017-09-26 10:29:22,560 - INFO - Run dict validation {}
2017-09-26 10:29:22,560 - INFO - Validation Or success
Must be skiped validation:
Run dict validation {'key': <class 'int'>}
example:
from checker import Checker, Or, And, OptionalKey
Checker([int]).validate([])
Out[5]: []
example code
Checker(Or({'test1': int}, {'key1': str})).validate({'test1': 'test'})
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/IPython/core/interactiveshell.py", line 2882, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-7-7c4d74a94717>", line 1, in <module>
Checker(Or({'test1': int}, {'key1': str})).validate({'test1': 'test'})
File "/home/dkorytkin/json_checker/checker.py", line 325, in validate
result = checker.validate(data)
File "/home/dkorytkin/json_checker/checker.py", line 268, in validate
result = self.expected_data.validate(data)
File "/home/dkorytkin/json_checker/checker.py", line 205, in validate
return self._format_errors(errors)
File "/home/dkorytkin/json_checker/checker.py", line 195, in _format_errors
self._format_data(),
File "/home/dkorytkin/json_checker/checker.py", line 190, in _format_data
return tuple(_format_data(d) for d in self.expected_data)
File "/home/dkorytkin/json_checker/checker.py", line 190, in <genexpr>
return tuple(_format_data(d) for d in self.expected_data)
File "/home/dkorytkin/json_checker/checker.py", line 65, in _format_data
return json.dumps(data)
File "/usr/lib/python2.7/json/__init__.py", line 244, in dumps
return _default_encoder.encode(obj)
File "/usr/lib/python2.7/json/encoder.py", line 207, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/lib/python2.7/json/encoder.py", line 270, in iterencode
return _iterencode(o, 0)
File "/usr/lib/python2.7/json/encoder.py", line 184, in default
raise TypeError(repr(o) + " is not JSON seriali
$pip install -r requirements.txt
Collecting json_checker==1.2.0 (from -r requirements.txt (line 2))
Downloading json_checker-1.2.0.tar.gz
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/tmp/pip-build-0zpthmeq/json-checker/setup.py", line 6, in <module>
import json_checker
File "/tmp/pip-build-0zpthmeq/json-checker/json_checker/__init__.py", line 2, in <module>
from json_checker.app import Checker, And, Or, OptionalKey
File "/tmp/pip-build-0zpthmeq/json-checker/json_checker/app.py", line 7, in <module>
from six import with_metaclass
ImportError: No module named 'six'
----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-0zpthmeq/json-checker/
self = <checker.Validator object at 0x7fb53ace06d0>, data = []
def validate(self, data):
if _is_iter(self.expected_data):
assert data and _is_iter(data), u'Wrong current data'
E AssertionError: Wrong current data
For example:
from json_checker import Checker, OptionalKey
Checker({OptionalKey('x'): str}).validate({'x': 1})
Traceback (most recent call last):
....
json_checker.exceptions.DictCheckerError: From key="OptionalKey(str)": current value int is not str
Expected:
json_checker.exceptions.DictCheckerError: From key="OptionalKey('x')": current value int is not str
from checker import Checker
Checker({}).validate({})
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/IPython/core/interactiveshell.py", line 2882, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-3-c271900b0039>", line 1, in <module>
Checker({}).validate({})
File "/usr/local/lib/python2.7/dist-packages/checker.py", line 345, in validate
result = checker.validate(data)
File "/usr/local/lib/python2.7/dist-packages/checker.py", line 293, in validate
return dict_checker.validate(data)
File "/usr/local/lib/python2.7/dist-packages/checker.py", line 153, in validate
self._check_dicts(data)
File "/usr/local/lib/python2.7/dist-packages/checker.py", line 139, in _check_dicts
assert current_dict, u'Wrong current dict is None'
AssertionError: Wrong current dict is None
from json_checker import Checker, Or, OptionalKey
ex_data = Or({'key1': int, OptionalKey('key2'): str, OptionalKey('key3'): bool}, {'test': 1})
2017-09-26 12:18:02,936 - INFO - OptionalKey(key2)
2017-09-26 12:18:02,936 - INFO - OptionalKey(key3)
Checker(ex_data).validate({'key2': 1})
2017-09-26 12:18:11,740 - INFO - Checker settings: ignore_extra_keys=False, soft=False
2017-09-26 12:18:11,740 - INFO - Run Or validation {'key2': 1}
2017-09-26 12:18:11,740 - INFO - Or expected data ({'key1': <class 'int'>, OptionalKey(key2): <class 'str'>, OptionalKey(key3): <class 'bool'>}, {'test': 1})
2017-09-26 12:18:11,740 - WARNING - Or selected dict={'test': 1}
2017-09-26 12:18:11,740 - INFO - Run dict validation {'key2': 1}
2017-09-26 12:18:11,740 - WARNING - Have error key=test result=Missing key
2017-09-26 12:18:11,740 - WARNING - Added miss keys to errors
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/home/dkorytkin/json_checker/json_checker.py", line 388, in validate
raise CheckerError(result)
checker_exceptions.CheckerError:
Not valid data Or("{'key1': <class 'int'>, OptionalKey(key2): <class 'str'>, OptionalKey(key3): <class 'bool'>}", "{'test': 1}")
From key="test": Missing key
Missing keys: key2
2017-09-26 12:18:11,740 - WARNING - Or selected dict={'test': 1}
If an expected schema is an empty list and current response not empty list
Checker does not raise an error
>>> from json_checker import Checker
>>> Checker([]).validate([1, 2, 3])
[1, 2, 3]
Checker(expected).validate(current)
/usr/local/lib/python2.7/dist-packages/checker.py:331: in validate
result = checker.validate(data)
/usr/local/lib/python2.7/dist-packages/checker.py:279: in validate
return dict_checker.validate(data)
/usr/local/lib/python2.7/dist-packages/checker.py:155: in validate
result = checker.validate(current_value)
/usr/local/lib/python2.7/dist-packages/checker.py:272: in validate
return list_checker.validate(data)
/usr/local/lib/python2.7/dist-packages/checker.py:103: in validate
result = checker.validate(data)
/usr/local/lib/python2.7/dist-packages/checker.py:279: in validate
return dict_checker.validate(data)
/usr/local/lib/python2.7/dist-packages/checker.py:155: in validate
result = checker.validate(current_value)
/usr/local/lib/python2.7/dist-packages/checker.py:279: in validate
return dict_checker.validate(data)
/usr/local/lib/python2.7/dist-packages/checker.py:155: in validate
result = checker.validate(current_value)
/usr/local/lib/python2.7/dist-packages/checker.py:281: in validate
return self.expected_data.validate(data)
/usr/local/lib/python2.7/dist-packages/checker.py:224: in validate
result = checker.validate(current_data)
/usr/local/lib/python2.7/dist-packages/checker.py:302: in validate
return _format_error_message(self.expected_data, data)
/usr/local/lib/python2.7/dist-packages/checker.py:69: in _format_error_message
_format_data(current_data),
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
data = 'Самсонов'
def _format_data(data):
if callable(data):
return data.__name__
if data is None:
return data
if type(data) is str:
return json.dumps(data)
> return str(data)
E UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-7: ordinal not in range(128)
/usr/local/lib/python2.7/dist-packages/checker.py:64: UnicodeEncodeError
ex = {'caption': basestring,
'data': Or(({'max': Or((<type 'int'>, None)), 'min': Or((<type 'int'>, None)), OptionalKey(presets): [<type 'int'>]}, {'values': [{'count': <type 'int'>, 'caption': <type 'basestring'>, 'id': Or((<type 'int'>, <type 'basestring'>))}]})),
'key': basestring}
cu = [{'caption': 'price', 'data': {'max': None, 'min': None}, 'key': 'price'},
{'caption': 'state',
'data': {'values': [{'caption': 'ru', 'count': 23, 'id': 1123},
{'caption': 'fr', 'count': 21, 'id': 666}]},
'key': 'bss1'}]
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/IPython/core/interactiveshell.py", line 2882, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-8-65e138aa7423>", line 53, in <module>
u'key': u'bss1'}])
File "/home/dkorytkin/json_checker/checker.py", line 325, in validate
result = checker.validate(data)
File "/home/dkorytkin/json_checker/checker.py", line 258, in validate
result = list_checker.validate(data)
File "/home/dkorytkin/json_checker/checker.py", line 102, in validate
result = checker.validate(data)
File "/home/dkorytkin/json_checker/checker.py", line 266, in validate
self._append_errors(dict_checker.validate(data))
File "/home/dkorytkin/json_checker/checker.py", line 157, in validate
result = checker.validate(current_value)
File "/home/dkorytkin/json_checker/checker.py", line 268, in validate
result = self.expected_data.validate(data)
File "/home/dkorytkin/json_checker/checker.py", line 202, in validate
res = checker.validate(current_data)
File "/home/dkorytkin/json_checker/checker.py", line 266, in validate
self._append_errors(dict_checker.validate(data))
File "/home/dkorytkin/json_checker/checker.py", line 157, in validate
result = checker.validate(current_value)
File "/home/dkorytkin/json_checker/checker.py", line 256, in validate
assert data and _is_iter(data), 'Wrong current data'
AssertionError: Wrong current data
For example:
from json_checker import Checker
Checker([{'key': 1}]).validate([])
Traceback (most recent call last):
...
json_checker.exceptions.ListCheckerError: current value list is not list
Expected:
from json_checker import Checker
Checker([{'key': 1}]).validate([])
Traceback (most recent call last):
...
json_checker.exceptions.ListCheckerError: current value list is empty
for example
E From key="title": current value u'\u0411\u044e\u0434\u0436\u0435\u0442 \u043d\u0430 ProSale 4\xa0400\xa0000 \u0440\u0443\u0431.' is not 'Premium example.com'
from checker import Checker, Or, And, OptionalKey
import requests
ex = [{'caption': basestring,
'data': Or(
{'max': Or(int, None), 'min': Or(int, None), OptionalKey('presets'): [int]},
{'values': [{'count': int, 'caption': basestring, 'id': Or(int, basestring)}]}),
'key': basestring}]
cu = [
{'caption': 'price', 'data': {'max': 'None', 'min': None}, 'key': 'price'},
{'caption': 'state', 'data': {'values': [{'caption': 'ru', 'count': 23, 'id': 1123},
{'caption': 'fr', 'count': 21, 'id': 666}]},
'key': 'bss1'}]
Checker(ex).validate(cu)
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/IPython/core/interactiveshell.py", line 2882, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-2-4644120212cb>", line 16, in <module>
Checker(ex).validate(cu)
File "/home/dkorytkin/json_checker/checker.py", line 323, in validate
result = checker.validate(data)
File "/home/dkorytkin/json_checker/checker.py", line 256, in validate
result = list_checker.validate(data)
File "/home/dkorytkin/json_checker/checker.py", line 100, in validate
result = checker.validate(data)
File "/home/dkorytkin/json_checker/checker.py", line 264, in validate
self._append_errors(dict_checker.validate(data))
File "/home/dkorytkin/json_checker/checker.py", line 154, in validate
result = checker.validate(current_value)
File "/home/dkorytkin/json_checker/checker.py", line 266, in validate
result = self.expected_data.validate(data)
File "/home/dkorytkin/json_checker/checker.py", line 205, in validate
return self._format_errors(errors)
File "/home/dkorytkin/json_checker/checker.py", line 192, in _format_errors
self._format_data(),
File "/home/dkorytkin/json_checker/checker.py", line 187, in _format_data
return tuple(_format_data(d) for d in self.expected_data)
File "/home/dkorytkin/json_checker/checker.py", line 187, in <genexpr>
return tuple(_format_data(d) for d in self.expected_data)
File "/home/dkorytkin/json_checker/checker.py", line 65, in _format_data
return json.dumps(data)
File "/usr/lib/python2.7/json/__init__.py", line 244, in dumps
return _default_encoder.encode(obj)
File "/usr/lib/python2.7/json/encoder.py", line 207, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/lib/python2.7/json/encoder.py", line 270, in iterencode
return _iterencode(o, 0)
File "/usr/lib/python2.7/json/encoder.py", line 184, in default
raise TypeError(repr(o) + " is not JSON serializable")
File "/home/dkorytkin/json_checker/checker.py", line 183, in __repr__
data=', '.join(self._format_data())
TypeError: sequence item 1: expected string, NoneType found
from checker import Checker
Checker([]).validate([])
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/home/dkorytkin/json_checker/checker.py", line 346, in validate
result = checker.validate(data)
File "/home/dkorytkin/json_checker/checker.py", line 287, in validate
return list_checker.validate(data)
File "/home/dkorytkin/json_checker/checker.py", line 91, in validate
self._append_errors_or_raise(error)
File "/home/dkorytkin/json_checker/checker.py", line 86, in _append_errors_or_raise
raise ListCheckerError(result)
checker_exceptions.ListCheckerError:
current value [] is not []
For example:
json_checker.exceptions.CheckerError:
From key="attributes": Missing keys: "test_key"
don't understand where "test_key" is missing? In expected or actual response?
Needed add to error message where key is missing
For example:
json_checker.exceptions.CheckerError:
From key="attributes": Missing keys in current response: "test_key"
# OR
json_checker.exceptions.CheckerError:
From key="attributes": Missing keys in expected schema: "test_key"
from json_checker import Checker, Or
# examples
Checker({'key1': Or(dict, None)}).validate({'key1': {'key2': 2}})
Checker({'key1': Or(dict, None)}).validate({'key1': {}})
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/home/dkorytkin/json_checker/json_checker.py", line 392, in validate
result = checker.validate(data)
File "/home/dkorytkin/json_checker/json_checker.py", line 336, in validate
return dict_checker.validate(data)
File "/home/dkorytkin/json_checker/json_checker.py", line 177, in validate
result = checker.validate(current_value)
File "/home/dkorytkin/json_checker/json_checker.py", line 338, in validate
return self.expected_data.validate(data)
File "/home/dkorytkin/json_checker/json_checker.py", line 270, in validate
need_data = self._get_need_dict(current_data)
File "/home/dkorytkin/json_checker/json_checker.py", line 255, in _get_need_dict
need_dict = dicts.get(max(dicts.keys()))
ValueError: max() arg is an empty sequence
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.