Exemple #1
0
 def ajouteralabdd(self, page):
     # Suppression d'un modèle chiant pour le calcul de date
     p = page.text.replace('{{1er}}', '1').replace('{{er}}', '')
     # Récupération des infos
     n = self.re_modele.search(p)
     if n:
         mod = BeBot.modeletodic(n.group(0))
         categorie = n.group(2).replace('_', ' ')
         # Remise au propre de la casse
         categorie = categorie[0].upper() + categorie[1:].lower()
         date = datetime.datetime(1970, 1, 1)
         if 'date' in mod:
             o = self.re_date.search(mod['date'])
             if o:
                 try:
                     jour = int(o.group(1))
                     mois = BeBot.moistoint(o.group(2))
                     annee = int(o.group(3))
                 except:
                     pywikibot.error("Problème de conversion de la date '%s' sur [[%s]]" % (o.group(0), page.title()))
                     return False
                 date = datetime.datetime(annee, mois, jour)
             else:
                 pywikibot.error("Impossible de reconnaitre le format de date pour %s" % page.title())
                 return False
         # Sauvegarde
         curseur = self.conn.cursor()
         req = 'INSERT INTO %s ' % self.nom_base \
             + '(titre, label, date) VALUES ("%s", "%s", "%s")' \
             % (page.title(), categorie, date)
         if self.debug:
             #pywikibot.output("Ajout de %s" % page.title())
             print('.',end="",flush=True)
             return
         try:
             curseur.execute(req)
         except sqlite3.Error as e:
             pywikibot.error("Erreur lors de l'INSERT :\n%s" % (e.args[0]))
         self.conn.commit()
         return True
     if page.namespace() == 0:
         pywikibot.error("Impossible de trouver le modèle AdQ/BA sur l'article %s" % page.title())
     return False
    def traduit_de(self, page):
        """ Vérifie et ajoute le {{Traduit de}} à la page de discussion
        """
        disc = pywikibot.Page(self.site, page.title().replace('/Traduction', ''))
        if disc.isRedirectPage():
            disc = disc.getRedirectTarget()
        m = self.re_traduitde.search(disc.text)
        if not m:
            n = self.re_suivi.search(page.text) # Récupération des infos de traduction
            if n:
                a = BeBot.modeletodic(n.group(0))
                if not a.has_key(1) or not a.has_key(2):
                    pywikibot.warning(";;; Impossible de trouver le nom ou la langue d'origine pour %s" % page.title())
                    return False
                langue = a[1]
                article = a[2].replace('_', ' ')
                if 'status' in a:
                    statut = a['status']
                else:
                    pywikibot.output(";;; Statut introuvable -> on passe")
                    pywikibot.output(a)
                    return False
                if statut == "1":
                    pywikibot.output(";;; Statut 'Demande' -> ne pas ajouter le {{Traduit de}}")
                    return True
                plus = ''
                if a.has_key('oldid') and a['oldid'] != '' and a['oldid'] != '830165' :
                    # On utilise le oldid pour retrouver la date
                    oldid = a['oldid']
                    if self.sites.has_key(langue):
                        sit = self.sites[langue]
                    else:
                        sit = pywikibot.Site(langue)
                        self.sites[langue] = sit
                    orig = pywikibot.Page(sit, article)
                    if orig.isRedirectPage():
                        orig = orig.getRedirectTarget()

                    date = ''
                    try:
                        for o in orig.fullVersionHistory():
                            revis = o[0]
                            if revis == oldid:
                                date = o[1]
                                break;
                    except: #Nopage
                        pywikibot.warning(";;; Impossible de lire l'historique pour %s:%s" % (langue, orig.title()))
                        return False
                    #pywikibot.output(date.__str__()[8:10])
                    date = date.__str__()
                    if date != '':
                        jour  = date[8:10].lstrip('0')
                        mois  = date[5:7].lstrip('0')
                        annee = date[0:4]
                        plus = "|%s/%s/%s|%s" % (jour, mois, annee, oldid)
                    else:
                        pywikibot.warning("Ne peut dater une ancienne révision de %s" % page.title())
                appel = '{{Traduit de|%s|%s%s}}\n' % (langue, article, plus)
                #BeBot.diff(disc.text, appel + disc.text)
                disc.text = appel + disc.text
                BeBot.save(disc, commentaire=self.resume+' : Ajout du bandeau de licence', debug=self.debug)
                self.stats['traduitde'] += 1
                return True
            else:
                pywikibot.warning('Impossible de trouver les infos de traduction pour %s' % page.title())
        return True