jenkins-bot has submitted this change and it was merged.
Change subject: standardize create_categories.py ......................................................................
standardize create_categories.py
- CreateCategoriesBot extends pywikibot.Bot and uses self.userPut() with built-in 'always' option
- call pywikibot.showHelp() in case of insufficient arguments
Change-Id: I1417cbc85c8c5d0e9105d23a577d1d79b6074802 --- M scripts/create_categories.py 1 file changed, 46 insertions(+), 39 deletions(-)
Approvals: Ladsgroup: Looks good to me, approved jenkins-bot: Verified
diff --git a/scripts/create_categories.py b/scripts/create_categories.py index 1baaf1d..d57cfd8 100755 --- a/scripts/create_categories.py +++ b/scripts/create_categories.py @@ -7,7 +7,7 @@
The following command line parameters are supported:
--always (not implemented yet) Don't ask, just do the edit. +-always Don't ask, just do the edit.
-overwrite (not implemented yet).
@@ -28,50 +28,57 @@ # # (C) Multichill, 2011 # (C) xqt, 2011-2014 +# (c) Pywikibot team, 2014 # -# Distributed under the terms of the MIT license. -# +# Distributed under the terms of the MIT license. # import pywikibot -from pywikibot import pagegenerators +from pywikibot import pagegenerators, Bot
-def createCategory(page, parent, basename): - title = page.title(withNamespace=False) +class CreateCategoriesBot(Bot): + def __init__(self, generator, parent, basename, **kwargs): + super(CreateCategoriesBot, self).__init__(**kwargs) + self.generator = generator + self.parent = parent + self.basename = basename + self.comment = u'Creating new category'
- newpage = pywikibot.Page(pywikibot.Site(u'commons', u'commons'), - u'Category:' + basename + u' ' + title) - newtext = u'' - newtext += u'[[Category:' + parent + u'|' + title + u']]\n' - newtext += u'[[Category:' + title + u']]\n' + def create_category(self, page): + title = page.title(withNamespace=False)
- if not newpage.exists(): - #FIXME: Add user prompting and -always option - pywikibot.output(newpage.title()) - pywikibot.showDiff(u'', newtext) + newpage = pywikibot.Category(pywikibot.Site('commons', 'commons'), + '%s %s' % (self.basename, title)) + newtext = (u'[[Category:%(parent)s|%(title)s]]\n' + u'[[Category:%(title)s]]\n' + % {'parent': self.parent, 'title': title})
- comment = u'Creating new category' - try: - newpage.put(newtext, comment) - except pywikibot.EditConflict: - pywikibot.output(u'Skipping %s due to edit conflict' % newpage.title()) - except pywikibot.ServerError: - pywikibot.output(u'Skipping %s due to server error' % newpage.title()) - except pywikibot.PageNotSaved as error: - pywikibot.output(u'Error putting page: %s' % error.args) - else: - #FIXME: Add overwrite option - pywikibot.output(u'%s already exists, skipping' % newpage.title()) + if not newpage.exists(): + pywikibot.output(newpage.title()) + try: + self.userPut(newpage, '', newtext, comment=self.comment) + except pywikibot.EditConflict: + pywikibot.output(u'Skipping %s due to edit conflict' % newpage.title()) + except pywikibot.ServerError: + pywikibot.output(u'Skipping %s due to server error' % newpage.title()) + except pywikibot.PageNotSaved as error: + pywikibot.output(u'Error putting page: %s' % error.args) + else: + # FIXME: Add overwrite option + pywikibot.output(u'%s already exists, skipping' % newpage.title()) + + def run(self): + for page in self.generator: + self.create_category(page)
def main(): - ''' + """ Main loop. Get a generator and options. - ''' - generator = None - parent = u'' - basename = u'' - always = False + """ + parent = None + basename = None + options = {}
# Process global args and prepare generator args parser local_args = pywikibot.handleArgs() @@ -79,7 +86,7 @@
for arg in local_args: if arg == '-always': - always = True + options['always'] = True elif arg.startswith('-parent:'): parent = arg[len('-parent:'):].strip() elif arg.startswith('-basename'): @@ -88,13 +95,13 @@ genFactory.handleArg(arg)
generator = genFactory.getCombinedGenerator() - if generator: - for page in generator: - createCategory(page, parent, basename) + if generator and parent and basename: + bot = CreateCategoriesBot(generator, parent, basename, **options) + bot.run() + pywikibot.output(u'All done') else: pywikibot.output(u'No pages to work on') - - pywikibot.output(u'All done') + pywikibot.showHelp()
if __name__ == "__main__": main()
pywikibot-commits@lists.wikimedia.org