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