def get_repo(self, force_refresh=False): """ Using the configuration for this GitHubStatsRepository instance, fetch the repo object from cache, if possible, else, from GitHub. :param force_refresh: Set to force an update from GitHub. :type force_refresh: bool :rtype: GitHubStatsRepository """ key = self.get_cache_key() g = Github(self.token) if force_refresh: repo = None else: pickled = cache.get(key, None) if pickled: file_str = StringIO.StringIO(pickled) repo = g.load(file_str) else: repo = None if repo is None: if force_refresh: logger.info('Forced refresh') else: logger.info('Natural refresh') repo = g.get_repo(self.full_name) output = StringIO.StringIO() g.dump(repo, output) duration = CACHE_DURATION * 2 if force_refresh else CACHE_DURATION cache.set(key, output.getvalue(), duration) return repo