diff options
Diffstat (limited to 'lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/db/buildsets.py')
-rw-r--r-- | lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/db/buildsets.py | 202 |
1 files changed, 0 insertions, 202 deletions
diff --git a/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/db/buildsets.py b/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/db/buildsets.py deleted file mode 100644 index b379198e..00000000 --- a/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/db/buildsets.py +++ /dev/null @@ -1,202 +0,0 @@ -# This file is part of Buildbot. Buildbot is free software: you can -# redistribute it and/or modify it under the terms of the GNU General Public -# License as published by the Free Software Foundation, version 2. -# -# This program is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -# details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Copyright Buildbot Team Members - -""" -Support for buildsets in the database -""" - -import sqlalchemy as sa -from twisted.internet import reactor -from buildbot.util import json -from buildbot.db import base -from buildbot.util import epoch2datetime, datetime2epoch - -class BsDict(dict): - pass - -class BuildsetsConnectorComponent(base.DBConnectorComponent): - # Documentation is in developer/database.rst - - def addBuildset(self, sourcestampsetid, reason, properties, builderNames, - external_idstring=None, _reactor=reactor): - def thd(conn): - buildsets_tbl = self.db.model.buildsets - submitted_at = _reactor.seconds() - - self.check_length(buildsets_tbl.c.reason, reason) - self.check_length(buildsets_tbl.c.external_idstring, - external_idstring) - - transaction = conn.begin() - - # insert the buildset itself - r = conn.execute(buildsets_tbl.insert(), dict( - sourcestampsetid=sourcestampsetid, submitted_at=submitted_at, - reason=reason, complete=0, complete_at=None, results=-1, - external_idstring=external_idstring)) - bsid = r.inserted_primary_key[0] - - # add any properties - if properties: - bs_props_tbl = self.db.model.buildset_properties - - inserts = [ - dict(buildsetid=bsid, property_name=k, - property_value=json.dumps([v,s])) - for k,(v,s) in properties.iteritems() ] - for i in inserts: - self.check_length(bs_props_tbl.c.property_name, - i['property_name']) - self.check_length(bs_props_tbl.c.property_value, - i['property_value']) - - conn.execute(bs_props_tbl.insert(), inserts) - - # and finish with a build request for each builder. Note that - # sqlalchemy and the Python DBAPI do not provide a way to recover - # inserted IDs from a multi-row insert, so this is done one row at - # a time. - brids = {} - br_tbl = self.db.model.buildrequests - ins = br_tbl.insert() - for buildername in builderNames: - self.check_length(br_tbl.c.buildername, buildername) - r = conn.execute(ins, - dict(buildsetid=bsid, buildername=buildername, priority=0, - claimed_at=0, claimed_by_name=None, - claimed_by_incarnation=None, complete=0, results=-1, - submitted_at=submitted_at, complete_at=None)) - - brids[buildername] = r.inserted_primary_key[0] - - transaction.commit() - - return (bsid, brids) - return self.db.pool.do(thd) - - def completeBuildset(self, bsid, results, complete_at=None, - _reactor=reactor): - if complete_at is not None: - complete_at = datetime2epoch(complete_at) - else: - complete_at = _reactor.seconds() - - def thd(conn): - tbl = self.db.model.buildsets - - q = tbl.update(whereclause=( - (tbl.c.id == bsid) & - ((tbl.c.complete == None) | (tbl.c.complete != 1)))) - res = conn.execute(q, - complete=1, - results=results, - complete_at=complete_at) - - if res.rowcount != 1: - raise KeyError - return self.db.pool.do(thd) - - def getBuildset(self, bsid): - def thd(conn): - bs_tbl = self.db.model.buildsets - q = bs_tbl.select(whereclause=(bs_tbl.c.id == bsid)) - res = conn.execute(q) - row = res.fetchone() - if not row: - return None - return self._row2dict(row) - return self.db.pool.do(thd) - - def getBuildsets(self, complete=None): - def thd(conn): - bs_tbl = self.db.model.buildsets - q = bs_tbl.select() - if complete is not None: - if complete: - q = q.where(bs_tbl.c.complete != 0) - else: - q = q.where((bs_tbl.c.complete == 0) | - (bs_tbl.c.complete == None)) - res = conn.execute(q) - return [ self._row2dict(row) for row in res.fetchall() ] - return self.db.pool.do(thd) - - def getRecentBuildsets(self, count, branch=None, repository=None, - complete=None): - def thd(conn): - bs_tbl = self.db.model.buildsets - ss_tbl = self.db.model.sourcestamps - j = sa.join(self.db.model.buildsets, - self.db.model.sourcestampsets) - j = j.join(self.db.model.sourcestamps) - q = sa.select(columns=[bs_tbl], from_obj=[j], - distinct=True) - q = q.order_by(sa.desc(bs_tbl.c.submitted_at)) - q = q.limit(count) - - if complete is not None: - if complete: - q = q.where(bs_tbl.c.complete != 0) - else: - q = q.where((bs_tbl.c.complete == 0) | - (bs_tbl.c.complete == None)) - if branch: - q = q.where(ss_tbl.c.branch == branch) - if repository: - q = q.where(ss_tbl.c.repository == repository) - res = conn.execute(q) - return list(reversed([ self._row2dict(row) - for row in res.fetchall() ])) - return self.db.pool.do(thd) - - def getBuildsetProperties(self, buildsetid): - """ - Return the properties for a buildset, in the same format they were - given to L{addBuildset}. - - Note that this method does not distinguish a nonexistent buildset from - a buildset with no properties, and returns C{{}} in either case. - - @param buildsetid: buildset ID - - @returns: dictionary mapping property name to (value, source), via - Deferred - """ - def thd(conn): - bsp_tbl = self.db.model.buildset_properties - q = sa.select( - [ bsp_tbl.c.property_name, bsp_tbl.c.property_value ], - whereclause=(bsp_tbl.c.buildsetid == buildsetid)) - l = [] - for row in conn.execute(q): - try: - properties = json.loads(row.property_value) - l.append((row.property_name, - tuple(properties))) - except ValueError: - pass - return dict(l) - return self.db.pool.do(thd) - - def _row2dict(self, row): - def mkdt(epoch): - if epoch: - return epoch2datetime(epoch) - return BsDict(external_idstring=row.external_idstring, - reason=row.reason, sourcestampsetid=row.sourcestampsetid, - submitted_at=mkdt(row.submitted_at), - complete=bool(row.complete), - complete_at=mkdt(row.complete_at), results=row.results, - bsid=row.id) |