Browse Source

Update methods to attributes; some other changes

tags/v0.1^2
Ben Kurtovic 12 years ago
parent
commit
ea1f416195
7 changed files with 40 additions and 32 deletions
  1. +2
    -0
      docs/toolset.rst
  2. +6
    -6
      earwigbot/commands/afc_report.py
  3. +3
    -3
      earwigbot/tasks/afc_copyvios.py
  4. +5
    -5
      earwigbot/tasks/afc_history.py
  5. +3
    -3
      earwigbot/tasks/afc_statistics.py
  6. +2
    -2
      earwigbot/wiki/category.py
  7. +19
    -13
      earwigbot/wiki/page.py

+ 2
- 0
docs/toolset.rst View File

@@ -117,6 +117,8 @@ Create :py:class:`earwigbot.wiki.Page <earwigbot.wiki.page.Page>` objects with
:py:meth:`user.get_talkpage() <earwigbot.wiki.user.User.get_talkpage>`. They :py:meth:`user.get_talkpage() <earwigbot.wiki.user.User.get_talkpage>`. They
provide the following attributes: provide the following attributes:


- :py:attr:`~earwigbot.wiki.page.Page.site`: the page's corresponding
:py:class:`~earwigbot.wiki.site.Site` object
- :py:attr:`~earwigbot.wiki.page.Page.title`: the page's title, or pagename - :py:attr:`~earwigbot.wiki.page.Page.title`: the page's title, or pagename
- :py:attr:`~earwigbot.wiki.page.Page.exists`: whether the page exists - :py:attr:`~earwigbot.wiki.page.Page.exists`: whether the page exists
- :py:attr:`~earwigbot.wiki.page.Page.pageid`: an integer ID representing the - :py:attr:`~earwigbot.wiki.page.Page.pageid`: an integer ID representing the


+ 6
- 6
earwigbot/commands/afc_report.py View File

@@ -70,16 +70,16 @@ class Command(BaseCommand):


def get_page(self, title): def get_page(self, title):
page = self.site.get_page(title, follow_redirects=False) page = self.site.get_page(title, follow_redirects=False)
if page.exists()[0]:
if page.exists[0]:
return page return page


def report(self, page): def report(self, page):
url = page.url().replace("en.wikipedia.org/wiki", "enwp.org")
short = self.statistics.get_short_title(page.title())
url = page.url.replace("en.wikipedia.org/wiki", "enwp.org")
short = self.statistics.get_short_title(page.title)
status = self.get_status(page) status = self.get_status(page)
user = self.site.get_user(page.creator()) user = self.site.get_user(page.creator())
user_name = user.name() user_name = user.name()
user_url = user.get_talkpage().url()
user_url = user.get_talkpage().url


msg1 = "AfC submission report for \x0302{0}\x0301 ({1}):" msg1 = "AfC submission report for \x0302{0}\x0301 ({1}):"
msg2 = "Status: \x0303{0}\x0301" msg2 = "Status: \x0303{0}\x0301"
@@ -92,9 +92,9 @@ class Command(BaseCommand):
self.say(self.data.chan, msg3.format(user_name, user_url)) self.say(self.data.chan, msg3.format(user_name, user_url))


def get_status(self, page): def get_status(self, page):
if page.is_redirect():
if page.is_redirect:
target = page.get_redirect_target() target = page.get_redirect_target()
if self.site.get_page(target).namespace() == wiki.NS_MAIN:
if self.site.get_page(target).namespace == wiki.NS_MAIN:
return "accepted" return "accepted"
return "redirect" return "redirect"




+ 3
- 3
earwigbot/tasks/afc_copyvios.py View File

@@ -70,13 +70,13 @@ class Task(BaseTask):


def process(self, page): def process(self, page):
"""Detect copyvios in 'page' and add a note if any are found.""" """Detect copyvios in 'page' and add a note if any are found."""
title = page.title()
title = page.title
if title in self.ignore_list: if title in self.ignore_list:
msg = "Skipping page in ignore list: [[{0}]]" msg = "Skipping page in ignore list: [[{0}]]"
self.logger.info(msg.format(title)) self.logger.info(msg.format(title))
return return


