jenkins-bot has submitted this change. (
https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1078090?usp=email )
Change subject: [IMPR] move code parts from SandboxBot.run() to
SandboxBot.tread()
......................................................................
[IMPR] move code parts from SandboxBot.run() to SandboxBot.tread()
- move code parts from SandboxBot.run() to SandboxBot.tread()
and decrease nested flow statements
Change-Id: Ia7e5f3312140aa1450a499dc9d918ca021d0f8ce
---
M scripts/clean_sandbox.py
1 file changed, 63 insertions(+), 66 deletions(-)
Approvals:
jenkins-bot: Verified
Xqt: Looks good to me, approved
diff --git a/scripts/clean_sandbox.py b/scripts/clean_sandbox.py
index 44fb69d..7f23e6a 100755
--- a/scripts/clean_sandbox.py
+++ b/scripts/clean_sandbox.py
@@ -56,7 +56,7 @@
import pywikibot
from pywikibot import i18n, pagegenerators
from pywikibot.bot import Bot, ConfigParserBot
-from pywikibot.exceptions import EditConflictError, NoPageError
+from pywikibot.exceptions import EditConflictError
content = {
@@ -227,77 +227,75 @@
self.generator = pages
+ def treat(self, page):
+ """Treat a single page."""
+ if not page.exists():
+ pywikibot.info('*** The sandbox is not existent, skipping.')
+ return
+
+ pywikibot.info(f'Preparing to process sandbox page {page}')
+ if page.isRedirectPage():
+ pywikibot.warning(f'{page.title(as_link=True)} is a redirect'
+ ' page, cleaning it anyway')
+ text = page.text
+ if self.opt.summary:
+ translated_msg = self.opt.summary
+ else:
+ translated_msg = i18n.twtranslate(
+ self.site, 'clean_sandbox-cleaned')
+
+ subst = 'subst:' in self.translated_content
+ pos = text.find(self.translated_content.strip())
+ latest_user = page.latest_revision.user
+
+ try:
+ if text.strip() == self.translated_content.strip():
+ pywikibot.info(
+ 'The sandbox is still clean, no change necessary.')
+ elif subst and latest_user == self.site.user():
+ pywikibot.info(
+ 'The sandbox might be clean, no change necessary.')
+ elif pos != 0 and not subst:
+ page.put(self.translated_content, translated_msg)
+ pywikibot.showDiff(text, self.translated_content)
+ pywikibot.info(
+ 'Standard content was changed, sandbox cleaned.')
+ else:
+ edit_delta = (pywikibot.Timestamp.utcnow()
+ - page.latest_revision.timestamp)
+ delta = self.delay_td - edit_delta
+ # Is the last edit more than 'delay' minutes ago?
+ if delta <= datetime.timedelta(0):
+ page.put(self.translated_content, translated_msg)
+ pywikibot.showDiff(text, self.translated_content)
+ pywikibot.info('Standard content was changed, '
+ 'sandbox cleaned.')
+ else: # wait for the rest
+ pywikibot.info(
+ 'Sandbox edited '
+ f'{edit_delta.seconds / 60.0:.1f} minutes ago...'
+ )
+ pywikibot.info(
+ f'Sleeping for {delta.seconds // 60} minutes.')
+ pywikibot.sleep(delta.seconds)
+ self.wait = True
+ except EditConflictError:
+ pywikibot.info('*** Skipping because of an edit conflict.\n')
+
def run(self) -> None:
"""Run bot."""
self.site.login()
while True:
- wait = False
+ self.wait = False
now = time.strftime('%d %b %Y %H:%M:%S (UTC)', time.gmtime())
for sandbox_page in self.generator:
- pywikibot.info('Preparing to process sandbox page '
- + sandbox_page.title(as_link=True))
- if sandbox_page.isRedirectPage():
- pywikibot.warning(
- f'{sandbox_page.title(as_link=True)} is a redirect'
- ' page, cleaning it anyway'
- )
- try:
- text = sandbox_page.text
- if self.opt.summary:
- translated_msg = self.opt.summary
- else:
- translated_msg = i18n.twtranslate(
- self.site, 'clean_sandbox-cleaned')
-
- subst = 'subst:' in self.translated_content
- pos = text.find(self.translated_content.strip())
- latest_user = sandbox_page.latest_revision.user
- if text.strip() == self.translated_content.strip():
- pywikibot.info(
- 'The sandbox is still clean, no change necessary.')
- elif subst and latest_user == self.site.user():
- pywikibot.info(
- 'The sandbox might be clean, no change necessary.')
- elif pos != 0 and not subst:
- sandbox_page.put(self.translated_content,
- translated_msg)
- pywikibot.showDiff(text, self.translated_content)
- pywikibot.info(
- 'Standard content was changed, sandbox cleaned.')
- else:
- edit_delta = (pywikibot.Timestamp.utcnow()
- - sandbox_page.latest_revision.timestamp)
- delta = self.delay_td - edit_delta
- # Is the last edit more than 'delay' minutes ago?
- if delta <= datetime.timedelta(0):
- sandbox_page.put(
- self.translated_content, translated_msg)
- pywikibot.showDiff(text, self.translated_content)
- pywikibot.info('Standard content was changed, '
- 'sandbox cleaned.')
- else: # wait for the rest
- pywikibot.info(
- 'Sandbox edited '
- f'{edit_delta.seconds / 60.0:.1f} minutes'
- ' ago...'
- )
- pywikibot.info(
- f'Sleeping for {delta.seconds // 60} minutes.')
- pywikibot.sleep(delta.seconds)
- wait = True
- except EditConflictError:
- pywikibot.info(
- '*** Loading again because of edit conflict.\n')
- except NoPageError:
- pywikibot.info(
- '*** The sandbox is not existent, skipping.')
- continue
+ self.treat(sandbox_page)
if self.opt.hours < 0:
pywikibot.info('\nDone.')
return
- if not wait:
+ if not self.wait:
if self.opt.hours < 1.0:
pywikibot.info(
f'\nSleeping {self.opt.hours * 60} minutes, now {now}')
@@ -308,8 +306,7 @@
def main(*args: str) -> None:
- """
- Process command line arguments and invoke bot.
+ """Process command line arguments and invoke bot.
If args is an empty list, sys.argv is used.
@@ -321,10 +318,10 @@
gen_factory = pagegenerators.GeneratorFactory()
for arg in local_args:
opt, _, value = arg.partition(':')
- if opt.startswith('-'):
- opt = opt[1:]
- else:
+ if not opt.startswith('-'):
continue
+
+ opt = opt[1:]
if opt == 'hours':
opts[opt] = float(value)
elif opt == 'delay':
--
To view, visit
https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1078090?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.wikimedia.org/r/settings?usp=email
Gerrit-MessageType: merged
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Change-Id: Ia7e5f3312140aa1450a499dc9d918ca021d0f8ce
Gerrit-Change-Number: 1078090
Gerrit-PatchSet: 3
Gerrit-Owner: Xqt <[email protected]>
Gerrit-Reviewer: D3r1ck01 <[email protected]>
Gerrit-Reviewer: Xqt <[email protected]>
Gerrit-Reviewer: jenkins-bot
_______________________________________________
Pywikibot-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]