import os
import codecs
import sys
+import getopt
from time import strptime, strftime
parent.appendChild(element)
-def addEntryForId(outDoc, element, 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")
- element.appendChild(entry)
# Create an itemid element
appendTextNode(outDoc, entry, "itemid", getNodeText(inDoc,"itemid"))
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(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")
- # 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")
+ 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"))
# 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")
if(parentId != ""):
appendTextNode(outDoc, outComment, "parent_itemid", parentId)
+def usage():
+ print( "Usage: convertdump.py [arguments]" )
+ print( """
+This will convert a pydump archive into something compatible with the
+WordPress LiveJournal importer. This is the same format used by the Windows
+ljArchive exporter.
+
+Arguments:
+ -u --user username of archive to process [required]
+ -l --limit limit the number of entries in each xml file (default 250)
+ -i --insecure include private and protected entries in the output
+ -h --help show this help page
+
+Example:
+ ./convertdump.py --user stevemartin --limit 200 --insecure
+""")
+
+
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])
+ if( len(argv) == 0 ):
+ usage()
+ sys.exit(2)
+
+ try:
+ opts, args = getopt.getopt(sys.argv[1:], "hu:l:i", ["help",
+ "user=",
+ "limit=",
+ "insecure"])
+ except getopt.GetoptError, err:
+ # print help information and exit:
+ print str(err) # will print something like "option -a not recognized"
+ usage()
+ sys.exit(2)
+
+ for o, a in opts:
+ if o == "-v":
+ verbose = True
+ elif o in ("-u", "--user"):
+ username = a
+ elif o in ("-l", "--limit"):
+ entryLimit = int(a)
+ elif o in ("-i", "--insecure"):
+ print( "Warning: Including secure entries in XML output" )
+ includeSecure = True
+ elif o in ("-h", "--help"):
+ usage()
+ sys.exit()
+ else:
+ assert False, "unhandled option"
userDir = os.listdir(username)
entryArray.sort()
-
# Create the minidom document
outDoc = xml.dom.minidom.Document()
# start processing entries
for entry in entryArray:
- addEntryForId(outDoc, ljElement, username, entry)
+ addEntryForId(outDoc, ljElement, username, entry, includeSecure)
currentFileEntry += 1