build: update ruff and pass linting

This commit is contained in:
Nathaniel Landau
2023-02-26 10:41:17 -05:00
parent 3bbcf3a987
commit 8f8174a902
8 changed files with 172 additions and 186 deletions

View File

@@ -5,7 +5,7 @@ default_stages: [commit, manual]
fail_fast: true fail_fast: true
repos: repos:
- repo: "https://github.com/commitizen-tools/commitizen" - repo: "https://github.com/commitizen-tools/commitizen"
rev: v2.42.0 rev: v2.42.1
hooks: hooks:
- id: commitizen - id: commitizen
- id: commitizen-branch - id: commitizen-branch
@@ -64,7 +64,7 @@ repos:
rev: "v0.0.252" rev: "v0.0.252"
hooks: hooks:
- id: ruff - id: ruff
args: ["--extend-ignore", "I001,D301,D401,PLR2004,PLR0913"] args: ["--extend-ignore", "I001,D301,D401,PLR2004"]
exclude: tests/ exclude: tests/
- repo: "https://github.com/jendrikseipp/vulture" - repo: "https://github.com/jendrikseipp/vulture"

176
poetry.lock generated
View File

@@ -139,14 +139,14 @@ files = [
[[package]] [[package]]
name = "commitizen" name = "commitizen"
version = "2.42.0" version = "2.42.1"
description = "Python commitizen client tool" description = "Python commitizen client tool"
category = "dev" category = "dev"
optional = false optional = false
python-versions = ">=3.6.2,<4.0.0" python-versions = ">=3.6.2,<4.0.0"
files = [ files = [
{file = "commitizen-2.42.0-py3-none-any.whl", hash = "sha256:3be082c1eecbf1a1fb4c390fbbd3fd26be39e0f105f30c9079fc0e789386d08d"}, {file = "commitizen-2.42.1-py3-none-any.whl", hash = "sha256:fad7d37cfae361a859b713d4ac591859d5ca03137dd52de4e1bd208f7f45d5dc"},
{file = "commitizen-2.42.0.tar.gz", hash = "sha256:c4c944408f3d55ca22b1c136e22217c167123c54f46730eb27a1c6503d705c69"}, {file = "commitizen-2.42.1.tar.gz", hash = "sha256:eac18c7c65587061aac6829534907aeb208405b8230bfd35ec08503c228a7f17"},
] ]
[package.dependencies] [package.dependencies]
@@ -164,63 +164,63 @@ typing-extensions = ">=4.0.1,<5.0.0"
[[package]] [[package]]
name = "coverage" name = "coverage"
version = "7.2.0" version = "7.2.1"
description = "Code coverage measurement for Python" description = "Code coverage measurement for Python"
category = "dev" category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
{file = "coverage-7.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:90e7a4cbbb7b1916937d380beb1315b12957b8e895d7d9fb032e2038ac367525"}, {file = "coverage-7.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:49567ec91fc5e0b15356da07a2feabb421d62f52a9fff4b1ec40e9e19772f5f8"},
{file = "coverage-7.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:34d7211be69b215ad92298a962b2cd5a4ef4b17c7871d85e15d3d1b6dc8d8c96"}, {file = "coverage-7.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d2ef6cae70168815ed91388948b5f4fcc69681480a0061114db737f957719f03"},
{file = "coverage-7.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:971b49dbf713044c3e5f6451b39f65615d4d1c1d9a19948fa0f41b0245a98765"}, {file = "coverage-7.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3004765bca3acd9e015794e5c2f0c9a05587f5e698127ff95e9cfba0d3f29339"},
{file = "coverage-7.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f0557289260125a6c453ad5673ba79e5b6841d9a20c9e101f758bfbedf928a77"}, {file = "coverage-7.2.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cca7c0b7f5881dfe0291ef09ba7bb1582cb92ab0aeffd8afb00c700bf692415a"},
{file = "coverage-7.2.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:049806ae2df69468c130f04f0fab4212c46b34ba5590296281423bb1ae379df2"}, {file = "coverage-7.2.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2167d116309f564af56f9aa5e75ef710ef871c5f9b313a83050035097b56820"},
{file = "coverage-7.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:875b03d92ac939fbfa8ae74a35b2c468fc4f070f613d5b1692f9980099a3a210"}, {file = "coverage-7.2.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:cb5f152fb14857cbe7f3e8c9a5d98979c4c66319a33cad6e617f0067c9accdc4"},
{file = "coverage-7.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c160e34e388277f10c50dc2c7b5e78abe6d07357d9fe7fcb2f3c156713fd647e"}, {file = "coverage-7.2.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:87dc37f16fb5e3a28429e094145bf7c1753e32bb50f662722e378c5851f7fdc6"},
{file = "coverage-7.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:32e6a730fd18b2556716039ab93278ccebbefa1af81e6aa0c8dba888cf659e6e"}, {file = "coverage-7.2.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e191a63a05851f8bce77bc875e75457f9b01d42843f8bd7feed2fc26bbe60833"},
{file = "coverage-7.2.0-cp310-cp310-win32.whl", hash = "sha256:f3ff4205aff999164834792a3949f82435bc7c7655c849226d5836c3242d7451"}, {file = "coverage-7.2.1-cp310-cp310-win32.whl", hash = "sha256:e3ea04b23b114572b98a88c85379e9e9ae031272ba1fb9b532aa934c621626d4"},
{file = "coverage-7.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:93db11da6e728587e943dff8ae1b739002311f035831b6ecdb15e308224a4247"}, {file = "coverage-7.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:0cf557827be7eca1c38a2480484d706693e7bb1929e129785fe59ec155a59de6"},
{file = "coverage-7.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cd38140b56538855d3d5722c6d1b752b35237e7ea3f360047ce57f3fade82d98"}, {file = "coverage-7.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:570c21a29493b350f591a4b04c158ce1601e8d18bdcd21db136fbb135d75efa6"},
{file = "coverage-7.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9dbb21561b0e04acabe62d2c274f02df0d715e8769485353ddf3cf84727e31ce"}, {file = "coverage-7.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9e872b082b32065ac2834149dc0adc2a2e6d8203080501e1e3c3c77851b466f9"},
{file = "coverage-7.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:171dd3aa71a49274a7e4fc26f5bc167bfae5a4421a668bc074e21a0522a0af4b"}, {file = "coverage-7.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fac6343bae03b176e9b58104a9810df3cdccd5cfed19f99adfa807ffbf43cf9b"},
{file = "coverage-7.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4655ecd813f4ba44857af3e9cffd133ab409774e9d2a7d8fdaf4fdfd2941b789"}, {file = "coverage-7.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abacd0a738e71b20e224861bc87e819ef46fedba2fb01bc1af83dfd122e9c319"},
{file = "coverage-7.2.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1856a8c4aa77eb7ca0d42c996d0ca395ecafae658c1432b9da4528c429f2575c"}, {file = "coverage-7.2.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9256d4c60c4bbfec92721b51579c50f9e5062c21c12bec56b55292464873508"},
{file = "coverage-7.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bd67df6b48db18c10790635060858e2ea4109601e84a1e9bfdd92e898dc7dc79"}, {file = "coverage-7.2.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:80559eaf6c15ce3da10edb7977a1548b393db36cbc6cf417633eca05d84dd1ed"},
{file = "coverage-7.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2d7daf3da9c7e0ed742b3e6b4de6cc464552e787b8a6449d16517b31bbdaddf5"}, {file = "coverage-7.2.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:0bd7e628f6c3ec4e7d2d24ec0e50aae4e5ae95ea644e849d92ae4805650b4c4e"},
{file = "coverage-7.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bf9e02bc3dee792b9d145af30db8686f328e781bd212fdef499db5e9e4dd8377"}, {file = "coverage-7.2.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:09643fb0df8e29f7417adc3f40aaf379d071ee8f0350ab290517c7004f05360b"},
{file = "coverage-7.2.0-cp311-cp311-win32.whl", hash = "sha256:3713a8ec18781fda408f0e853bf8c85963e2d3327c99a82a22e5c91baffcb934"}, {file = "coverage-7.2.1-cp311-cp311-win32.whl", hash = "sha256:1b7fb13850ecb29b62a447ac3516c777b0e7a09ecb0f4bb6718a8654c87dfc80"},
{file = "coverage-7.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:88ae5929f0ef668b582fd7cad09b5e7277f50f912183cf969b36e82a1c26e49a"}, {file = "coverage-7.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:617a94ada56bbfe547aa8d1b1a2b8299e2ec1ba14aac1d4b26a9f7d6158e1273"},
{file = "coverage-7.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5e29a64e9586194ea271048bc80c83cdd4587830110d1e07b109e6ff435e5dbc"}, {file = "coverage-7.2.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8649371570551d2fd7dee22cfbf0b61f1747cdfb2b7587bb551e4beaaa44cb97"},
{file = "coverage-7.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d5302eb84c61e758c9d68b8a2f93a398b272073a046d07da83d77b0edc8d76b"}, {file = "coverage-7.2.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d2b9b5e70a21474c105a133ba227c61bc95f2ac3b66861143ce39a5ea4b3f84"},
{file = "coverage-7.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2c9fffbc39dc4a6277e1525cab06c161d11ee3995bbc97543dc74fcec33e045b"}, {file = "coverage-7.2.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae82c988954722fa07ec5045c57b6d55bc1a0890defb57cf4a712ced65b26ddd"},
{file = "coverage-7.2.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6ceeab5fca62bca072eba6865a12d881f281c74231d2990f8a398226e1a5d96"}, {file = "coverage-7.2.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:861cc85dfbf55a7a768443d90a07e0ac5207704a9f97a8eb753292a7fcbdfcfc"},
{file = "coverage-7.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:28563a35ef4a82b5bc5160a01853ce62b9fceee00760e583ffc8acf9e3413753"}, {file = "coverage-7.2.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0339dc3237c0d31c3b574f19c57985fcbe494280153bbcad33f2cdf469f4ac3e"},
{file = "coverage-7.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bfa065307667f1c6e1f4c3e13f415b0925e34e56441f5fda2c84110a4a1d8bda"}, {file = "coverage-7.2.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:5928b85416a388dd557ddc006425b0c37e8468bd1c3dc118c1a3de42f59e2a54"},
{file = "coverage-7.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7f992b32286c86c38f07a8b5c3fc88384199e82434040a729ec06b067ee0d52c"}, {file = "coverage-7.2.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8d3843ca645f62c426c3d272902b9de90558e9886f15ddf5efe757b12dd376f5"},
{file = "coverage-7.2.0-cp37-cp37m-win32.whl", hash = "sha256:2c15bd09fd5009f3a79c8b3682b52973df29761030b692043f9834fc780947c4"}, {file = "coverage-7.2.1-cp37-cp37m-win32.whl", hash = "sha256:6a034480e9ebd4e83d1aa0453fd78986414b5d237aea89a8fdc35d330aa13bae"},
{file = "coverage-7.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:f332d61fbff353e2ef0f3130a166f499c3fad3a196e7f7ae72076d41a6bfb259"}, {file = "coverage-7.2.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6fce673f79a0e017a4dc35e18dc7bb90bf6d307c67a11ad5e61ca8d42b87cbff"},
{file = "coverage-7.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:577a8bc40c01ad88bb9ab1b3a1814f2f860ff5c5099827da2a3cafc5522dadea"}, {file = "coverage-7.2.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7f099da6958ddfa2ed84bddea7515cb248583292e16bb9231d151cd528eab657"},
{file = "coverage-7.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9240a0335365c29c968131bdf624bb25a8a653a9c0d8c5dbfcabf80b59c1973c"}, {file = "coverage-7.2.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:97a3189e019d27e914ecf5c5247ea9f13261d22c3bb0cfcfd2a9b179bb36f8b1"},
{file = "coverage-7.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:358d3bce1468f298b19a3e35183bdb13c06cdda029643537a0cc37e55e74e8f1"}, {file = "coverage-7.2.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a81dbcf6c6c877986083d00b834ac1e84b375220207a059ad45d12f6e518a4e3"},
{file = "coverage-7.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:932048364ff9c39030c6ba360c31bf4500036d4e15c02a2afc5a76e7623140d4"}, {file = "coverage-7.2.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78d2c3dde4c0b9be4b02067185136b7ee4681978228ad5ec1278fa74f5ca3e99"},
{file = "coverage-7.2.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7efa21611ffc91156e6f053997285c6fe88cfef3fb7533692d0692d2cb30c846"}, {file = "coverage-7.2.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a209d512d157379cc9ab697cbdbb4cfd18daa3e7eebaa84c3d20b6af0037384"},
{file = "coverage-7.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:465ea431c3b78a87e32d7d9ea6d081a1003c43a442982375cf2c247a19971961"}, {file = "coverage-7.2.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f3d07edb912a978915576a776756069dede66d012baa503022d3a0adba1b6afa"},
{file = "coverage-7.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0f03c229f1453b936916f68a47b3dfb5e84e7ad48e160488168a5e35115320c8"}, {file = "coverage-7.2.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8dca3c1706670297851bca1acff9618455122246bdae623be31eca744ade05ec"},
{file = "coverage-7.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:40785553d68c61e61100262b73f665024fd2bb3c6f0f8e2cd5b13e10e4df027b"}, {file = "coverage-7.2.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b1991a6d64231a3e5bbe3099fb0dd7c9aeaa4275ad0e0aeff4cb9ef885c62ba2"},
{file = "coverage-7.2.0-cp38-cp38-win32.whl", hash = "sha256:b09dd7bef59448c66e6b490cc3f3c25c14bc85d4e3c193b81a6204be8dd355de"}, {file = "coverage-7.2.1-cp38-cp38-win32.whl", hash = "sha256:22c308bc508372576ffa3d2dbc4824bb70d28eeb4fcd79d4d1aed663a06630d0"},
{file = "coverage-7.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:dc4f9a89c82faf6254d646180b2e3aa4daf5ff75bdb2c296b9f6a6cf547e26a7"}, {file = "coverage-7.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:b0c0d46de5dd97f6c2d1b560bf0fcf0215658097b604f1840365296302a9d1fb"},
{file = "coverage-7.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c243b25051440386179591a8d5a5caff4484f92c980fb6e061b9559da7cc3f64"}, {file = "coverage-7.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4dd34a935de268a133e4741827ae951283a28c0125ddcdbcbba41c4b98f2dfef"},
{file = "coverage-7.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4b8fd32f85b256fc096deeb4872aeb8137474da0c0351236f93cbedc359353d6"}, {file = "coverage-7.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0f8318ed0f3c376cfad8d3520f496946977abde080439d6689d7799791457454"},
{file = "coverage-7.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7f2a7df523791e6a63b40360afa6792a11869651307031160dc10802df9a252"}, {file = "coverage-7.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:834c2172edff5a08d78e2f53cf5e7164aacabeb66b369f76e7bb367ca4e2d993"},
{file = "coverage-7.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da32526326e8da0effb452dc32a21ffad282c485a85a02aeff2393156f69c1c3"}, {file = "coverage-7.2.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e4d70c853f0546855f027890b77854508bdb4d6a81242a9d804482e667fff6e6"},
{file = "coverage-7.2.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c1153a6156715db9d6ae8283480ae67fb67452aa693a56d7dae9ffe8f7a80da"}, {file = "coverage-7.2.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a6450da4c7afc4534305b2b7d8650131e130610cea448ff240b6ab73d7eab63"},
{file = "coverage-7.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:74cd60fa00f46f28bd40048d6ca26bd58e9bee61d2b0eb4ec18cea13493c003f"}, {file = "coverage-7.2.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:99f4dd81b2bb8fc67c3da68b1f5ee1650aca06faa585cbc6818dbf67893c6d58"},
{file = "coverage-7.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:59a427f8a005aa7254074719441acb25ac2c2f60c1f1026d43f846d4254c1c2f"}, {file = "coverage-7.2.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bdd3f2f285ddcf2e75174248b2406189261a79e7fedee2ceeadc76219b6faa0e"},
{file = "coverage-7.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c3c4beddee01c8125a75cde3b71be273995e2e9ec08fbc260dd206b46bb99969"}, {file = "coverage-7.2.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f29351393eb05e6326f044a7b45ed8e38cb4dcc38570d12791f271399dc41431"},
{file = "coverage-7.2.0-cp39-cp39-win32.whl", hash = "sha256:08e3dd256b8d3e07bb230896c8c96ec6c5dffbe5a133ba21f8be82b275b900e8"}, {file = "coverage-7.2.1-cp39-cp39-win32.whl", hash = "sha256:e2b50ebc2b6121edf352336d503357321b9d8738bb7a72d06fc56153fd3f4cd8"},
{file = "coverage-7.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:ad12c74c6ce53a027f5a5ecbac9be20758a41c85425c1bbab7078441794b04ee"}, {file = "coverage-7.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:bd5a12239c0006252244f94863f1c518ac256160cd316ea5c47fb1a11b25889a"},
{file = "coverage-7.2.0-pp37.pp38.pp39-none-any.whl", hash = "sha256:ffa637a2d5883298449a5434b699b22ef98dd8e2ef8a1d9e60fa9cfe79813411"}, {file = "coverage-7.2.1-pp37.pp38.pp39-none-any.whl", hash = "sha256:436313d129db7cf5b4ac355dd2bd3f7c7e5294af077b090b85de75f8458b8616"},
{file = "coverage-7.2.0.tar.gz", hash = "sha256:9cc9c41aa5af16d845b53287051340c363dd03b7ef408e45eec3af52be77810d"}, {file = "coverage-7.2.1.tar.gz", hash = "sha256:c77f2a9093ccf329dd523a9b2b3c854c20d2a3d968b6def3b820272ca6732242"},
] ]
[package.extras] [package.extras]
@@ -298,14 +298,14 @@ testing = ["covdefaults (>=2.2.2)", "coverage (>=7.0.1)", "pytest (>=7.2)", "pyt
[[package]] [[package]]
name = "identify" name = "identify"
version = "2.5.17" version = "2.5.18"
description = "File identification library for Python" description = "File identification library for Python"
category = "dev" category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
{file = "identify-2.5.17-py2.py3-none-any.whl", hash = "sha256:7d526dd1283555aafcc91539acc061d8f6f59adb0a7bba462735b0a318bff7ed"}, {file = "identify-2.5.18-py2.py3-none-any.whl", hash = "sha256:93aac7ecf2f6abf879b8f29a8002d3c6de7086b8c28d88e1ad15045a15ab63f9"},
{file = "identify-2.5.17.tar.gz", hash = "sha256:93cc61a861052de9d4c541a7acb7e3dcc9c11b398a2144f6e52ae5285f5f4f06"}, {file = "identify-2.5.18.tar.gz", hash = "sha256:89e144fa560cc4cffb6ef2ab5e9fb18ed9f9b3cb054384bab4b95c12f6c309fe"},
] ]
[package.extras] [package.extras]
@@ -388,24 +388,24 @@ dev = ["Sphinx (>=4.1.1)", "black (>=19.10b0)", "colorama (>=0.3.4)", "docutils
[[package]] [[package]]
name = "markdown-it-py" name = "markdown-it-py"
version = "2.1.0" version = "2.2.0"
description = "Python port of markdown-it. Markdown parsing, done right!" description = "Python port of markdown-it. Markdown parsing, done right!"
category = "main" category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
{file = "markdown-it-py-2.1.0.tar.gz", hash = "sha256:cf7e59fed14b5ae17c0006eff14a2d9a00ed5f3a846148153899a0224e2c07da"}, {file = "markdown-it-py-2.2.0.tar.gz", hash = "sha256:7c9a5e412688bc771c67432cbfebcdd686c93ce6484913dccf06cb5a0bea35a1"},
{file = "markdown_it_py-2.1.0-py3-none-any.whl", hash = "sha256:93de681e5c021a432c63147656fe21790bc01231e0cd2da73626f1aa3ac0fe27"}, {file = "markdown_it_py-2.2.0-py3-none-any.whl", hash = "sha256:5a35f8d1870171d9acc47b99612dc146129b631baf04970128b568f190d0cc30"},
] ]
[package.dependencies] [package.dependencies]
mdurl = ">=0.1,<1.0" mdurl = ">=0.1,<1.0"
[package.extras] [package.extras]
benchmarking = ["psutil", "pytest", "pytest-benchmark (>=3.2,<4.0)"] benchmarking = ["psutil", "pytest", "pytest-benchmark"]
code-style = ["pre-commit (==2.6)"] code-style = ["pre-commit (>=3.0,<4.0)"]
compare = ["commonmark (>=0.9.1,<0.10.0)", "markdown (>=3.3.6,<3.4.0)", "mistletoe (>=0.8.1,<0.9.0)", "mistune (>=2.0.2,<2.1.0)", "panflute (>=2.1.3,<2.2.0)"] compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"]
linkify = ["linkify-it-py (>=1.0,<2.0)"] linkify = ["linkify-it-py (>=1,<3)"]
plugins = ["mdit-py-plugins"] plugins = ["mdit-py-plugins"]
profiling = ["gprof2dot"] profiling = ["gprof2dot"]
rtd = ["attrs", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] rtd = ["attrs", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"]
@@ -615,19 +615,19 @@ dev = ["black", "hypothesis", "mypy", "pygments (>=2.14.0)", "pytest", "pytest-c
[[package]] [[package]]
name = "platformdirs" name = "platformdirs"
version = "2.6.2" version = "3.0.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" category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
{file = "platformdirs-2.6.2-py3-none-any.whl", hash = "sha256:83c8f6d04389165de7c9b6f0c682439697887bca0aa2f1c87ef1826be3584490"}, {file = "platformdirs-3.0.0-py3-none-any.whl", hash = "sha256:b1d5eb14f221506f50d6604a561f4c5786d9e80355219694a1b244bcd96f4567"},
{file = "platformdirs-2.6.2.tar.gz", hash = "sha256:e1fea1fe471b9ff8332e229df3cb7de4f53eeea4998d3b6bfff542115e998bd2"}, {file = "platformdirs-3.0.0.tar.gz", hash = "sha256:8a1228abb1ef82d788f74139988b137e78692984ec7b08eaa6c65f1723af28f9"},
] ]
[package.extras] [package.extras]
docs = ["furo (>=2022.12.7)", "proselint (>=0.13)", "sphinx (>=5.3)", "sphinx-autodoc-typehints (>=1.19.5)"] docs = ["furo (>=2022.12.7)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.22,!=1.23.4)"]
test = ["appdirs (==1.4.4)", "covdefaults (>=2.2.2)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] test = ["appdirs (==1.4.4)", "covdefaults (>=2.2.2)", "pytest (>=7.2.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"]
[[package]] [[package]]
name = "pluggy" name = "pluggy"
@@ -697,14 +697,14 @@ virtualenv = ">=20.10.0"
[[package]] [[package]]
name = "prompt-toolkit" name = "prompt-toolkit"
version = "3.0.36" version = "3.0.37"
description = "Library for building powerful interactive command lines in Python" description = "Library for building powerful interactive command lines in Python"
category = "main" category = "main"
optional = false optional = false
python-versions = ">=3.6.2" python-versions = ">=3.7.0"
files = [ files = [
{file = "prompt_toolkit-3.0.36-py3-none-any.whl", hash = "sha256:aa64ad242a462c5ff0363a7b9cfe696c20d55d9fc60c11fd8e632d064804d305"}, {file = "prompt_toolkit-3.0.37-py3-none-any.whl", hash = "sha256:6a2948ec427dfcc7c983027b1044b355db6aaa8be374f54ad2015471f7d81c5b"},
{file = "prompt_toolkit-3.0.36.tar.gz", hash = "sha256:3e163f254bef5a03b146397d7c1963bd3e2812f0964bb9a24e6ec761fd28db63"}, {file = "prompt_toolkit-3.0.37.tar.gz", hash = "sha256:d5d73d4b5eb1a92ba884a88962b157f49b71e06c4348b417dd622b25cdd3800b"},
] ]
[package.dependencies] [package.dependencies]
@@ -1118,14 +1118,14 @@ files = [
[[package]] [[package]]
name = "setuptools" name = "setuptools"
version = "67.1.0" version = "67.4.0"
description = "Easily download, build, install, upgrade, and uninstall Python packages" description = "Easily download, build, install, upgrade, and uninstall Python packages"
category = "dev" category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
{file = "setuptools-67.1.0-py3-none-any.whl", hash = "sha256:a7687c12b444eaac951ea87a9627c4f904ac757e7abdc5aac32833234af90378"}, {file = "setuptools-67.4.0-py3-none-any.whl", hash = "sha256:f106dee1b506dee5102cc3f3e9e68137bbad6d47b616be7991714b0c62204251"},
{file = "setuptools-67.1.0.tar.gz", hash = "sha256:e261cdf010c11a41cb5cb5f1bf3338a7433832029f559a6a7614bd42a967c300"}, {file = "setuptools-67.4.0.tar.gz", hash = "sha256:e5fd0a713141a4a105412233c63dc4e17ba0090c8e8334594ac790ec97792330"},
] ]
[package.extras] [package.extras]
@@ -1250,44 +1250,44 @@ test = ["black (>=22.3.0,<23.0.0)", "coverage (>=6.2,<7.0)", "isort (>=5.0.6,<6.
[[package]] [[package]]
name = "types-python-dateutil" name = "types-python-dateutil"
version = "2.8.19.6" version = "2.8.19.8"
description = "Typing stubs for python-dateutil" description = "Typing stubs for python-dateutil"
category = "dev" category = "dev"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
{file = "types-python-dateutil-2.8.19.6.tar.gz", hash = "sha256:4a6f4cc19ce4ba1a08670871e297bf3802f55d4f129e6aa2443f540b6cf803d2"}, {file = "types-python-dateutil-2.8.19.8.tar.gz", hash = "sha256:316c6b107d055bbd06324b71362e6104102220e6988aa4a388550aa3a8ad5d06"},
{file = "types_python_dateutil-2.8.19.6-py3-none-any.whl", hash = "sha256:cfb7d31021c6bce6f3362c69af6e3abb48fe3e08854f02487e844ff910deec2a"}, {file = "types_python_dateutil-2.8.19.8-py3-none-any.whl", hash = "sha256:6b44741d3e79b2f2ba595f6bfa96f1a5091a00703848547efb3bc5b71df3cf9d"},
] ]
[[package]] [[package]]
name = "typing-extensions" name = "typing-extensions"
version = "4.4.0" version = "4.5.0"
description = "Backported and Experimental Type Hints for Python 3.7+" description = "Backported and Experimental Type Hints for Python 3.7+"
category = "dev" category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
{file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"}, {file = "typing_extensions-4.5.0-py3-none-any.whl", hash = "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4"},
{file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"}, {file = "typing_extensions-4.5.0.tar.gz", hash = "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb"},
] ]
[[package]] [[package]]
name = "virtualenv" name = "virtualenv"
version = "20.18.0" version = "20.19.0"
description = "Virtual Python Environment builder" description = "Virtual Python Environment builder"
category = "dev" category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
{file = "virtualenv-20.18.0-py3-none-any.whl", hash = "sha256:9d61e4ec8d2c0345dab329fb825eb05579043766a4b26a2f66b28948de68c722"}, {file = "virtualenv-20.19.0-py3-none-any.whl", hash = "sha256:54eb59e7352b573aa04d53f80fc9736ed0ad5143af445a1e539aada6eb947dd1"},
{file = "virtualenv-20.18.0.tar.gz", hash = "sha256:f262457a4d7298a6b733b920a196bf8b46c8af15bf1fd9da7142995eff15118e"}, {file = "virtualenv-20.19.0.tar.gz", hash = "sha256:37a640ba82ed40b226599c522d411e4be5edb339a0c0de030c0dc7b646d61590"},
] ]
[package.dependencies] [package.dependencies]
distlib = ">=0.3.6,<1" distlib = ">=0.3.6,<1"
filelock = ">=3.4.1,<4" filelock = ">=3.4.1,<4"
platformdirs = ">=2.4,<3" platformdirs = ">=2.4,<4"
[package.extras] [package.extras]
docs = ["furo (>=2022.12.7)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=22.12)"] docs = ["furo (>=2022.12.7)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=22.12)"]
@@ -1338,4 +1338,4 @@ dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"]
[metadata] [metadata]
lock-version = "2.0" lock-version = "2.0"
python-versions = "^3.10" python-versions = "^3.10"
content-hash = "513ab619dbac631bca8cc366ad0182caa51ece251e85f404d40292ccb4a66f75" content-hash = "24126a6868e5ca4bba97f6a34f27525a136bd129a93716b84fd518659e2c2f0b"

