@@ -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
508522def mainNuke (argv = None ):
509523 main (argv ,mode = 'wikinuke' )
510-
524+
511525def mainEdit (argv = None ):
512526 main (argv ,mode = 'wikiedit' )
513-
527+
514528def mainPush (argv = None ):
515529 main (argv ,mode = 'wikipush' )
516-
530+
517531def mainQuery (argv = None ):
518532 main (argv ,mode = 'wikiquery' )
519-
533+
520534def mainUpload (argv = None ):
521535 main (argv ,mode = 'wikiupload' )
522536
@@ -525,20 +539,20 @@ def mainBackup(argv=None):
525539
526540def mainRestore (argv = None ):
527541 main (argv ,mode = 'wikirestore' )
528-
542+
529543def 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