def format_issue_with_labels(issue: Issue): global user labels = issue.get_labels() labels_str = '' for label in labels: labels_str += '[%s](https://github.com/%s/ghiblog/labels/%s), ' % ( label.name, user.get_user().login, urllib.parse.quote(label.name)) if '---' in issue.body: body_summary = issue.body[:issue.body.index('---')] else: body_summary = issue.body[:150] return ''' #### [{0}]({1}) {2} \t {3} :label: : {4} {5} [更多>>>]({1}) --- '''.format(issue.title, issue.html_url, sup('%s :speech_balloon:' % issue.comments), issue.created_at, labels_str[:-2], body_summary)
def get_issue_info(issue: Issue): issue_url = issue.html_url issue_title = issue.title last_issue_time = issue.updated_at or issue.created_at last_comments_time = get_comments_last_time(issue) if last_comments_time: last_issue_time = max(last_issue_time, last_comments_time) # issue_updated_at = max([issue_last].extend(get_comments_last_time(issue))) print(issue_title, issue_url, last_issue_time, issue.get_labels()[0])
def get_disposition(msc: Issue) -> str: """Returns the textual representation of the disposition of a MSC""" dispositions = ["merge", "close", "postpone"] for label in msc.get_labels(): for disposition in dispositions: # label.name is something like 'disposition:merge' # disposition is something like 'merge' if disposition in label.name: return disposition
def format_issue_with_labels(issue: Issue): global user labels = issue.get_labels() labels_str = '' if labels: labels_str = '\n :label: \t' + sub('|') for label in labels: labels_str += sub('[%s](https://github.com/%s/bb_everyday/labels/%s)\t|\t' % ( label.name, user.get_user().login, urllib.parse.quote(label.name))) return '- [%s](%s) %s \t\t\t :stuck_out_tongue_winking_eye:%s %s\n\n' % ( issue.title, issue.html_url, sup('%s :speech_balloon:' % issue.comments), sub(issue.created_at), labels_str)
def format_issue_with_labels(issue: Issue): global user labels = issue.get_labels() labels_str = '' if labels: labels_str = '\n :label: \t' + sub('|') for label in labels: labels_str += sub('[%s](https://github.com/%s/blog/labels/%s)\t|\t' % (label.name, user.get_user().login, urllib.parse.quote(label.name))) return '- [%s](%s) \t\t\t %s \n\n' % (issue.title, issue.html_url, sub(issue.created_at))
def process_issue(*, issue: Issue, settings: Settings) -> None: logging.info(f"Processing issue: #{issue.number}") label_strs = set([label.name for label in issue.get_labels()]) events = list(issue.get_events()) labeled_events = get_labeled_events(events) last_comment = get_last_comment(issue) for keyword, keyword_meta in settings.input_config.items(): # Check closable delay, if enough time passed and the issue could be closed closable_delay = ( last_comment is None or (datetime.utcnow() - keyword_meta.delay) > last_comment.created_at ) # Check label, optionally removing it if there's a comment after adding it if keyword in label_strs: logging.info(f'Keyword: "{keyword}" in issue labels') keyword_event = get_last_event_for_label( labeled_events=labeled_events, label=keyword ) if ( last_comment and keyword_event and last_comment.created_at > keyword_event.created_at ): logging.info( f"Not closing as the last comment was written after adding the " f'label: "{keyword}"' ) if keyword_meta.remove_label_on_comment: logging.info(f'Removing label: "{keyword}"') issue.remove_from_labels(keyword) elif closable_delay: close_issue( issue=issue, keyword_meta=keyword_meta, keyword=keyword, label_strs=label_strs, ) break else: logging.info( f"Not clossing issue: #{issue.number} as the delay hasn't been reached: {keyword_meta.delay}" )
def process_issue(*, issue: Issue, settings: Settings, owner: NamedUser) -> None: logging.info(f"Processing issue: #{issue.number}") label_strs = set([l.name for l in issue.get_labels()]) events = list(issue.get_events()) labeled_events = get_labeled_events(events) last_comment = get_last_comment(issue) for keyword, keyword_meta in settings.input_config.items(): # Check closable delay, if enough time passed and the issue could be closed closable_delay = False if (last_comment is None or (datetime.utcnow() - keyword_meta.delay) > last_comment.created_at): closable_delay = True # Check label, optionally removing it if there's a comment after adding it if keyword in label_strs: logging.info(f'Keyword: "{keyword}" in issue labels') keyword_event = get_last_event_for_label( labeled_events=labeled_events, label=keyword) if last_comment and last_comment.created_at > keyword_event.created_at: logging.info( f"Not closing as the last comment was written after adding the " f'label: "{keyword}"') if keyword_meta.remove_label: logging.info(f'Removing label: "{keyword}"') issue.remove_from_labels(keyword) elif closable_delay: close_issue(issue=issue, keyword_meta=keyword_meta) break # Check HTML comments by allowed users if (last_comment and f"<!-- issue-manager: {keyword} -->" in last_comment.body and closable_delay and last_comment.user.login in keyword_meta.users + [owner.login]): logging.info( f'Last comment by user: "******" had HTML keyword ' f'comment: "{keyword}" and there\'s a closable delay.') close_issue(issue=issue, keyword_meta=keyword_meta) break