GnuCash fec5643+
Loading...
Searching...
No Matches
Public Member Functions | Static Public Member Functions
python.gnucash_core.Session Class Reference
Inheritance diagram for python.gnucash_core.Session:
python.gnucash_core.GnuCashCoreClass

Public Member Functions

 __init__ (self, book_uri=None, mode=None, instance=None, book=None)
 A convenient constructor that allows you to specify a book URI, begin the session, and load the book.
 
 __enter__ (self)
 
 __exit__ (self, exc_type, exc_value, traceback)
 
 raise_backend_errors (self, called_function="qof_session function")
 
 generate_errors (self)
 
 pop_all_errors (self)
 
- Public Member Functions inherited from python.gnucash_core.GnuCashCoreClass
 do_lookup_create_oo_instance (self, lookup_function, cls, *args)
 

Static Public Member Functions

 raise_backend_errors_after_call (function, *args, **kwargs)
 

Additional Inherited Members

- Static Protected Attributes inherited from python.gnucash_core.GnuCashCoreClass
 _module = gnucash_core_c
 

Detailed Description

A GnuCash book editing session

To commit changes to the session you may need to call save,
(this is always the case with the file backend).

When you're down with a session you may need to call end()

Every Session has a Book in the book attribute, which you'll definitely
be interested in, as every GnuCash entity (Transaction, Split, Vendor,
Invoice..) is associated with a particular book where it is stored.

Definition at line 297 of file gnucash_core.py.

Constructor & Destructor Documentation

◆ __init__()

python.gnucash_core.Session.__init__ (   self,
  book_uri = None,
  mode = None,
  instance = None,
  book = None 
)

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

Parameters
book_urimust be a string in the form of a URI/URL. The access method specified depends on the loaded backends. Paths may be relative or absolute. If the path is relative, that is if the argument is "file://somefile.xml", then the current working directory is assumed. Customized backends can choose to search other application-specific directories or URI schemes as well. It be None to skip the calls to qof_session_begin and qof_session_load.
instanceargument can be passed if new Session is used as a wrapper for an existing session instance
modeThe SessionOpenMode.
Note
SessionOpenMode replaces deprecated ignore_lock, is_new and force_new.
SessionOpenMode
SESSION_NORMAL_OPEN: Find an existing file or database at the provided uri and open it if it is unlocked. If it is locked post a QOF_BACKEND_LOCKED error.
SESSION_NEW_STORE: Check for an existing file or database at the provided uri and if none is found, create it. If the file or database exists post a QOF_BACKED_STORE_EXISTS and return.
SESSION_NEW_OVERWRITE: Create a new file or database at the provided uri, deleting any existing file or database.
SESSION_READ_ONLY: Find an existing file or database and open it without disturbing the lock if it exists or setting one if not. This will also set a flag on the book that will prevent many elements from being edited and will prevent the backend from saving any edits.
SESSION_BREAK_LOCK: Find an existing file or database, lock it, and open it. If there is already a lock replace it with a new one for this session.
Errors
qof_session_begin() signals failure by queuing errors. After it completes use qof_session_get_error() and test that the value is ERROR_BACKEND_NONE to determine that the session began successfully.
Exceptions
asbegin() and load() are wrapped with raise_backend_errors_after_call() this function can raise a GnuCashBackendException. If it does, you don't need to cleanup and call end() and destroy(), that is handled for you, and the exception is raised.

Definition at line 311 of file gnucash_core.py.

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

Member Function Documentation

◆ __enter__()

python.gnucash_core.Session.__enter__ (   self)

Definition at line 386 of file gnucash_core.py.

386 def __enter__(self):
387 return self
388

◆ __exit__()

python.gnucash_core.Session.__exit__ (   self,
  exc_type,
  exc_value,
  traceback 
)

Definition at line 389 of file gnucash_core.py.

389 def __exit__(self, exc_type, exc_value, traceback):
390 # Roll back changes on exception by not calling save. Only works for XMl backend.
391 if not exc_type:
392 self.save()
393 self.end()
394 self.destroy()
395

◆ generate_errors()

python.gnucash_core.Session.generate_errors (   self)
A generator that yields any outstanding QofBackend errors

Definition at line 409 of file gnucash_core.py.

409 def generate_errors(self):
410 """A generator that yields any outstanding QofBackend errors
411 """
412 while self.get_error() is not ERR_BACKEND_NO_ERR:
413 error = self.pop_error()
414 yield error
415

◆ pop_all_errors()

python.gnucash_core.Session.pop_all_errors (   self)
Returns any accumulated qof backend errors as a tuple

Definition at line 416 of file gnucash_core.py.

416 def pop_all_errors(self):
417 """Returns any accumulated qof backend errors as a tuple
418 """
419 return tuple( self.generate_errors() )
420

◆ raise_backend_errors()

python.gnucash_core.Session.raise_backend_errors (   self,
  called_function = "qof_session function" 
)
Raises a GnuCashBackendException if there are outstanding
QOF_BACKEND errors.

set called_function to name the function that was last called

Definition at line 396 of file gnucash_core.py.

396 def raise_backend_errors(self, called_function="qof_session function"):
397 """Raises a GnuCashBackendException if there are outstanding
398 QOF_BACKEND errors.
399
400 set called_function to name the function that was last called
401 """
402 errors = self.pop_all_errors()
403 if errors != ():
404 raise GnuCashBackendException(
405 "call to %s resulted in the "
406 "following errors, %s" % (called_function, backend_error_dict[errors[0]]),
407 errors )
408

◆ raise_backend_errors_after_call()

python.gnucash_core.Session.raise_backend_errors_after_call (   function,
*  args,
**  kwargs 
)
static
A function decorator that results in a call to
raise_backend_errors after execution.

Definition at line 423 of file gnucash_core.py.

423 def raise_backend_errors_after_call(function, *args, **kwargs):
424 """A function decorator that results in a call to
425 raise_backend_errors after execution.
426 """
427 def new_function(self, *args, **kwargs):
428 return_value = function(self, *args, **kwargs)
429 self.raise_backend_errors(function.__name__)
430 return return_value
431 return new_function
432

The documentation for this class was generated from the following file: