예제 #1
0
    def test_out_of_bound(self):
        try:
            extract(self.document, '/3')
            self.fail('out of bound')
        except events.OutOfBounds as event:
            assert self.document == event.obj

        try:
            extract(self.document, '/quux')
            self.fail('out of bound')
        except events.OutOfBounds as event:
            assert self.document == event.obj
예제 #2
0
    def test_out_of_bound(self):
        try:
            extract(self.document, '/3')
            self.fail('out of bound')
        except events.OutOfBounds as event:
            assert self.document == event.obj

        try:
            extract(self.document, '/quux')
            self.fail('out of bound')
        except events.OutOfBounds as event:
            assert self.document == event.obj
예제 #3
0
    def test_relative_2(self):
        nested_relative = extract(self.document, '/highly/nested')
        assert extract(nested_relative, '0/objects') == True
        assert extract(nested_relative, '1/nested/objects') == True
        assert extract(nested_relative, '2/foo/0') == 'bar'
        assert extract(nested_relative, '0#') == 'nested'
        assert extract(nested_relative, '1#') == 'highly'

        assert extract(nested_relative, '0/objects').obj is True
        assert extract(nested_relative, '1/nested/objects').obj is True
        assert extract(nested_relative, '2/foo/0').obj == 'bar'
예제 #4
0
    def test_relative_2(self):
        nested_relative = extract(self.document, '/highly/nested')
        assert extract(nested_relative, '0/objects') == True
        assert extract(nested_relative, '1/nested/objects') == True
        assert extract(nested_relative, '2/foo/0') == 'bar'
        assert extract(nested_relative, '0#') == 'nested'
        assert extract(nested_relative, '1#') == 'highly'

        assert extract(nested_relative, '0/objects').obj == True
        assert extract(nested_relative, '1/nested/objects').obj == True
        assert extract(nested_relative, '2/foo/0').obj == 'bar'
예제 #5
0
파일: engine.py 프로젝트: usnistgov/jsont
    def extract(self, input, context, select):
        """
        Use a given data pointer to extract data from either the input data
        or the context.
        """
        use = self.normalize_datapointer(select, context)

        try:
            if use.target == "$in":
                return jsonptr.extract(input, use.path)
            elif use.target == "$context":
                return jsonptr.extract(context, use.path)
        except jsonptr.ExtractError, ex:
            # CONSIDER: return None?
            raise DataExtractionError.due_to(ex, use.path, input, context)
예제 #6
0
    def test_relative_1(self):
        baz_relative = extract(self.document, '/foo/1')
        # staged
        assert extract(baz_relative, '0') == 'baz'
        assert extract(baz_relative, '1/0') == 'bar'
        assert extract(baz_relative, '2/highly/nested/objects') == True

        # keys
        assert extract(baz_relative, '0#') == 1
        assert extract(baz_relative, '1#') == 'foo'

        # unstage
        assert extract(baz_relative, '0').obj == 'baz'
        assert extract(baz_relative, '1/0').obj == 'bar'
        assert extract(baz_relative, '2/highly/nested/objects').obj == True
예제 #7
0
    def test_relative_1(self):
        baz_relative = extract(self.document, '/foo/1')
        # staged
        assert extract(baz_relative, '0') == 'baz'
        assert extract(baz_relative, '1/0') == 'bar'
        assert extract(baz_relative, '2/highly/nested/objects') == True

        # keys
        assert extract(baz_relative, '0#') == 1
        assert extract(baz_relative, '1#') == 'foo'

        # unstage
        assert extract(baz_relative, '0').obj == 'baz'
        assert extract(baz_relative, '1/0').obj == 'bar'
        assert extract(baz_relative, '2/highly/nested/objects').obj is True
예제 #8
0
 def _repl_getvalue(self, match):
     try:
         # Extracts the pointed value from the root object
         value = extract(self.obj, match[1])
         # If it's not a string, it's not valid
         if not isinstance(value, str):
             raise ValueError("Not a string: {}".format(value))
     except (ExtractError, ValueError) as e:
         # Sets value to empty string
         value = ""
         print(e)
     return value
예제 #9
0
파일: cli.py 프로젝트: johnnoone/json-spec
    def run(self, args):
        parse_pointer(args)
        parse_document(args)

        from jsonspec.pointer import extract
        from jsonspec.pointer import ExtractError, ParseError

        try:
            response = extract(args.document, args.pointer)
            return driver.dumps(response, indent=args.indent)
        except ExtractError:
            raise Exception(args)
            raise Exception('{} does not match'.format(args.pointer))
        except ParseError:
            raise Exception('{} is not a valid pointer'.format(args.pointer))
