예제 #1
0
파일: core.py 프로젝트: monksy/github-badge
    def calculate_user_values(self, username):
        memcache_data_key = '!data!{}'.format(username)
        values = json.loads(memcache.get(memcache_data_key) or '{}')
        if values:
            return values

        try:
            github_user = User.get(username)
        except pyresto.Error:
            self.response.set_status(404)  # not 100% sure but good enough
            self.render('errors/404')
            return
        except Exception as err:
            self.response.set_status(500)
            logging.error(err)
            return

        languages = User.sort_languages(github_user.language_stats)
        fork_count = sum(1 for repo in github_user.repos if repo.fork)

        today = datetime.datetime.today()
        recent_than = today - datetime.timedelta(days=conf.RECENT_DAYS)
        own_commits = github_user.get_latest_commits(recent_than)

        commits_by_repo = reduce(self.reduce_commits_by_repo,
                                 own_commits, dict())
        if commits_by_repo:
            last_project = max(commits_by_repo, key=commits_by_repo.get)
        else:
            last_project = ''
        logging.info(commits_by_repo)
        if last_project:
            last_project_url = [repo.html_url for repo in github_user.repos
                                if repo.name == last_project][0]
        else:
            last_project_url = None

        commits_by_date = reduce(self.reduce_commits_by_date,
                                 own_commits, dict())
        range = daterange(recent_than, today)
        for d in range:
            key = unicode(d.date())
            if key not in commits_by_date:
                commits_by_date[key] = 0

        commit_data = [commits_by_date[d] for d in sorted(commits_by_date)]
        max_commits = max(commit_data)
        logging.debug('Commit data %s', str(commit_data))
        commit_sparkline = data_uri(sparklines.impulse(commit_data,
                                                       below_color='SlateGray',
                                                       width=3,
                                                       dmin=0,
                                                       dmax=max(commit_data)))

        try:  # try to embed the scaled-down user avatar
            avatar = Image(urllib2.urlopen(github_user.avatar_url).read())
            avatar.resize(24, 24)
            github_user.avatar_url = data_uri(avatar.execute_transforms())
        except (AttributeError, ValueError, urllib2.URLError):
            pass

        user_info = dict((k, v) for k, v in github_user.__dict__.iteritems()
                         if k[0] != '_')

        values = {'user': user_info,
                  'own_repos': len(github_user.repos) - fork_count,
                  'fork_repos': fork_count,
                  'languages': languages,
                  'project_followers': github_user.project_followers -
                  len(github_user.self_watched),
                  'commit_sparkline': commit_sparkline,
                  'max_commits': max_commits,
                  'last_project': last_project,
                  'last_project_url': last_project_url,
                  'days': conf.RECENT_DAYS
                  }

        if not memcache.set(memcache_data_key, json.dumps(values),
                            conf.MEMCACHE_EXPIRATION):
            logging.error('Memcache set failed for user data %s', username)

        return values
예제 #2
0
    def calculate_user_values(self, username):
        memcache_data_key = '!data!{}'.format(username)
        values = json.loads(memcache.get(memcache_data_key) or '{}')
        if values:
            return values

        try:
            github_user = User.get(username)
        except pyresto.Error:
            self.response.set_status(404)  # not 100% sure but good enough
            self.render('errors/404')
            return
        except Exception as err:
            self.response.set_status(500)
            logging.error(err)
            return

        languages = User.sort_languages(github_user.language_stats)
        fork_count = sum((1 for repo in github_user.repos if repo.fork))

        today = datetime.datetime.today()
        recent_than = today - datetime.timedelta(days=RECENT_DAYS)
        own_commits = github_user.get_latest_commits(recent_than)

        commits_by_repo = reduce(self.reduce_commits_by_repo,
                                 own_commits, dict())
        if commits_by_repo:
            last_project = max(commits_by_repo, key=commits_by_repo.get)
        else:
            last_project = ''
        logging.info(commits_by_repo)
        if last_project:
            last_project_url = [repo.html_url for repo in github_user.repos
                                if repo.name == last_project][0]
        else:
            last_project_url = None

        commits_by_date = reduce(self.reduce_commits_by_date,
                                 own_commits, dict())
        range = daterange(recent_than, today)
        for d in range:
            key = unicode(d.date())
            if key not in commits_by_date:
                commits_by_date[key] = 0

        commit_data = [commits_by_date[d] for d in sorted(commits_by_date)]
        max_commits = max(commit_data)
        logging.debug('Commit data %s', str(commit_data))
        commit_sparkline = 'data:image/png;base64,' +\
                           base64.b64encode(
                               sparklines.impulse(commit_data,
                                                  below_color='SlateGray',
                                                  width=3,
                                                  dmin=0,
                                                  dmax=max(commit_data)
                               ),
                           )

        values = {'user': github_user.__dict__,
                  'own_repos': github_user.public_repos - fork_count,
                  'fork_repos': fork_count,
                  'languages': languages,
                  'project_followers': github_user.project_followers -\
                                       github_user.public_repos,
                  'commit_sparkline': commit_sparkline,
                  'max_commits': max_commits,
                  'last_project': last_project,
                  'last_project_url': last_project_url,
                  'days': RECENT_DAYS
        }

        if not memcache.set(memcache_data_key, json.dumps(values),
                            MEMCACHE_EXPIRATION):
            logging.error('Memcache set failed for user data %s', username)

        return values
