コード例 #1
0
class WrapTransformation(object):
    """Wrap selection in an element."""

    def __init__(self, element):
        if isinstance(element, Element):
            self.element = element
        else:
            self.element = Element(element)

    def __call__(self, stream):
        for mark, event in stream:
            if mark:
                element = list(self.element.generate())
                for prefix in element[:-1]:
                    yield None, prefix
                yield mark, event
                start = mark
                stopped = False
                for mark, event in stream:
                    if start is ENTER and mark is EXIT:
                        yield mark, event
                        stopped = True
                        break
                    if not mark:
                        break
                    yield mark, event
                else:
                    stopped = True
                yield None, element[-1]
                if not stopped:
                    yield mark, event
            else:
                yield mark, event
コード例 #2
0
ファイル: transform.py プロジェクト: egilchri/tweetapp
class WrapTransformation(object):
    """Wrap selection in an element."""

    def __init__(self, element):
        if isinstance(element, Element):
            self.element = element
        else:
            self.element = Element(element)

    def __call__(self, stream):
        for mark, event in stream:
            if mark:
                element = list(self.element.generate())
                for prefix in element[:-1]:
                    yield None, prefix
                yield mark, event
                start = mark
                stopped = False
                for mark, event in stream:
                    if start is ENTER and mark is EXIT:
                        yield mark, event
                        stopped = True
                        break
                    if not mark:
                        break
                    yield mark, event
                else:
                    stopped = True
                yield None, element[-1]
                if not stopped:
                    yield mark, event
            else:
                yield mark, event
コード例 #3
0
ファイル: export.py プロジェクト: ryanpetrello/draughtcraft
    def render(self, xml=True):
        """
        Returns a genshi.builder.Element, or raw rendered XML, depending on the
        value of `xml`.
        """

        # Keep a namespace of XML nodes to render
        ns = dict()

        # Look at every key/value pair passed into the constructor...
        for key, value in self.__values__.items():

            # If the value is a list, it's a set of Nodes.
            if isinstance(value, list):
                # Update the namespace with {NodeSet.name: [Element, Element]}
                ns.update({
                    key: [node.render(xml=False) for node in value]
                })
            elif isinstance(value, Node):
                #
                # If the value is already a singular node, just add it to the
                # existing list of values.
                #
                ns.update({
                    key: value.render(xml=False)
                })
            elif key.lower() in self.__fields__:
                field = self.__fields__[key.lower()]
                # Get the `transform`'ed value and store it in the namespace.
                fval = field.get_value(value)
                ns.update(fval)

        # The tagname is the class name in uppercase, e.g., `Hop` -> `<HOP>`
        name = self.__class__.__name__.upper()

        # Sort the keys for consistency
        items = sorted(
            ns.items(), lambda x, y: cmp(x[0].lower(), y[0].lower()))

        #
        # Create an `Element` for this node.
        # Its value should be the accumulated collection of its child
        # `Element`s.
        #
        element = Element(name)(*[
            v if isinstance(v, Element) else Element(k.upper())(v)
            for k, v in items
        ])

        # Return xml or a raw `Element`.
        if xml is False:
            return element
        return element.generate().render('xml')
コード例 #4
0
    def render(self, xml=True):
        """
        Returns a genshi.builder.Element, or raw rendered XML, depending on the
        value of `xml`.
        """

        # Keep a namespace of XML nodes to render
        ns = dict()

        # Look at every key/value pair passed into the constructor...
        for key, value in self.__values__.items():

            # If the value is a list, it's a set of Nodes.
            if isinstance(value, list):
                # Update the namespace with {NodeSet.name: [Element, Element]}
                ns.update({key: [node.render(xml=False) for node in value]})
            elif isinstance(value, Node):
                #
                # If the value is already a singular node, just add it to the
                # existing list of values.
                #
                ns.update({key: value.render(xml=False)})
            elif key.lower() in self.__fields__:
                field = self.__fields__[key.lower()]
                # Get the `transform`'ed value and store it in the namespace.
                fval = field.get_value(value)
                ns.update(fval)

        # The tagname is the class name in uppercase, e.g., `Hop` -> `<HOP>`
        name = self.__class__.__name__.upper()

        # Sort the keys for consistency
        items = sorted(ns.items(),
                       lambda x, y: cmp(x[0].lower(), y[0].lower()))

        #
        # Create an `Element` for this node.
        # Its value should be the accumulated collection of its child
        # `Element`s.
        #
        element = Element(name)(*[
            v if isinstance(v, Element) else Element(k.upper())(v)
            for k, v in items
        ])

        # Return xml or a raw `Element`.
        if xml is False:
            return element
        return element.generate().render('xml')