source: pyyaml/trunk/lib/yaml/events.py @ 222

Revision 222, 2.4 KB checked in by xi, 8 years ago (diff)

Subclass all base classes from object.

Hold references to the objects being represented (should fix #22).

The value of a mapping node is represented as a list of pairs (key, value)
now.

Sort dictionary items (fix #23).

Recursive structures are now loaded and dumped correctly, including complex
structures like recursive tuples (fix #5). Thanks Peter Murphy for the patches.
To make it possible, representer functions are allowed to be generators.
In this case, the first generated value is an object. Other values produced
by the representer are ignored.

Make Representer not try to guess !!pairs when a list is represented.
You need to construct a !!pairs node explicitly now.

Do not check for duplicate mapping keys as it didn't work correctly anyway.

Line 
1
2# Abstract classes.
3
4class Event(object):
5    def __init__(self, start_mark=None, end_mark=None):
6        self.start_mark = start_mark
7        self.end_mark = end_mark
8    def __repr__(self):
9        attributes = [key for key in ['anchor', 'tag', 'implicit', 'value']
10                if hasattr(self, key)]
11        arguments = ', '.join(['%s=%r' % (key, getattr(self, key))
12                for key in attributes])
13        return '%s(%s)' % (self.__class__.__name__, arguments)
14
15class NodeEvent(Event):
16    def __init__(self, anchor, start_mark=None, end_mark=None):
17        self.anchor = anchor
18        self.start_mark = start_mark
19        self.end_mark = end_mark
20
21class CollectionStartEvent(NodeEvent):
22    def __init__(self, anchor, tag, implicit, start_mark=None, end_mark=None,
23            flow_style=None):
24        self.anchor = anchor
25        self.tag = tag
26        self.implicit = implicit
27        self.start_mark = start_mark
28        self.end_mark = end_mark
29        self.flow_style = flow_style
30
31class CollectionEndEvent(Event):
32    pass
33
34# Implementations.
35
36class StreamStartEvent(Event):
37    def __init__(self, start_mark=None, end_mark=None, encoding=None):
38        self.start_mark = start_mark
39        self.end_mark = end_mark
40        self.encoding = encoding
41
42class StreamEndEvent(Event):
43    pass
44
45class DocumentStartEvent(Event):
46    def __init__(self, start_mark=None, end_mark=None,
47            explicit=None, version=None, tags=None):
48        self.start_mark = start_mark
49        self.end_mark = end_mark
50        self.explicit = explicit
51        self.version = version
52        self.tags = tags
53
54class DocumentEndEvent(Event):
55    def __init__(self, start_mark=None, end_mark=None,
56            explicit=None):
57        self.start_mark = start_mark
58        self.end_mark = end_mark
59        self.explicit = explicit
60
61class AliasEvent(NodeEvent):
62    pass
63
64class ScalarEvent(NodeEvent):
65    def __init__(self, anchor, tag, implicit, value,
66            start_mark=None, end_mark=None, style=None):
67        self.anchor = anchor
68        self.tag = tag
69        self.implicit = implicit
70        self.value = value
71        self.start_mark = start_mark
72        self.end_mark = end_mark
73        self.style = style
74
75class SequenceStartEvent(CollectionStartEvent):
76    pass
77
78class SequenceEndEvent(CollectionEndEvent):
79    pass
80
81class MappingStartEvent(CollectionStartEvent):
82    pass
83
84class MappingEndEvent(CollectionEndEvent):
85    pass
86
Note: See TracBrowser for help on using the repository browser.