pageid = page.pageid()
pageid = page.pageid
if self.has_been_processed(pageid): if self.has_been_processed(pageid):
msg = "Skipping check on already processed page [[{0}]]" msg = "Skipping check on already processed page [[{0}]]"
self.logger.info(msg.format(title)) self.logger.info(msg.format(title))
@@ -143,7 +143,7 @@ class Task(BaseTask):
This will only be called if "cache_results" == True in the task's This will only be called if "cache_results" == True in the task's
config, which is False by default. config, which is False by default.
""" """
pageid = page.pageid()
pageid = page.pageid
hash = sha256(page.get()).hexdigest() hash = sha256(page.get()).hexdigest()
query1 = "SELECT 1 FROM cache WHERE cache_id = ?" query1 = "SELECT 1 FROM cache WHERE cache_id = ?"
query2 = "DELETE FROM cache WHERE cache_id = ?" query2 = "DELETE FROM cache WHERE cache_id = ?"


+ 5
- 5
earwigbot/tasks/afc_history.py View File

@@ -93,7 +93,7 @@ class Task(BaseTask):
generator = self.backwards_cat_iterator() generator = self.backwards_cat_iterator()
for d in xrange(num_days): for d in xrange(num_days):
category = generator.next() category = generator.next()
date = category.title().split("/")[-1]
date = category.title.split("/")[-1]
self.update_date(date, category) self.update_date(date, category)
sleep(10) sleep(10)
self.logger.info("Update complete") self.logger.info("Update complete")
@@ -104,7 +104,7 @@ class Task(BaseTask):
generator = self.backwards_cat_iterator() generator = self.backwards_cat_iterator()
for d in xrange(num_days): for d in xrange(num_days):
category = generator.next() category = generator.next()
date = category.title().split("/")[-1]
date = category.title.split("/")[-1]
data[date] = self.get_date_counts(date) data[date] = self.get_date_counts(date)


data = OrderedDict(reversed(data.items())) # Oldest to most recent data = OrderedDict(reversed(data.items())) # Oldest to most recent
@@ -123,7 +123,7 @@ class Task(BaseTask):
current -= timedelta(1) # Subtract one day from date current -= timedelta(1) # Subtract one day from date


def update_date(self, date, category): def update_date(self, date, category):
msg = "Updating {0} ([[{1}]])".format(date, category.title())
msg = "Updating {0} ([[{1}]])".format(date, category.title)
self.logger.debug(msg) self.logger.debug(msg)


q_select = "SELECT page_date, page_status FROM page WHERE page_id = ?" q_select = "SELECT page_date, page_status FROM page WHERE page_id = ?"
@@ -153,7 +153,7 @@ class Task(BaseTask):


def get_status(self, title, pageid): def get_status(self, title, pageid):
page = self.site.get_page(title) page = self.site.get_page(title)
ns = page.namespace()
ns = page.namespace


if ns == wiki.NS_FILE_TALK: # Ignore accepted FFU requests if ns == wiki.NS_FILE_TALK: # Ignore accepted FFU requests
return self.STATUS_NONE return self.STATUS_NONE
@@ -161,7 +161,7 @@ class Task(BaseTask):
if ns == wiki.NS_TALK: if ns == wiki.NS_TALK:
new_page = page.toggle_talk() new_page = page.toggle_talk()
sleep(2) sleep(2)
if new_page.is_redirect():
if new_page.is_redirect:
return self.STATUS_NONE # Ignore accepted AFC/R requests return self.STATUS_NONE # Ignore accepted AFC/R requests
return self.STATUS_ACCEPT return self.STATUS_ACCEPT




+ 3
- 3
earwigbot/tasks/afc_statistics.py View File

