def simple_test(self): p = Projection([ ProjectionItem('foo', Dot('foo')), ProjectionItem('blam', Dot('blam')) ]) data = {'foo': 'bar', 'baz': 3, 'blam': 30} self.assertDictEqual(p._apply_item(data), {'foo': 'bar', 'blam': 30})
def test_simple(self): self.assertListEqual( Comprehension(Dot('foo'))._apply_item([{ 'foo': 3 }, { 'foo': 4, 'bar': 'baz' }]), [3, 4])
def test_other_dot_repr(self): self.assertEqual(repr(Projection([ProjectionItem('foo', Dot('bar'))])), '{foo: .bar}')
def test_simple_repr(self): p = Projection([ ProjectionItem('foo', Dot('foo')), ProjectionItem('blam', Dot('blam')) ]) self.assertEqual(repr(p), '{foo, blam}')
def test_simple(self): dot = Dot('foo') self.assertEqual(dot._apply_item(self.data), 'bar')
def test_not_an_object(self): dot = Dot('bah') with self.assertRaises(MatchError) as cm: dot._apply_item([1,2,3]) self.assertEqual(cm.exception.error, 'tried to access field .bah on a non-object')
def test_no_such_key(self): dot = Dot('gah') self.assertIsNone(dot._apply_item({'bar': 3}))
def test_not_an_object_empty_dot(self): l = [1] self.assertListEqual(Dot().apply(l), l)
def test_not_an_object(self): dot = Dot('bah') with self.assertRaises(MatchError) as cm: dot._apply_item([1, 2, 3]) self.assertEqual(cm.exception.error, 'tried to access field .bah on a non-object')
def test_empty_key(self): self.assertEqual(Dot('')._apply_item(self.data), self.data) self.assertEqual(Dot()._apply_item(self.data), self.data)
def test_repr(self): self.assertEqual(repr(Dot('foo')), '.foo')
def wtf(ts): import pdb pdb.set_trace() key = lambda: Word(alphanums + '_') # Literal values literals = oneOf('true false null') | ('"' + Word(alphanums) + '"') | ( Word(nums + '- .')).setName('literal') literals.setParseAction(lambda ts: Constant(yaml.load(ts[0]))) # Operations operation = Forward() emptyDot = Literal('.').setParseAction(lambda ts: Dot()) dot = (('.' + key()).setName('dot_str') | ('.["' + key() + '"]').setName('dot_subscript_str') | ('."' + key() + '"').setName('dot_quote_str')).setParseAction(lambda ts: Dot(ts[1])) extract = ( Literal('.[]').setParseAction(Extract).setName('extract') | (dot + '[]').setParseAction(lambda ts: Sequence([ts[0], Extract()]))) subscript = ('[' + delimitedList(Word(nums)) + ']')\ .setParseAction(lambda ts: Subscript(map(int, ts[1:-1])))\ .setName('subscript') subsequence = ('[' + Optional(Word(nums + '-'), None) + ':' + Optional(Word(nums + '-'), None) + ']')\ .setParseAction(lambda ts: Subsequence(ts[1], ts[3]))\
def test_dots_repr(self): sequence = Sequence([Dot('foo'), Dot('bar')]) self.assertEqual(repr(sequence), '.foo.bar')
def test_message(self): data = {'bar': ['baz']} exc = MatchError(Dot('foo'), data, 'error message') self.assertEqual( 'Failed to apply ".foo": error message. The data being processed was:\n%s' % yaml.dump(data), exc.message)
def test_dots(self): data = {'a': {'b': 'c'}} dot_a = Dot('a') dot_b = Dot('b') sequence = Sequence([dot_a, dot_b]) self.assertEqual(sequence.apply([data]), ['c'])
def test_repr(self): self.assertEqual(repr(Comprehension(Dot('bar'))), '[.bar]')