예제 #3
0
    def calculate_user_values(self, username):
        memcache_data_key = '!data!{}'.format(username)
        values = json.loads(memcache.get(memcache_data_key) or '{}')
        if values:
            return values

        try:
            github_user = User.get(username)
        except pyresto.PyrestoException:
            self.response.set_status(404)  # not 100% sure but good enough
            self.render('errors/404')
            return
        except Exception as err:
            self.response.set_status(500)
            logging.error(err)
            return

        languages = User.sort_languages(github_user.language_stats)
        fork_count = sum(1 for repo in github_user.repos if repo.fork)

        today = datetime.datetime.today()
        days_to_go_back = self.app.config['RECENT_DAYS']

        recent_than = today - datetime.timedelta(days=days_to_go_back)
        own_commits = github_user.get_latest_commits(recent_than)

        commits_by_repo = reduce(self.reduce_commits_by_repo, own_commits,
                                 dict())
        if commits_by_repo:
            last_project_id = max(commits_by_repo, key=commits_by_repo.get)
        else:
            last_project_id = None
        logging.info(commits_by_repo)
        if last_project_id:
            last_project = [
                repo for repo in github_user.repos
                if repo.full_name == last_project_id
            ][0]

            last_project_name = last_project.name
            last_project_url = last_project.html_url
        else:
            last_project_name = ''
            last_project_url = ''

        commits_by_date = reduce(self.reduce_commits_by_date, own_commits,
                                 dict())
        range = daterange(recent_than, today)
        for d in range:
            key = unicode(d.date())
            if key not in commits_by_date:
                commits_by_date[key] = 0

        commit_data = [commits_by_date[d] for d in sorted(commits_by_date)]
        max_commits = max(commit_data)
        logging.debug('Commit data %s', str(commit_data))
        commit_sparkline = data_uri(
            sparklines.impulse(commit_data,
                               below_color='SlateGray',
                               width=3,
                               dmin=0,
                               dmax=max(commit_data)))

        try:  # try to embed the scaled-down user avatar
            avatar = Image(urllib2.urlopen(github_user.avatar_url).read())
            avatar.resize(24, 24)
            github_user.avatar_url = data_uri(avatar.execute_transforms())
        except (AttributeError, ValueError, urllib2.URLError):
            pass

        user_info = dict(
            (k, v) for k, v in github_user.__dict__.iteritems() if k[0] != '_')

        values = {
            'user':
            user_info,
            'own_repos':
            len(github_user.repos) - fork_count,
            'fork_repos':
            fork_count,
            'languages':
            languages,
            'project_followers':
            github_user.project_followers - len(github_user.self_watched),
            'commit_sparkline':
            commit_sparkline,
            'max_commits':
            max_commits,
            'last_project':
            last_project_name,
            'last_project_url':
            last_project_url,
            'days':
            conf.RECENT_DAYS
        }

        if not memcache.set(memcache_data_key, json.dumps(values),
                            self.app.config['MEMCACHE_EXPIRATION']):
            logging.error('Memcache set failed for user data %s', username)

        return values
