def from_json(json, parent_name='', ancestry=None): """Forms a Flag object from the provided JSON object. Args: json (JSON object): The JSON object to convert from. parent_name (str, optional): The name of the parent for ancestry purposes. Defaults to an empty string. ancestry (list[str], optional): The ancestry for the new Flag object. Defaults to None. Returns: The Flag object parsed from the JSON object. """ args = { arg_name: arguments.Argument.from_json(arg_json) for arg_name, arg_json in json['args'].items() } flag = Flag(action=json['action'], args=args, parent_name=parent_name, ancestry=ancestry) filters = [ Filter.from_json(filter_element, parent_name=flag.name, ancestry=flag.ancestry) for filter_element in json['filters'] ] flag.filters = filters return flag
def test_from_json_no_args_with_parent_and_ancestry(self): json_in = {'action': 'mod1_filter1', 'args': {}} filter_elem = Filter.from_json(json_in, parent_name='test_parent', ancestry=['a', 'b']) self.__compare_init(filter_elem, 'mod1_filter1', 'test_parent', ['a', 'b', 'mod1_filter1'])
def from_json(json, parent_name='', ancestry=None): args = { arg_name: arguments.Argument.from_json(arg_json) for arg_name, arg_json in json['args'].items() } flag = Flag(action=json['action'], args=args, parent_name=parent_name, ancestry=ancestry) filters = [ Filter.from_json(filter_element, parent_name=flag.name, ancestry=flag.ancestry) for filter_element in json['filters'] ] flag.filters = filters return flag
def test_from_json_with_args_with_routing(self): json_in = { 'action': 'mod1_filter2', 'args': { 'arg1': { 'format': 'number', 'key': 'arg1', 'value': '@step1' } } } filter_elem = Filter.from_json(json_in, parent_name='test_parent', ancestry=['a', 'b']) self.__compare_init(filter_elem, 'mod1_filter2', 'test_parent', ['a', 'b', 'mod1_filter2'], args={'arg1': '@step1'})
def test_from_json(self): args = {'arg1': 'a', 'arg2': 3, 'arg3': u'abc'} input_output = { Filter(): ('', ['']), Filter(action='test_action'): ('', ['']), Filter(action='test_action', parent_name='test_parent'): ('test_parent', ['test_parent']), Filter(ancestry=['a', 'b'], action="test", args=args): ('', ['a', 'b']) } for filter_element, (parent_name, ancestry) in input_output.items(): filter_json = filter_element.as_json() derived_filter = Filter.from_json(filter_json, parent_name=parent_name, ancestry=ancestry) self.assertDictEqual(derived_filter.as_json(), filter_json) self.assertEqual(filter_element.parent_name, derived_filter.parent_name) self.assertListEqual(filter_element.ancestry, derived_filter.ancestry)
def test_from_json_no_args_default_parent_and_ancestry(self): json_in = {'action': 'Top Filter', 'args': {}} filter_elem = Filter.from_json(json_in) self.__compare_init(filter_elem, 'Top Filter', '', ['', 'Top Filter'])