Skip to content

Commit 1037971

Browse files
committed
STDIN functionality to wikirestore
1 parent 8d30497 commit 1037971

2 files changed

Lines changed: 51 additions & 32 deletions

File tree

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
setup(
1212
name='py-3rdparty-mediawiki',
13-
version='0.3.9',
13+
version='0.3.10',
1414

1515
packages=['wikibot',],
1616
classifiers=[

wikibot/wikipush.py

Lines changed: 50 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -468,24 +468,38 @@ def uploadImage(self,imagePath,filename,description,ignoreExists=False):
468468
warnings.append(str(item))
469469
self.handleAPIWarnings(warnings,ignoreExists)
470470

471-
def restore(self, pageTitles=None,backupPath=None):
471+
def restore(self, pageTitles=None, backupPath=None, listFile=None, stdIn=False):
472472
"""
473473
restore given page titles from local backup
474474
If no page titles are given the whole backup is restored.
475475
Args:
476476
pageTitles(list): a list of pageTitles to be restored to toWiki. If None -> full restore of backup
477477
backupPath(str): path to backup location
478478
"""
479-
if backupPath is None:
480-
backupPath=self.getHomePath("wikibackup/%s" % self.toWikiId)
481-
imageBackupPath = "%s/images" % backupPath
482-
if pageTitles is None:
479+
if stdIn:
480+
l = []
481+
backupPath = os.path.dirname(pageTitles[0].strip())
482+
pageTitlesfix= []
483+
for i in pageTitles:
484+
pageTitlesfix.append(os.path.basename(i.strip().replace('.wiki','')))
485+
pageTitles = pageTitlesfix
486+
elif listFile is not None:
487+
f = open(listFile, 'r')
488+
allx = f.readlines()
483489
pageTitles = []
484-
for path, subdirs, files in os.walk(backupPath):
485-
for name in files:
486-
filename = os.path.join(path, name)[len(backupPath)+1:]
487-
if filename.endswith(".wiki"):
488-
pageTitles.append(filename[:-len(".wiki")])
490+
for i in allx:
491+
pageTitles.append(os.path.basename(i.strip()).replace('.wiki',''))
492+
else:
493+
if backupPath is None:
494+
backupPath=self.getHomePath("wikibackup/%s" % self.toWikiId)
495+
imageBackupPath = "%s/images" % backupPath
496+
if pageTitles is None:
497+
pageTitles = []
498+
for path, subdirs, files in os.walk(backupPath):
499+
for name in files:
500+
filename = os.path.join(path, name)[len(backupPath)+1:]
501+
if filename.endswith(".wiki"):
502+
pageTitles.append(filename[:-len(".wiki")])
489503
total = len(pageTitles)
490504
self.log("restoring %d pages from %s to %s" % (total, backupPath, self.toWikiId))
491505
for i,pageTitle in enumerate(pageTitles):
@@ -507,16 +521,16 @@ def restore(self, pageTitles=None,backupPath=None):
507521

508522
def mainNuke(argv=None):
509523
main(argv,mode='wikinuke')
510-
524+
511525
def mainEdit(argv=None):
512526
main(argv,mode='wikiedit')
513-
527+
514528
def mainPush(argv=None):
515529
main(argv,mode='wikipush')
516-
530+
517531
def mainQuery(argv=None):
518532
main(argv,mode='wikiquery')
519-
533+
520534
def mainUpload(argv=None):
521535
main(argv,mode='wikiupload')
522536

@@ -525,20 +539,20 @@ def mainBackup(argv=None):
525539

526540
def mainRestore(argv=None):
527541
main(argv,mode='wikirestore')
528-
542+
529543
def main(argv=None,mode='wikipush'): # IGNORE:C0111
530544
'''main program.'''
531545

532546
if argv is None:
533547
argv = sys.argv[1:]
534-
548+
535549
program_name = mode
536550
program_version = "v%s" % __version__
537551
program_build_date = str(__updated__)
538552
program_version_message = '%%(prog)s %s (%s)' % (program_version, program_build_date)
539553
program_shortdesc = "wikipush"
540554
user_name="Wolfgang Fahl"
541-
555+
542556
program_license = '''%s
543557
544558
Created by %s on %s.
@@ -556,14 +570,14 @@ def main(argv=None,mode='wikipush'): # IGNORE:C0111
556570
# Setup argument parser
557571
parser = ArgumentParser(description=program_license, formatter_class=RawDescriptionHelpFormatter)
558572
parser.add_argument("-d", "--debug", dest="debug", action="store_true", help="set debug level [default: %(default)s]")
559-
parser.add_argument('-V', '--version', action='version', version=program_version_message)
573+
parser.add_argument('-V', '--version', action='version', version=program_version_message)
560574
if mode=="wikipush":
561575
parser.add_argument("-l", "--login", dest="login", action='store_true', help="login to source wiki for access permission")
562576
parser.add_argument("-s", "--source", dest="source", help="source wiki id", required=True)
563577
parser.add_argument("-f", "--force", dest="force", action='store_true', help="force to overwrite existing pages")
564578
parser.add_argument("-i", "--ignore", dest="ignore", action='store_true', help="ignore upload warnings e.g. duplicate images")
565579
parser.add_argument("-wi", "--withImages", dest="withImages", action='store_true', help="copy images on the given pages")
566-
elif mode=="wikibackup":
580+
elif mode=="wikibackup":
567581
parser.add_argument("-g", "--git", dest="git", action='store_true', help="use git for version control")
568582
parser.add_argument("-l", "--login", dest="login", action='store_true', help="login to source wiki for access permission")
569583
parser.add_argument("-s", "--source", dest="source", help="source wiki id", required=True)
@@ -575,19 +589,21 @@ def main(argv=None,mode='wikipush'): # IGNORE:C0111
575589
parser.add_argument("--search", dest="search", help="search pattern", required=True)
576590
parser.add_argument("--replace", dest="replace", help="replace pattern", required=True)
577591
parser.add_argument("--context", dest="context",type=int, help="number of context lines to show in dry run diff display",default=1)
578-
parser.add_argument("-f", "--force", dest="force", action='store_true', help="force to edit pages - default is 'dry' run only listing pages")
592+
parser.add_argument("-f", "--force", dest="force", action='store_true', help="force to edit pages - default is 'dry' run only listing pages")
579593
elif mode=="wikiquery":
580594
parser.add_argument("-l", "--login", dest="login", action='store_true', help="login to source wiki for access permission")
581595
parser.add_argument("-s", "--source", dest="source", help="source wiki id", required=True)
582-
parser.add_argument("--format", dest="format", default='json', help="format to use for query result csv,json,xml,ttl or wiki")
596+
parser.add_argument("--format", dest="format", default='json', help="format to use for query result csv,json,xml,ttl or wiki")
583597
elif mode=="wikiupload":
584598
parser.add_argument("--files", nargs='+', help="list of files to be uploaded", required=True)
585-
parser.add_argument("-f", "--force", dest="force", action='store_true', help="force to (re)upload existing files - default is false")
599+
parser.add_argument("-f", "--force", dest="force", action='store_true', help="force to (re)upload existing files - default is false")
586600
pass
587601
elif mode=="wikirestore":
602+
parser.add_argument("--listFile", dest="listFile", help="List of pages to restore", required=False)
588603
parser.add_argument("--backupPath", dest="backupPath", help="path the backup is stored", required=False)
589604
parser.add_argument("-s", "--source", dest="source", help="source wiki id", required=False)
590605
parser.add_argument("-l", "--login", dest="login", action='store_true', help="login to source wiki for access permission")
606+
parser.add_argument('-stdinp', dest="stdinp", action='store_true',help='Use the input from STD IN using pipes')
591607
if mode in ["wikipush","wikiedit","wikinuke","wikibackup","wikiquery","wikirestore"]:
592608
parser.add_argument("--limit",dest="limit",type=int,help="limit for query")
593609
parser.add_argument("--progress",dest="showProgress",action='store_true',help="shows progress for query")
@@ -597,20 +613,20 @@ def main(argv=None,mode='wikipush'): # IGNORE:C0111
597613
parser.add_argument("-p", "--pages", nargs='+', help="list of page Titles to be pushed", required=False)
598614
parser.add_argument("-ui", "--withGUI", dest="ui", help="Pop up GUI for selection", action="store_true",required=False)
599615
parser.add_argument("-qd", "--queryDivision", default=1, dest="queryDivision", type=int, help="divide query into equidistant subintervals to limit the result size of the individual queries", required=False)
600-
616+
601617
if not mode in ["wikibackup", "wikiquery"]:
602-
parser.add_argument("-t", "--target", dest="target", help="target wiki id", required=True)
618+
parser.add_argument("-t", "--target", dest="target", help="target wiki id", required=True)
603619
# Process arguments
604620
args = parser.parse_args(argv)
605621
if hasattr(args,"queryDivision"):
606622
if args.queryDivision < 1:
607623
raise ValueError("queryDivision argument must be greater equal 1")
608-
624+
609625
if mode=="wikipush":
610626
wikipush=WikiPush(args.source,args.target,login=args.login,debug=args.debug)
611627
queryWiki=wikipush.fromWiki
612628
elif mode=="wikibackup":
613-
wikipush=WikiPush(args.source,None,login=args.login,debug=args.debug)
629+
wikipush=WikiPush(args.source,None,login=args.login,debug=args.debug)
614630
queryWiki=wikipush.fromWiki
615631
elif mode=="wikiquery":
616632
wikipush=WikiPush(args.source,None,login=args.login,debug=args.debug)
@@ -625,10 +641,13 @@ def main(argv=None,mode='wikipush'): # IGNORE:C0111
625641
queryWiki=wikipush.toWiki
626642
if mode=="wikiupload":
627643
wikipush.upload(args.files,args.force)
628-
else:
644+
else:
629645
pages=None
630646
if args.pages:
631-
pages=args.pages
647+
pages = args.pages
648+
elif hasattr(args,"stdinp"):
649+
if args.stdinp:
650+
pages = sys.stdin.readlines()
632651
elif args.query or args.queryFile:
633652
if args.query:
634653
query = args.query
@@ -641,15 +660,15 @@ def main(argv=None,mode='wikipush'): # IGNORE:C0111
641660
print(formatedQueryResults)
642661
else:
643662
print(f"Format {args.format} is not supported.")
644-
else:
663+
else:
645664
pages=wikipush.query(query,wiki=queryWiki,queryField=args.queryField,limit=args.limit,showProgress=args.showProgress, queryDivision=args.queryDivision)
646665
if pages is None:
647666
if mode=="wikiquery":
648667
# we are finished
649668
pass
650669
if mode=="wikirestore":
651670
if args.pages is None and args.queryFile is None and args.query is None:
652-
wikipush.restore(pageTitles=None,backupPath=args.backupPath)
671+
wikipush.restore(pageTitles=None,backupPath=args.backupPath,listFile=args.listFile)
653672
else:
654673
raise Exception("no pages specified - you might want to use the -p, -q or --queryFile option")
655674
else:
@@ -668,7 +687,7 @@ def main(argv=None,mode='wikipush'): # IGNORE:C0111
668687
modify=WikiPush.getModify(args.search,args.replace)
669688
wikipush.edit(pages,modify=modify,context=args.context,force=args.force)
670689
elif mode=="wikirestore":
671-
wikipush.restore(pages,backupPath=args.backupPath)
690+
wikipush.restore(pages,backupPath=args.backupPath,stdIn=args.stdinp)
672691
else:
673692
raise Exception("undefined wikipush mode %s" % mode)
674693

0 commit comments

Comments
 (0)