]> git.decadent.org.uk Git - dak.git/blobdiff - daklib/dbconn.py
Add doc for session_wrapper.
[dak.git] / daklib / dbconn.py
index ee057d5c9cdff40d4ec905500fac286df5368bf6..fb322aeaf674e22fa455c6af95c84e004f8d8f78 100755 (executable)
@@ -48,7 +48,6 @@ from sqlalchemy.orm.exc import NoResultFound
 
 # Only import Config until Queue stuff is changed to store its config
 # in the database
-import utils
 from config import Config
 from singleton import Singleton
 from textutils import fix_maintainer
@@ -60,12 +59,18 @@ __all__ = ['IntegrityError', 'SQLAlchemyError']
 ################################################################################
 
 def session_wrapper(fn):
+    """
+    Wrapper around common ".., session=None):" handling. If the wrapped
+    function is called without passing 'session', we create a local one
+    and destroy it when the function ends.
+    """
+
     def wrapped(*args, **kwargs):
         private_transaction = False
         session = kwargs.get('session')
 
         # No session specified as last argument or in kwargs, create one.
-        if session is None and len(args) == len(getargspec(fn)[0]) - 1:
+        if session is None and len(args) <= len(getargspec(fn)[0]) - 1:
             private_transaction = True
             kwargs['session'] = DBConn().session()
 
@@ -76,6 +81,9 @@ def session_wrapper(fn):
                 # We created a session; close it.
                 kwargs['session'].close()
 
+    wrapped.__doc__ = fn.__doc__
+    wrapped.func_name = fn.func_name
+
     return wrapped
 
 ################################################################################
@@ -166,7 +174,7 @@ __all__.append('Archive')
 @session_wrapper
 def get_archive(archive, session=None):
     """
-    returns database id for given c{archive}.
+    returns database id for given C{archive}.
 
     @type archive: string
     @param archive: the name of the arhive
@@ -1427,6 +1435,7 @@ class Queue(object):
                 # TODO: Move into database as above
                 if conf.FindB("Dinstall::SecurityQueueBuild"):
                     # Copy it since the original won't be readable by www-data
+                    import utils
                     utils.copy(src, dest)
                 else:
                     # Create a symlink to it
@@ -1901,7 +1910,7 @@ def get_suite(suite, session=None):
     generated if not supplied)
 
     @rtype: Suite
-    @return: Suite object for the requested suite name (None if not presenT)
+    @return: Suite object for the requested suite name (None if not present)
     """
 
     q = session.query(Suite).filter_by(suite_name=suite)