Re: Timezones and price fetcher

2018-04-17 Thread Martin Blais
Fixed:
https://bitbucket.org/blais/beancount/commits/2171ff658cc4ed507376fed1811b9e9b798fb30f

Green CI build now:
https://bitbucket.org/blais/beancount/addon/pipelines/home#!/results/17


On Sun, Apr 15, 2018 at 12:51 PM, Martin Michlmayr  wrote:

> * Martin Blais  [2018-04-11 16:29]:
> > You ask at 14:00 in which timezone? US 14:00 or Europe 14:00?
> > If you don't know the instrument trades in the US, you ask at 14:00 in
> > Europe timezone?
>
> Sorry, I thought you told the API "I want the exchange rate at 14:00
> time".  If so, we'd all get the same answer regardless of our local
> timezone.  It would be nice to know what the APIs timezone is so we
> know what "14:00" really means but that doesn't matter for beancount.
>
> If you only tell the API "I want the exchange rate now", then I think
> beancount should store the time in UTC.
>
> > Our current API doesn't support you providing a time, just a date.
> > You request for a price at a particular date.
>
> Ok, (I think) I see the problem.
>
> If the API queried by beancount only provides 1 rate per day, we could
> easily find out what a "day" is according to them by doing a query
> every hour for 24 hours.
>
> Or just pick mid-day UTC.
>
> --
> Martin Michlmayr
> http://www.cyrius.com/
>
> --
> You received this message because you are subscribed to the Google Groups
> "Beancount" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to beancount+unsubscr...@googlegroups.com.
> To post to this group, send email to beancount@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/
> msgid/beancount/20180415165103.zaixqwtthtn35fuu%40jirafa.cyrius.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beancount+unsubscr...@googlegroups.com.
To post to this group, send email to beancount@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beancount/CAK21%2BhNe%2BNhNQxQ%3DUPs5b9kTBgnrQ9U-QdT3PU%2Bm8Kd7eC-M2g%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.


Re: Timezones and price fetcher

2018-04-15 Thread Martin Blais
On Sun, Apr 15, 2018 at 12:51 PM, Martin Michlmayr  wrote:

> * Martin Blais  [2018-04-11 16:29]:
> > You ask at 14:00 in which timezone? US 14:00 or Europe 14:00?
> > If you don't know the instrument trades in the US, you ask at 14:00 in
> > Europe timezone?
>
> Sorry, I thought you told the API "I want the exchange rate at 14:00
> time".  If so, we'd all get the same answer regardless of our local
> timezone.  It would be nice to know what the APIs timezone is so we
> know what "14:00" really means but that doesn't matter for beancount.


> If you only tell the API "I want the exchange rate now", then I think
> beancount should store the time in UTC.
>

If you store the timezone, there's no ambiguity.

I made a couple decisions staring at this long enough:

- The API will accept a time, not a date. bean-price will be in charge of
deciding how to convert that (and for now, using the local time, because
problems highlighted in prior discussion).

- All the datetime instances have to be aware. No more usage of naive
datetime instances anywhere. (I'm coming around to think that support naive
datetimes in the Python datetime module API is a design flaw.)




>
> > Our current API doesn't support you providing a time, just a date.
> > You request for a price at a particular date.
>
> Ok, (I think) I see the problem.
>
> If the API queried by beancount only provides 1 rate per day, we could
> easily find out what a "day" is according to them by doing a query
> every hour for 24 hours.
>
> Or just pick mid-day UTC.
>
> --
> Martin Michlmayr
> http://www.cyrius.com/
>
> --
> You received this message because you are subscribed to the Google Groups
> "Beancount" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to beancount+unsubscr...@googlegroups.com.
> To post to this group, send email to beancount@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/
> msgid/beancount/20180415165103.zaixqwtthtn35fuu%40jirafa.cyrius.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beancount+unsubscr...@googlegroups.com.
To post to this group, send email to beancount@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beancount/CAK21%2BhN6F7atoQ1ie7Mo_8FuUhw9hhogexL1a%2BpfcMpnOwOQ8w%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.


Re: Timezones and price fetcher

2018-04-15 Thread Martin Michlmayr
* Martin Blais  [2018-04-11 16:29]:
> You ask at 14:00 in which timezone? US 14:00 or Europe 14:00?
> If you don't know the instrument trades in the US, you ask at 14:00 in
> Europe timezone?

Sorry, I thought you told the API "I want the exchange rate at 14:00
time".  If so, we'd all get the same answer regardless of our local
timezone.  It would be nice to know what the APIs timezone is so we
know what "14:00" really means but that doesn't matter for beancount.

If you only tell the API "I want the exchange rate now", then I think
beancount should store the time in UTC.

> Our current API doesn't support you providing a time, just a date.
> You request for a price at a particular date.

Ok, (I think) I see the problem.

If the API queried by beancount only provides 1 rate per day, we could
easily find out what a "day" is according to them by doing a query
every hour for 24 hours.

Or just pick mid-day UTC.

-- 
Martin Michlmayr
http://www.cyrius.com/

-- 
You received this message because you are subscribed to the Google Groups 
"Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beancount+unsubscr...@googlegroups.com.
To post to this group, send email to beancount@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beancount/20180415165103.zaixqwtthtn35fuu%40jirafa.cyrius.com.
For more options, visit https://groups.google.com/d/optout.


