2018-11-29 14:14:44 Oon-Ee Ng <[email protected]>:
> On Thu, Nov 29, 2018 at 2:06 PM Daniele Nicolodi <[email protected]> wrote:
> 
>     On 28/11/2018 20:53, Martin Blais wrote:
>     >     The current source file for importing that I'm working on lists
>     >     transaction in reverse chronological order (I want chronological, in
>     >     this case) but also has a reference number that is monotonically
>     >     increasing. So my current hack is to set line number for the
>     >     transactions to be that reference number.
>     >
>     >
>     > That seems not unlike the idea of storing the time in metadata -
>     > discussed in a prior thread but not yet implemented - and to use that as
>     > a secondary sort key. Maybe I can generalize this idea of a secondary
>     > sort key to let users put whatever they want in there (as long as the
>     > type is comparable, for sorting).
> 
>     Aren't directives written in the order in which they are returned by the
>     importer?  I didn't see any mention of the fact that bean-extract does
>     any sorting on its own in the documentation, but I may have missed it.
> 
>     Cheers,
>     Dan
> 
> 
> That was my impression as well, but after testing it out I found this was not 
> the case. The returned ordered list of
> transactions is then sorted by date and line number. 
> 

I was once troubled by this sorting behaviour as well. Intra-day
transactions are sorted reverse-chronologically (newer to older) in the
CSV file exported from my bank. My importer parses the entries in
reversed order, returning a correctly ordered list of transactions
(older to newer). However, Beancount will again sort the list returned
by importer, shuffling the intra-day transactions:

https://github.com/beancount/beancount/blob/fb2d29eed89a8e15f1635847beba0e5598c0ea06/beancount/ingest/extract.py#L73-L74

I had once submitted a pull request to disable this behaviour, it was
merged but later reverted by Martin.

So I came up with a workaround:

```
# Re-generate "lineno" to force sorting
for lineno, entry in enumerate(entries, start=1):
    entry.meta['lineno'] = lineno
```

Just generate artificial "lineno" keys and insert them into the
transactions before returning them to Beancount. This way I can preserve
the order.

A possible approach to make both parties happy would be to add a new
parameter to "extract_from_file()" function, allowing importers to
disable the sorting behaviour in post-processings.


> --
> 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
> [email protected].
> To post to this group, send email to [email protected].
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/beancount/
> CAGQ70esZ%2BSFkn4VcaG1dh%2BP1i%3DNgQ9rHvSdx-_8eVKvJ1%3DcRMg%40mail.gmail.com.
> For more options, visit https://groups.google.com/d/optout.

-- 
Zhuoyun Wei

-- 
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 [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beancount/20181129151330.GA28669%40tarball.wzyboy.org.
For more options, visit https://groups.google.com/d/optout.

Attachment: signature.asc
Description: PGP signature

Reply via email to