예제 #4
0
    def calculate_user_values(self, username):
        memcache_data_key = "!data!{}".format(username)
        values = json.loads(memcache.get(memcache_data_key) or "{}")
        if values:
            return values

        try:
            github_user = User.get(username)
        except pyresto.PyrestoException:
            self.response.set_status(404)  # not 100% sure but good enough
            self.render("errors/404")
            return
        except Exception as err:
            self.response.set_status(500)
            logging.error(err)
            return

        languages = User.sort_languages(github_user.language_stats)
        fork_count = sum(1 for repo in github_user.repos if repo.fork)

        today = datetime.datetime.today()
        days_to_go_back = self.app.config["RECENT_DAYS"]

        recent_than = today - datetime.timedelta(days=days_to_go_back)
        own_commits = github_user.get_latest_commits(recent_than)

        commits_by_repo = reduce(self.reduce_commits_by_repo, own_commits, dict())
        if commits_by_repo:
            last_project_id = max(commits_by_repo, key=commits_by_repo.get)
        else:
            last_project_id = None
        logging.info(commits_by_repo)
        if last_project_id:
            last_project = [repo for repo in github_user.repos if repo.full_name == last_project_id][0]

            last_project_name = last_project.name
            last_project_url = last_project.html_url
        else:
            last_project_name = ""
            last_project_url = ""

        commits_by_date = reduce(self.reduce_commits_by_date, own_commits, dict())
        range = daterange(recent_than, today)
        for d in range:
            key = unicode(d.date())
            if key not in commits_by_date:
                commits_by_date[key] = 0

        commit_data = [commits_by_date[d] for d in sorted(commits_by_date)]
        max_commits = max(commit_data)
        logging.debug("Commit data %s", str(commit_data))
        commit_sparkline = data_uri(
            sparklines.impulse(commit_data, below_color="SlateGray", width=3, dmin=0, dmax=max(commit_data))
        )

        try:  # try to embed the scaled-down user avatar
            avatar = Image(urllib2.urlopen(github_user.avatar_url).read())
            avatar.resize(24, 24)
            github_user.avatar_url = data_uri(avatar.execute_transforms())
        except (AttributeError, ValueError, urllib2.URLError):
            pass

        user_info = dict((k, v) for k, v in github_user.__dict__.iteritems() if k[0] != "_")

        values = {
            "user": user_info,
            "own_repos": len(github_user.repos) - fork_count,
            "fork_repos": fork_count,
            "languages": languages,
            "project_followers": github_user.project_followers - len(github_user.self_watched),
            "commit_sparkline": commit_sparkline,
            "max_commits": max_commits,
            "last_project": last_project_name,
            "last_project_url": last_project_url,
            "days": conf.RECENT_DAYS,
        }

        if not memcache.set(memcache_data_key, json.dumps(values), self.app.config["MEMCACHE_EXPIRATION"]):
            logging.error("Memcache set failed for user data %s", username)

        return values
예제 #5
0
    def calculate_user_values(self, username):
        memcache_data_key = '!data!{}'.format(username)
        values = json.loads(memcache.get(memcache_data_key) or '{}')
        if values:
            return values

        try:
            github_user = User.get(username)
        except pyresto.Error:
            self.response.set_status(404)  # not 100% sure but good enough
            self.render('errors/404')
            return
        except Exception as err:
            self.response.set_status(500)
            logging.error(err)
            return

        languages = User.sort_languages(github_user.language_stats)
        fork_count = sum((1 for repo in github_user.repos if repo.fork))

        today = datetime.datetime.today()
        recent_than = today - datetime.timedelta(days=RECENT_DAYS)
        own_commits = github_user.get_latest_commits(recent_than)

        commits_by_repo = reduce(self.reduce_commits_by_repo, own_commits,
                                 dict())
        if commits_by_repo:
            last_project = max(commits_by_repo, key=commits_by_repo.get)
        else:
            last_project = ''
        logging.info(commits_by_repo)
        if last_project:
            last_project_url = [
                repo.html_url for repo in github_user.repos
                if repo.name == last_project
            ][0]
        else:
            last_project_url = None

        commits_by_date = reduce(self.reduce_commits_by_date, own_commits,
                                 dict())
        range = daterange(recent_than, today)
        for d in range:
            key = unicode(d.date())
            if key not in commits_by_date:
                commits_by_date[key] = 0

        commit_data = [commits_by_date[d] for d in sorted(commits_by_date)]
        max_commits = max(commit_data)
        logging.debug('Commit data %s', str(commit_data))
        commit_sparkline = 'data:image/png;base64,' +\
                           base64.b64encode(
                               sparklines.impulse(commit_data,
                                                  below_color='SlateGray',
                                                  width=3,
                                                  dmin=0,
                                                  dmax=max(commit_data)
                               ),
                           )

        values = {'user': github_user.__dict__,
                  'own_repos': github_user.public_repos - fork_count,
                  'fork_repos': fork_count,
                  'languages': languages,
                  'project_followers': github_user.project_followers -\
                                       github_user.public_repos,
                  'commit_sparkline': commit_sparkline,
                  'max_commits': max_commits,
                  'last_project': last_project,
                  'last_project_url': last_project_url,
                  'days': RECENT_DAYS
        }

        if not memcache.set(memcache_data_key, json.dumps(values),
                            MEMCACHE_EXPIRATION):
            logging.error('Memcache set failed for user data %s', username)

        return values