logger.py 3.5 KB
Newer Older
Linedwell's avatar
Linedwell committed
1 2
#!/usr/bin/python
# -*- coding: utf-8 -*-
3

Linedwell's avatar
Linedwell committed
4
# (C) Linedwell, 2011-2018
5 6 7 8 9
#
# Distribué sous licence GNU GPLv3
# Distributed under the terms of the GNU GPLv3 license
# http://www.gnu.org/licenses/gpl.html

Linedwell's avatar
Linedwell committed
10 11 12 13 14

import sys
sys.path.insert(1, '..') #ajoute au PYTHONPATH le répertoire parent

import time
Linedwell's avatar
Linedwell committed
15
from datetime import datetime, timedelta
16

Linedwell's avatar
Linedwell committed
17 18 19 20
import pywikibot

#Variables globales

21
site = pywikibot.Site()
22
month = [u'',u"Janvier",u"Février",u"Mars",u"Avril",u"Mai",u"Juin",u"Juillet",u"Août",u"Septembre",u"Octobre",u"Novembre",u"Décembre"]
23

24
summaryHeader = {
25 26
    "wikipedia" : u"[[WP:Bot|Robot]] : ",
    "vikidia" : u"[[VD:Robot|Robot]] : ",
27
}
Linedwell's avatar
Linedwell committed
28 29


30
#Met à jour la page de journalisation du bot
31
def editLog(site,log,page="Utilisateur:LinedBot/Log",summary='',ar=True,cl=False):
32 33 34 35 36
    if log != '':
        family = site.family.name
        year = time.strftime('%Y')
        pageLog = pywikibot.Page(site,page)
        pageArchive = pywikibot.Page(site,pageLog.title() + '/' + str(int(year) - 1))
37
        
38 39 40 41
        if ar and not pageArchive.exists():
            pageLogTemp = archive(site,pageLog,pageArchive)
        else:
            pageLogTemp = pageLog.get()
42 43
        
        if cl > 0:
44
            pageLogTemp = clean(pageLogTemp,cl)
45

46 47
        if pageLogTemp.find(u"== " + month[int(time.strftime('%m'))] + " ==") == -1: pageLogTemp += u"\n\n== " + month[int(time.strftime("%m"))] + " =="
        if pageLogTemp.find(u"=== " + time.strftime('%Y-%m-%d') + " ===") != -1: pageLogTemp += '\n' + log
48
        else :
49
            pageLogTemp += '\n' + u"=== " + time.strftime('%Y-%m-%d') + " ===\n" + log
50
        if summary == '':
51
            summary = summaryHeader[family] + u"Mise à jour du journal (OK:%s, KO:%s)" %(nbrModif,(nbrTotal - nbrModif))
52
        else:
Linedwell's avatar
Linedwell committed
53 54 55
            summary = summaryHeader[family] + summary
        
        pageLog.get(force=True,get_redirect=True)
56 57
        pageLog.text = pageLogTemp
        pageLog.save(summary)
Linedwell's avatar
Linedwell committed
58 59

#Archive la page de journalisation du bot et réinitialise la page pour la nouvelle année
60
def archive(site,pageLog,pageArchive):
61
    family = site.family.name
62
    pageLog.move(pageArchive.title(),u"Archivage annuel") #Déplacement de pageLog vers pageArchive
Linedwell's avatar
Linedwell committed
63
    pageArchive = pywikibot.Page(site,pageArchive.title())
Linedwell's avatar
Linedwell committed
64
	
Linedwell's avatar
Linedwell committed
65 66 67 68
    #Retrait du modèle de mise à jour de pageArchive
    pageArchiveTemp = pageArchive.get(force=True,get_redirect=True)
    pageArchiveTemp = pageArchiveTemp.replace(u'{{Mise à jour bot|Linedwell}}\n','',1)
    summary = summaryHeader[family] + u"Retrait de {{Mise à jour bot}}, page d'archive n'étant plus mise à jour"
69 70
    pageArchive.text = pageArchiveTemp
    pageArchive.save(summary,force=True)
Linedwell's avatar
Linedwell committed
71
	
72
    pageLogTemp = u"__NOINDEX__\n{{Mise à jour bot|Linedwell}}\n{{Sommaire|niveau=1}}\n" #On réinsère le modèle de màj sur pageLog
Linedwell's avatar
Linedwell committed
73
    return pageLogTemp
74

75 76 77
#Supprime les sections plus vieilles que X jours
def clean(pageTemp, days=30):
    limit = datetime.utcnow() - timedelta(days=days)
78 79
    date = limit.strftime('%Y-%m-%d')
    index = pageTemp.find(u"=== " + date + " ===")
80
    if index != -1:
81 82
        pageHeader = u"__NOINDEX__\n{{Mise à jour bot|Linedwell}}\n{{Palette|Admissibilité à vérifier}}\n{{Sommaire|niveau=2}}\n{{/graphe}}\n\n"
        monthSection = u"== %s ==\n" %(month[int(limit.strftime('%m'))])
83 84 85 86
        
        pageTemp = pageHeader + monthSection + pageTemp[index:]
    return pageTemp

Linedwell's avatar
Linedwell committed
87
def setValues(nbTotal, nbModif):
Linedwell's avatar
Linedwell committed
88 89 90
    global nbrTotal, nbrModif
    nbrTotal = nbTotal
    nbrModif = nbModif