@@ -129,7 +129,7 @@ class Task(BaseTask):
"<!-- sig begin -->~~~ at ~~~~~<!-- sig end -->", "<!-- sig begin -->~~~ at ~~~~~<!-- sig end -->",
newtext) newtext)
page.edit(newtext, summary, minor=True, bot=True) page.edit(newtext, summary, minor=True, bot=True)
self.logger.info(u"Chart saved to [[{0}]]".format(page.title()))
self.logger.info(u"Chart saved to [[{0}]]".format(page.title))


def compile_charts(self): def compile_charts(self):
"""Compile and return all statistics information from our local db.""" """Compile and return all statistics information from our local db."""
@@ -332,7 +332,7 @@ class Task(BaseTask):
self.logger.error(msg) self.logger.error(msg)
return return


namespace = self.site.get_page(title).namespace()
namespace = self.site.get_page(title).namespace
status, chart = self.get_status_and_chart(content, namespace) status, chart = self.get_status_and_chart(content, namespace)
if chart == self.CHART_NONE: if chart == self.CHART_NONE:
msg = u"Could not find a status for [[{0}]]".format(title) msg = u"Could not find a status for [[{0}]]".format(title)
@@ -364,7 +364,7 @@ class Task(BaseTask):
self.logger.error(msg) self.logger.error(msg)
return return


namespace = self.site.get_page(title).namespace()
namespace = self.site.get_page(title).namespace
status, chart = self.get_status_and_chart(content, namespace) status, chart = self.get_status_and_chart(content, namespace)
if chart == self.CHART_NONE: if chart == self.CHART_NONE:
self.untrack_page(cursor, pageid) self.untrack_page(cursor, pageid)


+ 2
- 2
earwigbot/wiki/category.py View File

@@ -49,14 +49,14 @@ class Category(Page):


def __str__(self): def __str__(self):
"""Returns a nice string representation of the Category.""" """Returns a nice string representation of the Category."""
return '<Category "{0}" of {1}>'.format(self.title(), str(self._site))
return '<Category "{0}" of {1}>'.format(self.title, str(self._site))


def _get_members_via_sql(self, limit): def _get_members_via_sql(self, limit):
"""Return a list of tuples of (title, pageid) in the category.""" """Return a list of tuples of (title, pageid) in the category."""
query = """SELECT page_title, page_namespace, page_id FROM page query = """SELECT page_title, page_namespace, page_id FROM page
JOIN categorylinks ON page_id = cl_from JOIN categorylinks ON page_id = cl_from
WHERE cl_to = ?""" WHERE cl_to = ?"""
title = self.title().replace(" ", "_").split(":", 1)[1]
title = self.title.replace(" ", "_").split(":", 1)[1]


if limit: if limit:
query += " LIMIT ?" query += " LIMIT ?"


+ 19
- 13
earwigbot/wiki/page.py View File

@@ -41,6 +41,7 @@ class Page(CopyrightMixin):


*Attributes:* *Attributes:*


- :py:attr:`site`: the page's corresponding Site object
- :py:attr:`title`: the page's title, or pagename - :py:attr:`title`: the page's title, or pagename
- :py:attr:`exists`: whether the page exists - :py:attr:`exists`: whether the page exists
- :py:attr:`pageid`: an integer ID representing the page - :py:attr:`pageid`: an integer ID representing the page
@@ -128,9 +129,9 @@ class Page(CopyrightMixin):


def __str__(self): def __str__(self):
"""Returns a nice string representation of the Page.""" """Returns a nice string representation of the Page."""
return '<Page "{0}" of {1}>'.format(self.title(), str(self._site))
return '<Page "{0}" of {1}>'.format(self.title, str(self._site))


def _force_validity(self):
def _assert_validity(self):
"""Used to ensure that our page's title is valid. """Used to ensure that our page's title is valid.


