Example #1
0
    def test_nested_parser_template(self):
        TickerModel = Processor({
            'amount':
            0.66075377,
            'datetime':
            Instances['datetime'],
            'fee':
            None,
            'id':
            None,
            'info':
            ['659.100000', '0.66075377', 1517364874.3597, 's', 'l', ''],
        })

        TickerListProcessor = Processor({
            'tickers': [TickerModel],
        })

        tmp = {
            'tickers': [{
                'amount': '0.66075377',
                'datetime': '1517408042',
                'fee': None,
                'id': None,
                'info': '[]',
            }]
        }
        result = TickerListProcessor(tmp)
        self.assertEqual(result['tickers'][0]['amount'], 0.66075377)
        self.assertEqual(result['tickers'][0]['datetime'],
                         datetime(2018, 1, 31, 6, 14, 2))
        self.assertEqual(result['tickers'][0]['info'], [])
        self.assertEqual(result['tickers'][0]['fee'], None)
        self.assertEqual(len(result['tickers']), 1)
Example #2
0
    def test_processor_obj_deep(self):
        p = Processor({
            'deep': {
                'start': Instances['datetime'],
                'end': Instances['datetime'],
            }
        })
        childProcessor = Processor({
            'start': Instances['datetime'],
            'end': Instances['datetime'],
        })

        p3 = Processor({'deep': childProcessor})
        p4 = Processor([p3])
        tmp = {
            'deep': {
                'start': 1576226168.818243,
                'end': 1576226168.818243,
            }
        }
        resultFull = p(tmp)
        resultNested = p3(tmp)
        resultNestedArr = p4([tmp])
        expected = {
            'deep': {
                'start': datetime(2019, 12, 13, 0, 36, 8, 818243),
                'end': datetime(2019, 12, 13, 0, 36, 8, 818243),
            }
        }
        self.assertEqual(resultNested, expected)
        self.assertEqual(resultFull, expected)
        self.assertEqual(resultNestedArr, [expected])
Example #3
0
 def test_processor_chain_complex(self):
     p0 = Processor(lambda partial, options={}: '%s -> %s' %
                    (options, partial * 34))
     p = Processor.flow([
         float, int, lambda partial, options={}: '%s -> %s' %
         (options, partial * 34)
     ])
     self.assertEqual(p('1.0'), '1.0 -> 34')
Example #4
0
 def test_json_dump_datetime(self):
     # Test the json datetime encoder
     pt = Processor(Instances['datetime'])
     tmp = pt(1517408265547)
     self.assertEqual(datetime(2018, 1, 31, 6, 17, 45, 547000), tmp)
     res = Parser('', {'datetime': tmp})
     self.assertEqual('{"datetime": "2018-01-31T06:17:45.547"}', res)
Example #5
0
 def test_s_ts(self):
     # Parse ms timestamp format (like from python)
     pt = Processor(Instances['datetime'])
     tmp = 1517408042.277897
     self.assertEqual(datetime(2018, 1, 31, 6, 14, 2, 277897), pt(tmp))
     tmp = 1517408042
     self.assertEqual(datetime(2018, 1, 31, 6, 14, 2), pt(tmp))
Example #6
0
    def test_none(self):
        pt = Processor({
            'amount':
            0.66075377,
            'datetime':
            Instances['datetime'],
            'fee':
            None,
            'id':
            None,
            'price':
            10000.0,
            'info':
            ['659.100000', '0.66075377', 1517364874.3597, 's', 'l', ''],
        })

        tmp = {
            'amount': 0.66075377,
            'datetime': '2018-01-31T02:14:34.359Z',
            'fee': None,
            'id': None,
            'price': '$10,000.00',
            'info':
            ['659.100000', '0.66075377', 1517364874.3597, 's', 'l', ''],
        }
        self.assertEqual(pt(tmp), tmp)
Example #7
0
    def test_function_conversion(self):
        # Executes the function passed in rather than using builtin
        def convert_multiply(var):
            return int(var) * 10

        pt = Processor(convert_multiply)
        self.assertEqual(10, pt('1'))
