aboutsummaryrefslogtreecommitdiffstats
path: root/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/db/state.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/db/state.py')
-rw-r--r--lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/db/state.py151
1 files changed, 0 insertions, 151 deletions
diff --git a/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/db/state.py b/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/db/state.py
deleted file mode 100644
index 52fdd68b..00000000
--- a/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/db/state.py
+++ /dev/null
@@ -1,151 +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
-
-from buildbot.util import json
-import sqlalchemy as sa
-import sqlalchemy.exc
-from buildbot.db import base
-
-class _IdNotFoundError(Exception):
- pass # used internally
-
-class ObjDict(dict):
- pass
-
-class StateConnectorComponent(base.DBConnectorComponent):
- # Documentation is in developer/database.rst
-
- def getObjectId(self, name, class_name):
- # defer to a cached method that only takes one parameter (a tuple)
- return self._getObjectId((name, class_name)
- ).addCallback(lambda objdict : objdict['id'])
-
- @base.cached('objectids')
- def _getObjectId(self, name_class_name_tuple):
- name, class_name = name_class_name_tuple
- def thd(conn):
- objects_tbl = self.db.model.objects
-
- self.check_length(objects_tbl.c.name, name)
- self.check_length(objects_tbl.c.class_name, class_name)
-
- def select():
- q = sa.select([ objects_tbl.c.id ],
- whereclause=((objects_tbl.c.name == name)
- & (objects_tbl.c.class_name == class_name)))
- res = conn.execute(q)
- row = res.fetchone()
- res.close()
- if not row:
- raise _IdNotFoundError
- return row.id
-
- def insert():
- res = conn.execute(objects_tbl.insert(),
- name=name,
- class_name=class_name)
- return res.inserted_primary_key[0]
-
- # we want to try selecting, then inserting, but if the insert fails
- # then try selecting again. We include an invocation of a hook
- # method to allow tests to exercise this particular behavior
- try:
- return ObjDict(id=select())
- except _IdNotFoundError:
- pass
-
- self._test_timing_hook(conn)
-
- try:
- return ObjDict(id=insert())
- except (sqlalchemy.exc.IntegrityError,
- sqlalchemy.exc.ProgrammingError):
- pass
-
- return ObjDict(id=select())
-
- return self.db.pool.do(thd)
-
- class Thunk: pass
- def getState(self, objectid, name, default=Thunk):
- def thd(conn):
- object_state_tbl = self.db.model.object_state
-
- q = sa.select([ object_state_tbl.c.value_json ],
- whereclause=((object_state_tbl.c.objectid == objectid)
- & (object_state_tbl.c.name == name)))
- res = conn.execute(q)
- row = res.fetchone()
- res.close()
-
- if not row:
- if default is self.Thunk:
- raise KeyError("no such state value '%s' for object %d" %
- (name, objectid))
- return default
- try:
- return json.loads(row.value_json)
- except:
- raise TypeError("JSON error loading state value '%s' for %d" %
- (name, objectid))
- return self.db.pool.do(thd)
-
- def setState(self, objectid, name, value):
- def thd(conn):
- object_state_tbl = self.db.model.object_state
-
- try:
- value_json = json.dumps(value)
- except:
- raise TypeError("Error encoding JSON for %r" % (value,))
-
- self.check_length(object_state_tbl.c.name, name)
-
- def update():
- q = object_state_tbl.update(
- whereclause=((object_state_tbl.c.objectid == objectid)
- & (object_state_tbl.c.name == name)))
- res = conn.execute(q, value_json=value_json)
-
- # check whether that worked
- return res.rowcount > 0
-
- def insert():
- conn.execute(object_state_tbl.insert(),
- objectid=objectid,
- name=name,
- value_json=value_json)
-
- # try updating; if that fails, try inserting; if that fails, then
- # we raced with another instance to insert, so let that instance
- # win.
-
- if update():
- return
-
- self._test_timing_hook(conn)
-
- try:
- insert()
- except (sqlalchemy.exc.IntegrityError, sqlalchemy.exc.ProgrammingError):
- pass # someone beat us to it - oh well
-
- return self.db.pool.do(thd)
-
- def _test_timing_hook(self, conn):
- # called so tests can simulate another process inserting a database row
- # at an inopportune moment
- pass
-