piecash.core.book module¶
-
class
piecash.core.book.
Book
(root_account=None, root_template=None)[source]¶ Bases:
piecash._declbase.DeclarativeBaseGuid
A Book represents a GnuCash document. It is created through one of the two factory functions
create_book()
andopen_book()
.Canonical use is as a context manager like (the book is automatically closed at the end of the with block):
with create_book() as book: ...
Note
If you do not use the context manager, do not forget to close the session explicitly (
book.close()
) to release any lock on the file/DB.The book puts at disposal several attributes to access the main objects of the GnuCash document:
# to get the book and the root_account ra = book.root_account # to get the list of accounts, commodities or transactions for acc in book.accounts: # or book.commodities or book.transactions # do something with acc # to get a specific element of these lists EUR = book.commodities(namespace="CURRENCY", mnemonic="EUR") # to get a list of all objects of some class (even non core classes) budgets = book.get(Budget) # or a specific object budget = book.get(Budget, name="my first budget")
You can check a session has changes (new, deleted, changed objects) by getting the
book.is_saved
property. To save or cancel changes, usebook.save()
orbook.cancel()
:# save a session if it is no saved (saving a unchanged session is a no-op) if not book.is_saved: book.save()
-
root_account
¶ piecash.core.account.Account
– the root account of the book
-
root_template
¶ piecash.core.account.Account
– the root template of the book (usage not yet clear...)
-
uri
¶ str – connection string of the book (set by the GncSession when accessing the book)
-
session
¶ sqlalchemy.orm.session.Session
– the sqlalchemy session encapsulating the book
-
use_trading_accounts
¶ bool – true if option “Use trading accounts” is enabled
-
use_split_action_field
¶ bool – true if option “Use Split Action Field for Number” is enabled
-
RO_threshold_day
¶ int – value of Day Threshold for Read-Only Transactions (red line)
-
control_mode
¶ list(str – list of allowed non-standard operations like : “allow-root-subaccounts”
-
counter_customer
¶ int – counter for
piecash.business.person.Customer
id (link to slot “counters/gncCustomer”)
-
counter_vendor
¶ int – counter for
piecash.business.person.Vendor
id (link to slot “counters/gncVendor”)
-
counter_employee
¶ int – counter for
piecash.business.person.Employee
id (link to slot “counters/gncEmployee”)
-
counter_invoice
¶ int – counter for
piecash.business.invoice.Invoice
id (link to slot “counters/gncInvoice”)
-
counter_job
¶ int – counter for
piecash.business.invoice.Job
id (link to slot “counters/gncJob”)
-
counter_bill
¶ int – counter for
piecash.business.invoice.Bill
id (link to slot “counters/gncBill”)
-
counter_exp_voucher
¶ int – counter for
piecash.business.invoice.Invoice
id (link to slot “counters/gncExpVoucher”)
-
counter_order
¶ int – counter for
piecash.business.invoice.Order
id (link to slot “counters/gncOrder”)
-
static
track_dirty
(session, flush_context, instances)[source]¶ Record in session._all_changes the objects that have been modified before each flush
-
trading_account
(cdty)[source]¶ Return the trading account related to the commodity. If it does not exist and the option “Use Trading Accounts” is enabled, create it on the fly
-
add
(obj)[source]¶ Add an object to the book (to be used if object not linked in any way to the book)
-
is_saved
¶ Save the changes to the file/DB (=commit transaction)
-
close
()[source]¶ Close a session. Any changes not yet saved are rolled back. Any lock on the file/DB is released.
-
get
(cls, **kwargs)[source]¶ Generic getter for a GnuCash object in the GncSession. If no kwargs is given, it returns the list of all objects of type cls (uses the sqlalchemy session.query(cls).all()). Otherwise, it gets the unique object which attributes match the kwargs (uses the sqlalchemy session.query(cls).filter_by(**kwargs).one() underneath):
# to get the first account with name="Income" inc_account = session.get(Account, name="Income") # to get all accounts accs = session.get(Account)
Parameters: - cls (class) – the class of the object to retrieve (Account, Price, Budget,...)
- kwargs (dict) – the attributes to filter on
Returns: the unique object if it exists, raises exceptions otherwise
Return type:
-
transactions
¶ gives easy access to all transactions in the book through a
piecash.model_common.CallableList
ofpiecash.core.transaction.Transaction
-
splits
¶ gives easy access to all splits in the book through a
piecash.model_common.CallableList
ofpiecash.core.transaction.Split
-
accounts
¶ gives easy access to all accounts in the book through a
piecash.model_common.CallableList
ofpiecash.core.account.Account
-
commodities
¶ gives easy access to all commodities in the book through a
piecash.model_common.CallableList
ofpiecash.core.commodity.Commodity
-
currencies
¶ gives easy access to all currencies in the book through a
piecash.model_common.CallableList
ofpiecash.core.commodity.Commodity
-
prices
¶ gives easy access to all prices in the book through a
piecash.model_common.CallableList
ofpiecash.core.commodity.Price
-
customers
¶ gives easy access to all commodities in the book through a
piecash.model_common.CallableList
ofpiecash.business.people.Customer
-
vendors
¶ gives easy access to all commodities in the book through a
piecash.model_common.CallableList
ofpiecash.business.people.Vendor
-
employees
¶ gives easy access to all commodities in the book through a
piecash.model_common.CallableList
ofpiecash.business.people.Employee
-
taxtables
¶ gives easy access to all commodities in the book through a
piecash.model_common.CallableList
ofpiecash.business.tax.Taxtable
-
query
¶ proxy for the query function of the underlying sqlalchemy session
-
splits_df
()[source]¶ Return a pandas DataFrame with all splits (
piecash.core.commodity.Split
) from the bookReturns: pandas.DataFrame
-
prices_df
()[source]¶ Return a pandas DataFrame with all prices (
piecash.core.commodity.Price
) from the bookReturns: pandas.DataFrame
-