Ricordisamoa has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/148646

Change subject: port speedy_delete.py to core
......................................................................

port speedy_delete.py to core

original version without changes

bug: 64880
Change-Id: I49733820fe77bfef95475d4e2e39c2cd9d974226
---
A scripts/speedy_delete.py
1 file changed, 612 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/pywikibot/core 
refs/changes/46/148646/1

diff --git a/scripts/speedy_delete.py b/scripts/speedy_delete.py
new file mode 100644
index 0000000..d1a2aa6
--- /dev/null
+++ b/scripts/speedy_delete.py
@@ -0,0 +1,612 @@
+# -*- coding: utf-8 -*-
+"""
+This bot is used to quickly trawl through candidates for speedy deletion in a
+fast and semi-automated fashion.  The bot displays the contents of each page
+one at a time and provides a prompt for the user to skip or delete the page.
+Of course, this will require a sysop account.
+
+Future upcoming options include the ability to untag a page as not being
+eligible for speedy deletion, as well as the option to commute its sentence to
+Proposed Deletion (see [[en:WP:PROD]] for more details).  Also, if the article
+text is long, to prevent terminal spamming, it might be a good idea to truncate
+it just to the first so many bytes.
+
+WARNING: This tool shows the contents of the top revision only.  It is possible
+that a vandal has replaced a perfectly good article with nonsense, which has
+subsequently been tagged by someone who didn't realize it was previously a good
+article.  The onus is on you to avoid making these mistakes.
+
+NOTE: This script currently only works for the Wikipedia project.
+
+"""
+
+#
+# (C) Pywikipedia bot team, 2007-2010
+#
+# Distributed under the terms of the MIT license.
+#
+__version__ = '$Id$'
+#
+
+import wikipedia as pywikibot
+import pagegenerators
+import catlib
+import time
+
+
+class SpeedyRobot:
+    """ This robot will load a list of pages from the category of candidates 
for
+    speedy deletion on the language's wiki and give the user an interactive
+    prompt to decide whether each should be deleted or not.
+
+    """
+
+    csd_cat = {
+        'wikipedia': {
+            'ab': u'Категория:Candidates for speedy deletion',
+            'ak': u'Category:Candidates for speedy deletion',
+            'ang': u'Flocc:Candidates for speedy deletion',
+            'ar': u'تصنيف:صفحات للحذف السريع',
+            'arc': u'Category:Candidates for speedy deletion',
+            'av': u'Категория:Candidates for speedy deletion',
+            'ay': u'Categoría:Candidates for speedy deletion',
+            'az': u'Kateqoriya:Vikipediya:Silinəcək səhifələr',
+            'ba': u'Категория:Delete',
+            'bar': u'Kategorie:Wikipedia:Schnelllöschen',
+            'bat-smg': u'Kateguorėjė:Kandėdatā skobē trintė',
+            'be': u'Катэгорыя:Артыкулы да выдалення',
+            'be-x-old': u'Катэгорыя:Вікіпэдыя:Кандыдатуры на выдаленьне',
+            'bh': u'Category:Candidates for speedy deletion',
+            'bi': u'Category:Candidates for speedy deletion',
+            'bn': u'বিষয়শ্রেণী:Candidates for speedy deletion',
+            'bo': u'Category:Candidates for speedy deletion',
+            'br': u'Rummad:Candidates for speedy deletion',
+            'bug': u'Kategori:Candidates for speedy deletion',
+            'bxr': u'Category:Candidates for speedy deletion',
+            'ca': u'Categoria:Sol·licituds de supressió immediata',
+            'cbk-zam': u'Categoría:Candidates for speedy deletion',
+            'ce': u'Тоба:Candidates for speedy deletion',
+            'ch': u'Katigoria:Candidates for speedy deletion',
+            'chr': u'Category:Candidates for speedy deletion',
+            'chy': u'Category:Candidates for speedy deletion',
+            'cr': u'Category:Candidates for speedy deletion',
+            'cs': u'Kategorie:Stránky ke smazání',
+            'cu': u'Катигорі́ꙗ:Страни́цѧ ничьжє́ниꙗ дѣлꙗ́',
+            'cv': u'Категори:Тӳрех кăларса пăрахмалли статьясем',
+            'de': u'Kategorie:Wikipedia:Schnelllöschen',
+            'diq': u'Category:Candidates for speedy deletion',
+            'dsb': u'Kategorija:Boki k malsnemu lašowanju',
+            'dv': u'ޤިސްމު:Candidates for speedy deletion',
+            'ee': u'Category:Candidates for speedy deletion',
+            'en': u'Category:Candidates for speedy deletion',
+            'es': u'Categoría:Wikipedia:Borrar (definitivo)',
+            'et': u'Kategooria:Kustutada',
+            'fa': u'رده:مقاله‌های نامزد حذف سریع',
+            'ff': u'Catégorie:Candidates for speedy deletion',
+            'fi': u'Luokka:Roskaa',
+            'fj': u'Category:Candidates for speedy deletion',
+            'fr': u'Catégorie:Wikipédia:Suppression immédiate demandée',
+            'frp': u'Catègorie:Candidates for speedy deletion',
+            'gd': u'Category:Candidates for speedy deletion',
+            'glk': u'رده:Candidates for speedy deletion',
+            'gn': u'Ñemohenda:Candidates for speedy deletion',
+            'gu': u'શ્રેણી:Candidates for speedy deletion',
+            'ha': u'Category:Candidates for speedy deletion',
+            'hak': u'Category:Candidates for speedy deletion',
+            'haw': u'Māhele:Candidates for speedy deletion',
+            'he': u'קטגוריה:ויקיפדיה: למחיקה מהירה',
+            'hsb': u'Kategorija:Strony k spěšnemu wušmórnjenju',
+            'ht': u'Kategori:Candidates for speedy deletion',
+            'ia': u'Categoria:Wikipedia:Eliminar',
+            'ie': u'Category:Candidates for speedy deletion',
+            'ig': u'Category:Candidates for speedy deletion',
+            'ik': u'Category:Candidates for speedy deletion',
+            'ilo': u'Category:Candidates for speedy deletion',
+            'it': u'Categoria:Da cancellare subito',
+            'iu': u'Category:Candidates for speedy deletion',
+            'ja': u'Category:即時削除対象のページ',
+            'jbo': u'Category:Candidates for speedy deletion',
+            'ka': u'კატეგორია:სწრაფი წაშლის კანდიდატები',
+            'kg': u'Category:Candidates for speedy deletion',
+            'ki': u'Category:Candidates for speedy deletion',
+            'kl': u'Kategori:Candidates for speedy deletion',
+            'ko': u'분류:삭제 신청 문서',
+            'ks': u'Category:Candidates for speedy deletion',
+            'kv': u'Категория:Wikipedia:Candidates for speedy deletion',
+            'kw': u'Category:Candidates for speedy deletion',
+            'ky': u'Category:Deletion',
+            'lad': u'Categoría:Candidates for speedy deletion',
+            'lg': u'Category:Candidates for speedy deletion',
+            'lij': u'Categorîa:Candidates for speedy deletion',
+            'ln': u'Catégorie:Candidates for speedy deletion',
+            'lt': u'Kategorija:Kandidatai skubiai trinti',
+            'mg': u'Sokajy:Candidates for speedy deletion',
+            'mk': u'Категорија:Страници за брзо бришење',
+            'ml': u'വര്‍ഗ്ഗം:Candidates for speedy deletion',
+            'mn': u'Ангилал:Устгалд орох хуудсууд',
+            'na': u'Category:Candidates for speedy deletion',
+            'nah': u'Neneuhcāyōtl:Huiquipedia:Borrar (definitivo)',
+            'nds': u'Kategorie:Wikipedia:Gauweg',
+            'ng': u'Category:Candidates for speedy deletion',
+            'nl': u'Categorie:Wikipedia:Nuweg',
+            'no': u'Kategori:Sider som er foreslått raskt slettet',
+            'nov': u'Category:Candidates for speedy deletion',
+            'nrm': u'Category:Candidates for speedy deletion',
+            'nv': u'T\'ááłáhági át\'éego:Candidates for speedy deletion',
+            'ny': u'Category:Candidates for speedy deletion',
+            'om': u'Category:Wikipedia:Candidates for speedy deletion',
+            'or': u'Category:Candidates for speedy deletion',
+            'os': u'Категори:Википеди:Аппарынмæ лæвæрд фæрстæ',
+            'pa': u'ਸ਼੍ਰੇਣੀ:Delete',
+            'pag': u'Category:Candidates for speedy deletion',
+            'pam': u'Category:Candidates for speedy deletion',
+            'pdc': u'Kategorie:Wikipedia:Lösche',
+            'pih': u'Category:Candidates for speedy deletion',
+            'pl': u'Kategoria:Ekspresowe kasowanko',
+            'pt': u'Categoria:Páginas para eliminação rápida',
+            'rn': u'Category:Candidates for speedy deletion',
+            'ro': u'Categorie:Pagini de şters rapid',
+            'roa-tara': u'Category:Candidates for speedy deletion',
+            'ru': u'Категория:Википедия:К быстрому удалению',
+            'rw': u'Category:Candidates for speedy deletion',
+            'sa': u'वर्गः:Candidates for speedy deletion',
+            'sco': u'Category:Candidates for speedy deletion',
+            'sd': u'زمرو:ترت ڊاٺ جا اميدوار',
+            'simple': u'Category:Quick deletion requests',
+            'sl': u'Kategorija:Predlogi za hitro brisanje',
+            'sm': u'Category:Candidates for speedy deletion',
+            'sn': u'Category:Candidates for speedy deletion',
+            'sr': u'Категорија:Брзо брисање',
+            'ss': u'Category:Candidates for speedy deletion',
+            'st': u'Category:Candidates for speedy deletion',
+            'stq': u'Kategorie:Candidates for speedy deletion',
+            'sv': u'Kategori:Snabba raderingar',
+            'sw': u'Jamii:Deleteme',
+            'te': u'వర్గం:Candidates for speedy deletion',
+            'tg': u'Гурӯҳ:Мақолаҳои номзади ҳазф',
+            'th': u'หมวดหมู่:หน้าที่ถูกแจ้งลบ',
+            'ti': u'Category:Candidates for speedy deletion',
+            'tk': u'Category:Deleteme',
+            'tr': u'Kategori:Vikipedi silinecek sayfalar',
+            'ts': u'Category:Candidates for speedy deletion',
+            'tt': u'Törkem:Candidates for speedy deletion',
+            'tum': u'Category:Candidates for speedy deletion',
+            'tw': u'Category:Candidates for speedy deletion',
+            'ug': u'Category:Candidates for speedy deletion',
+            'uk': u'Категорія:Статті до швидкого вилучення',
+            'uz': u'Turkum:Vikipediya:Yoʻqotilish uchun maqolalar',
+            've': u'Category:Candidates for speedy deletion',
+            'vec': u'Categoria:Da cancełare subito',
+            'vi': u'Thể loại:Chờ xoá',
+            'vls': u'Categorie:Wikipedia:Nuweg',
+            'vo': u'Klad:Pads moükabik',
+            'war': u'Category:Candidates for speedy deletion',
+            'xal': u'Янз:Candidates for speedy deletion',
+            'xh': u'Category:Candidates for speedy deletion',
+            'yo': u'Ẹ̀ka:Candidates for speedy deletion',
+            'za': u'分类:Candidates for speedy deletion',
+            'zh': u'Category:快速删除候选',
+            'zh-classical': u'Category:速刪候',
+            'zh-yue': u'Category:快速刪除候選',
+            'zu': u'Category:Candidates for speedy deletion',
+        },
+        'wikinews': {
+            'ar': u'تصنيف:صفحات حذف سريع',
+            'en': u'Category:Speedy deletion',
+            'ja': u'Category:即時削除',
+            'zh': u'Category:快速删除候选',
+        },
+        'wikisource': {
+            'ar': u'تصنيف:صفحات حذف سريع',
+            'id': u'Kategori:Usulan penghapusan',
+            'ja': u'Category:即時削除',
+            'no': u'Kategori:Sider som er foreslått raskt slettet',
+            'pt': u'Categoria:!Páginas para eliminação rápida',
+            'ro': u'Categorie:Propuneri pentru ştergere',
+            'zh': u'Category:快速删除候选',
+        },
+        'wikiversity': {
+            'beta': u'Category:Candidates for speedy deletion',
+            'cs': u'Kategorie:Stránky ke smazání',
+            'de': u'Kategorie:Wikiversity:Löschen',
+            'el': u'Κατηγορία:Σελίδες για γρήγορη διαγραφή',
+            'en': u'Category:Candidates for speedy deletion',
+            'es': u'Categoría:Wikiversidad:Borrar (definitivo)',
+            'it': u'Categoria:Da cancellare subito',
+            'ja': u'Category:Candidates for speedy deletion',
+            'pt': u'Categoria:!Páginas para eliminação rápida',
+        },
+        'wikiquote': {
+            'ar': u'تصنيف:صفحات للحذف السريع',
+            'cs': u'Kategorie:Údržba:Stránky ke smazání',
+            'en': u'Category:Candidates for speedy deletion',
+            'fi': u'Luokka:Roskaa',
+            'ja': u'Category:即時削除',
+            'ru': u'Категория:Викицитатник:К быстрому удалению',
+            'simple': u'Category:Quick deletion requests',
+            'zh': u'Category:快速删除候选',
+        },
+        'wiktionary': {
+            'ar': u'تصنيف:صفحات حذف سريع',
+            'en': u'Category:Candidates for speedy deletion',
+            'fi': u'Luokka:Roskaa',
+            'fr': u'Catégorie:Pages à supprimer rapidement',
+            'ja': u'Category:即時削除',
+            'simple': u'Category:Quick deletion requests',
+            'tt': u'Törkem:Candidates for speedy deletion',
+            'zh': u'Category:快速删除候选',
+        },
+        'wikibooks': {
+            'ar': u'تصنيف:صفحات حذف سريع',
+            'ca': u'Categoria:Elements a eliminar',
+            'en': u'Category:Candidates for speedy deletion',
+            'es': u'Categoría:Wikilibros:Borrar',
+            'it': u'Categoria:Da cancellare subito',
+            'ja': u'Category:即時削除',
+            'pl': u'Kategoria:Ekspresowe kasowanko',
+            'zh': u'Category:快速删除候选',
+        },
+        'meta': {'meta': u'Category:Deleteme'},
+        'commons': {'commons': u'Category:Candidates for speedy deletion'},
+        'incubator': {'incubator': u'Category:Maintenance:Delete'},
+        'mediawiki': {'mediawiki': u'Category:Candidates for deletion'},
+    }
+
+    # If the site has several templates for speedy deletion, it might be
+    # possible to find out the reason for deletion by the template used.
+    # _default will be used if no such semantic template was used.
+    deletion_messages = {
+        'wikipedia': {
+            'ar': {
+                '_default': u'حذف مرشح للحذف السريع حسب [[وProject:حذف 
سريع|معايير الحذف السريع]]',
+            },
+            'cs': {
+                '_default': u'Bylo označeno k [[Wikipedie:Rychlé 
smazání|rychlému smazání]]',
+            },
+            'de': {
+                '_default': u'Lösche Artikel mit 
[[Wikipedia:Schnelllöschantrag|Schnelllöschantrag]]',
+            },
+            'en': {
+                '_default':      u'Deleting candidate for speedy deletion per 
[[WP:CSD|CSD]]',
+                'db-author':     u'Deleting page per [[WP:CSD|CSD]] G7: Author 
requests deletion and is its only editor.',
+                'db-nonsense':   u'Deleting page per [[WP:CSD|CSD]] G1: Page 
is patent nonsense or gibberish.',
+                'db-test':       u'Deleting page per [[WP:CSD|CSD]] G2: Test 
page.',
+                'db-nocontext':  u'Deleting page per [[WP:CSD|CSD]] A1: Short 
article that provides little or no context.',
+                'db-empty':      u'Deleting page per [[WP:CSD|CSD]] A1: Empty 
article.',
+                'db-attack':     u'Deleting page per [[WP:CSD|CSD]] G10: Page 
that exists solely to attack its subject.',
+                'db-catempty':   u'Deleting page per [[WP:CSD|CSD]] C1: Empty 
category.',
+                'db-band':       u'Deleting page per [[WP:CSD|CSD]] A7: 
Article about a non-notable band.',
+                'db-banned':     u'Deleting page per [[WP:CSD|CSD]] G5: Page 
created by a banned user.',
+                'db-bio':        u'Deleting page per [[WP:CSD|CSD]] A7: 
Article about a non-notable person.',
+                'db-notenglish': u'Deleting page per [[WP:CSD|CSD]] A2: 
Article isn\'t written in English.',
+                'db-copyvio':    u'Deleting page per [[WP:CSD|CSD]] G12: Page 
is a blatant copyright violation.',
+                'db-repost':     u'Deleting page per [[WP:CSD|CSD]] G4: 
Recreation of previously deleted material.',
+                'db-vandalism':  u'Deleting page per [[WP:CSD|CSD]] G3: 
Blatant vandalism.',
+                'db-talk':       u'Deleting page per [[WP:CSD|CSD]] G8: Talk 
page of a deleted or non-existent page.',
+                'db-spam':       u'Deleting page per [[WP:CSD|CSD]] G11: 
Blatant advertising.',
+                'db-disparage':  u'Deleting page per [[WP:CSD|CSD]] T1: 
Divisive or inflammatory template.',
+                'db-r1':         u'Deleting page per [[WP:CSD|CSD]] R1: 
Redirect to a deleted or non-existent page.',
+                'db-experiment': u'Deleting page per [[WP:CSD|CSD]] G2: Page 
was created as an experiment.',
+            },
+            'fa': {
+                '_default': u'حذف مرشَّح للحذف السريع حسب [[ويكيبيديا:حذف 
سريع|معايير الحذف السريع]]',
+            },
+            'he': {
+                '_default': u'מחיקת מועמד למחיקה מהירה לפי [[ויקיפדיה:מדיניות 
המחיקה|מדיניות המחיקה]]',
+                u'גם בוויקישיתוף': u'הקובץ זמין כעת בוויקישיתוף.',
+            },
+            'ja': {
+                '_default': u'[[WP:CSD|即時削除の方針]]に基づい削除',
+            },
+            'pt': {
+                '_default': u'Apagando página por [[Wikipedia:Páginas para 
eliminar|eliminação rápida]]',
+            },
+            'pl': {
+                '_default': u'Usuwanie artykułu zgodnie z zasadami 
[[Wikipedia:Ekspresowe kasowanko|ekspresowego kasowania]]',
+            },
+            'it': {
+                '_default': u'Rimuovo pagina che rientra nei casi di 
[[Wikipedia:IMMEDIATA|cancellazione immediata]].',
+            },
+            'zh': {
+                '_default': u'[[WP:CSD]]',
+                'advert': 'ad',
+                'db-blanked': 'auth',
+                'db-spam': u'[[WP:CSD#G11|CSD G11]]: 廣告、宣傳頁面',
+                'db-rediruser': u'[[WP:CSD#O1|CSD O6]] 沒有在使用的討論頁',
+                'notchinese': u'[[WP:CSD#G7|CSD G7]]: 非中文條目且長時間未翻譯',
+                'db-vandalism': 'vand',
+                u'翻译': 'oprj',
+                u'翻譯': 'oprj',
+                'notchinese': 'oprj',
+                'notmandarin': 'oprj',
+                'no source': u'[[WP:CSD#I3|CSD I3]]: 沒有來源連結,無法確認來源與版權資訊',
+                'no license': u'[[WP:CSD#I3|CSD I3]]: 沒有版權模板,無法確認版權資訊',
+                'unknown': u'[[WP:CSD#I3|CSD I3]]: 沒有版權模板,無法確認版權資訊',
+                'temppage': u'[[WP:CSD]]: 臨時頁面',
+                'nowcommons': 'commons',
+                'roughtranslation': 'mactra',
+            },
+        },
+        'wikinews': {
+            'en': {
+                '_default': u'[[WN:CSD]]',
+            },
+            'zh': {
+                '_default': u'[[WN:CSD]]',
+            },
+        },
+    }
+
+    # Default reason for deleting a talk page.
+    talk_deletion_msg = {
+        'wikipedia': {
+            'ar': u'صفحة نقاش يتيمة',
+            'cs': u'Osiřelá diskusní stránka',
+            'de': u'Verwaiste Diskussionsseite',
+            'en': u'Orphaned talk page',
+            'fa': u'بحث یتیم',
+            'fr': u'Page de discussion orpheline',
+            'he': u'דף שיחה של ערך שנמחק',
+            'it': u'Rimuovo pagina di discussione di una pagina già 
cancellata',
+            'pl': u'Osierocona strona dyskusji',
+            'pt': u'Página de discussão órfã',
+            'zh': u'[[WP:CSD#O1|CSD O1 O2 O6]] 沒有在使用的討論頁',
+        },
+        'wikinews': {
+            'en': u'Orphaned talk page',
+            'zh': u'[[WN:CSD#O1|CSD O1 O2 O6]] 沒有在使用的討論頁',
+        }
+    }
+
+    # A list of often-used reasons for deletion. Shortcuts are keys, and
+    # reasons are values. If the user enters a shortcut, the associated reason
+    # will be used.
+    delete_reasons = {
+        'wikipedia': {
+            'de': {
+                'asdf':  u'Tastaturtest',
+                'egal':  u'Eindeutig irrelevant',
+                'ka':    u'Kein Artikel',
+                'mist':  u'Unsinn',
+                'move':  u'Redirectlöschung, um Platz für Verschiebung zu 
schaffen',
+                'nde':   u'Nicht in deutscher Sprache verfasst',
+                'pfui':  u'Beleidigung',
+                'redir': u'Unnötiger Redirect',
+                'spam':  u'Spam',
+                'web':   u'Nur ein Weblink',
+                'wg':    u'Wiedergänger (wurde bereits zuvor gelöscht)',
+            },
+            'it': {
+                'test': u'Si tratta di un test',
+                'vandalismo': u'Caso di vandalismo',
+                'copyviol': 'Violazione di copyright',
+                'redirect': 'Redirect rotto o inutile',
+                'spam': 'Spam',
+                'promo': 'Pagina promozionale',
+            },
+            'ja': {
+                'cont': u'[[WP:CSD]] 全般1 意味不明な内容のページ',
+                'test': u'[[WP:CSD]] 全般2 テスト投稿',
+                'vand': u'[[WP:CSD]] 全般3 荒らしand/orいたずら',
+                'ad': u'[[WP:CSD]] 全般4 宣伝',
+                'rep': u'[[WP:CSD]] 全般5 削除されたページの改善なき再作成',
+                'cp': u'[[WP:CSD]] 全般6 コピペ移動or分割',
+                'sh': u'[[WP:CSD]] 記事1 短すぎ',
+                'nd': u'[[WP:CSD]] 記事1 定義なし',
+                'auth': u'[[WP:CSD]] 記事3 投稿者依頼or初版立項者による白紙化',
+                'nr': u'[[WP:CSD]] リダイレクト1 無意味なリダイレクト',
+                'nc': u'[[WP:CSD]] リダイレクト2 [[WP:NC]]違反',
+                'ren': u'[[WP:CSD]] リダイレクト3 改名提案を経た曖昧回避括弧付きの移動の残骸',
+                'commons': u'[[WP:CSD]] マルチメディア7 コモンズの画像ページ',
+                'tmp': u'[[WP:CSD]] テンプレート1 初版投稿者依頼',
+                'uau': u'[[WP:CSD]] 利用者ページ1 本人希望',
+                'nuu': u'[[WP:CSD]] 利用者ページ2 利用者登録されていない利用者ページ',
+                'ipu': u'[[WP:CSD]] 利用者ページ3 IPユーザの利用者ページ',
+            },
+            'zh': {
+                'empty': u'[[WP:CSD#G1]]: 沒有實際內容或歷史記錄的文章。',
+                'test': u'[[WP:CSD#G2]]: 測試頁',
+                'vand': u'[[WP:CSD#G3]]: 純粹破壞',
+                'rep': u'[[WP:CSD#G5]]: 經討論被刪除後又重新創建的內容',
+                'repa': u'[[WP:CSD#G5]]: 重複的文章',
+                'oprj': u'[[WP:CSD#G7]]: 內容來自其他中文計劃',
+                'move': u'[[WP:CSD#G8]]: 
依[[Wikipedia:移動請求|移動請求]]暫時刪除以進行移動或合併頁面之工作',
+                'auth': u'[[WP:CSD#G10]]: 原作者請求',
+                'ad': u'[[WP:CSD#G11]]: 明顯的以廣告宣傳為目而建立的頁面',
+                'adc': u'[[WP:CSD#G11]]: 只有條目名稱中的人物或團體之聯絡資訊',
+                'bio': u'[[WP:CSD#G12]]: 未列明來源及語調負面的生者傳記',
+                'mactra': u'[[WP:CSD#G13]]: 明顯的機器翻譯',
+                'notrans': u'[[WP:CSD#G14]]: 未翻譯的頁面',
+                'isol': u'[[WP:CSD#G15]]: 孤立頁面',
+                'isol-f': u'[[WP:CSD#G15]]: 孤立頁面-沒有對應檔案的檔案頁面',
+                'isol-sub': u'[[WP:CSD#G15]]: 孤立頁面-沒有對應母頁面的子頁面',
+                'tempcp': u'[[WP:CSD#G16]]: 臨時頁面依然侵權',
+                'cont': u'[[WP:CSD#A1]]: 非常短,而且沒有定義或內容。',
+                'nocont': u'[[WP:CSD#A2]]: 
內容只包括外部連接、參見、圖書參考、類別標籤、模板標籤、跨語言連接的條目',
+                'nc': u'[[WP:CSD#A3]]: 跨計劃內容',
+                'cn': u'[[WP:CSD#R2]]: 跨空間重定向',
+                'wr': u'[[WP:CSD#R3]]: 錯誤重定向',
+                'slr': u'[[WP:CSD#R5]]: 指向本身的重定向或循環的重定向',
+                'repi': u'[[WP:CSD#F1]]: 重複的檔案',
+                'lssd': u'[[WP:CSD#F3]]: 沒有版權或來源資訊,無法確認圖片是否符合方針要求',
+                'nls': u'[[WP:CSD#F3]]: 沒有版權模板,無法確認版權資訊',
+                'svg': u'[[WP:CSD#F5]]: 被高解析度與SVG檔案取代的圖片',
+                'ui': u'[[WP:CSD#F6]]: 圖片未使用且不自由',
+                'commons': u'[[WP:CSD#F7]]: 此圖片已存在於[[:commons:|維基共享資源]]',
+                'urs': u'[[WP:CSD#O1]]: 用戶請求刪除自己的用戶頁子頁面',
+                'anou': u'[[WP:CSD#O3]]: 匿名用戶的用戶討論頁,其中的內容不再有用',
+                'uc': u'[[WP:CSD#O4]]: 空類別',
+                'tmp': u'[[WP:CSD]]: 臨時頁面',
+            },
+        },
+    }
+
+    def __init__(self):
+        """
+        Arguments:
+            none yet
+
+        """
+        self.mySite = pywikibot.getSite()
+        self.csdCat = catlib.Category(self.mySite,
+                                      pywikibot.translate(self.mySite,
+                                                          self.csd_cat))
+        self.savedProgress = None
+        self.preloadingGen = None
+
+    def guessReasonForDeletion(self, page):
+        reason = None
+        # TODO: The following check loads the page 2 times. Find a better way 
to
+        # do it.
+        if page.isTalkPage() and (page.toggleTalkPage().isRedirectPage() or
+                                  not page.toggleTalkPage().exists()):
+            # This is probably a talk page that is orphaned because we
+            # just deleted the associated article.
+            reason = pywikibot.translate(self.mySite, self.talk_deletion_msg)
+        else:
+            # Try to guess reason by the template used
+            templateNames = page.templatesWithParams()
+            reasons = pywikibot.translate(self.mySite, self.deletion_messages)
+
+            for templateName in templateNames:
+                if templateName[0].lower() in reasons:
+                    if type(reasons[templateName[0].lower()]) is not unicode:
+                        #Make alias to delete_reasons
+                        reason = pywikibot.translate(
+                            self.mySite,
+                            
self.delete_reasons)[reasons[templateName[0].lower()]]
+                    else:
+                        reason = reasons[templateName[0].lower()]
+                    break
+        if not reason:
+            # Unsuccessful in guessing the reason. Use a default message.
+            reason = reasons['_default']
+        return reason
+
+    def getReasonForDeletion(self, page):
+        suggestedReason = self.guessReasonForDeletion(page)
+        pywikibot.output(
+            u'The suggested reason is: \03{lightred}%s\03{default}'
+            % suggestedReason)
+
+        # We don't use pywikibot.translate() here because for some languages 
the
+        # entry is intentionally left out.
+        if self.mySite.family.name in self.delete_reasons:
+            if page.site().lang in 
self.delete_reasons[self.mySite.family.name]:
+                localReasons = pywikibot.translate(page.site().lang,
+                                                   self.delete_reasons)
+                pywikibot.output(u'')
+                localReasoneKey = localReasons.keys()
+                localReasoneKey.sort()
+                for key in localReasoneKey:
+                    pywikibot.output((key + ':').ljust(8) + localReasons[key])
+                pywikibot.output(u'')
+                reason = pywikibot.input(
+                    u'Please enter the reason for deletion, choose a default '
+                    u'reason,\nor press enter for the suggested message:')
+                if reason.strip() in localReasons:
+                    reason = localReasons[reason]
+            else:
+                reason = pywikibot.input(
+                    u'Please enter the reason for deletion,\n'
+                    u'or press enter for the suggested message:')
+        else:
+            reason = pywikibot.input(
+                u'Please enter the reason for deletion,\n'
+                u'or press enter for the suggested message:')
+
+        if not reason:
+            reason = suggestedReason
+        return reason
+
+    def run(self):
+        """
+        Starts the robot's action.
+        """
+
+        keepGoing = True
+        startFromBeginning = True
+        while keepGoing:
+            if startFromBeginning:
+                self.savedProgress = None
+            self.refreshGenerator()
+            count = 0
+            for page in self.preloadingGen:
+                try:
+                    pageText = page.get(get_redirect=True).split("\n")
+                    count += 1
+                except pywikibot.NoPage:
+                    pywikibot.output(u'Page %s does not exist or has already '
+                                     u'been deleted, skipping.'
+                                     % page.title(asLink=True))
+                    continue
+                # Show the title of the page we're working on.
+                # Highlight the title in purple.
+                pywikibot.output(u"\n\n>>> \03{lightpurple}%s\03{default} <<<"
+                                 % page.title())
+                pywikibot.output(u'-  -  -  -  -  -  -  -  -  ')
+                if len(pageText) > 75:
+                    pywikibot.output('The page detail is too many lines, '
+                                     u'only output first 50 lines:')
+                    pywikibot.output(u'-  ' * 9)
+                    pywikibot.output(u'\n'.join(pageText[:50]))
+                else:
+                    pywikibot.output(u'\n'.join(pageText))
+                pywikibot.output(u'-  -  -  -  -  -  -  -  -  ')
+                choice = pywikibot.inputChoice(u'Input action?',
+                                               ['delete', 'skip', 'update',
+                                                'quit'],
+                                               ['d', 'S', 'u', 'q'], 'S')
+                if choice == 'q':
+                    keepGoing = False
+                    break
+                elif choice == 'u':
+                    pywikibot.output(u'Updating from CSD category.')
+                    self.savedProgress = page.title()
+                    startFromBeginning = False
+                    break
+                elif choice == 'd':
+                    reason = self.getReasonForDeletion(page)
+                    pywikibot.output(
+                        u'The chosen reason is: \03{lightred}%s\03{default}'
+                        % reason)
+                    page.delete(reason, prompt=False)
+                else:
+                    pywikibot.output(u'Skipping page %s' % page.title())
+                startFromBeginning = True
+            if count == 0:
+                if startFromBeginning:
+                    pywikibot.output(
+                        u'There are no pages to delete.\n'
+                        u'Waiting for 30 seconds or press Ctrl+C to quit...')
+                    try:
+                        time.sleep(30)
+                    except KeyboardInterrupt:
+                        keepGoing = False
+                else:
+                    startFromBeginning = True
+        pywikibot.output(u'Quitting program.')
+
+    def refreshGenerator(self):
+        generator = pagegenerators.CategorizedPageGenerator(
+            self.csdCat, start=self.savedProgress)
+        # wrap another generator around it so that we won't produce orphaned
+        # talk pages.
+        generator2 = pagegenerators.PageWithTalkPageGenerator(generator)
+        self.preloadingGen = pagegenerators.PreloadingGenerator(generator2,
+                                                                pageNumber=20)
+
+
+def main():
+    # read command line parameters
+    for arg in pywikibot.handleArgs():
+        pass  # No args yet
+
+    bot = SpeedyRobot()
+    bot.run()
+
+if __name__ == "__main__":
+    try:
+        main()
+    finally:
+        pywikibot.stopme()

-- 
To view, visit https://gerrit.wikimedia.org/r/148646
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I49733820fe77bfef95475d4e2e39c2cd9d974226
Gerrit-PatchSet: 1
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: Ricordisamoa <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to