Add interface to query prerelease related info
authorLin Yang <lin.a.yang@intel.com>
Wed, 29 May 2013 09:50:59 +0000 (17:50 +0800)
committerGerrit Code Review <gerrit2@otctools.jf.intel.com>
Wed, 29 May 2013 10:10:42 +0000 (03:10 -0700)
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 <lin.a.yang@intel.com>
common/backenddb.py

index 08b8feb..ad883e0 100644 (file)
@@ -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