From bd75769e9cf1074f45d5b7f64619f8c3bffd5c8d Mon Sep 17 00:00:00 2001 From: Lin Yang Date: Wed, 29 May 2013 17:50:59 +0800 Subject: [PATCH] Add interface to query prerelease related info 1. Support List and String type in redis, besides Dict, to support more type backend info 2. Add interface get_project_data to query prerelease info Change-Id: I6718930435353e7fe4ff110e2cb65100544a98e4 Signed-off-by: Lin Yang --- common/backenddb.py | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 87 insertions(+), 3 deletions(-) diff --git a/common/backenddb.py b/common/backenddb.py index 08b8feb..ad883e0 100644 --- a/common/backenddb.py +++ b/common/backenddb.py @@ -50,11 +50,25 @@ class Entity(object): return self._db.exists('%s%s' % (self._prefix, key)) def __getitem__(self, key): - return self._db.hgetall("%s%s" % (self._prefix, key)) - #self._db.get('%s%s' % (self._prefix, key)) + key = "%s%s" % (self._prefix, key) + + if self._db.type(key) == 'hash': + return self._db.hgetall(key) + elif self._db.type(key) == 'list': + return self._db.lrange(key, 0, -1) + elif self._db.type(key) == 'string': + return self._db.get(key) def __setitem__(self, key, value): - self._db.hmset("%s%s" % (self._prefix, key), value) + key = "%s%s" % (self._prefix, key) + + if isinstance(value, dict): + self._db.hmset(key, value) + elif isinstance(value, list): + for item in value: + self._db.rpush(key, item) + else: + self._db.set(key, value) def delete(self, key): """Remove key starting with the prefix from the db.""" @@ -127,3 +141,73 @@ class BackendDB(): for name in db_list.difference(names): db_repos.delete(name) + def get_release_ids(self): + """Return release id entity object.""" + return Entity(self._redis, "releaseid:") + + def get_release_id(self, key): + """Return latest release id.""" + return self.get_release_ids()[key] + + def get_repo(self, name): + """Return all info of one repo conf. + + Args: + name (str): the obs project name, like "Tizen:Main" + + """ + db_repos = self.get_repos() + + for repo_name in db_repos: + repo = db_repos[repo_name] + if repo['Project'] == name: + return repo + + def get_repo_by_name(self, name): + """Return all info of one repo conf. + + Args: + name (str): the repo name in repos.yaml, like "Tizen-main" + + """ + return self.get_repos()[name] + + def get_repo_data(self, name): + """Return all need info of repo conf. + + Args: + name (str): the obs project name, like "Tizen:Main" + + """ + data = {} + + repo = self.get_repo(name) + release_id = self.get_release_id('%s-%s' % (repo['PartOf'], + repo['Release'])) + + data['latest_snapshot'] = '%s_%s' % (repo['Release'], release_id) + snapshot_dir = repo['SnapshotDir'] + data['snapshot_dir'] = snapshot_dir[snapshot_dir.find('snapshots/'):] + data['prerelease_dir'] = data['snapshot_dir'].replace('snapshots/', 'prerelease/', 1) + + return data + + def get_repo_data_by_name(self, name): + """Return all need info of repo conf. + + Args: + name (str): the repo name in repos.yaml, like "Tizen-main" + + """ + data = {} + + repo = self.get_repo_by_name(name) + release_id = self.get_release_id('%s-%s' % (repo['PartOf'], + repo['Release'])) + + data['latest_snapshot'] = '%s_%s' % (repo['Release'], release_id) + snapshot_dir = repo['SnapshotDir'] + data['snapshot_dir'] = snapshot_dir[snapshot_dir.find('snapshots/'):] + data['prerelease_dir'] = data['snapshot_dir'].replace('snapshots/', 'prerelease/', 1) + + return data -- 2.7.4