Merge Christoph Holtermann's 'python-session-instance-constructor' into maint.

This commit is contained in:
John Ralls
2020-04-06 11:34:48 -07:00
14 changed files with 62 additions and 20 deletions

View File

@@ -59,12 +59,15 @@ class ClassFromFunctions(object):
self._module[self._new_instance] or using existing instance
data. (specified with the keyword argument, instance)
if instance argument is None it will be ignored and the
constructor will be called to get a new instance
Pass the arguments that should be passed on to
self._module[self._new_instance] . Any arguments of that
self._module[self._new_instance]. Any arguments of that
are instances of ClassFromFunctions will be switched with the instance
data. (by calling the .instance property)
"""
if INSTANCE_ARGUMENT in kargs:
if INSTANCE_ARGUMENT in kargs and kargs[INSTANCE_ARGUMENT] is not None:
self.__instance = kargs[INSTANCE_ARGUMENT]
else:
self.__instance = getattr(self._module, self._new_instance)(

View File

@@ -75,7 +75,7 @@ class Session(GnuCashCoreClass):
"""
def __init__(self, book_uri=None, ignore_lock=False, is_new=False,
force_new= False):
force_new=False, instance=None):
"""A convenient constructor that allows you to specify a book URI,
begin the session, and load the book.
@@ -95,13 +95,15 @@ class Session(GnuCashCoreClass):
ignore_lock is passed to qof_session_begin's argument of the
same name and is used to break an existing lock on a dataset.
instance argument can be passed if new Session is used as a
wrapper for an existing session instance
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.
"""
GnuCashCoreClass.__init__(self)
GnuCashCoreClass.__init__(self, instance=instance)
if book_uri is not None:
try:
self.begin(book_uri, ignore_lock, is_new, force_new)

View File

