diff options
author | Marco Pesenti Gritti <marco@localhost.localdomain> | 2008-06-28 02:02:35 (GMT) |
---|---|---|
committer | Marco Pesenti Gritti <marco@localhost.localdomain> | 2008-06-28 02:02:35 (GMT) |
commit | c63468f2f6c18ba802184dcff2ef55625665b93b (patch) | |
tree | 9ae7d70bcd55b331ae2bf9d55db00b59006fbec4 /scripts | |
parent | 2140cf097e8a664f005267b4877aa7fe9d3dcba2 (diff) |
Add report command
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/config.py | 6 | ||||
-rw-r--r-- | scripts/main.py | 1 | ||||
-rw-r--r-- | scripts/report.py | 116 |
3 files changed, 123 insertions, 0 deletions
diff --git a/scripts/config.py b/scripts/config.py index 6fa1f86..01b03b8 100644 --- a/scripts/config.py +++ b/scripts/config.py @@ -15,6 +15,12 @@ class Config(jhbuild.config.Config): self._setup() + def get_user_path(self): + user_path = os.path.expanduser('~/.sugar-jhbuild') + if not os.path.exists(user_path): + os.mkdir(user_path) + return user_path + def _ensure_rc_file(self, rc_file): if not os.path.exists(rc_file): f = open(rc_file, 'w') diff --git a/scripts/main.py b/scripts/main.py index e93f9df..e1ff483 100644 --- a/scripts/main.py +++ b/scripts/main.py @@ -25,6 +25,7 @@ import traceback import bundlemodule import depscheck import check +import report from config import Config diff --git a/scripts/report.py b/scripts/report.py new file mode 100644 index 0000000..f18aef7 --- /dev/null +++ b/scripts/report.py @@ -0,0 +1,116 @@ +import os +import sys +import urllib +import csv +import json + +from jhbuild.commands import Command, register_command + +def get_ticket_uri(number): + return 'http://dev.laptop.org/ticket/' + number + +class TextWriter(object): + def __init__(self, out): + self.out = out + + def write_headline(self, headline): + self.out.write(headline + '\n') + self.out.write('-' * len(headline) + '\n\n') + + def write_tickets(self, tickets): + for number, summary in tickets: + self.out.write(summary + '\n') + self.out.write(get_ticket_uri(number) + '\n\n') + +class ReviewsReport(object): + def __init__(self, config): + self._requested = {} + self._approved = {} + self._rejected = {} + self._state_path = os.path.join(config.get_user_path(), 'reviews') + + def generate(self): + f = urllib.urlopen('http://dev.laptop.org/query?' \ + 'format=csv&' \ + 'component=sugar&' \ + 'component=datastore&' \ + 'component=presence-service&' \ + 'component=journal-activity&' \ + 'col=id&col=summary&col=keywords&' \ + 'keywords=%7Er%3F') + + reader = csv.reader(f) + reader.next() + + for row in reader: + number = row[0] + keyword = row[2] + ticket = row[0:2] + + if 'r?' in keyword: + self._requested[number] = ticket + if 'r+' in keyword: + self._approved[number] = ticket + if 'r-' in keyword: + self._rejected[number] = ticket + + f.close() + + def write(self, writer): + old_requested, old_approved, old_rejected = self._load() + + requested = self._diff_tickets(old_requested, self._requested) + approved = self._diff_tickets(old_approved, self._approved) + rejected = self._diff_tickets(old_rejected, self._rejected) + + if requested: + writer.write_headline('New requests') + writer.write_tickets(requested) + + if approved: + writer.write_headline('Approved requests') + writer.write_tickets(approved) + + if rejected: + writer.write_headline('Rejected requests') + writer.write_tickets(rejected) + + def save(self): + s = json.write([self._requested, self._approved, self._rejected]) + + f = open(os.path.join(self._state_path), 'w') + f.write(s) + f.close() + + def _load(self): + path = os.path.join(self._state_path) + if os.path.exists(path): + f = open(path, 'r') + result = json.read(f.read()) + f.close() + + return result + else: + return ({}, {}, {}) + + def _diff_tickets(self, old, new): + return [ t for n, t in new.items() if n not in old ] + +class cmd_report(Command): + + name = 'report' + usage_args = '' + + def run(self, config, options, args): + report = None + + if args and args[0] == 'reviews': + report = ReviewsReport(config) + report.generate() + + if report: + report.write(TextWriter(sys.stdout)) + + report.save() + +register_command(cmd_report) |