English Wikipedia @ Freddythechick:Database reports/Dubious stub categories/Configuration

dubiousstubcats.py

<syntaxhighlight lang="python">

  1. ! /usr/bin/env python
  2. Public domain; MZMcBride; 2012

from __future__ import generators import datetime import MySQLdb import wikitools import settings

report_title = settings.rootpage + 'Dubious stub categories'

report_template = u\ Dubious stub categories; data as of %s.

No. Category

%s

wiki = wikitools.Wiki(settings.apiurl) wiki.login(settings.username, settings.password)

target_cat = 'Stub_categories' master_dict = {}

def get_subcats(cursor, cat):

   global master_dict
   results = []
   cursor.execute(
   /* dubiousstubcats.py */
   SELECT
     page_title
   FROM page
   JOIN categorylinks
   ON cl_from = page_id
   WHERE cl_to = %s
   AND page_namespace = 14;
    , cat)
   rows = cursor.fetchall()
   for row in rows:
       results.append(row[0])
   try:
       master_dict[cat] = results
   except KeyError:
       return False
   return results

def walk_tree(cursor, target_cat):

   subcats = get_subcats(cursor, target_cat)
   for subcat in subcats:
       if subcat not in master_dict.keys():
           for subsubcat in walk_tree(cursor, subcat):
               yield subsubcat, subcats
       else:
           yield subcat, subcats

conn = MySQLdb.connect(host=settings.host,

                      db=settings.dbname,
                      read_default_file='~/.my.cnf')

cursor = conn.cursor()

for hello in walk_tree(cursor, target_cat):

   # Surely there's a better way to do this
   here = 'silliness'

all_cats_from_target_cat = set() for k in master_dict.keys():

   all_cats_from_target_cat.add(k)

i = 1 output = [] for member in all_cats_from_target_cat:

   if not member.endswith('_stubs'):
       if not member.endswith('_stub_templates'):
           cat_title = u'%s' % (unicode(member, 'utf-8'),
                                                 unicode(member, 'utf-8'))
           table_row = u|-

| %d | %s % (i, cat_title)

           output.append(table_row)
           i += 1

cursor.execute(

              SELECT
                UNIX_TIMESTAMP() - UNIX_TIMESTAMP(rc_timestamp)
              FROM recentchanges
              ORDER BY rc_timestamp DESC
              LIMIT 1;
              )

rep_lag = cursor.fetchone()[0] time_diff = datetime.datetime.utcnow() - datetime.timedelta(seconds=rep_lag) current_of = time_diff.strftime('%H:%M, %d %B %Y (UTC)')

report = wikitools.Page(wiki, report_title) report_text = report_template % (current_of, '\n'.join(output)) report_text = report_text.encode('utf-8') report.edit(report_text, summary=settings.editsumm, bot=1)

cursor.close() conn.close() </syntaxhighlight>

crontab

<syntaxhighlight lang="text"> 0 10 * * 5 PYTHONPATH=$HOME/scripts python $HOME/scripts/database-reports/dubiousstubcats.py > /dev/null </syntaxhighlight>