123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- Metadata-Version: 2.0
- Name: visitor
- Version: 0.1.3
- Summary: A tiny pythonic visitor implementation.
- Home-page: http://github.com/mbr/visitor
- Author: Marc Brinkmann
- Author-email: git@marcbrinkmann.de
- License: MIT
- Platform: UNKNOWN
- Classifier: Programming Language :: Python :: 2
- Classifier: Programming Language :: Python :: 3
- visitor
- =======
- A tiny library to facilitate `visitor
- <https://en.wikipedia.org/wiki/Visitor_pattern>`_ implementation in Python
- (which are slightly peculiar due to dynamic typing). In fact, it is so small,
- you may just be better off copy & pasting the source straight into your
- project...
- Example use
- -----------
- A simple JSON-encoder:
- .. code-block:: python
- from visitor import Visitor
- class JSONEncoder(Visitor):
- def __init__(self):
- self.indent = 0
- def escape_str(self, s):
- # note: this is not a good escape function, do not use this in
- # production!
- s = s.replace('\\', '\\\\')
- s = s.replace('"', '\\"')
- return '"' + s + '"'
- def visit_list(self, node):
- self.indent += 1
- s = '[\n' + ' ' * self.indent
- s += (',\n' + ' ' * self.indent).join(self.visit(item)
- for item in node)
- self.indent -= 1
- s += '\n' + ' ' * self.indent + ']'
- return s
- def visit_str(self, node):
- return self.escape_str(node)
- def visit_int(self, node):
- return str(node)
- def visit_bool(self, node):
- return 'true' if node else 'false'
- def visit_dict(self, node):
- self.indent += 1
- s = '{\n' + ' ' * self.indent
- s += (',\n' + ' ' * self.indent).join(
- '{}: {}'.format(self.escape_str(key), self.visit(value))
- for key, value in sorted(node.items())
- )
- self.indent -= 1
- s += '\n' + ' ' * self.indent + '}'
- return s
- data = [
- 'List', 'of', 42, 'items', True, {
- 'sub1': 'some string',
- 'sub2': {
- 'sub2sub1': False,
- 'sub2sub2': 123,
- }
- }
- ]
- print(JSONEncoder().visit(data))
- Output::
- [
- "List",
- "of",
- 42,
- "items",
- true,
- {
- "sub1": "some string",
- "sub2": {
- "sub2sub1": false,
- "sub2sub2": 123
- }
- }
- ]
|