serializer.py

Go to the documentation of this file.
00001 from silme.core import L10nPackage, L10nObject, Comment, EntityList, Entity
00002 from silme.diff import L10nObjectDiff, EntityListDiff, BlobDiff
00003 
00004 import os
00005 
00006 class TextSerializer():
00007     @classmethod
00008     def serialize(cls, element, fallback=None):
00009         if isinstance(element, L10nPackage):
00010             return cls.dump_l10npackage(element)
00011         else:
00012             return cls.dump_l10nobject(element)
00013 
00014     @classmethod
00015     def dump_entity (cls, entity, indent=0):
00016         string = (u'    '*indent)+u'Entity(id:'+entity.id+u', value:"'+entity.value+u'")\n'
00017         return string
00018 
00019     @classmethod
00020     def dump_comment (cls, comment, indent=0):
00021         string = (u'    '*indent)+u'Comment(\n'
00022         for element in comment:
00023             string += cls.dump_element(element, indent+1)
00024         string += (u'    '*indent)+u')\n'
00025         return string
00026 
00027     @classmethod
00028     def dump_string(cls, unicode, indent=0):
00029         return (u'    '*indent)+u"String(\""+unicode.replace('\n',"\\n")+"\")\n"
00030 
00031     @classmethod
00032     def dump_element(cls, element, indent=0):
00033         if isinstance(element, Entity):
00034             return cls.dump_entity(element, indent)
00035         elif isinstance(element, Comment):
00036             return cls.dump_comment(element, indent)
00037         elif isinstance(element, unicode) or isinstance(element, str):
00038             return cls.dump_string(element, indent)
00039         else:
00040             return element
00041 
00042     @classmethod
00043     def dump_l10nobject (cls, l10nobject, indent=0, content=True):
00044         string = (u'    '*indent)+u"== L10nObject: " + unicode(l10nobject.id) + u" ==\n"
00045         if content == True:
00046             for element in l10nobject:
00047                 string += cls.dump_element(element, indent+1)
00048         return string
00049 
00050     @classmethod
00051     def dump_entitylist (cls, elist, indent=0, content=True):
00052         string = (u'    '*indent)+u"== EntityList: " + unicode(elist.id) + u" ==\n"
00053         if content == True:
00054             for entity in elist.values():
00055                 string += cls.dump_entity(entity, indent+1)
00056         return string
00057 
00058     @classmethod
00059     def dump_blob (cls, blob, indent=0):
00060         string = (u'    '*indent)+'Blob: ' + blob.id + "\n"
00061         return string
00062 
00063     @classmethod
00064     def dump_l10npackage (cls, l10npack, indent=0, content=True):
00065         string = u''
00066         string += (u'    '*indent)+u'=== L10nPackage: ' + l10npack.id + u' ===\n'
00067         for key, package in l10npack.packages.items():
00068             string += cls.dump_l10npackage(package, indent+1, content)
00069         for key, object in l10npack.objects.items():
00070             if isinstance(object, L10nObject):
00071                 string += cls.dump_l10nobject(object, indent+1, content)
00072             elif isinstance(object, EntityList):
00073                 string += cls.dump_entitylist(object, indent+1, content)
00074             else:
00075                 string += cls.dump_blob(object, indent+1)
00076         return string
00077 
00078 # diff part
00079 
00080     @classmethod
00081     def dump_objectdiff (cls, objectdiff, indent=0):
00082         string = u''
00083         if objectdiff.diff:
00084             string += u'     '*indent + 'object modified\n'
00085         else:
00086             string += u'     '*indent + 'object not modified\n'
00087         return string
00088 
00089     @classmethod
00090     def dump_entitylistdiff (cls, entitylistdiff, indent=0):
00091         string = u''
00092         added = entitylistdiff.get_entities('added')
00093         if len(added):
00094             string += u'     '*indent + u'added entites:\n'
00095             for entity in added.values():
00096                 string += u'     '*(indent+1) + entity.id + u'\n'
00097         removed = entitylistdiff.get_entities('removed')
00098         if len(removed):
00099             string += u'     '*indent + u'removed entities:\n' 
00100             for entity in removed.values():
00101                 string += u'     '*(indent+1) + entity.id + u'\n'
00102         modified = entitylistdiff.get_entities('modified')
00103         if len(modified):
00104             string += u'     '*indent + u'modified entities:\n'
00105             for entitydiff in modified.values():
00106                 string += u'     '*(indent+1) + entitydiff.id + u"(value '"+entitydiff.get_value()[0]+u"' -> '"+entitydiff.get_value()[1]+u"')\n"
00107         return string
00108 
00109     @classmethod
00110     def dump_l10nobjectdiff (cls, l10nobjectdiff, indent=0):
00111         return cls.dump_entitylistdiff(l10nobjectdiff.get_entitylistdiff(), indent=indent)
00112 
00113     @classmethod
00114     def dump_l10npackagediff (cls, l10npackagediff, indent=0):
00115         string = u''
00116         added = l10npackagediff.get_objects('added')
00117         if len(added):
00118             string += u'     '*indent + u'\033[1mnew in the latter package:\033[0m\n'
00119             for object in added:
00120                 string += u'     '*(indent+1) + os.path.join('.', object.id) + u'\n'
00121         removed = l10npackagediff.get_objects('removed')
00122         if len(removed):
00123             string += u'     '*indent + u'\033[1mremoved in the latter package:\033[0m\n'
00124             for object in removed:
00125                 string += u'     '*(indent+1) + os.path.join('.', object.id) + u'\n'
00126         modified = l10npackagediff.get_objects('modified')
00127         if len(modified):
00128             string += u'     '*indent + u'\033[1mmodified in the latter package:\033[0m\n'
00129             for object in modified:
00130                 string += u'     '*(indent+1) + os.path.join('.', object.id) + u'\n'
00131                 if isinstance(object, L10nObjectDiff):
00132                     string += cls.dump_l10nobjectdiff(l10npackagediff.objects[object.id]['object'], indent+2)
00133                 elif isinstance(object, EntityListDiff):
00134                     string += cls.dump_entitylistdiff(l10npackagediff.objects[object.id]['object'], indent+2)
00135                 elif isinstance(object, BlobDiff):
00136                     string += cls.dump_objectdiff(l10npackagediff.objects[object.id]['object'], indent+2)
00137 
00138         added = l10npackagediff.get_packages('added')
00139         if len(added):
00140             string += u'     '*indent + u'\033[1mnew in the latter package:\033[0m\n'
00141             for package in added:
00142                 string += u'     '*(indent+1) + os.path.join('.',package.id) + u'\n'
00143         removed = l10npackagediff.get_packages('removed')
00144         if len(removed):
00145             string += u'     '*indent + '\033[1mremoved from latter package:\033[0m\n'
00146             for package in removed:
00147                 string += u'     '*(indent+1) + os.path.join('.',package.id) + u'\n'
00148         modified = l10npackagediff.get_packages('modified')
00149         if len(modified):
00150             string += u'     '*indent + u'\033[1mmodified in the latter package:\033[0m\n'
00151             for package in modified:
00152                 string += u'     '*(indent+1) + os.path.join('.',package.id) + u'\n'
00153                 string += cls.dump_l10npackagediff(l10npackagediff.packages[package.id]['package'], indent+2)
00154         if not len(string):
00155             string += u'\nThe packages are identical'
00156         return string

Generated on Tue May 12 17:37:27 2009 for silme by  doxygen 1.5.8