+def get_or_set_maintainer(name, session=None):
+ """
+ Returns Maintainer object for given maintainer name.
+
+ If no matching maintainer name is found, a row is inserted.
+
+ @type name: string
+ @param name: The maintainer name 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.
+ A flush will be performed either way.
+
+ @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)
+ if q.count() < 1:
+ maintainer = Maintainer()
+ maintainer.name = name
+ session.add(maintainer)
+ if privatetrans:
+ session.commit()
+ else:
+ session.flush()
+ ret = maintainer
+ else:
+ ret = q.one()
+
+ if privatetrans:
+ session.close()
+
+ return ret
+
+__all__.append('get_or_set_maintainer')
+
+def get_maintainer(maintainer_id, session=None):
+ """
+ Return the name of the maintainer behind C{maintainer_id} or None if that
+ maintainer_id is invalid.
+
+ @type maintainer_id: int
+ @param maintainer_id: the id of the maintainer
+
+ @rtype: Maintainer
+ @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()
+
+__all__.append('get_maintainer')
+