| Index: my_activity.py
|
| diff --git a/my_activity.py b/my_activity.py
|
| index 3bd13d7cae20b501a259ab9e24ac857c350317df..7333984bef4cfc1f4fb46ec856ae1b187ad43ea8 100755
|
| --- a/my_activity.py
|
| +++ b/my_activity.py
|
| @@ -470,8 +470,8 @@ class MyActivity(object):
|
| ret['modified'] = datetime_from_google_code(issue['updated']['$t'])
|
|
|
| ret['owner'] = ''
|
| - if 'issues:owner' in issue:
|
| - ret['owner'] = issue['issues:owner'][0]['issues:username'][0]['$t']
|
| + if 'issues$owner' in issue:
|
| + ret['owner'] = issue['issues$owner']['issues$username']['$t']
|
| ret['author'] = issue['author'][0]['name']['$t']
|
|
|
| if 'shorturl' in project:
|
| @@ -708,19 +708,49 @@ class MyActivity(object):
|
| print "No %s in committers.py, skipping WebKit checks." % email
|
| self.webkit_repo = None
|
|
|
| - @staticmethod
|
| - def print_change(change):
|
| - print '%s %s' % (
|
| - change['review_url'],
|
| - change['header'],
|
| - )
|
| + def print_change(self, change):
|
| + self.print_generic(self.options.output_format,
|
| + self.options.output_format_changes,
|
| + change['header'],
|
| + change['review_url'],
|
| + change['author'])
|
| +
|
| + def print_issue(self, issue):
|
| + optional_values = {
|
| + 'owner': issue['owner'],
|
| + }
|
| + self.print_generic(self.options.output_format,
|
| + self.options.output_format_issues,
|
| + issue['header'],
|
| + issue['url'],
|
| + issue['author'],
|
| + optional_values)
|
| +
|
| + def print_review(self, review):
|
| + self.print_generic(self.options.output_format,
|
| + self.options.output_format_reviews,
|
| + review['header'],
|
| + review['review_url'],
|
| + review['author'])
|
|
|
| @staticmethod
|
| - def print_issue(issue):
|
| - print '%s %s' % (
|
| - issue['url'],
|
| - issue['header'],
|
| - )
|
| + def print_generic(default_fmt, specific_fmt,
|
| + title, url, author,
|
| + optional_values=None):
|
| + output_format = specific_fmt if specific_fmt is not None else default_fmt
|
| + output_format = unicode(output_format)
|
| + required_values = {
|
| + 'title': title,
|
| + 'url': url,
|
| + 'author': author,
|
| + }
|
| + # Merge required and optional values.
|
| + if optional_values is not None:
|
| + values = dict(required_values.items() + optional_values.items())
|
| + else:
|
| + values = required_values
|
| + print output_format.format(**values)
|
| +
|
|
|
| def filter_issue(self, issue, should_filter_by_user=True):
|
| def maybe_filter_username(email):
|
| @@ -791,7 +821,7 @@ class MyActivity(object):
|
| if self.reviews:
|
| print '\nReviews:'
|
| for review in self.reviews:
|
| - self.print_change(review)
|
| + self.print_review(review)
|
|
|
| def get_issues(self):
|
| for project in google_code_projects:
|
| @@ -800,6 +830,12 @@ class MyActivity(object):
|
| for instance in bugzilla_instances:
|
| self.issues += self.bugzilla_issues(instance, self.user)
|
|
|
| + def print_issues(self):
|
| + if self.issues:
|
| + print '\nIssues:'
|
| + for issue in self.issues:
|
| + self.print_issue(issue)
|
| +
|
| def process_activities(self):
|
| # If a webkit bug was a review, don't list it as an issue.
|
| ids = {}
|
| @@ -814,12 +850,6 @@ class MyActivity(object):
|
|
|
| self.issues = filter(lambda issue: not duplicate_issue(issue), self.issues)
|
|
|
| - def print_issues(self):
|
| - if self.issues:
|
| - print '\nIssues:'
|
| - for c in self.issues:
|
| - self.print_issue(c)
|
| -
|
| def print_activity(self):
|
| self.print_changes()
|
| self.print_reviews()
|
| @@ -862,23 +892,52 @@ def main():
|
| action='store_true',
|
| help='Ask to authenticate for instances with no auth cookie')
|
|
|
| - group = optparse.OptionGroup(parser, 'Activity Types',
|
| + activity_types_group = optparse.OptionGroup(parser, 'Activity Types',
|
| 'By default, all activity will be looked up and '
|
| 'printed. If any of these are specified, only '
|
| 'those specified will be searched.')
|
| - group.add_option(
|
| + activity_types_group.add_option(
|
| '-c', '--changes',
|
| action='store_true',
|
| help='Show changes.')
|
| - group.add_option(
|
| + activity_types_group.add_option(
|
| '-i', '--issues',
|
| action='store_true',
|
| help='Show issues.')
|
| - group.add_option(
|
| + activity_types_group.add_option(
|
| '-r', '--reviews',
|
| action='store_true',
|
| help='Show reviews.')
|
| - parser.add_option_group(group)
|
| + parser.add_option_group(activity_types_group)
|
| +
|
| + output_format_group = optparse.OptionGroup(parser, 'Output Format',
|
| + 'By default, all activity will be printed in the '
|
| + 'following format: {url} {title}. This can be '
|
| + 'changed for either all activity types or '
|
| + 'individually for each activity type. The format '
|
| + 'is defined as documented for '
|
| + 'string.format(...). The variables available for '
|
| + 'all activity types are url, title and author. '
|
| + 'Format options for specific activity types will '
|
| + 'override the generic format.')
|
| + output_format_group.add_option(
|
| + '-f', '--output-format', metavar='<format>',
|
| + default=u'{url} {title}',
|
| + help='Specifies the format to use when printing all your activity.')
|
| + output_format_group.add_option(
|
| + '--output-format-changes', metavar='<format>',
|
| + default=None,
|
| + help='Specifies the format to use when printing changes.')
|
| + output_format_group.add_option(
|
| + '--output-format-issues', metavar='<format>',
|
| + default=None,
|
| + help='Specifies the format to use when printing issues. Has support '
|
| + 'for the additional variable owner.')
|
| + output_format_group.add_option(
|
| + '--output-format-reviews', metavar='<format>',
|
| + default=None,
|
| + help='Specifies the format to use when printing reviews.')
|
| + parser.add_option_group(output_format_group)
|
|
|
| # Remove description formatting
|
| parser.format_description = (
|
|
|