From: Chris Lamb Date: Tue, 27 Oct 2009 09:19:24 +0000 (+0000) Subject: Use session.commit_or_flush in some more functions. X-Git-Url: https://git.decadent.org.uk/gitweb/?a=commitdiff_plain;h=cba1f7ee22bd6491091942e9e6530658345e8533;hp=-c;p=dak.git Use session.commit_or_flush in some more functions. Signed-off-by: Chris Lamb --- cba1f7ee22bd6491091942e9e6530658345e8533 diff --git a/daklib/dbconn.py b/daklib/dbconn.py index ca90ba88..48953f60 100755 --- a/daklib/dbconn.py +++ b/daklib/dbconn.py @@ -440,6 +440,7 @@ class ContentFilename(object): __all__.append('ContentFilename') +@session_wrapper def get_or_set_contents_file_id(filename, session=None): """ Returns database id for given filename. @@ -456,10 +457,6 @@ def get_or_set_contents_file_id(filename, session=None): @rtype: int @return: the database id for the given component """ - privatetrans = False - if session is None: - session = DBConn().session() - privatetrans = True q = session.query(ContentFilename).filter_by(filename=filename) @@ -469,15 +466,9 @@ def get_or_set_contents_file_id(filename, session=None): cf = ContentFilename() cf.filename = filename session.add(cf) - if privatetrans: - session.commit() - else: - session.flush() + session.commit_or_flush() ret = cf.cafilename_id - if privatetrans: - session.close() - return ret __all__.append('get_or_set_contents_file_id') @@ -544,6 +535,7 @@ class ContentFilepath(object): __all__.append('ContentFilepath') +@session_wrapper def get_or_set_contents_path_id(filepath, session=None): """ Returns database id for given path. @@ -560,10 +552,6 @@ def get_or_set_contents_path_id(filepath, session=None): @rtype: int @return: the database id for the given path """ - privatetrans = False - if session is None: - session = DBConn().session() - privatetrans = True q = session.query(ContentFilepath).filter_by(filepath=filepath) @@ -573,15 +561,9 @@ def get_or_set_contents_path_id(filepath, session=None): cf = ContentFilepath() cf.filepath = filepath session.add(cf) - if privatetrans: - session.commit() - else: - session.flush() + session.commit_or_flush() ret = cf.cafilepath_id - if privatetrans: - session.close() - return ret __all__.append('get_or_set_contents_path_id') @@ -841,6 +823,7 @@ class Fingerprint(object): __all__.append('Fingerprint') +@session_wrapper def get_or_set_fingerprint(fpr, session=None): """ Returns Fingerprint object for given fpr. @@ -859,10 +842,6 @@ def get_or_set_fingerprint(fpr, session=None): @rtype: Fingerprint @return: the Fingerprint object for the given fpr """ - privatetrans = False - if session is None: - session = DBConn().session() - privatetrans = True q = session.query(Fingerprint).filter_by(fingerprint=fpr) @@ -872,15 +851,9 @@ def get_or_set_fingerprint(fpr, session=None): fingerprint = Fingerprint() fingerprint.fingerprint = fpr session.add(fingerprint) - if privatetrans: - session.commit() - else: - session.flush() + session.commit_or_flush() ret = fingerprint - if privatetrans: - session.close() - return ret __all__.append('get_or_set_fingerprint') @@ -896,6 +869,7 @@ class Keyring(object): __all__.append('Keyring') +@session_wrapper def get_or_set_keyring(keyring, session=None): """ If C{keyring} does not have an entry in the C{keyrings} table yet, create one @@ -907,28 +881,17 @@ def get_or_set_keyring(keyring, session=None): @rtype: Keyring @return: the Keyring object for this keyring - """ - privatetrans = False - if session is None: - session = DBConn().session() - privatetrans = True - try: - obj = session.query(Keyring).filter_by(keyring_name=keyring).first() - - if obj is None: - obj = Keyring(keyring_name=keyring) - session.add(obj) - if privatetrans: - session.commit() - else: - session.flush() + q = session.query(Keyring).filter_by(keyring_name=keyring) + try: + return q.one() + except NoResultFound: + obj = Keyring(keyring_name=keyring) + session.add(obj) + session.commit_or_flush() return obj - finally: - if privatetrans: - session.close() __all__.append('get_or_set_keyring') @@ -994,6 +957,7 @@ class Maintainer(object): __all__.append('Maintainer') +@session_wrapper def get_or_set_maintainer(name, session=None): """ Returns Maintainer object for given maintainer name. @@ -1012,10 +976,6 @@ def get_or_set_maintainer(name, session=None): @rtype: Maintainer @return: the Maintainer object for the given maintainer """ - privatetrans = False - if session is None: - session = DBConn().session() - privatetrans = True q = session.query(Maintainer).filter_by(name=name) try: @@ -1024,19 +984,14 @@ def get_or_set_maintainer(name, session=None): maintainer = Maintainer() maintainer.name = name session.add(maintainer) - if privatetrans: - session.commit() - else: - session.flush() + session.commit_or_flush() ret = maintainer - if privatetrans: - session.close() - return ret __all__.append('get_or_set_maintainer') +@session_wrapper def get_maintainer(maintainer_id, session=None): """ Return the name of the maintainer behind C{maintainer_id} or None if that @@ -1049,16 +1004,7 @@ def get_maintainer(maintainer_id, session=None): @return: the Maintainer with this C{maintainer_id} """ - privatetrans = False - if session is None: - session = DBConn().session() - privatetrans = True - - try: - return session.query(Maintainer).get(maintainer_id) - finally: - if privatetrans: - session.close() + return session.query(Maintainer).get(maintainer_id) __all__.append('get_maintainer') @@ -2011,6 +1957,7 @@ class Uid(object): __all__.append('Uid') +@session_wrapper def add_database_user(uidname, session=None): """ Adds a database user @@ -2027,19 +1974,12 @@ def add_database_user(uidname, session=None): @return: the uid object for the given uidname """ - privatetrans = False - if session is None: - session = DBConn().session() - privatetrans = True - session.execute("CREATE USER :uid", {'uid': uidname}) - - if privatetrans: - session.commit() - session.close() + session.commit_or_flush() __all__.append('add_database_user') +@session_wrapper def get_or_set_uid(uidname, session=None): """ Returns uid object for given uidname. @@ -2058,11 +1998,6 @@ def get_or_set_uid(uidname, session=None): @return: the uid object for the given uidname """ - privatetrans = False - if session is None: - session = DBConn().session() - privatetrans = True - q = session.query(Uid).filter_by(uid=uidname) try: @@ -2071,15 +2006,9 @@ def get_or_set_uid(uidname, session=None): uid = Uid() uid.uid = uidname session.add(uid) - if privatetrans: - session.commit() - else: - session.flush() + session.commit_or_flush() ret = uid - if privatetrans: - session.close() - return ret __all__.append('get_or_set_uid')