Користувач:JBoTs/Публікація рішень Правління

Матеріал з Вікімедіа Україна
Перейти до навігації Перейти до пошуку
#  Протестовано на  python 3.7
from mwclient import Site  #  pip install mwclient
from datetime import date
import mwclient.errors

# Log in
site = Site('ua.wikimedia.org')
while True:
    try:
        login = input('Enter login:\n')
        password = input('Enter password:\n')
        site.login(login, password)
        break
    except mwclient.errors.LoginError:
        print('Incorrect username or password entered. Please try again.')

def decision_name(name, number):
    today = date.today()
    month = {1: ' січня ',
             2: ' лютого ',
             3: ' березня ',
             4: ' квітня ',
             5: ' травня ',
             6: ' червня ',
             7: ' липня ',
             8: ' серпня ',
             9: ' вересня ',
             10: ' жовтня ',
             11: ' листопада ',
             12: ' грудня '}

    list_of_decisions = site.pages['Рішення Правління (список)']
    list_of_decisions_content = list_of_decisions.text(section=1).split('\n')
    last_decision = list_of_decisions_content[(len(list_of_decisions_content) - 1)]
    num_last_decision = last_decision[last_decision.find('№') + 1:last_decision.find('/')]
    dec_name = 'Рішення Правління №' + str(int(num_last_decision) + 1) + '/' + str(today.year) + ' від ' + str(
        today.day) + month[today.month] + str(today.year)
    if name:
        return dec_name
    if number:
        return num_last_decision


while True:
    print('Look up in "Проєкти рішень Правління"  the section number of decision you want to publish and enter it below.')
    num = input('Enter section number: ')
    try:
        num = int(num)
    except ValueError:
        continue
    if isinstance(num, int):
        break

# archive info
archive = 'Вікімедіа:Архів проектів рішень Правління/'+str(date.today().year)
archive_page = site.pages[archive]
archive_page_content = archive_page.text()
end_text = '\n<noinclude>[[Категорія:Проекти рішень Правління]]</noinclude>'

# board page
page_board = site.pages['Проєкти рішень Правління']
current_decision = page_board.text(section=num)
current_decision_a = current_decision.split('\n')
dec_title = "".join(str(x) for x in (current_decision_a[0:1])).replace('==', '').strip()
print(dec_title)
# test page
page_test = site.pages['User:' + login + '/Temp']

# takeaway from board page
summary = '[[' + decision_name(1, None) + '|опубліковано' + ']], ' + '[[' + archive + '|архівовано]]'

# coping to test space
print('Coping to test space...')
text_to_test = current_decision
page_test.save(text_to_test, 'публікація рішення...', bot=True)
formul = page_test.text(section=2).split('\n')
dec_form = '\n'.join(str(x) for x in formul[1:])

votes = page_test.text(section=4).split('\n* ')[1:]
za_votes, proty_votes, utr_votes, ne_votes = [], [], [], []
for per_l in votes:
    nick = per_l[int(per_l.find(':')) + 1:int(per_l.find('|'))]
    if per_l.lower().find('за') > 1:
        za_votes.append(nick)
    elif per_l.lower().find('проти') > 1:
        proty_votes.append(nick)
    elif per_l.lower().find('утримуюсь') > 1:
        utr_votes.append(nick)
    else:
        ne_votes.append(nick)

line_w_votes = ''
if len(za_votes) == 7:
    line_w_votes = 'Одностайно.'
else:
    line_w_votes = ('«За» — ' + ', '.join(za_votes) if len(za_votes) > 0 else '')
    line_w_votes += ('; «Проти» — ' + ', '.join(proty_votes) if len(proty_votes) > 0 else '')
    line_w_votes += (('; «Утримався» — ' + ', '.join(utr_votes)) if len(utr_votes) > 0 else '')
    line_w_votes += ('; «Не головував» — ' + ', '.join(ne_votes) if len(ne_votes) > 0 else '')
line_w_votes = '(' + line_w_votes.strip() + '. )'

current_data = date.today()
day = ('0' + str(current_data.day) if current_data.day < 10 else str(current_data.day))
month = ('0' + str(current_data.month) if current_data.month < 10 else str(current_data.month))
year = str(current_data.year)

new_decision_page = site.pages[decision_name(1, None)]
decision_text = dec_form + '\n\n' + line_w_votes + '\n\n' + '.'.join(
    (day, month, year)) + ', м. Київ\n\n' + '[[Категорія:Рішення Правління|' + ''.join(
    (year, month, day)) + ']]\n[[Категорія:Рішення Правління в ' + year + ']]'

print('Publishing...')
print(decision_text)
new_decision_page.save(text=decision_text, bot=True)

new_decision_disc = site.pages[' Обговорення:' + decision_name(1, None)]
disc_decision_text = '{{closed}}\n' + current_decision.replace('Ким, коли, де', '[[' + decision_name(1, None) + ']] --~~~~ <small>\n</div>')
new_decision_disc.save(text=disc_decision_text, summary="Перенесено з проєктів рішень", bot=True)

# Delete from board page
page_board.save(section=num, text='', summary=summary, bot=True)

# Archiving
add_text_archive = '\n{{:Обговорення:' + decision_name(1, None) + '}}\n'
archive_text = archive_page_content.replace(end_text, '\n' + add_text_archive + end_text)
print('Archiving...')
archive_page.save(text=archive_text, summary='доповнення', bot=True)

new_decision_name = '\n# [[' + decision_name(1, None) + ']], ' + dec_title[0:1].lower() + dec_title[1:]
# To list
page_list = site.pages['Рішення Правління (список)']
add_to_list = page_list.text(section=1) + new_decision_name + '\n'
print('Adding to list..')
page_list.save(text=add_to_list, section=1, summary='доповнення', bot=True)

page_test.save(text='', summary='Сторінка очищена', bot=True)
print('...Done!')