Commit graph

40 commits

Author SHA1 Message Date
Brett Smith
9c33517583 data: Add Metadata.first_link() method. 2020-06-11 10:44:05 -04:00
Brett Smith
8d3d7e7ce4 data: Add part slicing methods to Account. 2020-06-09 09:04:27 -04:00
Brett Smith
52fa66bba1 data: Specify the type of Posting.cost.
The rationale is the same as it was for Posting.amount.
2020-05-28 09:01:00 -04:00
Brett Smith
bd0d607032 typing: Annotate Iterators more specifically. 2020-04-28 16:35:15 -04:00
Brett Smith
701ccdc192 tests: Test where Transactions are real NamedTuples.
This makes methods like _replace available in real code, and caught the
bug where we can't use @functools.lru_cache with Transaction arguments,
because they're unhashable due to their mutable members.
2020-04-28 15:33:30 -04:00
Brett Smith
e79877ee6a data: Add rt-id to LINK_METADATA.
This gets closer to our real intentions: anything that checks link
metadata should check rt-id. MetaRepoLinks is the exception, not
the rule, in ignoring rt-id.
2020-04-28 10:48:10 -04:00
Brett Smith
694630ca02 setup: Don't disallow untyped calls.
Unfortunately this is becoming more trouble than it's worth as we
call more and more untyped Beancount functions.
disallow_untyped_defs provides most of the value of what we really
want here, so go ahead and turn this off.
2020-04-27 16:53:22 -04:00
Brett Smith
d3415a8721 data: Type declare that Posting.meta is a PostingMeta.
This is necessary for users to call PostingMeta properties like date
as intended.
2020-04-27 16:44:06 -04:00
Brett Smith
8d584734ec data: Add Posting.from_entries() method. 2020-04-21 15:24:04 -04:00
Brett Smith
171aed16f9 data: Bugfix super() arguments in Amount.__new__.
Apparently I was more tired than I realized last night.
2020-04-12 08:58:27 -04:00
Brett Smith
01c3b975d8 data: Fix Amount.__new__.
See the comments for background and rationale.
2020-04-11 22:26:01 -04:00
Brett Smith
14a87e792b data: Move iter_posting into Posting class methods.
As I move into reporting code, having Posting.from_beancount() is
handy, and then from_txn() might as well come along for the ride.
2020-04-11 16:16:35 -04:00
Brett Smith
eb7f73e644 data.PostingMeta: Add date property.
This is something reporting tools will want a lot. This will make it
easier for them to look at just postings without worrying about the
parent transaction.
2020-04-11 09:20:35 -04:00
Brett Smith
4eaba1ebf6 data: Add is_opening_balance_txn function. 2020-04-09 15:11:16 -04:00
Brett Smith
d66ba8773f data: Make balance_of currency-aware. 2020-04-09 14:13:07 -04:00
Brett Smith
c6dc2d83ac data.Amount: Introduce class and simplify code to use it.
See docstring for full rationale. This greatly reduces the need for other
plugin code to handle the case of `post.units.number is None`, eliminating
the need for entire methods and letting it do plain numeric comparisons.
2020-04-09 12:00:38 -04:00
Brett Smith
e00ec95d93 Account: Add is_opening_balance method. 2020-04-08 15:04:25 -04:00
Brett Smith
bb84cb5741 data.balance_of: Take account predicates, not just names.
For increased flexibility.
In particular, now you can pass in Account boolean methods to
call those directly.
2020-04-08 14:16:57 -04:00
Brett Smith
28e59e7a3b data: Add balance_of() function. 2020-04-08 11:55:00 -04:00
Brett Smith
0413fed8b9 meta_entity: Use payee as entity when metadata not available. RT#10529. 2020-04-06 16:03:56 -04:00
Brett Smith
c712105bed Revise chart of accounts used throughout.
The main impetus of this change is to rename accounts that were outside
Beancount's accepted five root accounts, to move them into that
structure. This includes:

  Accrued:*Payable: → Liabilities:Payable:*
  Accrued:*Receivable: → Assets:Receivable:*
  UneanedIncome:* → Liabilities:UnearnedIncome:*

