def test_nested_mapping_with_lists(self): mapping = { 'a_field': S('a', 'b'), 'a': [{ 'nested': { 'field': S('f1', 'f2'), }, }], } source = { 'a': { 'b': 'ok' }, 'f1': { 'f2': 'hi' }, } expected = { 'a_field': 'ok', 'a': [{ 'nested': { 'field': 'hi' } }], } self.assertDictEqual(bend(mapping, source), expected)
def test__no_match_with_default(self): bender = Switch(S('service'), { 'twitter': S('handle'), 'mastodon': S('handle') + K('@') + S('server') }, default=S('email')) self.assert_bender(bender, { 'service': 'facebook', 'email': '*****@*****.**' }, '*****@*****.**')
def test_getitem(self): bender = S('val')[2:8:2] if sys.version_info.major == 2: val = range(10) else: val = list(range(10)) self.assert_bender(bender, {'val': val}, [2, 4, 6])
def test_bend_inherits_outer_context_by_default(self): inner_mapping = {'val': Context()} outer_mapping = {'a': S('items') >> Forall.bend(inner_mapping)} source = {'items': range(3)} got = bend(outer_mapping, source, context=27) expected = {'a': [{'val': 27}, {'val': 27}, {'val': 27}]} self.assertEqual(got, expected)
def test_match(self): bender = Switch(S('service'), { 'twitter': S('handle'), 'mastodon': S('handle') + K('@') + S('server') }, default=S('email')) self.assert_bender(bender, { 'service': 'twitter', 'handle': 'etandel' }, 'etandel') self.assert_bender( bender, { 'service': 'mastodon', 'handle': 'etandel', 'server': 'mastodon.social' }, '*****@*****.**')
def test_bend_with_context(self): mapping = {'b': Context() >> S('c')} context = {'c': 42} self.assert_bender(self.cls.bend(mapping, context), [{}, {}], [{ 'b': 42 }, { 'b': 42 }])
def test_bend(self): self.assert_bender(self.cls.bend({'b': S('a')}), [{ 'a': 23 }, { 'a': 27 }], [{ 'b': 23 }, { 'b': 27 }])
def test_flat_mapping(self): mapping = { 'a_field': S('a', 'b'), 'another_field': K('wow'), } source = {'a': {'b': 'ok'}} expected = { 'a_field': 'ok', 'another_field': 'wow', } self.assertDictEqual(bend(mapping, source), expected)
def testSample(self): file_executor = ReadFromFile('samples/crawler_data.json') ops = [ OTConf('items.url', UrlDomainTransformer, update_element=True, update_key="domain"), OTConf('items.item_no', FloatTransform, update_element=True, update_key='item_no_float'), OTConf('items.description', RegexTransform, regex='(\w{5,100})', update_element=True, update_key='keywords') ] ot_manager = OTManager(ops).process(file_executor) MAPPING = [{ '_$': S('items') >> ForallBend( { 'url': S('url'), 'title': S('title'), 'description': S('description'), 'item_no': S('item_no'), 'client_info': Context() >> S('client_info') }) }] results = OutputBender(include=MAPPING).expand(ot_manager.results) file_executor = ReadFromFile( 'samples/tests_results_expected/sample4.json') expected = file_executor.read() self.assertListEqual(results, expected)
def test_list_with_non_dict_elements(self): mapping = {'k': ['foo1', S('bar1')]} source = {'bar1': 'val 1'} expected = {'k': ['foo1', 'val 1']} self.assertDictEqual(bend(mapping, source), expected)
def test_if_false(self): if_ = If(S('country') == K('China'), S('first_name'), S('last_name')) self.assert_bender(if_, self.guga, 'Kuerten')
def test_context_shallow(self): mapping = {'a': Context() >> S('b')} res = bend(mapping, {}, context={'b': 23}) self.assertDictEqual(res, {'a': 23})
def test_context_deep(self): mapping = {'a': [{'a': Context() >> S('b')}]} res = bend(mapping, {}, context={'b': 23}) self.assertDictEqual(res, {'a': [{'a': 23}]})
def test_if_true_default(self): if_ = If(S('country') == K('China'), when_false=S('last_name')) self.assert_bender(if_, self.na_li, None)
def test_bending_exception_is_raised_when_something_bad_happens(self): mapping = {'a': S('nonexistant')} source = {} self.assertRaises(BendingException, bend, mapping, source)
def test_op_with_context(self): mapping = {'res': (Context() >> S('b')) - S('a')} in_ = {'a': 23} context = {'b': 27} res = bend(mapping, in_, context=context) self.assertEqual(res, {'res': 4})
def test_getitem(self): bender = S('val')[2:8:2] self.assert_bender(bender, {'val': range(10)}, [2, 4, 6])
def test_if_true(self): if_ = If(S('country') == K('China'), S('first_name'), S('last_name')) self.assert_bender(if_, self.na_li, 'Li')
def test_if_false_default(self): if_ = If(S('country') == K('China'), S('first_name')) self.assert_bender(if_, self.guga, None)
def test_matches(self): bender = Alternation(S(1), S(0), S('key1')) self.assert_bender(bender, ['a', 'b'], 'b') self.assert_bender(bender, ['a'], 'a') self.assert_bender(bender, {'key1': 23}, 23)
def test__no_match_without_default(self): self.assertRaises(KeyError, Switch(S('key'), {}), {'key': None})
def test_no_match(self): self.assertRaises(IndexError, Alternation(S(1)), []) self.assertRaises(KeyError, Alternation(S(1)), {})
def test_with_context(self): bender = Format('value: {}', Context() >> S('b')) self.assert_bender(bender, None, 'value: 23', context={'b': 23})
token = sys.argv[2] board = sys.argv[3] project = sys.argv[4] buffer = StringIO() c = pycurl.Curl() c.setopt(c.VERBOSE, True) c.setopt( c.URL, 'https://api.trello.com/1/boards/' + board + '/cards?key=' + key + '&token=' + token) c.setopt(c.WRITEDATA, buffer) c.perform() c.close() body = buffer.getvalue() source = json.loads(body) mapping = { 'summary': (S('name')), 'description': (S('desc')), 'updated': (S('dateLastActivity')), 'created': (S('id')) >> (F(dateFix)), 'issueType': 'Task' } issues = [] for card in source: result = bend(mapping, card) issues.append(result) print(json.dumps({"projects": [{"name": project, "issues": issues}]}))