screenshare/venv/lib/python3.12/site-packages/visitor-0.1.3.dist-info/METADATA
2024-11-29 18:15:30 +00:00

104 lines
2.4 KiB
Plaintext

Metadata-Version: 2.1
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
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 3
License-File: LICENSE
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
}
}
]