diff options
Diffstat (limited to 'buildbot_gentoo_ci/db/packages.py')
-rw-r--r-- | buildbot_gentoo_ci/db/packages.py | 147 |
1 files changed, 146 insertions, 1 deletions
diff --git a/buildbot_gentoo_ci/db/packages.py b/buildbot_gentoo_ci/db/packages.py index a22b9d8..79ae685 100644 --- a/buildbot_gentoo_ci/db/packages.py +++ b/buildbot_gentoo_ci/db/packages.py @@ -65,7 +65,10 @@ class PackagesConnectorComponent(base.DBConnectorComponent): r = conn.execute(q, dict(name=name, repository_uuid=repository_uuid, category_uuid=category_uuid)) - except (sa.exc.IntegrityError, sa.exc.ProgrammingError): + except Exception as e: + print(type(e)) + print(e.args) + print(e) uuid = None else: uuid = r.inserted_primary_key[0] @@ -80,3 +83,145 @@ class PackagesConnectorComponent(base.DBConnectorComponent): repository_uuid=row.repository_uuid, category_uuid=row.category_uuid ) + + @defer.inlineCallbacks + def getPackageMetadataByPackageUuid(self, package_uuid): + def thd(conn): + tbl = self.db.model.packages_metadata + q = tbl.select() + q = q.where(tbl.c.package_uuid == package_uuid) + res = conn.execute(q) + row = res.fetchone() + if not row: + return None + return self._row2dict_metadata(conn, row) + res = yield self.db.pool.do(thd) + return res + + @defer.inlineCallbacks + def addMetadata(self, package_uuid, sha256): + def thd(conn, no_recurse=False): + try: + tbl = self.db.model.packages_metadata + q = tbl.insert() + r = conn.execute(q, dict(package_uuid=package_uuid, + sha256=sha256 + )) + except Exception as e: + print(type(e)) + print(e.args) + print(e) + res = None + else: + res = r.inserted_primary_key[0] + return res + res = yield self.db.pool.do(thd) + return res + + def _row2dict_metadata(self, conn, row): + return dict( + id=row.id, + package_uuid=row.package_uuid, + sha256=row.sha256, + ) + + @defer.inlineCallbacks + def addEmail(self, email): + def thd(conn, no_recurse=False): + try: + tbl = self.db.model.emails + q = tbl.insert() + r = conn.execute(q, dict(email=email)) + except Exception as e: + print(type(e)) + print(e.args) + print(e) + res = None + else: + res = r.inserted_primary_key[0] + return res + res = yield self.db.pool.do(thd) + return res + + @defer.inlineCallbacks + def addPackageEmail(self, email_id, package_uuid, mail_type, proxied): + def thd(conn, no_recurse=False): + try: + tbl = self.db.model.packages_emails + q = tbl.insert() + r = conn.execute(q, dict(email_id=email_id, + package_uuid=package_uuid, + mail_type=mail_type, + proxied=proxied + )) + except Exception as e: + print(type(e)) + print(e.args) + print(e) + res = None + else: + res = r.inserted_primary_key[0] + return res + res = yield self.db.pool.do(thd) + return res + + @defer.inlineCallbacks + def getEmailIdByEmail(self, email): + def thd(conn): + tbl = self.db.model.emails + q = tbl.select() + q = q.where(tbl.c.email == email) + res = conn.execute(q) + row = res.fetchone() + if not row: + return None + return self._row2dict_email(conn, row) + res = yield self.db.pool.do(thd) + return res + + @defer.inlineCallbacks + def getEmailByEmailId(self, email_id): + def thd(conn): + tbl = self.db.model.emails + q = tbl.select() + q = q.where(tbl.c.id == email_id) + res = conn.execute(q) + row = res.fetchone() + if not row: + return None + return self._row2dict_email(conn, row) + res = yield self.db.pool.do(thd) + return res + + @defer.inlineCallbacks + def getEmailsIdsByPackageUuid(self, package_uuid): + def thd(conn): + tbl = self.db.model.packages_emails + q = tbl.select() + q = q.where(tbl.c.package_uuid == package_uuid) + return [self._row2dict_package_email(conn, row) + for row in conn.execute(q).fetchall()] + res = yield self.db.pool.do(thd) + return res + + @defer.inlineCallbacks + def delPackageEmail(self, package_uuid): + def thd(conn, no_recurse=False): + tbl = self.db.model.packages_emails + conn.execute(tbl.delete( + whereclause=((tbl.c.package_uuid == package_uuid)))) + return self.db.pool.do(thd) + + def _row2dict_email(self, conn, row): + return dict( + id=row.id, + email=row.email, + ) + def _row2dict_package_email(self, conn, row): + return dict( + id=row.id, + email_id=row.email_id, + package_uuid=row.package_uuid, + type=row.type, + proxied=row.proxied, + ) |