Git Product home page Git Product logo

json_checker's People

Contributors

dkorytkin avatar pyup-bot avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

json_checker's Issues

not correct work operator Or

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

to many dict validations with Or operator

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'>}

raise TypeError(repr(o) + " is not JSON seriali

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

ImportError: No module named 'six'

$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/

AssertionError: Wrong current data

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

OptionalKey not shown key in exception

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

AssertionError: Wrong current dict is None

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

dont correct working operator Or with dicts

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}

Not correct validation with expected empty list

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]

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-7: ordinal not in range(128)

    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

AssertionError: Wrong current data

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

Not correct ListCheckerError: current value list is not list

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

Not correct unicode error message

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'

TypeError: sequence item 1: expected string, NoneType found

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

current value [] is not []

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 []

Error missing key don't understand, where missing

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"

ValueError: max() arg is an empty sequence

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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.