feat: make the inclusion of each notebook's note optional via --include-notes when listing notebooks

This commit is contained in:
cătălin 2024-05-17 18:45:22 +02:00
commit 3d93be39d6
No known key found for this signature in database
8 changed files with 632 additions and 512 deletions

View file

@ -8,8 +8,15 @@ from halig.commands.base import BaseCommand
class NotebooksCommand(BaseCommand):
def __init__(self, max_depth: int | float, *args, **kwargs):
def __init__(
self,
max_depth: int | float,
include_notes: bool = False,
*args,
**kwargs,
):
self.max_depth = max_depth
self.include_notes = include_notes
super().__init__(*args, **kwargs)
def build_tree(self, root_path: Path):
@ -24,7 +31,7 @@ class NotebooksCommand(BaseCommand):
if item.name != ".git":
item_tree_node = current_tree_node.add(item.name)
q.append((item, item_tree_node, depth + 1))
else:
elif self.include_notes and item.name.endswith(".age"):
current_tree_node.add(item.name)
return tree

View file

@ -24,6 +24,7 @@ time you perform a search, this flag should be set. Afterwards, you should only
when new notes have been added or older ones have been changed, since it's a slow
operation"""
OPTION_PLAIN_HELP = "Show the note as plaintext"
OPTION_INCLUDE_NODES_HELP = "Include each notebook's notes when listing"
# ARGUMENTS
ARGUMENT_EDIT_NOTE_HELP = """A valid, settings-relative path.
Be aware that valid can also mean implicit notes, that is, pointing to a

View file

@ -52,12 +52,17 @@ def notebooks(
"-l",
help=literals.OPTION_LEVEL_HELP,
),
include_notes: bool = Option(False, help=literals.OPTION_INCLUDE_NODES_HELP),
config: Optional[Path] = config_option, # noqa: UP007
):
if level < 0:
level = float("inf") # type: ignore[assignment]
settings = load_from_file(config)
command = NotebooksCommand(settings=settings, max_depth=level)
command = NotebooksCommand(
settings=settings,
max_depth=level,
include_notes=include_notes,
)
command.run()

View file

@ -9,7 +9,7 @@ from rich import print
def now():
tz = local_timezone()
return pendulum.now(tz)
return pendulum.now(tz) # type: ignore[reportArgumentType]
def capture(fn: Callable):
@ -24,7 +24,7 @@ def capture(fn: Callable):
print(f"[red]{exc}")
sys.exit(1)
except Exception as exc: # noqa: BLE001
print(f"[beld red] Unexpected error: {exc}")
print(f"[bold red] Unexpected error: {exc}")
sys.exit(2)
return wrapper

1078
pdm.lock generated

File diff suppressed because it is too large Load diff

View file

@ -25,12 +25,14 @@ def test_build_tree_max_depth_2(notes, notebooks_command: NotebooksCommand):
work = tree.children[1]
assert personal.label == "Personal"
assert work.label == "Work"
assert len(work.children) == 2
assert len(personal.children) == 1
assert len(work.children) == 1
assert len(personal.children) == 0
def test_build_tree_max_depth_inf(notes, notebooks_command: NotebooksCommand):
tree = notebooks_command.build_tree(notebooks_command.settings.notebooks_root_path)
def test_build_tree_max_depth_inf(notes, settings):
tree = NotebooksCommand(max_depth=float("inf"), settings=settings, include_notes=True).build_tree(
settings.notebooks_root_path
)
personal = tree.children[0]
work = tree.children[1]
assert personal.label == "Personal"

View file

@ -1,5 +1,6 @@
import pytest
from halig import utils
from halig.commands.reencrypt import ReencryptCommand
@ -14,3 +15,11 @@ def test_reencrypt(reencrypt_command):
for note_path in reencrypt_command.traverse():
with note_path.open("rb") as f:
assert reencrypt_command.encryptor.decrypt(f.read()) == b""
@pytest.mark.usefixtures("current_daily")
def test_reencrypt_warns_no_matching_key(reencrypt_command, halig_ssh_path, capfd):
reencrypt_command.encryptor.identities = []
reencrypt_command.run()
out, _ = capfd.readouterr()
assert f'because no matching keys were found, skipping ...' in out

View file

@ -41,22 +41,6 @@ def ssh_recipient(halig_ssh_public_key: str) -> Recipient:
return Recipient.from_str(halig_ssh_public_key)
# @pytest.fixture()
# def halig_path(fs, halig_ssh_public_key, halig_ssh_private_key) -> Path:
# fs.add_real_paths(["/etc/localtime"])
# ssh_path = Path("~/.ssh").expanduser()
# ssh_path.mkdir(parents=True)
#
# with (ssh_path / "id_ed25519").open("w") as f:
# f.write(halig_ssh_private_key)
#
# with (ssh_path / "id_ed25519.pub").open("w") as f:
# f.write(halig_ssh_public_key)
#
# halig_path = Path("~/.config/halig").expanduser()
# halig_path.mkdir(parents=True)
# return halig_path
@pytest.fixture()
def halig_ssh_path(tmp_path: Path, halig_ssh_public_key, halig_ssh_private_key) -> Path:
ssh_path = tmp_path / ".ssh"