@@ -5,7 +5,7 @@ if (WITH_PYTHON)
# Because it hasn't been built yet
set(test_core_dir ${CMAKE_BINARY_DIR}/common/test-core)
endif()
add_custom_target(test-python-bindings ALL DEPENDS unittest_support gnucash-core-c-build gnucash-core-c-py)
add_custom_target(test-python-bindings ALL DEPENDS unittest_support gnucash-core-c-build gnucash-core-c-py swig-app-utils-python)
add_dependencies(check test-python-bindings)
add_test(python-bindings ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/runTests.py.in)
set_property(TEST python-bindings PROPERTY ENVIRONMENT

View File

@@ -5,6 +5,7 @@ import os
os.environ["GNC_UNINSTALLED"] = "1"
from test_session import TestSession
from test_book import TestBook
from test_account import TestAccount
from test_split import TestSplit

View File

@@ -5,12 +5,12 @@ from gnucash import Book, Account, Split, GncCommodity, GncNumeric, \
from test_book import BookSession
class AccountSession( BookSession ):
class AccountSession(BookSession):
def setUp(self):
BookSession.setUp(self)
self.account = Account(self.book)
class TestAccount( AccountSession ):
class TestAccount(AccountSession):
def test_name(self):
NAME = "Money"
self.assertEqual( '', self.account.GetName() )

View File

@@ -2,14 +2,14 @@ from unittest import TestCase, main
from gnucash import Session
class BookSession( TestCase ):
class BookSession(TestCase):
def setUp(self):
self.ses = Session()
self.book = self.ses.get_book()
self.table = self.book.get_table()
self.currency = self.table.lookup('CURRENCY', 'EUR')
class TestBook( BookSession ):
class TestBook(BookSession):
def test_markclosed(self):
self.ses.end()

View File

@@ -9,7 +9,7 @@ from gnucash.gnucash_business import Vendor, Employee, Customer, Job, Invoice, E
from test_book import BookSession
class BusinessSession( BookSession ):
class BusinessSession(BookSession):
def setUp(self):
BookSession.setUp(self)
@@ -43,7 +43,7 @@ class BusinessSession( BookSession ):
self.invoice.PostToAccount(self.receivable,
self.today, self.today, "", True, False)
class TestBusiness( BusinessSession ):
class TestBusiness(BusinessSession):
def test_equal(self):
self.assertTrue( self.vendor.Equal( self.vendor.GetVendor() ) )
self.assertTrue( self.customer.Equal( self.job.GetOwner() ) )

View File

@@ -2,7 +2,7 @@ from unittest import TestCase, main
from gnucash import Session
class CommoditySession( TestCase ):
class CommoditySession(TestCase):
def setUp(self):
self.ses = Session()
self.book = self.ses.get_book()
@@ -11,12 +11,12 @@ class CommoditySession( TestCase ):
def tearDown(self):
self.ses.end()
class TestCommodity( CommoditySession ):
class TestCommodity(CommoditySession):
def test_iso_currency(self):
eur = self.table.lookup('CURRENCY', 'EUR')
self.assertIsNotNone(eur)
class TestCommodityNamespace( CommoditySession ):
class TestCommodityNamespace(CommoditySession):
def test_namespaces(self):
#print(self.table.__class__)
namespace_names = self.table.get_namespaces()

View File

@@ -3,7 +3,7 @@ from unittest import TestCase, main
from gnucash import GncNumeric, GNC_DENOM_AUTO, GNC_HOW_DENOM_FIXED, \
GNC_HOW_RND_NEVER, GNC_HOW_RND_FLOOR, GNC_HOW_RND_CEIL
class TestGncNumeric( TestCase ):
class TestGncNumeric(TestCase):
def test_defaut(self):
num = GncNumeric()
self.assertEqual(str(num), "0/1")

View File

@@ -0,0 +1,34 @@
# test cases for Session wrapper object
#
# test for get_book may belong in test_book but it makes sense here
# to see if get_current_session works
# test for app_utils on the other hand could go to a subfolder of
# /libgnucash/app-utils
#
# @date 2020-04-03
# @author Christoph Holtermann <mail@c-holtermann.net>
from unittest import TestCase, main
from gnucash import Session
class TestSession(TestCase):
def test_create_empty_session(self):
self.ses = Session()
def test_app_utils_get_current_session(self):
from gnucash import _sw_app_utils
self.ses_instance = _sw_app_utils.gnc_get_current_session()
self.ses = Session(instance = self.ses_instance)
self.assertIsInstance(obj = self.ses, cls = Session)
def test_get_book_from_current_session(self):
from gnucash import _sw_app_utils
from gnucash import Book
self.ses_instance = _sw_app_utils.gnc_get_current_session()
self.ses = Session(instance = self.ses_instance)
self.book = self.ses.get_book()
self.assertIsInstance(obj = self.book, cls = Book)
if __name__ == '__main__':
main()

View File

@@ -5,7 +5,7 @@ from unittest_support import *
from test_book import BookSession
class SplitSession( BookSession ):
class SplitSession(BookSession):
def setUp(self):
BookSession.setUp(self)
@@ -14,7 +14,7 @@ class SplitSession( BookSession ):
def tearDown(self):
pass
class TestSplit( SplitSession ):
class TestSplit(SplitSession):
def test_memo(self):
MEMO = "cookie monster"
self.assertEqual( '', self.split.GetMemo() )

View File

@@ -5,7 +5,7 @@ from unittest_support import *
from test_book import BookSession
class TransactionSession( BookSession ):
class TransactionSession(BookSession):
def setUp(self):
self.domain1 = "gnc.engine"
self.domain2 = "gnc.engine.scrub"
@@ -40,7 +40,7 @@ class TransactionSession( BookSession ):
g_log_remove_handler(self.domain2, self.hdlr2)
test_clear_error_list ()
class TestTransaction( TransactionSession ):
class TestTransaction(TransactionSession):
def test_equal(self):
TRANS = self.trans
self.assertTrue( TRANS.Equal(self.trans, True, False, False, False) )