def get_credentials_for(which): if not config.has_option(which, 'username'): if config.has_option('login', 'username'): config.set(which, 'username', config.get('login', 'username')) elif ( (which == 'target') and query.yes_no("Do you wish to use the same credentials for the target repository?") ): config.set('target', 'username', config.get('source', 'username')) else: query_str = "Enter your username for '%s' at '%s': " % (config.get(which, 'repository'), config.get(which, 'server')) config.set(which, 'username', query.username(query_str)) if not config.has_option(which, 'password'): if config.has_option('login', 'password'): config.set(which, 'password', config.get('login', 'password')) elif ( (which == 'target') and config.get('source', 'username') == config.get('target', 'username') and config.get('source', 'server') == config.get('target', 'server') ): config.set('target', 'password', config.get('source', 'password')) else: query_str = "Enter your password for '%s' at '%s': " % (config.get(which, 'repository'), config.get(which, 'server')) config.set(which, 'password', query.password(query_str)) if not config.has_option(which, 'token'): if config.has_option('login', 'token'): config.set(which, 'token', config.get('login', 'token')) elif ( (which == 'target') and query.yes_no("Do you wish to use the same credentials for the target repository?") ): config.set('target', 'token', config.get('source', 'token')) else: query_str = "Enter your token for '%s' at '%s': " % (config.get(which, 'repository'), config.get(which, 'server')) config.set(which, 'token', query.token(query_str))
def get_credentials_for(which): if not config.has_option(which, 'username'): if config.has_option('login', 'username'): config.set(which, 'username', config.get('login', 'username')) elif ((which == 'target') and query.yes_no( "Do you wish to use the same credentials for the target repository?" )): config.set('target', 'username', config.get('source', 'username')) else: query_str = "Enter your username for '%s' at '%s': " % ( config.get(which, 'repository'), config.get( which, 'server')) config.set(which, 'username', query.username(query_str)) if not config.has_option(which, 'password'): if config.has_option('login', 'password'): config.set(which, 'password', config.get('login', 'password')) elif ((which == 'target') and config.get('source', 'username') == config.get('target', 'username') and config.get( 'source', 'server') == config.get('target', 'server')): config.set('target', 'password', config.get('source', 'password')) else: query_str = "Enter your password for '%s' at '%s': " % ( config.get(which, 'repository'), config.get( which, 'server')) config.set(which, 'password', query.password(query_str))
def get_credentials_for(which): if not config.has_option(which, "username"): if config.has_option("login", "username"): config.set(which, "username", config.get("login", "username")) elif (which == "target") and query.yes_no( "Do you wish to use the same credentials for the target repository?" ): config.set("target", "username", config.get("source", "username")) else: query_str = "Enter your username for '%s' at '%s': " % ( config.get(which, "repository"), config.get(which, "server"), ) config.set(which, "username", query.username(query_str)) if not config.has_option(which, "password"): if config.has_option("login", "password"): config.set(which, "password", config.get("login", "password")) elif ( (which == "target") and config.get("source", "username") == config.get("target", "username") and config.get("source", "server") == config.get("target", "server") ): config.set("target", "password", config.get("source", "password")) else: query_str = "Enter your password for '%s' at '%s': " % ( config.get(which, "repository"), config.get(which, "server"), ) config.set(which, "password", query.password(query_str))
def import_issues(issues): state.current = state.GENERATING known_milestones = get_milestones('target') def get_milestone_by_title(title): for milestone in known_milestones: if milestone['title'] == title : return milestone return None known_labels = get_labels('target') def get_label_by_name(name): for label in known_labels: if label['name'] == name : return label return None new_issues = [] num_new_comments = 0 new_milestones = [] new_labels = [] for issue in issues: new_issue = {} new_issue['title'] = issue['title'] # Temporary fix for marking closed issues if issue['closed_at']: new_issue['title'] = "[CLOSED] " + new_issue['title'] if config.getboolean('settings', 'import-comments') and 'comments' in issue and issue['comments'] != 0: num_new_comments += int(issue['comments']) new_issue['comments'] = get_comments_on_issue('source', issue) if config.getboolean('settings', 'import-milestone') and 'milestone' in issue and issue['milestone'] is not None: # Since the milestones' ids are going to differ, we will compare them by title instead found_milestone = get_milestone_by_title(issue['milestone']['title']) if found_milestone: new_issue['milestone_object'] = found_milestone else: new_milestone = issue['milestone'] new_issue['milestone_object'] = new_milestone known_milestones.append(new_milestone) # Allow it to be found next time new_milestones.append(new_milestone) # Put it in a queue to add it later if config.getboolean('settings', 'import-labels') and 'labels' in issue and issue['labels'] is not None: new_issue['label_objects'] = [] for issue_label in issue['labels']: found_label = get_label_by_name(issue_label['name']) if found_label: new_issue['label_objects'].append(found_label) else: new_issue['label_objects'].append(issue_label) known_labels.append(issue_label) # Allow it to be found next time new_labels.append(issue_label) # Put it in a queue to add it later template_data = {} template_data['user_name'] = issue['user']['login'] template_data['user_url'] = issue['user']['html_url'] template_data['user_avatar'] = issue['user']['avatar_url'] template_data['date'] = format_date(issue['created_at']) template_data['url'] = issue['html_url'] template_data['body'] = issue['body'] if "pull_request" in issue and issue['pull_request']['html_url'] is not None: new_issue['body'] = format_pull_request(template_data) else: new_issue['body'] = format_issue(template_data) new_issues.append(new_issue) state.current = state.IMPORT_CONFIRMATION print("You are about to add to '" + config.get('target', 'repository') + "':") print(" *", len(new_issues), "new issues") print(" *", num_new_comments, "new comments") print(" *", len(new_milestones), "new milestones") print(" *", len(new_labels), "new labels") if not query.yes_no("Are you sure you wish to continue?"): sys.exit() state.current = state.IMPORTING for milestone in new_milestones: result_milestone = import_milestone(milestone) milestone['number'] = result_milestone['number'] milestone['url'] = result_milestone['url'] for label in new_labels: result_label = import_label(label) result_issues = [] for issue in new_issues: if 'milestone_object' in issue: issue['milestone'] = issue['milestone_object']['number'] del issue['milestone_object'] if 'label_objects' in issue: issue_labels = [] for label in issue['label_objects']: issue_labels.append(label['name']) issue['labels'] = issue_labels del issue['label_objects'] result_issue = send_request('target', "issues", issue) print("Successfully created issue '%s'" % result_issue['title']) if 'comments' in issue: result_comments = import_comments(issue['comments'], result_issue['number']) print(" > Successfully added", len(result_comments), "comments.") result_issues.append(result_issue) state.current = state.IMPORT_COMPLETE return result_issues
def import_issues(issues): state.current = state.GENERATING known_milestones = get_milestones('target') def get_milestone_by_title(title): for milestone in known_milestones: if milestone['title'] == title: return milestone return None known_labels = get_labels('target') def get_label_by_name(name): for label in known_labels: if label['name'] == name: return label return None new_issues = [] num_new_comments = 0 new_milestones = [] new_labels = [] for issue in issues: new_issue = {} new_issue['title'] = issue['title'] # Temporary fix for marking closed issues if issue['closed_at']: new_issue['title'] = "[CLOSED] " + new_issue['title'] if config.getboolean( 'settings', 'import-comments' ) and 'comments' in issue and issue['comments'] != 0: num_new_comments += int(issue['comments']) new_issue['comments'] = get_comments_on_issue('source', issue) if config.getboolean( 'settings', 'import-milestone' ) and 'milestone' in issue and issue['milestone'] is not None: # Since the milestones' ids are going to differ, we will compare them by title instead found_milestone = get_milestone_by_title( issue['milestone']['title']) if found_milestone: new_issue['milestone_object'] = found_milestone else: new_milestone = issue['milestone'] new_issue['milestone_object'] = new_milestone known_milestones.append( new_milestone) # Allow it to be found next time new_milestones.append( new_milestone) # Put it in a queue to add it later if config.getboolean( 'settings', 'import-labels' ) and 'labels' in issue and issue['labels'] is not None: new_issue['label_objects'] = [] for issue_label in issue['labels']: found_label = get_label_by_name(issue_label['name']) if found_label: new_issue['label_objects'].append(found_label) else: new_issue['label_objects'].append(issue_label) known_labels.append( issue_label) # Allow it to be found next time new_labels.append( issue_label) # Put it in a queue to add it later template_data = {} template_data['user_name'] = issue['user']['login'] template_data['user_url'] = issue['user']['html_url'] template_data['user_avatar'] = issue['user']['avatar_url'] template_data['date'] = format_date(issue['created_at']) template_data['url'] = issue['html_url'] template_data['body'] = issue['body'] if "pull_request" in issue and issue['pull_request'][ 'html_url'] is not None: new_issue['body'] = format_pull_request(template_data) else: new_issue['body'] = format_issue(template_data) new_issues.append(new_issue) state.current = state.IMPORT_CONFIRMATION print("You are about to add to '" + config.get('target', 'repository') + "':") print(" *", len(new_issues), "new issues") print(" *", num_new_comments, "new comments") print(" *", len(new_milestones), "new milestones") print(" *", len(new_labels), "new labels") if not query.yes_no("Are you sure you wish to continue?"): sys.exit() state.current = state.IMPORTING for milestone in new_milestones: result_milestone = import_milestone(milestone) milestone['number'] = result_milestone['number'] milestone['url'] = result_milestone['url'] for label in new_labels: import_label(label) result_issues = [] for issue in new_issues: if 'milestone_object' in issue: issue['milestone'] = issue['milestone_object']['number'] del issue['milestone_object'] if 'label_objects' in issue: issue_labels = [] for label in issue['label_objects']: issue_labels.append(label['name']) issue['labels'] = issue_labels del issue['label_objects'] result_issue = send_request('target', "issues", issue) print("Successfully created issue '%s'" % result_issue['title']) if 'comments' in issue: result_comments = import_comments(issue['comments'], result_issue['number']) print(" > Successfully added", len(result_comments), "comments.") result_issues.append(result_issue) state.current = state.IMPORT_COMPLETE return result_issues
def import_issues(issues): state.current = state.GENERATING known_milestones = get_milestones('target') def get_milestone_by_title(title): for milestone in known_milestones: if milestone['title'] == title: return milestone return None known_labels = get_labels('target') def get_label_by_name(name): for label in known_labels: if label['name'].lower() == name.lower(): return label return None new_issues = [] open_issue_ids = [] closed_issue_ids = [] pull_request_ids = [] num_new_comments = 0 new_milestones = [] new_labels = [] for issue in issues: new_issue = {} new_issue['title'] = issue['title'] # note: id will not be created remotely, used for local dereferencing # note: id is not the same as number new_issue['id'] = issue['id'] #print (issue) if (issue['number'] < config.get('source', 'resume')): continue if issue['state'] == 'open': open_issue_ids.append(issue['id']) elif issue['state'] == 'closed': closed_issue_ids.append(issue['id']) new_issue['title'] = "[#" + str( issue['number']) + "] " + new_issue['title'] if config.getboolean( 'settings', 'import-comments' ) and 'comments' in issue and issue['comments'] != 0: num_new_comments += int(issue['comments']) new_issue['comments'] = get_comments_on_issue('source', issue) if config.getboolean( 'settings', 'import-milestone' ) and 'milestone' in issue and issue['milestone'] is not None: # Since the milestones' ids are going to differ, we will compare them by title instead found_milestone = get_milestone_by_title( issue['milestone']['title']) if found_milestone: new_issue['milestone_object'] = found_milestone else: new_milestone = issue['milestone'] new_issue['milestone_object'] = new_milestone known_milestones.append( new_milestone) # Allow it to be found next time new_milestones.append( new_milestone) # Put it in a queue to add it later if config.getboolean( 'settings', 'import-labels' ) and 'labels' in issue and issue['labels'] is not None: new_issue['label_objects'] = [] for issue_label in issue['labels']: found_label = get_label_by_name(issue_label['name']) if found_label: new_issue['label_objects'].append(found_label) else: new_issue['label_objects'].append(issue_label) known_labels.append( issue_label) # Allow it to be found next time new_labels.append( issue_label) # Put it in a queue to add it later template_data = {} template_data['user_name'] = issue['user']['login'] template_data['user_url'] = issue['user']['html_url'] template_data['user_avatar'] = issue['user']['avatar_url'] template_data['date'] = format_date(issue['created_at']) template_data['url'] = issue['html_url'] template_data['body'] = issue['body'] if 'pull_request' in issue: if config.getboolean('settings', 'import-pulls'): pull_request_ids.append(issue['id']) if issue['pull_request']['html_url'] is not None: new_issue['body'] = format_pull_request(template_data) else: continue # skip this (pull request) issue else: # regular issue, not a pull request new_issue['body'] = format_issue(template_data) new_issues.append(new_issue) state.current = state.IMPORT_CONFIRMATION print("You are about to add to '" + config.get('target', 'repository') + "':") print(" *", len(open_issue_ids), "open issues") print(" *", len(closed_issue_ids), "closed issues") print(" *", len(pull_request_ids), "pull requests") print(" *", num_new_comments, "new comments") print(" *", len(new_milestones), "new milestones") print(" *", len(new_labels), "new labels") if not query.yes_no("Are you sure you wish to continue?"): sys.exit() state.current = state.IMPORTING for milestone in new_milestones: result_milestone = import_milestone(milestone) milestone['number'] = result_milestone['number'] milestone['url'] = result_milestone['url'] for label in new_labels: result_label = import_label(label) result_issues = [] for issue in new_issues: if 'milestone_object' in issue: issue['milestone'] = issue['milestone_object']['number'] del issue['milestone_object'] if 'label_objects' in issue: issue_labels = [] for label in issue['label_objects']: issue_labels.append(label['name']) issue['labels'] = issue_labels del issue['label_objects'] sys.stdout.flush() sleep_rate_limiting() result_issue = send_request('target', "issues", issue) print("Successfully created issue '%s'" % result_issue['title']) if issue['id'] in closed_issue_ids: issue['state'] = 'closed' patch_issue('target', result_issue['number'], issue) if 'comments' in issue: result_comments = import_comments(issue['comments'], result_issue['number']) print(" > Successfully added", len(result_comments), "comments.") result_issues.append(result_issue) state.current = state.IMPORT_COMPLETE return result_issues
def import_issues(state, issues): known_milestones = get_milestones("target", state, target_url) def get_milestone_by_title(title): for milestone in known_milestones: if milestone["title"] == title: return milestone return None known_labels = get_labels("target", target_url) def get_label_by_name(name): for label in known_labels: if label["name"] == name: return label return None new_issues = [] closed_issues = [] num_new_comments = 0 new_milestones = [] new_labels = [] for issue in issues: new_issue = {} new_issue["title"] = issue["title"] if config.getboolean("settings", "import-comments") and "comments" in issue and issue["comments"] != 0: num_new_comments += int(issue["comments"]) new_issue["comments"] = get_comments_on_issue("source", issue) if ( config.getboolean("settings", "import-milestone") and "milestone" in issue and issue["milestone"] is not None ): # Since the milestones' ids are going to differ, we will compare them by title instead found_milestone = get_milestone_by_title(issue["milestone"]["title"]) if found_milestone: new_issue["milestone_object"] = found_milestone else: new_milestone = issue["milestone"] new_issue["milestone_object"] = new_milestone known_milestones.append(new_milestone) # Allow it to be found next time new_milestones.append(new_milestone) # Put it in a queue to add it later if config.getboolean("settings", "import-labels") and "labels" in issue and issue["labels"] is not None: new_issue["label_objects"] = [] for issue_label in issue["labels"]: found_label = get_label_by_name(issue_label["name"]) if found_label: new_issue["label_objects"].append(found_label) else: new_issue["label_objects"].append(issue_label) known_labels.append(issue_label) # Allow it to be found next time new_labels.append(issue_label) # Put it in a queue to add it later template_data = {} template_data["issue_creator_username"] = issue["user"]["login"] template_data["issue_creator_url"] = issue["user"]["html_url"] template_data["issue_date"] = format_date(issue["created_at"]) template_data["issue_url"] = issue["html_url"] template_data["issue_body"] = issue["body"] if "pull_request" in issue and issue["pull_request"]["html_url"] is not None: new_issue["body"] = format_pull_request(template_data) else: new_issue["body"] = format_issue(template_data) new_issues.append(new_issue) if issue["state"] == "closed": close_issue = {} close_issue["number"] = issue["number"] close_issue["state"] = "closed" closed_issues.append(close_issue) print("You are about to add to '" + config.get("target", "repository") + "':") print(" *", len(new_issues), "creating issues") print(" *", len(closed_issues), "closing issues") print(" *", num_new_comments, "new comments") print(" *", len(new_milestones), "new milestones") print(" *", len(new_labels), "new labels") if not query.yes_no("Are you sure you wish to continue?"): sys.exit() for milestone in new_milestones: result_milestone = import_milestone(state, milestone) milestone["number"] = result_milestone["number"] milestone["url"] = result_milestone["url"] for label in new_labels: result_label = import_label(label) result_issues = [] for issue in new_issues: if "milestone_object" in issue: issue["milestone"] = issue["milestone_object"]["number"] del issue["milestone_object"] if "label_objects" in issue: issue_labels = [] for label in issue["label_objects"]: issue_labels.append(label["name"]) issue["labels"] = issue_labels del issue["label_objects"] result_issue = send_request("target", "%s/issues" % target_url, issue) print("Successfully created issue '%s'" % result_issue["title"]) if "comments" in issue: result_comments = import_comments(issue["comments"], result_issue["number"]) print(" > Successfully added", len(result_comments), "comments.") result_issues.append(result_issue) for issue in closed_issues: result_issue = send_request("target", "%s/issues/%d" % (target_url, issue["number"]), issue, "PATCH") print("Successfully closed issue '%s'" % result_issue["title"]) # result_issues.append(result_issue) return result_issues
def import_issues(issues): state.current = state.GENERATING known_milestones = get_milestones('target') def get_milestone_by_title(title): for milestone in known_milestones: if milestone['title'] == title : return milestone return None known_labels = get_labels('target') def get_label_by_name(name): # Github labels are case-insensitive for label in known_labels: if label['name'].upper() == name.upper(): return label return None new_issues = [] num_new_comments = 0 num_new_events = 0 new_milestones = [] new_labels = [] for issue in issues: new_issue = {} new_issue['orig_issue_number'] = issue['number'] new_issue['title'] = issue['title'] if issue.get('assignee') is not None and 'login' in issue['assignee']: new_issue['assignee'] = issue['assignee']['login'] if issue['closed_at']: new_issue['orig_issue_closed'] = True if config.getboolean('settings', 'import-comments') and 'comments' in issue and issue['comments'] != 0: num_new_comments += int(issue['comments']) new_issue['comments'] = get_comments_on_issue('source', issue) if config.getboolean('settings', 'import-events'): new_issue['events'] = get_events_on_issue('source', issue) num_new_events += len(new_issue['events']) if config.getboolean('settings', 'import-milestone') and 'milestone' in issue and issue['milestone'] is not None: # Since the milestones' ids are going to differ, we will compare them by title instead found_milestone = get_milestone_by_title(issue['milestone']['title']) if found_milestone: new_issue['milestone_object'] = found_milestone else: new_milestone = issue['milestone'] new_issue['milestone_object'] = new_milestone known_milestones.append(new_milestone) # Allow it to be found next time new_milestones.append(new_milestone) # Put it in a queue to add it later if config.getboolean('settings', 'import-labels') and 'labels' in issue and issue['labels'] is not None: new_issue['label_objects'] = [] for issue_label in issue['labels']: found_label = get_label_by_name(issue_label['name']) if found_label: new_issue['label_objects'].append(found_label) else: new_issue['label_objects'].append(issue_label) known_labels.append(issue_label) # Allow it to be found next time new_labels.append(issue_label) # Put it in a queue to add it later template_data = {} template_data['user_name'] = issue['user']['login'] template_data['user_url'] = issue['user']['html_url'] template_data['user_avatar'] = issue['user']['avatar_url'] template_data['date'] = format_date(issue['created_at']) template_data['url'] = issue['html_url'] template_data['body'] = issue['body'] if "pull_request" in issue and issue['pull_request']['html_url'] is not None: new_issue['body'] = format_pull_request(template_data) else: new_issue['body'] = format_issue(template_data) new_issues.append(new_issue) if config.getboolean('settings', 'dry_run'): progress_msg('Dry run complete') state.current = state.COMPLETE sys.exit() state.current = state.IMPORT_CONFIRMATION print("You are about to add to '" + config.get('target', 'repository') + "':") print(" *", len(new_issues), "new issues") print(" *", num_new_comments, "new comments") print(" *", num_new_events, "new events") print(" *", len(new_milestones), "new milestones") print(" *", len(new_labels), "new labels") if not config.getboolean('settings', 'yes'): if not query.yes_no("Are you sure you wish to continue?"): sys.exit() print() state.current = state.IMPORTING for milestone in new_milestones: result_milestone = import_milestone(milestone) milestone['number'] = result_milestone['number'] milestone['url'] = result_milestone['url'] for label in new_labels: result_label = import_label(label) result_issues = [] for issue in new_issues: if 'milestone_object' in issue: issue['milestone'] = issue['milestone_object']['number'] del issue['milestone_object'] if 'label_objects' in issue: issue_labels = [] for label in issue['label_objects']: issue_labels.append(label['name']) issue['labels'] = issue_labels del issue['label_objects'] orig_issue_number = issue['orig_issue_number'] del issue['orig_issue_number'] orig_issue_closed = False if issue.get('orig_issue_closed') is not None: orig_issue_closed = True del issue['orig_issue_closed'] issue_comments = None if 'comments' in issue: issue_comments = issue['comments'] del issue['comments'] issue_events = None if 'events' in issue: issue_events = issue['events'] del issue['events'] progress_msg('Creating new issue for original issue {0}, assignee: {1}'.format(orig_issue_number, issue.get('assignee'))) progress_msg(' > {0}'.format(issue['title'])) result_issue = send_request('target', "issues", issue, can_retry=False) progress_msg(' > Created issue {0} for original issue {1}'.format(result_issue['number'], orig_issue_number)) if (issue_comments is not None and len(issue_comments) > 0) or (issue_events is not None and len(issue_events) > 0): import_comments_and_events(issue_comments, issue_events, result_issue['number']) if orig_issue_closed: progress_msg(' > Original issue {0} is CLOSED, closing the new issue {1}'.format(orig_issue_number, result_issue['number'])) update_data = { 'state' : 'closed' } send_request('target', "issues/{0}".format(result_issue['number']), update_data) if config.getboolean('settings', 'lock_after_migrate'): progress_msg(' > Lock the original issue {0}'.format(orig_issue_number)) send_request('source', "issues/{0}/lock".format(orig_issue_number), method="PUT", content_length=0, custom_media_type='application/vnd.github.the-key-preview+json') lock_comment_body = "**ISSUE HAS BEEN MIGRATED. PLEASE DO NOT ADD ANY UPDATES.**" lock_comment = {'body' : lock_comment_body} send_request('source', "issues/{0}/comments".format(orig_issue_number), lock_comment) result_issues.append(result_issue) progress_msg() time.sleep(5) state.current = state.IMPORT_COMPLETE return result_issues
def import_issues(issues): state.current = state.GENERATING known_milestones = get_milestones('target') def get_milestone_by_title(title): for milestone in known_milestones: if milestone['title'] == title: return milestone return None known_labels = get_labels('target') def get_label_by_name(name): # Github labels are case-insensitive for label in known_labels: if label['name'].upper() == name.upper(): return label return None new_issues = [] num_new_comments = 0 num_new_events = 0 new_milestones = [] new_labels = [] for issue in issues: new_issue = {} new_issue['orig_issue_number'] = issue['number'] new_issue['title'] = issue['title'] new_assignees = [] # Convert assignees to devtopia accout according to assigneeDict if issue.get('assignees') is not None: for assignee in issue.get('assignees'): oldAssignee = assignee['login'] if oldAssignee in assigneeDict: newAssignee = convert_assignee(oldAssignee) new_assignees.append(newAssignee) new_issue['assignees'] = new_assignees if issue['closed_at']: new_issue['orig_issue_closed'] = True if config.getboolean( 'settings', 'import-comments' ) and 'comments' in issue and issue['comments'] != 0: num_new_comments += int(issue['comments']) new_issue['comments'] = get_comments_on_issue('source', issue) if config.getboolean('settings', 'import-events'): new_issue['events'] = get_events_on_issue('source', issue) num_new_events += len(new_issue['events']) if config.getboolean( 'settings', 'import-milestone' ) and 'milestone' in issue and issue['milestone'] is not None: # Since the milestones' ids are going to differ, we will compare them by title instead found_milestone = get_milestone_by_title( issue['milestone']['title']) if found_milestone: new_issue['milestone_object'] = found_milestone else: new_milestone = issue['milestone'] new_issue['milestone_object'] = new_milestone known_milestones.append( new_milestone) # Allow it to be found next time new_milestones.append( new_milestone) # Put it in a queue to add it later if config.getboolean( 'settings', 'import-labels' ) and 'labels' in issue and issue['labels'] is not None: new_issue['label_objects'] = [] for issue_label in issue['labels']: found_label = get_label_by_name(issue_label['name']) if found_label: new_issue['label_objects'].append(found_label) else: new_issue['label_objects'].append(issue_label) known_labels.append( issue_label) # Allow it to be found next time new_labels.append( issue_label) # Put it in a queue to add it later template_data = {} template_data['user_name'] = issue['user']['login'] template_data['user_url'] = issue['user']['html_url'] template_data['user_avatar'] = issue['user']['avatar_url'] template_data['date'] = format_date(issue['created_at']) template_data['url'] = issue['html_url'] template_data['body'] = issue['body'] if "pull_request" in issue and issue['pull_request'][ 'html_url'] is not None: new_issue['body'] = format_pull_request(template_data) else: new_issue['body'] = format_issue(template_data) new_issues.append(new_issue) if config.getboolean('settings', 'dry_run'): progress_msg('Dry run complete') state.current = state.COMPLETE sys.exit() state.current = state.IMPORT_CONFIRMATION print("You are about to add to '" + config.get('target', 'repository') + "':") print(" *", len(new_issues), "new issues") print(" *", num_new_comments, "new comments") print(" *", num_new_events, "new events") print(" *", len(new_milestones), "new milestones") print(" *", len(new_labels), "new labels") if not config.getboolean('settings', 'yes'): if not query.yes_no("Are you sure you wish to continue?"): sys.exit() print() state.current = state.IMPORTING for milestone in new_milestones: result_milestone = import_milestone(milestone) milestone['number'] = result_milestone['number'] milestone['url'] = result_milestone['url'] for label in new_labels: result_label = import_label(label) result_issues = [] for issue in new_issues: if 'milestone_object' in issue: issue['milestone'] = issue['milestone_object']['number'] del issue['milestone_object'] if 'label_objects' in issue: issue_labels = [] for label in issue['label_objects']: issue_labels.append(label['name']) issue['labels'] = issue_labels del issue['label_objects'] orig_issue_number = issue['orig_issue_number'] del issue['orig_issue_number'] orig_issue_closed = False if issue.get('orig_issue_closed') is not None: orig_issue_closed = True del issue['orig_issue_closed'] issue_comments = None if 'comments' in issue: issue_comments = issue['comments'] del issue['comments'] issue_events = None if 'events' in issue: issue_events = issue['events'] del issue['events'] progress_msg( 'Creating new issue for original issue {0}, assignee: {1}'.format( orig_issue_number, issue.get('assignee'))) progress_msg(' > {0}'.format(issue['title'])) print() result_issue = send_request('target', "issues", issue, can_retry=False) progress_msg(' > Created issue {0} for original issue {1}'.format( result_issue['number'], orig_issue_number)) if (issue_comments is not None and len(issue_comments) > 0) or (issue_events is not None and len(issue_events) > 0): import_comments_and_events(issue_comments, issue_events, result_issue['number']) if orig_issue_closed: progress_msg( ' > Original issue {0} is CLOSED, closing the new issue {1}'. format(orig_issue_number, result_issue['number'])) update_data = {'state': 'closed'} send_request('target', "issues/{0}".format(result_issue['number']), update_data) if config.getboolean('settings', 'lock_after_migrate'): progress_msg( ' > Lock the original issue {0}'.format(orig_issue_number)) send_request( 'source', "issues/{0}/lock".format(orig_issue_number), method="PUT", content_length=0, custom_media_type='application/vnd.github.the-key-preview+json' ) lock_comment_body = "**ISSUE HAS BEEN MIGRATED. PLEASE DO NOT ADD ANY UPDATES.**" lock_comment = {'body': lock_comment_body} send_request('source', "issues/{0}/comments".format(orig_issue_number), lock_comment) result_issues.append(result_issue) progress_msg() time.sleep(5) state.current = state.IMPORT_COMPLETE return result_issues
def import_audio(): root_path = os.path.abspath(os.path.dirname(__file__)) delete_files = query.yes_no(_( "Do you wish to delete the original files when they have been " "transcoded and the data added to the database?" )) # List all files to be imported and loop through them. input_dir = os.path.normpath(os.path.join(root_path, "new-audio")) files = os.listdir(input_dir) for file in files: file = file print("\n" + _("Current file: {file}").format(file=file)) full_path = os.path.join(input_dir, file) # Extract meta data if file.endswith(".wma"): meta_data = read_wma(full_path) else: # Unknown file format, continue with next file in the list print(_("Unknown file format {file_name}").format( file_name=file)) continue # Start transcoding thread temp_path = os.path.normpath(os.path.join( root_path, "downloads", "audiofiles", "new.ogg")) transcode_thread = threading.Thread( target=transcode, args=(full_path, temp_path, delete_files)) transcode_thread.start() # Dictionary with data for the database track_data = { "title": "", "artists": [], "album": {"title": ""} } # MusicBrainz lookup of all id strings mb_release_year = mb.get_release_year(meta_data["album_mbid"]) mb_artists = [] for artist in meta_data["artists_mbid"]: mb_artists.append(mb.get_artist_name(artist)) # Go through all data with the user if mb_release_year is not meta_data["album_year"]: use_mb = query.yes_no(_( "The file's meta data says the album was released in " "{year1}, but MusicBrainz says {year2}. Do you want to use " "the year provided by MusicBrainz?").format( year1=meta_data["album_year"], year2=mb_release_year), True) if use_mb: track_data["album"]["year"] = mb_release_year else: track_data["album"]["year"] = meta_data["album_year"] # Ask "Is ARTIST the same as ARTIST in the database?" if similar artist # Aks "Is ALBUM the same as ALBUM in the database?" if similar album # User querying done, rejoin threads if transcode_thread.is_alive(): print(_("One moment, waiting for the transcoding.")) transcode_thread.join() # Add track_data to database # Rename the temporary file created by the transcoder new_path = os.path.normpath(os.path.join( root_path, "downloads", "audiofiles", "database-id.ogg")) os.rename(temp_path, new_path)
def import_issues_golden_comet(issues): state.current = state.GENERATING known_milestones = get_milestones('target') def get_milestone_by_title(title): for milestone in known_milestones: if milestone['title'] == title: return milestone return None known_labels = get_labels('target') def get_label_by_name(name): for label in known_labels: if label['name'] == name: return label return None issue_migrations = [] new_milestones = [] num_new_comments = 0 new_labels = [] for issue in issues: issue_migration = {} new_issue = {} new_issue['title'] = issue['title'] if issue['closed_at'] is not None: new_issue['closed_at'] = issue['closed_at'] new_issue['closed'] = True new_issue['created_at'] = issue['created_at'] new_issue['updated_at'] = issue['updated_at'] # TODO new_issue['assignee'] = issue['assignee'] if config.getboolean( 'settings', 'import-milestone' ) and 'milestone' in issue and issue['milestone'] is not None: # Since the milestones' ids are going to differ, we will compare them by title instead found_milestone = get_milestone_by_title( issue['milestone']['title']) if found_milestone: new_issue['milestone_object'] = found_milestone else: new_milestone = issue['milestone'] new_issue['milestone_object'] = new_milestone known_milestones.append( new_milestone) # Allow it to be found next time new_milestones.append( new_milestone) # Put it in a queue to add it later if config.getboolean( 'settings', 'import-labels' ) and 'labels' in issue and issue['labels'] is not None: new_issue['label_objects'] = [] for issue_label in issue['labels']: found_label = get_label_by_name(issue_label['name']) if found_label: new_issue['label_objects'].append(found_label) else: new_issue['label_objects'].append(issue_label) known_labels.append( issue_label) # Allow it to be found next time new_labels.append( issue_label) # Put it in a queue to add it later comments = [] if config.getboolean( 'settings', 'import-comments' ) and 'comments' in issue and issue['comments'] != 0: num_new_comments += int(issue['comments']) original_comments = get_comments_on_issue('source', issue) for original_comment in original_comments: comment = {} ctemplate_data = {} ctemplate_data['user_name'] = original_comment['user']['login'] ctemplate_data['user_url'] = original_comment['user'][ 'html_url'] ctemplate_data['user_avatar'] = original_comment['user'][ 'avatar_url'] ctemplate_data['date'] = format_date( original_comment['created_at']) ctemplate_data['url'] = original_comment['html_url'] ctemplate_data['body'] = original_comment['body'] comment['body'] = format_comment(ctemplate_data) comment['created_at'] = original_comment['created_at'] comments.append(comment) template_data = {} template_data['user_name'] = issue['user']['login'] template_data['user_url'] = issue['user']['html_url'] template_data['user_avatar'] = issue['user']['avatar_url'] template_data['date'] = format_date(issue['created_at']) template_data['url'] = issue['html_url'] template_data['body'] = issue['body'] if "pull_request" in issue and issue['pull_request'][ 'html_url'] is not None: new_issue['body'] = format_pull_request(template_data) else: new_issue['body'] = format_issue(template_data) issue_migration['issue'] = new_issue issue_migration['comments'] = comments issue_migrations.append(issue_migration) state.current = state.IMPORT_CONFIRMATION print("You are about to add to '" + config.get('target', 'repository') + "':") print(" *", len(issue_migrations), "new issues") print(" *", num_new_comments, "new comments") print(" *", len(new_milestones), "new milestones") print(" *", len(new_labels), "new labels") if not query.yes_no("Are you sure you wish to continue?"): sys.exit() state.current = state.IMPORTING for milestone in new_milestones: result_milestone = import_milestone(milestone) milestone['number'] = result_milestone['number'] milestone['url'] = result_milestone['url'] for label in new_labels: result_label = import_label(label) migration_results = [] for issue_migration in issue_migrations: issue = issue_migration['issue'] if 'milestone_object' in issue: issue['milestone'] = issue['milestone_object']['number'] del issue['milestone_object'] if 'label_objects' in issue: issue_labels = [] for label in issue['label_objects']: issue_labels.append(label['name']) issue['labels'] = issue_labels del issue['label_objects'] migration_result = send_request( 'target', "import/issues", issue_migration, "POST", "application/vnd.github.golden-comet-preview+json") print("Sent import request. Status: '%s'. Status url: '%s'" % (migration_result['status'], migration_result['url'])) migration_results.append(migration_result) state.current = state.IMPORT_COMPLETE # TODO wait for import requests to complete return issue_migrations