]> wagner.pp.ru Git - oss/ljdump.git/blobdiff - convertdump.py
Fixed handling of security/allowmask tags
[oss/ljdump.git] / convertdump.py
index 9a796cbbf873fa8c519a6f567f622503bc7626a2..5ea760087d6a49f03b3d9d2aa46c28c7b1f76ad4 100755 (executable)
@@ -1,8 +1,35 @@
 #!/usr/bin/python
 
+# Copyright 2009, Sean M. Graham (www.sean-graham.com)
+# All rights reserved.
+# 
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+# 
+# - Redistributions of source code must retain the above copyright notice,
+#   this list of conditions and the following disclaimer.
+# 
+# - Redistributions in binary form must reproduce the above copyright notice,
+#   this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+# 
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+# EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+# OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+
 import xml.dom.minidom 
 import os
 import codecs
+import sys
+
 from time import strptime, strftime
 
 def getNodeText(doc, nodename):
@@ -38,13 +65,12 @@ def appendTextNode(doc, parent, nodename, value):
     parent.appendChild(element)
 
 
-def addEntryForId(outDoc, username, id):
+def addEntryForId(outDoc, element, username, id, includeSecure):
     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)
 
     # Create an itemid element
     appendTextNode(outDoc, entry, "itemid", getNodeText(inDoc,"itemid"))
@@ -60,13 +86,28 @@ def addEntryForId(outDoc, username, id):
     event = inDoc.getElementsByTagName("event")[0]
     appendTextNode(outDoc, entry, "event", getNodeText(event, "event"))
 
-    # Create an allowmask element (doesn't exist in pydump output if public)
-    maskText = getNodeText(inDoc, "allowmask")
+    security = getNodeText(inDoc, "security")
 
-    if(maskText != ""):
-        appendTextNode(outDoc, entry, "allowmask", maskText)
-    else:
-        appendTextNode(outDoc, entry, "allowmask", "0")
+    if(security != ""):
+        # don't append this entry unless the user provided the argument
+        if(includeSecure == False):
+            print("omitting secure entry: L-%s" % id)
+            return 
+        else:
+            if(security == "usemask"):
+                print("including allowmask entry: L-%s" % id)
+
+                # Create an allowmask element 
+                maskText = getNodeText(inDoc, "allowmask")
+
+                if(maskText != ""):
+                    appendTextNode(outDoc, entry, "allowmask", maskText)
+                else:
+                    appendTextNode(outDoc, entry, "allowmask", "0")
+            else:
+                print("including private entry: L-%s" % id)
+
+        appendTextNode(outDoc, entry, "security", security)
 
     # Create a taglist element
     appendTextNode(outDoc, entry, "taglist", getNodeText(inDoc, "taglist"))
@@ -75,6 +116,8 @@ def addEntryForId(outDoc, username, id):
     # with it
     addCommentsForId(outDoc, entry, username, id)
 
+    element.appendChild(entry)
+
 def addCommentsForId(outDoc, entry, username, id):
     try: 
         commentFile = open("%s/C-%s" % (username,id), "r")
@@ -128,54 +171,73 @@ def addCommentsForId(outDoc, entry, username, id):
         if(parentId != ""): 
             appendTextNode(outDoc, outComment, "parent_itemid", parentId)
 
+def main(argv): 
+    username = ""
+    entryLimit = 250
+    includeSecure = False;
+    
+    if( len(argv) < 2 ):
+        print( "Usage: convertdump.py <username> <entrylimit>" )
+        return
+    else:
+        username = argv[0]
+        entryLimit = int(argv[1])
+
+        try:
+            includeSecure = bool(argv[2])
+        except IndexError:
+            includeSecure = False
 
+    if(includeSecure == True):
+        print( "Warning:  Including secure entries in XML output" )
 
+    userDir = os.listdir(username)
 
-userDir = os.listdir("grahams")
+    highNum = -1
+    entryArray = []
 
-highNum = -1
-entryArray = []
+    # get the list of entries
+    for file in userDir:
+        if file.startswith("L-"):
+            entryNum = int(file.replace("L-",""))
 
-# get the list of entries
-for file in userDir:
-    if file.startswith("L-"):
-        entryNum = int(file.replace("L-",""))
+            entryArray.append(entryNum)
 
-        entryArray.append(entryNum)
+            if( highNum < entryNum ):
+                highNum = entryNum
 
-        if( highNum < entryNum ):
-            highNum = entryNum
+    entryArray.sort()
 
-entryArray.sort()
+    # Create the minidom document
+    outDoc = xml.dom.minidom.Document()
 
+    # Create the <livejournal> base element
+    ljElement = outDoc.createElement("livejournal")
+    outDoc.appendChild(ljElement)
 
-# Create the minidom document
-outDoc = xml.dom.minidom.Document()
+    currentFileEntry = 0
 
-# Create the <livejournal> base element
-ljElement = outDoc.createElement("livejournal")
-outDoc.appendChild(ljElement)
+    # start processing entries
+    for entry in entryArray:
+        addEntryForId(outDoc, ljElement, username, entry, includeSecure)
 
-breakup = 250
-currentFileEntry = 0
+        currentFileEntry += 1
 
-# start processing entries
-for entry in entryArray:
-    addEntryForId(outDoc, "grahams", entry)
+        if( currentFileEntry == entryLimit or entry == entryArray[-1] ):
 
-    currentFileEntry += 1
+            f = open("%s - %s.xml" % (username, entry), "w")
+            tempXML = outDoc.toxml("UTF-8")
+            f.write(tempXML)
+            
+            currentFileEntry = 0
 
-    if( currentFileEntry == breakup ):
+            # Create the minidom document
+            outDoc = xml.dom.minidom.Document()
 
-        f = open("grahams - %s.xml" % entry, "w")
-        tempXML = outDoc.toxml("UTF-8")
-        f.write(tempXML)
-        
-        currentFileEntry = 0
+            # Create the <livejournal> base element
+            ljElement = outDoc.createElement("livejournal")
+            outDoc.appendChild(ljElement)
 
-        # Create the minidom document
-        outDoc = xml.dom.minidom.Document()
+if __name__ == "__main__":
+    main(sys.argv[1:])
 
-        # Create the <livejournal> base element
-        ljElement = outDoc.createElement("livejournal")
-        outDoc.appendChild(ljElement)