If this method is called when our page is not valid (and after If this method is called when our page is not valid (and after
@@ -143,14 +144,14 @@ class Page(CopyrightMixin):
e = "Page '{0}' is invalid.".format(self._title) e = "Page '{0}' is invalid.".format(self._title)
raise exceptions.InvalidPageError(e) raise exceptions.InvalidPageError(e)


def _force_existence(self):
def _assert_existence(self):
"""Used to ensure that our page exists. """Used to ensure that our page exists.


If this method is called when our page doesn't exist (and after If this method is called when our page doesn't exist (and after
_load_attributes() has been called), PageNotFoundError will be raised. _load_attributes() has been called), PageNotFoundError will be raised.
It will also call _force_validity() beforehand.
It will also call _assert_validity() beforehand.
""" """
self._force_validity()
self._assert_validity()
if self._exists == 2: if self._exists == 2:
e = "Page '{0}' does not exist.".format(self._title) e = "Page '{0}' does not exist.".format(self._title)
raise exceptions.PageNotFoundError(e) raise exceptions.PageNotFoundError(e)
@@ -267,7 +268,7 @@ class Page(CopyrightMixin):
# self._load_attributes(). In that case, some of our attributes are # self._load_attributes(). In that case, some of our attributes are
# outdated, so force another self._load_attributes(): # outdated, so force another self._load_attributes():
self._load_attributes() self._load_attributes()
self._force_existence()
self._assert_existence()


def _edit(self, params=None, text=None, summary=None, minor=None, bot=None, def _edit(self, params=None, text=None, summary=None, minor=None, bot=None,
force=None, section=None, captcha_id=None, captcha_word=None, force=None, section=None, captcha_id=None, captcha_word=None,
@@ -290,7 +291,7 @@ class Page(CopyrightMixin):
raise exceptions.PermissionsError(e) raise exceptions.PermissionsError(e)


# Weed out invalid pages before we get too far: # Weed out invalid pages before we get too far:
self._force_validity()
self._assert_validity()


# Build our API query string: # Build our API query string:
if not params: if not params:
@@ -430,6 +431,11 @@ class Page(CopyrightMixin):
raise exceptions.PermissionsError(e) raise exceptions.PermissionsError(e)


@property @property
def site(self):
"""The Page's corresponding Site object."""
return self._site

@property
def title(self): def title(self):
"""The Page's title, or "pagename". """The Page's title, or "pagename".


@@ -474,7 +480,7 @@ class Page(CopyrightMixin):
""" """
if self._exists == 0: if self._exists == 0:
self._load() self._load()
self._force_existence() # Missing pages do not have IDs
self._assert_existence() # Missing pages do not have IDs
return self._pageid return self._pageid


@property @property
@@ -514,7 +520,7 @@ class Page(CopyrightMixin):
""" """
if self._exists == 0: if self._exists == 0:
self._load() self._load()
self._force_validity() # Invalid pages cannot be protected
self._assert_validity() # Invalid pages cannot be protected
return self._protection return self._protection


@property @property
@@ -608,7 +614,7 @@ class Page(CopyrightMixin):
"intoken": "edit", "rvprop": "content|timestamp"} "intoken": "edit", "rvprop": "content|timestamp"}
result = self._site._api_query(params) result = self._site._api_query(params)
self._load_attributes(result=result) self._load_attributes(result=result)
self._force_existence()
self._assert_existence()
self._load_content(result=result) self._load_content(result=result)


# Follow redirects if we're told to: # Follow redirects if we're told to:
@@ -623,7 +629,7 @@ class Page(CopyrightMixin):
# Make sure we're dealing with a real page here. This may be outdated # Make sure we're dealing with a real page here. This may be outdated
# if the page was deleted since we last called self._load_attributes(), # if the page was deleted since we last called self._load_attributes(),
# but self._load_content() can handle that: # but self._load_content() can handle that:
self._force_existence()
self._assert_existence()


if self._content is None: if self._content is None:
self._load_content() self._load_content()
@@ -662,10 +668,10 @@ class Page(CopyrightMixin):
""" """
if self._exists == 0: if self._exists == 0:
self._load() self._load()
self._force_existence()
self._assert_existence()
if not self._creator: if not self._creator:
self._load() self._load()
self._force_existence()
self._assert_existence()
return self._site.get_user(self._creator) return self._site.get_user(self._creator)


def edit(self, text, summary, minor=False, bot=True, force=False): def edit(self, text, summary, minor=False, bot=True, force=False):


Loading…
Cancel
Save