Esempio n. 1
0
    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
Esempio n. 2
0
 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
Esempio n. 3
0
    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)