Example #8
0
    def test_processor_chain_lambda_original_value(self):
        partA = lambda partial, options={}: {'total': sum(partial)}

        def partB(partial, options={}):
            partial.update({'fraction': options[1] / partial['total']})
            return partial

        def partC(partial, options={}):
            return {'fraction': options[1] / partial['total']}

        pReduce = Processor.flow([partA, partC], aggregator='reduce')
        pReduceMerge = Processor.flow([partA, partB], aggregator='reduce')
        pMerge = Processor.flow([partA, partC], aggregator='merge')
        resultReduce = pReduce([10, 2, 100])
        resultReduceMerge = pReduceMerge([10, 2, 100])
        resultMerge = pMerge([10, 2, 100])
        exp = {'total': 112, 'fraction': 2 / 112}
        self.assertEqual({'fraction': 2 / 112}, resultReduce)
        self.assertEqual(exp, resultReduceMerge)
        self.assertEqual(exp, resultMerge)
        self.assertEqual(resultReduceMerge, resultMerge)
Example #9
0
 def test_processor_obj(self):
     p = Processor({
         'start': Instances['datetime'],
         'end': Instances['datetime'],
     })
     result = p({
         'start': 1576226168.818243,
         'end': 1576226168.818243,
     })
     expected = {
         'start': datetime(2019, 12, 13, 0, 36, 8, 818243),
         'end': datetime(2019, 12, 13, 0, 36, 8, 818243),
     }
     self.assertEqual(result, expected)
Example #10
0
 def test_processor_arr(self):
     p = Processor([Instances['datetime']])
     self.assertEqual(p([1576226168.818243]),
                      [datetime(2019, 12, 13, 0, 36, 8, 818243)])
Example #11
0
 def test_custom_processor_aggs(self):
     getLastResult = lambda res: res[-1]['result']
     proc = Processor(lambda p, options={}: {'result': [1, 2, 3]},
                      aggregator=getLastResult)
     self.assertEqual(proc(None), [1, 2, 3])
Example #12
0
 def test_datetime_to_str_cast(self):
     # Test encoding a datetime to a float
     pt = Processor(str)
     tmp = pt(datetime(2018, 1, 31, 6, 17, 45, 547000))
     self.assertEqual("2018-01-31T06:17:45.547", tmp)
Example #13
0
 def test_processor_chain_complex(self):
     p = Processor.flow([float, int, lambda x: x * 34])
     self.assertEqual(p('1.0'), 34)
Example #14
0
 def test_processor_chain_then(self):
     p = Processor(float)
     self.assertEqual(p('1.0'), 1.0)
     p.then(int)
     self.assertEqual(p('1.0'), 1)
Example #15
0
 def test_ms_ts(self):
     # Parse s timestamp format (like from python)
     pt = Processor(Instances['datetime'])
     tmp = 1517408265547
     self.assertEqual(datetime(2018, 1, 31, 6, 17, 45, 547000), pt(tmp))
Example #16
0
 def test_lambda_conversion(self):
     # Executes the lambda passed in rather than using builtin
     pt = Processor(lambda x: int(x) * 10)
     self.assertEqual(10, pt('1'))
Example #17
0
 def test_processor(self):
     p = Processor(int)
     self.assertEqual(p('1.0'), 1)
Example #18
0
 def test_datetime_to_int_cast(self):
     # Test the timestamp encoding a datetime to int
     pt = Processor(int)
     tmp = pt(datetime(2018, 1, 31, 6, 17, 45, 547000))
     self.assertEqual(1517408265547, tmp)
Example #19
0
 def test_processor_chain_flow(self):
     p = Processor.flow([float, int])
     self.assertEqual(p('1.0'), 1)
     # Base case of 1 elem
     p = Processor.flow([int])
     self.assertEqual(p('1.0'), 1)
Example #20
0
 def test_datetime_to_float_cast(self):
     # Test encoding a datetime to a float
     pt = Processor(float)
     tmp = pt(datetime(2018, 1, 31, 6, 14, 2, 277897))
     self.assertEqual(1517408042.277897, tmp)
Example #21
0
 def test_processor_dt(self):
     p = Processor(Instances['datetime'])
     self.assertEqual(p(1576226168.818243),
                      datetime(2019, 12, 13, 0, 36, 8, 818243))
Example #22
0
 def test_json_encoder_processor_resolve(self):
     res = json.dumps(
         {'date': Processor(datetime(2018, 1, 31, 6, 17, 45, 547000))},
         cls=JSONEncoder)
     self.assertEqual(res, '{"date": null}')