예제 #1
0
 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
예제 #2
0
 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'])
예제 #3
0
 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
예제 #4
0
 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'})
예제 #5
0
 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)
예제 #6
0
 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'])