Exemplo n.º 1
0
 def test_attributeString(self):
     """
     An instance of L{str} is flattened with attribute quoting rules if
     C{True} is passed for C{inAttribute}.
     """
     self.assertStringEqual("".join(flatten(None, '"&<>', True, False)),
                            "&quot;&amp;&lt;&gt;")
Exemplo n.º 2
0
 def test_textNodeString(self):
     """
     An instance of L{str} is flattened with XML quoting rules if C{True} is
     passed for C{inXML}.
     """
     self.assertStringEqual("".join(flatten(None, '"&<>', False, True)),
                            '"&amp;&lt;&gt;')
Exemplo n.º 3
0
def _serialize(obj, w, seen):
    from nevow import athena

    if isinstance(obj, bool):
        if obj:
            w(u'true')
        else:
            w(u'false')
    elif isinstance(obj, (int, float)):
        w(str(obj))
    elif isinstance(obj, (bytes, unicode)):
        w(u'"')
        w(stringEncode(obj))
        w(u'"')
    elif isinstance(obj, type(None)):
        w(u'null')
    elif id(obj) in seen:
        raise CycleError(type(obj))
    elif isinstance(obj, (tuple, list)):
        w(u'[')
        for n, e in enumerate(obj):
            _serialize(e, w, seen)
            if n != len(obj) - 1:
                w(u',')
        w(u']')
    elif isinstance(obj, dict):
        w(u'{')
        for n, (k, v) in enumerate(obj.items()):
            _serialize(k, w, seen)
            w(u':')
            _serialize(v, w, seen)
            if n != len(obj) - 1:
                w(u',')
        w(u'}')
    elif isinstance(obj, (athena.LiveFragment, athena.LiveElement)):
        _serialize(obj._structured(), w, seen)
    elif isinstance(obj, (rend.Fragment, page.Element)):

        def _w(s):
            w(stringEncode(s))

        wrapper = tags.div(xmlns="http://www.w3.org/1999/xhtml")
        w(u'"')
        for _ in _flat.flatten(None, _w, wrapper[obj], False, False):
            pass
        w(u'"')
    else:
        transportable = IAthenaTransportable(obj, None)
        if transportable is not None:
            w(u'(new ' +
              compat.unicode(transportable.jsClass.encode('ascii')) + u'(')
            arguments = transportable.getInitialArguments()
            for n, e in enumerate(arguments):
                _serialize(e, w, seen)
                if n != len(arguments) - 1:
                    w(',')
            w(u'))')
        else:
            raise TypeError("Unsupported type %r: %r" % (type(obj), obj))
 def test_textNodeString(self):
     """
     An instance of L{str} is flattened with XML quoting rules if C{True} is
     passed for C{inXML}.
     """
     self.assertStringEqual(
         "".join(flatten(None, '"&<>', False, True)),
         '"&amp;&lt;&gt;')
 def test_attributeString(self):
     """
     An instance of L{str} is flattened with attribute quoting rules if
     C{True} is passed for C{inAttribute}.
     """
     self.assertStringEqual(
         "".join(flatten(None, '"&<>', True, False)),
         "&quot;&amp;&lt;&gt;")
Exemplo n.º 6
0
 def flatten(self, root, request=None, inAttribute=False, inXML=False):
     """
     Helper to get a string from L{flatten}.
     """
     s = StringIO.StringIO()
     for _ in flatten(request, s.write, root, inAttribute, inXML):
         pass
     return s.getvalue()
Exemplo n.º 7
0
 def flatten(self, root, request=None, inAttribute=False, inXML=False):
     """
     Helper to get a string from L{flatten}.
     """
     s = StringIO.StringIO()
     for _ in flatten(request, s.write, root, inAttribute, inXML):
         pass
     return s.getvalue()
 def test_attributeRaw(self):
     """
     An instance of L{raw} is flattened with " quoting if C{True} is passed
     for C{inAttribute}.  L{raw} instances are expected to have already had
     &, <, and > quoted.  L{raw} support is primarily for backwards
     compatibility.
     """
     self.assertStringEqual(
         "".join(flatten(None, raw('"&<>'), True, True)), '&quot;&<>')
Exemplo n.º 9
0
 def test_attributeRaw(self):
     """
     An instance of L{raw} is flattened with " quoting if C{True} is passed
     for C{inAttribute}.  L{raw} instances are expected to have already had
     &, <, and > quoted.  L{raw} support is primarily for backwards
     compatibility.
     """
     self.assertStringEqual("".join(flatten(None, raw('"&<>'), True, True)),
                            '&quot;&<>')
