Преглед изворни кода

Cleanup and better docstrings for SQL stuff.

tags/v0.1^2
Ben Kurtovic пре 13 година
родитељ
комит
3bfa58aa50
1 измењених фајлова са 46 додато и 23 уклоњено
  1. +46
    -23
      bot/wiki/site.py

+ 46
- 23
bot/wiki/site.py Прегледај датотеку

@@ -11,9 +11,9 @@ from urllib2 import build_opener, HTTPCookieProcessor, URLError
from urlparse import urlparse

try:
from oursql import connect
import oursql
except ImportError:
connect = None
oursql = None

from wiki.category import Category
from wiki.constants import *
@@ -37,6 +37,7 @@ class Site(object):
lang -- returns our language code, like "en"
domain -- returns our web domain, like "en.wikipedia.org"
api_query -- does an API query with the given kwargs as params
sql_query -- does an SQL query and yields its results
namespace_id_to_name -- given a namespace ID, returns associated name(s)
namespace_name_to_id -- given a namespace name, returns associated id
get_page -- returns a Page object for the given title
@@ -426,10 +427,17 @@ class Site(object):

def _sql_connect(self, **kwargs):
"""Attempt to establish a connection with this site's SQL database.
Will raise SQLError() if the module "oursql" is not available.

oursql.connect() will be called with self._sql_data as its kwargs,
which is usually config.wiki["sites"][self.name()]["sql"]. Any kwargs
given to this function will be passed to connect() and will have
precedence over the config file.

Will raise SQLError() if the module "oursql" is not available. oursql
may raise its own exceptions (e.g. oursql.InterfaceError) if it cannot
establish a connection.
"""
if not connect:
if not oursql:
e = "Module 'oursql' is required for SQL queries."
raise SQLError(e)

@@ -440,7 +448,23 @@ class Site(object):
if "read_default_file" not in args and "user" not in args and "passwd" not in args:
args["read_default_file"] = "~/.my.cnf"

self._sql_conn = connect(**args)
self._sql_conn = oursql.connect(**args)

def name(self):
"""Returns the Site's name (or "wikiid" in the API), like "enwiki"."""
return self._name

def project(self):
"""Returns the Site's project name in lowercase, like "wikipedia"."""
return self._project

def lang(self):
"""Returns the Site's language code, like "en" or "es"."""
return self._lang

def domain(self):
"""Returns the Site's web domain, like "en.wikipedia.org"."""
return urlparse(self._base_url).netloc

def api_query(self, **kwargs):
"""Do an API query with `kwargs` as the parameters.
@@ -460,7 +484,22 @@ class Site(object):
('EarwigBot', '20090428220032')
('The Earwig', '20080703215134')

May raise SQLError() or one of oursql's exceptions
<http://packages.python.org/oursql> has helpful documentation on the
SQL module used by EarwigBot.

If `plain_query` is True, we will force an unparameterized query.
Specifying both params and plain_query will cause an error.

`cursor_class` may oursql.Cursor or oursql.DictCursor. If it is not
given, the connection default will be used, which is a regular Cursor
unless _sql_connect() is passed a `default_cursor` kwarg.

If `show_table` is True, the name of the table will be prepended to the
name of the column. This will mainly affect a DictCursor.

See _sql_connect() for information on how a connection is acquired.

This may raise SQLError() or one of oursql's exceptions
(oursql.ProgrammingError, oursql.InterfaceError, ...) if there were
problems with the query.
"""
@@ -472,22 +511,6 @@ class Site(object):
for result in cur:
yield result

def name(self):
"""Returns the Site's name (or "wikiid" in the API), like "enwiki"."""
return self._name

def project(self):
"""Returns the Site's project name in lowercase, like "wikipedia"."""
return self._project

def lang(self):
"""Returns the Site's language code, like "en" or "es"."""
return self._lang

def domain(self):
"""Returns the Site's web domain, like "en.wikipedia.org"."""
return urlparse(self._base_url).netloc

def namespace_id_to_name(self, ns_id, all=False):
"""Given a namespace ID, returns associated namespace names.



Loading…
Откажи
Сачувај