Користувач: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!')