openbsd-ports/misc/p5-Finance-QuoteHist/patches/patch-lib_Finance_QuoteHist_Generic_pm

74 lines
2.5 KiB
Plaintext

$OpenBSD: patch-lib_Finance_QuoteHist_Generic_pm,v 1.2 2003/09/23 18:38:04 sturm Exp $
--- lib/Finance/QuoteHist/Generic.pm.orig 2003-01-16 17:38:20.000000000 +1100
+++ lib/Finance/QuoteHist/Generic.pm 2003-09-02 01:34:03.000000000 +1000
@@ -24,6 +24,7 @@ my @Scalar_Flags = qw(
ratio_precision
attempts
reverse
+ reverse_fetch
adjusted
has_non_adjusted
env_proxy
@@ -298,7 +299,13 @@ sub target_get {
my(@rows, %empty_fetch, %saw_good_rows);
foreach my $s ($self->symbols) {
- foreach ($self->$urlmaker($s)) {
+ my @urllist;
+ if ($self->{reverse_fetch}) {
+ @urllist = reverse ($self->$urlmaker($s));
+ } else {
+ @urllist = ($self->$urlmaker($s));
+ }
+ foreach (@urllist) {
if ($empty_fetch{$s}) {
print STDERR ref $self,
" passing on $s ($target) for now, empty fetch\n"
@@ -551,7 +558,9 @@ sub rows {
# Prep the rows
foreach (@$rows) {
+ next if (!defined($_));
foreach (@$_) {
+ next if (!defined($_));
# Zap leading and trailing white space
s/^\s+//;
s/\s+$//;
@@ -709,6 +718,11 @@ sub non_quote_row {
my @non_quotes;
foreach (0 .. $#$row) {
next if $_ == $dcol;
+ # Rows which have undefined fields
+ # (Yahoo include "date,dividend" in with the quotes)
+ if (!defined($row->[$_])) {
+ return $row;
+ }
next if $row->[$_] =~ /^\s*$/;
if ($row->[$_] !~ /^\s*\$*[\d\.,]+\s*$/) {
return $row;
@@ -1191,6 +1205,24 @@ flag. If the overall order is not that i
flag. Typically, site-specific sub classes of this module will take
care of setting this appropriately. The default is 0.
+=item reverse_fetch
+
+(The default value is 0.)
+
+If true, we fetch each batch of rows in the reverse order to that
+provided by C<quote_urls()>.
+
+Note that the order of rows within blocks is not affected,
+so you might get orders like 7,8,9, 4,5,6, 1,2,3.
+
+Background: I was trying to use Finance::QuoteHist to 'backfill'
+data for current ASX symbols from 1990 to today. When I asked for a
+start date too early the Yahoo server returned a header with no data
+blocks. After more than C<attempts> failures the fetch was aborted.
+By requesting the blocks in the reverse order I get all the data.
+I assume this would not work for any symbols without quotes within
+the most recent requested block (ie defunct symbols).
+
=item attempts
Sets how persistently the module tries to retrieve the quotes. There