]> www.wagner.pp.ru Git - oss/ljdump.git/blobdiff - convertdump.py
Accepted patch from Carl Johan Crafoord <mail@carljohancrafoord.se>
[oss/ljdump.git] / convertdump.py
index f19be5f8243335c4ad1fa064b869a941be9a8cd1..a81b596a22b505f78f2e2e5db0fe28a36e444225 100755 (executable)
@@ -2,6 +2,9 @@
 
 import xml.dom.minidom 
 import os
+import codecs
+import sys
+
 from time import strptime, strftime
 
 def getNodeText(doc, nodename):
@@ -19,22 +22,31 @@ def getNodeText(doc, nodename):
     return rc
 
 def appendTextNode(doc, parent, nodename, value):
+    nodeValue = value
+
+    # make sure value is properly encoded
+    try:
+        bytes = nodeValue.encode("UTF-8")
+    except:
+        bytes = nodeValue.encode("cp1252")
+        nodeValue = unicode(bytes, "UTF-8")
+
     element = doc.createElement(nodename)
 
-    if( value != "" ): 
-        textNode = doc.createTextNode(value)
+    if( nodeValue != "" ): 
+        textNode = doc.createTextNode(nodeValue)
         element.appendChild(textNode)
 
     parent.appendChild(element)
 
 
-def addEntryForId(outDoc, username, id):
+def addEntryForId(outDoc, element, username, id):
     entryFile = open("%s/L-%s" % (username,id), "r")
     inDoc = xml.dom.minidom.parse(entryFile)
 
     # Create an entry element
     entry = outDoc.createElement("entry")
-    ljElement.appendChild(entry)
+    element.appendChild(entry)
 
     # Create an itemid element
     appendTextNode(outDoc, entry, "itemid", getNodeText(inDoc,"itemid"))
@@ -51,10 +63,13 @@ def addEntryForId(outDoc, username, id):
     appendTextNode(outDoc, entry, "event", getNodeText(event, "event"))
 
     # Create an allowmask element (doesn't exist in pydump output if public)
-    try:
-        appendTextNode(outDoc, entry, "allowmask", 
-            getNodeText(inDoc, "allowmask"))
-    except:
+    maskText = getNodeText(inDoc, "allowmask")
+
+    # XXXSMG: consult L-1411 and L-976 for examples of security and
+    # allowmask use
+    if(maskText != ""):
+        appendTextNode(outDoc, entry, "allowmask", maskText)
+    else:
         appendTextNode(outDoc, entry, "allowmask", "0")
 
     # Create a taglist element
@@ -67,8 +82,7 @@ def addEntryForId(outDoc, username, id):
 def addCommentsForId(outDoc, entry, username, id):
     try: 
         commentFile = open("%s/C-%s" % (username,id), "r")
-    except:
-        # there are no comments for this entry
+    except IOError:  # there are no comments for this entry
         return
 
     inDoc = xml.dom.minidom.parse(commentFile)
@@ -118,38 +132,66 @@ def addCommentsForId(outDoc, entry, username, id):
         if(parentId != ""): 
             appendTextNode(outDoc, outComment, "parent_itemid", parentId)
 
+def main(argv): 
+    username = ""
+    entryLimit = 250
+    
+
+    if( len(argv) != 2 ):
+        print( "Usage: convertdump.py <username> <entrylimit>" )
+        return
+    else:
+        username = argv[0]
+        entryLimit = int(argv[1])
+
+    userDir = os.listdir(username)
+
+    highNum = -1
+    entryArray = []
+
+    # get the list of entries
+    for file in userDir:
+        if file.startswith("L-"):
+            entryNum = int(file.replace("L-",""))
+
+            entryArray.append(entryNum)
+
+            if( highNum < entryNum ):
+                highNum = entryNum
 
+    entryArray.sort()
 
 
-# Create the minidom document
-outDoc = xml.dom.minidom.Document()
+    # Create the minidom document
+    outDoc = xml.dom.minidom.Document()
 
-# Create the <livejournal> base element
-ljElement = outDoc.createElement("livejournal")
-outDoc.appendChild(ljElement)
+    # Create the <livejournal> base element
+    ljElement = outDoc.createElement("livejournal")
+    outDoc.appendChild(ljElement)
 
-userDir = os.listdir("grahams")
+    currentFileEntry = 0
 
-highNum = -1
-entryArray = []
+    # start processing entries
+    for entry in entryArray:
+        addEntryForId(outDoc, ljElement, username, entry)
 
-# get the list of entries
-for file in userDir:
-    if file.startswith("L-"):
-        entryNum = int(file.replace("L-",""))
+        currentFileEntry += 1
 
-        entryArray.append(entryNum)
+        if( currentFileEntry == entryLimit or entry == entryArray[-1] ):
 
-        if( highNum < entryNum ):
-            highNum = entryNum
+            f = open("%s - %s.xml" % (username, entry), "w")
+            tempXML = outDoc.toxml("UTF-8")
+            f.write(tempXML)
+            
+            currentFileEntry = 0
 
-entryArray.sort()
+            # Create the minidom document
+            outDoc = xml.dom.minidom.Document()
 
-# start processing entries
-for entry in entryArray:
-    print entry
-    addEntryForId(outDoc, "grahams", entry)
+            # Create the <livejournal> base element
+            ljElement = outDoc.createElement("livejournal")
+            outDoc.appendChild(ljElement)
 
+if __name__ == "__main__":
+    main(sys.argv[1:])
 
-# Print our newly created XML
-print outDoc.toprettyxml(indent="  ")