예제 #10
0
    def run(self, args):
        parse_pointer(args)
        parse_document(args)

        from jsonspec.pointer import extract
        from jsonspec.pointer import ExtractError, ParseError

        try:
            response = extract(args.document, args.pointer)
            return driver.dumps(response, indent=args.indent)
        except ExtractError:
            raise Exception(args)
            raise Exception('{} does not match'.format(args.pointer))
        except ParseError:
            raise Exception('{} is not a valid pointer'.format(args.pointer))
예제 #11
0
 def test_simple(self):
     assert 'baz' == extract(self.document, '/foo/1')
예제 #12
0
 def test_bypass_ref(self):
     assert self.document['bar'] == extract(self.document,
                                            '/bar',
                                            bypass_ref=True)
예제 #13
0
 def test_bypass_reference(self):
     assert 'obj2#/sub' == extract(self.document,
                                   '/foo/2/$ref',
                                   bypass_ref=True)
예제 #14
0
 def test_bypass_ref(self):
     assert self.document['bar'] == extract(self.document, '/bar',
                                            bypass_ref=True)
예제 #15
0
 def test_last_element(self):
     try:
         extract(self.document, '/-')
         self.fail('last element needed')
     except events.LastElement as event:
         assert self.document == event.obj
예제 #16
0
 def test_out_of_range(self):
     try:
         extract(self.document, '/3')
         self.fail('last element needed')
     except events.OutOfRange as event:
         assert self.document == event.obj
예제 #17
0
 def test_mapping(self):
     assert 42 == extract(self.document, '/foo')
예제 #18
0
 def test_with_reference(self):
     with self.assertRaises(RefError):
         assert 'quux' == extract(self.document, '/foo/2')
예제 #19
0
 def test_wrong_type(self):
     try:
         extract(self.document, '/foo')
         self.fail('last element needed')
     except events.WrongType as event:
         assert self.document == event.obj
예제 #20
0
 def test_mapping(self):
     assert 42 == extract(self.document, '/foo')
예제 #21
0
 def test_out_of_range(self):
     try:
         extract(self.document, '/3')
         self.fail('last element needed')
     except events.OutOfRange as event:
         assert self.document == event.obj
예제 #22
0
 def test_bypass_ref(self):
     assert self.document[2] == extract(self.document,
                                        '/2',
                                        bypass_ref=True)
예제 #23
0
 def test_ref(self):
     try:
         extract(self.document, '/2')
         self.fail('last element needed')
     except events.RefError as event:
         assert self.document[2] == event.obj
예제 #24
0
 def test_cast(self):
     assert self.document[4] == extract(self.document, '/4')
예제 #25
0
 def test_sequence(self):
     assert 'bar' == extract(self.document, '/1')
예제 #26
0
 def test_simple(self):
     assert 'baz' == extract(self.document, '/foo/1')
예제 #27
0
 def test_ref(self):
     try:
         extract(self.document, '/2')
         self.fail('last element needed')
     except events.RefError as event:
         assert self.document[2] == event.obj
예제 #28
0
 def test_bypass_reference(self):
     assert 'obj2#/sub' == extract(self.document, '/foo/2/$ref',
                                   bypass_ref=True)
예제 #29
0
 def test_sequence(self):
     assert 'bar' == extract(self.document, '/1')
예제 #30
0
 def test_last_element(self):
     try:
         extract(self.document, '/-')
         self.fail('last element needed')
     except events.LastElement as event:
         assert self.document == event.obj
 def __replace_ref(self, obj_key, ref_string):
     path = self.__get_json_path(obj_key)
     (json_file, json_path) = ref_string.split('#')
     real_def = extract(self.__get_refered_json(json_file), json_path)
     exec('self.schema' + path + ' = ' + json.dumps(real_def))
예제 #32
0
 def test_bypass_ref(self):
     assert self.document[2] == extract(self.document, '/2',
                                        bypass_ref=True)
예제 #33
0
 def test_cast(self):
     assert self.document[4] == extract(self.document, '/4')
예제 #34
0
 def test_wrong_type(self):
     try:
         extract(self.document, '/foo')
         self.fail('last element needed')
     except events.WrongType as event:
         assert self.document == event.obj
예제 #35
0
 def test_with_reference(self):
     with self.assertRaises(RefError):
         assert 'quux' == extract(self.document, '/foo/2')
 def __replace_ref(self,obj_key,ref_string):
     path = self.__get_json_path(obj_key)
     (json_file,json_path) = ref_string.split('#')
     real_def = extract(self.__get_refered_json(json_file),json_path)
     exec('self.schema' + path + ' = ' + json.dumps(real_def))
예제 #37
0
# -*- coding:utf-8 -*-
# json pointer

from jsonspec.pointer import extract

obj = {'foo': ['bar', 'baz', 'quux']}
assert 'baz' == extract(obj, '/foo/1')
print(extract(obj, '/foo/1'))