def run(self):
        ##################################
        #####     Candidatures
        cats = [ pywikibot.Page(self.site, u"Modèle:Lien AdQ"), pywikibot.Page(self.site, u"Modèle:Lien BA") ]
        for c in cats:
            for m in c.backlinks(namespaces=0):
                if m.title() not in self.ignor_list: # ... alors prendre la page de trad
                    tradpage = BeBot.togglePageTrad(m)
                    for t in self.traductions:
                       if t.title() == tradpage.title():
                            #Vérification de la correspondance des langues cibles
                            cibleTrad = self.langueCible(tradpage)[0]
                            for cible in self.langueCible(m):
                                if cibleTrad == cible:
                                    self.candidats.append([tradpage, cibleTrad])
                                    break;
                            break;

        ##################################
        #####     Mise à jour du suivi
        for tq in self.tradQualite: #Tri par statut
            statut = 0
            for cat in tq.categories():
#                pywikibot.output(cat.title())
                if   cat.title() == u"Catégorie:Article à traduire":  #1
                    statut = 1
                    break
                elif cat.title() == u"Catégorie:Article en cours de traduction": #2
                    statut = 2
                    break
                elif cat.title() == u"Catégorie:Article à relire":    #3
                    statut = 3
                    break
                elif cat.title() == u"Catégorie:Article en cours de relecture":  #4
                    statut = 4
                    break
                elif cat.title() == u"Catégorie:Traduction terminée": #5
                    statut = 5
                    break
            self.trads[statut].append(tq)

        ### Publication des listings
        self.publier(u'DemandeTraduction', self.trads, 1)
        self.publier(u'EnTraduction', self.trads, 2)
        self.publier(u'DemandeRelecture', self.trads, 3)
        self.publier(u'EnRelecture', self.trads, 4)

        # Cas de statut 5 (terminé)
        for pt in self.trads[5]:
            etat_label = 0
            for cat in BeBot.togglePageTrad(pt).categories():
                if cat.title() == u"Catégorie:Article de qualité" or cat.title() == u'Catégorie:Bon article' :
                    etat_label = 2
                    break
            self.term_et_label[etat_label].append(pt)

        self.publier(u'Labellisées', self.term_et_label, 2, True)
        #pywikibot.Page(self.site, u"Projet:Suivi des articles de qualité des autres wikipédias/Traduction/En attente d'être labellisées").put(self.genererListing(self.term_et_label[1]), comment=self.resumeListing)
        self.publier(u'Terminées sans label', self.term_et_label, 0, False)
    def run(self):
        self.label_se = self.lycos(self.nom_base, \
                conditions="traduction IS NULL", limite=self.limite_label_se)

        art_etrangers = self.lycos(self.nom_base, conditions="traduction IS NOT NULL")
        art_fr = self.lycos('contenu_de_qualite_fr')
        for page_et, infos_et in art_etrangers.items():
            eq_fr = infos_et['traduction']
            if art_fr.has_key(eq_fr):
                self.label_deux[page_et] = infos_et
            else:
                page_trad = BeBot.togglePageTrad(pywikibot.Page(self.site_fr, eq_fr))
                if page_trad.exists():
                    self.label_trad[page_et] = infos_et
                    self.label_trad[page_et]['souspage_trad'] = page_trad
                    ipt = self.infos_page_suivi(page_trad)
                    self.label_trad[page_et]['statut'] = ipt['statut']
                    self.label_trad[page_et]['progression'] = ipt['progression']
                else:
                    self.label_nofr[page_et] = infos_et
                    self.label_nofr[page_et]['taille_fr'] = BeBot.taille_page( \
                            pywikibot.Page(self.site_fr, eq_fr))

        self.total = len(self.label_se) + len(self.label_nofr) \
                + len(self.label_deux) + len(self.label_trad)
 def clore_traduction(self, page):
     """ Clôt une traduction
     """
     #pywikibot.output("&&& clore : %s" % page.title())
     page.text = self.re_statut.sub('|status=5', page.text)
     com = self.resume
     BeBot.save(page, commentaire=com, debug=self.debug)
     self.retirer_le_modele_Traduction(BeBot.togglePageTrad(page))
     self.stats['cloture'] += 1
 def traduction(self, page):
     """
     Donne la page de suivi ou l'interwiki vers fr
     """
     if self.langue == 'fr':
         pt = BeBot.togglePageTrad(page)
         if pt.exists():
             return pt.title()
         else:
             return None
     else:
         res = self.interwikifrRE.search(page.text)
         if res is not None:
             return res.group('iw')
         else:
             return None
    def __init__(self, site, log):
        self.resume = u"Recherche et suivi des traductions issues d'un article labellisé"
        self.resumeListing = u"Mise à jour du suivi des traductions issues d'un article labellisé"
        self.site = site
        self.log = log
        self.candidats = []  # Liste des pages de traduction contenant aussi un modele lien + le code langue commun
        self.tradQualite = [] # Les traductions de qualité connues
        
        # RE
        self.modeleLienRE = re.compile("\{\{(Lien (AdQ|BA)|Link (FA,BA))\|(\w+)\}\}", re.LOCALE)
        self.modeleTradRE = re.compile("\{\{(Traduction/Suivi|Translation/Information)[^\|\}}]*\|(\w+)\|", re.LOCALE)
        
        self.traductions = [] # Pages en cours de traduction
        cats = [u"Article à traduire", u"Article à relire", u"Article en cours de traduiction", u"Article en cours de relecture"]
        for cat in cats:
            c = pywikibot.page.Category(self.site, u"Catégorie:"+cat)
            for t in c.members():
                self.traductions.append(t)
        
        cats = []
        self.ignor_list = u'' # On ignore les pages qui ont déjà le paramètre adq/ba
        tmp = []
        c1 = pywikibot.Category(self.site, u"Catégorie:Traduction d'un Article de Qualité")
        cats.append(pagegenerators.CategorizedPageGenerator(c1))
        c2 = pywikibot.Category(self.site, u"Catégorie:Traduction d'un Bon Article")
        cats.append(pagegenerators.CategorizedPageGenerator(c2))
        gen = pagegenerators.DuplicateFilterPageGenerator(pagegenerators.CombinedPageGenerator(cats))
        gen = pagegenerators.PreloadingGenerator(gen, step=125)
        for tion in gen:
            a = BeBot.togglePageTrad(tion).title()
            tmp.append(a.replace('(', '\\x28').replace(')', '\\x29'))
            #Remplacement des parenthèses à cause d'un problème de comparaison de chaine utf-8 ; ex : Timée (Platon)
            self.tradQualite.append(tion)
            self.ignor_list += u' %s ;;' % a

        #Pages de traductions d'articles de qualité classées par statut
        self.trads = [ [], [], [], [], [], [] ]
        #Traductions terminées sans label, en attente de label, ou labellisées
        self.term_et_label = [ [], [], [] ]