Exemplo n.º 10
0
def _serialize(obj, w, seen):
    from nevow import athena

    if isinstance(obj, bool):
        if obj:
            w('true')
        else:
            w('false')
    elif isinstance(obj, (int, float)):
        w(str(obj))
    elif isinstance(obj, bytes):
        obj=unicode(obj)
    elif isinstance(obj, str):
        w('"')
        w(stringEncode(obj))
        w('"')
    elif isinstance(obj, type(None)):
        w('null')
    elif id(obj) in seen:
        raise CycleError(type(obj))
    elif isinstance(obj, (tuple, list)):
        w('[')
        for n, e in enumerate(obj):
            _serialize(e, w, seen)
            if n != len(obj) - 1:
                w(',')
        w(']')
    elif isinstance(obj, dict):
        w('{')
        for n, (k, v) in enumerate(obj.items()):
            _serialize(k, w, seen)
            w(':')
            _serialize(v, w, seen)
            if n != len(obj) - 1:
                w(',')
        w('}')
    elif isinstance(obj, (athena.LiveFragment, athena.LiveElement)):
        _serialize(obj._structured(), w, seen)
    elif isinstance(obj, (rend.Fragment, page.Element)):
        wrapper = tags.div(xmlns="http://www.w3.org/1999/xhtml")
        w('"')
        w(stringEncode(
                "".join(_flat.flatten(None, wrapper[obj],
                                      False, False)).decode('utf-8')))
        w('"')
    else:
        transportable = IAthenaTransportable(obj, None)
        if transportable is not None:
            w('(new ' + transportable.jsClass.encode('ascii') + '(')
            arguments = transportable.getInitialArguments()
            for n, e in enumerate(arguments):
                _serialize(e, w, seen)
                if n != len(arguments) - 1:
                    w(',')
            w('))')
        else:
            raise TypeError("Unsupported type %r: %r" % (type(obj), obj))
 def flatten(self, root, request=None):
     """
     Helper to get a string from L{flatten}.
     """
     result = []
     # This isn't something shorter because this way is nicer to look at in
     # a debugger.
     for part in flatten(request, root, False, False):
         result.append(part)
     return "".join(result)
Exemplo n.º 12
0
 def flatten(self, root, request=None):
     """
     Helper to get a string from L{flatten}.
     """
     result = []
     # This isn't something shorter because this way is nicer to look at in
     # a debugger.
     for part in flatten(request, root, False, False):
         result.append(part)
     return "".join(result)
Exemplo n.º 13
0
def _serialize(obj, w, seen):
    from nevow import athena

    if isinstance(obj, types.BooleanType):
        if obj:
            w("true")
        else:
            w("false")
    elif isinstance(obj, (int, long, float)):
        w(str(obj))
    elif isinstance(obj, unicode):
        w('"')
        w(stringEncode(obj))
        w('"')
    elif isinstance(obj, types.NoneType):
        w("null")
    elif id(obj) in seen:
        raise CycleError(type(obj))
    elif isinstance(obj, (tuple, list)):
        w("[")
        for n, e in enumerate(obj):
            _serialize(e, w, seen)
            if n != len(obj) - 1:
                w(",")
        w("]")
    elif isinstance(obj, dict):
        w("{")
        for n, (k, v) in enumerate(obj.iteritems()):
            _serialize(k, w, seen)
            w(":")
            _serialize(v, w, seen)
            if n != len(obj) - 1:
                w(",")
        w("}")
    elif isinstance(obj, (athena.LiveFragment, athena.LiveElement)):
        _serialize(obj._structured(), w, seen)
    elif isinstance(obj, (rend.Fragment, page.Element)):
        wrapper = tags.div(xmlns="http://www.w3.org/1999/xhtml")
        w('"')
        w(stringEncode("".join(_flat.flatten(None, wrapper[obj], False, False)).decode("utf-8")))
        w('"')
    else:
        transportable = IAthenaTransportable(obj, None)
        if transportable is not None:
            w("(new " + transportable.jsClass.encode("ascii") + "(")
            arguments = transportable.getInitialArguments()
            for n, e in enumerate(arguments):
                _serialize(e, w, seen)
                if n != len(arguments) - 1:
                    w(",")
            w("))")
        else:
            raise TypeError("Unsupported type %r: %r" % (type(obj), obj))