[Gnucash-changes] Better error reporting.

David Hampton hampton at cvs.gnucash.org
Sat Apr 2 14:19:49 EST 2005


Log Message:
-----------
Better error reporting. Don't uppercase the symbol name.

Modified Files:
--------------
    gnucash/src/quotes:
        dump-finance-quote

Revision Data
-------------
Index: dump-finance-quote
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/quotes/dump-finance-quote,v
retrieving revision 1.4
retrieving revision 1.5
diff -Lsrc/quotes/dump-finance-quote -Lsrc/quotes/dump-finance-quote -u -r1.4 -r1.5
--- src/quotes/dump-finance-quote
+++ src/quotes/dump-finance-quote
@@ -48,27 +48,51 @@
 sub report {
   my($itemname, $qh, $verbose) = @_;
   my ($symbol, $date, $currency, $last, $nav, $price, $timezone, $keyname);
-  my($success);
+  my($gccanuse);
+
+  # Sanity check returned results
+  if ((keys %$qh) < 1) {
+    printf("No results found for stock $itemname.\n");
+    return;
+  } else {
+    my ($stock, $attribute, %seen, $first);
+
+    foreach $keyname (sort keys %$qh) {
+      ($stock, $attribute) = split('\034', $keyname);
+      last if $stock eq $itemname;
+      $first = $stock if !defined $first;
+      $seen{$stock} = 1;
+    }
+
+    if ($stock ne $itemname) {
+      printf "\nNo results found for stock $itemname, but results were returned for\n";
+      printf "the stock(s) %s.  ", join(", ",  keys(%seen));
+      printf "Printing data for the first stock returned.\n\n";
+
+      # Print stats for the first stock returned.
+      $itemname = $first;
+    }
+  }
 
   # Parse the quote fields and put warnings where necessary.
-  $success = 1;
+  $gccanuse = 1;
   if (defined($$qh{$itemname, "symbol"})) {
     $symbol = $$qh{$itemname, "symbol"};
   } else {
     $symbol = "$itemname (deduced)";
-    $success = 0;
+    $gccanuse = 0;
   }
   if (defined($$qh{$itemname, "date"})) {
     $date = $$qh{$itemname, "date"};
   } else {
     $date = "** missing **";
-    $success = 0;
+    $gccanuse = 0;
   }
   if (defined($$qh{$itemname, "currency"})) {
     $currency = $$qh{$itemname, "currency"};
   } else {
     $currency = "** missing **";
-    $success = 0;
+    $gccanuse = 0;
   }
   if ((!defined($$qh{$itemname, "last"})) &&
       (!defined($$qh{$itemname, "nav" })) &&
@@ -76,7 +100,7 @@
     $$qh{$itemname, "last"} = "**missing**";
     $$qh{$itemname, "nav"} = "**missing**";
     $$qh{$itemname, "price"} = "**missing**";
-    $success = 0;
+    $gccanuse = 0;
   } else {
     $last = defined($$qh{$itemname, "last"})
       ? $$qh{$itemname, "last"} :  "";
@@ -88,20 +112,6 @@
   $timezone = defined($$qh{$itemname, "timezone"})
     ? $$qh{$itemname, "timezone"} :  "";
 
-  # Report failure
-  if ($success == 0) {
-    my ($stock, $key, %seen);
-    printf("\nThe query for $itemname failed!!");
-    foreach $keyname (sort keys %$qh) {
-      ($stock, $key) = split('\034', $keyname);
-      next if $stock eq $itemname;
-      next if $seen{$stock} == 1;
-      $seen{$stock} = 1;
-      printf "  Found data for stock(s) %s instead.\n", join(", ",  keys(%seen));
-    }
-    printf "\n";
-  }
-
   # Dump gnucash recognized fields
   printf "Finance::Quote fields Gnucash uses:\n";
   printf "    symbol: %-20s <=== required\n",	  $symbol;
@@ -112,6 +122,11 @@
   printf "     price: %-20s <=/        \n", 	  $price;
   printf "  timezone: %-20s <=== optional\n", 	  $timezone;
 
+  # Report failure
+  if ($gccanuse == 0) {
+    printf "\n** This stock quote cannot be used by gnucash!!\n\n";
+  }
+
   # Dump all fields if requested
   if ($verbose) {
     printf "\nAll fields returned by Finance::Quote for stock $itemname\n\n";
@@ -148,7 +163,6 @@
 while ($#ARGV >= 0) {
   my $stock = shift;
   my %quotes = $q->fetch($exchange, $stock);
-  $stock =~ tr/a-z/A-Z/;
   report($stock, \%quotes, $verbose);
   if ($#ARGV >= 0) {
     printf "=====\n\n";


More information about the gnucash-changes mailing list