mirror of
https://github.com/p2p-ld/nwb-linkml.git
synced 2025-01-10 06:04:28 +00:00
working pydantic provider (at least superficially)
This commit is contained in:
parent
974058ce5f
commit
781b667952
8 changed files with 243 additions and 164 deletions
|
@ -10,7 +10,7 @@ NWB schema translation
|
||||||
|
|
||||||
Cleanup
|
Cleanup
|
||||||
- [ ] Update pydantic generator
|
- [ ] Update pydantic generator
|
||||||
- [ ] Restore regresssions from stripping the generator
|
- [ ] Restore regressions from stripping the generator
|
||||||
- [ ] Use the class rather than a string in _get_class_slot_range_origin:
|
- [ ] Use the class rather than a string in _get_class_slot_range_origin:
|
||||||
```
|
```
|
||||||
or inlined_as_list
|
or inlined_as_list
|
||||||
|
@ -40,6 +40,9 @@ Important things that are not implemented yet!
|
||||||
- existing handler is fucked, for example, in `maps/hdmf`
|
- existing handler is fucked, for example, in `maps/hdmf`
|
||||||
- [ ] Handle indirect indexing eg. https://pynwb.readthedocs.io/en/stable/tutorials/general/plot_timeintervals.html#accessing-referenced-timeseries
|
- [ ] Handle indirect indexing eg. https://pynwb.readthedocs.io/en/stable/tutorials/general/plot_timeintervals.html#accessing-referenced-timeseries
|
||||||
|
|
||||||
|
Remove monkeypatches/overrides once PRs are closed
|
||||||
|
- [ ] https://github.com/linkml/linkml-runtime/pull/330
|
||||||
|
|
||||||
## Docs TODOs
|
## Docs TODOs
|
||||||
|
|
||||||
```{todolist}
|
```{todolist}
|
||||||
|
|
|
@ -630,7 +630,7 @@ files = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "importlib-metadata"
|
name = "importlib-metadata"
|
||||||
version = "8.0.0"
|
version = "8.2.0"
|
||||||
requires_python = ">=3.8"
|
requires_python = ">=3.8"
|
||||||
summary = "Read metadata from Python packages"
|
summary = "Read metadata from Python packages"
|
||||||
groups = ["default", "dev", "tests"]
|
groups = ["default", "dev", "tests"]
|
||||||
|
@ -638,8 +638,8 @@ dependencies = [
|
||||||
"zipp>=0.5",
|
"zipp>=0.5",
|
||||||
]
|
]
|
||||||
files = [
|
files = [
|
||||||
{file = "importlib_metadata-8.0.0-py3-none-any.whl", hash = "sha256:15584cf2b1bf449d98ff8a6ff1abef57bf20f3ac6454f431736cd3e660921b2f"},
|
{file = "importlib_metadata-8.2.0-py3-none-any.whl", hash = "sha256:11901fa0c2f97919b288679932bb64febaeacf289d18ac84dd68cb2e74213369"},
|
||||||
{file = "importlib_metadata-8.0.0.tar.gz", hash = "sha256:188bd24e4c346d3f0a933f275c2fec67050326a856b9a359881d7c2a697e8812"},
|
{file = "importlib_metadata-8.2.0.tar.gz", hash = "sha256:72e8d4399996132204f9a16dcc751af254a48f8d1b20b9ff0f98d4a8f901e73d"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -842,7 +842,7 @@ version = "0.0.0"
|
||||||
requires_python = "<4.0.0,>=3.8.1"
|
requires_python = "<4.0.0,>=3.8.1"
|
||||||
git = "https://github.com/sneakers-the-rat/linkml"
|
git = "https://github.com/sneakers-the-rat/linkml"
|
||||||
ref = "nwb-linkml"
|
ref = "nwb-linkml"
|
||||||
revision = "bf67a752618b0abdce8a802cce0da4e273b3a079"
|
revision = "df8685eb9e99eaf9ec694db2e9cd59bab8892438"
|
||||||
summary = "Linked Open Data Modeling Language"
|
summary = "Linked Open Data Modeling Language"
|
||||||
groups = ["default", "dev", "tests"]
|
groups = ["default", "dev", "tests"]
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
@ -1181,7 +1181,7 @@ files = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "plotly"
|
name = "plotly"
|
||||||
version = "5.22.0"
|
version = "5.23.0"
|
||||||
requires_python = ">=3.8"
|
requires_python = ">=3.8"
|
||||||
summary = "An open-source, interactive data visualization library for Python"
|
summary = "An open-source, interactive data visualization library for Python"
|
||||||
groups = ["dev", "tests"]
|
groups = ["dev", "tests"]
|
||||||
|
@ -1190,8 +1190,8 @@ dependencies = [
|
||||||
"tenacity>=6.2.0",
|
"tenacity>=6.2.0",
|
||||||
]
|
]
|
||||||
files = [
|
files = [
|
||||||
{file = "plotly-5.22.0-py3-none-any.whl", hash = "sha256:68fc1901f098daeb233cc3dd44ec9dc31fb3ca4f4e53189344199c43496ed006"},
|
{file = "plotly-5.23.0-py3-none-any.whl", hash = "sha256:76cbe78f75eddc10c56f5a4ee3e7ccaade7c0a57465546f02098c0caed6c2d1a"},
|
||||||
{file = "plotly-5.22.0.tar.gz", hash = "sha256:859fdadbd86b5770ae2466e542b761b247d1c6b49daed765b95bb8c7063e7469"},
|
{file = "plotly-5.23.0.tar.gz", hash = "sha256:89e57d003a116303a34de6700862391367dd564222ab71f8531df70279fc0193"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -1730,84 +1730,75 @@ files = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rpds-py"
|
name = "rpds-py"
|
||||||
version = "0.19.0"
|
version = "0.19.1"
|
||||||
requires_python = ">=3.8"
|
requires_python = ">=3.8"
|
||||||
summary = "Python bindings to Rust's persistent data structures (rpds)"
|
summary = "Python bindings to Rust's persistent data structures (rpds)"
|
||||||
groups = ["default", "dev", "tests"]
|
groups = ["default", "dev", "tests"]
|
||||||
files = [
|
files = [
|
||||||
{file = "rpds_py-0.19.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:fb37bd599f031f1a6fb9e58ec62864ccf3ad549cf14bac527dbfa97123edcca4"},
|
{file = "rpds_py-0.19.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:aaf71f95b21f9dc708123335df22e5a2fef6307e3e6f9ed773b2e0938cc4d491"},
|
||||||
{file = "rpds_py-0.19.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3384d278df99ec2c6acf701d067147320b864ef6727405d6470838476e44d9e8"},
|
{file = "rpds_py-0.19.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ca0dda0c5715efe2ab35bb83f813f681ebcd2840d8b1b92bfc6fe3ab382fae4a"},
|
||||||
{file = "rpds_py-0.19.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e54548e0be3ac117595408fd4ca0ac9278fde89829b0b518be92863b17ff67a2"},
|
{file = "rpds_py-0.19.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81db2e7282cc0487f500d4db203edc57da81acde9e35f061d69ed983228ffe3b"},
|
||||||
{file = "rpds_py-0.19.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8eb488ef928cdbc05a27245e52de73c0d7c72a34240ef4d9893fdf65a8c1a955"},
|
{file = "rpds_py-0.19.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1a8dfa125b60ec00c7c9baef945bb04abf8ac772d8ebefd79dae2a5f316d7850"},
|
||||||
{file = "rpds_py-0.19.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a5da93debdfe27b2bfc69eefb592e1831d957b9535e0943a0ee8b97996de21b5"},
|
{file = "rpds_py-0.19.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:271accf41b02687cef26367c775ab220372ee0f4925591c6796e7c148c50cab5"},
|
||||||
{file = "rpds_py-0.19.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:79e205c70afddd41f6ee79a8656aec738492a550247a7af697d5bd1aee14f766"},
|
{file = "rpds_py-0.19.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9bc4161bd3b970cd6a6fcda70583ad4afd10f2750609fb1f3ca9505050d4ef3"},
|
||||||
{file = "rpds_py-0.19.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:959179efb3e4a27610e8d54d667c02a9feaa86bbabaf63efa7faa4dfa780d4f1"},
|
{file = "rpds_py-0.19.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0cf2a0dbb5987da4bd92a7ca727eadb225581dd9681365beba9accbe5308f7d"},
|
||||||
{file = "rpds_py-0.19.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a6e605bb9edcf010f54f8b6a590dd23a4b40a8cb141255eec2a03db249bc915b"},
|
{file = "rpds_py-0.19.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b5e28e56143750808c1c79c70a16519e9bc0a68b623197b96292b21b62d6055c"},
|
||||||
{file = "rpds_py-0.19.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:9133d75dc119a61d1a0ded38fb9ba40a00ef41697cc07adb6ae098c875195a3f"},
|
{file = "rpds_py-0.19.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c7af6f7b80f687b33a4cdb0a785a5d4de1fb027a44c9a049d8eb67d5bfe8a687"},
|
||||||
{file = "rpds_py-0.19.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:dd36b712d35e757e28bf2f40a71e8f8a2d43c8b026d881aa0c617b450d6865c9"},
|
{file = "rpds_py-0.19.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e429fc517a1c5e2a70d576077231538a98d59a45dfc552d1ac45a132844e6dfb"},
|
||||||
{file = "rpds_py-0.19.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:354f3a91718489912f2e0fc331c24eaaf6a4565c080e00fbedb6015857c00582"},
|
{file = "rpds_py-0.19.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d2dbd8f4990d4788cb122f63bf000357533f34860d269c1a8e90ae362090ff3a"},
|
||||||
{file = "rpds_py-0.19.0-cp310-none-win32.whl", hash = "sha256:ebcbf356bf5c51afc3290e491d3722b26aaf5b6af3c1c7f6a1b757828a46e336"},
|
{file = "rpds_py-0.19.1-cp310-none-win32.whl", hash = "sha256:e0f9d268b19e8f61bf42a1da48276bcd05f7ab5560311f541d22557f8227b866"},
|
||||||
{file = "rpds_py-0.19.0-cp310-none-win_amd64.whl", hash = "sha256:75a6076289b2df6c8ecb9d13ff79ae0cad1d5fb40af377a5021016d58cd691ec"},
|
{file = "rpds_py-0.19.1-cp310-none-win_amd64.whl", hash = "sha256:df7c841813f6265e636fe548a49664c77af31ddfa0085515326342a751a6ba51"},
|
||||||
{file = "rpds_py-0.19.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6d45080095e585f8c5097897313def60caa2046da202cdb17a01f147fb263b81"},
|
{file = "rpds_py-0.19.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:902cf4739458852fe917104365ec0efbea7d29a15e4276c96a8d33e6ed8ec137"},
|
||||||
{file = "rpds_py-0.19.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c5c9581019c96f865483d031691a5ff1cc455feb4d84fc6920a5ffc48a794d8a"},
|
{file = "rpds_py-0.19.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f3d73022990ab0c8b172cce57c69fd9a89c24fd473a5e79cbce92df87e3d9c48"},
|
||||||
{file = "rpds_py-0.19.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1540d807364c84516417115c38f0119dfec5ea5c0dd9a25332dea60b1d26fc4d"},
|
{file = "rpds_py-0.19.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3837c63dd6918a24de6c526277910e3766d8c2b1627c500b155f3eecad8fad65"},
|
||||||
{file = "rpds_py-0.19.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9e65489222b410f79711dc3d2d5003d2757e30874096b2008d50329ea4d0f88c"},
|
{file = "rpds_py-0.19.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cdb7eb3cf3deb3dd9e7b8749323b5d970052711f9e1e9f36364163627f96da58"},
|
||||||
{file = "rpds_py-0.19.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9da6f400eeb8c36f72ef6646ea530d6d175a4f77ff2ed8dfd6352842274c1d8b"},
|
{file = "rpds_py-0.19.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:26ab43b6d65d25b1a333c8d1b1c2f8399385ff683a35ab5e274ba7b8bb7dc61c"},
|
||||||
{file = "rpds_py-0.19.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:37f46bb11858717e0efa7893c0f7055c43b44c103e40e69442db5061cb26ed34"},
|
{file = "rpds_py-0.19.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75130df05aae7a7ac171b3b5b24714cffeabd054ad2ebc18870b3aa4526eba23"},
|
||||||
{file = "rpds_py-0.19.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:071d4adc734de562bd11d43bd134330fb6249769b2f66b9310dab7460f4bf714"},
|
{file = "rpds_py-0.19.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c34f751bf67cab69638564eee34023909380ba3e0d8ee7f6fe473079bf93f09b"},
|
||||||
{file = "rpds_py-0.19.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9625367c8955e4319049113ea4f8fee0c6c1145192d57946c6ffcd8fe8bf48dd"},
|
{file = "rpds_py-0.19.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f2671cb47e50a97f419a02cd1e0c339b31de017b033186358db92f4d8e2e17d8"},
|
||||||
{file = "rpds_py-0.19.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e19509145275d46bc4d1e16af0b57a12d227c8253655a46bbd5ec317e941279d"},
|
{file = "rpds_py-0.19.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3c73254c256081704dba0a333457e2fb815364018788f9b501efe7c5e0ada401"},
|
||||||
{file = "rpds_py-0.19.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d438e4c020d8c39961deaf58f6913b1bf8832d9b6f62ec35bd93e97807e9cbc"},
|
{file = "rpds_py-0.19.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4383beb4a29935b8fa28aca8fa84c956bf545cb0c46307b091b8d312a9150e6a"},
|
||||||
{file = "rpds_py-0.19.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:90bf55d9d139e5d127193170f38c584ed3c79e16638890d2e36f23aa1630b952"},
|
{file = "rpds_py-0.19.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:dbceedcf4a9329cc665452db1aaf0845b85c666e4885b92ee0cddb1dbf7e052a"},
|
||||||
{file = "rpds_py-0.19.0-cp311-none-win32.whl", hash = "sha256:8d6ad132b1bc13d05ffe5b85e7a01a3998bf3a6302ba594b28d61b8c2cf13aaf"},
|
{file = "rpds_py-0.19.1-cp311-none-win32.whl", hash = "sha256:f0a6d4a93d2a05daec7cb885157c97bbb0be4da739d6f9dfb02e101eb40921cd"},
|
||||||
{file = "rpds_py-0.19.0-cp311-none-win_amd64.whl", hash = "sha256:7ec72df7354e6b7f6eb2a17fa6901350018c3a9ad78e48d7b2b54d0412539a67"},
|
{file = "rpds_py-0.19.1-cp311-none-win_amd64.whl", hash = "sha256:c149a652aeac4902ecff2dd93c3b2681c608bd5208c793c4a99404b3e1afc87c"},
|
||||||
{file = "rpds_py-0.19.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:5095a7c838a8647c32aa37c3a460d2c48debff7fc26e1136aee60100a8cd8f68"},
|
{file = "rpds_py-0.19.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:56313be667a837ff1ea3508cebb1ef6681d418fa2913a0635386cf29cff35165"},
|
||||||
{file = "rpds_py-0.19.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f2f78ef14077e08856e788fa482107aa602636c16c25bdf59c22ea525a785e9"},
|
{file = "rpds_py-0.19.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6d1d7539043b2b31307f2c6c72957a97c839a88b2629a348ebabe5aa8b626d6b"},
|
||||||
{file = "rpds_py-0.19.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7cc6cb44f8636fbf4a934ca72f3e786ba3c9f9ba4f4d74611e7da80684e48d2"},
|
{file = "rpds_py-0.19.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e1dc59a5e7bc7f44bd0c048681f5e05356e479c50be4f2c1a7089103f1621d5"},
|
||||||
{file = "rpds_py-0.19.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cf902878b4af334a09de7a45badbff0389e7cf8dc2e4dcf5f07125d0b7c2656d"},
|
{file = "rpds_py-0.19.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b8f78398e67a7227aefa95f876481485403eb974b29e9dc38b307bb6eb2315ea"},
|
||||||
{file = "rpds_py-0.19.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:688aa6b8aa724db1596514751ffb767766e02e5c4a87486ab36b8e1ebc1aedac"},
|
{file = "rpds_py-0.19.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ef07a0a1d254eeb16455d839cef6e8c2ed127f47f014bbda64a58b5482b6c836"},
|
||||||
{file = "rpds_py-0.19.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57dbc9167d48e355e2569346b5aa4077f29bf86389c924df25c0a8b9124461fb"},
|
{file = "rpds_py-0.19.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8124101e92c56827bebef084ff106e8ea11c743256149a95b9fd860d3a4f331f"},
|
||||||
{file = "rpds_py-0.19.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b4cf5a9497874822341c2ebe0d5850fed392034caadc0bad134ab6822c0925b"},
|
{file = "rpds_py-0.19.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08ce9c95a0b093b7aec75676b356a27879901488abc27e9d029273d280438505"},
|
||||||
{file = "rpds_py-0.19.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8a790d235b9d39c70a466200d506bb33a98e2ee374a9b4eec7a8ac64c2c261fa"},
|
{file = "rpds_py-0.19.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0b02dd77a2de6e49078c8937aadabe933ceac04b41c5dde5eca13a69f3cf144e"},
|
||||||
{file = "rpds_py-0.19.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1d16089dfa58719c98a1c06f2daceba6d8e3fb9b5d7931af4a990a3c486241cb"},
|
{file = "rpds_py-0.19.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4dd02e29c8cbed21a1875330b07246b71121a1c08e29f0ee3db5b4cfe16980c4"},
|
||||||
{file = "rpds_py-0.19.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:bc9128e74fe94650367fe23f37074f121b9f796cabbd2f928f13e9661837296d"},
|
{file = "rpds_py-0.19.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9c7042488165f7251dc7894cd533a875d2875af6d3b0e09eda9c4b334627ad1c"},
|
||||||
{file = "rpds_py-0.19.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c8f77e661ffd96ff104bebf7d0f3255b02aa5d5b28326f5408d6284c4a8b3248"},
|
{file = "rpds_py-0.19.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f809a17cc78bd331e137caa25262b507225854073fd319e987bd216bed911b7c"},
|
||||||
{file = "rpds_py-0.19.0-cp312-none-win32.whl", hash = "sha256:5f83689a38e76969327e9b682be5521d87a0c9e5a2e187d2bc6be4765f0d4600"},
|
{file = "rpds_py-0.19.1-cp312-none-win32.whl", hash = "sha256:3ddab996807c6b4227967fe1587febade4e48ac47bb0e2d3e7858bc621b1cace"},
|
||||||
{file = "rpds_py-0.19.0-cp312-none-win_amd64.whl", hash = "sha256:06925c50f86da0596b9c3c64c3837b2481337b83ef3519e5db2701df695453a4"},
|
{file = "rpds_py-0.19.1-cp312-none-win_amd64.whl", hash = "sha256:32e0db3d6e4f45601b58e4ac75c6f24afbf99818c647cc2066f3e4b192dabb1f"},
|
||||||
{file = "rpds_py-0.19.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:75969cf900d7be665ccb1622a9aba225cf386bbc9c3bcfeeab9f62b5048f4a07"},
|
{file = "rpds_py-0.19.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7d5c7e32f3ee42f77d8ff1a10384b5cdcc2d37035e2e3320ded909aa192d32c3"},
|
||||||
{file = "rpds_py-0.19.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8445f23f13339da640d1be8e44e5baf4af97e396882ebbf1692aecd67f67c479"},
|
{file = "rpds_py-0.19.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:89cc8921a4a5028d6dd388c399fcd2eef232e7040345af3d5b16c04b91cf3c7e"},
|
||||||
{file = "rpds_py-0.19.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5a7c1062ef8aea3eda149f08120f10795835fc1c8bc6ad948fb9652a113ca55"},
|
{file = "rpds_py-0.19.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bca34e913d27401bda2a6f390d0614049f5a95b3b11cd8eff80fe4ec340a1208"},
|
||||||
{file = "rpds_py-0.19.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:462b0c18fbb48fdbf980914a02ee38c423a25fcc4cf40f66bacc95a2d2d73bc8"},
|
{file = "rpds_py-0.19.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5953391af1405f968eb5701ebbb577ebc5ced8d0041406f9052638bafe52209d"},
|
||||||
{file = "rpds_py-0.19.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3208f9aea18991ac7f2b39721e947bbd752a1abbe79ad90d9b6a84a74d44409b"},
|
{file = "rpds_py-0.19.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:840e18c38098221ea6201f091fc5d4de6128961d2930fbbc96806fb43f69aec1"},
|
||||||
{file = "rpds_py-0.19.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3444fe52b82f122d8a99bf66777aed6b858d392b12f4c317da19f8234db4533"},
|
{file = "rpds_py-0.19.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6d8b735c4d162dc7d86a9cf3d717f14b6c73637a1f9cd57fe7e61002d9cb1972"},
|
||||||
{file = "rpds_py-0.19.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88cb4bac7185a9f0168d38c01d7a00addece9822a52870eee26b8d5b61409213"},
|
{file = "rpds_py-0.19.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce757c7c90d35719b38fa3d4ca55654a76a40716ee299b0865f2de21c146801c"},
|
||||||
{file = "rpds_py-0.19.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6b130bd4163c93798a6b9bb96be64a7c43e1cec81126ffa7ffaa106e1fc5cef5"},
|
{file = "rpds_py-0.19.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a9421b23c85f361a133aa7c5e8ec757668f70343f4ed8fdb5a4a14abd5437244"},
|
||||||
{file = "rpds_py-0.19.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:a707b158b4410aefb6b054715545bbb21aaa5d5d0080217290131c49c2124a6e"},
|
{file = "rpds_py-0.19.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:3b823be829407393d84ee56dc849dbe3b31b6a326f388e171555b262e8456cc1"},
|
||||||
{file = "rpds_py-0.19.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:dc9ac4659456bde7c567107556ab065801622396b435a3ff213daef27b495388"},
|
{file = "rpds_py-0.19.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:5e58b61dcbb483a442c6239c3836696b79f2cd8e7eec11e12155d3f6f2d886d1"},
|
||||||
{file = "rpds_py-0.19.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:81ea573aa46d3b6b3d890cd3c0ad82105985e6058a4baed03cf92518081eec8c"},
|
{file = "rpds_py-0.19.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:39d67896f7235b2c886fb1ee77b1491b77049dcef6fbf0f401e7b4cbed86bbd4"},
|
||||||
{file = "rpds_py-0.19.0-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3f148c3f47f7f29a79c38cc5d020edcb5ca780020fab94dbc21f9af95c463581"},
|
{file = "rpds_py-0.19.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:8b32cd4ab6db50c875001ba4f5a6b30c0f42151aa1fbf9c2e7e3674893fb1dc4"},
|
||||||
{file = "rpds_py-0.19.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:b0906357f90784a66e89ae3eadc2654f36c580a7d65cf63e6a616e4aec3a81be"},
|
{file = "rpds_py-0.19.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:1c32e41de995f39b6b315d66c27dea3ef7f7c937c06caab4c6a79a5e09e2c415"},
|
||||||
{file = "rpds_py-0.19.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f629ecc2db6a4736b5ba95a8347b0089240d69ad14ac364f557d52ad68cf94b0"},
|
{file = "rpds_py-0.19.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:1a129c02b42d46758c87faeea21a9f574e1c858b9f358b6dd0bbd71d17713175"},
|
||||||
{file = "rpds_py-0.19.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c6feacd1d178c30e5bc37184526e56740342fd2aa6371a28367bad7908d454fc"},
|
{file = "rpds_py-0.19.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:346557f5b1d8fd9966059b7a748fd79ac59f5752cd0e9498d6a40e3ac1c1875f"},
|
||||||
{file = "rpds_py-0.19.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae8b6068ee374fdfab63689be0963333aa83b0815ead5d8648389a8ded593378"},
|
{file = "rpds_py-0.19.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:31e450840f2f27699d014cfc8865cc747184286b26d945bcea6042bb6aa4d26e"},
|
||||||
{file = "rpds_py-0.19.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78d57546bad81e0da13263e4c9ce30e96dcbe720dbff5ada08d2600a3502e526"},
|
{file = "rpds_py-0.19.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:01227f8b3e6c8961490d869aa65c99653df80d2f0a7fde8c64ebddab2b9b02fd"},
|
||||||
{file = "rpds_py-0.19.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8b6683a37338818646af718c9ca2a07f89787551057fae57c4ec0446dc6224b"},
|
{file = "rpds_py-0.19.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:69084fd29bfeff14816666c93a466e85414fe6b7d236cfc108a9c11afa6f7301"},
|
||||||
{file = "rpds_py-0.19.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e8481b946792415adc07410420d6fc65a352b45d347b78fec45d8f8f0d7496f0"},
|
{file = "rpds_py-0.19.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4d2b88efe65544a7d5121b0c3b003ebba92bfede2ea3577ce548b69c5235185"},
|
||||||
{file = "rpds_py-0.19.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:bec35eb20792ea64c3c57891bc3ca0bedb2884fbac2c8249d9b731447ecde4fa"},
|
{file = "rpds_py-0.19.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6ea961a674172ed2235d990d7edf85d15d8dfa23ab8575e48306371c070cda67"},
|
||||||
{file = "rpds_py-0.19.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:aa5476c3e3a402c37779e95f7b4048db2cb5b0ed0b9d006983965e93f40fe05a"},
|
{file = "rpds_py-0.19.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:5beffdbe766cfe4fb04f30644d822a1080b5359df7db3a63d30fa928375b2720"},
|
||||||
{file = "rpds_py-0.19.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:19d02c45f2507b489fd4df7b827940f1420480b3e2e471e952af4d44a1ea8e34"},
|
{file = "rpds_py-0.19.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:720f3108fb1bfa32e51db58b832898372eb5891e8472a8093008010911e324c5"},
|
||||||
{file = "rpds_py-0.19.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a3e2fd14c5d49ee1da322672375963f19f32b3d5953f0615b175ff7b9d38daed"},
|
{file = "rpds_py-0.19.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:c2087dbb76a87ec2c619253e021e4fb20d1a72580feeaa6892b0b3d955175a71"},
|
||||||
{file = "rpds_py-0.19.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:93a91c2640645303e874eada51f4f33351b84b351a689d470f8108d0e0694210"},
|
{file = "rpds_py-0.19.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2ddd50f18ebc05ec29a0d9271e9dbe93997536da3546677f8ca00b76d477680c"},
|
||||||
{file = "rpds_py-0.19.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5b9fc03bf76a94065299d4a2ecd8dfbae4ae8e2e8098bbfa6ab6413ca267709"},
|
{file = "rpds_py-0.19.1.tar.gz", hash = "sha256:31dd5794837f00b46f4096aa8ccaa5972f73a938982e32ed817bb520c465e520"},
|
||||||
{file = "rpds_py-0.19.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5a4b07cdf3f84310c08c1de2c12ddadbb7a77568bcb16e95489f9c81074322ed"},
|
|
||||||
{file = "rpds_py-0.19.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba0ed0dc6763d8bd6e5de5cf0d746d28e706a10b615ea382ac0ab17bb7388633"},
|
|
||||||
{file = "rpds_py-0.19.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:474bc83233abdcf2124ed3f66230a1c8435896046caa4b0b5ab6013c640803cc"},
|
|
||||||
{file = "rpds_py-0.19.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:329c719d31362355a96b435f4653e3b4b061fcc9eba9f91dd40804ca637d914e"},
|
|
||||||
{file = "rpds_py-0.19.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ef9101f3f7b59043a34f1dccbb385ca760467590951952d6701df0da9893ca0c"},
|
|
||||||
{file = "rpds_py-0.19.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:0121803b0f424ee2109d6e1f27db45b166ebaa4b32ff47d6aa225642636cd834"},
|
|
||||||
{file = "rpds_py-0.19.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:8344127403dea42f5970adccf6c5957a71a47f522171fafaf4c6ddb41b61703a"},
|
|
||||||
{file = "rpds_py-0.19.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:443cec402ddd650bb2b885113e1dcedb22b1175c6be223b14246a714b61cd521"},
|
|
||||||
{file = "rpds_py-0.19.0.tar.gz", hash = "sha256:4fdc9afadbeb393b4bbbad75481e0ea78e4469f2e1d713a90811700830b553a9"},
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -1861,40 +1852,40 @@ files = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ruff"
|
name = "ruff"
|
||||||
version = "0.5.3"
|
version = "0.5.4"
|
||||||
requires_python = ">=3.7"
|
requires_python = ">=3.7"
|
||||||
summary = "An extremely fast Python linter and code formatter, written in Rust."
|
summary = "An extremely fast Python linter and code formatter, written in Rust."
|
||||||
groups = ["dev"]
|
groups = ["dev"]
|
||||||
files = [
|
files = [
|
||||||
{file = "ruff-0.5.3-py3-none-linux_armv6l.whl", hash = "sha256:b12424d9db7347fa63c5ed9af010003338c63c629fb9c9c6adb2aa4f5699729b"},
|
{file = "ruff-0.5.4-py3-none-linux_armv6l.whl", hash = "sha256:82acef724fc639699b4d3177ed5cc14c2a5aacd92edd578a9e846d5b5ec18ddf"},
|
||||||
{file = "ruff-0.5.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b8d72c5684bbd4ed304a9a955ee2e67f57b35f6193222ade910cca8a805490e3"},
|
{file = "ruff-0.5.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:da62e87637c8838b325e65beee485f71eb36202ce8e3cdbc24b9fcb8b99a37be"},
|
||||||
{file = "ruff-0.5.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:d2fc2cdb85ccac1e816cc9d5d8cedefd93661bd957756d902543af32a6b04a71"},
|
{file = "ruff-0.5.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e98ad088edfe2f3b85a925ee96da652028f093d6b9b56b76fc242d8abb8e2059"},
|
||||||
{file = "ruff-0.5.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf4bc751240b2fab5d19254571bcacb315c7b0b00bf3c912d52226a82bbec073"},
|
{file = "ruff-0.5.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c55efbecc3152d614cfe6c2247a3054cfe358cefbf794f8c79c8575456efe19"},
|
||||||
{file = "ruff-0.5.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bc697ec874fdd7c7ba0a85ec76ab38f8595224868d67f097c5ffc21136e72fcd"},
|
{file = "ruff-0.5.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f9b85eaa1f653abd0a70603b8b7008d9e00c9fa1bbd0bf40dad3f0c0bdd06793"},
|
||||||
{file = "ruff-0.5.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e791d34d3557a3819b3704bc1f087293c821083fa206812842fa363f6018a192"},
|
{file = "ruff-0.5.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0cf497a47751be8c883059c4613ba2f50dd06ec672692de2811f039432875278"},
|
||||||
{file = "ruff-0.5.3-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:76bb5a87fd397520b91a83eae8a2f7985236d42dd9459f09eef58e7f5c1d8316"},
|
{file = "ruff-0.5.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:09c14ed6a72af9ccc8d2e313d7acf7037f0faff43cde4b507e66f14e812e37f7"},
|
||||||
{file = "ruff-0.5.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a8cfc7a26422c78e94f1ec78ec02501bbad2df5834907e75afe474cc6b83a8c1"},
|
{file = "ruff-0.5.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:628f6b8f97b8bad2490240aa84f3e68f390e13fabc9af5c0d3b96b485921cd60"},
|
||||||
{file = "ruff-0.5.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96066c4328a49fce2dd40e80f7117987369feec30ab771516cf95f1cc2db923c"},
|
{file = "ruff-0.5.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3520a00c0563d7a7a7c324ad7e2cde2355733dafa9592c671fb2e9e3cd8194c1"},
|
||||||
{file = "ruff-0.5.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03bfe9ab5bdc0b08470c3b261643ad54ea86edc32b64d1e080892d7953add3ad"},
|
{file = "ruff-0.5.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93789f14ca2244fb91ed481456f6d0bb8af1f75a330e133b67d08f06ad85b516"},
|
||||||
{file = "ruff-0.5.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:7704582a026fa02cca83efd76671a98ee6eb412c4230209efe5e2a006c06db62"},
|
{file = "ruff-0.5.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:029454e2824eafa25b9df46882f7f7844d36fd8ce51c1b7f6d97e2615a57bbcc"},
|
||||||
{file = "ruff-0.5.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:08058d077e21b856d32ebf483443390e29dc44d927608dc8f092ff6776519da9"},
|
{file = "ruff-0.5.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:9492320eed573a13a0bc09a2957f17aa733fff9ce5bf00e66e6d4a88ec33813f"},
|
||||||
{file = "ruff-0.5.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:77d49484429ed7c7e6e2e75a753f153b7b58f875bdb4158ad85af166a1ec1822"},
|
{file = "ruff-0.5.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:a6e1f62a92c645e2919b65c02e79d1f61e78a58eddaebca6c23659e7c7cb4ac7"},
|
||||||
{file = "ruff-0.5.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:642cbff6cbfa38d2566d8db086508d6f472edb136cbfcc4ea65997745368c29e"},
|
{file = "ruff-0.5.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:768fa9208df2bec4b2ce61dbc7c2ddd6b1be9fb48f1f8d3b78b3332c7d71c1ff"},
|
||||||
{file = "ruff-0.5.3-py3-none-win32.whl", hash = "sha256:eafc45dd8bdc37a00b28e68cc038daf3ca8c233d73fea276dcd09defb1352841"},
|
{file = "ruff-0.5.4-py3-none-win32.whl", hash = "sha256:e1e7393e9c56128e870b233c82ceb42164966f25b30f68acbb24ed69ce9c3a4e"},
|
||||||
{file = "ruff-0.5.3-py3-none-win_amd64.whl", hash = "sha256:cbaec2ddf4f78e5e9ecf5456ea0f496991358a1d883862ed0b9e947e2b6aea93"},
|
{file = "ruff-0.5.4-py3-none-win_amd64.whl", hash = "sha256:58b54459221fd3f661a7329f177f091eb35cf7a603f01d9eb3eb11cc348d38c4"},
|
||||||
{file = "ruff-0.5.3-py3-none-win_arm64.whl", hash = "sha256:05fbd2cb404775d6cd7f2ff49504e2d20e13ef95fa203bd1ab22413af70d420b"},
|
{file = "ruff-0.5.4-py3-none-win_arm64.whl", hash = "sha256:bd53da65f1085fb5b307c38fd3c0829e76acf7b2a912d8d79cadcdb4875c1eb7"},
|
||||||
{file = "ruff-0.5.3.tar.gz", hash = "sha256:2a3eb4f1841771fa5b67a56be9c2d16fd3cc88e378bd86aaeaec2f7e6bcdd0a2"},
|
{file = "ruff-0.5.4.tar.gz", hash = "sha256:2795726d5f71c4f4e70653273d1c23a8182f07dd8e48c12de5d867bfb7557eed"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "setuptools"
|
name = "setuptools"
|
||||||
version = "71.0.4"
|
version = "71.1.0"
|
||||||
requires_python = ">=3.8"
|
requires_python = ">=3.8"
|
||||||
summary = "Easily download, build, install, upgrade, and uninstall Python packages"
|
summary = "Easily download, build, install, upgrade, and uninstall Python packages"
|
||||||
groups = ["dev", "tests"]
|
groups = ["dev", "tests"]
|
||||||
files = [
|
files = [
|
||||||
{file = "setuptools-71.0.4-py3-none-any.whl", hash = "sha256:ed2feca703be3bdbd94e6bb17365d91c6935c6b2a8d0bb09b66a2c435ba0b1a5"},
|
{file = "setuptools-71.1.0-py3-none-any.whl", hash = "sha256:33874fdc59b3188304b2e7c80d9029097ea31627180896fb549c578ceb8a0855"},
|
||||||
{file = "setuptools-71.0.4.tar.gz", hash = "sha256:48297e5d393a62b7cb2a10b8f76c63a73af933bd809c9e0d0d6352a1a0135dd8"},
|
{file = "setuptools-71.1.0.tar.gz", hash = "sha256:032d42ee9fb536e33087fb66cac5f840eb9391ed05637b3f2a76a7c8fb477936"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
|
@ -73,6 +73,10 @@ addopts = [
|
||||||
"--ignore=src/nwb_linkml/models",
|
"--ignore=src/nwb_linkml/models",
|
||||||
"--ignore=src/nwb_linkml/schema"
|
"--ignore=src/nwb_linkml/schema"
|
||||||
]
|
]
|
||||||
|
markers = [
|
||||||
|
"dev: tests that are just for development rather than testing correctness",
|
||||||
|
"provider: tests for providers!"
|
||||||
|
]
|
||||||
testpaths = [
|
testpaths = [
|
||||||
"src/nwb_linkml",
|
"src/nwb_linkml",
|
||||||
"tests",
|
"tests",
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
"""
|
"""
|
||||||
Adapter for NWB datasets to linkml Classes
|
Adapter for NWB datasets to linkml Classes
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from abc import abstractmethod
|
from abc import abstractmethod
|
||||||
from typing import ClassVar, Optional, Type
|
from typing import ClassVar, Optional, Type
|
||||||
|
|
||||||
|
|
|
@ -36,16 +36,11 @@ from copy import copy
|
||||||
from dataclasses import dataclass, field
|
from dataclasses import dataclass, field
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from types import ModuleType
|
from types import ModuleType
|
||||||
from typing import Dict, List, Optional, Tuple, Type, Union
|
from typing import ClassVar, Dict, List, Optional, Tuple, Type, Union
|
||||||
|
|
||||||
from jinja2 import Template
|
|
||||||
from linkml.generators import PydanticGenerator
|
from linkml.generators import PydanticGenerator
|
||||||
|
from linkml.generators.pydanticgen.build import SlotResult
|
||||||
from linkml.generators.pydanticgen.array import ArrayRepresentation
|
from linkml.generators.pydanticgen.array import ArrayRepresentation
|
||||||
from linkml.generators.pydanticgen.black import format_black
|
|
||||||
from linkml.generators.common.type_designators import (
|
|
||||||
get_type_designator_value,
|
|
||||||
)
|
|
||||||
from linkml.utils.ifabsent_functions import ifabsent_value_declaration
|
|
||||||
from linkml_runtime.linkml_model.meta import (
|
from linkml_runtime.linkml_model.meta import (
|
||||||
Annotation,
|
Annotation,
|
||||||
AnonymousSlotExpression,
|
AnonymousSlotExpression,
|
||||||
|
@ -77,6 +72,8 @@ class NWBPydanticGenerator(PydanticGenerator):
|
||||||
'object_id: Optional[str] = Field(None, description="Unique UUID for each object")',
|
'object_id: Optional[str] = Field(None, description="Unique UUID for each object")',
|
||||||
)
|
)
|
||||||
split: bool = True
|
split: bool = True
|
||||||
|
|
||||||
|
|
||||||
schema_map: Optional[Dict[str, SchemaDefinition]] = None
|
schema_map: Optional[Dict[str, SchemaDefinition]] = None
|
||||||
"""See :meth:`.LinkMLProvider.build` for usage - a list of specific versions to import from"""
|
"""See :meth:`.LinkMLProvider.build` for usage - a list of specific versions to import from"""
|
||||||
array_representations: List[ArrayRepresentation] = field(
|
array_representations: List[ArrayRepresentation] = field(
|
||||||
|
@ -84,9 +81,12 @@ class NWBPydanticGenerator(PydanticGenerator):
|
||||||
)
|
)
|
||||||
black: bool = True
|
black: bool = True
|
||||||
inlined: bool = True
|
inlined: bool = True
|
||||||
emit_metadata: bool = True,
|
emit_metadata: bool = True
|
||||||
gen_classvars: bool = True,
|
gen_classvars: bool = True
|
||||||
gen_slots: bool = True,
|
gen_slots: bool = True
|
||||||
|
|
||||||
|
|
||||||
|
skip_meta: ClassVar[Tuple[str]] = ('domain_of',)
|
||||||
|
|
||||||
def _check_anyof(
|
def _check_anyof(
|
||||||
self, s: SlotDefinition, sn: SlotDefinitionName, sv: SchemaView
|
self, s: SlotDefinition, sn: SlotDefinitionName, sv: SchemaView
|
||||||
|
@ -111,6 +111,18 @@ class NWBPydanticGenerator(PydanticGenerator):
|
||||||
if not base_range_subsumes_any_of:
|
if not base_range_subsumes_any_of:
|
||||||
raise ValueError("Slot cannot have both range and any_of defined")
|
raise ValueError("Slot cannot have both range and any_of defined")
|
||||||
|
|
||||||
|
def before_generate_schema(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def after_generate_slot(self, slot: SlotResult, sv: SchemaView) -> SlotResult:
|
||||||
|
"""
|
||||||
|
- strip unwanted metadata
|
||||||
|
"""
|
||||||
|
for key in self.skip_meta:
|
||||||
|
if key in slot.attribute.meta:
|
||||||
|
del slot.attribute.meta[key]
|
||||||
|
return slot
|
||||||
|
|
||||||
def compile_module(
|
def compile_module(
|
||||||
self, module_path: Path = None, module_name: str = "test", **kwargs
|
self, module_path: Path = None, module_name: str = "test", **kwargs
|
||||||
) -> ModuleType: # pragma: no cover - replaced with provider
|
) -> ModuleType: # pragma: no cover - replaced with provider
|
||||||
|
@ -131,6 +143,8 @@ class NWBPydanticGenerator(PydanticGenerator):
|
||||||
raise e
|
raise e
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def compile_python(
|
def compile_python(
|
||||||
text_or_fn: str, package_path: Path = None, module_name: str = "test"
|
text_or_fn: str, package_path: Path = None, module_name: str = "test"
|
||||||
) -> ModuleType:
|
) -> ModuleType:
|
||||||
|
|
|
@ -3,6 +3,7 @@ Provider for pydantic models.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import importlib
|
import importlib
|
||||||
|
import re
|
||||||
import sys
|
import sys
|
||||||
from importlib.abc import MetaPathFinder
|
from importlib.abc import MetaPathFinder
|
||||||
from importlib.machinery import ModuleSpec
|
from importlib.machinery import ModuleSpec
|
||||||
|
@ -10,9 +11,10 @@ from pathlib import Path
|
||||||
from types import ModuleType
|
from types import ModuleType
|
||||||
from typing import List, Optional, Type
|
from typing import List, Optional, Type
|
||||||
|
|
||||||
|
from linkml_runtime.linkml_model.meta import SchemaDefinition
|
||||||
|
from linkml.generators.pydanticgen.pydanticgen import SplitMode, _import_to_path
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
from nwb_linkml.io.yaml import yaml_peek
|
|
||||||
from nwb_linkml.generators.pydantic import NWBPydanticGenerator
|
from nwb_linkml.generators.pydantic import NWBPydanticGenerator
|
||||||
from nwb_linkml.maps.naming import module_case, version_module_case
|
from nwb_linkml.maps.naming import module_case, version_module_case
|
||||||
from nwb_linkml.providers import LinkMLProvider, Provider
|
from nwb_linkml.providers import LinkMLProvider, Provider
|
||||||
|
@ -33,6 +35,20 @@ class PydanticProvider(Provider):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
PROVIDES = "pydantic"
|
PROVIDES = "pydantic"
|
||||||
|
SPLIT_PATTERN = (
|
||||||
|
"...{% if schema.annotations.namespace %}"
|
||||||
|
"{{ schema.annotations.namespace.value | replace('.', '_') }}"
|
||||||
|
"{% else %}unknown{% endif %}"
|
||||||
|
"."
|
||||||
|
"v{{ schema.version | replace('.', '_') }}"
|
||||||
|
"."
|
||||||
|
"{% if schema.annotations.is_namespace and schema.annotations.is_namespace.value %}"
|
||||||
|
"namespace"
|
||||||
|
"{% else %}"
|
||||||
|
"{{ schema.name | replace('.', '_') }}"
|
||||||
|
"{% endif %}"
|
||||||
|
)
|
||||||
|
"""See :attr:`~linkml.generators.PydanticGenerator.split_pattern"""
|
||||||
|
|
||||||
def __init__(self, path: Optional[Path] = None, verbose: bool = True):
|
def __init__(self, path: Optional[Path] = None, verbose: bool = True):
|
||||||
super().__init__(path, verbose)
|
super().__init__(path, verbose)
|
||||||
|
@ -45,7 +61,6 @@ class PydanticProvider(Provider):
|
||||||
def build(
|
def build(
|
||||||
self,
|
self,
|
||||||
namespace: str | Path,
|
namespace: str | Path,
|
||||||
out_file: Optional[Path] = None,
|
|
||||||
version: Optional[str] = None,
|
version: Optional[str] = None,
|
||||||
split: bool = True,
|
split: bool = True,
|
||||||
dump: bool = True,
|
dump: bool = True,
|
||||||
|
@ -66,8 +81,6 @@ class PydanticProvider(Provider):
|
||||||
:class:`.LinkMLProvider` to get the converted schema. If a path,
|
:class:`.LinkMLProvider` to get the converted schema. If a path,
|
||||||
assume we have been given an explicit ``namespace.yaml`` from a converted
|
assume we have been given an explicit ``namespace.yaml`` from a converted
|
||||||
NWB -> LinkML schema to load from.
|
NWB -> LinkML schema to load from.
|
||||||
out_file (Optional[Path]): Optionally override the output file. If ``None``,
|
|
||||||
generate from namespace and version
|
|
||||||
split (bool): If ``False`` (default), generate a single ``namespace.py`` file,
|
split (bool): If ``False`` (default), generate a single ``namespace.py`` file,
|
||||||
otherwise generate a python file for each schema in the namespace
|
otherwise generate a python file for each schema in the namespace
|
||||||
in addition to a ``namespace.py`` that imports from them
|
in addition to a ``namespace.py`` that imports from them
|
||||||
|
@ -85,32 +98,20 @@ class PydanticProvider(Provider):
|
||||||
namespace.endswith(".yaml") or namespace.endswith(".yml")
|
namespace.endswith(".yaml") or namespace.endswith(".yml")
|
||||||
):
|
):
|
||||||
# we're given a name of a namespace to build
|
# we're given a name of a namespace to build
|
||||||
name = namespace
|
|
||||||
path = (
|
path = (
|
||||||
LinkMLProvider(path=self.config.cache_dir).namespace_path(namespace, version)
|
LinkMLProvider(path=self.config.cache_dir).namespace_path(namespace, version)
|
||||||
/ "namespace.yaml"
|
/ "namespace.yaml"
|
||||||
)
|
)
|
||||||
if version is None:
|
|
||||||
# Get the most recently built version
|
|
||||||
version = LinkMLProvider(path=self.config.cache_dir).available_versions[name][-1]
|
|
||||||
fn = path.name
|
|
||||||
else:
|
else:
|
||||||
# given a path to a namespace linkml yaml file
|
# given a path to a namespace linkml yaml file
|
||||||
path = Path(namespace)
|
path = Path(namespace)
|
||||||
name = yaml_peek('name', path)
|
|
||||||
version = yaml_peek('version', path)
|
|
||||||
fn = path.name
|
|
||||||
|
|
||||||
version = version_module_case(version)
|
|
||||||
if out_file is None:
|
|
||||||
fn = fn.removesuffix(".yaml")
|
|
||||||
fn = module_case(fn) + ".py"
|
|
||||||
out_file = self.path / name / version / fn
|
|
||||||
|
|
||||||
if split:
|
if split:
|
||||||
result = self._build_split(path, dump, out_file, force, **kwargs)
|
result = self._build_split(path, dump, force, **kwargs)
|
||||||
else:
|
else:
|
||||||
result = self._build_unsplit(path, dump, out_file, force, **kwargs)
|
result = self._build_unsplit(path, dump, force, **kwargs)
|
||||||
|
|
||||||
self.install_pathfinder()
|
self.install_pathfinder()
|
||||||
return result
|
return result
|
||||||
|
@ -119,16 +120,17 @@ class PydanticProvider(Provider):
|
||||||
self,
|
self,
|
||||||
path: Path,
|
path: Path,
|
||||||
dump: bool,
|
dump: bool,
|
||||||
out_file: Path,
|
|
||||||
force: bool,
|
force: bool,
|
||||||
**kwargs
|
**kwargs
|
||||||
) -> Optional[str]:
|
) -> str:
|
||||||
|
generator = NWBPydanticGenerator(str(path), split=False, split_pattern=self.SPLIT_PATTERN, **kwargs)
|
||||||
|
out_module = generator.generate_module_import(generator.schemaview.schema)
|
||||||
|
out_file = (self.path / _import_to_path(out_module)).resolve()
|
||||||
if out_file.exists() and not force:
|
if out_file.exists() and not force:
|
||||||
with open(out_file) as ofile:
|
with open(out_file) as ofile:
|
||||||
serialized = ofile.read()
|
serialized = ofile.read()
|
||||||
return serialized
|
return serialized
|
||||||
|
|
||||||
generator = NWBPydanticGenerator(str(path), **kwargs)
|
|
||||||
serialized = generator.serialize()
|
serialized = generator.serialize()
|
||||||
if dump:
|
if dump:
|
||||||
out_file.parent.mkdir(parents=True, exist_ok=True)
|
out_file.parent.mkdir(parents=True, exist_ok=True)
|
||||||
|
@ -143,35 +145,72 @@ class PydanticProvider(Provider):
|
||||||
self,
|
self,
|
||||||
path: Path,
|
path: Path,
|
||||||
dump: bool,
|
dump: bool,
|
||||||
out_file: Path,
|
|
||||||
force: bool,
|
force: bool,
|
||||||
**kwargs
|
**kwargs
|
||||||
) -> List[str]:
|
) -> List[str]:
|
||||||
serialized = []
|
res = []
|
||||||
for schema_file in path.parent.glob("*.yaml"):
|
|
||||||
this_out = out_file.parent / (module_case(schema_file.stem) + ".py")
|
|
||||||
serialized.append(
|
|
||||||
self._build_unsplit(schema_file, default_kwargs, dump, this_out, force, **kwargs)
|
|
||||||
)
|
|
||||||
|
|
||||||
# If there are dependent versions that also need to be built, do that now!
|
# first make the namespace file we were given
|
||||||
needed = [
|
|
||||||
(module_case(ns), version_module_case(version))
|
|
||||||
for ns, version in versions.items()
|
|
||||||
if version_module_case(version) not in self.available_versions.get(ns, [])
|
|
||||||
]
|
|
||||||
for needs in needed:
|
|
||||||
needed_path = path.parents[2] / needs[0] / needs[1] / "namespace.yaml"
|
|
||||||
out_file_stem = out_file.parents[2] / needs[0] / needs[1]
|
|
||||||
for schema_file in needed_path.parent.glob("*.yaml"):
|
|
||||||
this_out = out_file_stem / (module_case(schema_file.stem) + ".py")
|
|
||||||
serialized.append(
|
|
||||||
self._build_unsplit(
|
|
||||||
schema_file, versions, default_kwargs, dump, this_out, force
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
return serialized
|
# remove any directory traversal at the head of the pattern for this,
|
||||||
|
# we're making relative to the provider's path not the generated schema at first
|
||||||
|
root_pattern = re.sub(r'^\.*', '', self.SPLIT_PATTERN)
|
||||||
|
gen = NWBPydanticGenerator(schema=path, split=True, split_pattern=root_pattern, split_mode=SplitMode.FULL)
|
||||||
|
mod_name = gen.generate_module_import(gen.schemaview.schema)
|
||||||
|
ns_file = (self.path / _import_to_path(mod_name)).resolve()
|
||||||
|
|
||||||
|
# now replace the real import path so the generated module has it
|
||||||
|
gen.split_pattern = self.SPLIT_PATTERN
|
||||||
|
# always render since we need to at least render to know what we're importing
|
||||||
|
rendered = gen.render()
|
||||||
|
|
||||||
|
if not ns_file.exists() or force:
|
||||||
|
ns_file.parent.mkdir(exist_ok=True, parents=True)
|
||||||
|
serialized = gen.serialize(rendered_module=rendered)
|
||||||
|
if dump:
|
||||||
|
with open(ns_file, 'w') as ofile:
|
||||||
|
ofile.write(serialized)
|
||||||
|
else:
|
||||||
|
with open(ns_file, 'r') as ofile:
|
||||||
|
serialized = ofile.read()
|
||||||
|
res.append(serialized)
|
||||||
|
|
||||||
|
# then each of the other schemas :)
|
||||||
|
imported_schema: dict[str, SchemaDefinition] = {
|
||||||
|
gen.generate_module_import(sch): sch for sch in gen.schemaview.schema_map.values()
|
||||||
|
}
|
||||||
|
for generated_import in [i for i in rendered.python_imports if i.schema]:
|
||||||
|
import_file = (ns_file.parent / _import_to_path(generated_import.module)).resolve()
|
||||||
|
|
||||||
|
if not import_file.exists() or force:
|
||||||
|
import_file.parent.mkdir(exist_ok=True, parents=True)
|
||||||
|
schema = imported_schema[generated_import.module]
|
||||||
|
is_namespace = False
|
||||||
|
ns_annotation = schema.annotations.get('is_namespace', None)
|
||||||
|
if ns_annotation:
|
||||||
|
is_namespace = ns_annotation.value
|
||||||
|
|
||||||
|
# fix schema source to absolute path so schemaview can find imports
|
||||||
|
schema.source_file = (Path(gen.schemaview.schema.source_file).parent / schema.source_file).resolve()
|
||||||
|
|
||||||
|
import_gen = NWBPydanticGenerator(
|
||||||
|
schema,
|
||||||
|
split=True,
|
||||||
|
split_pattern=self.SPLIT_PATTERN,
|
||||||
|
split_mode=SplitMode.FULL if is_namespace else SplitMode.AUTO
|
||||||
|
)
|
||||||
|
serialized = import_gen.serialize()
|
||||||
|
if dump:
|
||||||
|
with open(import_file, 'w') as ofile:
|
||||||
|
ofile.write(serialized)
|
||||||
|
|
||||||
|
else:
|
||||||
|
with open(import_file, 'r') as ofile:
|
||||||
|
serialized = ofile.read()
|
||||||
|
|
||||||
|
res.append(serialized)
|
||||||
|
|
||||||
|
return res
|
||||||
|
|
||||||
def _make_inits(self, out_file: Path) -> None:
|
def _make_inits(self, out_file: Path) -> None:
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import os
|
import os
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
from typing import List
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
import requests_cache
|
import requests_cache
|
||||||
|
@ -16,6 +17,18 @@ def pytest_addoption(parser):
|
||||||
parser.addoption(
|
parser.addoption(
|
||||||
"--without-cache", action="store_true", help="Don't use a sqlite cache for network requests"
|
"--without-cache", action="store_true", help="Don't use a sqlite cache for network requests"
|
||||||
)
|
)
|
||||||
|
parser.addoption(
|
||||||
|
"--dev", action="store_true", help="run tests that are intended only for development use, eg. those that generate output for inspection"
|
||||||
|
)
|
||||||
|
|
||||||
|
def pytest_collection_modifyitems(config, items: List[pytest.Item]):
|
||||||
|
# remove dev tests from collection if we're not in dev mode!
|
||||||
|
if config.getoption('--dev'):
|
||||||
|
remove_tests = [t for t in items if not t.get_closest_marker('dev')]
|
||||||
|
else:
|
||||||
|
remove_tests = [t for t in items if t.get_closest_marker('dev')]
|
||||||
|
for t in remove_tests:
|
||||||
|
items.remove(t)
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(autouse=True, scope="session")
|
@pytest.fixture(autouse=True, scope="session")
|
||||||
|
@ -43,3 +56,4 @@ def patch_requests_cache(pytestconfig):
|
||||||
# delete cache file unless we have requested it to persist for inspection
|
# delete cache file unless we have requested it to persist for inspection
|
||||||
if not pytestconfig.getoption("--with-output"):
|
if not pytestconfig.getoption("--with-output"):
|
||||||
cache_file.unlink(missing_ok=True)
|
cache_file.unlink(missing_ok=True)
|
||||||
|
|
||||||
|
|
|
@ -16,13 +16,14 @@ from linkml_runtime.loaders.yaml_loader import YAMLLoader
|
||||||
|
|
||||||
from nwb_linkml.generators.pydantic import NWBPydanticGenerator
|
from nwb_linkml.generators.pydantic import NWBPydanticGenerator
|
||||||
from nwb_linkml.lang_elements import NwbLangSchema
|
from nwb_linkml.lang_elements import NwbLangSchema
|
||||||
|
from nwb_linkml.providers import LinkMLProvider, PydanticProvider
|
||||||
|
|
||||||
|
@pytest.mark.dev
|
||||||
def test_generate_nwblang(tmp_output_dir):
|
def test_generate_nwblang(tmp_output_dir):
|
||||||
output_file = (tmp_output_dir / NwbLangSchema.name).with_suffix(".yml")
|
output_file = (tmp_output_dir / NwbLangSchema.name).with_suffix(".yml")
|
||||||
yaml_dumper.dump(NwbLangSchema, output_file)
|
yaml_dumper.dump(NwbLangSchema, output_file)
|
||||||
|
|
||||||
|
@pytest.mark.dev
|
||||||
def test_generate_core(nwb_core_fixture, tmp_output_dir):
|
def test_generate_core(nwb_core_fixture, tmp_output_dir):
|
||||||
schemas = nwb_core_fixture.build().schemas
|
schemas = nwb_core_fixture.build().schemas
|
||||||
|
|
||||||
|
@ -42,8 +43,7 @@ def load_schema_files(path: Path) -> Dict[str, SchemaDefinition]:
|
||||||
preloaded_schema[sch.name] = sch
|
preloaded_schema[sch.name] = sch
|
||||||
return preloaded_schema
|
return preloaded_schema
|
||||||
|
|
||||||
|
@pytest.mark.dev
|
||||||
@pytest.mark.xfail()
|
|
||||||
@pytest.mark.depends(on=["test_generate_core"])
|
@pytest.mark.depends(on=["test_generate_core"])
|
||||||
def test_generate_pydantic(tmp_output_dir):
|
def test_generate_pydantic(tmp_output_dir):
|
||||||
|
|
||||||
|
@ -71,3 +71,18 @@ def test_generate_pydantic(tmp_output_dir):
|
||||||
# make __init__.py
|
# make __init__.py
|
||||||
with open(tmp_output_dir / "models" / "__init__.py", "w") as initfile:
|
with open(tmp_output_dir / "models" / "__init__.py", "w") as initfile:
|
||||||
initfile.write("# Autogenerated module indicator")
|
initfile.write("# Autogenerated module indicator")
|
||||||
|
|
||||||
|
@pytest.mark.provider
|
||||||
|
@pytest.mark.dev
|
||||||
|
def test_generate_linkml_provider(tmp_output_dir, nwb_core_fixture):
|
||||||
|
provider = LinkMLProvider(path=tmp_output_dir, verbose=False)
|
||||||
|
|
||||||
|
result = provider.build(nwb_core_fixture)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.provider
|
||||||
|
@pytest.mark.dev
|
||||||
|
def test_generate_pydantic_provider(tmp_output_dir):
|
||||||
|
provider = PydanticProvider(path=tmp_output_dir, verbose=False)
|
||||||
|
result = provider.build('core')
|
Loading…
Reference in a new issue