Browse Source

More accurate get_timestamp()

pull/15/head
Ben Kurtovic 10 years ago
parent
commit
ea62395b2f
1 changed files with 15 additions and 30 deletions
  1. +15
    -30
      tasks/afc_undated.py

+ 15
- 30
tasks/afc_undated.py View File

@@ -95,33 +95,24 @@ class AFCUndated(Task):
is_talk = page.namespace in self.namespaces["talk"]
if is_sub:
aliases = self.aliases["submission"]
timestamps = {}
timestamp = self.get_timestamp(page)
elif is_talk:
aliases = self.aliases["talk"]
timestamp, reviewer = self.get_talkdata(page)
if not timestamp:
return
else:
msg = u"[[{0}]] is undated, but in a namespace I don't know how to process"
self.logger.warn(msg.format(page.title))
return
if not timestamp:
return

code = mwparserfromhell.parse(page.get())
changes = 0
for template in code.filter_templates():
has_ts = template.has("ts", ignore_empty=True)
has_reviewer = template.has("reviewer", ignore_empty=True)
if template.name.matches(aliases) and not has_ts:
if is_sub:
status = self.get_status(template)
if status in timestamps:
timestamp = timestamps[status]
else:
timestamp = self.get_timestamp(page, status)
timestamps[status] = timestamp
if not timestamp:
continue
template.add("ts", timestamp)
has_reviewer = template.has("reviewer", ignore_empty=True)
if is_talk and not has_reviewer:
template.add("reviewer", reviewer)
changes += 1
@@ -134,25 +125,19 @@ class AFCUndated(Task):
msg = u"[[{0}]] is undated, but I can't figure out what to replace"
self.logger.warn(msg.format(page.title))

def get_status(self, template):
"""Get the status code that corresponds to a given template."""
valid = ["P", "R", "T", "D"]
if template.has(1):
status = template.get(1).value.strip().upper()
if status in valid:
return status
return "P"

def get_timestamp(self, page, chart):
def get_timestamp(self, page):
"""Get the timestamp associated with a particular submission."""
log = u"[[{0}]]: Getting timestamp for state {1}"
self.logger.debug(log.format(page.title, chart))
search = self.statistics.search_history
user, ts, revid = search(page.pageid, chart, chart, [])
if not ts:
log = u"Couldn't find timestamp in [[{0}]] with state {1}"
self.logger.warn(log.format(page.title, chart))
self.logger.debug(u"[[{0}]]: Getting timestamp".format(page.title))
result = self.site.api_query(
action="query", prop="revisions", rvprop="timestamp", rvlimit=1,
rvdir="newer", titles=page.title)
data = result["query"]["pages"].values()[0]
if "revisions" not in data:
log = u"Couldn't get timestamp for [[{0}]]"
self.logger.warn(log.format(page.title))
return None
raw = data["revisions"][0]["timestamp"]
ts = datetime.strptime(raw, "%Y-%m-%dT%H:%M:%SZ")
return ts.strftime("%Y%m%d%H%M%S")

def get_talkdata(self, page):


Loading…
Cancel
Save