mirror of
https://github.com/natelandau/obsidian-metadata.git
synced 2025-11-12 15:03:48 -05:00
fix(notes): preserve file encoding when writing to filesystem (#59)
This commit is contained in:
106
poetry.lock
generated
106
poetry.lock
generated
@@ -1,10 +1,9 @@
|
|||||||
# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand.
|
# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand.
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "argcomplete"
|
name = "argcomplete"
|
||||||
version = "3.1.1"
|
version = "3.1.1"
|
||||||
description = "Bash tab completion for argparse"
|
description = "Bash tab completion for argparse"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.6"
|
python-versions = ">=3.6"
|
||||||
files = [
|
files = [
|
||||||
@@ -19,7 +18,6 @@ test = ["coverage", "mypy", "pexpect", "ruff", "wheel"]
|
|||||||
name = "attrs"
|
name = "attrs"
|
||||||
version = "23.1.0"
|
version = "23.1.0"
|
||||||
description = "Classes Without Boilerplate"
|
description = "Classes Without Boilerplate"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -38,7 +36,6 @@ tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pyte
|
|||||||
name = "black"
|
name = "black"
|
||||||
version = "23.7.0"
|
version = "23.7.0"
|
||||||
description = "The uncompromising code formatter."
|
description = "The uncompromising code formatter."
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8"
|
python-versions = ">=3.8"
|
||||||
files = [
|
files = [
|
||||||
@@ -84,7 +81,6 @@ uvloop = ["uvloop (>=0.15.2)"]
|
|||||||
name = "cfgv"
|
name = "cfgv"
|
||||||
version = "3.4.0"
|
version = "3.4.0"
|
||||||
description = "Validate configuration and produce human readable error messages."
|
description = "Validate configuration and produce human readable error messages."
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8"
|
python-versions = ">=3.8"
|
||||||
files = [
|
files = [
|
||||||
@@ -96,7 +92,6 @@ files = [
|
|||||||
name = "charset-normalizer"
|
name = "charset-normalizer"
|
||||||
version = "3.2.0"
|
version = "3.2.0"
|
||||||
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
|
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7.0"
|
python-versions = ">=3.7.0"
|
||||||
files = [
|
files = [
|
||||||
@@ -181,7 +176,6 @@ files = [
|
|||||||
name = "click"
|
name = "click"
|
||||||
version = "8.1.7"
|
version = "8.1.7"
|
||||||
description = "Composable command line interface toolkit"
|
description = "Composable command line interface toolkit"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -196,7 +190,6 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""}
|
|||||||
name = "colorama"
|
name = "colorama"
|
||||||
version = "0.4.6"
|
version = "0.4.6"
|
||||||
description = "Cross-platform colored terminal text."
|
description = "Cross-platform colored terminal text."
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
|
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -208,7 +201,6 @@ files = [
|
|||||||
name = "commitizen"
|
name = "commitizen"
|
||||||
version = "3.7.0"
|
version = "3.7.0"
|
||||||
description = "Python commitizen client tool"
|
description = "Python commitizen client tool"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7,<4.0"
|
python-versions = ">=3.7,<4.0"
|
||||||
files = [
|
files = [
|
||||||
@@ -233,7 +225,6 @@ tomlkit = ">=0.5.3,<1.0.0"
|
|||||||
name = "coverage"
|
name = "coverage"
|
||||||
version = "7.3.0"
|
version = "7.3.0"
|
||||||
description = "Code coverage measurement for Python"
|
description = "Code coverage measurement for Python"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8"
|
python-versions = ">=3.8"
|
||||||
files = [
|
files = [
|
||||||
@@ -298,7 +289,6 @@ toml = ["tomli"]
|
|||||||
name = "decli"
|
name = "decli"
|
||||||
version = "0.6.1"
|
version = "0.6.1"
|
||||||
description = "Minimal, easy-to-use, declarative cli tool"
|
description = "Minimal, easy-to-use, declarative cli tool"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -310,7 +300,6 @@ files = [
|
|||||||
name = "distlib"
|
name = "distlib"
|
||||||
version = "0.3.7"
|
version = "0.3.7"
|
||||||
description = "Distribution utilities"
|
description = "Distribution utilities"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "*"
|
python-versions = "*"
|
||||||
files = [
|
files = [
|
||||||
@@ -322,7 +311,6 @@ files = [
|
|||||||
name = "emoji"
|
name = "emoji"
|
||||||
version = "2.8.0"
|
version = "2.8.0"
|
||||||
description = "Emoji for Python"
|
description = "Emoji for Python"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
|
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
|
||||||
files = [
|
files = [
|
||||||
@@ -337,7 +325,6 @@ dev = ["coverage", "coveralls", "pytest"]
|
|||||||
name = "exceptiongroup"
|
name = "exceptiongroup"
|
||||||
version = "1.1.3"
|
version = "1.1.3"
|
||||||
description = "Backport of PEP 654 (exception groups)"
|
description = "Backport of PEP 654 (exception groups)"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -352,7 +339,6 @@ test = ["pytest (>=6)"]
|
|||||||
name = "execnet"
|
name = "execnet"
|
||||||
version = "2.0.2"
|
version = "2.0.2"
|
||||||
description = "execnet: rapid multi-Python deployment"
|
description = "execnet: rapid multi-Python deployment"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -367,7 +353,6 @@ testing = ["hatch", "pre-commit", "pytest", "tox"]
|
|||||||
name = "filelock"
|
name = "filelock"
|
||||||
version = "3.12.3"
|
version = "3.12.3"
|
||||||
description = "A platform independent file lock."
|
description = "A platform independent file lock."
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8"
|
python-versions = ">=3.8"
|
||||||
files = [
|
files = [
|
||||||
@@ -386,7 +371,6 @@ testing = ["covdefaults (>=2.3)", "coverage (>=7.3)", "diff-cover (>=7.7)", "pyt
|
|||||||
name = "identify"
|
name = "identify"
|
||||||
version = "2.5.27"
|
version = "2.5.27"
|
||||||
description = "File identification library for Python"
|
description = "File identification library for Python"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8"
|
python-versions = ">=3.8"
|
||||||
files = [
|
files = [
|
||||||
@@ -401,7 +385,6 @@ license = ["ukkonen"]
|
|||||||
name = "importlib-metadata"
|
name = "importlib-metadata"
|
||||||
version = "6.8.0"
|
version = "6.8.0"
|
||||||
description = "Read metadata from Python packages"
|
description = "Read metadata from Python packages"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8"
|
python-versions = ">=3.8"
|
||||||
files = [
|
files = [
|
||||||
@@ -421,7 +404,6 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs
|
|||||||
name = "iniconfig"
|
name = "iniconfig"
|
||||||
version = "2.0.0"
|
version = "2.0.0"
|
||||||
description = "brain-dead simple config-ini parsing"
|
description = "brain-dead simple config-ini parsing"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -433,7 +415,6 @@ files = [
|
|||||||
name = "interrogate"
|
name = "interrogate"
|
||||||
version = "1.5.0"
|
version = "1.5.0"
|
||||||
description = "Interrogate a codebase for docstring coverage."
|
description = "Interrogate a codebase for docstring coverage."
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.6"
|
python-versions = ">=3.6"
|
||||||
files = [
|
files = [
|
||||||
@@ -459,7 +440,6 @@ tests = ["pytest", "pytest-cov", "pytest-mock"]
|
|||||||
name = "jinja2"
|
name = "jinja2"
|
||||||
version = "3.1.2"
|
version = "3.1.2"
|
||||||
description = "A very fast and expressive template engine."
|
description = "A very fast and expressive template engine."
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -477,7 +457,6 @@ i18n = ["Babel (>=2.7)"]
|
|||||||
name = "loguru"
|
name = "loguru"
|
||||||
version = "0.7.0"
|
version = "0.7.0"
|
||||||
description = "Python logging made (stupidly) simple"
|
description = "Python logging made (stupidly) simple"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.5"
|
python-versions = ">=3.5"
|
||||||
files = [
|
files = [
|
||||||
@@ -496,7 +475,6 @@ dev = ["Sphinx (==5.3.0)", "colorama (==0.4.5)", "colorama (==0.4.6)", "freezegu
|
|||||||
name = "markdown-it-py"
|
name = "markdown-it-py"
|
||||||
version = "3.0.0"
|
version = "3.0.0"
|
||||||
description = "Python port of markdown-it. Markdown parsing, done right!"
|
description = "Python port of markdown-it. Markdown parsing, done right!"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8"
|
python-versions = ">=3.8"
|
||||||
files = [
|
files = [
|
||||||
@@ -521,7 +499,6 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"]
|
|||||||
name = "markupsafe"
|
name = "markupsafe"
|
||||||
version = "2.1.3"
|
version = "2.1.3"
|
||||||
description = "Safely add untrusted strings to HTML/XML markup."
|
description = "Safely add untrusted strings to HTML/XML markup."
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -581,7 +558,6 @@ files = [
|
|||||||
name = "mdurl"
|
name = "mdurl"
|
||||||
version = "0.1.2"
|
version = "0.1.2"
|
||||||
description = "Markdown URL utilities"
|
description = "Markdown URL utilities"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -593,7 +569,6 @@ files = [
|
|||||||
name = "mypy"
|
name = "mypy"
|
||||||
version = "1.5.1"
|
version = "1.5.1"
|
||||||
description = "Optional static typing for Python"
|
description = "Optional static typing for Python"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8"
|
python-versions = ">=3.8"
|
||||||
files = [
|
files = [
|
||||||
@@ -640,7 +615,6 @@ reports = ["lxml"]
|
|||||||
name = "mypy-extensions"
|
name = "mypy-extensions"
|
||||||
version = "1.0.0"
|
version = "1.0.0"
|
||||||
description = "Type system extensions for programs checked with the mypy type checker."
|
description = "Type system extensions for programs checked with the mypy type checker."
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.5"
|
python-versions = ">=3.5"
|
||||||
files = [
|
files = [
|
||||||
@@ -652,7 +626,6 @@ files = [
|
|||||||
name = "nodeenv"
|
name = "nodeenv"
|
||||||
version = "1.8.0"
|
version = "1.8.0"
|
||||||
description = "Node.js virtual environment builder"
|
description = "Node.js virtual environment builder"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*"
|
python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*"
|
||||||
files = [
|
files = [
|
||||||
@@ -667,7 +640,6 @@ setuptools = "*"
|
|||||||
name = "packaging"
|
name = "packaging"
|
||||||
version = "23.1"
|
version = "23.1"
|
||||||
description = "Core utilities for Python packages"
|
description = "Core utilities for Python packages"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -679,7 +651,6 @@ files = [
|
|||||||
name = "pastel"
|
name = "pastel"
|
||||||
version = "0.2.1"
|
version = "0.2.1"
|
||||||
description = "Bring colors to your terminal."
|
description = "Bring colors to your terminal."
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
|
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
|
||||||
files = [
|
files = [
|
||||||
@@ -691,7 +662,6 @@ files = [
|
|||||||
name = "pathspec"
|
name = "pathspec"
|
||||||
version = "0.11.2"
|
version = "0.11.2"
|
||||||
description = "Utility library for gitignore style pattern matching of file paths."
|
description = "Utility library for gitignore style pattern matching of file paths."
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -703,7 +673,6 @@ files = [
|
|||||||
name = "pdoc"
|
name = "pdoc"
|
||||||
version = "14.0.0"
|
version = "14.0.0"
|
||||||
description = "API Documentation for Python Projects"
|
description = "API Documentation for Python Projects"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8"
|
python-versions = ">=3.8"
|
||||||
files = [
|
files = [
|
||||||
@@ -723,7 +692,6 @@ dev = ["black", "hypothesis", "mypy", "pygments (>=2.14.0)", "pytest", "pytest-c
|
|||||||
name = "platformdirs"
|
name = "platformdirs"
|
||||||
version = "3.10.0"
|
version = "3.10.0"
|
||||||
description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
|
description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -739,7 +707,6 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-co
|
|||||||
name = "pluggy"
|
name = "pluggy"
|
||||||
version = "1.3.0"
|
version = "1.3.0"
|
||||||
description = "plugin and hook calling mechanisms for python"
|
description = "plugin and hook calling mechanisms for python"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8"
|
python-versions = ">=3.8"
|
||||||
files = [
|
files = [
|
||||||
@@ -755,7 +722,6 @@ testing = ["pytest", "pytest-benchmark"]
|
|||||||
name = "poethepoet"
|
name = "poethepoet"
|
||||||
version = "0.22.0"
|
version = "0.22.0"
|
||||||
description = "A task runner that works well with poetry."
|
description = "A task runner that works well with poetry."
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8"
|
python-versions = ">=3.8"
|
||||||
files = [
|
files = [
|
||||||
@@ -774,7 +740,6 @@ poetry-plugin = ["poetry (>=1.0,<2.0)"]
|
|||||||
name = "pprintpp"
|
name = "pprintpp"
|
||||||
version = "0.4.0"
|
version = "0.4.0"
|
||||||
description = "A drop-in replacement for pprint that's actually pretty"
|
description = "A drop-in replacement for pprint that's actually pretty"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "*"
|
python-versions = "*"
|
||||||
files = [
|
files = [
|
||||||
@@ -784,14 +749,13 @@ files = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pre-commit"
|
name = "pre-commit"
|
||||||
version = "3.3.3"
|
version = "3.4.0"
|
||||||
description = "A framework for managing and maintaining multi-language pre-commit hooks."
|
description = "A framework for managing and maintaining multi-language pre-commit hooks."
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8"
|
python-versions = ">=3.8"
|
||||||
files = [
|
files = [
|
||||||
{file = "pre_commit-3.3.3-py2.py3-none-any.whl", hash = "sha256:10badb65d6a38caff29703362271d7dca483d01da88f9d7e05d0b97171c136cb"},
|
{file = "pre_commit-3.4.0-py2.py3-none-any.whl", hash = "sha256:96d529a951f8b677f730a7212442027e8ba53f9b04d217c4c67dc56c393ad945"},
|
||||||
{file = "pre_commit-3.3.3.tar.gz", hash = "sha256:a2256f489cd913d575c145132ae196fe335da32d91a8294b7afe6622335dd023"},
|
{file = "pre_commit-3.4.0.tar.gz", hash = "sha256:6bbd5129a64cad4c0dfaeeb12cd8f7ea7e15b77028d985341478c8af3c759522"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
@@ -805,7 +769,6 @@ virtualenv = ">=20.10.0"
|
|||||||
name = "prompt-toolkit"
|
name = "prompt-toolkit"
|
||||||
version = "3.0.39"
|
version = "3.0.39"
|
||||||
description = "Library for building powerful interactive command lines in Python"
|
description = "Library for building powerful interactive command lines in Python"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7.0"
|
python-versions = ">=3.7.0"
|
||||||
files = [
|
files = [
|
||||||
@@ -820,7 +783,6 @@ wcwidth = "*"
|
|||||||
name = "py"
|
name = "py"
|
||||||
version = "1.11.0"
|
version = "1.11.0"
|
||||||
description = "library with cross-python path, ini-parsing, io, code, log facilities"
|
description = "library with cross-python path, ini-parsing, io, code, log facilities"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
|
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
|
||||||
files = [
|
files = [
|
||||||
@@ -832,7 +794,6 @@ files = [
|
|||||||
name = "pygments"
|
name = "pygments"
|
||||||
version = "2.16.1"
|
version = "2.16.1"
|
||||||
description = "Pygments is a syntax highlighting package written in Python."
|
description = "Pygments is a syntax highlighting package written in Python."
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -845,14 +806,13 @@ plugins = ["importlib-metadata"]
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pytest"
|
name = "pytest"
|
||||||
version = "7.4.0"
|
version = "7.4.1"
|
||||||
description = "pytest: simple powerful testing with Python"
|
description = "pytest: simple powerful testing with Python"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
{file = "pytest-7.4.0-py3-none-any.whl", hash = "sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32"},
|
{file = "pytest-7.4.1-py3-none-any.whl", hash = "sha256:460c9a59b14e27c602eb5ece2e47bec99dc5fc5f6513cf924a7d03a578991b1f"},
|
||||||
{file = "pytest-7.4.0.tar.gz", hash = "sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a"},
|
{file = "pytest-7.4.1.tar.gz", hash = "sha256:2f2301e797521b23e4d2585a0a3d7b5e50fdddaaf7e7d6773ea26ddb17c213ab"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
@@ -870,7 +830,6 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no
|
|||||||
name = "pytest-clarity"
|
name = "pytest-clarity"
|
||||||
version = "1.0.1"
|
version = "1.0.1"
|
||||||
description = "A plugin providing an alternative, colourful diff output for failing assertions."
|
description = "A plugin providing an alternative, colourful diff output for failing assertions."
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
|
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
|
||||||
files = [
|
files = [
|
||||||
@@ -886,7 +845,6 @@ rich = ">=8.0.0"
|
|||||||
name = "pytest-mock"
|
name = "pytest-mock"
|
||||||
version = "3.11.1"
|
version = "3.11.1"
|
||||||
description = "Thin-wrapper around the mock package for easier use with pytest"
|
description = "Thin-wrapper around the mock package for easier use with pytest"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -904,7 +862,6 @@ dev = ["pre-commit", "pytest-asyncio", "tox"]
|
|||||||
name = "pytest-pretty-terminal"
|
name = "pytest-pretty-terminal"
|
||||||
version = "1.1.0"
|
version = "1.1.0"
|
||||||
description = "pytest plugin for generating prettier terminal output"
|
description = "pytest plugin for generating prettier terminal output"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8"
|
python-versions = ">=3.8"
|
||||||
files = [
|
files = [
|
||||||
@@ -922,7 +879,6 @@ test = ["pytest-adaptavist (>=5.1.1)"]
|
|||||||
name = "pytest-xdist"
|
name = "pytest-xdist"
|
||||||
version = "3.3.1"
|
version = "3.3.1"
|
||||||
description = "pytest xdist plugin for distributed testing, most importantly across multiple CPUs"
|
description = "pytest xdist plugin for distributed testing, most importantly across multiple CPUs"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -943,7 +899,6 @@ testing = ["filelock"]
|
|||||||
name = "pyyaml"
|
name = "pyyaml"
|
||||||
version = "6.0.1"
|
version = "6.0.1"
|
||||||
description = "YAML parser and emitter for Python"
|
description = "YAML parser and emitter for Python"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.6"
|
python-versions = ">=3.6"
|
||||||
files = [
|
files = [
|
||||||
@@ -993,7 +948,6 @@ files = [
|
|||||||
name = "questionary"
|
name = "questionary"
|
||||||
version = "1.10.0"
|
version = "1.10.0"
|
||||||
description = "Python library to build pretty command line user prompts ⭐️"
|
description = "Python library to build pretty command line user prompts ⭐️"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.6,<4.0"
|
python-versions = ">=3.6,<4.0"
|
||||||
files = [
|
files = [
|
||||||
@@ -1011,7 +965,6 @@ docs = ["Sphinx (>=3.3,<4.0)", "sphinx-autobuild (>=2020.9.1,<2021.0.0)", "sphin
|
|||||||
name = "regex"
|
name = "regex"
|
||||||
version = "2023.8.8"
|
version = "2023.8.8"
|
||||||
description = "Alternative regular expression module, to replace re."
|
description = "Alternative regular expression module, to replace re."
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.6"
|
python-versions = ">=3.6"
|
||||||
files = [
|
files = [
|
||||||
@@ -1109,7 +1062,6 @@ files = [
|
|||||||
name = "rich"
|
name = "rich"
|
||||||
version = "13.5.2"
|
version = "13.5.2"
|
||||||
description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal"
|
description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7.0"
|
python-versions = ">=3.7.0"
|
||||||
files = [
|
files = [
|
||||||
@@ -1128,7 +1080,6 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"]
|
|||||||
name = "ruamel-yaml"
|
name = "ruamel-yaml"
|
||||||
version = "0.17.32"
|
version = "0.17.32"
|
||||||
description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order"
|
description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3"
|
python-versions = ">=3"
|
||||||
files = [
|
files = [
|
||||||
@@ -1147,7 +1098,6 @@ jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"]
|
|||||||
name = "ruamel-yaml-clib"
|
name = "ruamel-yaml-clib"
|
||||||
version = "0.2.7"
|
version = "0.2.7"
|
||||||
description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml"
|
description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.5"
|
python-versions = ">=3.5"
|
||||||
files = [
|
files = [
|
||||||
@@ -1193,7 +1143,6 @@ files = [
|
|||||||
name = "ruff"
|
name = "ruff"
|
||||||
version = "0.0.286"
|
version = "0.0.286"
|
||||||
description = "An extremely fast Python linter, written in Rust."
|
description = "An extremely fast Python linter, written in Rust."
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -1220,7 +1169,6 @@ files = [
|
|||||||
name = "setuptools"
|
name = "setuptools"
|
||||||
version = "68.1.2"
|
version = "68.1.2"
|
||||||
description = "Easily download, build, install, upgrade, and uninstall Python packages"
|
description = "Easily download, build, install, upgrade, and uninstall Python packages"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8"
|
python-versions = ">=3.8"
|
||||||
files = [
|
files = [
|
||||||
@@ -1237,7 +1185,6 @@ testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (
|
|||||||
name = "sh"
|
name = "sh"
|
||||||
version = "2.0.6"
|
version = "2.0.6"
|
||||||
description = "Python subprocess replacement"
|
description = "Python subprocess replacement"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8.1,<4.0"
|
python-versions = ">=3.8.1,<4.0"
|
||||||
files = [
|
files = [
|
||||||
@@ -1249,7 +1196,6 @@ files = [
|
|||||||
name = "shellingham"
|
name = "shellingham"
|
||||||
version = "1.5.3"
|
version = "1.5.3"
|
||||||
description = "Tool to Detect Surrounding Shell"
|
description = "Tool to Detect Surrounding Shell"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -1261,7 +1207,6 @@ files = [
|
|||||||
name = "tabulate"
|
name = "tabulate"
|
||||||
version = "0.9.0"
|
version = "0.9.0"
|
||||||
description = "Pretty-print tabular data"
|
description = "Pretty-print tabular data"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -1276,7 +1221,6 @@ widechars = ["wcwidth"]
|
|||||||
name = "termcolor"
|
name = "termcolor"
|
||||||
version = "2.3.0"
|
version = "2.3.0"
|
||||||
description = "ANSI color formatting for output in terminal"
|
description = "ANSI color formatting for output in terminal"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -1291,7 +1235,6 @@ tests = ["pytest", "pytest-cov"]
|
|||||||
name = "toml"
|
name = "toml"
|
||||||
version = "0.10.2"
|
version = "0.10.2"
|
||||||
description = "Python Library for Tom's Obvious, Minimal Language"
|
description = "Python Library for Tom's Obvious, Minimal Language"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
|
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
|
||||||
files = [
|
files = [
|
||||||
@@ -1303,7 +1246,6 @@ files = [
|
|||||||
name = "tomli"
|
name = "tomli"
|
||||||
version = "2.0.1"
|
version = "2.0.1"
|
||||||
description = "A lil' TOML parser"
|
description = "A lil' TOML parser"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -1315,7 +1257,6 @@ files = [
|
|||||||
name = "tomlkit"
|
name = "tomlkit"
|
||||||
version = "0.12.1"
|
version = "0.12.1"
|
||||||
description = "Style preserving TOML library"
|
description = "Style preserving TOML library"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -1327,7 +1268,6 @@ files = [
|
|||||||
name = "typer"
|
name = "typer"
|
||||||
version = "0.9.0"
|
version = "0.9.0"
|
||||||
description = "Typer, build great CLIs. Easy to code. Based on Python type hints."
|
description = "Typer, build great CLIs. Easy to code. Based on Python type hints."
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.6"
|
python-versions = ">=3.6"
|
||||||
files = [
|
files = [
|
||||||
@@ -1349,7 +1289,6 @@ test = ["black (>=22.3.0,<23.0.0)", "coverage (>=6.2,<7.0)", "isort (>=5.0.6,<6.
|
|||||||
name = "types-python-dateutil"
|
name = "types-python-dateutil"
|
||||||
version = "2.8.19.14"
|
version = "2.8.19.14"
|
||||||
description = "Typing stubs for python-dateutil"
|
description = "Typing stubs for python-dateutil"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "*"
|
python-versions = "*"
|
||||||
files = [
|
files = [
|
||||||
@@ -1361,7 +1300,6 @@ files = [
|
|||||||
name = "typing-extensions"
|
name = "typing-extensions"
|
||||||
version = "4.7.1"
|
version = "4.7.1"
|
||||||
description = "Backported and Experimental Type Hints for Python 3.7+"
|
description = "Backported and Experimental Type Hints for Python 3.7+"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -1371,29 +1309,27 @@ files = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "typos"
|
name = "typos"
|
||||||
version = "1.16.9"
|
version = "1.16.10"
|
||||||
description = "Source Code Spelling Correction"
|
description = "Source Code Spelling Correction"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
{file = "typos-1.16.9-py3-none-macosx_10_7_x86_64.whl", hash = "sha256:a57a2bb3c2cefe635a311656e68c37befaee6380af7b5c670250125781862cdb"},
|
{file = "typos-1.16.10-py3-none-macosx_10_7_x86_64.whl", hash = "sha256:909d0c6446c3d1f68f2721e9acfd4ed996d459cb0fbea129d66daf22c42b2a2d"},
|
||||||
{file = "typos-1.16.9-py3-none-macosx_11_0_arm64.whl", hash = "sha256:22c3006eb56410d1854c78e982b2c61a2f35d5530fa9b58a5c61c9fff80a550e"},
|
{file = "typos-1.16.10-py3-none-macosx_11_0_arm64.whl", hash = "sha256:849b4b5b3f6a507e287b604f327bd881d5b96cb6c81856e05fb5891b6a3a0bba"},
|
||||||
{file = "typos-1.16.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a0424c6536dc7210892437c610d761278b13dc8a755e35a8a2ee16017bcf112"},
|
{file = "typos-1.16.10-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b6d2842494e03cc97133126509bc40b129de5810b86f3d1d3f15f966c8b7c031"},
|
||||||
{file = "typos-1.16.9-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e26df48469ce64d994b7abcfc31ac18080429e4099ac2d6485b610b589cf418"},
|
{file = "typos-1.16.10-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef6104f5951bb8348337c6cb64ebb4a6f72af2f6157e981473db8bd1ba3b5569"},
|
||||||
{file = "typos-1.16.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62abe376396b97b3a9830b51125af1207a0b598c8bad83a4a9c593e0a9e228a8"},
|
{file = "typos-1.16.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2325bdf30f38d53e5efdf170a7691ce4fb51411782c4fc465a862d152b0df198"},
|
||||||
{file = "typos-1.16.9-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:b4a6dc96a9e8f46f5ef7f49b6b8c504ac432e12ade37e08df4c488acca18b76f"},
|
{file = "typos-1.16.10-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:dc77b0ae05cf81cfa4bbb5486e008ce7049770539340ef01c3be950a91981032"},
|
||||||
{file = "typos-1.16.9-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:de0641a1c09f6c5255b9025e6de4e4137a3aaf910dc067312c288a22d3eb245c"},
|
{file = "typos-1.16.10-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:670bb6877b99de725fae6b374a4aef4f13ff1bfe492bb165054bac8454086e88"},
|
||||||
{file = "typos-1.16.9-py3-none-win32.whl", hash = "sha256:abcd1dde8b5c598363a392a32ebb1572442a377ad67377cb912b367d269e6a4a"},
|
{file = "typos-1.16.10-py3-none-win32.whl", hash = "sha256:2173f10ec3eff7812b49cce096199deee044c399fa2c49c9a7d24bf3e10d28b2"},
|
||||||
{file = "typos-1.16.9-py3-none-win_amd64.whl", hash = "sha256:1a3f65697e8d290abb05fda06704b64a90489e2b66802d1c2bdc1122d5fdc784"},
|
{file = "typos-1.16.10-py3-none-win_amd64.whl", hash = "sha256:486edb47ab514d0aa15f145b7da9b5fc5892f8bde5afc5e49e792f5a39e4ec77"},
|
||||||
{file = "typos-1.16.9.tar.gz", hash = "sha256:ebc3437484aff83c85cde05128533aaa2f4fdeb29054e7ae7511921d14bb7ce8"},
|
{file = "typos-1.16.10.tar.gz", hash = "sha256:e4325f5818de70f7cec5caeb8644853a8271fce47bba391f73b529750841c059"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "virtualenv"
|
name = "virtualenv"
|
||||||
version = "20.24.4"
|
version = "20.24.4"
|
||||||
description = "Virtual Python Environment builder"
|
description = "Virtual Python Environment builder"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -1414,7 +1350,6 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess
|
|||||||
name = "vulture"
|
name = "vulture"
|
||||||
version = "2.9.1"
|
version = "2.9.1"
|
||||||
description = "Find dead code"
|
description = "Find dead code"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
@@ -1429,7 +1364,6 @@ toml = "*"
|
|||||||
name = "wcwidth"
|
name = "wcwidth"
|
||||||
version = "0.2.6"
|
version = "0.2.6"
|
||||||
description = "Measures the displayed width of unicode strings in a terminal"
|
description = "Measures the displayed width of unicode strings in a terminal"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "*"
|
python-versions = "*"
|
||||||
files = [
|
files = [
|
||||||
@@ -1441,7 +1375,6 @@ files = [
|
|||||||
name = "win32-setctime"
|
name = "win32-setctime"
|
||||||
version = "1.1.0"
|
version = "1.1.0"
|
||||||
description = "A small Python utility to set file creation time on Windows"
|
description = "A small Python utility to set file creation time on Windows"
|
||||||
category = "main"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.5"
|
python-versions = ">=3.5"
|
||||||
files = [
|
files = [
|
||||||
@@ -1456,7 +1389,6 @@ dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"]
|
|||||||
name = "zipp"
|
name = "zipp"
|
||||||
version = "3.16.2"
|
version = "3.16.2"
|
||||||
description = "Backport of pathlib-compatible object wrapper for zip files"
|
description = "Backport of pathlib-compatible object wrapper for zip files"
|
||||||
category = "dev"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8"
|
python-versions = ">=3.8"
|
||||||
files = [
|
files = [
|
||||||
@@ -1470,5 +1402,5 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p
|
|||||||
|
|
||||||
[metadata]
|
[metadata]
|
||||||
lock-version = "2.0"
|
lock-version = "2.0"
|
||||||
python-versions = "^3.10"
|
python-versions = "^3.10"
|
||||||
content-hash = "6aca7ce8bb2d4e097d7e62625026bf85ab82710a010dacaf49b13371216bdbfa"
|
content-hash = "6aca7ce8bb2d4e097d7e62625026bf85ab82710a010dacaf49b13371216bdbfa"
|
||||||
|
|||||||
@@ -448,7 +448,8 @@ class Note:
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
log.trace(f"Writing note {p} to disk")
|
log.trace(f"Writing note {p} to disk")
|
||||||
p.write_text(self.file_content)
|
content_bytes = bytes(self.file_content, self.encoding)
|
||||||
|
p.write_bytes(content_bytes)
|
||||||
except FileNotFoundError as e:
|
except FileNotFoundError as e:
|
||||||
alerts.error(f"Note {p} not found. Exiting")
|
alerts.error(f"Note {p} not found. Exiting")
|
||||||
raise typer.Exit(code=1) from e
|
raise typer.Exit(code=1) from e
|
||||||
|
|||||||
44
tests/fixtures/CP1250.md
vendored
Normal file
44
tests/fixtures/CP1250.md
vendored
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
---
|
||||||
|
date_created: 2022-12-22 # confirm dates are translated to strings
|
||||||
|
tags:
|
||||||
|
- foo
|
||||||
|
- bar
|
||||||
|
frontmatter1: foo
|
||||||
|
frontmatter2: ["bar", "baz", "qux"]
|
||||||
|
??: ??
|
||||||
|
# Nested lists are not supported
|
||||||
|
# invalid:
|
||||||
|
# invalid:
|
||||||
|
# - invalid
|
||||||
|
# - invalid2
|
||||||
|
french1: "Voix ambigu<67> d'un cour qui, au z<>phyr, pr<70>fere les jattes de kiwis"
|
||||||
|
---
|
||||||
|
|
||||||
|
# Heading 1
|
||||||
|
|
||||||
|
inline1:: foo
|
||||||
|
inline1::bar baz
|
||||||
|
**inline2**:: [[foo]]
|
||||||
|
_inline3_:: value
|
||||||
|
??::??
|
||||||
|
key with space:: foo
|
||||||
|
french2:: Voix ambigu<67> d'un cour qui, au z<>phyr, pr<70>fere les jattes de kiwis.
|
||||||
|
|
||||||
|
> inline4:: foo
|
||||||
|
|
||||||
|
inline5::
|
||||||
|
|
||||||
|
foo bar [intext1:: foo] baz `#invalid` qux (intext2:: foo) foobar. #tag1 Foo bar #tag2 baz qux. [[link]]
|
||||||
|
|
||||||
|
The quick brown fox jumped over the lazy dog.
|
||||||
|
|
||||||
|
# tag3
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## invalid: invalid
|
||||||
|
|
||||||
|
```python
|
||||||
|
invalid:: invalid
|
||||||
|
#invalid
|
||||||
|
```
|
||||||
2
tests/fixtures/test_vault/sample_note.md
vendored
2
tests/fixtures/test_vault/sample_note.md
vendored
@@ -11,6 +11,7 @@ frontmatter2: ["bar", "baz", "qux"]
|
|||||||
# invalid:
|
# invalid:
|
||||||
# - invalid
|
# - invalid
|
||||||
# - invalid2
|
# - invalid2
|
||||||
|
french1: "Voix ambiguë d'un cœur qui, au zéphyr, préfère les jattes de kiwis"
|
||||||
---
|
---
|
||||||
|
|
||||||
# Heading 1
|
# Heading 1
|
||||||
@@ -21,6 +22,7 @@ inline1::bar baz
|
|||||||
_inline3_:: value
|
_inline3_:: value
|
||||||
🌱::🌿
|
🌱::🌿
|
||||||
key with space:: foo
|
key with space:: foo
|
||||||
|
french2:: Voix ambiguë d'un cœur qui, au zéphyr, préfère les jattes de kiwis.
|
||||||
|
|
||||||
> inline4:: foo
|
> inline4:: foo
|
||||||
|
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ def test_create_note_1(sample_note):
|
|||||||
assert note.note_path == Path(sample_note)
|
assert note.note_path == Path(sample_note)
|
||||||
assert note.dry_run is True
|
assert note.dry_run is True
|
||||||
assert note.encoding == "utf_8"
|
assert note.encoding == "utf_8"
|
||||||
assert len(note.metadata) == 20
|
assert len(note.metadata) == 22
|
||||||
|
|
||||||
with sample_note.open():
|
with sample_note.open():
|
||||||
content = sample_note.read_text()
|
content = sample_note.read_text()
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
# type: ignore
|
# type: ignore
|
||||||
"""Test for metadata methods within Note class."""
|
"""Test for metadata methods within Note class."""
|
||||||
|
import shutil
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
import typer
|
import typer
|
||||||
|
from charset_normalizer import from_path
|
||||||
from tests.helpers import Regex
|
from tests.helpers import Regex
|
||||||
|
|
||||||
from obsidian_metadata._utils.console import console
|
from obsidian_metadata._utils.console import console
|
||||||
@@ -97,8 +99,8 @@ def test__edit_inline_metadata_2(tmp_path, content, new_key, new_value, new_cont
|
|||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
("meta_type", "key", "value", "is_regex", "expected"),
|
("meta_type", "key", "value", "is_regex", "expected"),
|
||||||
[
|
[
|
||||||
(MetadataType.FRONTMATTER, None, None, False, 8),
|
(MetadataType.FRONTMATTER, None, None, False, 9),
|
||||||
(MetadataType.FRONTMATTER, None, None, True, 8),
|
(MetadataType.FRONTMATTER, None, None, True, 9),
|
||||||
(MetadataType.FRONTMATTER, "frontmatter1", None, False, 1),
|
(MetadataType.FRONTMATTER, "frontmatter1", None, False, 1),
|
||||||
(MetadataType.FRONTMATTER, r"\w+2", None, True, 3),
|
(MetadataType.FRONTMATTER, r"\w+2", None, True, 3),
|
||||||
(MetadataType.FRONTMATTER, "frontmatter1", "foo", False, 1),
|
(MetadataType.FRONTMATTER, "frontmatter1", "foo", False, 1),
|
||||||
@@ -108,10 +110,10 @@ def test__edit_inline_metadata_2(tmp_path, content, new_key, new_value, new_cont
|
|||||||
(MetadataType.FRONTMATTER, "frontmatterXX", None, False, 0),
|
(MetadataType.FRONTMATTER, "frontmatterXX", None, False, 0),
|
||||||
(MetadataType.FRONTMATTER, r"^\d", "XXX", False, 0),
|
(MetadataType.FRONTMATTER, r"^\d", "XXX", False, 0),
|
||||||
(MetadataType.FRONTMATTER, "frontmatterXX", r"^\d+", False, 0),
|
(MetadataType.FRONTMATTER, "frontmatterXX", r"^\d+", False, 0),
|
||||||
(MetadataType.INLINE, None, None, False, 10),
|
(MetadataType.INLINE, None, None, False, 11),
|
||||||
(MetadataType.INLINE, None, None, True, 10),
|
(MetadataType.INLINE, None, None, True, 11),
|
||||||
(MetadataType.INLINE, "inline1", None, False, 2),
|
(MetadataType.INLINE, "inline1", None, False, 2),
|
||||||
(MetadataType.INLINE, r"\w+2", None, True, 2),
|
(MetadataType.INLINE, r"\w+2", None, True, 3),
|
||||||
(MetadataType.INLINE, "inline1", "foo", False, 1),
|
(MetadataType.INLINE, "inline1", "foo", False, 1),
|
||||||
(MetadataType.INLINE, "inline1", r"\w+", True, 2),
|
(MetadataType.INLINE, "inline1", r"\w+", True, 2),
|
||||||
(MetadataType.INLINE, r"\w+1", "foo", True, 2),
|
(MetadataType.INLINE, r"\w+1", "foo", True, 2),
|
||||||
@@ -155,7 +157,7 @@ def test__update_inline_metadata_1(sample_note, meta_type):
|
|||||||
THEN raise an error
|
THEN raise an error
|
||||||
"""
|
"""
|
||||||
note = Note(note_path=sample_note)
|
note = Note(note_path=sample_note)
|
||||||
source_field = [x for x in note.metadata][0]
|
source_field = next(iter(note.metadata))
|
||||||
source_field.meta_type = meta_type
|
source_field.meta_type = meta_type
|
||||||
|
|
||||||
with pytest.raises(typer.Exit):
|
with pytest.raises(typer.Exit):
|
||||||
@@ -170,7 +172,7 @@ def test__update_inline_metadata_2(sample_note):
|
|||||||
THEN raise an error
|
THEN raise an error
|
||||||
"""
|
"""
|
||||||
note = Note(note_path=sample_note)
|
note = Note(note_path=sample_note)
|
||||||
source_field = [x for x in note.metadata][0]
|
source_field = next(iter(note.metadata))
|
||||||
source_field.meta_type = MetadataType.INLINE
|
source_field.meta_type = MetadataType.INLINE
|
||||||
|
|
||||||
with pytest.raises(typer.Exit):
|
with pytest.raises(typer.Exit):
|
||||||
@@ -198,11 +200,11 @@ def test__update_inline_metadata_3(
|
|||||||
note = Note(note_path=sample_note)
|
note = Note(note_path=sample_note)
|
||||||
|
|
||||||
if orig_key is None:
|
if orig_key is None:
|
||||||
source_inlinefield = [
|
source_inlinefield = next(
|
||||||
x
|
x
|
||||||
for x in note.metadata
|
for x in note.metadata
|
||||||
if x.meta_type == MetadataType.INLINE and x.normalized_value == orig_value
|
if x.meta_type == MetadataType.INLINE and x.normalized_value == orig_value
|
||||||
][0]
|
)
|
||||||
assert (
|
assert (
|
||||||
note._update_inline_metadata(source_inlinefield, new_key=new_key, new_value=new_value)
|
note._update_inline_metadata(source_inlinefield, new_key=new_key, new_value=new_value)
|
||||||
is True
|
is True
|
||||||
@@ -210,11 +212,11 @@ def test__update_inline_metadata_3(
|
|||||||
assert source_inlinefield.normalized_value == new_value
|
assert source_inlinefield.normalized_value == new_value
|
||||||
|
|
||||||
elif orig_value is None:
|
elif orig_value is None:
|
||||||
source_inlinefield = [
|
source_inlinefield = next(
|
||||||
x
|
x
|
||||||
for x in note.metadata
|
for x in note.metadata
|
||||||
if x.meta_type == MetadataType.INLINE and x.normalized_key == orig_key
|
if x.meta_type == MetadataType.INLINE and x.normalized_key == orig_key
|
||||||
][0]
|
)
|
||||||
assert (
|
assert (
|
||||||
note._update_inline_metadata(source_inlinefield, new_key=new_key, new_value=new_value)
|
note._update_inline_metadata(source_inlinefield, new_key=new_key, new_value=new_value)
|
||||||
is True
|
is True
|
||||||
@@ -222,13 +224,13 @@ def test__update_inline_metadata_3(
|
|||||||
assert source_inlinefield.normalized_key == new_key.lower()
|
assert source_inlinefield.normalized_key == new_key.lower()
|
||||||
|
|
||||||
else:
|
else:
|
||||||
source_inlinefield = [
|
source_inlinefield = next(
|
||||||
x
|
x
|
||||||
for x in note.metadata
|
for x in note.metadata
|
||||||
if x.meta_type == MetadataType.INLINE
|
if x.meta_type == MetadataType.INLINE
|
||||||
if x.normalized_key == orig_key
|
if x.normalized_key == orig_key
|
||||||
if x.normalized_value == orig_value
|
if x.normalized_value == orig_value
|
||||||
][0]
|
)
|
||||||
assert (
|
assert (
|
||||||
note._update_inline_metadata(source_inlinefield, new_key=new_key, new_value=new_value)
|
note._update_inline_metadata(source_inlinefield, new_key=new_key, new_value=new_value)
|
||||||
is True
|
is True
|
||||||
@@ -329,6 +331,18 @@ def test_add_metadata_6(sample_note):
|
|||||||
(MetadataType.INLINE, "test", "value", "test:: value"),
|
(MetadataType.INLINE, "test", "value", "test:: value"),
|
||||||
(MetadataType.TAGS, None, "testtag", "#testtag"),
|
(MetadataType.TAGS, None, "testtag", "#testtag"),
|
||||||
(MetadataType.TAGS, None, "#testtag", "#testtag"),
|
(MetadataType.TAGS, None, "#testtag", "#testtag"),
|
||||||
|
(
|
||||||
|
MetadataType.INLINE,
|
||||||
|
"french3",
|
||||||
|
"Voix ambiguë d'un cœur qui, au zéphyr, préfère les jattes de kiwis.",
|
||||||
|
"french3:: Voix ambiguë d'un cœur qui, au zéphyr, préfère les jattes de kiwis.",
|
||||||
|
),
|
||||||
|
(
|
||||||
|
MetadataType.FRONTMATTER,
|
||||||
|
"french3",
|
||||||
|
"Voix ambiguë d'un cœur qui, au zéphyr, préfère les jattes de kiwis.",
|
||||||
|
"french3: Voix ambiguë d'un cœur qui, au zéphyr, préfère les jattes de kiwis.",
|
||||||
|
),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
def test_add_metadata_7(sample_note, metatype, key, value, expected):
|
def test_add_metadata_7(sample_note, metatype, key, value, expected):
|
||||||
@@ -362,15 +376,14 @@ def test_commit_1(sample_note, tmp_path) -> None:
|
|||||||
note.sub(pattern="Heading 1", replacement="Heading 2")
|
note.sub(pattern="Heading 1", replacement="Heading 2")
|
||||||
|
|
||||||
note.commit()
|
note.commit()
|
||||||
note = Note(note_path=sample_note)
|
assert "Heading 2" in sample_note.read_text()
|
||||||
assert "Heading 2" in note.file_content
|
assert "Heading 1" not in sample_note.read_text()
|
||||||
assert "Heading 1" not in note.file_content
|
|
||||||
|
|
||||||
new_path = Path(tmp_path / "new_note.md")
|
new_path = Path(tmp_path / "new_note.md")
|
||||||
|
|
||||||
note.commit(new_path)
|
note.commit(new_path)
|
||||||
note2 = Note(note_path=new_path)
|
assert "Heading 2" in new_path.read_text()
|
||||||
assert "Heading 2" in note2.file_content
|
assert "Heading 1" not in new_path.read_text()
|
||||||
assert "Heading 1" not in note2.file_content
|
|
||||||
|
|
||||||
|
|
||||||
def test_commit_2(sample_note) -> None:
|
def test_commit_2(sample_note) -> None:
|
||||||
@@ -382,10 +395,37 @@ def test_commit_2(sample_note) -> None:
|
|||||||
"""
|
"""
|
||||||
note = Note(note_path=sample_note, dry_run=True)
|
note = Note(note_path=sample_note, dry_run=True)
|
||||||
note.sub(pattern="Heading 1", replacement="Heading 2")
|
note.sub(pattern="Heading 1", replacement="Heading 2")
|
||||||
|
|
||||||
note.commit()
|
note.commit()
|
||||||
note = Note(note_path=sample_note)
|
|
||||||
assert "Heading 1" in note.file_content
|
assert "Heading 2" in note.file_content
|
||||||
|
assert "Heading 1" in sample_note.read_text()
|
||||||
|
|
||||||
|
|
||||||
|
def test_commit_3(tmp_path) -> None:
|
||||||
|
"""Test that commit() method preserves encoding.
|
||||||
|
|
||||||
|
GIVEN a file in CP1250 encoding
|
||||||
|
WHEN the file is written to
|
||||||
|
THEN the file is output in its original encoding.
|
||||||
|
"""
|
||||||
|
source_file: Path = Path("tests/fixtures/CP1250.md")
|
||||||
|
dest_file: Path = Path(tmp_path / source_file.name)
|
||||||
|
shutil.copy(source_file, dest_file)
|
||||||
|
|
||||||
|
# Assert that the file is in CP1250 encoding
|
||||||
|
assert from_path(dest_file).best().encoding == "cp1250"
|
||||||
|
|
||||||
|
# Create the note object
|
||||||
|
note = Note(note_path=dest_file)
|
||||||
|
assert note.encoding == "cp1250"
|
||||||
|
|
||||||
|
# Modify and commit the note
|
||||||
|
note.sub(pattern="Heading 1", replacement="Heading 2")
|
||||||
|
note.commit()
|
||||||
|
|
||||||
|
# Assert that the file is still in CP1250 encoding
|
||||||
|
assert from_path(dest_file).best().encoding == "cp1250"
|
||||||
|
assert "Heading 2" in dest_file.read_text(encoding="cp1250")
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
@@ -439,8 +479,6 @@ def test_commit_2(sample_note) -> None:
|
|||||||
(MetadataType.ALL, None, r"^\d+", True, False),
|
(MetadataType.ALL, None, r"^\d+", True, False),
|
||||||
(MetadataType.ALL, "frontmatter1", "foo", False, True),
|
(MetadataType.ALL, "frontmatter1", "foo", False, True),
|
||||||
(MetadataType.ALL, r"^f\w+1", r"[a-z]{3}", True, True),
|
(MetadataType.ALL, r"^f\w+1", r"[a-z]{3}", True, True),
|
||||||
(MetadataType.ALL, "frontmatter1", "foo", False, True),
|
|
||||||
(MetadataType.ALL, r"^f\w+1", r"[a-z]{3}", True, True),
|
|
||||||
(MetadataType.ALL, "inline1", "foo", False, True),
|
(MetadataType.ALL, "inline1", "foo", False, True),
|
||||||
(MetadataType.ALL, r"^i\w+1", r"[a-z]{3}", True, True),
|
(MetadataType.ALL, r"^i\w+1", r"[a-z]{3}", True, True),
|
||||||
(MetadataType.ALL, None, "#tag1", False, True),
|
(MetadataType.ALL, None, "#tag1", False, True),
|
||||||
@@ -563,7 +601,6 @@ def test_delete_metadata_2(sample_note, meta_type, key, value, is_regex):
|
|||||||
(MetadataType.META, r"\d{8}", None, True),
|
(MetadataType.META, r"\d{8}", None, True),
|
||||||
(MetadataType.FRONTMATTER, r"\d{8}", None, True),
|
(MetadataType.FRONTMATTER, r"\d{8}", None, True),
|
||||||
(MetadataType.INLINE, r"\d{8}", None, True),
|
(MetadataType.INLINE, r"\d{8}", None, True),
|
||||||
(MetadataType.META, r"\d{8}", None, True),
|
|
||||||
(MetadataType.META, "frontmatter1", r"\d{8}", True),
|
(MetadataType.META, "frontmatter1", r"\d{8}", True),
|
||||||
(MetadataType.FRONTMATTER, "frontmatter1", r"\d{8}", True),
|
(MetadataType.FRONTMATTER, "frontmatter1", r"\d{8}", True),
|
||||||
(MetadataType.INLINE, "inline1", r"\d{8}", True),
|
(MetadataType.INLINE, "inline1", r"\d{8}", True),
|
||||||
@@ -835,7 +872,7 @@ def test_transpose_metadata_1(sample_note, begin, end, key, value, location):
|
|||||||
None,
|
None,
|
||||||
None,
|
None,
|
||||||
InsertLocation.BOTTOM,
|
InsertLocation.BOTTOM,
|
||||||
"```\n\ninline1:: bar baz\ninline1:: foo\ninline2:: [[foo]]\ninline3:: value\ninline4:: foo\ninline5::\nintext1:: foo\nintext2:: foo\nkey with space:: foo\n🌱:: 🌿",
|
"```\n\nfrench2:: Voix ambiguë d'un cœur qui, au zéphyr, préfère les jattes de kiwis.\ninline1:: bar baz\ninline1:: foo\ninline2:: [[foo]]\ninline3:: value\ninline4:: foo\ninline5::\nintext1:: foo\nintext2:: foo\nkey with space:: foo\n🌱:: 🌿",
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
@@ -978,7 +1015,7 @@ no frontmatter
|
|||||||
)
|
)
|
||||||
new_note = """\
|
new_note = """\
|
||||||
---
|
---
|
||||||
key: value
|
french: Voix ambiguë d'un cœur qui, au zéphyr, préfère les jattes de kiwis.
|
||||||
---
|
---
|
||||||
|
|
||||||
# Header1
|
# Header1
|
||||||
@@ -986,7 +1023,11 @@ inline:: only
|
|||||||
no frontmatter
|
no frontmatter
|
||||||
"""
|
"""
|
||||||
note = Note(note_path=note_path)
|
note = Note(note_path=note_path)
|
||||||
note.add_metadata(meta_type=MetadataType.FRONTMATTER, added_key="key", added_value="value")
|
note.add_metadata(
|
||||||
|
meta_type=MetadataType.FRONTMATTER,
|
||||||
|
added_key="french",
|
||||||
|
added_value="Voix ambiguë d'un cœur qui, au zéphyr, préfère les jattes de kiwis.",
|
||||||
|
)
|
||||||
assert note.write_frontmatter() is True
|
assert note.write_frontmatter() is True
|
||||||
assert note.file_content == new_note
|
assert note.file_content == new_note
|
||||||
|
|
||||||
|
|||||||
@@ -31,12 +31,18 @@ def test_vault_creation(test_vault, tmp_path):
|
|||||||
assert len(vault.all_notes) == 2
|
assert len(vault.all_notes) == 2
|
||||||
assert vault.frontmatter == {
|
assert vault.frontmatter == {
|
||||||
"date_created": ["2022-12-22"],
|
"date_created": ["2022-12-22"],
|
||||||
|
"french1": [
|
||||||
|
"Voix ambiguë d'un cœur qui, au zéphyr, préfère les jattes de kiwis",
|
||||||
|
],
|
||||||
"frontmatter1": ["foo"],
|
"frontmatter1": ["foo"],
|
||||||
"frontmatter2": ["bar", "baz", "qux"],
|
"frontmatter2": ["bar", "baz", "qux"],
|
||||||
"tags": ["bar", "foo"],
|
"tags": ["bar", "foo"],
|
||||||
"🌱": ["🌿"],
|
"🌱": ["🌿"],
|
||||||
}
|
}
|
||||||
assert vault.inline_meta == {
|
assert vault.inline_meta == {
|
||||||
|
"french2": [
|
||||||
|
"Voix ambiguë d'un cœur qui, au zéphyr, préfère les jattes de kiwis.",
|
||||||
|
],
|
||||||
"inline1": ["bar baz", "foo"],
|
"inline1": ["bar baz", "foo"],
|
||||||
"inline2": ["[[foo]]"],
|
"inline2": ["[[foo]]"],
|
||||||
"inline3": ["value"],
|
"inline3": ["value"],
|
||||||
|
|||||||
Reference in New Issue
Block a user