Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorMarco 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)
commitc63468f2f6c18ba802184dcff2ef55625665b93b (patch)
tree9ae7d70bcd55b331ae2bf9d55db00b59006fbec4 /scripts
parent2140cf097e8a664f005267b4877aa7fe9d3dcba2 (diff)
Add report command
Diffstat (limited to 'scripts')
-rw-r--r--scripts/config.py6
-rw-r--r--scripts/main.py1
-rw-r--r--scripts/report.py116
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)