Przeglądaj źródła

More unicode fixes and refactoring.

tags/v0.1^2
Ben Kurtovic 12 lat temu
rodzic
commit
7905facfc1
5 zmienionych plików z 33 dodań i 28 usunięć
  1. +3
    -2
      earwigbot/commands/langcode.py
  2. +20
    -0
      earwigbot/wiki/__init__.py
  3. +3
    -2
      earwigbot/wiki/page.py
  4. +5
    -22
      earwigbot/wiki/site.py
  5. +2
    -2
      earwigbot/wiki/user.py

+ 3
- 2
earwigbot/commands/langcode.py Wyświetl plik

@@ -44,8 +44,9 @@ class Langcode(Command):
for site in matrix.itervalues(): for site in matrix.itervalues():
if site["code"] == code: if site["code"] == code:
name = site["name"].encode("utf8") name = site["name"].encode("utf8")
if name != site["localname"]:
name += " ({0})".format(site["localname"].encode("utf8"))
localname = site["localname"].encode("utf8")
if name != localname:
name += " ({0})".format(localname)
sites = ", ".join([s["url"] for s in site["site"]]) sites = ", ".join([s["url"] for s in site["site"]])
msg = "\x0302{0}\x0301 is {1} ({2})".format(code, name, sites) msg = "\x0302{0}\x0301 is {1} ({2})".format(code, name, sites)
self.reply(data, msg) self.reply(data, msg)


+ 20
- 0
earwigbot/wiki/__init__.py Wyświetl plik

@@ -43,6 +43,26 @@ of your :py:class:`~earwigbot.wiki.site.Site` (and thus,
:py:class:`~earwigbot.wiki.user.User`) needs. :py:class:`~earwigbot.wiki.user.User`) needs.
""" """


from urllib import quote_plus

# Some helper functions:

def unicodeify(value, encoding="utf8"):
"""Return input as unicode if it's not unicode to begin with."""
if isinstance(value, unicode):
return value
return unicode(value, encoding)

def urlencode_utf8(params):
"""Implement urllib.urlencode() with support for unicode input."""
enc = lambda s: s.encode("utf8") if isinstance(s, unicode) else str(s)
args = []
for key, val in params.iteritems():
key = quote_plus(enc(key))
val = quote_plus(enc(val))
args.append(key + "=" + val)
return "&".join(args)

from earwigbot.wiki.category import * from earwigbot.wiki.category import *
from earwigbot.wiki.constants import * from earwigbot.wiki.constants import *
from earwigbot.wiki.page import * from earwigbot.wiki.page import *


+ 3
- 2
earwigbot/wiki/page.py Wyświetl plik

@@ -31,6 +31,7 @@ except ImportError:
mwparserfromhell = None mwparserfromhell = None


from earwigbot import exceptions from earwigbot import exceptions
from earwigbot.wiki import unicodeify
from earwigbot.wiki.copyright import CopyrightMixIn from earwigbot.wiki.copyright import CopyrightMixIn


__all__ = ["Page"] __all__ = ["Page"]
@@ -149,7 +150,7 @@ class Page(CopyrightMixIn):
contains "[") it will always be invalid, and cannot be edited. contains "[") it will always be invalid, and cannot be edited.
""" """
if self._exists == self.PAGE_INVALID: if self._exists == self.PAGE_INVALID:
e = u"Page '{0}' is invalid.".format(self._title)
e = u"Page '{0}' is invalid.".format(unicodeify(self._title))
raise exceptions.InvalidPageError(e) raise exceptions.InvalidPageError(e)


def _assert_existence(self): def _assert_existence(self):
@@ -161,7 +162,7 @@ class Page(CopyrightMixIn):
""" """
self._assert_validity() self._assert_validity()
if self._exists == self.PAGE_MISSING: if self._exists == self.PAGE_MISSING:
e = u"Page '{0}' does not exist.".format(self._title)
e = u"Page '{0}' does not exist.".format(unicodeify(self._title))
raise exceptions.PageNotFoundError(e) raise exceptions.PageNotFoundError(e)


def _load(self): def _load(self):


+ 5
- 22
earwigbot/wiki/site.py Wyświetl plik

@@ -29,7 +29,6 @@ from re import escape as re_escape, match as re_match
from StringIO import StringIO from StringIO import StringIO
from threading import Lock from threading import Lock
from time import sleep, time from time import sleep, time
from urllib import quote_plus
from urllib2 import build_opener, HTTPCookieProcessor, URLError from urllib2 import build_opener, HTTPCookieProcessor, URLError
from urlparse import urlparse from urlparse import urlparse


@@ -39,7 +38,7 @@ except ImportError:
oursql = None oursql = None


