def export_trello(config, boards, out_path): print("Exporting boards from Trello...") exported = [] params = {'key': config['key'], 'token': config['token']} for board in boards: print(" Exporting board '{}'...".format(board['name'])) board_url = "{}/boards/{}".format(config['url'], board['id']['trello']) resp_board = requests.get(board_url, params=params).json() labels = [] resp_labels = requests.get(board_url + "/labels", params=params).json() for l in [x for x in resp_labels if x['id'] != '']: labels.append({k: l[k] for k in ['name','id','color'] if k in l}) resp_cols = requests.get(board_url + "/lists", params=params).json() columns = [{'name': c['name'], 'id': c['id']} for c in resp_cols if not c['closed']] milestones = [] # trello has no milestones. See misc/approx_milestones.py opened = requests.get(board_url, params={**params, **{"cards":"visible"}}).json()["cards"] closed = requests.get(board_url, params={**params, **{"cards":"closed"}}).json()["cards"] show_findings(labels, [], columns, opened, closed) issues = [] [issues.append(Issue(o, 'trello').__dict__) for o in opened] [issues.append(Issue(c, 'trello').__dict__) for c in closed] exported.append({ 'name': board['name'], 'id': resp_board['id'], 'labels': labels, 'milestones': milestones, 'columns': columns, 'issues': issues }) return exported
def get_issues_in_active_and_future_sprints_in_board(board_name): sprint_names = jira_client.get_active_and_future_sprint_names_in_board( board_name) issues_in_active_and_future_sprints = [ ] # [{'sprint_A': ['issue_A', ...]}, {'sprintB': ['issue_C'...]}...] for sprint_name in sprint_names: _issues = jira_client.search_issues( 'sprint="{}" AND issuetype not in (Sub-task, 估點, Memo)'.format( sprint_name), startAt=0, maxResults=False) issues = [] for _issue in _issues: issue_story_point = 0.0 if customfield['story_point'] in _issue.raw['fields'].keys(): issue_story_point = _issue.raw['fields'][ customfield['story_point']] issue = Issue() issue.issueKey = _issue.key issue.url = JIRA_URL + '/browse/{}'.format(_issue.key) issue.summary = _issue.fields.summary issue.description = _issue.fields.description issue.storyPoint = issue_story_point issue.sprintName = sprint_name issues.append(issue.__dict__) sprint = Sprint() sprint.sprintName = sprint_name sprint.issues = issues issues_in_active_and_future_sprints.append(sprint.__dict__) return jsonify(issues_in_active_and_future_sprints)
def post(self, issue_id): r = client.repository('rainforestapp', 'GitSatisfaction') issue = Issue(r.issue(issue_id)) j = tornado.escape.json_decode(self.request.body) issue.add_subscriber(j["email"]) self.write(issue.to_json())
def on_post(self, req, resp): ''' Issues Controller Post Request Method ''' try: issue = Issue(title=req.get_json('title'), description=req.get_json('description'), author=ObjectId(req.get_json('author')), resolved_by=ObjectId(req.get_json('resolved_by'))) issue.save() resp.json = issue.to_json() except Exception as e: resp.status = falcon.HTTP_400 if hasattr(e, 'title') and hasattr(e, 'description'): resp.json = {"message": "%s - %s" % (e.title, e.description)}
def get_issues_by_jql(): pagination_start_at = 0 pagination_max_results = 100 # pagination_max_results = 2 pagination_total = 9999999 options = {"server": config.jira_base_url} jira = JIRA(basic_auth=(config.jira_user, config.jira_api_key), options=options) issues = {} data = [] while pagination_total > pagination_start_at: issues = jira.search_issues(config.jira_jql, maxResults=pagination_max_results, startAt=pagination_start_at) print("Total: ") print(issues.total) for item in issues: changelog = get_issue_changelog(item.key) issue = Issue( item.key, item.id, maya.parse(item.fields.created), maya.parse(item.fields.resolutiondate) if item.fields.resolutiondate != None else "", item.fields.issuetype.name if item.fields.issuetype != None else "", item.fields.status.name, item.fields.summary, item.fields.assignee.displayName if item.fields.assignee != None else "", item.fields.assignee.raw['avatarUrls']['48x48'] if item.fields.assignee != None else "", item.fields.aggregatetimeoriginalestimate) issue.time_in_status = get_issue_time_in_status(issue, changelog) issue.cycle_time = sum_time_in_statuses( issue.time_in_status, config.cycle_time_status_to_consider) issue.lead_time = sum_time_in_statuses( issue.time_in_status, config.lead_time_status_to_consider) issue.waiting_time = sum_time_in_statuses(issue.time_in_status, config.waiting_status) issue.child_count = get_issue_child_count(issue.key) data.append(issue) print(len(data)) # pagination_start_at = pagination_total pagination_start_at += pagination_max_results pagination_total = issues.total print(len(data)) return data
def test_add_subscripber(self): g3_issue = Empty() g3_issue.body_text = "" g3_issue.id = 1 g3_issue.title = 5 def empty(*args, **kwargs): pass g3_issue.edit = empty issue = Issue(g3_issue) issue.add_subscriber("*****@*****.**") issue.add_subscriber("*****@*****.**") b = issue.to_json()['body'] self.assertIn("listeners: [email protected],[email protected]", b)
def issue_create(_id): if request.method == 'POST': status = request.form["status"] customer_id = _id description = request.form['description'] date_start = request.form['date_start'] if date_start is not '': date_start = datetime.strptime(date_start, '%Y-%m-%d') else: flash("a date is always required", "danger") return render_template("issues/issue_create.html") if customer_id and status and description and date_start is not '': Issue(status, customer_id, description, date_start).save_to_mongo() return redirect(url_for("customer.find_customers")) else: flash("enter correct data in all fields", "danger") return render_template("/issues/issue_create.html")
from models.label import Label from models.milestone import Milestone from models.issue import Issue from templates import simple import sys project_id = sys.argv[1] lbl_result = {} mls_result = {} for label in simple.labels: lbl_result[label['name']] = Label(project_id).create(label) for milestone in simple.milestones: mls_result[milestone['title']] = Milestone(project_id).create(milestone) for task in simple.issues[milestone['title']]: print(mls_result[milestone['title']]) task['milestone_id'] = mls_result[milestone['title']]['id'] print(Issue(project_id).create(task))
def get(self): r = client.repository('rainforestapp', 'GitSatisfaction') out = [] for issue in r.iter_issues(state='open'): out.append(Issue(issue).to_json()) self.write(json.dumps(out))