def get_issue_scores(repo_username, repo_id): try: data = { 'repo_username': repo_username, 'repo_id': repo_id, 'repo_url': 'https://github.com/%s/%s' % (repo_username, repo_id), 'repo_issues_url': 'https://github.com/%s/%s/issues' % (repo_username, repo_id), 'issues': [] } open_issues = github_api.fetch_open_issues(repo_username, repo_id) if not open_issues or not isinstance(open_issues, list): return { 'error': 'Unable to fetch open issues: %s/%s' % (repo_username, repo_id) } for issue in open_issues: cache_key = get_issue_cache_key(repo_username, repo_id, issue.get('number')) cached_data = util.get_cached_data(cache_key) if cached_data: milestone = issue.get('milestone') if milestone: cached_data['milestone'] = milestone.get('title', '') or '' if issue.get('pull_request') is not None: cached_data['pull_request'] = True data['issues'].append(cached_data) continue db_data = models.get_issue(repo_username, repo_id, issue.get('number')) if db_data: issue_score = db_data.to_dict() milestone = issue.get('milestone') if milestone: issue_score['milestone'] = milestone.get('title', '') or '' if issue.get('pull_request') is not None: issue_score['pull_request'] = True data['issues'].append(issue_score) continue print 'could not find issue calculation: %s' % (cache_key) rank_inc = 1 data['issues'] = sorted(data['issues'], key=lambda k: k['score'], reverse=True) for issue in data['issues']: issue['rank'] = rank_inc issue['repo_username'] = repo_username issue['repo_id'] = repo_id issue['repo_issue_url'] = 'https://github.com/%s/%s/issues/%s' % (repo_username, repo_id, issue.get('number')) rank_inc += 1 return data except Exception as ex: print 'get_issue_scores error: %s' % ex return { 'error': '%s' % ex }
def run_maintenance_tasks(): """ maintenance tasks to run on older issues. """ organization = 'driftyco' print "Running daily tasks, %s" % (organization) try: repos = github_api.fetch_repos_with_issues(organization) for repo in repos: repo_username = repo.get('repo_username') repo_id = repo.get('repo_id') print 'Running daily tasks: %s/%s' % (repo_username, repo_id) open_issues = [] try: open_issues = github_api.fetch_open_issues(repo_username, repo_id) if not open_issues or not isinstance(open_issues, list) or not len(open_issues): print 'No issues for %s/%s' % (repo_username, repo_id) continue for issue in open_issues: issue_maintenance(repo_username, repo_id, issue) except Exception as ex: print 'run_maintenance_tasks repo error, %s/%s: %s' % (repo_username, repo_id, ex) print "open issues, %s/%s: %s" % (repo_username, repo_id, len(open_issues)) set_last_update() except Exception as ex2: print 'run_maintenance_tasks error: %s' % (ex2)