/usr/share/pyshared/jsonpipe/sh.py is in python-jsonpipe 0.0.8-5.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | import re
import calabash
import simplejson
import jsonpipe as jp
__all__ = ['jsonpipe', 'jsonunpipe', 'select', 'search_attr']
jsonpipe = calabash.pipe(jp.jsonpipe)
@calabash.pipe
def jsonunpipe(stdin, *args, **kwargs):
"""Calabash wrapper for :func:`jsonpipe.jsonunpipe`."""
yield jp.jsonunpipe(stdin, *args, **kwargs)
@calabash.pipe
def select(stdin, path, pathsep='/'):
r"""
Select only lines beginning with the given path.
This effectively selects a single JSON object and all its sub-objects.
>>> obj = {'a': 1, 'b': {'c': 3, 'd': 4}}
>>> list(jsonpipe(obj))
['/\t{}',
'/a\t1',
'/b\t{}',
'/b/c\t3',
'/b/d\t4']
>>> list(jsonpipe(obj) | select('/b'))
['/b\t{}',
'/b/c\t3',
'/b/d\t4']
>>> list(jsonpipe(obj) | select('/b') | jsonunpipe())
[{'b': {'c': 3, 'd': 4}}]
"""
path = re.sub(r'%s$' % re.escape(pathsep), r'', path)
return iter(stdin |
calabash.common.grep(r'^%s[\t%s]' % (
re.escape(path),
re.escape(pathsep))))
@calabash.pipe
def search_attr(stdin, attr, value, pathsep='/'):
r"""
Search stdin for an exact attr/value pair.
Yields paths to objects for which the given pair matches. Example:
>>> obj = {'a': 1, 'b': {'a': 2, 'c': {'a': "Hello"}}}
>>> list(jsonpipe(obj) | search_attr('a', 1))
['/']
>>> list(jsonpipe(obj) | search_attr('a', 2))
['/b']
>>> list(jsonpipe(obj) | search_attr('a', "Hello"))
['/b/c']
Multiple matches will result in multiple paths being yielded:
>>> obj = {'a': 1, 'b': {'a': 1, 'c': {'a': 1}}}
>>> list(jsonpipe(obj) | search_attr('a', 1))
['/', '/b', '/b/c']
"""
return iter(stdin |
# '...path/attribute\tvalue' => 'path'.
calabash.common.sed(r'^(.*)%s%s\t%s' % (
re.escape(pathsep),
re.escape(attr),
re.escape(simplejson.dumps(value))),
r'\1', exclusive=True) |
# Replace empty strings with the root pathsep.
calabash.common.sed(r'^$', pathsep))
|