Пример #1
0
    def doBulk(self):
        qidxes = self.ui.bugList.selectionModel().selectedIndexes()
        cols = set(qidx.column() for qidx in qidxes)
        if len(cols) != 1:
            return

        col, = cols
        colname = self.mdl.headerData(col, Qt.Horizontal, Qt.DisplayRole)
        if colname not in ('status', 'assignee'):
            return

        objs = [qidx.data(ResultModel.RoleObject) for qidx in qidxes]
        project = objs[0].project
        if colname == 'status':
            vals = [status.name for status in project.statuses or []]
            val, ok = QInputDialog.getItem(self, self.tr('Bulk edit'), self.tr('Select new status for selected items'), vals, 0, False)
        elif colname == 'assignee':
            vals = [user.name for user in project.members or []]
            val, ok = QInputDialog.getItem(self, self.tr('Bulk edit'), self.tr('Select new assignee for selected items'), vals, 0, False)
        if not ok:
            return

        for obj in objs:
            change = Change()
            change.field = colname
            change.new = val

            update = Update()
            update.changes = [change]

            self.weboob.do('update_issue', obj, update, backends=(obj.backend,))
Пример #2
0
 def _make_update(self, data):
     u = Update(str(data['id']))
     if 'created_at' in data:
         u.date = parse_date(data['created_at'])
     u.message = '%s: %s' % (data['type'], data['text'])
     if 'created_by' in data:
         u.author = self._make_user(data['created_by'])
     return u
Пример #3
0
 def _make_update(self, data):
     u = Update(str(data['id']))
     if 'created_at' in data:
         u.date = parse_date(data['created_at'])
     u.message = '%s: %s' % (data['type'], data['text'])
     if 'created_by' in data:
         u.author = self._make_user(data['created_by'])
     return u
Пример #4
0
    def test_post_comment(self):
        issue = self.backend.get_issue('weboobie/testing/26')
        assert issue

        ts = str(int(time()))
        update = Update(0)
        update.message = "Yes! It's now %s" % ts
        self.backend.update_issue(issue, update)

        new = self.backend.get_issue('weboobie/testing/26')
        assert any(ts in upd.message for upd in new.history)
Пример #5
0
    def test_post_comment(self):
        issue = self.backend.get_issue('weboobie/testing/26')
        assert issue

        ts = str(int(time()))
        update = Update(0)
        update.message = "Yes! It's now %s" % ts
        self.backend.update_issue(issue, update)

        new = self.backend.get_issue('weboobie/testing/26')
        assert any(ts in upd.message for upd in new.history)
Пример #6
0
    def do_comment(self, line):
        """
        comment ISSUE [TEXT]

        Comment an issue. If no text is given, enter it in standard input.
        """
        id, text = self.parse_command_args(line, 2, 1)
        if text is None:
            text = self.acquire_input()

        id, backend_name = self.parse_id(id, unique_backend=True)
        update = Update(0)
        update.message = text

        self.do('update_issue', id, update, backends=backend_name).wait()
Пример #7
0
    def do_comment(self, line):
        """
        comment ISSUE [TEXT]

        Comment an issue. If no text is given, enter it in standard input.
        """
        id, text = self.parse_command_args(line, 2, 1)
        if text is None:
            text = self.acquire_input()

        id, backend_name = self.parse_id(id, unique_backend=True)
        update = Update(0)
        update.message = text

        self.do('update_issue', id, update, backends=backend_name).wait()
Пример #8
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
Пример #9
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
Пример #10
0
    def doBulk(self):
        qidxes = self.ui.bugList.selectionModel().selectedIndexes()
        cols = set(qidx.column() for qidx in qidxes)
        if len(cols) != 1:
            return

        col, = cols
        colname = self.mdl.headerData(col, Qt.Horizontal, Qt.DisplayRole)
        if colname not in ('status', 'assignee'):
            return

        objs = [qidx.data(ResultModel.RoleObject) for qidx in qidxes]
        project = objs[0].project
        if colname == 'status':
            vals = [status.name for status in project.statuses or []]
            val, ok = QInputDialog.getItem(
                self, self.tr('Bulk edit'),
                self.tr('Select new status for selected items'), vals, 0,
                False)
        elif colname == 'assignee':
            vals = [user.name for user in project.members or []]
            val, ok = QInputDialog.getItem(
                self, self.tr('Bulk edit'),
                self.tr('Select new assignee for selected items'), vals, 0,
                False)
        if not ok:
            return

        for obj in objs:
            change = Change()
            change.field = colname
            change.new = val

            update = Update()
            update.changes = [change]

            self.weboob.do('update_issue',
                           obj,
                           update,
                           backends=(obj.backend, ))
Пример #11
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
Пример #12
0
    def do_logtime(self, line):
        """
        logtime ISSUE HOURS [TEXT]

        Log spent time on an issue.
        """
        id, hours, text = self.parse_command_args(line, 3, 2)
        if text is None:
            text = self.acquire_input()

        try:
            hours = float(hours)
        except ValueError:
            print('Error: HOURS parameter may be a float', file=self.stderr)
            return 1

        id, backend_name = self.parse_id(id, unique_backend=True)
        update = Update(0)
        update.message = text
        update.hours = timedelta(hours=hours)

        self.do('update_issue', id, update, backends=backend_name).wait()
Пример #13
0
    def do_logtime(self, line):
        """
        logtime ISSUE HOURS [TEXT]

        Log spent time on an issue.
        """
        id, hours, text = self.parse_command_args(line, 3, 2)
        if text is None:
            text = self.acquire_input()

        try:
            hours = float(hours)
        except ValueError:
            print('Error: HOURS parameter may be a float', file=self.stderr)
            return 1

        id, backend_name = self.parse_id(id, unique_backend=True)
        update = Update(0)
        update.message = text
        update.hours = timedelta(hours=hours)

        self.do('update_issue', id, update, backends=backend_name).wait()
Пример #14
0
    def get_issue(self, issue):
        if isinstance(issue, Issue):
            id = issue.id
        else:
            id = issue
            issue = Issue(issue)

        try:
            with self.browser:
                params = self.browser.get_issue(id)
        except BrowserHTTPNotFound:
            return None

        issue.project = self._build_project(params['project'])
        issue.title = params['subject']
        issue.body = params['body']
        issue.creation = params['created_on']
        issue.updated = params['updated_on']
        issue.start = params['start_date']
        issue.due = params['due_date']
        issue.fields = {}
        for key, value in params['fields'].iteritems():
            issue.fields[key] = value
        issue.attachments = []
        for a in params['attachments']:
            attachment = Attachment(a['id'])
            attachment.filename = a['filename']
            attachment.url = a['url']
            issue.attachments.append(attachment)
        issue.history = []
        for u in params['updates']:
            update = Update(u['id'])
            update.author = issue.project.find_user(*u['author'])
            update.date = u['date']
            update.message = u['message']
            update.changes = []
            for i, (field, last, new) in enumerate(u['changes']):
                change = Change(i)
                change.field = field
                change.last = last
                change.new = new
                update.changes.append(change)
            issue.history.append(update)
        issue.author = issue.project.find_user(*params['author'])
        issue.assignee = issue.project.find_user(*params['assignee'])
        issue.tracker = params['tracker'][1]
        issue.category = params['category'][1]
        issue.version = issue.project.find_version(*params['version'])
        issue.status = issue.project.find_status(params['status'][1])
        issue.priority = params['priority'][1]

        return issue
Пример #15
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