Re: Timezones and price fetcher

2018-04-15 Thread Martin Blais
On Thu, Apr 12, 2018 at 2:15 AM, Justus Pendleton 
wrote:

> I don't see "lining up with markets" as a necessary condition since that's
> poorly defined for dealing with other timezones anyway.
>
> If I run bean-price when the market is open I'm going to get a quasi-real
> time quote that is delayed an arbitrary and possibly unknown amount of time
> anyway. It won't **really** be the price at 12:07pm. (This will vary
> depending on the source and the price fetcher, of course.)
>
> Just using the user's timezone seems to make the most since to me. But
> what happens with downloaded prices when the user moves to a different
> timezone?


Nothing changes.



> Or is the timezone going to be stored with the fetched price?
>

No, unless there's a good reason to.
That would break things (dates changing unexpectedly).
Want to keep it simple.




--
> You received this message because you are subscribed to the Google Groups
> "Beancount" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to beancount+unsubscr...@googlegroups.com.
> To post to this group, send email to beancount@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/
> msgid/beancount/c6450704-b02f-4698-9b5f-b0dc8d699f75%40googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beancount+unsubscr...@googlegroups.com.
To post to this group, send email to beancount@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beancount/CAK21%2BhPRqX4YkgkW3nAxGFR2ekffv1oDvpdXSzQHtBvRiCUD6A%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.


Re: Timezones and price fetcher

2018-04-11 Thread Martin Blais
On Wed, Apr 11, 2018 at 3:23 PM, Martin Michlmayr  wrote:

> * Martin Blais  [2018-04-10 22:07]:
> > Any thoughts welcome. I lean toward (B), but I'm annoyed.
>
> Maybe I misunderstand the problem, but with option (A) even if I don't
> know what timezone they use, I should get a consistent result if I ask
> the API for an exchange rate for a specific time (X) on a specific
> day.


What do you mean by "consistent"?
Consistently one day off if it is?



>   Maybe I don't know what timezone X is (as you say, only one
> publishes that info), but X is always going to be X from the POV of
> the source (i.e. the API).  (Similarly, if I in Europe ask the API for
> a rate at, let's say, 14:00, and you in New York ask for the rate at
> 14:00, we should get the same result.

And I don't mean asking at
> 14:00 hours but asking for the rate at 14:00)
>

You ask at 14:00 in which timezone? US 14:00 or Europe 14:00?
If you don't know the instrument trades in the US, you ask at 14:00 in
Europe timezone?

It also depends how the API expects its input. If it expects a date, it's
implicitly that of the instruments.
If it expects a timestamp, there's no date, it's up to you to take the
user's input date and convert it to a timestamp, assuming some timezone.

Our current API doesn't support you providing a time, just a date.
You request for a price at a particular date.
The output is also coerced to be only a date too (the Price directive, like
all other directives, supports only a date).

(I don't think adding time support to all directives would be a reasonable
compromise just for this.)


If I understand (B) correctly, someone moving from Japan to the US
> would suddenly get different results,


Yes, the date might differ.


> and I think making the result
> dependent on where you are is a bad idea.
>

I agree, but then I need the timezone of those instruments, and some
instruments don't have a timezone (FX).

I don't think there's any good solution for this than to input/output time
from those fetchers, but I do need to choose how to convert timestamps to
dates and dates to timestamps consistently (that's why unit tests are
broken if you run them from Europe right now).


--
> Martin Michlmayr
> http://www.cyrius.com/
>
> --
> You received this message because you are subscribed to the Google Groups
> "Beancount" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to beancount+unsubscr...@googlegroups.com.
> To post to this group, send email to beancount@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/
> msgid/beancount/20180411192331.nnbpxcox6jepe3ro%40jirafa.cyrius.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beancount+unsubscr...@googlegroups.com.
To post to this group, send email to beancount@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beancount/CAK21%2BhO261Mcqgk-vYhSyxWC69ep%3D5VtCeehjU7LDHxjTQkefg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.


Re: Timezones and price fetcher

2018-04-11 Thread Martin Michlmayr
* Martin Blais  [2018-04-10 22:07]:
> Any thoughts welcome. I lean toward (B), but I'm annoyed.

Maybe I misunderstand the problem, but with option (A) even if I don't
know what timezone they use, I should get a consistent result if I ask
the API for an exchange rate for a specific time (X) on a specific
day.  Maybe I don't know what timezone X is (as you say, only one
publishes that info), but X is always going to be X from the POV of
the source (i.e. the API).  (Similarly, if I in Europe ask the API for
a rate at, let's say, 14:00, and you in New York ask for the rate at
14:00, we should get the same result.  And I don't mean asking at
14:00 hours but asking for the rate at 14:00)

If I understand (B) correctly, someone moving from Japan to the US
would suddenly get different results, and I think making the result
dependent on where you are is a bad idea.

-- 
Martin Michlmayr
http://www.cyrius.com/

-- 
You received this message because you are subscribed to the Google Groups 
"Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beancount+unsubscr...@googlegroups.com.
To post to this group, send email to beancount@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beancount/20180411192331.nnbpxcox6jepe3ro%40jirafa.cyrius.com.
For more options, visit https://groups.google.com/d/optout.