X-Git-Url: https://wagner.pp.ru/gitweb/?a=blobdiff_plain;f=convertdump.py;h=f098a58f2a2e0b29fd0fbaca86ceb3a5a7e75509;hb=e359daff1784de16d7bddaa8b8a1c91b85a90312;hp=e2906dc70de01517741c19159833e06b9e9c69f2;hpb=42c1b6a16d5c51528b2a8c85062d179a5f31cedf;p=oss%2Fljdump.git diff --git a/convertdump.py b/convertdump.py index e2906dc..f098a58 100755 --- a/convertdump.py +++ b/convertdump.py @@ -29,6 +29,7 @@ import xml.dom.minidom import os import codecs import sys +import getopt from time import strptime, strftime @@ -65,13 +66,12 @@ def appendTextNode(doc, parent, nodename, value): 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")) @@ -87,15 +87,28 @@ def addEntryForId(outDoc, element, 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(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")) @@ -104,6 +117,8 @@ def addEntryForId(outDoc, element, 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") @@ -157,17 +172,59 @@ def addCommentsForId(outDoc, entry, username, id): 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 " ) - 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) @@ -186,7 +243,6 @@ def main(argv): entryArray.sort() - # Create the minidom document outDoc = xml.dom.minidom.Document() @@ -198,7 +254,7 @@ def main(argv): # start processing entries for entry in entryArray: - addEntryForId(outDoc, ljElement, username, entry) + addEntryForId(outDoc, ljElement, username, entry, includeSecure) currentFileEntry += 1