def get_or_create(self, key, creation_function, **kw): r = mc.get(key) if r is None: r = creation_function() expiretime = kw.get("timeout", ONE_HOUR) mc.set(key, r, expiretime) return r
def get_release(repository): '''get latest successed release info return: a dict with keys {annotate, changesets, message, first_rev, last_rev, pre_release_rev, status, project_source, release_manger, release_time, url} ''' if not repository.startswith('http:'): repository = 'http://code.dapps.douban.com/' + repository if not repository.endswith('.git'): repository = repository + '.git' key = MC_KEY_REPOSITORY_RELEASE % repository info = mc.get(key) if info is not None: return info try: info = fetch_release(repository) mc.set(key, info, ONE_DAY) return info except: return {}
def get_or_create(self, key, creation_function, **kw): r = mc.get(key) if r is None: r = creation_function() expiretime = kw.get('timeout', ONE_HOUR) mc.set(key, r, expiretime) return r
def up_to_date(self): # Already builds the source last_commit_hash = mc.get(PROJECT_BUILD_HASH_MC_KEY % ( self.project.id, self.builder_name)) if not last_commit_hash: return False repo = self.project.repo commit_len = len(repo.get_commits( self.builder.commit_hex, last_commit_hash)) if not commit_len: return True last_tree_hash = mc.get(PROJECT_BUILD_TREE_HASH_MC_KEY % ( self.project.id, self.builder_name)) if not last_tree_hash: return False if last_tree_hash == self.builder.tree_hex: return True return False
def award(self, item_id, reason=None, kind=KIND_USER): params = (item_id, self.id, reason, kind, datetime.now()) store.execute( "insert into badge_item(item_id, badge_id, reason, kind, date) " "values(%s, %s, %s, %s, %s)", params) store.commit() mc_key = MC_NEW_BADGE % (item_id, kind) badges = mc.get(mc_key) or [] badges.append(str(self.id)) mc.set(mc_key, badges)
def need_rebuild(self): last_tree_hash = mc.get(LAST_TREE_HASH_MC_KEY % (self.project_id, self.builder)) if self.config['checkout_root']: current_tree_hash = _tree_hash(self.project_id, '') else: current_tree_hash = _tree_hash(self.project_id, self.dir) if not last_tree_hash: return True if last_tree_hash != current_tree_hash: return True return False
def need_rebuild(self): last_tree_hash = mc.get( LAST_TREE_HASH_MC_KEY % (self.project_id, self.builder)) if self.config['checkout_root']: current_tree_hash = _tree_hash(self.project_id, '') else: current_tree_hash = _tree_hash(self.project_id, self.dir) if not last_tree_hash: return True if last_tree_hash != current_tree_hash: return True return False
def get_unreleased_commit_num(project): last_release_info = get_release(project.repository) from_ref = last_release_info['last_rev'] if last_release_info else None key = MC_KEY_UNRELEASE_COMMITS % (project.id, project.default_sha, from_ref) num = mc.get(key) if num is None: commits = project.repo.get_commits(project.default_branch, from_ref=from_ref, max_count=100) num = len(commits) mc.set(key, num, ONE_DAY) return num
def check(cls, apikey, code): key = cls.__mc_key(apikey, code) user_id = mc.get(key) if user_id: mc.delete(key) return user_id
def get_value(self): return mc.get(self.mc_key)
def get(self, key, **kw): return mc.get(key)
def count(self, target_id): return mc.get(self.mc_key(target_id))
def get_new_badges(cls, item_id, kind=KIND_USER): badges = mc.get(MC_NEW_BADGE % (item_id, kind)) or [] return [cls.get(bid) for bid in badges]
def confirm(cls, user_id, cid): key = OAUTH_CONFIRM % (user_id, cid) if mc.get(key): mc.delete(key) return True
def last_build_info(self): return mc.get(LAST_BUILD_MC_KEY % self.project_id)