jenkins-bot has submitted this change. ( 
https://gerrit.wikimedia.org/r/c/pywikibot/core/+/942811 )

Change subject: [IMPR] use welcome messages from WelcomeBot within 
CheckImagesBot
......................................................................

[IMPR] use welcome messages from WelcomeBot within CheckImagesBot

use welcome messages from WelcomeBot within CheckImagesBot to prevent
code duplication and different L10N entries.

welcome:
- move WelcomeBot.check_managed_sites method to get_welcome_text
  function to be reused by checkimages.py
- use capital letters for localizing dictionaries
- rename netext dict to WELCOME
- update L10N for WELCOME from checkimages.py

checkimages.py:
- import get_welcome_text from welcome.py script
- remove EMPTY dict
- rewrite put_mex_in_talk() method to use welcome.get_welcome_text()

Change-Id: I374f125837be190a268ef090ffbdbfb19ee14a12
---
M scripts/checkimages.py
M scripts/welcome.py
2 files changed, 100 insertions(+), 90 deletions(-)

Approvals:
  Meno25: Looks good to me, but someone else must approve
  Xqt: Looks good to me, approved
  jenkins-bot: Verified




diff --git a/scripts/checkimages.py b/scripts/checkimages.py
index 9cf45b3..a5fb81a 100755
--- a/scripts/checkimages.py
+++ b/scripts/checkimages.py
@@ -1,9 +1,8 @@
 #!/usr/bin/env python3
-"""
-Script to check recently uploaded files.
+"""Script to check recently uploaded files.

-This script checks if a file description is present and if there are other
-problems in the image's description.
+This script checks if a file description is present and if there are
+other problems in the image's description.

 This script will have to be configured for each language. Please submit
 translations as addition to the Pywikibot framework.
@@ -68,13 +67,14 @@
 * Text=     This is the template that the bot will use when it will report the
             image's problem.

-Todo
-----
-* Clean the code, some passages are pretty difficult to understand.
-* Add the "catch the language" function for commons.
-* Fix and reorganise the new documentation
-* Add a report for the image tagged.
+.. todo::
+   * Clean the code, some passages are pretty difficult to understand.
+   * Add the "catch the language" function for commons.
+   * Fix and reorganise the new documentation
+   * Add a report for the image tagged.

+.. versionchanged:: 8.4
+   Welcome messages are imported from :mod:`scripts.welcome` script.
 """
 #
 # (C) Pywikibot team, 2006-2023
@@ -107,6 +107,7 @@
 from pywikibot.family import Family
 from pywikibot.site import Namespace

+from scripts.welcome import get_welcome_text

 ###############################################################################
 # <--------------------------- Change only below! --------------------------->#
@@ -172,32 +173,6 @@
     'zh': ['{{no source', '{{unknown', '{{No license'],
 }

-# When the bot find that the usertalk is empty is not pretty to put only the
-# no source without the welcome, isn't it?
-EMPTY = {
-    'commons': '{{subst:welcome}}\n~~~~\n',
-    'meta': '{{subst:Welcome}}\n~~~~\n',
-    'ar': '{{subst:أهلا ومرحبا}}\n~~~~\n',
-    'arz': '{{subst:اهلا و سهلا}}\n~~~~\n',
-    'de': '{{subst:willkommen}} ~~~~',
-    'en': '{{subst:welcome}}\n~~~~\n',
-    'fa': '{{subst:خوشامدید|%s}}',
-    'fr': '{{Bienvenue nouveau\n~~~~\n',
-    'ga': '{{subst:Fáilte}} - ~~~~\n',
-    'hr': '{{subst:dd}}--~~~~\n',
-    'hu': '{{subst:Üdvözlet|~~~~}}\n',
-    'it': '<!-- inizio template di benvenuto -->\n{{subst:Benvebot}}\n~~~~\n'
-          '<!-- fine template di benvenuto -->',
-    'ja': '{{subst:Welcome/intro}}\n{{subst:welcome|--~~~~}}\n',
-    'ko': '{{환영}}--~~~~\n',
-    'ru': '{{subst:Приветствие}}\n~~~~\n',
-    'sd': '{{ڀليڪار}}\n~~~~\n',
-    'sr': '{{dd}}--~~~~\n',
-    'ta': '{{welcome}}\n~~~~\n',
-    'ur': '{{خوش آمدید}}\n~~~~\n',
-    'zh': '{{subst:welcome|sign=~~~~}}',
-}
-
 # if the file has an unknown extension it will be tagged with this template.
 # In reality, there aren't unknown extension, they are only not allowed...
 DELETE_IMMEDIATELY = {
@@ -672,9 +647,11 @@
         return True

     def put_mex_in_talk(self) -> None:
-        """Function to put the warning in talk page of the uploader."""
-        commento2 = i18n.twtranslate(self.site.lang,
-                                     'checkimages-source-notice-comment')
+        """Function to put the warning in talk page of the uploader.
+
+        When the bot find that the usertalk is empty it adds the welcome
+        message first. The messages are imported from welcome.py script.
+        """
         email_page_name = i18n.translate(self.site, EMAIL_PAGE_WITH_TEXT)
         email_subj = i18n.translate(self.site, EMAIL_SUBJECT)
         if self.notification2:
@@ -683,10 +660,11 @@
             self.notification2 = self.notification

         second_text = False
+        curr_text = None
         # Getting the talk page's history, to check if there is another
         # advise...
         try:
-            testoattuale = self.talk_page.get()
+            curr_text = self.talk_page.get()
             history = list(self.talk_page.revisions(total=10))
             latest_user = history[0]['user']
             pywikibot.info(
@@ -699,21 +677,19 @@
         except IsRedirectPageError:
             pywikibot.info(
                 'The user talk is a redirect, trying to get the right talk...')
-            try:
-                self.talk_page = self.talk_page.getRedirectTarget()
-                testoattuale = self.talk_page.get()
-            except NoPageError:
-                testoattuale = i18n.translate(self.site, EMPTY)
+            self.talk_page = self.talk_page.getRedirectTarget()
+            if self.talk_page.exists():
+                curr_text = self.talk_page.get()
         except NoPageError:
             pywikibot.info('The user page is blank')
-            testoattuale = i18n.translate(self.site, EMPTY)

-        if self.comm_talk:
-            commentox = self.comm_talk
-        else:
-            commentox = commento2
+        if curr_text is None:
+            try:
+                curr_text = get_welcome_text(self.site) % '~~~~'
+            except KeyError:
+                curr_text = ''

-        new_text = f'{testoattuale}\n\n'
+        new_text = f'{curr_text}\n\n'
         if second_text:
             new_text += f'{self.notification2}'
         else:
@@ -725,8 +701,10 @@
             pywikibot.info('Maximum notifications reached, skip.')
             return

+        summary = self.comm_talk or i18n.twtranslate(
+            self.site.lang, 'checkimages-source-notice-comment')
         try:
-            self.talk_page.put(new_text, summary=commentox, minor=False)
+            self.talk_page.put(new_text, summary=summary, minor=False)
         except PageSaveRelatedError as e:
             if not self.ignore_save_related_errors:
                 raise
diff --git a/scripts/welcome.py b/scripts/welcome.py
index 917d5d7..80a6a67 100755
--- a/scripts/welcome.py
+++ b/scripts/welcome.py
@@ -185,8 +185,8 @@
 # been eliminated.
 # FIXME: Not all language/project combinations have been defined yet.
 #        Add the following strings to customise for a language:
-#        logbook, netext, report_page, bad_pag, report_text, random_sign,
-#        whitelist_pg, final_new_text_additions, logpage_header if
+#        LOGBOOK, WELCOME, REPORT_PAGE, BAD_PAGE, REPORT_TEXT, RANDOM_SIGN,
+#        WHITELIST, FINAL_NEW_TEXT_ADDITIONS, LOGPAGE_HEADER if
 #        different from Wikipedia entry

 ############################################################################
@@ -194,7 +194,7 @@
 # The page where the bot will save the log (e.g. Wikipedia:Welcome log).
 #
 # ATTENTION: Projects not listed won't write a log to the wiki.
-logbook = {
+LOGBOOK = {
     'ar': 'Project:سجل الترحيب',
     'fr': ('Wikipedia:Prise de décision/'
            'Accueil automatique des nouveaux par un robot/log'),
@@ -211,8 +211,9 @@
 # The text for the welcome message (e.g. {{welcome}}) and %s at the end
 # that is your signature (the bot has a random parameter to add different
 # sign, so in this way it will change according to your parameters).
-netext = {
+WELCOME = {
     'commons': '{{subst:welcome}} %s',
+    'meta': '{{subst:Welcome}} %s',
     'wikipedia': {
         'am': '{{subst:Welcome}} %s',
         'ar': '{{subst:أهلا ومرحبا}} %s',
@@ -223,19 +224,23 @@
         'bn': '{{subst:স্বাগতম/বট}} %s',
         'bs': '{{Dobrodošlica}} %s',
         'da': '{{velkommen|%s}}',
+        'de': '{{subst:willkommen}} %s',
         'en': '{{subst:welcome}} %s',
-        'fa': '{{جا:خوشامد}} %s',
-        'fr': '{{subst:Discussion Projet:Aide/Bienvenue}} %s',
+        'fa': '{{subst:خوشامدید|%s}}',
+        'fr': '{{Bienvenue nouveau}} %s',
         'ga': '{{subst:fáilte}} %s',
         'gom': '{{subst:welcome}} %s',
         'gor': '{{subst:Welcome}} %s',
         'he': '{{ס:ברוך הבא}} %s',
         'hr': '{{subst:dd}} %s',
+        'hu': '{{subst:Üdvözlet|%s}}\n',
         'id': '{{subst:sdbot2}}\n%s',
-        'it': '<!-- inizio template di benvenuto -->\n{{subst:Benvebot}}\n%s',
+        'it': '<!-- inizio template di benvenuto -->\n{{subst:Benvebot}}\n%s'
+              '<!-- fine template di benvenuto -->',
         'ja': '{{subst:Welcome/intro}}\n{{subst:welcome|%s}}',
         'ka': '{{ახალი მომხმარებელი}}--%s',
         'kn': '{{subst:ಸುಸ್ವಾಗತ}} %s',
+        'ko': '{{환영}}--%s\n',
         'ml': '{{ബദൽ:സ്വാഗതം/bot}} %s',
         'my': '{{subst:welcome}} %s',
         'nap': '{{Bemmenuto}}%s',
@@ -244,11 +249,12 @@
         'pdc': '{{subst:Wilkum}}%s',
         'pt': '{{subst:bem vindo}} %s',
         'roa-tara': '{{Bovègne}} %s',
-        'ru': '{{Hello}} %s',
-        'sd': '{{subst:ڀليڪار}} %s',
+        'ru': '{{subst:Приветствие}}\n%s\n',
+        'sd': '{{ڀليڪار}}\n%s\n',
         'shn': '{{subst:ႁပ်ႉတွၼ်ႈၽူႈၸႂ်ႉတိုဝ်း}} %s',
         'sq': '{{subst:tung}} %s',
-        'sr': '{{Добродошлица}} %s',
+        'sr': '{{dd}}--%s\n',
+        'ta': '{{welcome}}\n%s\n',
         'ur': '{{نقل:خوش آمدید}}%s',
         'vec': '{{subst:Benvegnù|%s}}',
         'vo': '{{benokömö}} %s',
@@ -292,7 +298,7 @@
     },
 }
 # The page where the bot will report users with a possibly bad username.
-report_page = {
+REPORT_PAGE = {
     'commons': ("Project:Administrators'noticeboard/User problems/Usernames"
                 'to be checked'),
     'wikipedia': {
@@ -318,7 +324,7 @@
 }
 # The page where the bot reads the real-time bad words page
 # (this parameter is optional).
-bad_pag = {
+BAD_PAGE = {
     'commons': 'Project:Welcome log/Bad_names',
     'wikipedia': {
         'am': 'User:Beria/Bad_names',
@@ -341,7 +347,7 @@

 # The text for reporting a possibly bad username
 # e.g. *[[Talk_page:Username|Username]]).
-report_text = {
+REPORT_TEXT = {
     'commons': '\n*{{user3|%s}}' + timeselected,
     'wikipedia': {
         'am': '\n*[[User talk:%s]]' + timeselected,
@@ -365,7 +371,7 @@
 }
 # Set where you load your list of signatures that the bot will load if you use
 # the random argument (this parameter is optional).
-random_sign = {
+RANDOM_SIGN = {
     'am': 'User:Beria/Signatures',
     'ar': 'Project:سجل الترحيب/توقيعات',
     'ba': 'Ҡатнашыусы:Salamat bot/Ярҙам',
@@ -385,7 +391,7 @@
 }
 # The page where the bot reads the real-time whitelist page.
 # (this parameter is optional).
-whitelist_pg = {
+WHITELIST = {
     'ar': 'Project:سجل الترحيب/قائمة بيضاء',
     'en': 'User:Filnik/whitelist',
     'ga': 'Project:Log fáilte/Bánliosta',
@@ -395,14 +401,14 @@

 # Text after the {{welcome}} template, if you want to add something
 # Default (en): nothing.
-final_new_text_additions = {
+FINAL_NEW_TEXT_ADDITIONS = {
     'it': '\n<!-- fine template di benvenuto -->',
     'zh': '<small>(via ~~~)</small>',
 }

 #
 #
-logpage_header = {
+LOGPAGE_HEADER = {
     '_default': '{|border="2" cellpadding="4" cellspacing="0" style="margin: '
                 '0.5em 0.5em 0.5em 1em; padding: 0.5em; background: #bfcda5; '
                 'border: 1px #b6fd2c solid; border-collapse: collapse; '
@@ -459,6 +465,20 @@
     quiet = False            # Users without contributions aren't displayed


+def get_welcome_text(site: pywikibot.site.BaseSite) -> str:
+    """Check that site is managed by the script and return the message.
+
+    :raises KeyError: site is not in WELCOME dict
+    """
+    msg = i18n.translate(site, WELCOME)
+    if not msg:
+        script = pywikibot.calledModuleName()
+        welcome = 'welcome.' if script != 'welcome' else ''
+        raise KeyError(f'{script}.py is not localized for site {site} in '
+                       f'{welcome}WELCOME dict.')
+    return msg
+
+
 class WelcomeBot(SingleSiteBot):

     """Bot to add welcome messages on User pages."""
@@ -466,26 +486,17 @@
     def __init__(self, **kwargs) -> None:
         """Initializer."""
         super().__init__(**kwargs)
-        self.check_managed_sites()
+        self.welcome_text = get_welcome_text(self.site)
         self.bname: Dict[str, str] = {}

         self.welcomed_users: List[str] = []
-        self.log_name = i18n.translate(self.site, logbook)
+        self.log_name = i18n.translate(self.site, LOGBOOK)

         if not self.log_name:
             globalvar.make_welcome_log = False
         if globalvar.random_sign:
             self.define_sign(True)

-    def check_managed_sites(self) -> None:
-        """Check that site is managed by welcome.py."""
-        # Raises KeyError if site is not in netext dict.
-        site_netext = i18n.translate(self.site, netext)
-        if site_netext is None:
-            raise KeyError(f'welcome.py is not localized for site {self.site}'
-                           ' in netext dict.')
-        self.welcome_text = site_netext
-
     def bad_name_filer(self, name, force: bool = False) -> bool:
         """Check for bad names."""
         if not globalvar.filt_bad_name:
@@ -532,8 +543,7 @@

             # blacklist from wikipage
             badword_page = pywikibot.Page(self.site,
-                                          i18n.translate(self.site,
-                                                         bad_pag))
+                                          i18n.translate(self.site, BAD_PAGE))
             list_loaded = []
             if badword_page.exists():
                 pywikibot.info(
@@ -548,7 +558,7 @@
         if not hasattr(self, '_whitelist') or force:
             # initialize whitelist
             whitelist_default = ['emiliano']
-            wtlpg = i18n.translate(self.site, whitelist_pg)
+            wtlpg = i18n.translate(self.site, WHITELIST)
             list_white = []
             if wtlpg:
                 whitelist_page = pywikibot.Page(self.site, wtlpg)
@@ -612,8 +622,7 @@
         # name in queue is max, put detail to report page
         pywikibot.info('Updating badname accounts to report page...')
         rep_page = pywikibot.Page(self.site,
-                                  i18n.translate(self.site,
-                                                 report_page))
+                                  i18n.translate(self.site, REPORT_PAGE))
         if rep_page.exists():
             text_get = rep_page.get()
         else:
@@ -630,8 +639,7 @@
                 pywikibot.info(f'{username} is already in the report page.')
             else:
                 # Adding the log.
-                rep_text += i18n.translate(self.site,
-                                           report_text) % username
+                rep_text += i18n.translate(self.site, REPORT_TEXT) % username
                 if self.site.code == 'it':
                     rep_text = f'{rep_text}{self.bname[username]}}}}}'

@@ -663,7 +671,7 @@
             self.show_status()
             pywikibot.info(
                 'Log page is not exist, getting information for page creation')
-            text = i18n.translate(self.site, logpage_header,
+            text = i18n.translate(self.site, LOGPAGE_HEADER,
                                   fallback=i18n.DEFAULT_FALLBACK)
             text += '\n!' + self.site.namespace(2)
             text += '\n!' + str.capitalize(
@@ -729,7 +737,7 @@
         sign_text = ''
         creg = re.compile(r'^\* ?(.*?)$', re.M)
         if not globalvar.sign_file_name:
-            sign_page_name = i18n.translate(self.site, random_sign)
+            sign_page_name = i18n.translate(self.site, RANDOM_SIGN)
             if not sign_page_name:
                 self.show_status(Msg.WARN)
                 pywikibot.info(f"{self.site} doesn't allow random signature,"
@@ -817,7 +825,7 @@
         elif self.site.sitename != 'wikinews:it':
             welcome_text = welcome_text % globalvar.default_sign

-        final_text = i18n.translate(self.site, final_new_text_additions)
+        final_text = i18n.translate(self.site, FINAL_NEW_TEXT_ADDITIONS)
         if final_text:
             welcome_text += final_text
         welcome_comment = i18n.twtranslate(self.site, 'welcome-welcome')

--
To view, visit https://gerrit.wikimedia.org/r/c/pywikibot/core/+/942811
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.wikimedia.org/r/settings

Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Change-Id: I374f125837be190a268ef090ffbdbfb19ee14a12
Gerrit-Change-Number: 942811
Gerrit-PatchSet: 1
Gerrit-Owner: Xqt <[email protected]>
Gerrit-Reviewer: D3r1ck01 <[email protected]>
Gerrit-Reviewer: Meno25 <[email protected]>
Gerrit-Reviewer: Xqt <[email protected]>
Gerrit-Reviewer: jenkins-bot
Gerrit-MessageType: merged
_______________________________________________
Pywikibot-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to