예제 #1
0
파일: projection_test.py 프로젝트: lowks/yq
 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})
예제 #2
0
 def test_simple(self):
     self.assertListEqual(
         Comprehension(Dot('foo'))._apply_item([{
             'foo': 3
         }, {
             'foo': 4,
             'bar': 'baz'
         }]), [3, 4])
예제 #3
0
파일: projection_test.py 프로젝트: lowks/yq
 def test_other_dot_repr(self):
     self.assertEqual(repr(Projection([ProjectionItem('foo', Dot('bar'))])),
                      '{foo: .bar}')
예제 #4
0
파일: projection_test.py 프로젝트: lowks/yq
 def test_simple_repr(self):
     p = Projection([
         ProjectionItem('foo', Dot('foo')),
         ProjectionItem('blam', Dot('blam'))
     ])
     self.assertEqual(repr(p), '{foo, blam}')
예제 #5
0
파일: dot_test.py 프로젝트: SamuelMarks/yq
 def test_simple(self):
     dot = Dot('foo')
     self.assertEqual(dot._apply_item(self.data), 'bar')
예제 #6
0
파일: dot_test.py 프로젝트: SamuelMarks/yq
 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')
예제 #7
0
파일: dot_test.py 프로젝트: SamuelMarks/yq
 def test_no_such_key(self):
     dot = Dot('gah')
     self.assertIsNone(dot._apply_item({'bar': 3}))
예제 #8
0
 def test_not_an_object_empty_dot(self):
     l = [1]
     self.assertListEqual(Dot().apply(l), l)
예제 #9
0
 def test_simple(self):
     dot = Dot('foo')
     self.assertEqual(dot._apply_item(self.data), 'bar')
예제 #10
0
 def test_no_such_key(self):
     dot = Dot('gah')
     self.assertIsNone(dot._apply_item({'bar': 3}))
예제 #11
0
 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')
예제 #12
0
 def test_empty_key(self):
     self.assertEqual(Dot('')._apply_item(self.data), self.data)
     self.assertEqual(Dot()._apply_item(self.data), self.data)
예제 #13
0
 def test_repr(self):
     self.assertEqual(repr(Dot('foo')), '.foo')
예제 #14
0
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]))\
예제 #15
0
파일: sequence_test.py 프로젝트: lowks/yq
 def test_dots_repr(self):
     sequence = Sequence([Dot('foo'), Dot('bar')])
     self.assertEqual(repr(sequence), '.foo.bar')
예제 #16
0
 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)
예제 #17
0
파일: sequence_test.py 프로젝트: lowks/yq
 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'])
예제 #18
0
 def test_repr(self):
     self.assertEqual(repr(Comprehension(Dot('bar'))), '[.bar]')