A convenient constructor that allows you to specify a book URI, begin the session, and load the book.
This can give you the power of calling qof_session_new, qof_session_begin, and qof_session_load all in one!
qof_session_load is only called if url scheme is "xml" and mode is SESSION_NEW_STORE or SESSION_NEW_OVERWRITE
292 def __init__(self, book_uri=None, mode=None, instance=None, book=None):
293 """!
294 A convenient constructor that allows you to specify a book URI,
295 begin the session, and load the book.
296
297 This can give you the power of calling
298 qof_session_new, qof_session_begin, and qof_session_load all in one!
299
300 qof_session_load is only called if url scheme is "xml" and
301 mode is SESSION_NEW_STORE or SESSION_NEW_OVERWRITE
302
303 @param book_uri must be a string in the form of a URI/URL. The access
304 method specified depends on the loaded backends. Paths may be relative
305 or absolute. If the path is relative, that is if the argument is
306 "file://somefile.xml", then the current working directory is
307 assumed. Customized backends can choose to search other
308 application-specific directories or URI schemes as well.
309 It be None to skip the calls to qof_session_begin and
310 qof_session_load.
311
312 @param instance argument can be passed if new Session is used as a
313 wrapper for an existing session instance
314
315 @param mode The SessionOpenMode.
316 @note SessionOpenMode replaces deprecated ignore_lock, is_new and force_new.
317
318 @par SessionOpenMode
319 `SESSION_NORMAL_OPEN`: Find an existing file or database at the provided uri and
320 open it if it is unlocked. If it is locked post a QOF_BACKEND_LOCKED error.
321 @par
322 `SESSION_NEW_STORE`: Check for an existing file or database at the provided
323 uri and if none is found, create it. If the file or database exists post a
324 QOF_BACKED_STORE_EXISTS and return.
325 @par
326 `SESSION_NEW_OVERWRITE`: Create a new file or database at the provided uri,
327 deleting any existing file or database.
328 @par
329 `SESSION_READ_ONLY`: Find an existing file or database and open it without
330 disturbing the lock if it exists or setting one if not. This will also set a
331 flag on the book that will prevent many elements from being edited and will
332 prevent the backend from saving any edits.
333 @par
334 `SESSION_BREAK_LOCK`: Find an existing file or database, lock it, and open
335 it. If there is already a lock replace it with a new one for this session.
336
337 @par Errors
338 qof_session_begin() signals failure by queuing errors. After it completes use
339 qof_session_get_error() and test that the value is `ERROR_BACKEND_NONE` to
340 determine that the session began successfully.
341
342 @exception as begin() and load() are wrapped with raise_backend_errors_after_call()
343 this function can raise a GnuCashBackendException. If it does,
344 you don't need to cleanup and call end() and destroy(), that is handled
345 for you, and the exception is raised.
346 """
347 if instance is not None:
348 GnuCashCoreClass.__init__(self, instance=instance)
349 else:
350 if book is None:
351 book = Book()
352 GnuCashCoreClass.__init__(self, book)
353
354 if book_uri is not None:
355 try:
356 if mode is None:
357 mode = SessionOpenMode.SESSION_NORMAL_OPEN
358 self.begin(book_uri, mode)
359 is_new = mode in (SessionOpenMode.SESSION_NEW_STORE, SessionOpenMode.SESSION_NEW_OVERWRITE)
360 if not is_new:
361 self.load()
362 except GnuCashBackendException as backend_exception:
363 self.end()
364 self.destroy()
365 raise
366