View File

@@ -36,7 +36,7 @@
[tool.poetry.group.dev.dependencies] [tool.poetry.group.dev.dependencies]
black = "^23.1.0" black = "^23.1.0"
commitizen = "^2.42.0" commitizen = "^2.42.1"
coverage = "^7.2.0" coverage = "^7.2.0"
interrogate = "^1.5.0" interrogate = "^1.5.0"
mypy = "^1.0.1" mypy = "^1.0.1"
@@ -73,12 +73,7 @@
] ]
ignore-init-module-imports = true ignore-init-module-imports = true
line-length = 100 line-length = 100
per-file-ignores = { "cli.py" = [ per-file-ignores = { "cli.py" = ["PLR0913"], "tests/*.py" = ["E999", "PLR2004"] }
"PLR0913",
], "tests/*.py" = [
"E999",
"PLR2004",
] }
select = [ select = [
"A", "A",
"B", "B",
@@ -148,10 +143,7 @@
tag_format = "v$version" tag_format = "v$version"
update_changelog_on_bump = true update_changelog_on_bump = true
version = "0.6.0" version = "0.6.0"
version_files = [ version_files = ["pyproject.toml:version", "src/obsidian_metadata/__version__.py:__version__"]
"pyproject.toml:version",
"src/obsidian_metadata/__version__.py:__version__",
]
[tool.interrogate] [tool.interrogate]
exclude = ["build", "docs", "tests"] exclude = ["build", "docs", "tests"]
@@ -211,7 +203,7 @@
help = "Lint this package" help = "Lint this package"
[[tool.poe.tasks.lint.sequence]] [[tool.poe.tasks.lint.sequence]]
shell = "ruff --extend-ignore=I001,D301,D401,PLR2004,PLR0913 src/" shell = "ruff --extend-ignore=I001,D301,D401,PLR2004 src/"
[[tool.poe.tasks.lint.sequence]] [[tool.poe.tasks.lint.sequence]]
shell = "black --check src/ tests/" shell = "black --check src/ tests/"

View File

@@ -1,21 +1,19 @@
"""Questions for the cli.""" """Questions for the cli."""
from typing import Any
from pathlib import Path from pathlib import Path
from typing import Any
import questionary import questionary
from rich import print from rich import box, print
from rich import box
from rich.console import Console from rich.console import Console
from rich.table import Table from rich.table import Table
from obsidian_metadata._config import VaultConfig
from obsidian_metadata._utils.alerts import logger as log
from obsidian_metadata.models import Patterns, Vault, VaultFilter
from obsidian_metadata._utils import alerts
from obsidian_metadata.models.questions import Questions
from obsidian_metadata.models.enums import MetadataType
PATTERNS = Patterns() from obsidian_metadata._config import VaultConfig
from obsidian_metadata._utils import alerts
from obsidian_metadata.models import Vault, VaultFilter
from obsidian_metadata.models.enums import MetadataType
from obsidian_metadata.models.questions import Questions
class Application: class Application:
@@ -34,7 +32,6 @@ class Application:
def _load_vault(self) -> None: def _load_vault(self) -> None:
"""Load the vault.""" """Load the vault."""
if len(self.filters) == 0: if len(self.filters) == 0:
self.vault: Vault = Vault(config=self.config, dry_run=self.dry_run) self.vault: Vault = Vault(config=self.config, dry_run=self.dry_run)
else: else:
@@ -52,7 +49,7 @@ class Application:
while True: while True:
self.vault.info() self.vault.info()
match self.questions.ask_application_main(): # noqa: E999 match self.questions.ask_application_main():
case "vault_actions": case "vault_actions":
self.application_vault() self.application_vault()
case "inspect_metadata": case "inspect_metadata":
@@ -100,7 +97,7 @@ class Application:
area=area, key=key, value=value, location=self.vault.insert_location area=area, key=key, value=value, location=self.vault.insert_location
) )
if num_changed == 0: # pragma: no cover if num_changed == 0: # pragma: no cover
alerts.warning(f"No notes were changed") alerts.warning("No notes were changed")
return return
alerts.success(f"Added metadata to {num_changed} notes") alerts.success(f"Added metadata to {num_changed} notes")
@@ -115,7 +112,7 @@ class Application:
) )
if num_changed == 0: # pragma: no cover if num_changed == 0: # pragma: no cover
alerts.warning(f"No notes were changed") alerts.warning("No notes were changed")
return return
alerts.success(f"Added metadata to {num_changed} notes") alerts.success(f"Added metadata to {num_changed} notes")
@@ -123,6 +120,7 @@ class Application:
return return
def application_delete_metadata(self) -> None: def application_delete_metadata(self) -> None:
"""Delete metadata."""
alerts.usage("Delete either a key and all associated values, or a specific value.") alerts.usage("Delete either a key and all associated values, or a specific value.")
choices = [ choices = [
@@ -167,7 +165,7 @@ class Application:
case _: # pragma: no cover case _: # pragma: no cover
return return
def application_filter(self) -> None: def application_filter(self) -> None: # noqa: C901,PLR0911,PLR0912
"""Filter notes.""" """Filter notes."""
alerts.usage("Limit the scope of notes to be processed with one or more filters.") alerts.usage("Limit the scope of notes to be processed with one or more filters.")
@@ -229,29 +227,29 @@ class Application:
show_header=False, show_header=False,
box=box.HORIZONTALS, box=box.HORIZONTALS,
) )
for _n, filter in enumerate(self.filters, start=1): for _n, _filter in enumerate(self.filters, start=1):
if filter.path_filter is not None: if _filter.path_filter is not None:
table.add_row( table.add_row(
str(_n), str(_n),
f"Path regex: [tan bold]{filter.path_filter}", f"Path regex: [tan bold]{_filter.path_filter}",
end_section=bool(_n == len(self.filters)), end_section=bool(_n == len(self.filters)),
) )
elif filter.tag_filter is not None: elif _filter.tag_filter is not None:
table.add_row( table.add_row(
str(_n), str(_n),
f"Tag filter: [tan bold]{filter.tag_filter}", f"Tag filter: [tan bold]{_filter.tag_filter}",
end_section=bool(_n == len(self.filters)), end_section=bool(_n == len(self.filters)),
) )
elif filter.key_filter is not None and filter.value_filter is None: elif _filter.key_filter is not None and _filter.value_filter is None:
table.add_row( table.add_row(
str(_n), str(_n),
f"Key filter: [tan bold]{filter.key_filter}", f"Key filter: [tan bold]{_filter.key_filter}",
end_section=bool(_n == len(self.filters)), end_section=bool(_n == len(self.filters)),
) )
elif filter.key_filter is not None and filter.value_filter is not None: elif _filter.key_filter is not None and _filter.value_filter is not None:
table.add_row( table.add_row(
str(_n), str(_n),
f"Key/Value : [tan bold]{filter.key_filter}={filter.value_filter}", f"Key/Value : [tan bold]{_filter.key_filter}={_filter.value_filter}",
end_section=bool(_n == len(self.filters)), end_section=bool(_n == len(self.filters)),
) )
table.add_row(f"{len(self.filters) + 1}", "Clear All") table.add_row(f"{len(self.filters) + 1}", "Clear All")
@@ -322,13 +320,13 @@ class Application:
path = self.questions.ask_path(question="Enter a path for the CSV file") path = self.questions.ask_path(question="Enter a path for the CSV file")
if path is None: if path is None:
return return
self.vault.export_metadata(path=path, format="csv") self.vault.export_metadata(path=path, export_format="csv")
alerts.success(f"Metadata written to {path}") alerts.success(f"Metadata written to {path}")
case "export_json": case "export_json":
path = self.questions.ask_path(question="Enter a path for the JSON file") path = self.questions.ask_path(question="Enter a path for the JSON file")
if path is None: if path is None:
return return
self.vault.export_metadata(path=path, format="json") self.vault.export_metadata(path=path, export_format="json")
alerts.success(f"Metadata written to {path}") alerts.success(f"Metadata written to {path}")
case _: case _:
return return
@@ -405,7 +403,7 @@ class Application:
num_changed = self.vault.delete_inline_tag(tag) num_changed = self.vault.delete_inline_tag(tag)
if num_changed == 0: if num_changed == 0:
alerts.warning(f"No notes were changed") alerts.warning("No notes were changed")
return return
alerts.success(f"Deleted inline tag: {tag} in {num_changed} notes") alerts.success(f"Deleted inline tag: {tag} in {num_changed} notes")
@@ -455,18 +453,17 @@ class Application:
def noninteractive_export_csv(self, path: Path) -> None: def noninteractive_export_csv(self, path: Path) -> None:
"""Export the vault metadata to CSV.""" """Export the vault metadata to CSV."""
self._load_vault() self._load_vault()
self.vault.export_metadata(format="json", path=str(path)) self.vault.export_metadata(export_format="json", path=str(path))
alerts.success(f"Exported metadata to {path}") alerts.success(f"Exported metadata to {path}")
def noninteractive_export_json(self, path: Path) -> None: def noninteractive_export_json(self, path: Path) -> None:
"""Export the vault metadata to JSON.""" """Export the vault metadata to JSON."""
self._load_vault() self._load_vault()
self.vault.export_metadata(format="json", path=str(path)) self.vault.export_metadata(export_format="json", path=str(path))
alerts.success(f"Exported metadata to {path}") alerts.success(f"Exported metadata to {path}")
def rename_key(self) -> None: def rename_key(self) -> None:
"""Renames a key in the vault.""" """Rename a key in the vault."""
original_key = self.questions.ask_existing_key( original_key = self.questions.ask_existing_key(
question="Which key would you like to rename?" question="Which key would you like to rename?"
) )
@@ -479,7 +476,7 @@ class Application:
num_changed = self.vault.rename_metadata(original_key, new_key) num_changed = self.vault.rename_metadata(original_key, new_key)
if num_changed == 0: if num_changed == 0:
alerts.warning(f"No notes were changed") alerts.warning("No notes were changed")
return return
alerts.success( alerts.success(
@@ -488,7 +485,6 @@ class Application:
def rename_inline_tag(self) -> None: def rename_inline_tag(self) -> None:
"""Rename an inline tag.""" """Rename an inline tag."""
original_tag = self.questions.ask_existing_inline_tag(question="Which tag to rename?") original_tag = self.questions.ask_existing_inline_tag(question="Which tag to rename?")
if original_tag is None: # pragma: no cover if original_tag is None: # pragma: no cover
return return
@@ -499,7 +495,7 @@ class Application:
num_changed = self.vault.rename_inline_tag(original_tag, new_tag) num_changed = self.vault.rename_inline_tag(original_tag, new_tag)
if num_changed == 0: if num_changed == 0:
alerts.warning(f"No notes were changed") alerts.warning("No notes were changed")
return return
alerts.success( alerts.success(
@@ -524,7 +520,7 @@ class Application:
num_changes = self.vault.rename_metadata(key, value, new_value) num_changes = self.vault.rename_metadata(key, value, new_value)
if num_changes == 0: if num_changes == 0:
alerts.warning(f"No notes were changed") alerts.warning("No notes were changed")
return return
alerts.success(f"Renamed '{key}:{value}' to '{key}:{new_value}' in {num_changes} notes") alerts.success(f"Renamed '{key}:{value}' to '{key}:{new_value}' in {num_changes} notes")
@@ -558,7 +554,7 @@ class Application:
break break
changed_notes[note_to_review].print_diff() changed_notes[note_to_review].print_diff()
def transpose_metadata(self, begin: MetadataType, end: MetadataType) -> None: def transpose_metadata(self, begin: MetadataType, end: MetadataType) -> None: # noqa: PLR0911
"""Transpose metadata from one format to another. """Transpose metadata from one format to another.
Args: Args:
@@ -580,7 +576,7 @@ class Application:
) )
if num_changed == 0: if num_changed == 0:
alerts.warning(f"No notes were changed") alerts.warning("No notes were changed")
return return
alerts.success(f"Transposed {begin.value} to {end.value} in {num_changed} notes") alerts.success(f"Transposed {begin.value} to {end.value} in {num_changed} notes")
@@ -597,7 +593,7 @@ class Application:
) )
if num_changed == 0: if num_changed == 0:
alerts.warning(f"No notes were changed") alerts.warning("No notes were changed")
return return
alerts.success( alerts.success(
@@ -622,7 +618,7 @@ class Application:
) )
if num_changed == 0: if num_changed == 0:
alerts.warning(f"No notes were changed") alerts.warning("No notes were changed")
return return
alerts.success( alerts.success(

View File

@@ -1,16 +1,15 @@
"""Work with metadata items.""" """Work with metadata items."""
import copy
import re import re
from io import StringIO from io import StringIO
import copy
from rich import print from rich import print
from rich.columns import Columns from rich.columns import Columns
from rich.console import Console from rich.console import Console
from rich.table import Table from rich.table import Table
from ruamel.yaml import YAML from ruamel.yaml import YAML
from obsidian_metadata._utils.alerts import logger as log
from obsidian_metadata._utils import alerts
from obsidian_metadata._utils import ( from obsidian_metadata._utils import (
clean_dictionary, clean_dictionary,
dict_contains, dict_contains,
@@ -61,7 +60,7 @@ class VaultMetadata:
self.tags.extend(metadata) self.tags.extend(metadata)
self.tags = sorted({s.strip("#") for s in self.tags}) self.tags = sorted({s.strip("#") for s in self.tags})
def contains( def contains( # noqa: PLR0911
self, area: MetadataType, key: str = None, value: str = None, is_regex: bool = False self, area: MetadataType, key: str = None, value: str = None, is_regex: bool = False
) -> bool: ) -> bool:
"""Check if a key and/or a value exists in the metadata. """Check if a key and/or a value exists in the metadata.
@@ -82,7 +81,7 @@ class VaultMetadata:
if area != MetadataType.TAGS and key is None: if area != MetadataType.TAGS and key is None:
raise ValueError("Key must be provided when checking for a key's existence.") raise ValueError("Key must be provided when checking for a key's existence.")
match area: # noqa: E999 match area:
case MetadataType.ALL: case MetadataType.ALL:
if dict_contains(self.dict, key, value, is_regex): if dict_contains(self.dict, key, value, is_regex):
return True return True
@@ -249,7 +248,7 @@ class Frontmatter:
return dict_values_to_lists_strings(frontmatter, strip_null_values=True) return dict_values_to_lists_strings(frontmatter, strip_null_values=True)
def add(self, key: str, value: str | list[str] = None) -> bool: def add(self, key: str, value: str | list[str] = None) -> bool: # noqa: PLR0911
"""Add a key and value to the frontmatter. """Add a key and value to the frontmatter.
Args: Args:
@@ -399,7 +398,7 @@ class InlineMetadata:
""" """
return f"InlineMetadata(inline_metadata={self.dict})" return f"InlineMetadata(inline_metadata={self.dict})"
def add(self, key: str, value: str | list[str] = None) -> bool: def add(self, key: str, value: str | list[str] = None) -> bool: # noqa: PLR0911
"""Add a key and value to the inline metadata. """Add a key and value to the inline metadata.
Args: Args:

View File

@@ -1,14 +1,16 @@
"""Representation of notes and in the vault.""" """Representation of notes and in the vault."""
import copy
import difflib import difflib
import re import re
from pathlib import Path from pathlib import Path
import copy
import rich.repr import rich.repr
import typer import typer
from rich.console import Console from rich.console import Console
from rich.table import Table from rich.table import Table
from obsidian_metadata._utils import alerts from obsidian_metadata._utils import alerts
from obsidian_metadata._utils.alerts import logger as log from obsidian_metadata._utils.alerts import logger as log
from obsidian_metadata.models import ( from obsidian_metadata.models import (
@@ -117,7 +119,7 @@ class Note:
_v = re.escape(_v) _v = re.escape(_v)
self.sub(f"{_k}:: ?{_v}", f"{_k}:: {value_2}", is_regex=True) self.sub(f"{_k}:: ?{_v}", f"{_k}:: {value_2}", is_regex=True)
def add_metadata( def add_metadata( # noqa: C901
self, self,
area: MetadataType, area: MetadataType,
key: str = None, key: str = None,
@@ -135,14 +137,13 @@ class Note:
Returns: Returns:
bool: Whether the metadata was added. bool: Whether the metadata was added.
""" """
match area: # noqa: E999 match area:
case MetadataType.FRONTMATTER if self.frontmatter.add(key, value): case MetadataType.FRONTMATTER if self.frontmatter.add(key, value):
self.update_frontmatter() self.update_frontmatter()
return True return True
case MetadataType.INLINE: case MetadataType.INLINE:
if value is None: if value is None and self.inline_metadata.add(key):
if self.inline_metadata.add(key):
line = f"{key}::" line = f"{key}::"
self.insert(new_string=line, location=location) self.insert(new_string=line, location=location)
return True return True
@@ -169,9 +170,10 @@ class Note:
if new_values: if new_values:
for value in new_values: for value in new_values:
if value.startswith("#"): _v = value
value = value[1:] if _v.startswith("#"):
self.insert(new_string=f"#{value}", location=location) _v = _v[1:]
self.insert(new_string=f"#{_v}", location=location)
return True return True
case _: case _:
@@ -437,7 +439,7 @@ class Note:
self.file_content = re.sub(pattern, replacement, self.file_content, re.MULTILINE) self.file_content = re.sub(pattern, replacement, self.file_content, re.MULTILINE)
def transpose_metadata( def transpose_metadata( # noqa: C901, PLR0912, PLR0911, PLR0913
self, self,
begin: MetadataType, begin: MetadataType,
end: MetadataType, end: MetadataType,
@@ -492,7 +494,7 @@ class Note:
self.add_metadata(key=k, value=value, area=end, location=location) self.add_metadata(key=k, value=value, area=end, location=location)
self.delete_metadata(key=k, value=value, area=begin) self.delete_metadata(key=k, value=value, area=begin)
return True return True
else:
return False return False
if isinstance(value, list): if isinstance(value, list):
@@ -508,10 +510,7 @@ class Note:
if temp_dict[k] == []: if temp_dict[k] == []:
self.delete_metadata(key=k, area=begin) self.delete_metadata(key=k, area=begin)
if has_changes: return bool(has_changes)
return True
else:
return False
if begin == MetadataType.TAGS: if begin == MetadataType.TAGS:
# TODO: Implement transposing to and from tags # TODO: Implement transposing to and from tags
@@ -532,10 +531,7 @@ class Note:
return return
new_frontmatter = self.frontmatter.to_yaml(sort_keys=sort_keys) new_frontmatter = self.frontmatter.to_yaml(sort_keys=sort_keys)
if self.frontmatter.dict == {}: new_frontmatter = "" if self.frontmatter.dict == {} else f"---\n{new_frontmatter}---\n"
new_frontmatter = ""
else:
new_frontmatter = f"---\n{new_frontmatter}---\n"
if current_frontmatter is None: if current_frontmatter is None:
self.file_content = new_frontmatter + self.file_content self.file_content = new_frontmatter + self.file_content

View File

@@ -1,11 +1,12 @@
"""Obsidian vault representation.""" """Obsidian vault representation."""
import csv import csv
import json
import re import re
import shutil import shutil
from dataclasses import dataclass from dataclasses import dataclass
from pathlib import Path from pathlib import Path
import json
import rich.repr import rich.repr
from rich import box from rich import box
from rich.console import Console from rich.console import Console
@@ -13,7 +14,7 @@ from rich.progress import Progress, SpinnerColumn, TextColumn
from rich.prompt import Confirm from rich.prompt import Confirm
from rich.table import Table from rich.table import Table
from obsidian_metadata._config.config import Config, VaultConfig from obsidian_metadata._config.config import VaultConfig
from obsidian_metadata._utils import alerts from obsidian_metadata._utils import alerts
from obsidian_metadata._utils.alerts import logger as log from obsidian_metadata._utils.alerts import logger as log
from obsidian_metadata.models import InsertLocation, MetadataType, Note, VaultMetadata from obsidian_metadata.models import InsertLocation, MetadataType, Note, VaultMetadata
@@ -120,11 +121,13 @@ class Vault:
""" """
if self.config["insert_location"].upper() == "TOP": if self.config["insert_location"].upper() == "TOP":
return InsertLocation.TOP return InsertLocation.TOP
elif self.config["insert_location"].upper() == "HEADER":
if self.config["insert_location"].upper() == "HEADER":
return InsertLocation.AFTER_TITLE return InsertLocation.AFTER_TITLE
elif self.config["insert_location"].upper() == "BOTTOM":
if self.config["insert_location"].upper() == "BOTTOM":
return InsertLocation.BOTTOM return InsertLocation.BOTTOM
else:
return InsertLocation.BOTTOM return InsertLocation.BOTTOM
def _find_markdown_notes(self) -> list[Path]: def _find_markdown_notes(self) -> list[Path]:
@@ -285,16 +288,16 @@ class Vault:
return num_changed return num_changed
def export_metadata(self, path: str, format: str = "csv") -> None: def export_metadata(self, path: str, export_format: str = "csv") -> None:
"""Write metadata to a csv file. """Write metadata to a csv file.
Args: Args:
path (Path): Path to write csv file to. path (Path): Path to write csv file to.
export_as (str, optional): Export as 'csv' or 'json'. Defaults to "csv". export_format (str, optional): Export as 'csv' or 'json'. Defaults to "csv".
""" """
export_file = Path(path).expanduser().resolve() export_file = Path(path).expanduser().resolve()
match format: # noqa: E999 match export_format:
case "csv": case "csv":
with open(export_file, "w", encoding="UTF8") as f: with open(export_file, "w", encoding="UTF8") as f:
writer = csv.writer(f) writer = csv.writer(f)
@@ -412,7 +415,7 @@ class Vault:
return num_changed return num_changed
def transpose_metadata( def transpose_metadata( # noqa: PLR0913
self, self,
begin: MetadataType, begin: MetadataType,
end: MetadataType, end: MetadataType,

View File

@@ -348,7 +348,7 @@ def test_export_csv(tmp_path, test_vault):
vault = Vault(config=vault_config) vault = Vault(config=vault_config)
export_file = Path(f"{tmp_path}/export.csv") export_file = Path(f"{tmp_path}/export.csv")
vault.export_metadata(path=export_file, format="csv") vault.export_metadata(path=export_file, export_format="csv")
assert export_file.exists() is True assert export_file.exists() is True
assert "frontmatter,date_created,2022-12-22" in export_file.read_text() assert "frontmatter,date_created,2022-12-22" in export_file.read_text()
@@ -361,7 +361,7 @@ def test_export_json(tmp_path, test_vault):
vault = Vault(config=vault_config) vault = Vault(config=vault_config)
export_file = Path(f"{tmp_path}/export.json") export_file = Path(f"{tmp_path}/export.json")
vault.export_metadata(path=export_file, format="json") vault.export_metadata(path=export_file, export_format="json")
assert export_file.exists() is True assert export_file.exists() is True
assert '"frontmatter": {' in export_file.read_text() assert '"frontmatter": {' in export_file.read_text()