7 Jan 2008 21:59
Re: [Q] How to compose, serialize, and emit in PyYAML?
> Q1. How to compose nodes from event list?
The following code can compose nodes from event list.
--------------------
import yaml
from yaml.events import StreamStartEvent, StreamEndEvent, DocumentStartEvent
from yaml.composer import Composer, ComposerError
class MyComposer(Composer):
def __init__(self):
resolver = yaml.resolver.Resolver()
self.descend_resolver = resolver.descend_resolver
self.ascend_resolver = resolver.ascend_resolver
self.resolve = resolver.resolve
def _set_events(self, events):
self._events = events
self._index = 0
def peek_event(self):
if self._index >= len(self._events):
return None
return self._events[self._index]
def check_event(self, event_class):
return isinstance(self.peek_event(), event_class)
def get_event(self):
event = self.peek_event()
self._index += 1
return event
def compose(self, events):
self._set_events(events)
if self.check_event(StreamStartEvent):
self.get_event()
node = self.compose_document()
self._confirm_event((StreamEndEvent, DocumentStartEvent, ))
return node
def compose_all(self, events):
self._set_events(events)
if self.check_event(StreamStartEvent):
self.get_event()
node = self.compose_document()
yield node
while self.check_event(DocumentStartEvent):
node = self.compose_document()
yield node
self._confirm_event(StreamEndEvent)
def _confirm_event(self, event_class):
if not self.check_event(event_class):
name = self.peek_event().__class__.__name__
raise ComposerError("%s: unexteced event" % name)
if __name__ == '__main__':
string = """
- abc
- 123
- yes
"""
## parse input into event list
events = [ event for event in yaml.parse(string) ]
## compose nodes from event list
composer = MyComposer()
#node = composer.compose(events)
#print node
for node in composer.compose_all(events):
print node
--------------------
If there is more simple way, please tell me.
--
regards,
makoto kuwata
On Jan 7, 2008 10:00 PM, Makoto Kuwata <kwa@...> wrote:
> Hi,
> I'm investigating PyYAML 3.05 and have some questions.
>
> Q1. How to compose nodes from event list?
> Q2. How to serialize node into event list?
> Q3. How to emit event list into stram?
>
> example:
> --------------------
> import yaml
>
> string = """
> - abc
> - 123
> - yes
> """
>
> ## parse string and get event list
> events = [ event for event in yaml.parse(string) ]
>
> ### compose nodes from event list
> node = ?????? # yaml.compose(string) is not what I want
>
> ## construct Python data from nodes
> constructor = yaml.constructor.Constructor()
> data = constructor.construct_document(node)
>
> ## convert data into node
> representer = yaml.representer.Representer()
> node = representer.represent_data(data)
>
> ## convert node into event list
> events = ??????
>
> ## convert event list into string
> string = ??????
> --------------------
>
> --
> regards,
> makoto kuwata
>
-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
RSS Feed