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
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'
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'
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)
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
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
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
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))
def test_simple(self): assert 'baz' == extract(self.document, '/foo/1')
def test_bypass_ref(self): assert self.document['bar'] == extract(self.document, '/bar', bypass_ref=True)
def test_bypass_reference(self): assert 'obj2#/sub' == extract(self.document, '/foo/2/$ref', bypass_ref=True)
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 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
def test_mapping(self): assert 42 == extract(self.document, '/foo')
def test_with_reference(self): with self.assertRaises(RefError): assert 'quux' == extract(self.document, '/foo/2')
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
def test_bypass_ref(self): assert self.document[2] == extract(self.document, '/2', bypass_ref=True)
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
def test_cast(self): assert self.document[4] == extract(self.document, '/4')
def test_sequence(self): assert 'bar' == extract(self.document, '/1')
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))
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))
# -*- 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'))