GnuCash  5.6-150-g038405b370+
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

def __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. More...
 
def __enter__ (self)
 
def __exit__ (self, exc_type, exc_value, traceback)
 
def raise_backend_errors (self, called_function="qof_session function")
 
def generate_errors (self)
 
def pop_all_errors (self)
 
- Public Member Functions inherited from python.gnucash_core.GnuCashCoreClass
def do_lookup_create_oo_instance (self, lookup_function, cls, args)
 

Static Public Member Functions

def raise_backend_errors_after_call (function, args, kwargs)
 

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__()

def 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

◆ generate_errors()

def 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()

def 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()

def 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()

def 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: