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
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
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
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
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