from earwigbot import exceptions from earwigbot import exceptions
from earwigbot.wiki import constants
from earwigbot.wiki import constants, unicodeify, urlencode_utf8
from earwigbot.wiki.category import Category from earwigbot.wiki.category import Category
from earwigbot.wiki.page import Page from earwigbot.wiki.page import Page
from earwigbot.wiki.user import User from earwigbot.wiki.user import User
@@ -185,22 +184,6 @@ class Site(object):
res = "<Site {0} ({1}:{2}) at {3}>" res = "<Site {0} ({1}:{2}) at {3}>"
return res.format(self.name, self.project, self.lang, self.domain) return res.format(self.name, self.project, self.lang, self.domain)


def _unicodeify(self, value, encoding="utf8"):
"""Return input as unicode if it's not unicode to begin with."""
if isinstance(value, unicode):
return value
return unicode(value, encoding)

def _urlencode_utf8(self, params):
"""Implement urllib.urlencode() with support for unicode input."""
enc = lambda s: s.encode("utf8") if isinstance(s, unicode) else str(s)
args = []
for key, val in params.iteritems():
key = quote_plus(enc(key))
val = quote_plus(enc(val))
args.append(key + "=" + val)
return "&".join(args)

def _api_query(self, params, tries=0, wait=5): def _api_query(self, params, tries=0, wait=5):
"""Do an API query with *params* as a dict of parameters. """Do an API query with *params* as a dict of parameters.


@@ -251,7 +234,7 @@ class Site(object):
if self._maxlag: # If requested, don't overload the servers if self._maxlag: # If requested, don't overload the servers
params["maxlag"] = self._maxlag params["maxlag"] = self._maxlag


data = self._urlencode_utf8(params)
data = urlencode_utf8(params)
return url, data return url, data


def _handle_api_query_result(self, result, params, tries, wait): def _handle_api_query_result(self, result, params, tries, wait):
@@ -707,7 +690,7 @@ class Site(object):
redirect-following: :py:class:`~earwigbot.wiki.page.Page`'s methods redirect-following: :py:class:`~earwigbot.wiki.page.Page`'s methods
provide that. provide that.
""" """
title = self._unicodeify(title)
title = unicodeify(title)
prefixes = self.namespace_id_to_name(constants.NS_CATEGORY, all=True) prefixes = self.namespace_id_to_name(constants.NS_CATEGORY, all=True)
prefix = title.split(":", 1)[0] prefix = title.split(":", 1)[0]
if prefix != title: # Avoid a page that is simply "Category" if prefix != title: # Avoid a page that is simply "Category"
@@ -722,7 +705,7 @@ class Site(object):
really just shorthand for :py:meth:`get_page("Category:" + catname) really just shorthand for :py:meth:`get_page("Category:" + catname)
<get_page>`. <get_page>`.
""" """
catname = self._unicodeify(catname)
catname = unicodeify(catname)
name = name if isinstance(name, unicode) else name.decode("utf8") name = name if isinstance(name, unicode) else name.decode("utf8")
prefix = self.namespace_id_to_name(constants.NS_CATEGORY) prefix = self.namespace_id_to_name(constants.NS_CATEGORY)
pagename = u':'.join((prefix, catname)) pagename = u':'.join((prefix, catname))
@@ -735,7 +718,7 @@ class Site(object):
:py:class:`~earwigbot.wiki.user.User` object representing the currently :py:class:`~earwigbot.wiki.user.User` object representing the currently
logged-in (or anonymous!) user is returned. logged-in (or anonymous!) user is returned.
""" """
username = self._unicodeify(username)
username = unicodeify(username)
if not username: if not username:
username = self._get_username() username = self._get_username()
return User(self, username) return User(self, username)

+ 2
- 2
earwigbot/wiki/user.py Wyświetl plik

@@ -23,7 +23,7 @@
from time import gmtime, strptime from time import gmtime, strptime


from earwigbot.exceptions import UserNotFoundError from earwigbot.exceptions import UserNotFoundError
from earwigbot.wiki import constants
from earwigbot.wiki import constants, unicodeify
from earwigbot.wiki.page import Page from earwigbot.wiki.page import Page


__all__ = ["User"] __all__ = ["User"]
@@ -96,7 +96,7 @@ class User(object):
if not hasattr(self, attr): if not hasattr(self, attr):
self._load_attributes() self._load_attributes()
if not self._exists: if not self._exists:
e = u"User '{0}' does not exist.".format(self._name)
e = u"User '{0}' does not exist.".format(unicodeify(self._name))
raise UserNotFoundError(e) raise UserNotFoundError(e)
return getattr(self, attr) return getattr(self, attr)




Ładowanie…
Anuluj
Zapisz