aboutsummaryrefslogtreecommitdiffstats
path: root/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/db/users.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/db/users.py')
-rw-r--r--lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/db/users.py233
1 files changed, 0 insertions, 233 deletions
diff --git a/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/db/users.py b/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/db/users.py
deleted file mode 100644
index 7e32902c..00000000
--- a/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/db/users.py
+++ /dev/null
@@ -1,233 +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
-
-import sqlalchemy as sa
-from sqlalchemy.sql.expression import and_
-
-from buildbot.db import base
-
-class UsDict(dict):
- pass
-
-class UsersConnectorComponent(base.DBConnectorComponent):
- # Documentation is in developer/database.rst
-
- def findUserByAttr(self, identifier, attr_type, attr_data, _race_hook=None):
- def thd(conn, no_recurse=False):
- tbl = self.db.model.users
- tbl_info = self.db.model.users_info
-
- self.check_length(tbl.c.identifier, identifier)
- self.check_length(tbl_info.c.attr_type, attr_type)
- self.check_length(tbl_info.c.attr_data, attr_data)
-
- # try to find the user
- q = sa.select([ tbl_info.c.uid ],
- whereclause=and_(tbl_info.c.attr_type == attr_type,
- tbl_info.c.attr_data == attr_data))
- rows = conn.execute(q).fetchall()
-
- if rows:
- return rows[0].uid
-
- _race_hook and _race_hook(conn)
-
- # try to do both of these inserts in a transaction, so that both
- # the new user and the corresponding attributes appear at the same
- # time from the perspective of other masters.
- transaction = conn.begin()
- try:
- r = conn.execute(tbl.insert(), dict(identifier=identifier))
- uid = r.inserted_primary_key[0]
-
- conn.execute(tbl_info.insert(),
- dict(uid=uid, attr_type=attr_type,
- attr_data=attr_data))
-
- transaction.commit()
- except (sa.exc.IntegrityError, sa.exc.ProgrammingError):
- transaction.rollback()
-
- # try it all over again, in case there was an overlapping,
- # identical call to findUserByAttr, but only retry once.
- if no_recurse:
- raise
- return thd(conn, no_recurse=True)
-
- return uid
- d = self.db.pool.do(thd)
- return d
-
- @base.cached("usdicts")
- def getUser(self, uid):
- def thd(conn):
- tbl = self.db.model.users
- tbl_info = self.db.model.users_info
-
- q = tbl.select(whereclause=(tbl.c.uid == uid))
- users_row = conn.execute(q).fetchone()
-
- if not users_row:
- return None
-
- # make UsDict to return
- usdict = UsDict()
-
- # gather all attr_type and attr_data entries from users_info table
- q = tbl_info.select(whereclause=(tbl_info.c.uid == uid))
- rows = conn.execute(q).fetchall()
- for row in rows:
- usdict[row.attr_type] = row.attr_data
-
- # add the users_row data *after* the attributes in case attr_type
- # matches one of these keys.
- usdict['uid'] = users_row.uid
- usdict['identifier'] = users_row.identifier
- usdict['bb_username'] = users_row.bb_username
- usdict['bb_password'] = users_row.bb_password
-
- return usdict
- d = self.db.pool.do(thd)
- return d
-
- def getUserByUsername(self, username):
- def thd(conn):
- tbl = self.db.model.users
- tbl_info = self.db.model.users_info
-
- q = tbl.select(whereclause=(tbl.c.bb_username == username))
- users_row = conn.execute(q).fetchone()
-
- if not users_row:
- return None
-
- # make UsDict to return
- usdict = UsDict()
-
- # gather all attr_type and attr_data entries from users_info table
- q = tbl_info.select(whereclause=(tbl_info.c.uid == users_row.uid))
- rows = conn.execute(q).fetchall()
- for row in rows:
- usdict[row.attr_type] = row.attr_data
-
- # add the users_row data *after* the attributes in case attr_type
- # matches one of these keys.
- usdict['uid'] = users_row.uid
- usdict['identifier'] = users_row.identifier
- usdict['bb_username'] = users_row.bb_username
- usdict['bb_password'] = users_row.bb_password
-
- return usdict
- d = self.db.pool.do(thd)
- return d
-
- def getUsers(self):
- def thd(conn):
- tbl = self.db.model.users
- rows = conn.execute(tbl.select()).fetchall()
-
- dicts = []
- if rows:
- for row in rows:
- ud = dict(uid=row.uid, identifier=row.identifier)
- dicts.append(ud)
- return dicts
- d = self.db.pool.do(thd)
- return d
-
- def updateUser(self, uid=None, identifier=None, bb_username=None,
- bb_password=None, attr_type=None, attr_data=None,
- _race_hook=None):
- def thd(conn):
- transaction = conn.begin()
- tbl = self.db.model.users
- tbl_info = self.db.model.users_info
- update_dict = {}
-
- # first, add the identifier is it exists
- if identifier is not None:
- self.check_length(tbl.c.identifier, identifier)
- update_dict['identifier'] = identifier
-
- # then, add the creds if they exist
- if bb_username is not None:
- assert bb_password is not None
- self.check_length(tbl.c.bb_username, bb_username)
- self.check_length(tbl.c.bb_password, bb_password)
- update_dict['bb_username'] = bb_username
- update_dict['bb_password'] = bb_password
-
- # update the users table if it needs to be updated
- if update_dict:
- q = tbl.update(whereclause=(tbl.c.uid == uid))
- res = conn.execute(q, update_dict)
-
- # then, update the attributes, carefully handling the potential
- # update-or-insert race condition.
- if attr_type is not None:
- assert attr_data is not None
-
- self.check_length(tbl_info.c.attr_type, attr_type)
- self.check_length(tbl_info.c.attr_data, attr_data)
-
- # first update, then insert
- q = tbl_info.update(
- whereclause=(tbl_info.c.uid == uid)
- & (tbl_info.c.attr_type == attr_type))
- res = conn.execute(q, attr_data=attr_data)
- if res.rowcount == 0:
- _race_hook and _race_hook(conn)
-
- # the update hit 0 rows, so try inserting a new one
- try:
- q = tbl_info.insert()
- res = conn.execute(q,
- uid=uid,
- attr_type=attr_type,
- attr_data=attr_data)
- except (sa.exc.IntegrityError, sa.exc.ProgrammingError):
- # someone else beat us to the punch inserting this row;
- # let them win.
- transaction.rollback()
- return
-
- transaction.commit()
- d = self.db.pool.do(thd)
- return d
-
- def removeUser(self, uid):
- def thd(conn):
- # delete from dependent tables first, followed by 'users'
- for tbl in [
- self.db.model.change_users,
- self.db.model.users_info,
- self.db.model.users,
- ]:
- conn.execute(tbl.delete(whereclause=(tbl.c.uid==uid)))
- d = self.db.pool.do(thd)
- return d
-
- def identifierToUid(self, identifier):
- def thd(conn):
- tbl = self.db.model.users
-
- q = tbl.select(whereclause=(tbl.c.identifier == identifier))
- row = conn.execute(q).fetchone()
- if not row:
- return None
-
- return row.uid
- d = self.db.pool.do(thd)
- return d