r19955 - gnucash/trunk/src/optional/python-bindings - Support for GncCommodityNamespace, better support for GncCommodity, and example
Mike Evans
mikee at code.gnucash.org
Fri Dec 17 09:00:52 EST 2010
Author: mikee
Date: 2010-12-17 09:00:52 -0500 (Fri, 17 Dec 2010)
New Revision: 19955
Trac: http://svn.gnucash.org/trac/changeset/19955
Modified:
gnucash/trunk/src/optional/python-bindings/example_scripts/priceDB_test.py
gnucash/trunk/src/optional/python-bindings/example_scripts/price_database_example.py
gnucash/trunk/src/optional/python-bindings/function_class.py
gnucash/trunk/src/optional/python-bindings/gnucash_core.py
Log:
Support for GncCommodityNamespace, better support for GncCommodity, and example
enhancements.
Patch supplied my Mark Jenkins.
Modified: gnucash/trunk/src/optional/python-bindings/example_scripts/priceDB_test.py
===================================================================
--- gnucash/trunk/src/optional/python-bindings/example_scripts/priceDB_test.py 2010-12-17 13:39:49 UTC (rev 19954)
+++ gnucash/trunk/src/optional/python-bindings/example_scripts/priceDB_test.py 2010-12-17 14:00:52 UTC (rev 19955)
@@ -11,9 +11,7 @@
# Change, FILE, CURRENCY and STOCK to those defined in your test account.
-import gnucash
-from gnucash.gnucash_core_c import gnc_pricedb_get_db, gnc_pricedb_get_prices, gnc_pricedb_lookup_latest,gnc_pricedb_print_contents
-from gnucash.gnucash_core import *
+from gnucash import Session
FILE = "PATH_TO_YOUR_TEST_FILE" ## Fail is no saved but use a copy anyway
session = Session("xml://%s" % FILE, True, False, False)
@@ -27,17 +25,17 @@
latest = pdb.lookup_latest(arm,gbp) # from the table, NOT live data
value = latest.get_value()
pl = pdb.get_prices(arm,gbp)
-for i in pl:
- pr = GncPrice(instance=i)
+for pr in pl:
source = pr.get_source()
time = pr.get_time()
v=pr.get_value()
price = float(v.num)/v.denom
print time, source, price
+if len(pl) > 0:
+ v0 = pl[0].get_value()
+ print arm.get_fullname(), float(v0.num) / float(v0.denom )
-print arm.get_fullname(), float(v0.num) / float(v0.denom )
-
session.end()
session.destroy()
quit()
Modified: gnucash/trunk/src/optional/python-bindings/example_scripts/price_database_example.py
===================================================================
--- gnucash/trunk/src/optional/python-bindings/example_scripts/price_database_example.py 2010-12-17 13:39:49 UTC (rev 19954)
+++ gnucash/trunk/src/optional/python-bindings/example_scripts/price_database_example.py 2010-12-17 14:00:52 UTC (rev 19955)
@@ -10,9 +10,7 @@
# The account file is not saved but always use a disposable copy.
# Thanks for contributions by Christoph Holtermann
-import gnucash
-from gnucash.gnucash_core_c import gnc_pricedb_get_db, gnc_pricedb_get_prices, gnc_pricedb_lookup_latest,gnc_pricedb_print_contents
-from gnucash.gnucash_core import *
+from gnucash import Session
# -------------------------------------------
# Configuration options can be changed here :
@@ -37,19 +35,24 @@
cur = comm_table.lookup("CURRENCY", cur_mnemonic)
cur_name = cur.get_fullname()
-if namespace_name: # Show single namespace
- namespaces=[]
- namespace=gnucash.gnucash_core_c.gnc_commodity_table_find_namespace(comm_table.instance,"EUREX")
+
+if namespace_name != "": # Show single namespace
+ namespaces [ comm_table.find_namespace(namespace_name) ]
+
else: # Show all namespaces
namespaces=comm_table.get_namespaces_list()
for namespace in namespaces:
- namespace_name=gnucash.gnucash_core_c.gnc_commodity_namespace_get_name(namespace)
+ namespace_name=namespace.get_name()
+
+
# Get a list of all commodities in namespace
commodities=comm_table.get_commodities(namespace_name)
- if not commodities:
+
+ if len(commodities) == 0 :
+
print "No commodity in namespace "+namespace_name+"."
else:
if commodity_fullname:
@@ -57,20 +60,20 @@
else:
print "Commoditys in namespace "+namespace_name+":"
- for i in range(len(commodities)):
- c=gnucash.GncCommodity(instance=commodities[i])
- commodities[i]=c
+ for i, c in enumerate(commodities):
+
c_fullname = c.get_fullname()
if not(commodity_fullname) or (commodity_fullname == c_fullname):
print "["+str(i)+"] Full Name :", c.get_fullname()
if show_prices:
pl = pdb.get_prices(c,cur)
- if pl:
+
+ if len(pl) > 0 :
print "{0} {1:20}{2:>10} {3}".format("Time ","Source","Price","Currency")
- for i in pl:
- pr = GncPrice(instance=i)
+ for pr in pl:
+
source = pr.get_source()
time = pr.get_time()
v=pr.get_value()
Modified: gnucash/trunk/src/optional/python-bindings/function_class.py
===================================================================
--- gnucash/trunk/src/optional/python-bindings/function_class.py 2010-12-17 13:39:49 UTC (rev 19954)
+++ gnucash/trunk/src/optional/python-bindings/function_class.py 2010-12-17 14:00:52 UTC (rev 19955)
@@ -124,6 +124,18 @@
return new_function
+def method_function_returns_instance_list(method_function, cls):
+ def new_function(*args):
+ return [ cls( **{INSTANCE_ARGUMENT: item} )
+ for item in method_function(*args) ]
+ return new_function
+
+def methods_return_instance_lists(cls, function_dict):
+ for func_name, instance_name in function_dict.iteritems():
+ setattr(cls, func_name,
+ method_function_returns_instance_list(
+ getattr(cls, func_name), instance_name))
+
def default_arguments_decorator(function, *args):
"""Decorates a function to give it default, positional arguments
Modified: gnucash/trunk/src/optional/python-bindings/gnucash_core.py
===================================================================
--- gnucash/trunk/src/optional/python-bindings/gnucash_core.py 2010-12-17 13:39:49 UTC (rev 19954)
+++ gnucash/trunk/src/optional/python-bindings/gnucash_core.py 2010-12-17 14:00:52 UTC (rev 19955)
@@ -26,7 +26,8 @@
from function_class import \
ClassFromFunctions, extract_attributes_with_prefix, \
default_arguments_decorator, method_function_returns_instance, \
- methods_return_instance, process_list_convert_to_instance
+ methods_return_instance, process_list_convert_to_instance, \
+ method_function_returns_instance_list, methods_return_instance_lists
from gnucash_core_c import gncInvoiceLookup, gncInvoiceGetInvoiceFromTxn, \
gncInvoiceGetInvoiceFromLot, gncEntryLookup, gncInvoiceLookup, \
@@ -297,6 +298,8 @@
'convert_balance_latest_before' : GncNumeric,
}
methods_return_instance(GncPriceDB,PriceDB_dict)
+GncPriceDB.get_prices = method_function_returns_instance_list(
+ GncPriceDB.get_prices, GncPrice )
class GncCommodity(GnuCashCoreClass): pass
@@ -315,6 +318,9 @@
pass
+class GncCommodityNamespace(GnuCashCoreClass):
+ pass
+
class GncLot(GnuCashCoreClass):
def GetInvoiceFromLot(self):
from gnucash_business import Invoice
@@ -486,10 +492,26 @@
'lookup' : GncCommodity,
'lookup_unique' : GncCommodity,
'find_full' : GncCommodity,
- 'insert' : GncCommodity
+ 'insert' : GncCommodity,
+ 'add_namespace': GncCommodityNamespace,
+ 'find_namespace': GncCommodityNamespace,
}
methods_return_instance(GncCommodityTable, commoditytable_dict)
+methods_return_instance_lists(
+ GncCommodityTable, { 'get_namespaces': GncCommodityNamespace,
+ 'get_namespaces_list': GncCommodityNamespace,
+ 'get_commodities': GncCommodity,
+ 'get_quotable_commodities': GncCommodity,
+
+ } )
+
+# GncCommodityNamespace
+GncCommodityNamespace.add_methods_with_prefix('gnc_commodity_namespace_')
+GncCommodityNamespace.get_commodity_list = \
+ method_function_returns_instance_list(
+ GncCommodityNamespace.get_commodity_list, GncCommodity )
+
# GncLot
GncLot.add_constructor_and_methods_with_prefix('gnc_lot_', 'new')
More information about the gnucash-changes
mailing list