import time
import os
import apt_pkg
-from daklib import database
+
from daklib import daklog
from daklib import queue
from daklib import utils
+from daklib.dbconn import DBConn, add_database_user, get_or_set_uid
from daklib.regexes import re_gpg_fingerprint, re_user_address, re_user_mails, re_user_name
################################################################################
Cnf = None
-projectB = None
Logger = None
Upload = None
Subst = None
################################################################################
def main():
- global Cnf, projectB
+ global Cnf
keyrings = None
Cnf = utils.get_conf()
if Options["help"]:
usage()
- projectB = pg.connect(Cnf["DB::Name"], Cnf["DB::Host"], int(Cnf["DB::Port"]))
- database.init(Cnf, projectB)
+ session = DBConn().session()
if not keyrings:
keyrings = Cnf.ValueList("Dinstall::GPGKeyring")
utils.warn("Could not prepare password information for mail, not sending password.")
# Now add user to the database.
- projectB.query("BEGIN WORK")
- uid_id = database.get_or_set_uid_id(uid)
- projectB.query('CREATE USER "%s"' % (uid))
- projectB.query("COMMIT WORK")
+ # Note that we provide a session, so we're responsible for committing
+ uidobj = get_or_set_uid(uid, session=session)
+ uid_id = uidobj.uid_id
+ add_database_user(uid)
+ session.commit()
# The following two are kicked out in rhona, so we don't set them. kelly adds
# them as soon as she installs a package with unknown ones, so no problems to expect here.
# Just leave the comment in, to not think about "Why the hell aren't they added" in
# a year, if we ever touch uma again.
# maint_id = database.get_or_set_maintainer_id(name)
-# projectB.query("INSERT INTO fingerprint (fingerprint, uid) VALUES ('%s', '%s')" % (primary_key, uid_id))
+# session.execute("INSERT INTO fingerprint (fingerprint, uid) VALUES (:fingerprint, uid)",
+# {'fingerprint': primary_key, 'uid': uid_id})
# Lets add user to the email-whitelist file if its configured.
if Cnf.has_key("Dinstall::MailWhiteList") and Cnf["Dinstall::MailWhiteList"] != "":
@param filename: The filename
@type session: SQLAlchemy
@param session: Optional SQL session object (a temporary one will be
- generated if not supplied)
+ generated if not supplied). If not passed, a commit will be performed at
+ the end of the function, otherwise the caller is responsible for commiting.
@rtype: int
@return: the database id for the given component
"""
+ privatetrans = False
if session is None:
session = DBConn().session()
+ privatetrans = True
try:
q = session.query(ContentFilename).filter_by(filename=filename)
cf = ContentFilename()
cf.filename = filename
session.add(cf)
+ if privatetrans:
+ session.commit()
return cf.cafilename_id
else:
return q.one().cafilename_id
@param filename: The filepath
@type session: SQLAlchemy
@param session: Optional SQL session object (a temporary one will be
- generated if not supplied)
+ generated if not supplied). If not passed, a commit will be performed at
+ the end of the function, otherwise the caller is responsible for commiting.
@rtype: int
@return: the database id for the given path
"""
+ privatetrans = False
if session is None:
session = DBConn().session()
+ privatetrans = True
try:
q = session.query(ContentFilepath).filter_by(filepath=filepath)
cf = ContentFilepath()
cf.filepath = filepath
session.add(cf)
+ if privatetrans:
+ session.commit()
return cf.cafilepath_id
else:
return q.one().cafilepath_id
@param session: Optional SQLAlchemy session. If this is passed, the caller
is responsible for ensuring a transaction has begun and committing the
results or rolling back based on the result code. If not passed, a commit
- will be performed at the end of the function
+ will be performed at the end of the function, otherwise the caller is
+ responsible for commiting.
@return: True upon success
"""
__all__.append('Uid')
+def add_database_user(uidname, session=None):
+ """
+ Adds a database user
+
+ @type uidname: string
+ @param uidname: The uid of the user to add
+
+ @type session: SQLAlchemy
+ @param session: Optional SQL session object (a temporary one will be
+ generated if not supplied). If not passed, a commit will be performed at
+ the end of the function, otherwise the caller is responsible for commiting.
+
+ @rtype: Uid
+ @return: the uid object for the given uidname
+ """
+ privatetrans = False
+ if session is None:
+ session = DBConn().session()
+ privatetrans = True
+
+ try:
+ session.execute("CREATE USER :uid", {'uid': uidname})
+ if privatetrans:
+ session.commit()
+ except:
+ traceback.print_exc()
+ raise
+
+__all__.append('add_database_user')
+
+def get_or_set_uid(uidname, session=None):
+ """
+ Returns uid object for given uidname.
+
+ If no matching uidname is found, a row is inserted.
+
+ @type uidname: string
+ @param uidname: The uid to add
+
+ @type session: SQLAlchemy
+ @param session: Optional SQL session object (a temporary one will be
+ generated if not supplied). If not passed, a commit will be performed at
+ the end of the function, otherwise the caller is responsible for commiting.
+
+ @rtype: Uid
+ @return: the uid object for the given uidname
+ """
+ privatetrans = False
+ if session is None:
+ session = DBConn().session()
+ privatetrans = True
+
+ try:
+ q = session.query(Uid).filter_by(uid=uidname)
+ if q.count() < 1:
+ uid = Uid()
+ uid.uid = uidname
+ session.add(uid)
+ if privatetrans:
+ session.commit()
+ return uid
+ else:
+ return q.one()
+
+ except:
+ traceback.print_exc()
+ raise
+
+__all__.append('get_or_set_uid')
+
+
def get_uid_from_fingerprint(fpr, session=None):
if session is None:
session = DBConn().session()