mirror of
https://github.com/jrnl-org/jrnl.git
synced 2025-05-12 09:28:31 +02:00
move journal class files into journals dir
This commit is contained in:
parent
36a22352c6
commit
f0ff6b9926
21 changed files with 65 additions and 54 deletions
|
@ -11,7 +11,7 @@ import colorama
|
||||||
from jrnl.os_compat import on_windows
|
from jrnl.os_compat import on_windows
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from jrnl.Entry import Entry
|
from jrnl.journals import Entry
|
||||||
|
|
||||||
if on_windows():
|
if on_windows():
|
||||||
colorama.init()
|
colorama.init()
|
||||||
|
|
|
@ -69,7 +69,7 @@ def postconfig_list(args: argparse.Namespace, config: dict, **_) -> int:
|
||||||
|
|
||||||
@cmd_requires_valid_journal_name
|
@cmd_requires_valid_journal_name
|
||||||
def postconfig_import(args: argparse.Namespace, config: dict, **_) -> int:
|
def postconfig_import(args: argparse.Namespace, config: dict, **_) -> int:
|
||||||
from jrnl.Journal import open_journal
|
from jrnl.journals import open_journal
|
||||||
from jrnl.plugins import get_importer
|
from jrnl.plugins import get_importer
|
||||||
|
|
||||||
# Requires opening the journal
|
# Requires opening the journal
|
||||||
|
@ -90,7 +90,7 @@ def postconfig_encrypt(
|
||||||
"""
|
"""
|
||||||
from jrnl.config import update_config
|
from jrnl.config import update_config
|
||||||
from jrnl.install import save_config
|
from jrnl.install import save_config
|
||||||
from jrnl.Journal import open_journal
|
from jrnl.journals import open_journal
|
||||||
|
|
||||||
# Open the journal
|
# Open the journal
|
||||||
journal = open_journal(args.journal_name, config)
|
journal = open_journal(args.journal_name, config)
|
||||||
|
@ -145,7 +145,7 @@ def postconfig_decrypt(
|
||||||
"""Decrypts into new file. If filename is not set, we encrypt the journal file itself."""
|
"""Decrypts into new file. If filename is not set, we encrypt the journal file itself."""
|
||||||
from jrnl.config import update_config
|
from jrnl.config import update_config
|
||||||
from jrnl.install import save_config
|
from jrnl.install import save_config
|
||||||
from jrnl.Journal import open_journal
|
from jrnl.journals import open_journal
|
||||||
|
|
||||||
journal = open_journal(args.journal_name, config)
|
journal = open_journal(args.journal_name, config)
|
||||||
|
|
||||||
|
|
|
@ -15,8 +15,8 @@ from jrnl.config import scope_config
|
||||||
from jrnl.editor import get_text_from_editor
|
from jrnl.editor import get_text_from_editor
|
||||||
from jrnl.editor import get_text_from_stdin
|
from jrnl.editor import get_text_from_stdin
|
||||||
from jrnl.exception import JrnlException
|
from jrnl.exception import JrnlException
|
||||||
from jrnl.Journal import Journal
|
from jrnl.journals import Journal
|
||||||
from jrnl.Journal import open_journal
|
from jrnl.journals import open_journal
|
||||||
from jrnl.messages import Message
|
from jrnl.messages import Message
|
||||||
from jrnl.messages import MsgStyle
|
from jrnl.messages import MsgStyle
|
||||||
from jrnl.messages import MsgText
|
from jrnl.messages import MsgText
|
||||||
|
@ -28,7 +28,7 @@ from jrnl.path import expand_path
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from argparse import Namespace
|
from argparse import Namespace
|
||||||
|
|
||||||
from jrnl.Entry import Entry
|
from jrnl.journals import Entry
|
||||||
|
|
||||||
|
|
||||||
def start(args: "Namespace"):
|
def start(args: "Namespace"):
|
||||||
|
|
|
@ -17,13 +17,14 @@ from xml.parsers.expat import ExpatError
|
||||||
|
|
||||||
import tzlocal
|
import tzlocal
|
||||||
|
|
||||||
from jrnl import Entry
|
|
||||||
from jrnl import Journal
|
|
||||||
from jrnl import __title__
|
from jrnl import __title__
|
||||||
from jrnl import __version__
|
from jrnl import __version__
|
||||||
|
|
||||||
|
from .Entry import Entry
|
||||||
|
from .Journal import Journal
|
||||||
|
|
||||||
class DayOne(Journal.Journal):
|
|
||||||
|
class DayOne(Journal):
|
||||||
"""A special Journal handling DayOne files"""
|
"""A special Journal handling DayOne files"""
|
||||||
|
|
||||||
# InvalidFileException was added to plistlib in Python3.4
|
# InvalidFileException was added to plistlib in Python3.4
|
||||||
|
@ -63,7 +64,7 @@ class DayOne(Journal.Journal):
|
||||||
if timezone.key != "UTC":
|
if timezone.key != "UTC":
|
||||||
date = date.replace(fold=1) + timezone.utcoffset(date)
|
date = date.replace(fold=1) + timezone.utcoffset(date)
|
||||||
|
|
||||||
entry = Entry.Entry(
|
entry = Entry(
|
||||||
self,
|
self,
|
||||||
date,
|
date,
|
||||||
text=dict_entry["Entry Text"],
|
text=dict_entry["Entry Text"],
|
|
@ -9,8 +9,8 @@ from typing import TYPE_CHECKING
|
||||||
|
|
||||||
import ansiwrap
|
import ansiwrap
|
||||||
|
|
||||||
from .color import colorize
|
from jrnl.color import colorize
|
||||||
from .color import highlight_tags_with_background_color
|
from jrnl.color import highlight_tags_with_background_color
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from .Journal import Journal
|
from .Journal import Journal
|
|
@ -6,11 +6,12 @@ import fnmatch
|
||||||
import os
|
import os
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
from jrnl import Journal
|
|
||||||
from jrnl import time
|
from jrnl import time
|
||||||
|
|
||||||
|
from .Journal import Journal
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from jrnl.Entry import Entry
|
from jrnl.journals import Entry
|
||||||
|
|
||||||
|
|
||||||
def get_files(journal_config: str) -> list[str]:
|
def get_files(journal_config: str) -> list[str]:
|
||||||
|
@ -22,7 +23,7 @@ def get_files(journal_config: str) -> list[str]:
|
||||||
return filenames
|
return filenames
|
||||||
|
|
||||||
|
|
||||||
class Folder(Journal.Journal):
|
class Folder(Journal):
|
||||||
"""A Journal handling multiple files in a folder"""
|
"""A Journal handling multiple files in a folder"""
|
||||||
|
|
||||||
def __init__(self, name: str = "default", **kwargs):
|
def __init__(self, name: str = "default", **kwargs):
|
|
@ -6,7 +6,6 @@ import logging
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from jrnl import Entry
|
|
||||||
from jrnl import time
|
from jrnl import time
|
||||||
from jrnl.config import validate_journal_name
|
from jrnl.config import validate_journal_name
|
||||||
from jrnl.encryption import determine_encryption_method
|
from jrnl.encryption import determine_encryption_method
|
||||||
|
@ -17,6 +16,8 @@ from jrnl.output import print_msg
|
||||||
from jrnl.path import expand_path
|
from jrnl.path import expand_path
|
||||||
from jrnl.prompt import yesno
|
from jrnl.prompt import yesno
|
||||||
|
|
||||||
|
from .Entry import Entry
|
||||||
|
|
||||||
|
|
||||||
class Tag:
|
class Tag:
|
||||||
def __init__(self, name, count=0):
|
def __init__(self, name, count=0):
|
||||||
|
@ -184,11 +185,11 @@ class Journal:
|
||||||
if entries:
|
if entries:
|
||||||
entries[-1].text = journal_txt[last_entry_pos : match.start()]
|
entries[-1].text = journal_txt[last_entry_pos : match.start()]
|
||||||
last_entry_pos = match.end()
|
last_entry_pos = match.end()
|
||||||
entries.append(Entry.Entry(self, date=new_date))
|
entries.append(Entry(self, date=new_date))
|
||||||
|
|
||||||
# If no entries were found, treat all the existing text as an entry made now
|
# If no entries were found, treat all the existing text as an entry made now
|
||||||
if not entries:
|
if not entries:
|
||||||
entries.append(Entry.Entry(self, date=time.parse("now")))
|
entries.append(Entry(self, date=time.parse("now")))
|
||||||
|
|
||||||
# Fill in the text of the last entry
|
# Fill in the text of the last entry
|
||||||
entries[-1].text = journal_txt[last_entry_pos:]
|
entries[-1].text = journal_txt[last_entry_pos:]
|
||||||
|
@ -354,7 +355,7 @@ class Journal:
|
||||||
)
|
)
|
||||||
if not date: # Still nothing? Meh, just live in the moment.
|
if not date: # Still nothing? Meh, just live in the moment.
|
||||||
date = time.parse("now")
|
date = time.parse("now")
|
||||||
entry = Entry.Entry(self, date, raw, starred=starred)
|
entry = Entry(self, date, raw, starred=starred)
|
||||||
entry.modified = True
|
entry.modified = True
|
||||||
self.entries.append(entry)
|
self.entries.append(entry)
|
||||||
if sort:
|
if sort:
|
||||||
|
@ -410,7 +411,7 @@ class LegacyJournal(Journal):
|
||||||
else:
|
else:
|
||||||
starred = False
|
starred = False
|
||||||
|
|
||||||
current_entry = Entry.Entry(
|
current_entry = Entry(
|
||||||
self, date=new_date, text=line[date_length + 1 :], starred=starred
|
self, date=new_date, text=line[date_length + 1 :], starred=starred
|
||||||
)
|
)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
|
@ -455,21 +456,21 @@ def open_journal(journal_name, config, legacy=False):
|
||||||
if config["journal"].strip("/").endswith(".dayone") or "entries" in os.listdir(
|
if config["journal"].strip("/").endswith(".dayone") or "entries" in os.listdir(
|
||||||
config["journal"]
|
config["journal"]
|
||||||
):
|
):
|
||||||
from jrnl import DayOneJournal
|
from jrnl.journals import DayOne
|
||||||
|
|
||||||
return DayOneJournal.DayOne(**config).open()
|
return DayOne(**config).open()
|
||||||
else:
|
else:
|
||||||
from jrnl import FolderJournal
|
from jrnl.journals import Folder
|
||||||
|
|
||||||
return FolderJournal.Folder(journal_name, **config).open()
|
return Folder(journal_name, **config).open()
|
||||||
|
|
||||||
if not config["encrypt"]:
|
if not config["encrypt"]:
|
||||||
if legacy:
|
if legacy:
|
||||||
return LegacyJournal(journal_name, **config).open()
|
return LegacyJournal(journal_name, **config).open()
|
||||||
if config["journal"].endswith(os.sep):
|
if config["journal"].endswith(os.sep):
|
||||||
from jrnl import FolderJournal
|
from jrnl.journals import Folder
|
||||||
|
|
||||||
return FolderJournal.Folder(journal_name, **config).open()
|
return Folder(journal_name, **config).open()
|
||||||
return Journal(journal_name, **config).open()
|
return Journal(journal_name, **config).open()
|
||||||
|
|
||||||
if legacy:
|
if legacy:
|
5
jrnl/journals/__init__.py
Normal file
5
jrnl/journals/__init__.py
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
from .DayOneJournal import DayOne
|
||||||
|
from .Entry import Entry
|
||||||
|
from .FolderJournal import Folder
|
||||||
|
from .Journal import Journal
|
||||||
|
from .Journal import open_journal
|
|
@ -7,8 +7,8 @@ from typing import TYPE_CHECKING
|
||||||
from jrnl.plugins.text_exporter import TextExporter
|
from jrnl.plugins.text_exporter import TextExporter
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from jrnl.Entry import Entry
|
from jrnl.journals import Entry
|
||||||
from jrnl.Journal import Journal
|
from jrnl.journals import Journal
|
||||||
|
|
||||||
|
|
||||||
class DatesExporter(TextExporter):
|
class DatesExporter(TextExporter):
|
||||||
|
|
|
@ -13,8 +13,8 @@ from jrnl.messages import MsgText
|
||||||
from jrnl.plugins.text_exporter import TextExporter
|
from jrnl.plugins.text_exporter import TextExporter
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from jrnl.Entry import Entry
|
from jrnl.journals import Entry
|
||||||
from jrnl.Journal import Journal
|
from jrnl.journals import Journal
|
||||||
|
|
||||||
|
|
||||||
class FancyExporter(TextExporter):
|
class FancyExporter(TextExporter):
|
||||||
|
|
|
@ -11,7 +11,7 @@ from jrnl.messages import MsgText
|
||||||
from jrnl.output import print_msg
|
from jrnl.output import print_msg
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from jrnl.Journal import Journal
|
from jrnl.journals import Journal
|
||||||
|
|
||||||
|
|
||||||
class JRNLImporter:
|
class JRNLImporter:
|
||||||
|
|
|
@ -8,8 +8,8 @@ from jrnl.plugins.text_exporter import TextExporter
|
||||||
from jrnl.plugins.util import get_tags_count
|
from jrnl.plugins.util import get_tags_count
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from jrnl.Entry import Entry
|
from jrnl.journals import Entry
|
||||||
from jrnl.Journal import Journal
|
from jrnl.journals import Journal
|
||||||
|
|
||||||
|
|
||||||
class JSONExporter(TextExporter):
|
class JSONExporter(TextExporter):
|
||||||
|
|
|
@ -12,8 +12,8 @@ from jrnl.output import print_msg
|
||||||
from jrnl.plugins.text_exporter import TextExporter
|
from jrnl.plugins.text_exporter import TextExporter
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from jrnl.Entry import Entry
|
from jrnl.journals import Entry
|
||||||
from jrnl.Journal import Journal
|
from jrnl.journals import Journal
|
||||||
|
|
||||||
|
|
||||||
class MarkdownExporter(TextExporter):
|
class MarkdownExporter(TextExporter):
|
||||||
|
|
|
@ -7,8 +7,8 @@ from jrnl.plugins.text_exporter import TextExporter
|
||||||
from jrnl.plugins.util import get_tags_count
|
from jrnl.plugins.util import get_tags_count
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from jrnl.Entry import Entry
|
from jrnl.journals import Entry
|
||||||
from jrnl.Journal import Journal
|
from jrnl.journals import Journal
|
||||||
|
|
||||||
|
|
||||||
class TagExporter(TextExporter):
|
class TagExporter(TextExporter):
|
||||||
|
|
|
@ -13,8 +13,8 @@ from jrnl.messages import MsgText
|
||||||
from jrnl.output import print_msg
|
from jrnl.output import print_msg
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from jrnl.Entry import Entry
|
from jrnl.journals import Entry
|
||||||
from jrnl.Journal import Journal
|
from jrnl.journals import Journal
|
||||||
|
|
||||||
|
|
||||||
class TextExporter:
|
class TextExporter:
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from jrnl.Journal import Journal
|
from jrnl.journals import Journal
|
||||||
|
|
||||||
|
|
||||||
def get_tags_count(journal: "Journal") -> set[tuple[int, str]]:
|
def get_tags_count(journal: "Journal") -> set[tuple[int, str]]:
|
||||||
|
|
|
@ -8,8 +8,8 @@ from jrnl.plugins.json_exporter import JSONExporter
|
||||||
from jrnl.plugins.util import get_tags_count
|
from jrnl.plugins.util import get_tags_count
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from jrnl.Entry import Entry
|
from jrnl.journals import Entry
|
||||||
from jrnl.Journal import Journal
|
from jrnl.journals import Journal
|
||||||
|
|
||||||
|
|
||||||
class XMLExporter(JSONExporter):
|
class XMLExporter(JSONExporter):
|
||||||
|
|
|
@ -13,8 +13,8 @@ from jrnl.output import print_msg
|
||||||
from jrnl.plugins.text_exporter import TextExporter
|
from jrnl.plugins.text_exporter import TextExporter
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from jrnl.Entry import Entry
|
from jrnl.journals import Entry
|
||||||
from jrnl.Journal import Journal
|
from jrnl.journals import Journal
|
||||||
|
|
||||||
|
|
||||||
class YAMLExporter(TextExporter):
|
class YAMLExporter(TextExporter):
|
||||||
|
@ -34,7 +34,7 @@ class YAMLExporter(TextExporter):
|
||||||
body = body_wrapper + entry.body
|
body = body_wrapper + entry.body
|
||||||
|
|
||||||
tagsymbols = entry.journal.config["tagsymbols"]
|
tagsymbols = entry.journal.config["tagsymbols"]
|
||||||
# see also Entry.Entry.rag_regex
|
# see also Entry.rag_regex
|
||||||
multi_tag_regex = re.compile(rf"(?u)^\s*([{tagsymbols}][-+*#/\w]+\s*)+$")
|
multi_tag_regex = re.compile(rf"(?u)^\s*([{tagsymbols}][-+*#/\w]+\s*)+$")
|
||||||
|
|
||||||
"""Increase heading levels in body text"""
|
"""Increase heading levels in body text"""
|
||||||
|
|
|
@ -4,12 +4,13 @@
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from jrnl import Journal
|
|
||||||
from jrnl import __version__
|
from jrnl import __version__
|
||||||
from jrnl.config import is_config_json
|
from jrnl.config import is_config_json
|
||||||
from jrnl.config import load_config
|
from jrnl.config import load_config
|
||||||
from jrnl.config import scope_config
|
from jrnl.config import scope_config
|
||||||
from jrnl.exception import JrnlException
|
from jrnl.exception import JrnlException
|
||||||
|
from jrnl.journals import Journal
|
||||||
|
from jrnl.journals import open_journal
|
||||||
from jrnl.messages import Message
|
from jrnl.messages import Message
|
||||||
from jrnl.messages import MsgStyle
|
from jrnl.messages import MsgStyle
|
||||||
from jrnl.messages import MsgText
|
from jrnl.messages import MsgText
|
||||||
|
@ -129,14 +130,14 @@ def upgrade_jrnl(config_path: str) -> None:
|
||||||
)
|
)
|
||||||
|
|
||||||
backup(path, binary=True)
|
backup(path, binary=True)
|
||||||
old_journal = Journal.open_journal(
|
old_journal = open_journal(
|
||||||
journal_name, scope_config(config, journal_name), legacy=True
|
journal_name, scope_config(config, journal_name), legacy=True
|
||||||
)
|
)
|
||||||
|
|
||||||
logging.debug(f"Clearing encryption method for '{journal_name}' journal")
|
logging.debug(f"Clearing encryption method for '{journal_name}' journal")
|
||||||
|
|
||||||
# Update the encryption method
|
# Update the encryption method
|
||||||
new_journal = Journal.Journal.from_journal(old_journal)
|
new_journal = Journal.from_journal(old_journal)
|
||||||
new_journal.config["encrypt"] = "jrnlv2"
|
new_journal.config["encrypt"] = "jrnlv2"
|
||||||
new_journal._get_encryption_method()
|
new_journal._get_encryption_method()
|
||||||
# Copy over password (jrnlv1 only supported password-based encryption)
|
# Copy over password (jrnlv1 only supported password-based encryption)
|
||||||
|
@ -156,10 +157,10 @@ def upgrade_jrnl(config_path: str) -> None:
|
||||||
)
|
)
|
||||||
|
|
||||||
backup(path)
|
backup(path)
|
||||||
old_journal = Journal.open_journal(
|
old_journal = open_journal(
|
||||||
journal_name, scope_config(config, journal_name), legacy=True
|
journal_name, scope_config(config, journal_name), legacy=True
|
||||||
)
|
)
|
||||||
all_journals.append(Journal.Journal.from_journal(old_journal))
|
all_journals.append(Journal.from_journal(old_journal))
|
||||||
|
|
||||||
# loop through lists to validate
|
# loop through lists to validate
|
||||||
failed_journals = [j for j in all_journals if not j.validate_parsing()]
|
failed_journals = [j for j in all_journals if not j.validate_parsing()]
|
||||||
|
|
|
@ -157,6 +157,8 @@ pycodestyle = [
|
||||||
"flake8-*" = ["+*"]
|
"flake8-*" = ["+*"]
|
||||||
flake8-black = ["-BLK901"]
|
flake8-black = ["-BLK901"]
|
||||||
|
|
||||||
|
[tool.flakeheaven.exceptions."jrnl/journals/__init__.py"]
|
||||||
|
pyflakes = ["-F401"]
|
||||||
|
|
||||||
[build-system]
|
[build-system]
|
||||||
requires = ["poetry-core>=1.0.0"]
|
requires = ["poetry-core>=1.0.0"]
|
||||||
|
|
|
@ -19,10 +19,10 @@ def random_string():
|
||||||
|
|
||||||
@pytest.mark.parametrize("export_format", ["pretty", "short"])
|
@pytest.mark.parametrize("export_format", ["pretty", "short"])
|
||||||
@mock.patch("builtins.print")
|
@mock.patch("builtins.print")
|
||||||
@mock.patch("jrnl.Journal.Journal.pprint")
|
@mock.patch("jrnl.controller.Journal.pprint")
|
||||||
def test_display_search_results_pretty_short(mock_pprint, mock_print, export_format):
|
def test_display_search_results_pretty_short(mock_pprint, mock_print, export_format):
|
||||||
mock_args = parse_args(["--format", export_format])
|
mock_args = parse_args(["--format", export_format])
|
||||||
test_journal = mock.Mock(wraps=jrnl.Journal.Journal)
|
test_journal = mock.Mock(wraps=jrnl.journals.Journal)
|
||||||
|
|
||||||
_display_search_results(mock_args, test_journal)
|
_display_search_results(mock_args, test_journal)
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ def test_display_search_results_builtin_plugins(
|
||||||
test_filename = random_string
|
test_filename = random_string
|
||||||
mock_args = parse_args(["--format", export_format, "--file", test_filename])
|
mock_args = parse_args(["--format", export_format, "--file", test_filename])
|
||||||
|
|
||||||
test_journal = mock.Mock(wraps=jrnl.Journal.Journal)
|
test_journal = mock.Mock(wraps=jrnl.journals.Journal)
|
||||||
mock_export = mock.Mock()
|
mock_export = mock.Mock()
|
||||||
mock_exporter.return_value.export = mock_export
|
mock_exporter.return_value.export = mock_export
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue