#!/usr/bin/env python # -*- coding: utf-8 -*- # # missingnotice.py # # Copyright 2018 Jonathan Golder # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, # MA 02110-1301, USA. # # from sqlalchemy import create_engine from sqlalchemy.engine.url import URL import pywikibot import jogobot class MissingNoticeBot(): """ """ # MySQL-query to get articles with notice cat_article_query = """ SELECT `page_title` FROM `categorylinks` JOIN `category` ON `cl_to` = `cat_title` AND `cat_title` LIKE "{cat}\_%%" JOIN `page` ON `cl_from` = `page_id` """.format(cat=jogobot.config["red.missingnotice"]["article_category"]) def __init__( self, genFactory, **kwargs ): pass def run( self ): print(type(self).get_categorized_articles() ) def treat_articles(self, articles): """ Iterates over given articles and checks weather them are included in self.categorized_articles (contain the notice) @param articles Articles to check @type articles iterable of pywikibot.page() objects @returns Possibly empty list of wikitext links ("[[article]]") @rtype list """ links = list() for article in articles: if article.title(underscore=True, with_section=False ) not in \ self.categorized_articles: links.append( article.title(as_link=True, textlink=True) ) return links @classmethod def get_categorized_articles( cls ): """ Queries all articles containing the notice based on category set by notice template. Category can be configured in jogobot.config["red.missingnotice"]["article_category"] @returns List of all articles containing notice @rtype list """ # construct connection url for sqlalchemy url = URL( "mysql+pymysql", username=pywikibot.config.db_username, password=pywikibot.config.db_password, host=jogobot.config["red.missingnotice"]["wikidb_host"], port=jogobot.config["red.missingnotice"]["wikidb_port"], database=jogobot.config["red.missingnotice"]["wikidb_name"], query={'charset': 'utf8'} ) # create sqlalchemy engine engine = create_engine(url, echo=True) # fire the query to get articles with notice result = engine.execute(cls.cat_article_query) # return list with articles with notice return [ row['page_title'].decode("utf-8") for row in result ]