Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
Modul: XML_Base64
Description: Base64 codet strings to load and store as xml
Version: 1.0
Copyright: 2004 by Fritz Cizmarov fritz@sol.at
Created: 27. Jul. 2004
Last modified: 28. Jul. 2004
License: free
Requirements: Python2.3 XML_Objects.py
Exports: Base64
"""
import XML_Objects
class Base64(str, XML_Objects.XML_Object):
"""
Class for saving base64 encoded strings,
b64 = Base64(<string>) -> return Base64-string
b64 = Base64(allready_encoded, encoded=True) -> allready encoded
string convertet to Base64
b64.base64 is the base64-encoded representation of the string
"""
__slots__ = []
xml_attrs = {"encoded" : bool}
def base64(self):
return self.encode("base64")
base64 = property(base64, doc="base64-encoded representation")
def __new__(cls, string, encoded=False):
if encoded:
if not isinstance(string, basestring):
raise TypeError("Argument musst be string!")
return super(Base64, cls).__new__(cls, string.decode("base64"))
else:
return super(Base64, cls).__new__(cls, string)
def __repr__(self):
cls_name = self.__class__.__name__
return "%s('%s', encoded=True)" % (cls_name, self.base64)
def to_xml(self, indent=0):
myind1 = XML_Objects.indentstr*indent
myind2 = myind1+XML_Objects.indentstr
fmt = '%s<Base64 encoded="true">\n%s%s\n%s</Base64>\n'
b64 = self.base64.replace("\n","\n"+myind2).rstrip() # prepare for xml
return fmt % (myind1, myind2, b64, myind1)
if __name__ == "__main__":
demostr = "".join([chr(x) for x in xrange(256)]) # String with all Chars
test = Base64(demostr) # Encode to base64
XML_Objects.XML_Object.save("base64test.xml", test) # save to *.xml
neu = XML_Objects.XML_Object.load("base64test.xml") # load from *.xml
print repr(str(test)) # saved string
print repr(str(neu)) # reloaded string
print "Are generated data equal to loaded from XML?", test == neu
Dazu erzeugt man ein Base64 Objekt mit dem String der gespeichert werden soll. Dieses Objekt kann natürlich in ein XML_Container-Objekt eingefügt werden und so dann als Teil einer Datenstruktur gespeichert werden. Und es kann überall verwendet werden, wo sonst ein String-Objekt verwendet werden kann.
Gruß
Dookie