Note the last change did inspire in a change to our validation rules. We no
longer require income-type on unearned income, because it's no longer
considered income at all. Once it's earned and converted to an Income
account, that has an income-type of course.

This did inspire another rename that was not required, but
provided more consistency with the other account names above:

  Assets:Prepaid* → Assets:Prepaid:*

Where applicable, I have generally extended tests to make sure one of each
of the five account types is tested. (This mostly meant adding an Equity
account to the tests.) I also added tests for key parts of the hierarchy,
like Assets:Receivable and Liabilities:Payable, where applicable.

As part of this change, Account.is_real_asset() got renamed to
Account.is_cash_equivalent(), to better self-document its purpose.
2020-04-03 10:34:10 -04:00
Brett Smith
3aee1efdc1 data: Define __slots__ for core classes.
Because these are the classes that get instantiated many times while
iterating transactions, the performance benefit of defining __slots__
is worth the development overhead.
2020-03-31 15:00:15 -04:00
Brett Smith
1fc9363b26 data: Add is_credit() and is_debit() methods to Posting.
The main motivation for this change is to make sure that higher-level
code deals with the fact that self.units.number can be None, and has
an easy way to do so.

I'm not sure all our code is *currently* doing the right thing for this
case, because I'm not sure it will ever actually come up. It's possible
that earlier Beancount plugins fill in decimal amounts for postings
that are originally loaded with self.units.number=None. I'll have to see
later whether this case comes up in reality, and then deal with it if so.
For now the safest strategy seems to be that most code should operate
when self.units.number is None.
2020-03-31 10:07:25 -04:00
Brett Smith
2d49f7dfbc data: Add Account.is_checking() method. 2020-03-30 15:01:25 -04:00
Brett Smith
d9dca2cd68 data: Posting.is_payment casts threshold to address typing issue. 2020-03-29 15:32:51 -04:00
Brett Smith
93feb2f4a3 data: Add Posting.is_payment() method. 2020-03-29 10:18:51 -04:00
Brett Smith
9b63d898af data: Add Metadata class.
As I start writing more link-checking hooks, I want a common place to
write link-parsing code.  This new class will be that place.
2020-03-28 13:35:38 -04:00
Brett Smith
5c6043311b meta_repo_links: Start hook. 2020-03-20 16:47:06 -04:00
Brett Smith
a78db2ed36 data: Add docstrings. 2020-03-19 12:19:34 -04:00
Brett Smith
4fee91ad48 data.Account: Use multi-arg is_under in is_real_asset. 2020-03-19 10:43:20 -04:00
Brett Smith
7cd569be7b data.Account: Add is_income method. 2020-03-19 10:23:55 -04:00
Brett Smith
9b8563f3f0 data.Account: is_under accepts multiple arguments. 2020-03-19 09:47:10 -04:00
Brett Smith
89aaae821b data.Account: Exclude PrepaidVacation from "real" assets.
Same rationale as PrepaidExpenses.
2020-03-18 16:25:37 -04:00
Brett Smith
28238643a3 data.Account: Add is_real_asset method. 2020-03-18 08:59:03 -04:00
Brett Smith
661fe676e1 Document known typecheck failures. 2020-03-18 08:24:07 -04:00
Brett Smith
b2ef561c85 data: Introduce Posting class.
Our version of Posting is interface-compatible with Beancount's,
but makes stronger guarantees about the data types for our
higher-level code to rely on.
2020-03-18 07:48:08 -04:00
Brett Smith
163ecbc7d3 data: iter_postings uses Account. 2020-03-17 18:06:43 -04:00
Brett Smith
6c0f23b2fa data: Start Account class. 2020-03-17 18:05:24 -04:00
Brett Smith
3a73bc2239 data: Start iter_postings function. 2020-03-17 17:08:47 -04:00
Brett Smith
f4978046b8 data: Start module with PostingMeta class.
As I'm pushing to reimplement payment-report/income-report, I see query and
reporting tools will want easy access to these kinds of views, so here it
starts.
2020-03-17 17:08:05 -04:00