Commit graph

251 commits

Author SHA1 Message Date
Brett Smith
84d8adb7f6 plugin: Move hook initialization from HookRegistry to run().
Makes more sense here so run can report errors in hook configuration.
2020-03-19 16:42:13 -04:00
Brett Smith
e424173216 test_plugin: Restore negative assert to test_registry_group_by_directive. 2020-03-19 16:11:29 -04:00
Brett Smith
484c47a680 test_plugin: Parametrize HookRegistry.group_by_directive tests. 2020-03-19 16:00:22 -04:00
Brett Smith
d4d9bd6554 tests: Test HookRegistry using test instance, not real one.
This is better testing praxis and more prep for hooks-get-config.
2020-03-19 15:49:56 -04:00
Brett Smith
501bd251cb tests: Turn tested hooks into fixtures.
This is in preparation for passing configuration to hooks.
That'll be a big change already, so I wanted this to be a
boring diff first.
2020-03-19 15:04:53 -04:00
Brett Smith
71531913d5 config: Start module.
Ultimately all values that come from user configuration will be generated
here.
2020-03-19 14:31:21 -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
b7089f5ddf plugin: Add meta_income_type validator. 2020-03-19 09:52:43 -04:00
Brett Smith
9b8563f3f0 data.Account: is_under accepts multiple arguments. 2020-03-19 09:47:10 -04:00
Brett Smith
f1c115de49 testutil: Improve check_post_meta error reporting.
This version makes it easier to get diffs between the expected
and actual metadata.
2020-03-19 09:32:06 -04:00
Brett Smith
cbd94d9b75 core: Make MetadataEnum aliases optional. 2020-03-18 18:23:42 -04:00
Brett Smith
7bc0ded9c6 tests: Check Account.is_under works on account boundaries. 2020-03-18 16:26:56 -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
f8ea5ce62c README: Initial commit. 2020-03-18 16:21:06 -04:00
Brett Smith
3f9e67de3a meta_tax_implication: Don't enforce on Assets:PrepaidExpenses. 2020-03-18 09:00:47 -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
1caeb9a1a6 setup: Introduce typecheck alias. 2020-03-18 08:20:45 -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
8dd611c669 tests: Remove unused import. 2020-03-17 17:47:23 -04:00
Brett Smith
e9096b9500 tests: Test metadata deletion through iter_postings. 2020-03-17 17:47:00 -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
Brett Smith
e7720b8fb8 tests: Add check_post_meta.
This makes it simple to conveniently check all posting metadata in tests.
2020-03-16 10:15:31 -04:00
Brett Smith
3fbc14d377 Improve organization between modules.
* Rename _typing to beancount_types to better reflect what it is.
* LessComparable isn't a Beancount type, so move that to
  plugin.core with its dependent helper classes.
* Errors are a core Beancount concept, so move that module to the
  top level and have it include appropriate type definitions.
2020-03-15 16:03:57 -04:00
Brett Smith
a41feb94b3 plugin: Transform posting hooks into transaction hooks.
I feel like posting hooks a case of premature optimization in early
development. This approach reduces the number of special cases in
the code and allows us to more strongly reason about hooks in the
type system.
2020-03-15 15:50:14 -04:00
Brett Smith
c9ff4ab746 plugin: Settle on words-with-dashes metadata keys. 2020-03-15 10:36:49 -04:00
Brett Smith
d8afb209f7 gitignore: Add .mypy_cache. 2020-03-15 10:25:10 -04:00
Brett Smith
ee038d7b7d plugin.core: Add type hints. 2020-03-08 18:24:51 -04:00
Brett Smith
547ae65780 plugin.core: _meta_set properly handles when post.meta is None.
post is a NamedTuple, so attribute assignment is not allowed.
Instead we have to construct a whole new Posting.
2020-03-08 11:32:03 -04:00
Brett Smith
c3c19b0ad2 plugin.core: Document base classes.
Since so much other code is built on these, I wanted to make sure I
wrote this while it was all fresh in my head.
2020-03-06 10:37:54 -05:00
Brett Smith
6e0c31f0ab plugin.core: Add missing import. 2020-03-06 09:24:15 -05:00
Brett Smith
d34db71542 plugin: Introduce HookRegistry.
This is the layer that keeps track of the different groups of hooks and
can filter them before runtime. The idea here is that you'll be able
to do things like skip hooks that require network access when you don't
have it, or skip CPU-intensive hooks when you don't need them, etc.
2020-03-06 09:22:55 -05:00
Brett Smith
d145e22734 test_plugin_run: Simplify testing strategy.
Avoid keeping state in the hook classes/instances.
2020-03-05 19:31:07 -05:00
Brett Smith
e9e2bb9b00 plugin: Rename the main method of hooks from check to run.
This will be more appropriate when we have hooks that do more than
check metadata.
2020-03-05 17:48:59 -05:00
Brett Smith
53329c7a23 plugin: Start entry point.
This doesn't integrate with existing hooks but at least sketches out the
main loop.
2020-03-05 17:41:58 -05:00
Brett Smith
dbe9362987 meta_tax_implication: Initial module and tests. 2020-03-05 15:48:10 -05:00
Brett Smith
5849b562d0 expenseAllocation: Switch to own MetadataEnum class.
Python's own enum works fine for the simple values that expenseAllocation
uses, but it won't work as well for metadata like taxImplication where
many of the values aren't legal Python identifiers. Introduce our own
MetadataEnum class with the necessary functionality, and switch to that.
2020-03-05 15:33:27 -05:00
Brett Smith
16c47c64b2 expenseAllocation: Date-limit the transactions we work on.
This prevents the plugin from giving meaning to postings that
might not really be there.
2020-03-05 14:37:47 -05:00
Brett Smith
910b95c942 errors: Add a __repr__.
This makes the errors easier to understand in test failures.
2020-03-05 13:57:20 -05:00
Brett Smith
34090df23f expenseAllocation: Set default values by account. 2020-03-05 13:44:36 -05:00
Brett Smith
a1ec25a33d expenseAllocation: Test typos as invalid values. 2020-03-05 12:23:52 -05:00
Brett Smith
99f97d3f58 expenseAllocation: Accept 'admin' shorthand for 'administration'. 2020-03-05 12:23:03 -05:00
Brett Smith
2ac434b616 expenseAllocation: Test setting at transaction level. 2020-03-05 12:21:20 -05:00
Brett Smith
d436a388f7 expenseAllocation: Only check Expenses postings. 2020-03-05 12:10:05 -05:00
Brett Smith
7862919022 expenseAllocation: Start checker.
This is the simplest version of a common validation we're going to do:
make sure that a particular piece of metadata has one of a set of
values.

This checker needs some bounds checking but I wanted to err on the
side of committing this early because it introduces so much base
infrastructure.
2020-03-05 12:05:13 -05:00