Esempio n. 1
0
  def parse(cls, _dict):
    if 'type' in _dict:
      assert _dict['type'] in (Condition.Type.AND, Condition.Type.OR)
      if _dict['type'] == Condition.Type.AND:
        return AndCondition([Condition.parse(c) for c in _dict['conditions']])
      return OrCondition([Condition.parse(c) for c in _dict['conditions']])

    assert _dict.get('op') in Condition.Op.values()
    return Condition(_dict['op'],
                     Value.parse(_dict['left']),
                     Value.parse(_dict['right']))
Esempio n. 2
0
 def test_parsing_and_to_dict(self):
   _property = {'type': 'property', 'name': 'x'}
   constant = {'type': 'constant', 'value': 1}
   function = {'type': 'function', 'name': 'add',
               'arguments': [deepcopy(_property), deepcopy(constant)]}
   self.assertEqual(Value.parse(deepcopy(constant)).to_dict(), constant)
   self.assertEqual(Value.parse(deepcopy(_property)).to_dict(), _property)
   self.assertEqual(Value.parse(deepcopy(function)).to_dict(), function)
   
   kronos = {'type': 'kronos', 'host': 'localhost', 'stream': 'mystream',
             'start_time': 100, 'end_time': 200}
   self.assertEqual(Stream.parse(deepcopy(kronos)).to_dict(), kronos)
   
   condition_lt = {'op': 'lt', 'left': deepcopy(_property),
                   'right': deepcopy(constant)}
   condition_eq = {'op': 'eq', 'left': deepcopy(function),
                   'right': deepcopy(_property)}
   condition_or = {'type': 'or', 'conditions': [deepcopy(condition_lt),
                                                deepcopy(condition_eq)]}
   self.assertEqual(Condition.parse(deepcopy(condition_lt)).to_dict(),
                    condition_lt)
   self.assertEqual(Condition.parse(deepcopy(condition_eq)).to_dict(),
                    condition_eq)
   self.assertEqual(Condition.parse(deepcopy(condition_or)).to_dict(),
                    condition_or)
   
   avg = {'op': 'avg', 'arguments': [deepcopy(_property)], 'alias': 'myavg'}
   count = {'op': 'count', 'alias': 'mycount'}
   self.assertEqual(Aggregator.parse(deepcopy(avg)).to_dict(), avg)
   self.assertEqual(Aggregator.parse(deepcopy(count)).to_dict(), count)
   
   group_by = deepcopy(function)
   group_by['alias'] = 'mygroup'
   group_by = [group_by]
   self.assertEqual(GroupBy.parse(deepcopy(group_by)).to_dict(), group_by)
   
   project = {'type': 'project', 'fields': [deepcopy(_property)],
              'stream': deepcopy(kronos)}
   _filter = {'type': 'filter', 'condition': condition_lt,
             'stream': deepcopy(project)}
   aggregate = {'type': 'aggregate',
                'group_by': deepcopy(group_by),
                'aggregates': [deepcopy(avg), deepcopy(count)],
                'stream': deepcopy(_filter)}
   join = {'type': 'join', 'left': deepcopy(aggregate),
           'right': deepcopy(project), 'condition': deepcopy(condition_or)}
   self.assertEqual(Transform.parse(deepcopy(project)).to_dict(), project)
   self.assertEqual(Transform.parse(deepcopy(_filter)).to_dict(), _filter)
   self.assertEqual(Transform.parse(deepcopy(aggregate)).to_dict(), aggregate)
   self.assertEqual(Transform.parse(deepcopy(join)).to_dict(), join)
Esempio n. 3
0
  def test_parsing_and_to_dict(self):
    _property = {'type': 'property', 'name': 'x'}
    constant = {'type': 'constant', 'value': 1}
    function = {'type': 'function', 'name': 'add',
                'arguments': [deepcopy(_property), deepcopy(constant)]}
    self.assertEqual(Value.parse(deepcopy(constant)).to_dict(), constant)
    self.assertEqual(Value.parse(deepcopy(_property)).to_dict(), _property)
    self.assertEqual(Value.parse(deepcopy(function)).to_dict(), function)

    kronos = {'type': 'data_access', 'source': 'kronos', 'stream': 'mystream',
              'start_time': 100, 'end_time': 200}
    self.assertEqual(Operator.parse(deepcopy(kronos)).to_dict(), kronos)

    condition_lt = {'op': 'lt', 'left': deepcopy(_property),
                    'right': deepcopy(constant)}
    condition_eq = {'op': 'eq', 'left': deepcopy(function),
                    'right': deepcopy(_property)}
    condition_or = {'type': 'or', 'conditions': [deepcopy(condition_lt),
                                                 deepcopy(condition_eq)]}
    self.assertEqual(Condition.parse(deepcopy(condition_lt)).to_dict(),
                     condition_lt)
    self.assertEqual(Condition.parse(deepcopy(condition_eq)).to_dict(),
                     condition_eq)
    self.assertEqual(Condition.parse(deepcopy(condition_or)).to_dict(),
                     condition_or)

    avg = {'op': 'avg', 'arguments': [deepcopy(_property)], 'alias': 'myavg'}
    count = {'op': 'count', 'alias': 'mycount'}
    self.assertEqual(Aggregator.parse(deepcopy(avg)).to_dict(), avg)
    self.assertEqual(Aggregator.parse(deepcopy(count)).to_dict(), count)

    group_by = deepcopy(function)
    group_by['alias'] = 'mygroup'
    group_by = [group_by]
    self.assertEqual(GroupBy.parse(deepcopy(group_by)).to_dict(), group_by)

    project = {'type': 'project', 'fields': [deepcopy(_property)],
               'source': deepcopy(kronos)}
    _filter = {'type': 'filter', 'condition': condition_lt,
               'source': deepcopy(project)}
    aggregate = {'type': 'aggregate',
                 'group_by': deepcopy(group_by),
                 'aggregates': [deepcopy(avg), deepcopy(count)],
                 'source': deepcopy(_filter)}
    join = {'type': 'join', 'left': deepcopy(aggregate),
            'right': deepcopy(project), 'condition': deepcopy(condition_or)}
    self.assertEqual(Operator.parse(deepcopy(project)).to_dict(), project)
    self.assertEqual(Operator.parse(deepcopy(_filter)).to_dict(), _filter)
    self.assertEqual(Operator.parse(deepcopy(aggregate)).to_dict(), aggregate)
    self.assertEqual(Operator.parse(deepcopy(join)).to_dict(), join)
Esempio n. 4
0
 def parse(cls, _list):
   if not isinstance(_list, list):
     _list = [_list]
   return GroupBy([Value.parse(v) for v in _list])
Esempio n. 5
0
 def parse(cls, _list):
   if not isinstance(_list, list):
     _list = [_list]
   return GroupBy([Value.parse(v) for v in _list])