Esempio n. 1
0
    def _make_issue(self, d, project):
        _id = self._build_issue_id(project.id, d['number'])
        issue = Issue(_id)
        issue.url = d['url']
        issue.project = project
        issue.title = d['title']
        issue.body = d['body']
        issue.creation = d['creation']
        issue.updated = d['updated']
        issue.author = project.find_user(d['author'], None)
        if not issue.author:
            # may duplicate users
            issue.author = User(d['author'], d['author'])
        issue.status = STATUSES[d['status']]

        if d['assignee']:
            issue.assignee = project.find_user(d['assignee'], None)
        else:
            issue.assignee = None

        if d['version']:
            issue.version = project.find_version(d['version'], None)
        else:
            issue.version = None

        issue.category = None

        issue.attachments = [
            self._make_attachment(dattach) for dattach in d['attachments']
        ]

        return issue
Esempio n. 2
0
 def _build_project(cls, project_dict):
     project = Project(project_dict['name'], project_dict['name'])
     project.members = [User(int(u[0]), u[1]) for u in project_dict['members']]
     project.versions = [Version(int(v[0]), v[1]) for v in project_dict['versions']]
     project.categories = [c[1] for c in project_dict['categories']]
     # TODO set the value of status
     project.statuses = [Status(int(s[0]), s[1], 0) for s in project_dict['statuses']]
     return project
Esempio n. 3
0
 def _make_comment(self, d, project):
     u = Update(d['id'])
     u.message = d['message']
     u.author = project.find_user(d['author'], None)
     if not u.author:
         # may duplicate users
         u.author = User(d['author'], d['author'])
     u.date = d['date']
     u.changes = []
     u.attachments = [
         self._make_attachment(dattach) for dattach in d['attachments']
     ]
     return u
Esempio n. 4
0
    def iter_issues(self, query):
        """
        Iter issues with optionnal patterns.

        @param  query [Query]
        @return [iter(Issue)] issues
        """
        params = self.browser.get_project(query.project)
        kwargs = {
            'subject': query.title,
            'author_id': self._attr_to_id(params['members'], query.author),
            'assigned_to_id': self._attr_to_id(params['members'],
                                               query.assignee),
            'fixed_version_id': self._attr_to_id(params['versions'],
                                                 query.version),
            'category_id': self._attr_to_id(params['categories'],
                                            query.category),
            'status_id': self._attr_to_id(params['statuses'], query.status),
        }
        r = self.browser.query_issues(query.project, **kwargs)
        project = self._build_project(r['project'])
        for issue in r['iter']:
            obj = Issue(issue['id'])
            obj.project = project
            obj.title = issue['subject']
            obj.creation = issue['created_on']
            obj.updated = issue['updated_on']
            obj.start = issue['start_date']
            obj.due = issue['due_date']

            if isinstance(issue['author'], tuple):
                obj.author = project.find_user(*issue['author'])
            else:
                obj.author = User(0, issue['author'])
            if isinstance(issue['assigned_to'], tuple):
                obj.assignee = project.find_user(*issue['assigned_to'])
            else:
                obj.assignee = issue['assigned_to']

            obj.tracker = issue['tracker']
            obj.category = issue['category']

            if issue['fixed_version'] is not None:
                obj.version = project.find_version(*issue['fixed_version'])
            else:
                obj.version = None
            obj.status = project.find_status(issue['status'])
            obj.priority = issue['priority']
            yield obj
Esempio n. 5
0
    def _make_update(self, d, project):
        u = Update(d['id'])
        u.author = project.find_user(d['author'], None)
        if not u.author:
            # may duplicate users
            u.author = User(d['author'], d['author'])
        u.date = d['date']

        c = Change()
        c.field = d['field']
        c.last = d['old']
        c.new = d['new']

        u.changes = [c]
        return u
Esempio n. 6
0
    def iter_issues(self, query):
        """
        Iter issues with optionnal patterns.

        @param  query [Query]
        @return [iter(Issue)] issues
        """
        # TODO link between text and IDs.
        kwargs = {
            'subject': query.title,
            'author_id': query.author,
            'assigned_to_id': query.assignee,
            'fixed_version_id': query.version,
            'category_id': query.category,
            'status_id': query.status,
        }
        r = self.browser.query_issues(query.project, **kwargs)
        project = self._build_project(r['project'])
        for issue in r['iter']:
            obj = Issue(issue['id'])
            obj.project = project
            obj.title = issue['subject']
            obj.creation = issue['created_on']
            obj.updated = issue['updated_on']

            if isinstance(issue['author'], tuple):
                obj.author = project.find_user(*issue['author'])
            else:
                obj.author = User(0, issue['author'])
            if isinstance(issue['assigned_to'], tuple):
                obj.assignee = project.find_user(*issue['assigned_to'])
            else:
                obj.assignee = issue['assigned_to']

            obj.category = issue['category']

            if issue['fixed_version'] is not None:
                obj.version = project.find_version(*issue['fixed_version'])
            else:
                obj.version = None
            obj.status = project.find_status(issue['status'])
            yield obj
Esempio n. 7
0
 def _make_user(self, data):
     u = User(data['id'], None)
     if 'name' in data:
         u.name = data['name']
     return u
Esempio n. 8
0
 def _iter_members(self, project_id):
     for d in self.browser.iter_members(project_id):
         yield User(d['id'], d['name'])
Esempio n. 9
0
 def _make_user(self, data):
     u = User(data['gid'], None)
     if 'name' in data:
         u.name = data['name']
     return u