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)), ""&<>")
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)), '"&<>')
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)), '"&<>')
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)), ""&<>")
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)), '"&<>')
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)), '"&<>')
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)
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))