def get(self, ids, get_comments=False, get_attachments=False, **kw): """Return an issue object given the issue id""" params = {'alt': 'json'} for id in ids: params['id'] = id issue_content = self.request(self.issues_url, params=params) issue_json = json.loads(issue_content, encoding='utf-8') issue_dict = issue_json['feed']['entry'][0] issue = GooglecodeIssue() issue.id = issue_dict['issues$id']['$t'] issue.title = issue_dict['title']['$t'] issue.url = issue_dict['link'][1]['href'] issue.reporter = issue_dict['author'][0]['name']['$t'] issue.opened = parsetime(issue_dict['published']['$t']) issue.modified = parsetime(issue_dict['updated']['$t']) if 'issues$owner' in issue_dict: issue.owner = issue_dict['issues$owner']['issues$username']['$t'] else: issue.owner = 'None' if 'issues$status' in issue_dict: issue.status = issue_dict['issues$status']['$t'] else: issue.status = 'None' issue.state = issue_dict['issues$state']['$t'] issue.stars = issue_dict['issues$stars']['$t'] issue.cc = self._cc(issue_dict) issue.labels = self._labels(issue_dict) issue.comments = None if get_comments: # The initial report is comment #0 i = 0 creator = issue.reporter date = issue.opened content = lxml.html.fromstring(issue_dict['content']['$t'].strip()).text_content() initial = [GooglecodeComment(count=i, creator=creator, date=date, text=content)] comments = self.get_comments(id) issue.comments = chain(initial, comments) # Blockers don't get updated when issues are closed # so we parse the webpage instead #if 'issues$blockedOn' in issue_dict: # blocks = [] # for blocker in issue_dict['issues$blockedOn']: # blocks.append(blocker['issues$id']['$t']) # issue.blocks = blocks if get_attachments: (issue.attachments, issue.blocks, issue.depends) = self._parse_webpage(issue.id) yield issue
def _issues(self, issues): for i in issues: issue = GooglecodeIssue() issue.id = i['issues$id']['$t'] issue.title = i['title']['$t'] issue.url = i['link'][1]['href'] issue.reporter = i['author'][0]['name']['$t'] issue.opened = parsetime(i['published']['$t']) issue.modified = parsetime(i['updated']['$t']) if 'issues$owner' in i: issue.owner = i['issues$owner']['issues$username']['$t'] if 'issues$status' in i: issue.status = i['issues$status']['$t'] issue.state = i['issues$state']['$t'] issue.stars = i['issues$stars']['$t'] yield issue
def get_comments(self, id): url = self.comments_url.format(id) params = {'alt': 'json'} params['max-results'] = 1000 data = self.request(url, params=params) comments = json.loads(data)['feed'] if 'entry' in comments: for c in comments['entry']: id = int(c['id']['$t'].split('/')[-1]) creator = c['author'][0]['name']['$t'] date = parsetime(c['updated']['$t']) text = c['content']['$t'].strip() updates = self._parse_updates(c['issues$updates']) if updates is not None: changes = {'updates': updates} else: changes = None yield GooglecodeComment(count=id, creator=creator, date=date, text=text, changes=changes)