blob: 388be108f6e01b2b4234cdd4610dde85f1afcbee [file] [log] [blame]
From 87af8b9b6f14beaade6e8d5130d062d2198ee5d9 Mon Sep 17 00:00:00 2001
From: Skyler Grey <sky@a.starrysky.fyi>
Date: Thu, 18 Jul 2024 20:24:24 +0000
Subject: [PATCH 1/2] fix!: Respect default-file when inserting entries
It's a common point of confusion that default-file does not set the
default file for insertions. This patch brings the behavior into line
with people's expectations.
BREAKING-CHANGE: If you are using default-file and expecting entries to be inserted to your main file, this will no longer happen
Fixes: beancount/fava#882
Refs: beancount/fava#1698, beancount/fava#822
---
src/fava/core/file.py | 5 ++++-
src/fava/help/options.md | 2 +-
2 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/src/fava/core/file.py b/src/fava/core/file.py
index e76b7ffb9..d225a2497 100644
--- a/src/fava/core/file.py
+++ b/src/fava/core/file.py
@@ -233,7 +233,10 @@ def insert_entries(self, entries: list[Directive]) -> None:
for entry in sorted(entries, key=_incomplete_sortkey):
path, updated_insert_options = insert_entry(
entry,
- self.ledger.beancount_file_path,
+ (
+ self.ledger.fava_options.default_file
+ or self.ledger.beancount_file_path
+ ),
insert_options=fava_options.insert_entry,
currency_column=fava_options.currency_column,
indent=fava_options.indent,
diff --git a/src/fava/help/options.md b/src/fava/help/options.md
index 22361dcec..dbef9eb23 100644
--- a/src/fava/help/options.md
+++ b/src/fava/help/options.md
@@ -113,7 +113,7 @@ a transaction, the account of the last posting is used) is matched against all
of the matching options before the entry date. If the entry is a Transaction and
no `insert-entry` option matches the account of the last posting the account of
the second to last posting and so on will be tried. If no `insert-entry` option
-matches or none is given, the entry will be inserted at the end of the main
+matches or none is given, the entry will be inserted at the end of the default
file.
---
From 3ff9ec604d9f6d16b4aa88107183a597f5e0c833 Mon Sep 17 00:00:00 2001
From: Skyler Grey <sky@a.starrysky.fyi>
Date: Thu, 18 Jul 2024 20:41:55 +0000
Subject: [PATCH 2/2] feat: Allow specifying the filename to default-file
I autogenerate some fava config, and one option I'd like to specify is
the default file.
Unfortunately, this previously had to be specified in the file which
would become the default file, leading to a messy and fragile setup in
which my (readonly) configuration file would become the default if the
magical "default-file" line was ever removed from the user-editable
config.
This feature allows existing semantics around default-file to continue,
while also providing the ability to set it in some other file if the
existing options are unsuitable.
---
src/fava/core/fava_options.py | 9 +++++++--
src/fava/help/options.md | 4 ++--
tests/test_core_fava_options.py | 2 ++
3 files changed, 11 insertions(+), 4 deletions(-)
diff --git a/src/fava/core/fava_options.py b/src/fava/core/fava_options.py
index 462ea29d5..23217da2b 100644
--- a/src/fava/core/fava_options.py
+++ b/src/fava/core/fava_options.py
@@ -119,12 +119,17 @@ def parse_option_custom_entry( # noqa: PLR0912
if key not in All_OPTS:
raise UnknownOptionError(key)
+ value = entry.values[1].value if len(entry.values) > 1 else None
+
if key == "default_file":
- filename, _lineno = get_position(entry)
+ if value is None:
+ filename, _lineno = get_position(entry)
+ else:
+ filename = value
+
options.default_file = filename
return
- value = entry.values[1].value
if not isinstance(value, str):
raise NotAStringOptionError(key)
diff --git a/src/fava/help/options.md b/src/fava/help/options.md
index dbef9eb23..968730620 100644
--- a/src/fava/help/options.md
+++ b/src/fava/help/options.md
@@ -50,8 +50,8 @@ locale `en_IN` the number `1111111.33` will be rendered `11,11,111.33`,
## `default-file`
Use this option to specify a default file for the editor to open. This option
-takes no value, the file the custom entry is in will be used as the default. If
-this option is not specified, Fava opens the main file by default.
+may optionally take a value of a filename to be the default. If you don't
+provide a filename, the file this custom option is in is used.
---
diff --git a/tests/test_core_fava_options.py b/tests/test_core_fava_options.py
index 03206e6ad..9ed1e5bec 100644
--- a/tests/test_core_fava_options.py
+++ b/tests/test_core_fava_options.py
@@ -27,6 +27,7 @@ def test_fava_options(load_doc_custom_entries: list[Custom]) -> None:
2016-04-14 custom "fava-option" "collapse_pattern" "(invalid"
2016-04-14 custom "fava-option" "fiscal-year-end" "01-11"
2016-04-14 custom "fava-option" "conversion-currencies" "USD EUR HOOLI"
+ 2016-06-14 custom "fava-option" "default-file" "/some/file/name"
"""
options, errors = parse_options(load_doc_custom_entries)
@@ -50,3 +51,4 @@ def test_fava_options(load_doc_custom_entries: list[Custom]) -> None:
assert options.collapse_pattern == [re.compile("Account:Name")]
assert options.fiscal_year_end == FiscalYearEnd(1, 11)
assert options.conversion_currencies == ("USD", "EUR", "HOOLI")
+ assert options.default_file == "/some/file/name"