diff --git a/Makefile b/Makefile index aa4ff85e2a..7ef973e37f 100644 --- a/Makefile +++ b/Makefile @@ -22,6 +22,9 @@ build: up: docker compose -f docker-compose.yaml -f $(docker_config_file) up -d --wait +build-up-live: + docker compose -f docker-compose.yaml -f $(docker_config_file) up --build + down: docker compose -f docker-compose.yaml -f $(docker_config_file) down diff --git a/Pipfile b/Pipfile index 16f5923139..7f146c89b0 100644 --- a/Pipfile +++ b/Pipfile @@ -24,7 +24,6 @@ djangorestframework-simplejwt = "==5.3.1" dry-rest-permissions = "==0.1.10" drf-nested-routers = "==0.94.1" drf-spectacular = "==0.27.2" -"fhir.resources" = "==6.5.0" gunicorn = "==23.0.0" healthy-django = "==0.1.0" jsonschema = "==4.23.0" @@ -33,7 +32,7 @@ newrelic = "==10.0.0" pillow = "==10.4.0" psycopg = { extras = ["c"], version = "==3.2.2" } pycryptodome = "==3.20.0" -pydantic = "==1.10.18" # fix for fhir.resources < 7.0.2 +pydantic = "==2.9.2" pyjwt = "==2.9.0" python-slugify = "==8.0.4" pywebpush = "==2.0.0" @@ -42,6 +41,8 @@ redis-om = "==0.3.1" # > 0.3.1 broken with pydantic < 2 requests = "==2.32.3" sentry-sdk = "==2.14.0" whitenoise = "==6.7.0" +simplejson = "*" +json-fingerprint = "*" [dev-packages] boto3-stubs = { extras = ["s3", "boto3"], version = "==1.35.29" } diff --git a/Pipfile.lock b/Pipfile.lock index dda896d1fc..7b2dc1c4a9 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "82b40d895920ac109f51b1e331c891ba2c9e3ebe5e7feded2cd8cc01bbd948d0" + "sha256": "24b631fac3e4a80db5b48cd19d39525cbb7d9c93664dd7138b76392ee6ebdda3" }, "pipfile-spec": 6, "requires": { @@ -26,100 +26,100 @@ }, "aiohttp": { "hashes": [ - "sha256:10c7932337285a6bfa3a5fe1fd4da90b66ebfd9d0cbd1544402e1202eb9a8c3e", - "sha256:177126e971782769b34933e94fddd1089cef0fe6b82fee8a885e539f5b0f0c6a", - "sha256:1ce46dfb49cfbf9e92818be4b761d4042230b1f0e05ffec0aad15b3eb162b905", - "sha256:1e7a6af57091056a79a35104d6ec29d98ec7f1fb7270ad9c6fff871b678d1ff8", - "sha256:21a72f4a9c69a8567a0aca12042f12bba25d3139fd5dd8eeb9931f4d9e8599cd", - "sha256:21c1925541ca84f7b5e0df361c0a813a7d6a56d3b0030ebd4b220b8d232015f9", - "sha256:21f8225f7dc187018e8433c9326be01477fb2810721e048b33ac49091b19fb4a", - "sha256:22cdeb684d8552490dd2697a5138c4ecb46f844892df437aaf94f7eea99af879", - "sha256:270e653b5a4b557476a1ed40e6b6ce82f331aab669620d7c95c658ef976c9c5e", - "sha256:2df786c96c57cd6b87156ba4c5f166af7b88f3fc05f9d592252fdc83d8615a3c", - "sha256:32710d6b3b6c09c60c794d84ca887a3a2890131c0b02b3cefdcc6709a2260a7c", - "sha256:33a68011a38020ed4ff41ae0dbf4a96a202562ecf2024bdd8f65385f1d07f6ef", - "sha256:365783e1b7c40b59ed4ce2b5a7491bae48f41cd2c30d52647a5b1ee8604c68ad", - "sha256:3a95d2686bc4794d66bd8de654e41b5339fab542b2bca9238aa63ed5f4f2ce82", - "sha256:3b2036479b6b94afaaca7d07b8a68dc0e67b0caf5f6293bb6a5a1825f5923000", - "sha256:3c7f270f4ca92760f98a42c45a58674fff488e23b144ec80b1cc6fa2effed377", - "sha256:3f6d47e392c27206701565c8df4cac6ebed28fdf6dcaea5b1eea7a4631d8e6db", - "sha256:40d2d719c3c36a7a65ed26400e2b45b2d9ed7edf498f4df38b2ae130f25a0d01", - "sha256:4618f0d2bf523043866a9ff8458900d8eb0a6d4018f251dae98e5f1fb699f3a8", - "sha256:471a8c47344b9cc309558b3fcc469bd2c12b49322b4b31eb386c4a2b2d44e44a", - "sha256:4954e6b06dd0be97e1a5751fc606be1f9edbdc553c5d9b57d72406a8fbd17f9d", - "sha256:497a7d20caea8855c5429db3cdb829385467217d7feb86952a6107e033e031b9", - "sha256:4b91f4f62ad39a8a42d511d66269b46cb2fb7dea9564c21ab6c56a642d28bff5", - "sha256:4dbf252ac19860e0ab56cd480d2805498f47c5a2d04f5995d8d8a6effd04b48c", - "sha256:4e10b04542d27e21538e670156e88766543692a0a883f243ba8fad9ddea82e53", - "sha256:5284997e3d88d0dfb874c43e51ae8f4a6f4ca5b90dcf22995035187253d430db", - "sha256:57359785f27394a8bcab0da6dcd46706d087dfebf59a8d0ad2e64a4bc2f6f94f", - "sha256:597128cb7bc5f068181b49a732961f46cb89f85686206289d6ccb5e27cb5fbe2", - "sha256:5aa1a073514cf59c81ad49a4ed9b5d72b2433638cd53160fd2f3a9cfa94718db", - "sha256:680dbcff5adc7f696ccf8bf671d38366a1f620b5616a1d333d0cb33956065395", - "sha256:6984dda9d79064361ab58d03f6c1e793ea845c6cfa89ffe1a7b9bb400dfd56bd", - "sha256:69de056022e7abf69cb9fec795515973cc3eeaff51e3ea8d72a77aa933a91c52", - "sha256:6c7efa6616a95e3bd73b8a69691012d2ef1f95f9ea0189e42f338fae080c2fc6", - "sha256:6d1ad868624f6cea77341ef2877ad4e71f7116834a6cd7ec36ec5c32f94ee6ae", - "sha256:713dff3f87ceec3bde4f3f484861464e722cf7533f9fa6b824ec82bb5a9010a7", - "sha256:71462f8eeca477cbc0c9700a9464e3f75f59068aed5e9d4a521a103692da72dc", - "sha256:7c38cfd355fd86c39b2d54651bd6ed7d63d4fe3b5553f364bae3306e2445f847", - "sha256:8296edd99d0dd9d0eb8b9e25b3b3506eef55c1854e9cc230f0b3f885f680410b", - "sha256:85431c9131a9a0f65260dc7a65c800ca5eae78c4c9931618f18c8e0933a0e0c1", - "sha256:85e4d7bd05d18e4b348441e7584c681eff646e3bf38f68b2626807f3add21aa2", - "sha256:8885ca09d3a9317219c0831276bfe26984b17b2c37b7bf70dd478d17092a4772", - "sha256:8960fabc20bfe4fafb941067cda8e23c8c17c98c121aa31c7bf0cdab11b07842", - "sha256:9443d9ebc5167ce1fbb552faf2d666fb22ef5716a8750be67efd140a7733738c", - "sha256:9721554bfa9e15f6e462da304374c2f1baede3cb06008c36c47fa37ea32f1dc4", - "sha256:98a4eb60e27033dee9593814ca320ee8c199489fbc6b2699d0f710584db7feb7", - "sha256:98fae99d5c2146f254b7806001498e6f9ffb0e330de55a35e72feb7cb2fa399b", - "sha256:9a281cba03bdaa341c70b7551b2256a88d45eead149f48b75a96d41128c240b3", - "sha256:a087c84b4992160ffef7afd98ef24177c8bd4ad61c53607145a8377457385100", - "sha256:a1ba7bc139592339ddeb62c06486d0fa0f4ca61216e14137a40d626c81faf10c", - "sha256:a3081246bab4d419697ee45e555cef5cd1def7ac193dff6f50be761d2e44f194", - "sha256:a72f89aea712c619b2ca32c6f4335c77125ede27530ad9705f4f349357833695", - "sha256:a78ba86d5a08207d1d1ad10b97aed6ea48b374b3f6831d02d0b06545ac0f181e", - "sha256:a961ee6f2cdd1a2be4735333ab284691180d40bad48f97bb598841bfcbfb94ec", - "sha256:ab1546fc8e00676febc81c548a876c7bde32f881b8334b77f84719ab2c7d28dc", - "sha256:ab2d6523575fc98896c80f49ac99e849c0b0e69cc80bf864eed6af2ae728a52b", - "sha256:aff048793d05e1ce05b62e49dccf81fe52719a13f4861530706619506224992b", - "sha256:b1a012677b8e0a39e181e218de47d6741c5922202e3b0b65e412e2ce47c39337", - "sha256:b667e2a03407d79a76c618dc30cedebd48f082d85880d0c9c4ec2faa3e10f43e", - "sha256:b91557ee0893da52794b25660d4f57bb519bcad8b7df301acd3898f7197c5d81", - "sha256:badb51d851358cd7535b647bb67af4854b64f3c85f0d089c737f75504d5910ec", - "sha256:c36074b26f3263879ba8e4dbd33db2b79874a3392f403a70b772701363148b9f", - "sha256:c4916070e12ae140110aa598031876c1bf8676a36a750716ea0aa5bd694aa2e7", - "sha256:c6769d71bfb1ed60321363a9bc05e94dcf05e38295ef41d46ac08919e5b00d19", - "sha256:c887019dbcb4af58a091a45ccf376fffe800b5531b45c1efccda4bedf87747ea", - "sha256:cd9716ef0224fe0d0336997eb242f40619f9f8c5c57e66b525a1ebf9f1d8cebe", - "sha256:ceacea31f8a55cdba02bc72c93eb2e1b77160e91f8abd605969c168502fd71eb", - "sha256:d088ca05381fd409793571d8e34eca06daf41c8c50a05aeed358d2d340c7af81", - "sha256:d3a79200a9d5e621c4623081ddb25380b713c8cf5233cd11c1aabad990bb9381", - "sha256:d82404a0e7b10e0d7f022cf44031b78af8a4f99bd01561ac68f7c24772fed021", - "sha256:d95ae4420669c871667aad92ba8cce6251d61d79c1a38504621094143f94a8b4", - "sha256:da57af0c54a302b7c655fa1ccd5b1817a53739afa39924ef1816e7b7c8a07ccb", - "sha256:ddb9b9764cfb4459acf01c02d2a59d3e5066b06a846a364fd1749aa168efa2be", - "sha256:de23085cf90911600ace512e909114385026b16324fa203cc74c81f21fd3276a", - "sha256:e1f0f7b27171b2956a27bd8f899751d0866ddabdd05cbddf3520f945130a908c", - "sha256:e32148b4a745e70a255a1d44b5664de1f2e24fcefb98a75b60c83b9e260ddb5b", - "sha256:e45fdfcb2d5bcad83373e4808825b7512953146d147488114575780640665027", - "sha256:e56bb7e31c4bc79956b866163170bc89fd619e0581ce813330d4ea46921a4881", - "sha256:e860985f30f3a015979e63e7ba1a391526cdac1b22b7b332579df7867848e255", - "sha256:ee3587506898d4a404b33bd19689286ccf226c3d44d7a73670c8498cd688e42c", - "sha256:ee97c4e54f457c366e1f76fbbf3e8effee9de57dae671084a161c00f481106ce", - "sha256:ef9b484604af05ca745b6108ca1aaa22ae1919037ae4f93aaf9a37ba42e0b835", - "sha256:f21e8f2abed9a44afc3d15bba22e0dfc71e5fa859bea916e42354c16102b036f", - "sha256:f23a6c1d09de5de89a33c9e9b229106cb70dcfdd55e81a3a3580eaadaa32bc92", - "sha256:f5d5d5401744dda50b943d8764508d0e60cc2d3305ac1e6420935861a9d544bc", - "sha256:f78e2a78432c537ae876a93013b7bc0027ba5b93ad7b3463624c4b6906489332", - "sha256:f8179855a4e4f3b931cb1764ec87673d3fbdcca2af496c8d30567d7b034a13db", - "sha256:fc0e7f91705445d79beafba9bb3057dd50830e40fe5417017a76a214af54e122", - "sha256:fe285a697c851734285369614443451462ce78aac2b77db23567507484b1dc6f", - "sha256:fe3d79d6af839ffa46fdc5d2cf34295390894471e9875050eafa584cb781508d", - "sha256:fecd55e7418fabd297fd836e65cbd6371aa4035a264998a091bbf13f94d9c44d", - "sha256:ffef3d763e4c8fc97e740da5b4d0f080b78630a3914f4e772a122bbfa608c1db" - ], - "markers": "python_version >= '3.8'", - "version": "==3.10.8" + "sha256:0316e624b754dbbf8c872b62fe6dcb395ef20c70e59890dfa0de9eafccd2849d", + "sha256:099fd126bf960f96d34a760e747a629c27fb3634da5d05c7ef4d35ef4ea519fc", + "sha256:0acafb350cfb2eba70eb5d271f55e08bd4502ec35e964e18ad3e7d34d71f7261", + "sha256:0c5580f3c51eea91559db3facd45d72e7ec970b04528b4709b1f9c2555bd6d0b", + "sha256:0f449a50cc33f0384f633894d8d3cd020e3ccef81879c6e6245c3c375c448625", + "sha256:14cdc8c1810bbd4b4b9f142eeee23cda528ae4e57ea0923551a9af4820980e39", + "sha256:1dc0f4ca54842173d03322793ebcf2c8cc2d34ae91cc762478e295d8e361e03f", + "sha256:1e7b825da878464a252ccff2958838f9caa82f32a8dbc334eb9b34a026e2c636", + "sha256:20063c7acf1eec550c8eb098deb5ed9e1bb0521613b03bb93644b810986027ac", + "sha256:20b3d9e416774d41813bc02fdc0663379c01817b0874b932b81c7f777f67b217", + "sha256:22b7c540c55909140f63ab4f54ec2c20d2635c0289cdd8006da46f3327f971b9", + "sha256:236b28ceb79532da85d59aa9b9bf873b364e27a0acb2ceaba475dc61cffb6f3f", + "sha256:249c8ff8d26a8b41a0f12f9df804e7c685ca35a207e2410adbd3e924217b9006", + "sha256:25fd5470922091b5a9aeeb7e75be609e16b4fba81cdeaf12981393fb240dd10e", + "sha256:29103f9099b6068bbdf44d6a3d090e0a0b2be6d3c9f16a070dd9d0d910ec08f9", + "sha256:2b943011b45ee6bf74b22245c6faab736363678e910504dd7531a58c76c9015a", + "sha256:2c8f96e9ee19f04c4914e4e7a42a60861066d3e1abf05c726f38d9d0a466e695", + "sha256:2dfb612dcbe70fb7cdcf3499e8d483079b89749c857a8f6e80263b021745c730", + "sha256:2e4e18a0a2d03531edbc06c366954e40a3f8d2a88d2b936bbe78a0c75a3aab3e", + "sha256:2ea224cf7bc2d8856d6971cea73b1d50c9c51d36971faf1abc169a0d5f85a382", + "sha256:30283f9d0ce420363c24c5c2421e71a738a2155f10adbb1a11a4d4d6d2715cfc", + "sha256:38e3c4f80196b4f6c3a85d134a534a56f52da9cb8d8e7af1b79a32eefee73a00", + "sha256:3bf6d027d9d1d34e1c2e1645f18a6498c98d634f8e373395221121f1c258ace8", + "sha256:459f0f32c8356e8125f45eeff0ecf2b1cb6db1551304972702f34cd9e6c44658", + "sha256:473aebc3b871646e1940c05268d451f2543a1d209f47035b594b9d4e91ce8339", + "sha256:489cced07a4c11488f47aab1f00d0c572506883f877af100a38f1fedaa884c3a", + "sha256:48bc1d924490f0d0b3658fe5c4b081a4d56ebb58af80a6729d4bd13ea569797a", + "sha256:4996ff1345704ffdd6d75fb06ed175938c133425af616142e7187f28dc75f14e", + "sha256:4e8d8aad9402d3aa02fdc5ca2fe68bcb9fdfe1f77b40b10410a94c7f408b664d", + "sha256:5077b1a5f40ffa3ba1f40d537d3bec4383988ee51fbba6b74aa8fb1bc466599e", + "sha256:5a5f7ab8baf13314e6b2485965cbacb94afff1e93466ac4d06a47a81c50f9cca", + "sha256:5ab2328a61fdc86424ee540d0aeb8b73bbcad7351fb7cf7a6546fc0bcffa0038", + "sha256:5f0463bf8b0754bc744e1feb61590706823795041e63edf30118a6f0bf577461", + "sha256:686b03196976e327412a1b094f4120778c7c4b9cff9bce8d2fdfeca386b89829", + "sha256:6cd3f10b01f0c31481fba8d302b61603a2acb37b9d30e1d14e0f5a58b7b18a31", + "sha256:6ce66780fa1a20e45bc753cda2a149daa6dbf1561fc1289fa0c308391c7bc0a4", + "sha256:703938e22434d7d14ec22f9f310559331f455018389222eed132808cd8f44127", + "sha256:72b191cdf35a518bfc7ca87d770d30941decc5aaf897ec8b484eb5cc8c7706f3", + "sha256:7400a93d629a0608dc1d6c55f1e3d6e07f7375745aaa8bd7f085571e4d1cee97", + "sha256:7480519f70e32bfb101d71fb9a1f330fbd291655a4c1c922232a48c458c52710", + "sha256:74baf1a7d948b3d640badeac333af581a367ab916b37e44cf90a0334157cdfd2", + "sha256:778cbd01f18ff78b5dd23c77eb82987ee4ba23408cbed233009fd570dda7e674", + "sha256:7b26b1551e481012575dab8e3727b16fe7dd27eb2711d2e63ced7368756268fb", + "sha256:7ce6a51469bfaacff146e59e7fb61c9c23006495d11cc24c514a455032bcfa03", + "sha256:80ff08556c7f59a7972b1e8919f62e9c069c33566a6d28586771711e0eea4f07", + "sha256:82052be3e6d9e0c123499127782a01a2b224b8af8c62ab46b3f6197035ad94e9", + "sha256:8663f7777ce775f0413324be0d96d9730959b2ca73d9b7e2c2c90539139cbdd6", + "sha256:878ca6a931ee8c486a8f7b432b65431d095c522cbeb34892bee5be97b3481d0f", + "sha256:8d6a14a4d93b5b3c2891fca94fa9d41b2322a68194422bef0dd5ec1e57d7d298", + "sha256:9208299251370ee815473270c52cd3f7069ee9ed348d941d574d1457d2c73e8b", + "sha256:968b8fb2a5eee2770eda9c7b5581587ef9b96fbdf8dcabc6b446d35ccc69df01", + "sha256:971aa438a29701d4b34e4943e91b5e984c3ae6ccbf80dd9efaffb01bd0b243a9", + "sha256:9a309c5de392dfe0f32ee57fa43ed8fc6ddf9985425e84bd51ed66bb16bce3a7", + "sha256:9bc50b63648840854e00084c2b43035a62e033cb9b06d8c22b409d56eb098413", + "sha256:9c6e0ffd52c929f985c7258f83185d17c76d4275ad22e90aa29f38e211aacbec", + "sha256:9dc2b8f3dcab2e39e0fa309c8da50c3b55e6f34ab25f1a71d3288f24924d33a7", + "sha256:9ec1628180241d906a0840b38f162a3215114b14541f1a8711c368a8739a9be4", + "sha256:a919c8957695ea4c0e7a3e8d16494e3477b86f33067478f43106921c2fef15bb", + "sha256:aa93063d4af05c49276cf14e419550a3f45258b6b9d1f16403e777f1addf4519", + "sha256:aad3cd91d484d065ede16f3cf15408254e2469e3f613b241a1db552c5eb7ab7d", + "sha256:b3e70f24e7d0405be2348da9d5a7836936bf3a9b4fd210f8c37e8d48bc32eca6", + "sha256:b5e29706e6389a2283a91611c91bf24f218962717c8f3b4e528ef529d112ee27", + "sha256:bbde2ca67230923a42161b1f408c3992ae6e0be782dca0c44cb3206bf330dee1", + "sha256:bc6f1ab987a27b83c5268a17218463c2ec08dbb754195113867a27b166cd6087", + "sha256:bcaf2d79104d53d4dcf934f7ce76d3d155302d07dae24dff6c9fffd217568067", + "sha256:c13ed0c779911c7998a58e7848954bd4d63df3e3575f591e321b19a2aec8df9f", + "sha256:c2f746a6968c54ab2186574e15c3f14f3e7f67aef12b761e043b33b89c5b5f95", + "sha256:c73c4d3dae0b4644bc21e3de546530531d6cdc88659cdeb6579cd627d3c206aa", + "sha256:c891011e76041e6508cbfc469dd1a8ea09bc24e87e4c204e05f150c4c455a5fa", + "sha256:ca117819d8ad113413016cb29774b3f6d99ad23c220069789fc050267b786c16", + "sha256:cdc493a2e5d8dc79b2df5bec9558425bcd39aff59fc949810cbd0832e294b106", + "sha256:d110cabad8360ffa0dec8f6ec60e43286e9d251e77db4763a87dcfe55b4adb92", + "sha256:d97187de3c276263db3564bb9d9fad9e15b51ea10a371ffa5947a5ba93ad6777", + "sha256:db9503f79e12d5d80b3efd4d01312853565c05367493379df76d2674af881caa", + "sha256:deef4362af9493d1382ef86732ee2e4cbc0d7c005947bd54ad1a9a16dd59298e", + "sha256:e0099c7d5d7afff4202a0c670e5b723f7718810000b4abcbc96b064129e64bc7", + "sha256:e12eb3f4b1f72aaaf6acd27d045753b18101524f72ae071ae1c91c1cd44ef115", + "sha256:e1ffa713d3ea7cdcd4aea9cddccab41edf6882fa9552940344c44e59652e1120", + "sha256:e5358addc8044ee49143c546d2182c15b4ac3a60be01c3209374ace05af5733d", + "sha256:ea9b3bab329aeaa603ed3bf605f1e2a6f36496ad7e0e1aa42025f368ee2dc07b", + "sha256:f14ebc419a568c2eff3c1ed35f634435c24ead2fe19c07426af41e7adb68713a", + "sha256:f34b97e4b11b8d4eb2c3a4f975be626cc8af99ff479da7de49ac2c6d02d35725", + "sha256:f4df4b8ca97f658c880fb4b90b1d1ec528315d4030af1ec763247ebfd33d8b9a", + "sha256:f65267266c9aeb2287a6622ee2bb39490292552f9fbf851baabc04c9f84e048d", + "sha256:f6c6dec398ac5a87cb3a407b068e1106b20ef001c344e34154616183fe684288", + "sha256:f9b615d3da0d60e7d53c62e22b4fd1c70f4ae5993a44687b011ea3a2e49051b8", + "sha256:f9f92a344c50b9667827da308473005f34767b6a2a60d9acff56ae94f895f385", + "sha256:fb8601394d537da9221947b5d6e62b064c9a43e88a1ecd7414d21a1a6fba9c24", + "sha256:fc31820cfc3b2863c6e95e14fcf815dc7afe52480b4dc03393c4873bb5599f71", + "sha256:fdf6429f0caabfd8a30c4e2eaecb547b3c340e4730ebfe25139779b9815ba138", + "sha256:ffbfde2443696345e23a3c597049b1dd43049bb65337837574205e7368472177" + ], + "markers": "python_version >= '3.8'", + "version": "==3.10.11" }, "aiosignal": { "hashes": [ @@ -131,11 +131,19 @@ }, "amqp": { "hashes": [ - "sha256:827cb12fb0baa892aad844fd95258143bce4027fdac4fccddbc43330fd281637", - "sha256:a1ecff425ad063ad42a486c902807d1482311481c8ad95a72694b2975e75f7fd" + "sha256:43b3319e1b4e7d1251833a93d672b4af1e40f3d632d479b98661a95f117880a2", + "sha256:cddc00c725449522023bad949f70fff7b48f0b1ade74d170a6f10ab044739432" ], "markers": "python_version >= '3.6'", - "version": "==5.2.0" + "version": "==5.3.1" + }, + "annotated-types": { + "hashes": [ + "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", + "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89" + ], + "markers": "python_version >= '3.8'", + "version": "==0.7.0" }, "argon2-cffi": { "hashes": [ @@ -217,11 +225,11 @@ }, "botocore": { "hashes": [ - "sha256:4cee814875bc78656aef4011d3d6b2231e96f53ea3661ee428201afb579d5c31", - "sha256:f7bfa910cf2cbcc8c2307c1cf7b93495d614c2d699883417893e0a337fe4eb63" + "sha256:bcd66d7f55c8d1b6020eb86f2d87893fe591fb4be6a7d2a689c18be586452334", + "sha256:de0ce655fedfc02c87869dfaa3b622488a17ff37da316ef8106cbe1573b83c98" ], "markers": "python_version >= '3.8'", - "version": "==1.35.31" + "version": "==1.35.59" }, "celery": { "hashes": [ @@ -315,99 +323,114 @@ }, "charset-normalizer": { "hashes": [ - "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027", - "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087", - "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786", - "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8", - "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09", - "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185", - "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574", - "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e", - "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519", - "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898", - "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269", - "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3", - "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f", - "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6", - "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8", - "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a", - "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73", - "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc", - "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714", - "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2", - "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc", - "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce", - "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d", - "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e", - "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6", - "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269", - "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96", - "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d", - "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a", - "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4", - "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77", - "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d", - "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0", - "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed", - "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068", - "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac", - "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25", - "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8", - "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab", - "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26", - "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2", - "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db", - "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f", - "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5", - "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99", - "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c", - "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d", - "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811", - "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa", - "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a", - "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03", - "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b", - "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04", - "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c", - "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001", - "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458", - "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389", - "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99", - "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985", - "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537", - "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238", - "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f", - "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d", - "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796", - "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a", - "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143", - "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8", - "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c", - "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5", - "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5", - "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711", - "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4", - "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6", - "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c", - "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7", - "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4", - "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b", - "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae", - "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12", - "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c", - "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae", - "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8", - "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887", - "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b", - "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4", - "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f", - "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5", - "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33", - "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519", - "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561" + "sha256:0099d79bdfcf5c1f0c2c72f91516702ebf8b0b8ddd8905f97a8aecf49712c621", + "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6", + "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8", + "sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912", + "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c", + "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b", + "sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d", + "sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d", + "sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95", + "sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e", + "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565", + "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64", + "sha256:2006769bd1640bdf4d5641c69a3d63b71b81445473cac5ded39740a226fa88ab", + "sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be", + "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e", + "sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907", + "sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0", + "sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2", + "sha256:2f6c34da58ea9c1a9515621f4d9ac379871a8f21168ba1b5e09d74250de5ad62", + "sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62", + "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23", + "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc", + "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284", + "sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca", + "sha256:425c5f215d0eecee9a56cdb703203dda90423247421bf0d67125add85d0c4455", + "sha256:43193c5cda5d612f247172016c4bb71251c784d7a4d9314677186a838ad34858", + "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b", + "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594", + "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc", + "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db", + "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b", + "sha256:4ec9dd88a5b71abfc74e9df5ebe7921c35cbb3b641181a531ca65cdb5e8e4dea", + "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6", + "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920", + "sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749", + "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7", + "sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd", + "sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99", + "sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242", + "sha256:62f60aebecfc7f4b82e3f639a7d1433a20ec32824db2199a11ad4f5e146ef5ee", + "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129", + "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2", + "sha256:6b493a043635eb376e50eedf7818f2f322eabbaa974e948bd8bdd29eb7ef2a51", + "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee", + "sha256:6fd30dc99682dc2c603c2b315bded2799019cea829f8bf57dc6b61efde6611c8", + "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b", + "sha256:7706f5850360ac01d80c89bcef1640683cc12ed87f42579dab6c5d3ed6888613", + "sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742", + "sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe", + "sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3", + "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5", + "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631", + "sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7", + "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15", + "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c", + "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea", + "sha256:9289fd5dddcf57bab41d044f1756550f9e7cf0c8e373b8cdf0ce8773dc4bd417", + "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250", + "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88", + "sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca", + "sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa", + "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99", + "sha256:9c98230f5042f4945f957d006edccc2af1e03ed5e37ce7c373f00a5a4daa6149", + "sha256:9fa2566ca27d67c86569e8c85297aaf413ffab85a8960500f12ea34ff98e4c41", + "sha256:a14969b8691f7998e74663b77b4c36c0337cb1df552da83d5c9004a93afdb574", + "sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0", + "sha256:a8e538f46104c815be19c975572d74afb53f29650ea2025bbfaef359d2de2f7f", + "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d", + "sha256:aa693779a8b50cd97570e5a0f343538a8dbd3e496fa5dcb87e29406ad0299654", + "sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3", + "sha256:ab2e5bef076f5a235c3774b4f4028a680432cded7cad37bba0fd90d64b187d19", + "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90", + "sha256:af73657b7a68211996527dbfeffbb0864e043d270580c5aef06dc4b659a4b578", + "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9", + "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1", + "sha256:b8831399554b92b72af5932cdbbd4ddc55c55f631bb13ff8fe4e6536a06c5c51", + "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719", + "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236", + "sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a", + "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c", + "sha256:c3e446d253bd88f6377260d07c895816ebf33ffffd56c1c792b13bff9c3e1ade", + "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944", + "sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc", + "sha256:cab5d0b79d987c67f3b9e9c53f54a61360422a5a0bc075f43cab5621d530c3b6", + "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6", + "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27", + "sha256:d5b054862739d276e09928de37c79ddeec42a6e1bfc55863be96a36ba22926f6", + "sha256:dbe03226baf438ac4fda9e2d0715022fd579cb641c4cf639fa40d53b2fe6f3e2", + "sha256:dc15e99b2d8a656f8e666854404f1ba54765871104e50c8e9813af8a7db07f12", + "sha256:dcaf7c1524c0542ee2fc82cc8ec337f7a9f7edee2532421ab200d2b920fc97cf", + "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114", + "sha256:dd9a8bd8900e65504a305bf8ae6fa9fbc66de94178c420791d0293702fce2df7", + "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf", + "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d", + "sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b", + "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed", + "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03", + "sha256:f09cb5a7bbe1ecae6e87901a2eb23e0256bb524a79ccc53eb0b7629fbe7677c4", + "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67", + "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365", + "sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a", + "sha256:f3e73a4255342d4eb26ef6df01e3962e73aa29baa3124a8e824c5d3364a65748", + "sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b", + "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079", + "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482" ], "markers": "python_full_version >= '3.7.0'", - "version": "==3.3.2" + "version": "==3.4.0" }, "click": { "hashes": [ @@ -442,36 +465,36 @@ }, "cryptography": { "hashes": [ - "sha256:014f58110f53237ace6a408b5beb6c427b64e084eb451ef25a28308270086494", - "sha256:1bbcce1a551e262dfbafb6e6252f1ae36a248e615ca44ba302df077a846a8806", - "sha256:203e92a75716d8cfb491dc47c79e17d0d9207ccffcbcb35f598fbe463ae3444d", - "sha256:27e613d7077ac613e399270253259d9d53872aaf657471473ebfc9a52935c062", - "sha256:2bd51274dcd59f09dd952afb696bf9c61a7a49dfc764c04dd33ef7a6b502a1e2", - "sha256:38926c50cff6f533f8a2dae3d7f19541432610d114a70808f0926d5aaa7121e4", - "sha256:511f4273808ab590912a93ddb4e3914dfd8a388fed883361b02dea3791f292e1", - "sha256:58d4e9129985185a06d849aa6df265bdd5a74ca6e1b736a77959b498e0505b85", - "sha256:5b43d1ea6b378b54a1dc99dd8a2b5be47658fe9a7ce0a58ff0b55f4b43ef2b84", - "sha256:61ec41068b7b74268fa86e3e9e12b9f0c21fcf65434571dbb13d954bceb08042", - "sha256:666ae11966643886c2987b3b721899d250855718d6d9ce41b521252a17985f4d", - "sha256:68aaecc4178e90719e95298515979814bda0cbada1256a4485414860bd7ab962", - "sha256:7c05650fe8023c5ed0d46793d4b7d7e6cd9c04e68eabe5b0aeea836e37bdcec2", - "sha256:80eda8b3e173f0f247f711eef62be51b599b5d425c429b5d4ca6a05e9e856baa", - "sha256:8385d98f6a3bf8bb2d65a73e17ed87a3ba84f6991c155691c51112075f9ffc5d", - "sha256:88cce104c36870d70c49c7c8fd22885875d950d9ee6ab54df2745f83ba0dc365", - "sha256:9d3cdb25fa98afdd3d0892d132b8d7139e2c087da1712041f6b762e4f807cc96", - "sha256:a575913fb06e05e6b4b814d7f7468c2c660e8bb16d8d5a1faf9b33ccc569dd47", - "sha256:ac119bb76b9faa00f48128b7f5679e1d8d437365c5d26f1c2c3f0da4ce1b553d", - "sha256:c1332724be35d23a854994ff0b66530119500b6053d0bd3363265f7e5e77288d", - "sha256:d03a475165f3134f773d1388aeb19c2d25ba88b6a9733c5c590b9ff7bbfa2e0c", - "sha256:d75601ad10b059ec832e78823b348bfa1a59f6b8d545db3a24fd44362a1564cb", - "sha256:de41fd81a41e53267cb020bb3a7212861da53a7d39f863585d13ea11049cf277", - "sha256:e710bf40870f4db63c3d7d929aa9e09e4e7ee219e703f949ec4073b4294f6172", - "sha256:ea25acb556320250756e53f9e20a4177515f012c9eaea17eb7587a8c4d8ae034", - "sha256:f98bf604c82c416bc829e490c700ca1553eafdf2912a91e23a79d97d9801372a", - "sha256:fba1007b3ef89946dbbb515aeeb41e30203b004f0b4b00e5e16078b518563289" + "sha256:0c580952eef9bf68c4747774cde7ec1d85a6e61de97281f2dba83c7d2c806362", + "sha256:0f996e7268af62598f2fc1204afa98a3b5712313a55c4c9d434aef49cadc91d4", + "sha256:1ec0bcf7e17c0c5669d881b1cd38c4972fade441b27bda1051665faaa89bdcaa", + "sha256:281c945d0e28c92ca5e5930664c1cefd85efe80e5c0d2bc58dd63383fda29f83", + "sha256:2ce6fae5bdad59577b44e4dfed356944fbf1d925269114c28be377692643b4ff", + "sha256:315b9001266a492a6ff443b61238f956b214dbec9910a081ba5b6646a055a805", + "sha256:443c4a81bb10daed9a8f334365fe52542771f25aedaf889fd323a853ce7377d6", + "sha256:4a02ded6cd4f0a5562a8887df8b3bd14e822a90f97ac5e544c162899bc467664", + "sha256:53a583b6637ab4c4e3591a15bc9db855b8d9dee9a669b550f311480acab6eb08", + "sha256:63efa177ff54aec6e1c0aefaa1a241232dcd37413835a9b674b6e3f0ae2bfd3e", + "sha256:74f57f24754fe349223792466a709f8e0c093205ff0dca557af51072ff47ab18", + "sha256:7e1ce50266f4f70bf41a2c6dc4358afadae90e2a1e5342d3c08883df1675374f", + "sha256:81ef806b1fef6b06dcebad789f988d3b37ccaee225695cf3e07648eee0fc6b73", + "sha256:846da004a5804145a5f441b8530b4bf35afbf7da70f82409f151695b127213d5", + "sha256:8ac43ae87929a5982f5948ceda07001ee5e83227fd69cf55b109144938d96984", + "sha256:9762ea51a8fc2a88b70cf2995e5675b38d93bf36bd67d91721c309df184f49bd", + "sha256:a2a431ee15799d6db9fe80c82b055bae5a752bef645bba795e8e52687c69efe3", + "sha256:bf7a1932ac4176486eab36a19ed4c0492da5d97123f1406cf15e41b05e787d2e", + "sha256:c2e6fc39c4ab499049df3bdf567f768a723a5e8464816e8f009f121a5a9f4405", + "sha256:cbeb489927bd7af4aa98d4b261af9a5bc025bd87f0e3547e11584be9e9427be2", + "sha256:d03b5621a135bffecad2c73e9f4deb1a0f977b9a8ffe6f8e002bf6c9d07b918c", + "sha256:d56e96520b1020449bbace2b78b603442e7e378a9b3bd68de65c782db1507995", + "sha256:df6b6c6d742395dd77a23ea3728ab62f98379eff8fb61be2744d4679ab678f73", + "sha256:e1be4655c7ef6e1bbe6b5d0403526601323420bcf414598955968c9ef3eb7d16", + "sha256:f18c716be16bc1fea8e95def49edf46b82fccaa88587a45f8dc0ff6ab5d8e0a7", + "sha256:f46304d6f0c6ab8e52770addfa2fc41e6629495548862279641972b6215451cd", + "sha256:f7b178f11ed3664fd0e995a47ed2b5ff0a12d893e41dd0494f406d1cf555cab7" ], "markers": "python_version >= '3.7'", - "version": "==43.0.1" + "version": "==43.0.3" }, "django": { "hashes": [ @@ -584,14 +607,6 @@ "markers": "python_version >= '3.8'", "version": "==5.3.1" }, - "dnspython": { - "hashes": [ - "sha256:5ef3b9680161f6fa89daf8ad451b5f1a33b18ae8a1c6778cdf4b43f08c0a6e50", - "sha256:e8f0f9c23a7b7cb99ded64e6c3a6f3e701d78f50c55e002b839dea7225cff7cc" - ], - "markers": "python_version >= '3.8'", - "version": "==2.6.1" - }, "drf-nested-routers": { "hashes": [ "sha256:2b846385ed95c9f17bf4242db3b264ac826b5af00dda6c737d3fe7cc7bf2c7db", @@ -618,103 +633,103 @@ "index": "pypi", "version": "==0.1.10" }, - "email-validator": { - "hashes": [ - "sha256:561977c2d73ce3611850a06fa56b414621e0c8faa9d66f2611407d87465da631", - "sha256:cb690f344c617a714f22e66ae771445a1ceb46821152df8e165c5f9a364582b7" - ], - "version": "==2.2.0" - }, - "fhir.resources": { - "hashes": [ - "sha256:1d02ff2547e5b6323543c8ce9916e0c9e5536847b3b2171acb1f51a86efba16e", - "sha256:515a6cb3eadc61597fec0cb273b1ff943f76f44d2c8efefa5218f001087a95d3" - ], - "markers": "python_version >= '3.6'", - "version": "==6.5.0" - }, "frozenlist": { "hashes": [ - "sha256:04ced3e6a46b4cfffe20f9ae482818e34eba9b5fb0ce4056e4cc9b6e212d09b7", - "sha256:0633c8d5337cb5c77acbccc6357ac49a1770b8c487e5b3505c57b949b4b82e98", - "sha256:068b63f23b17df8569b7fdca5517edef76171cf3897eb68beb01341131fbd2ad", - "sha256:0c250a29735d4f15321007fb02865f0e6b6a41a6b88f1f523ca1596ab5f50bd5", - "sha256:1979bc0aeb89b33b588c51c54ab0161791149f2461ea7c7c946d95d5f93b56ae", - "sha256:1a4471094e146b6790f61b98616ab8e44f72661879cc63fa1049d13ef711e71e", - "sha256:1b280e6507ea8a4fa0c0a7150b4e526a8d113989e28eaaef946cc77ffd7efc0a", - "sha256:1d0ce09d36d53bbbe566fe296965b23b961764c0bcf3ce2fa45f463745c04701", - "sha256:20b51fa3f588ff2fe658663db52a41a4f7aa6c04f6201449c6c7c476bd255c0d", - "sha256:23b2d7679b73fe0e5a4560b672a39f98dfc6f60df63823b0a9970525325b95f6", - "sha256:23b701e65c7b36e4bf15546a89279bd4d8675faabc287d06bbcfac7d3c33e1e6", - "sha256:2471c201b70d58a0f0c1f91261542a03d9a5e088ed3dc6c160d614c01649c106", - "sha256:27657df69e8801be6c3638054e202a135c7f299267f1a55ed3a598934f6c0d75", - "sha256:29acab3f66f0f24674b7dc4736477bcd4bc3ad4b896f5f45379a67bce8b96868", - "sha256:32453c1de775c889eb4e22f1197fe3bdfe457d16476ea407472b9442e6295f7a", - "sha256:3a670dc61eb0d0eb7080890c13de3066790f9049b47b0de04007090807c776b0", - "sha256:3e0153a805a98f5ada7e09826255ba99fb4f7524bb81bf6b47fb702666484ae1", - "sha256:410478a0c562d1a5bcc2f7ea448359fcb050ed48b3c6f6f4f18c313a9bdb1826", - "sha256:442acde1e068288a4ba7acfe05f5f343e19fac87bfc96d89eb886b0363e977ec", - "sha256:48f6a4533887e189dae092f1cf981f2e3885175f7a0f33c91fb5b7b682b6bab6", - "sha256:4f57dab5fe3407b6c0c1cc907ac98e8a189f9e418f3b6e54d65a718aaafe3950", - "sha256:4f9c515e7914626b2a2e1e311794b4c35720a0be87af52b79ff8e1429fc25f19", - "sha256:55fdc093b5a3cb41d420884cdaf37a1e74c3c37a31f46e66286d9145d2063bd0", - "sha256:5667ed53d68d91920defdf4035d1cdaa3c3121dc0b113255124bcfada1cfa1b8", - "sha256:590344787a90ae57d62511dd7c736ed56b428f04cd8c161fcc5e7232c130c69a", - "sha256:5a7d70357e7cee13f470c7883a063aae5fe209a493c57d86eb7f5a6f910fae09", - "sha256:5c3894db91f5a489fc8fa6a9991820f368f0b3cbdb9cd8849547ccfab3392d86", - "sha256:5c849d495bf5154cd8da18a9eb15db127d4dba2968d88831aff6f0331ea9bd4c", - "sha256:64536573d0a2cb6e625cf309984e2d873979709f2cf22839bf2d61790b448ad5", - "sha256:693945278a31f2086d9bf3df0fe8254bbeaef1fe71e1351c3bd730aa7d31c41b", - "sha256:6db4667b187a6742b33afbbaf05a7bc551ffcf1ced0000a571aedbb4aa42fc7b", - "sha256:6eb73fa5426ea69ee0e012fb59cdc76a15b1283d6e32e4f8dc4482ec67d1194d", - "sha256:722e1124aec435320ae01ee3ac7bec11a5d47f25d0ed6328f2273d287bc3abb0", - "sha256:7268252af60904bf52c26173cbadc3a071cece75f873705419c8681f24d3edea", - "sha256:74fb4bee6880b529a0c6560885fce4dc95936920f9f20f53d99a213f7bf66776", - "sha256:780d3a35680ced9ce682fbcf4cb9c2bad3136eeff760ab33707b71db84664e3a", - "sha256:82e8211d69a4f4bc360ea22cd6555f8e61a1bd211d1d5d39d3d228b48c83a897", - "sha256:89aa2c2eeb20957be2d950b85974b30a01a762f3308cd02bb15e1ad632e22dc7", - "sha256:8aefbba5f69d42246543407ed2461db31006b0f76c4e32dfd6f42215a2c41d09", - "sha256:96ec70beabbd3b10e8bfe52616a13561e58fe84c0101dd031dc78f250d5128b9", - "sha256:9750cc7fe1ae3b1611bb8cfc3f9ec11d532244235d75901fb6b8e42ce9229dfe", - "sha256:9acbb16f06fe7f52f441bb6f413ebae6c37baa6ef9edd49cdd567216da8600cd", - "sha256:9d3e0c25a2350080e9319724dede4f31f43a6c9779be48021a7f4ebde8b2d742", - "sha256:a06339f38e9ed3a64e4c4e43aec7f59084033647f908e4259d279a52d3757d09", - "sha256:a0cb6f11204443f27a1628b0e460f37fb30f624be6051d490fa7d7e26d4af3d0", - "sha256:a7496bfe1da7fb1a4e1cc23bb67c58fab69311cc7d32b5a99c2007b4b2a0e932", - "sha256:a828c57f00f729620a442881cc60e57cfcec6842ba38e1b19fd3e47ac0ff8dc1", - "sha256:a9b2de4cf0cdd5bd2dee4c4f63a653c61d2408055ab77b151c1957f221cabf2a", - "sha256:b46c8ae3a8f1f41a0d2ef350c0b6e65822d80772fe46b653ab6b6274f61d4a49", - "sha256:b7e3ed87d4138356775346e6845cccbe66cd9e207f3cd11d2f0b9fd13681359d", - "sha256:b7f2f9f912dca3934c1baec2e4585a674ef16fe00218d833856408c48d5beee7", - "sha256:ba60bb19387e13597fb059f32cd4d59445d7b18b69a745b8f8e5db0346f33480", - "sha256:beee944ae828747fd7cb216a70f120767fc9f4f00bacae8543c14a6831673f89", - "sha256:bfa4a17e17ce9abf47a74ae02f32d014c5e9404b6d9ac7f729e01562bbee601e", - "sha256:c037a86e8513059a2613aaba4d817bb90b9d9b6b69aace3ce9c877e8c8ed402b", - "sha256:c302220494f5c1ebeb0912ea782bcd5e2f8308037b3c7553fad0e48ebad6ad82", - "sha256:c6321c9efe29975232da3bd0af0ad216800a47e93d763ce64f291917a381b8eb", - "sha256:c757a9dd70d72b076d6f68efdbb9bc943665ae954dad2801b874c8c69e185068", - "sha256:c99169d4ff810155ca50b4da3b075cbde79752443117d89429595c2e8e37fed8", - "sha256:c9c92be9fd329ac801cc420e08452b70e7aeab94ea4233a4804f0915c14eba9b", - "sha256:cc7b01b3754ea68a62bd77ce6020afaffb44a590c2289089289363472d13aedb", - "sha256:db9e724bebd621d9beca794f2a4ff1d26eed5965b004a97f1f1685a173b869c2", - "sha256:dca69045298ce5c11fd539682cff879cc1e664c245d1c64da929813e54241d11", - "sha256:dd9b1baec094d91bf36ec729445f7769d0d0cf6b64d04d86e45baf89e2b9059b", - "sha256:e02a0e11cf6597299b9f3bbd3f93d79217cb90cfd1411aec33848b13f5c656cc", - "sha256:e6a20a581f9ce92d389a8c7d7c3dd47c81fd5d6e655c8dddf341e14aa48659d0", - "sha256:e7004be74cbb7d9f34553a5ce5fb08be14fb33bc86f332fb71cbe5216362a497", - "sha256:e774d53b1a477a67838a904131c4b0eef6b3d8a651f8b138b04f748fccfefe17", - "sha256:edb678da49d9f72c9f6c609fbe41a5dfb9a9282f9e6a2253d5a91e0fc382d7c0", - "sha256:f146e0911cb2f1da549fc58fc7bcd2b836a44b79ef871980d605ec392ff6b0d2", - "sha256:f56e2333dda1fe0f909e7cc59f021eba0d2307bc6f012a1ccf2beca6ba362439", - "sha256:f9a3ea26252bd92f570600098783d1371354d89d5f6b7dfd87359d669f2109b5", - "sha256:f9aa1878d1083b276b0196f2dfbe00c9b7e752475ed3b682025ff20c1c1f51ac", - "sha256:fb3c2db03683b5767dedb5769b8a40ebb47d6f7f45b1b3e3b4b51ec8ad9d9825", - "sha256:fbeb989b5cc29e8daf7f976b421c220f1b8c731cbf22b9130d8815418ea45887", - "sha256:fde5bd59ab5357e3853313127f4d3565fc7dad314a74d7b5d43c22c6a5ed2ced", - "sha256:fe1a06da377e3a1062ae5fe0926e12b84eceb8a50b350ddca72dc85015873f74" - ], - "markers": "python_version >= '3.8'", - "version": "==1.4.1" + "sha256:000a77d6034fbad9b6bb880f7ec073027908f1b40254b5d6f26210d2dab1240e", + "sha256:03d33c2ddbc1816237a67f66336616416e2bbb6beb306e5f890f2eb22b959cdf", + "sha256:04a5c6babd5e8fb7d3c871dc8b321166b80e41b637c31a995ed844a6139942b6", + "sha256:0996c66760924da6e88922756d99b47512a71cfd45215f3570bf1e0b694c206a", + "sha256:0cc974cc93d32c42e7b0f6cf242a6bd941c57c61b618e78b6c0a96cb72788c1d", + "sha256:0f253985bb515ecd89629db13cb58d702035ecd8cfbca7d7a7e29a0e6d39af5f", + "sha256:11aabdd62b8b9c4b84081a3c246506d1cddd2dd93ff0ad53ede5defec7886b28", + "sha256:12f78f98c2f1c2429d42e6a485f433722b0061d5c0b0139efa64f396efb5886b", + "sha256:140228863501b44b809fb39ec56b5d4071f4d0aa6d216c19cbb08b8c5a7eadb9", + "sha256:1431d60b36d15cda188ea222033eec8e0eab488f39a272461f2e6d9e1a8e63c2", + "sha256:15538c0cbf0e4fa11d1e3a71f823524b0c46299aed6e10ebb4c2089abd8c3bec", + "sha256:15b731db116ab3aedec558573c1a5eec78822b32292fe4f2f0345b7f697745c2", + "sha256:17dcc32fc7bda7ce5875435003220a457bcfa34ab7924a49a1c19f55b6ee185c", + "sha256:1893f948bf6681733aaccf36c5232c231e3b5166d607c5fa77773611df6dc336", + "sha256:189f03b53e64144f90990d29a27ec4f7997d91ed3d01b51fa39d2dbe77540fd4", + "sha256:1a8ea951bbb6cacd492e3948b8da8c502a3f814f5d20935aae74b5df2b19cf3d", + "sha256:1b96af8c582b94d381a1c1f51ffaedeb77c821c690ea5f01da3d70a487dd0a9b", + "sha256:1e76bfbc72353269c44e0bc2cfe171900fbf7f722ad74c9a7b638052afe6a00c", + "sha256:2150cc6305a2c2ab33299453e2968611dacb970d2283a14955923062c8d00b10", + "sha256:226d72559fa19babe2ccd920273e767c96a49b9d3d38badd7c91a0fdeda8ea08", + "sha256:237f6b23ee0f44066219dae14c70ae38a63f0440ce6750f868ee08775073f942", + "sha256:29d94c256679247b33a3dc96cce0f93cbc69c23bf75ff715919332fdbb6a32b8", + "sha256:2b5e23253bb709ef57a8e95e6ae48daa9ac5f265637529e4ce6b003a37b2621f", + "sha256:2d0da8bbec082bf6bf18345b180958775363588678f64998c2b7609e34719b10", + "sha256:2f3f7a0fbc219fb4455264cae4d9f01ad41ae6ee8524500f381de64ffaa077d5", + "sha256:30c72000fbcc35b129cb09956836c7d7abf78ab5416595e4857d1cae8d6251a6", + "sha256:31115ba75889723431aa9a4e77d5f398f5cf976eea3bdf61749731f62d4a4a21", + "sha256:31a9ac2b38ab9b5a8933b693db4939764ad3f299fcaa931a3e605bc3460e693c", + "sha256:366d8f93e3edfe5a918c874702f78faac300209a4d5bf38352b2c1bdc07a766d", + "sha256:374ca2dabdccad8e2a76d40b1d037f5bd16824933bf7bcea3e59c891fd4a0923", + "sha256:44c49271a937625619e862baacbd037a7ef86dd1ee215afc298a417ff3270608", + "sha256:45e0896250900b5aa25180f9aec243e84e92ac84bd4a74d9ad4138ef3f5c97de", + "sha256:498524025a5b8ba81695761d78c8dd7382ac0b052f34e66939c42df860b8ff17", + "sha256:50cf5e7ee9b98f22bdecbabf3800ae78ddcc26e4a435515fc72d97903e8488e0", + "sha256:52ef692a4bc60a6dd57f507429636c2af8b6046db8b31b18dac02cbc8f507f7f", + "sha256:561eb1c9579d495fddb6da8959fd2a1fca2c6d060d4113f5844b433fc02f2641", + "sha256:5a3ba5f9a0dfed20337d3e966dc359784c9f96503674c2faf015f7fe8e96798c", + "sha256:5b6a66c18b5b9dd261ca98dffcb826a525334b2f29e7caa54e182255c5f6a65a", + "sha256:5c28f4b5dbef8a0d8aad0d4de24d1e9e981728628afaf4ea0792f5d0939372f0", + "sha256:5d7f5a50342475962eb18b740f3beecc685a15b52c91f7d975257e13e029eca9", + "sha256:6321899477db90bdeb9299ac3627a6a53c7399c8cd58d25da094007402b039ab", + "sha256:6482a5851f5d72767fbd0e507e80737f9c8646ae7fd303def99bfe813f76cf7f", + "sha256:666534d15ba8f0fda3f53969117383d5dc021266b3c1a42c9ec4855e4b58b9d3", + "sha256:683173d371daad49cffb8309779e886e59c2f369430ad28fe715f66d08d4ab1a", + "sha256:6e9080bb2fb195a046e5177f10d9d82b8a204c0736a97a153c2466127de87784", + "sha256:73f2e31ea8dd7df61a359b731716018c2be196e5bb3b74ddba107f694fbd7604", + "sha256:7437601c4d89d070eac8323f121fcf25f88674627505334654fd027b091db09d", + "sha256:76e4753701248476e6286f2ef492af900ea67d9706a0155335a40ea21bf3b2f5", + "sha256:7707a25d6a77f5d27ea7dc7d1fc608aa0a478193823f88511ef5e6b8a48f9d03", + "sha256:7948140d9f8ece1745be806f2bfdf390127cf1a763b925c4a805c603df5e697e", + "sha256:7a1a048f9215c90973402e26c01d1cff8a209e1f1b53f72b95c13db61b00f953", + "sha256:7d57d8f702221405a9d9b40f9da8ac2e4a1a8b5285aac6100f3393675f0a85ee", + "sha256:7f3c8c1dacd037df16e85227bac13cca58c30da836c6f936ba1df0c05d046d8d", + "sha256:81d5af29e61b9c8348e876d442253723928dce6433e0e76cd925cd83f1b4b817", + "sha256:828afae9f17e6de596825cf4228ff28fbdf6065974e5ac1410cecc22f699d2b3", + "sha256:87f724d055eb4785d9be84e9ebf0f24e392ddfad00b3fe036e43f489fafc9039", + "sha256:8969190d709e7c48ea386db202d708eb94bdb29207a1f269bab1196ce0dcca1f", + "sha256:90646abbc7a5d5c7c19461d2e3eeb76eb0b204919e6ece342feb6032c9325ae9", + "sha256:91d6c171862df0a6c61479d9724f22efb6109111017c87567cfeb7b5d1449fdf", + "sha256:9272fa73ca71266702c4c3e2d4a28553ea03418e591e377a03b8e3659d94fa76", + "sha256:92b5278ed9d50fe610185ecd23c55d8b307d75ca18e94c0e7de328089ac5dcba", + "sha256:97160e245ea33d8609cd2b8fd997c850b56db147a304a262abc2b3be021a9171", + "sha256:977701c081c0241d0955c9586ffdd9ce44f7a7795df39b9151cd9a6fd0ce4cfb", + "sha256:9b7dc0c4338e6b8b091e8faf0db3168a37101943e687f373dce00959583f7439", + "sha256:9b93d7aaa36c966fa42efcaf716e6b3900438632a626fb09c049f6a2f09fc631", + "sha256:9bbcdfaf4af7ce002694a4e10a0159d5a8d20056a12b05b45cea944a4953f972", + "sha256:9c2623347b933fcb9095841f1cc5d4ff0b278addd743e0e966cb3d460278840d", + "sha256:a2fe128eb4edeabe11896cb6af88fca5346059f6c8d807e3b910069f39157869", + "sha256:a72b7a6e3cd2725eff67cd64c8f13335ee18fc3c7befc05aed043d24c7b9ccb9", + "sha256:a9fe0f1c29ba24ba6ff6abf688cb0b7cf1efab6b6aa6adc55441773c252f7411", + "sha256:b97f7b575ab4a8af9b7bc1d2ef7f29d3afee2226bd03ca3875c16451ad5a7723", + "sha256:bdac3c7d9b705d253b2ce370fde941836a5f8b3c5c2b8fd70940a3ea3af7f4f2", + "sha256:c03eff4a41bd4e38415cbed054bbaff4a075b093e2394b6915dca34a40d1e38b", + "sha256:c16d2fa63e0800723139137d667e1056bee1a1cf7965153d2d104b62855e9b99", + "sha256:c1fac3e2ace2eb1052e9f7c7db480818371134410e1f5c55d65e8f3ac6d1407e", + "sha256:ce3aa154c452d2467487765e3adc730a8c153af77ad84096bc19ce19a2400840", + "sha256:cee6798eaf8b1416ef6909b06f7dc04b60755206bddc599f52232606e18179d3", + "sha256:d1b3eb7b05ea246510b43a7e53ed1653e55c2121019a97e60cad7efb881a97bb", + "sha256:d994863bba198a4a518b467bb971c56e1db3f180a25c6cf7bb1949c267f748c3", + "sha256:dd47a5181ce5fcb463b5d9e17ecfdb02b678cca31280639255ce9d0e5aa67af0", + "sha256:dd94994fc91a6177bfaafd7d9fd951bc8689b0a98168aa26b5f543868548d3ca", + "sha256:de537c11e4aa01d37db0d403b57bd6f0546e71a82347a97c6a9f0dcc532b3a45", + "sha256:df6e2f325bfee1f49f81aaac97d2aa757c7646534a06f8f577ce184afe2f0a9e", + "sha256:e66cc454f97053b79c2ab09c17fbe3c825ea6b4de20baf1be28919460dd7877f", + "sha256:e79225373c317ff1e35f210dd5f1344ff31066ba8067c307ab60254cd3a78ad5", + "sha256:f1577515d35ed5649d52ab4319db757bb881ce3b2b796d7283e6634d99ace307", + "sha256:f1e6540b7fa044eee0bb5111ada694cf3dc15f2b0347ca125ee9ca984d5e9e6e", + "sha256:f2ac49a9bedb996086057b75bf93538240538c6d9b38e57c82d51f75a73409d2", + "sha256:f47c9c9028f55a04ac254346e92977bf0f166c483c74b4232bee19a6697e4778", + "sha256:f5f9da7f5dbc00a604fe74aa02ae7c98bcede8a3b8b9666f9f86fc13993bc71a", + "sha256:fd74520371c3c4175142d02a976aee0b4cb4a7cc912a60586ffd8d5929979b30", + "sha256:feeb64bc9bcc6b45c6311c9e9b99406660a9c05ca8a5b30d14a78555088b0b3a" + ], + "markers": "python_version >= '3.8'", + "version": "==1.5.0" }, "gunicorn": { "hashes": [ @@ -863,6 +878,15 @@ "markers": "python_version >= '3.7'", "version": "==1.0.1" }, + "json-fingerprint": { + "hashes": [ + "sha256:c0fa763736c1bf5ed08a0d8364176f41395e1ec9a9a865dec0e5a220bebfe6e1", + "sha256:cd4c692a85363365b2eb62f612e83d14ef27cc426e49c6e83968ff73a39d82fb" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==0.14.0" + }, "jsonschema": { "hashes": [ "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4", @@ -874,11 +898,11 @@ }, "jsonschema-specifications": { "hashes": [ - "sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc", - "sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c" + "sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272", + "sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf" ], - "markers": "python_version >= '3.8'", - "version": "==2023.12.1" + "markers": "python_version >= '3.9'", + "version": "==2024.10.1" }, "jwcrypto": { "hashes": [ @@ -1037,11 +1061,11 @@ }, "packaging": { "hashes": [ - "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002", - "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124" + "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", + "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f" ], "markers": "python_version >= '3.8'", - "version": "==24.1" + "version": "==24.2" }, "pillow": { "hashes": [ @@ -1145,6 +1169,110 @@ "markers": "python_full_version >= '3.7.0'", "version": "==3.0.48" }, + "propcache": { + "hashes": [ + "sha256:00181262b17e517df2cd85656fcd6b4e70946fe62cd625b9d74ac9977b64d8d9", + "sha256:0e53cb83fdd61cbd67202735e6a6687a7b491c8742dfc39c9e01e80354956763", + "sha256:1235c01ddaa80da8235741e80815ce381c5267f96cc49b1477fdcf8c047ef325", + "sha256:140fbf08ab3588b3468932974a9331aff43c0ab8a2ec2c608b6d7d1756dbb6cb", + "sha256:191db28dc6dcd29d1a3e063c3be0b40688ed76434622c53a284e5427565bbd9b", + "sha256:1e41d67757ff4fbc8ef2af99b338bfb955010444b92929e9e55a6d4dcc3c4f09", + "sha256:1ec43d76b9677637a89d6ab86e1fef70d739217fefa208c65352ecf0282be957", + "sha256:20a617c776f520c3875cf4511e0d1db847a076d720714ae35ffe0df3e440be68", + "sha256:218db2a3c297a3768c11a34812e63b3ac1c3234c3a086def9c0fee50d35add1f", + "sha256:22aa8f2272d81d9317ff5756bb108021a056805ce63dd3630e27d042c8092798", + "sha256:25a1f88b471b3bc911d18b935ecb7115dff3a192b6fef46f0bfaf71ff4f12418", + "sha256:25c8d773a62ce0451b020c7b29a35cfbc05de8b291163a7a0f3b7904f27253e6", + "sha256:2a60ad3e2553a74168d275a0ef35e8c0a965448ffbc3b300ab3a5bb9956c2162", + "sha256:2a66df3d4992bc1d725b9aa803e8c5a66c010c65c741ad901e260ece77f58d2f", + "sha256:2ccc28197af5313706511fab3a8b66dcd6da067a1331372c82ea1cb74285e036", + "sha256:2e900bad2a8456d00a113cad8c13343f3b1f327534e3589acc2219729237a2e8", + "sha256:2ee7606193fb267be4b2e3b32714f2d58cad27217638db98a60f9efb5efeccc2", + "sha256:33ac8f098df0585c0b53009f039dfd913b38c1d2edafed0cedcc0c32a05aa110", + "sha256:3444cdba6628accf384e349014084b1cacd866fbb88433cd9d279d90a54e0b23", + "sha256:363ea8cd3c5cb6679f1c2f5f1f9669587361c062e4899fce56758efa928728f8", + "sha256:375a12d7556d462dc64d70475a9ee5982465fbb3d2b364f16b86ba9135793638", + "sha256:388f3217649d6d59292b722d940d4d2e1e6a7003259eb835724092a1cca0203a", + "sha256:3947483a381259c06921612550867b37d22e1df6d6d7e8361264b6d037595f44", + "sha256:39e104da444a34830751715f45ef9fc537475ba21b7f1f5b0f4d71a3b60d7fe2", + "sha256:3c997f8c44ec9b9b0bcbf2d422cc00a1d9b9c681f56efa6ca149a941e5560da2", + "sha256:3dfafb44f7bb35c0c06eda6b2ab4bfd58f02729e7c4045e179f9a861b07c9850", + "sha256:3ebbcf2a07621f29638799828b8d8668c421bfb94c6cb04269130d8de4fb7136", + "sha256:3f88a4095e913f98988f5b338c1d4d5d07dbb0b6bad19892fd447484e483ba6b", + "sha256:439e76255daa0f8151d3cb325f6dd4a3e93043e6403e6491813bcaaaa8733887", + "sha256:4569158070180c3855e9c0791c56be3ceeb192defa2cdf6a3f39e54319e56b89", + "sha256:466c219deee4536fbc83c08d09115249db301550625c7fef1c5563a584c9bc87", + "sha256:4a9d9b4d0a9b38d1c391bb4ad24aa65f306c6f01b512e10a8a34a2dc5675d348", + "sha256:4c7dde9e533c0a49d802b4f3f218fa9ad0a1ce21f2c2eb80d5216565202acab4", + "sha256:53d1bd3f979ed529f0805dd35ddaca330f80a9a6d90bc0121d2ff398f8ed8861", + "sha256:55346705687dbd7ef0d77883ab4f6fabc48232f587925bdaf95219bae072491e", + "sha256:56295eb1e5f3aecd516d91b00cfd8bf3a13991de5a479df9e27dd569ea23959c", + "sha256:56bb5c98f058a41bb58eead194b4db8c05b088c93d94d5161728515bd52b052b", + "sha256:5a5b3bb545ead161be780ee85a2b54fdf7092815995661947812dde94a40f6fb", + "sha256:5f2564ec89058ee7c7989a7b719115bdfe2a2fb8e7a4543b8d1c0cc4cf6478c1", + "sha256:608cce1da6f2672a56b24a015b42db4ac612ee709f3d29f27a00c943d9e851de", + "sha256:63f13bf09cc3336eb04a837490b8f332e0db41da66995c9fd1ba04552e516354", + "sha256:662dd62358bdeaca0aee5761de8727cfd6861432e3bb828dc2a693aa0471a563", + "sha256:676135dcf3262c9c5081cc8f19ad55c8a64e3f7282a21266d05544450bffc3a5", + "sha256:67aeb72e0f482709991aa91345a831d0b707d16b0257e8ef88a2ad246a7280bf", + "sha256:67b69535c870670c9f9b14a75d28baa32221d06f6b6fa6f77a0a13c5a7b0a5b9", + "sha256:682a7c79a2fbf40f5dbb1eb6bfe2cd865376deeac65acf9beb607505dced9e12", + "sha256:6994984550eaf25dd7fc7bd1b700ff45c894149341725bb4edc67f0ffa94efa4", + "sha256:69d3a98eebae99a420d4b28756c8ce6ea5a29291baf2dc9ff9414b42676f61d5", + "sha256:6e2e54267980349b723cff366d1e29b138b9a60fa376664a157a342689553f71", + "sha256:73e4b40ea0eda421b115248d7e79b59214411109a5bc47d0d48e4c73e3b8fcf9", + "sha256:74acd6e291f885678631b7ebc85d2d4aec458dd849b8c841b57ef04047833bed", + "sha256:7665f04d0c7f26ff8bb534e1c65068409bf4687aa2534faf7104d7182debb336", + "sha256:7735e82e3498c27bcb2d17cb65d62c14f1100b71723b68362872bca7d0913d90", + "sha256:77a86c261679ea5f3896ec060be9dc8e365788248cc1e049632a1be682442063", + "sha256:7cf18abf9764746b9c8704774d8b06714bcb0a63641518a3a89c7f85cc02c2ad", + "sha256:83928404adf8fb3d26793665633ea79b7361efa0287dfbd372a7e74311d51ee6", + "sha256:8e40876731f99b6f3c897b66b803c9e1c07a989b366c6b5b475fafd1f7ba3fb8", + "sha256:8f188cfcc64fb1266f4684206c9de0e80f54622c3f22a910cbd200478aeae61e", + "sha256:91997d9cb4a325b60d4e3f20967f8eb08dfcb32b22554d5ef78e6fd1dda743a2", + "sha256:91ee8fc02ca52e24bcb77b234f22afc03288e1dafbb1f88fe24db308910c4ac7", + "sha256:92fe151145a990c22cbccf9ae15cae8ae9eddabfc949a219c9f667877e40853d", + "sha256:945db8ee295d3af9dbdbb698cce9bbc5c59b5c3fe328bbc4387f59a8a35f998d", + "sha256:9517d5e9e0731957468c29dbfd0f976736a0e55afaea843726e887f36fe017df", + "sha256:952e0d9d07609d9c5be361f33b0d6d650cd2bae393aabb11d9b719364521984b", + "sha256:97a58a28bcf63284e8b4d7b460cbee1edaab24634e82059c7b8c09e65284f178", + "sha256:97e48e8875e6c13909c800fa344cd54cc4b2b0db1d5f911f840458a500fde2c2", + "sha256:9e0f07b42d2a50c7dd2d8675d50f7343d998c64008f1da5fef888396b7f84630", + "sha256:a3dc1a4b165283bd865e8f8cb5f0c64c05001e0718ed06250d8cac9bec115b48", + "sha256:a3ebe9a75be7ab0b7da2464a77bb27febcb4fab46a34f9288f39d74833db7f61", + "sha256:a64e32f8bd94c105cc27f42d3b658902b5bcc947ece3c8fe7bc1b05982f60e89", + "sha256:a6ed8db0a556343d566a5c124ee483ae113acc9a557a807d439bcecc44e7dfbb", + "sha256:ad9c9b99b05f163109466638bd30ada1722abb01bbb85c739c50b6dc11f92dc3", + "sha256:b33d7a286c0dc1a15f5fc864cc48ae92a846df287ceac2dd499926c3801054a6", + "sha256:bc092ba439d91df90aea38168e11f75c655880c12782facf5cf9c00f3d42b562", + "sha256:c436130cc779806bdf5d5fae0d848713105472b8566b75ff70048c47d3961c5b", + "sha256:c5869b8fd70b81835a6f187c5fdbe67917a04d7e52b6e7cc4e5fe39d55c39d58", + "sha256:c5ecca8f9bab618340c8e848d340baf68bcd8ad90a8ecd7a4524a81c1764b3db", + "sha256:cfac69017ef97db2438efb854edf24f5a29fd09a536ff3a992b75990720cdc99", + "sha256:d2f0d0f976985f85dfb5f3d685697ef769faa6b71993b46b295cdbbd6be8cc37", + "sha256:d5bed7f9805cc29c780f3aee05de3262ee7ce1f47083cfe9f77471e9d6777e83", + "sha256:d6a21ef516d36909931a2967621eecb256018aeb11fc48656e3257e73e2e247a", + "sha256:d9b6ddac6408194e934002a69bcaadbc88c10b5f38fb9307779d1c629181815d", + "sha256:db47514ffdbd91ccdc7e6f8407aac4ee94cc871b15b577c1c324236b013ddd04", + "sha256:df81779732feb9d01e5d513fad0122efb3d53bbc75f61b2a4f29a020bc985e70", + "sha256:e4a91d44379f45f5e540971d41e4626dacd7f01004826a18cb048e7da7e96544", + "sha256:e63e3e1e0271f374ed489ff5ee73d4b6e7c60710e1f76af5f0e1a6117cd26394", + "sha256:e70fac33e8b4ac63dfc4c956fd7d85a0b1139adcfc0d964ce288b7c527537fea", + "sha256:ecddc221a077a8132cf7c747d5352a15ed763b674c0448d811f408bf803d9ad7", + "sha256:f45eec587dafd4b2d41ac189c2156461ebd0c1082d2fe7013571598abb8505d1", + "sha256:f52a68c21363c45297aca15561812d542f8fc683c85201df0bebe209e349f793", + "sha256:f571aea50ba5623c308aa146eb650eebf7dbe0fd8c5d946e28343cb3b5aad577", + "sha256:f60f0ac7005b9f5a6091009b09a419ace1610e163fa5deaba5ce3484341840e7", + "sha256:f6475a1b2ecb310c98c28d271a30df74f9dd436ee46d09236a6b750a7599ce57", + "sha256:f6d5749fdd33d90e34c2efb174c7e236829147a2713334d708746e94c4bde40d", + "sha256:f902804113e032e2cdf8c71015651c97af6418363bea8d78dc0911d56c335032", + "sha256:fa1076244f54bb76e65e22cb6910365779d5c3d71d1f18b275f1dfc7b0d71b4d", + "sha256:fc2db02409338bf36590aa985a461b2c96fce91f8e7e0f14c50c5fcc4f229016", + "sha256:ffcad6c564fe6b9b8916c1aefbb37a362deebf9394bd2974e9d84232e3e08504" + ], + "markers": "python_version >= '3.8'", + "version": "==0.2.0" + }, "psycopg": { "extras": [ "c" @@ -1220,53 +1348,107 @@ "email" ], "hashes": [ - "sha256:069b9c9fc645474d5ea3653788b544a9e0ccd3dca3ad8c900c4c6eac844b4620", - "sha256:06a189b81ffc52746ec9c8c007f16e5167c8b0a696e1a726369327e3db7b2a82", - "sha256:11d9d9b87b50338b1b7de4ebf34fd29fdb0d219dc07ade29effc74d3d2609c62", - "sha256:15fdbe568beaca9aacfccd5ceadfb5f1a235087a127e8af5e48df9d8a45ae85c", - "sha256:19a3bd00b9dafc2cd7250d94d5b578edf7a0bd7daf102617153ff9a8fa37871c", - "sha256:23e8ec1ce4e57b4f441fc91e3c12adba023fedd06868445a5b5f1d48f0ab3682", - "sha256:24a4a159d0f7a8e26bf6463b0d3d60871d6a52eac5bb6a07a7df85c806f4c048", - "sha256:2ce3fcf75b2bae99aa31bd4968de0474ebe8c8258a0110903478bd83dfee4e3b", - "sha256:335a32d72c51a313b33fa3a9b0fe283503272ef6467910338e123f90925f0f03", - "sha256:3445426da503c7e40baccefb2b2989a0c5ce6b163679dd75f55493b460f05a8f", - "sha256:34a3613c7edb8c6fa578e58e9abe3c0f5e7430e0fc34a65a415a1683b9c32d9a", - "sha256:3d5492dbf953d7d849751917e3b2433fb26010d977aa7a0765c37425a4026ff1", - "sha256:44ae8a3e35a54d2e8fa88ed65e1b08967a9ef8c320819a969bfa09ce5528fafe", - "sha256:467a14ee2183bc9c902579bb2f04c3d3dac00eff52e252850509a562255b2a33", - "sha256:46f379b8cb8a3585e3f61bf9ae7d606c70d133943f339d38b76e041ec234953f", - "sha256:49e26c51ca854286bffc22b69787a8d4063a62bf7d83dc21d44d2ff426108518", - "sha256:65f7361a09b07915a98efd17fdec23103307a54db2000bb92095457ca758d485", - "sha256:6951f3f47cb5ca4da536ab161ac0163cab31417d20c54c6de5ddcab8bc813c3f", - "sha256:72fa46abace0a7743cc697dbb830a41ee84c9db8456e8d77a46d79b537efd7ec", - "sha256:74fe19dda960b193b0eb82c1f4d2c8e5e26918d9cda858cbf3f41dd28549cb70", - "sha256:7a4c5eec138a9b52c67f664c7d51d4c7234c5ad65dd8aacd919fb47445a62c86", - "sha256:80b982d42515632eb51f60fa1d217dfe0729f008e81a82d1544cc392e0a50ddf", - "sha256:941a2eb0a1509bd7f31e355912eb33b698eb0051730b2eaf9e70e2e1589cae1d", - "sha256:9f463abafdc92635da4b38807f5b9972276be7c8c5121989768549fceb8d2588", - "sha256:a00e63104346145389b8e8f500bc6a241e729feaf0559b88b8aa513dd2065481", - "sha256:aad8771ec8dbf9139b01b56f66386537c6fe4e76c8f7a47c10261b69ad25c2c9", - "sha256:ae6fa2008e1443c46b7b3a5eb03800121868d5ab6bc7cda20b5df3e133cde8b3", - "sha256:b661ce52c7b5e5f600c0c3c5839e71918346af2ef20062705ae76b5c16914cab", - "sha256:b74be007703547dc52e3c37344d130a7bfacca7df112a9e5ceeb840a9ce195c7", - "sha256:baebdff1907d1d96a139c25136a9bb7d17e118f133a76a2ef3b845e831e3403a", - "sha256:c20f682defc9ef81cd7eaa485879ab29a86a0ba58acf669a78ed868e72bb89e0", - "sha256:c3e742f62198c9eb9201781fbebe64533a3bbf6a76a91b8d438d62b813079dbc", - "sha256:c5ae6b7c8483b1e0bf59e5f1843e4fd8fd405e11df7de217ee65b98eb5462861", - "sha256:c6d0a9f9eccaf7f438671a64acf654ef0d045466e63f9f68a579e2383b63f357", - "sha256:cbfbca662ed3729204090c4d09ee4beeecc1a7ecba5a159a94b5a4eb24e3759a", - "sha256:d5389eb3b48a72da28c6e061a247ab224381435256eb541e175798483368fdd3", - "sha256:e306e280ebebc65040034bff1a0a81fd86b2f4f05daac0131f29541cafd80b80", - "sha256:e405ffcc1254d76bb0e760db101ee8916b620893e6edfbfee563b3c6f7a67c02", - "sha256:e9ee4e6ca1d9616797fa2e9c0bfb8815912c7d67aca96f77428e316741082a1b", - "sha256:ef0fe7ad7cbdb5f372463d42e6ed4ca9c443a52ce544472d8842a0576d830da5", - "sha256:efbc8a7f9cb5fe26122acba1852d8dcd1e125e723727c59dcd244da7bdaa54f2", - "sha256:fcb20d4cb355195c75000a49bb4a31d75e4295200df620f454bbc6bdf60ca890", - "sha256:fe734914977eed33033b70bfc097e1baaffb589517863955430bf2e0846ac30f" + "sha256:d155cef71265d1e9807ed1c32b4c8deec042a44a50a4188b25ac67ecd81a9c0f", + "sha256:f048cec7b26778210e28a0459867920654d48e5e62db0958433636cde4254f12" ], "index": "pypi", - "markers": "python_version >= '3.7'", - "version": "==1.10.18" + "markers": "python_version >= '3.8'", + "version": "==2.9.2" + }, + "pydantic-core": { + "hashes": [ + "sha256:0a7df63886be5e270da67e0966cf4afbae86069501d35c8c1b3b6c168f42cb36", + "sha256:0cb3da3fd1b6a5d0279a01877713dbda118a2a4fc6f0d821a57da2e464793f05", + "sha256:0dbd8dbed2085ed23b5c04afa29d8fd2771674223135dc9bc937f3c09284d071", + "sha256:0dff76e0602ca7d4cdaacc1ac4c005e0ce0dcfe095d5b5259163a80d3a10d327", + "sha256:1278e0d324f6908e872730c9102b0112477a7f7cf88b308e4fc36ce1bdb6d58c", + "sha256:128585782e5bfa515c590ccee4b727fb76925dd04a98864182b22e89a4e6ed36", + "sha256:1498bec4c05c9c787bde9125cfdcc63a41004ff167f495063191b863399b1a29", + "sha256:19442362866a753485ba5e4be408964644dd6a09123d9416c54cd49171f50744", + "sha256:1b84d168f6c48fabd1f2027a3d1bdfe62f92cade1fb273a5d68e621da0e44e6d", + "sha256:1e90d2e3bd2c3863d48525d297cd143fe541be8bbf6f579504b9712cb6b643ec", + "sha256:20152074317d9bed6b7a95ade3b7d6054845d70584216160860425f4fbd5ee9e", + "sha256:216f9b2d7713eb98cb83c80b9c794de1f6b7e3145eef40400c62e86cee5f4e1e", + "sha256:233710f069d251feb12a56da21e14cca67994eab08362207785cf8c598e74577", + "sha256:255a8ef062cbf6674450e668482456abac99a5583bbafb73f9ad469540a3a232", + "sha256:2584f7cf844ac4d970fba483a717dbe10c1c1c96a969bf65d61ffe94df1b2863", + "sha256:2971bb5ffe72cc0f555c13e19b23c85b654dd2a8f7ab493c262071377bfce9f6", + "sha256:29d2c342c4bc01b88402d60189f3df065fb0dda3654744d5a165a5288a657368", + "sha256:2e203fdf807ac7e12ab59ca2bfcabb38c7cf0b33c41efeb00f8e5da1d86af480", + "sha256:33e3d65a85a2a4a0dc3b092b938a4062b1a05f3a9abde65ea93b233bca0e03f2", + "sha256:374a5e5049eda9e0a44c696c7ade3ff355f06b1fe0bb945ea3cac2bc336478a2", + "sha256:37b0fe330e4a58d3c58b24d91d1eb102aeec675a3db4c292ec3928ecd892a9a6", + "sha256:3d5639516376dce1940ea36edf408c554475369f5da2abd45d44621cb616f769", + "sha256:42c6dcb030aefb668a2b7009c85b27f90e51e6a3b4d5c9bc4c57631292015b0d", + "sha256:4a7cd62e831afe623fbb7aabbb4fe583212115b3ef38a9f6b71869ba644624a2", + "sha256:4ba762ed58e8d68657fc1281e9bb72e1c3e79cc5d464be146e260c541ec12d84", + "sha256:4fc714bdbfb534f94034efaa6eadd74e5b93c8fa6315565a222f7b6f42ca1166", + "sha256:4ffa2ebd4c8530079140dd2d7f794a9d9a73cbb8e9d59ffe24c63436efa8f271", + "sha256:5a1504ad17ba4210df3a045132a7baeeba5a200e930f57512ee02909fc5c4cb5", + "sha256:5c364564d17da23db1106787675fc7af45f2f7b58b4173bfdd105564e132e6fb", + "sha256:5e11661ce0fd30a6790e8bcdf263b9ec5988e95e63cf901972107efc49218b13", + "sha256:5f54b118ce5de9ac21c363d9b3caa6c800341e8c47a508787e5868c6b79c9323", + "sha256:5f5ff8d839f4566a474a969508fe1c5e59c31c80d9e140566f9a37bba7b8d556", + "sha256:61817945f2fe7d166e75fbfb28004034b48e44878177fc54d81688e7b85a3665", + "sha256:624e278a7d29b6445e4e813af92af37820fafb6dcc55c012c834f9e26f9aaaef", + "sha256:63e46b3169866bd62849936de036f901a9356e36376079b05efa83caeaa02ceb", + "sha256:6531b7ca5f951d663c339002e91aaebda765ec7d61b7d1e3991051906ddde119", + "sha256:68665f4c17edcceecc112dfed5dbe6f92261fb9d6054b47d01bf6371a6196126", + "sha256:696dd8d674d6ce621ab9d45b205df149399e4bb9aa34102c970b721554828510", + "sha256:6f783e0ec4803c787bcea93e13e9932edab72068f68ecffdf86a99fd5918878b", + "sha256:723314c1d51722ab28bfcd5240d858512ffd3116449c557a1336cbe3919beb87", + "sha256:74b9127ffea03643e998e0c5ad9bd3811d3dac8c676e47db17b0ee7c3c3bf35f", + "sha256:7530e201d10d7d14abce4fb54cfe5b94a0aefc87da539d0346a484ead376c3cc", + "sha256:77733e3892bb0a7fa797826361ce8a9184d25c8dffaec60b7ffe928153680ba8", + "sha256:78ddaaa81421a29574a682b3179d4cf9e6d405a09b99d93ddcf7e5239c742e21", + "sha256:7c9129eb40958b3d4500fa2467e6a83356b3b61bfff1b414c7361d9220f9ae8f", + "sha256:7d32706badfe136888bdea71c0def994644e09fff0bfe47441deaed8e96fdbc6", + "sha256:81965a16b675b35e1d09dd14df53f190f9129c0202356ed44ab2728b1c905658", + "sha256:8394d940e5d400d04cad4f75c0598665cbb81aecefaca82ca85bd28264af7f9b", + "sha256:86d2f57d3e1379a9525c5ab067b27dbb8a0642fb5d454e17a9ac434f9ce523e3", + "sha256:883a91b5dd7d26492ff2f04f40fbb652de40fcc0afe07e8129e8ae779c2110eb", + "sha256:88ad334a15b32a791ea935af224b9de1bf99bcd62fabf745d5f3442199d86d59", + "sha256:9261d3ce84fa1d38ed649c3638feefeae23d32ba9182963e465d58d62203bd24", + "sha256:97df63000f4fea395b2824da80e169731088656d1818a11b95f3b173747b6cd9", + "sha256:98d134c954828488b153d88ba1f34e14259284f256180ce659e8d83e9c05eaa3", + "sha256:996a38a83508c54c78a5f41456b0103c30508fed9abcad0a59b876d7398f25fd", + "sha256:9a5bce9d23aac8f0cf0836ecfc033896aa8443b501c58d0602dbfd5bd5b37753", + "sha256:9a6b5099eeec78827553827f4c6b8615978bb4b6a88e5d9b93eddf8bb6790f55", + "sha256:9d18368b137c6295db49ce7218b1a9ba15c5bc254c96d7c9f9e924a9bc7825ad", + "sha256:a4fa4fc04dff799089689f4fd502ce7d59de529fc2f40a2c8836886c03e0175a", + "sha256:a5c7ba8ffb6d6f8f2ab08743be203654bb1aaa8c9dcb09f82ddd34eadb695605", + "sha256:aea443fffa9fbe3af1a9ba721a87f926fe548d32cab71d188a6ede77d0ff244e", + "sha256:b10bd51f823d891193d4717448fab065733958bdb6a6b351967bd349d48d5c9b", + "sha256:ba1a0996f6c2773bd83e63f18914c1de3c9dd26d55f4ac302a7efe93fb8e7433", + "sha256:bb2802e667b7051a1bebbfe93684841cc9351004e2badbd6411bf357ab8d5ac8", + "sha256:cfdd16ab5e59fc31b5e906d1a3f666571abc367598e3e02c83403acabc092e07", + "sha256:d06b0c8da4f16d1d1e352134427cb194a0a6e19ad5db9161bf32b2113409e728", + "sha256:d0776dea117cf5272382634bd2a5c1b6eb16767c223c6a5317cd3e2a757c61a0", + "sha256:d18ca8148bebe1b0a382a27a8ee60350091a6ddaf475fa05ef50dc35b5df6327", + "sha256:d4488a93b071c04dc20f5cecc3631fc78b9789dd72483ba15d423b5b3689b555", + "sha256:d5f7a395a8cf1621939692dba2a6b6a830efa6b3cee787d82c7de1ad2930de64", + "sha256:d7a80d21d613eec45e3d41eb22f8f94ddc758a6c4720842dc74c0581f54993d6", + "sha256:d97683ddee4723ae8c95d1eddac7c192e8c552da0c73a925a89fa8649bf13eea", + "sha256:dcedcd19a557e182628afa1d553c3895a9f825b936415d0dbd3cd0bbcfd29b4b", + "sha256:de6d1d1b9e5101508cb37ab0d972357cac5235f5c6533d1071964c47139257df", + "sha256:df49e7a0861a8c36d089c1ed57d308623d60416dab2647a4a17fe050ba85de0e", + "sha256:df933278128ea1cd77772673c73954e53a1c95a4fdf41eef97c2b779271bd0bd", + "sha256:e08277a400de01bc72436a0ccd02bdf596631411f592ad985dcee21445bd0068", + "sha256:e38e63e6f3d1cec5a27e0afe90a085af8b6806ee208b33030e65b6516353f1a3", + "sha256:e55541f756f9b3ee346b840103f32779c695a19826a4c442b7954550a0972040", + "sha256:ec4e55f79b1c4ffb2eecd8a0cfba9955a2588497d96851f4c8f99aa4a1d39b12", + "sha256:ed1a53de42fbe34853ba90513cea21673481cd81ed1be739f7f2efb931b24916", + "sha256:ed541d70698978a20eb63d8c5d72f2cc6d7079d9d90f6b50bad07826f1320f5f", + "sha256:f09e2ff1f17c2b51f2bc76d1cc33da96298f0a036a137f5440ab3ec5360b624f", + "sha256:f220b0eea5965dec25480b6333c788fb72ce5f9129e8759ef876a1d805d00801", + "sha256:f3e0da4ebaef65158d4dfd7d3678aad692f7666877df0002b8a522cdf088f231", + "sha256:f455ee30a9d61d3e1a15abd5068827773d6e4dc513e795f380cdd59932c782d5", + "sha256:f5ef8f42bec47f21d07668a043f077d507e5bf4e668d5c6dfe6aaba89de1a5b8", + "sha256:f69a8e0b033b747bb3e36a44e7732f0c99f7edd5cea723d45bc0d6e95377ffee", + "sha256:ff02b6d461a6de369f07ec15e465a88895f3223eb75073ffea56b84d9331f607" + ], + "markers": "python_version >= '3.8'", + "version": "==2.23.4" }, "pyjwt": { "hashes": [ @@ -1414,120 +1596,107 @@ }, "rpds-py": { "hashes": [ - "sha256:06db23d43f26478303e954c34c75182356ca9aa7797d22c5345b16871ab9c45c", - "sha256:0e13e6952ef264c40587d510ad676a988df19adea20444c2b295e536457bc585", - "sha256:11ef6ce74616342888b69878d45e9f779b95d4bd48b382a229fe624a409b72c5", - "sha256:1259c7b3705ac0a0bd38197565a5d603218591d3f6cee6e614e380b6ba61c6f6", - "sha256:18d7585c463087bddcfa74c2ba267339f14f2515158ac4db30b1f9cbdb62c8ef", - "sha256:1e0f80b739e5a8f54837be5d5c924483996b603d5502bfff79bf33da06164ee2", - "sha256:1e5f3cd7397c8f86c8cc72d5a791071431c108edd79872cdd96e00abd8497d29", - "sha256:220002c1b846db9afd83371d08d239fdc865e8f8c5795bbaec20916a76db3318", - "sha256:22e6c9976e38f4d8c4a63bd8a8edac5307dffd3ee7e6026d97f3cc3a2dc02a0b", - "sha256:238a2d5b1cad28cdc6ed15faf93a998336eb041c4e440dd7f902528b8891b399", - "sha256:2580b0c34583b85efec8c5c5ec9edf2dfe817330cc882ee972ae650e7b5ef739", - "sha256:28527c685f237c05445efec62426d285e47a58fb05ba0090a4340b73ecda6dee", - "sha256:2cf126d33a91ee6eedc7f3197b53e87a2acdac63602c0f03a02dd69e4b138174", - "sha256:338ca4539aad4ce70a656e5187a3a31c5204f261aef9f6ab50e50bcdffaf050a", - "sha256:39ed0d010457a78f54090fafb5d108501b5aa5604cc22408fc1c0c77eac14344", - "sha256:3ad0fda1635f8439cde85c700f964b23ed5fc2d28016b32b9ee5fe30da5c84e2", - "sha256:3d2b1ad682a3dfda2a4e8ad8572f3100f95fad98cb99faf37ff0ddfe9cbf9d03", - "sha256:3d61339e9f84a3f0767b1995adfb171a0d00a1185192718a17af6e124728e0f5", - "sha256:3fde368e9140312b6e8b6c09fb9f8c8c2f00999d1823403ae90cc00480221b22", - "sha256:40ce74fc86ee4645d0a225498d091d8bc61f39b709ebef8204cb8b5a464d3c0e", - "sha256:49a8063ea4296b3a7e81a5dfb8f7b2d73f0b1c20c2af401fb0cdf22e14711a96", - "sha256:4a1f1d51eccb7e6c32ae89243cb352389228ea62f89cd80823ea7dd1b98e0b91", - "sha256:4b16aa0107ecb512b568244ef461f27697164d9a68d8b35090e9b0c1c8b27752", - "sha256:4f1ed4749a08379555cebf4650453f14452eaa9c43d0a95c49db50c18b7da075", - "sha256:4fe84294c7019456e56d93e8ababdad5a329cd25975be749c3f5f558abb48253", - "sha256:50eccbf054e62a7b2209b28dc7a22d6254860209d6753e6b78cfaeb0075d7bee", - "sha256:514b3293b64187172bc77c8fb0cdae26981618021053b30d8371c3a902d4d5ad", - "sha256:54b43a2b07db18314669092bb2de584524d1ef414588780261e31e85846c26a5", - "sha256:55fea87029cded5df854ca7e192ec7bdb7ecd1d9a3f63d5c4eb09148acf4a7ce", - "sha256:569b3ea770c2717b730b61998b6c54996adee3cef69fc28d444f3e7920313cf7", - "sha256:56e27147a5a4c2c21633ff8475d185734c0e4befd1c989b5b95a5d0db699b21b", - "sha256:57eb94a8c16ab08fef6404301c38318e2c5a32216bf5de453e2714c964c125c8", - "sha256:5a35df9f5548fd79cb2f52d27182108c3e6641a4feb0f39067911bf2adaa3e57", - "sha256:5a8c94dad2e45324fc74dce25e1645d4d14df9a4e54a30fa0ae8bad9a63928e3", - "sha256:5b4f105deeffa28bbcdff6c49b34e74903139afa690e35d2d9e3c2c2fba18cec", - "sha256:5c1dc0f53856b9cc9a0ccca0a7cc61d3d20a7088201c0937f3f4048c1718a209", - "sha256:614fdafe9f5f19c63ea02817fa4861c606a59a604a77c8cdef5aa01d28b97921", - "sha256:617c7357272c67696fd052811e352ac54ed1d9b49ab370261a80d3b6ce385045", - "sha256:65794e4048ee837494aea3c21a28ad5fc080994dfba5b036cf84de37f7ad5074", - "sha256:6632f2d04f15d1bd6fe0eedd3b86d9061b836ddca4c03d5cf5c7e9e6b7c14580", - "sha256:6c8ef2ebf76df43f5750b46851ed1cdf8f109d7787ca40035fe19fbdc1acc5a7", - "sha256:758406267907b3781beee0f0edfe4a179fbd97c0be2e9b1154d7f0a1279cf8e5", - "sha256:7e60cb630f674a31f0368ed32b2a6b4331b8350d67de53c0359992444b116dd3", - "sha256:89c19a494bf3ad08c1da49445cc5d13d8fefc265f48ee7e7556839acdacf69d0", - "sha256:8a86a9b96070674fc88b6f9f71a97d2c1d3e5165574615d1f9168ecba4cecb24", - "sha256:8bc7690f7caee50b04a79bf017a8d020c1f48c2a1077ffe172abec59870f1139", - "sha256:8d7919548df3f25374a1f5d01fbcd38dacab338ef5f33e044744b5c36729c8db", - "sha256:9426133526f69fcaba6e42146b4e12d6bc6c839b8b555097020e2b78ce908dcc", - "sha256:9824fb430c9cf9af743cf7aaf6707bf14323fb51ee74425c380f4c846ea70789", - "sha256:9bb4a0d90fdb03437c109a17eade42dfbf6190408f29b2744114d11586611d6f", - "sha256:9bc2d153989e3216b0559251b0c260cfd168ec78b1fac33dd485750a228db5a2", - "sha256:9d35cef91e59ebbeaa45214861874bc6f19eb35de96db73e467a8358d701a96c", - "sha256:a1862d2d7ce1674cffa6d186d53ca95c6e17ed2b06b3f4c476173565c862d232", - "sha256:a84ab91cbe7aab97f7446652d0ed37d35b68a465aeef8fc41932a9d7eee2c1a6", - "sha256:aa7f429242aae2947246587d2964fad750b79e8c233a2367f71b554e9447949c", - "sha256:aa9a0521aeca7d4941499a73ad7d4f8ffa3d1affc50b9ea11d992cd7eff18a29", - "sha256:ac2f4f7a98934c2ed6505aead07b979e6f999389f16b714448fb39bbaa86a489", - "sha256:ae94bd0b2f02c28e199e9bc51485d0c5601f58780636185660f86bf80c89af94", - "sha256:af0fc424a5842a11e28956e69395fbbeab2c97c42253169d87e90aac2886d751", - "sha256:b2a5db5397d82fa847e4c624b0c98fe59d2d9b7cf0ce6de09e4d2e80f8f5b3f2", - "sha256:b4c29cbbba378759ac5786730d1c3cb4ec6f8ababf5c42a9ce303dc4b3d08cda", - "sha256:b74b25f024b421d5859d156750ea9a65651793d51b76a2e9238c05c9d5f203a9", - "sha256:b7f19250ceef892adf27f0399b9e5afad019288e9be756d6919cb58892129f51", - "sha256:b80d4a7900cf6b66bb9cee5c352b2d708e29e5a37fe9bf784fa97fc11504bf6c", - "sha256:b8c00a3b1e70c1d3891f0db1b05292747f0dbcfb49c43f9244d04c70fbc40eb8", - "sha256:bb273176be34a746bdac0b0d7e4e2c467323d13640b736c4c477881a3220a989", - "sha256:c3c20f0ddeb6e29126d45f89206b8291352b8c5b44384e78a6499d68b52ae511", - "sha256:c3e130fd0ec56cb76eb49ef52faead8ff09d13f4527e9b0c400307ff72b408e1", - "sha256:c52d3f2f82b763a24ef52f5d24358553e8403ce05f893b5347098014f2d9eff2", - "sha256:c6377e647bbfd0a0b159fe557f2c6c602c159fc752fa316572f012fc0bf67150", - "sha256:c638144ce971df84650d3ed0096e2ae7af8e62ecbbb7b201c8935c370df00a2c", - "sha256:ce9845054c13696f7af7f2b353e6b4f676dab1b4b215d7fe5e05c6f8bb06f965", - "sha256:cf258ede5bc22a45c8e726b29835b9303c285ab46fc7c3a4cc770736b5304c9f", - "sha256:d0a26ffe9d4dd35e4dfdd1e71f46401cff0181c75ac174711ccff0459135fa58", - "sha256:d0b67d87bb45ed1cd020e8fbf2307d449b68abc45402fe1a4ac9e46c3c8b192b", - "sha256:d20277fd62e1b992a50c43f13fbe13277a31f8c9f70d59759c88f644d66c619f", - "sha256:d454b8749b4bd70dd0a79f428731ee263fa6995f83ccb8bada706e8d1d3ff89d", - "sha256:d4c7d1a051eeb39f5c9547e82ea27cbcc28338482242e3e0b7768033cb083821", - "sha256:d72278a30111e5b5525c1dd96120d9e958464316f55adb030433ea905866f4de", - "sha256:d72a210824facfdaf8768cf2d7ca25a042c30320b3020de2fa04640920d4e121", - "sha256:d807dc2051abe041b6649681dce568f8e10668e3c1c6543ebae58f2d7e617855", - "sha256:dbe982f38565bb50cb7fb061ebf762c2f254ca3d8c20d4006878766e84266272", - "sha256:dcedf0b42bcb4cfff4101d7771a10532415a6106062f005ab97d1d0ab5681c60", - "sha256:deb62214c42a261cb3eb04d474f7155279c1a8a8c30ac89b7dcb1721d92c3c02", - "sha256:def7400461c3a3f26e49078302e1c1b38f6752342c77e3cf72ce91ca69fb1bc1", - "sha256:df3de6b7726b52966edf29663e57306b23ef775faf0ac01a3e9f4012a24a4140", - "sha256:e1940dae14e715e2e02dfd5b0f64a52e8374a517a1e531ad9412319dc3ac7879", - "sha256:e4df1e3b3bec320790f699890d41c59d250f6beda159ea3c44c3f5bac1976940", - "sha256:e6900ecdd50ce0facf703f7a00df12374b74bbc8ad9fe0f6559947fb20f82364", - "sha256:ea438162a9fcbee3ecf36c23e6c68237479f89f962f82dae83dc15feeceb37e4", - "sha256:eb851b7df9dda52dc1415ebee12362047ce771fc36914586b2e9fcbd7d293b3e", - "sha256:ec31a99ca63bf3cd7f1a5ac9fe95c5e2d060d3c768a09bc1d16e235840861420", - "sha256:f0475242f447cc6cb8a9dd486d68b2ef7fbee84427124c232bff5f63b1fe11e5", - "sha256:f2fbf7db2012d4876fb0d66b5b9ba6591197b0f165db8d99371d976546472a24", - "sha256:f60012a73aa396be721558caa3a6fd49b3dd0033d1675c6d59c4502e870fcf0c", - "sha256:f8e604fe73ba048c06085beaf51147eaec7df856824bfe7b98657cf436623daf", - "sha256:f90a4cd061914a60bd51c68bcb4357086991bd0bb93d8aa66a6da7701370708f", - "sha256:f918a1a130a6dfe1d7fe0f105064141342e7dd1611f2e6a21cd2f5c8cb1cfb3e", - "sha256:fa518bcd7600c584bf42e6617ee8132869e877db2f76bcdc281ec6a4113a53ab", - "sha256:faefcc78f53a88f3076b7f8be0a8f8d35133a3ecf7f3770895c25f8813460f08", - "sha256:fcaeb7b57f1a1e071ebd748984359fef83ecb026325b9d4ca847c95bc7311c92", - "sha256:fd2d84f40633bc475ef2d5490b9c19543fbf18596dcb1b291e3a12ea5d722f7a", - "sha256:fdfc3a892927458d98f3d55428ae46b921d1f7543b89382fdb483f5640daaec8" - ], - "markers": "python_version >= '3.8'", - "version": "==0.20.0" + "sha256:031819f906bb146561af051c7cef4ba2003d28cff07efacef59da973ff7969ba", + "sha256:0626238a43152918f9e72ede9a3b6ccc9e299adc8ade0d67c5e142d564c9a83d", + "sha256:085ed25baac88953d4283e5b5bd094b155075bb40d07c29c4f073e10623f9f2e", + "sha256:0a9e0759e7be10109645a9fddaaad0619d58c9bf30a3f248a2ea57a7c417173a", + "sha256:0c025820b78817db6a76413fff6866790786c38f95ea3f3d3c93dbb73b632202", + "sha256:1ff2eba7f6c0cb523d7e9cff0903f2fe1feff8f0b2ceb6bd71c0e20a4dcee271", + "sha256:20cc1ed0bcc86d8e1a7e968cce15be45178fd16e2ff656a243145e0b439bd250", + "sha256:241e6c125568493f553c3d0fdbb38c74babf54b45cef86439d4cd97ff8feb34d", + "sha256:2c51d99c30091f72a3c5d126fad26236c3f75716b8b5e5cf8effb18889ced928", + "sha256:2d6129137f43f7fa02d41542ffff4871d4aefa724a5fe38e2c31a4e0fd343fb0", + "sha256:30b912c965b2aa76ba5168fd610087bad7fcde47f0a8367ee8f1876086ee6d1d", + "sha256:30bdc973f10d28e0337f71d202ff29345320f8bc49a31c90e6c257e1ccef4333", + "sha256:320c808df533695326610a1b6a0a6e98f033e49de55d7dc36a13c8a30cfa756e", + "sha256:32eb88c30b6a4f0605508023b7141d043a79b14acb3b969aa0b4f99b25bc7d4a", + "sha256:3b766a9f57663396e4f34f5140b3595b233a7b146e94777b97a8413a1da1be18", + "sha256:3b929c2bb6e29ab31f12a1117c39f7e6d6450419ab7464a4ea9b0b417174f044", + "sha256:3e30a69a706e8ea20444b98a49f386c17b26f860aa9245329bab0851ed100677", + "sha256:3e53861b29a13d5b70116ea4230b5f0f3547b2c222c5daa090eb7c9c82d7f664", + "sha256:40c91c6e34cf016fa8e6b59d75e3dbe354830777fcfd74c58b279dceb7975b75", + "sha256:4991ca61656e3160cdaca4851151fd3f4a92e9eba5c7a530ab030d6aee96ec89", + "sha256:4ab2c2a26d2f69cdf833174f4d9d86118edc781ad9a8fa13970b527bf8236027", + "sha256:4e8921a259f54bfbc755c5bbd60c82bb2339ae0324163f32868f63f0ebb873d9", + "sha256:4eb2de8a147ffe0626bfdc275fc6563aa7bf4b6db59cf0d44f0ccd6ca625a24e", + "sha256:5145282a7cd2ac16ea0dc46b82167754d5e103a05614b724457cffe614f25bd8", + "sha256:520ed8b99b0bf86a176271f6fe23024323862ac674b1ce5b02a72bfeff3fff44", + "sha256:52c041802a6efa625ea18027a0723676a778869481d16803481ef6cc02ea8cb3", + "sha256:5555db3e618a77034954b9dc547eae94166391a98eb867905ec8fcbce1308d95", + "sha256:58a0e345be4b18e6b8501d3b0aa540dad90caeed814c515e5206bb2ec26736fd", + "sha256:590ef88db231c9c1eece44dcfefd7515d8bf0d986d64d0caf06a81998a9e8cab", + "sha256:5afb5efde74c54724e1a01118c6e5c15e54e642c42a1ba588ab1f03544ac8c7a", + "sha256:688c93b77e468d72579351a84b95f976bd7b3e84aa6686be6497045ba84be560", + "sha256:6b4ef7725386dc0762857097f6b7266a6cdd62bfd209664da6712cb26acef035", + "sha256:6bc0e697d4d79ab1aacbf20ee5f0df80359ecf55db33ff41481cf3e24f206919", + "sha256:6dcc4949be728ede49e6244eabd04064336012b37f5c2200e8ec8eb2988b209c", + "sha256:6f54e7106f0001244a5f4cf810ba8d3f9c542e2730821b16e969d6887b664266", + "sha256:808f1ac7cf3b44f81c9475475ceb221f982ef548e44e024ad5f9e7060649540e", + "sha256:8404b3717da03cbf773a1d275d01fec84ea007754ed380f63dfc24fb76ce4592", + "sha256:878f6fea96621fda5303a2867887686d7a198d9e0f8a40be100a63f5d60c88c9", + "sha256:8a7ff941004d74d55a47f916afc38494bd1cfd4b53c482b77c03147c91ac0ac3", + "sha256:95a5bad1ac8a5c77b4e658671642e4af3707f095d2b78a1fdd08af0dfb647624", + "sha256:97ef67d9bbc3e15584c2f3c74bcf064af36336c10d2e21a2131e123ce0f924c9", + "sha256:98486337f7b4f3c324ab402e83453e25bb844f44418c066623db88e4c56b7c7b", + "sha256:98e4fe5db40db87ce1c65031463a760ec7906ab230ad2249b4572c2fc3ef1f9f", + "sha256:998a8080c4495e4f72132f3d66ff91f5997d799e86cec6ee05342f8f3cda7dca", + "sha256:9afe42102b40007f588666bc7de82451e10c6788f6f70984629db193849dced1", + "sha256:9e20da3957bdf7824afdd4b6eeb29510e83e026473e04952dca565170cd1ecc8", + "sha256:a017f813f24b9df929674d0332a374d40d7f0162b326562daae8066b502d0590", + "sha256:a429b99337062877d7875e4ff1a51fe788424d522bd64a8c0a20ef3021fdb6ed", + "sha256:a58ce66847711c4aa2ecfcfaff04cb0327f907fead8945ffc47d9407f41ff952", + "sha256:a78d8b634c9df7f8d175451cfeac3810a702ccb85f98ec95797fa98b942cea11", + "sha256:a89a8ce9e4e75aeb7fa5d8ad0f3fecdee813802592f4f46a15754dcb2fd6b061", + "sha256:a8eeec67590e94189f434c6d11c426892e396ae59e4801d17a93ac96b8c02a6c", + "sha256:aaeb25ccfb9b9014a10eaf70904ebf3f79faaa8e60e99e19eef9f478651b9b74", + "sha256:ad116dda078d0bc4886cb7840e19811562acdc7a8e296ea6ec37e70326c1b41c", + "sha256:af04ac89c738e0f0f1b913918024c3eab6e3ace989518ea838807177d38a2e94", + "sha256:af4a644bf890f56e41e74be7d34e9511e4954894d544ec6b8efe1e21a1a8da6c", + "sha256:b21747f79f360e790525e6f6438c7569ddbfb1b3197b9e65043f25c3c9b489d8", + "sha256:b229ce052ddf1a01c67d68166c19cb004fb3612424921b81c46e7ea7ccf7c3bf", + "sha256:b4de1da871b5c0fd5537b26a6fc6814c3cc05cabe0c941db6e9044ffbb12f04a", + "sha256:b80b4690bbff51a034bfde9c9f6bf9357f0a8c61f548942b80f7b66356508bf5", + "sha256:b876f2bc27ab5954e2fd88890c071bd0ed18b9c50f6ec3de3c50a5ece612f7a6", + "sha256:b8f107395f2f1d151181880b69a2869c69e87ec079c49c0016ab96860b6acbe5", + "sha256:b9b76e2afd585803c53c5b29e992ecd183f68285b62fe2668383a18e74abe7a3", + "sha256:c2b2f71c6ad6c2e4fc9ed9401080badd1469fa9889657ec3abea42a3d6b2e1ed", + "sha256:c3761f62fcfccf0864cc4665b6e7c3f0c626f0380b41b8bd1ce322103fa3ef87", + "sha256:c38dbf31c57032667dd5a2f0568ccde66e868e8f78d5a0d27dcc56d70f3fcd3b", + "sha256:ca9989d5d9b1b300bc18e1801c67b9f6d2c66b8fd9621b36072ed1df2c977f72", + "sha256:cbd7504a10b0955ea287114f003b7ad62330c9e65ba012c6223dba646f6ffd05", + "sha256:d167e4dbbdac48bd58893c7e446684ad5d425b407f9336e04ab52e8b9194e2ed", + "sha256:d2132377f9deef0c4db89e65e8bb28644ff75a18df5293e132a8d67748397b9f", + "sha256:da52d62a96e61c1c444f3998c434e8b263c384f6d68aca8274d2e08d1906325c", + "sha256:daa8efac2a1273eed2354397a51216ae1e198ecbce9036fba4e7610b308b6153", + "sha256:dc5695c321e518d9f03b7ea6abb5ea3af4567766f9852ad1560f501b17588c7b", + "sha256:de552f4a1916e520f2703ec474d2b4d3f86d41f353e7680b597512ffe7eac5d0", + "sha256:de609a6f1b682f70bb7163da745ee815d8f230d97276db049ab447767466a09d", + "sha256:e12bb09678f38b7597b8346983d2323a6482dcd59e423d9448108c1be37cac9d", + "sha256:e168afe6bf6ab7ab46c8c375606298784ecbe3ba31c0980b7dcbb9631dcba97e", + "sha256:e78868e98f34f34a88e23ee9ccaeeec460e4eaf6db16d51d7a9b883e5e785a5e", + "sha256:e860f065cc4ea6f256d6f411aba4b1251255366e48e972f8a347cf88077b24fd", + "sha256:ea3a6ac4d74820c98fcc9da4a57847ad2cc36475a8bd9683f32ab6d47a2bd682", + "sha256:ebf64e281a06c904a7636781d2e973d1f0926a5b8b480ac658dc0f556e7779f4", + "sha256:ed6378c9d66d0de903763e7706383d60c33829581f0adff47b6535f1802fa6db", + "sha256:ee1e4fc267b437bb89990b2f2abf6c25765b89b72dd4a11e21934df449e0c976", + "sha256:ee4eafd77cc98d355a0d02f263efc0d3ae3ce4a7c24740010a8b4012bbb24937", + "sha256:efec946f331349dfc4ae9d0e034c263ddde19414fe5128580f512619abed05f1", + "sha256:f414da5c51bf350e4b7960644617c130140423882305f7574b6cf65a3081cecb", + "sha256:f71009b0d5e94c0e86533c0b27ed7cacc1239cb51c178fd239c3cfefefb0400a", + "sha256:f983e4c2f603c95dde63df633eec42955508eefd8d0f0e6d236d31a044c882d7", + "sha256:faa5e8496c530f9c71f2b4e1c49758b06e5f4055e17144906245c99fa6d45356", + "sha256:fed5dfefdf384d6fe975cc026886aece4f292feaf69d0eeb716cfd3c5a4dd8be" + ], + "markers": "python_version >= '3.9'", + "version": "==0.21.0" }, "s3transfer": { "hashes": [ - "sha256:0711534e9356d3cc692fdde846b4a1e4b0cb6519971860796e6bc4c7aea00ef6", - "sha256:eca1c20de70a39daee580aef4986996620f365c4e0fda6a86100231d62f1bf69" + "sha256:263ed587a5803c6c708d3ce44dc4dfedaab4c1a32e8329bab818933d79ddcf5d", + "sha256:4f50ed74ab84d474ce614475e0b8d5047ff080810aac5d01ea25231cfc944b0c" ], "markers": "python_version >= '3.8'", - "version": "==0.10.2" + "version": "==0.10.3" }, "sentry-sdk": { "hashes": [ @@ -1546,6 +1715,123 @@ "markers": "python_version >= '3.12'", "version": "==69.5.1" }, + "simplejson": { + "hashes": [ + "sha256:01c6657485393f2e9b8177c77a7634f13ebe70d5e6de150aae1677d91516ce6b", + "sha256:0552eb06e7234da892e1d02365cd2b7b2b1f8233aa5aabdb2981587b7cc92ea0", + "sha256:06662392e4913dc8846d6a71a6d5de86db5fba244831abe1dd741d62a4136764", + "sha256:0733ecd95ae03ae718ec74aad818f5af5f3155d596f7b242acbc1621e765e5fb", + "sha256:0766ca6222b410e08e0053a0dda3606cafb3973d5d00538307f631bb59743396", + "sha256:0791f64fed7d4abad639491f8a6b1ba56d3c604eb94b50f8697359b92d983f36", + "sha256:08f9b443a94e72dd02c87098c96886d35790e79e46b24e67accafbf13b73d43b", + "sha256:0959e6cb62e3994b5a40e31047ff97ef5c4138875fae31659bead691bed55896", + "sha256:0a32859d45d7b85fb803bb68f6bee14526991a1190269116c33399fa0daf9bbf", + "sha256:0b5ddd2c7d1d3f4d23224bc8a04bbf1430ae9a8149c05b90f8fc610f7f857a23", + "sha256:0bc5544e3128891bf613b9f71813ee2ec9c11574806f74dd8bb84e5e95bf64a2", + "sha256:101a3c8392028cd704a93c7cba8926594e775ca3c91e0bee82144e34190903f1", + "sha256:1069143a8fb3905e1bc0696c62be7e3adf812e9f1976ac9ae15b05112ff57cc9", + "sha256:1773cabfba66a6337b547e45dafbd471b09487370bcab75bd28f626520410d29", + "sha256:1a53a07320c5ff574d8b1a89c937ce33608832f166f39dff0581ac43dc979abd", + "sha256:1bd41f2cb1a2c57656ceff67b12d005cb255c728265e222027ad73193a04005a", + "sha256:1c49eeb94b8f09dc8a5843c156a22b8bde6aa1ddc65ca8ddc62dddcc001e6a2d", + "sha256:1df0aaf1cb787fdf34484ed4a1f0c545efd8811f6028623290fef1a53694e597", + "sha256:1e557712fc79f251673aeb3fad3501d7d4da3a27eff0857af2e1d1afbbcf6685", + "sha256:1e662336db50ad665777e6548b5076329a94a0c3d4a0472971c588b3ef27de3a", + "sha256:212fce86a22188b0c7f53533b0f693ea9605c1a0f02c84c475a30616f55a744d", + "sha256:23228037dc5d41c36666384062904d74409a62f52283d9858fa12f4c22cffad1", + "sha256:23833ee7e791ec968b744dfee2a2d39df7152050051096caf4296506d75608d8", + "sha256:256e09d0f94d9c3d177d9e95fd27a68c875a4baa2046633df387b86b652f5747", + "sha256:2876027ebdd599d730d36464debe84619b0368e9a642ca6e7c601be55aed439e", + "sha256:2a6a750d3c7461b1c47cfc6bba8d9e57a455e7c5f80057d2a82f738040dd1129", + "sha256:2a954b30810988feeabde843e3263bf187697e0eb5037396276db3612434049b", + "sha256:2b737a5fefedb8333fa50b8db3dcc9b1d18fd6c598f89fa7debff8b46bf4e511", + "sha256:2c78293470313aefa9cfc5e3f75ca0635721fb016fb1121c1c5b0cb8cc74712a", + "sha256:2f56eb03bc9e432bb81adc8ecff2486d39feb371abb442964ffb44f6db23b332", + "sha256:32a3ada8f3ea41db35e6d37b86dade03760f804628ec22e4fe775b703d567426", + "sha256:37105d1d708365b91165e1a6e505bdecc88637091348cf4b6adcdcb4f5a5fb8b", + "sha256:3bbcdc438dc1683b35f7a8dc100960c721f922f9ede8127f63bed7dfded4c64c", + "sha256:3dc5c1a85ff388e98ea877042daec3d157b6db0d85bac6ba5498034689793e7e", + "sha256:42e5acf80d4d971238d4df97811286a044d720693092b20a56d5e56b7dcc5d09", + "sha256:49549e3d81ab4a58424405aa545602674d8c35c20e986b42bb8668e782a94bac", + "sha256:49cc4c7b940d43bd12bf87ec63f28cbc4964fc4e12c031cc8cd01650f43eb94e", + "sha256:4a0710d1a5e41c4f829caa1572793dd3130c8d65c2b194c24ff29c4c305c26e0", + "sha256:4dfa420bb9225dd33b6efdabde7c6a671b51150b9b1d9c4e5cd74d3b420b3fe1", + "sha256:50d8b742d74c449c4dcac570d08ce0f21f6a149d2d9cf7652dbf2ba9a1bc729a", + "sha256:56134bbafe458a7b21f6fddbf889d36bec6d903718f4430768e3af822f8e27c2", + "sha256:5bf6a3b9a7d7191471b464fe38f684df10eb491ec9ea454003edb45a011ab187", + "sha256:5d9e8f836688a8fabe6a6b41b334aa550a6823f7b4ac3d3712fc0ad8655be9a8", + "sha256:619756f1dd634b5bdf57d9a3914300526c3b348188a765e45b8b08eabef0c94e", + "sha256:6300680d83a399be2b8f3b0ef7ef90b35d2a29fe6e9c21438097e0938bbc1564", + "sha256:637c4d4b81825c1f4d651e56210bd35b5604034b192b02d2d8f17f7ce8c18f42", + "sha256:66a0399e21c2112acacfebf3d832ebe2884f823b1c7e6d1363f2944f1db31a99", + "sha256:67a20641afebf4cfbcff50061f07daad1eace6e7b31d7622b6fa2c40d43900ba", + "sha256:6890ff9cf0bd2e1d487e2a8869ebd620a44684c0a9667fa5ee751d099d5d84c8", + "sha256:6d43e24b88c80f997081503f693be832fc90854f278df277dd54f8a4c847ab61", + "sha256:6ef9383c5e05f445be60f1735c1816163c874c0b1ede8bb4390aff2ced34f333", + "sha256:6f455672f4738b0f47183c5896e3606cd65c9ddee3805a4d18e8c96aa3f47c84", + "sha256:6fea0716c593dabb4392c4996d4e902a83b2428e6da82938cf28a523a11eb277", + "sha256:7017329ca8d4dca94ad5e59f496e5fc77630aecfc39df381ffc1d37fb6b25832", + "sha256:7137e69c6781ecf23afab064be94a277236c9cba31aa48ff1a0ec3995c69171e", + "sha256:72e8abbc86fcac83629a030888b45fed3a404d54161118be52cb491cd6975d3e", + "sha256:7355c7203353c36d46c4e7b6055293b3d2be097bbc5e2874a2b8a7259f0325dd", + "sha256:76f8c28fe2d426182405b18ddf3001fce47835a557dc15c3d8bdea01c03361da", + "sha256:7923878b7a0142d39763ec2dbecff3053c1bedd3653585a8474666e420fe83f5", + "sha256:7a7bfad839c624e139a4863007233a3f194e7c51551081f9789cba52e4da5167", + "sha256:7b5c472099b39b274dcde27f1113db8d818c9aa3ba8f78cbb8ad04a4c1ac2118", + "sha256:7c0104b4b7d2c75ccedbf1d9d5a3bd2daa75e51053935a44ba012e2fd4c43752", + "sha256:7e062767ac165df9a46963f5735aa4eee0089ec1e48b3f2ec46182754b96f55e", + "sha256:7e2a098c21ad8924076a12b6c178965d88a0ad75d1de67e1afa0a66878f277a5", + "sha256:817abad79241ed4a507b3caf4d3f2be5079f39d35d4c550a061988986bffd2ec", + "sha256:83c87706265ae3028e8460d08b05f30254c569772e859e5ba61fe8af2c883468", + "sha256:89b35433186e977fa86ff1fd179c1fadff39cfa3afa1648dab0b6ca53153acd9", + "sha256:8e086896c36210ab6050f2f9f095a5f1e03c83fa0e7f296d6cba425411364680", + "sha256:8f41bb5370b34f63171e65fdb00e12be1d83675cecb23e627df26f4c88dfc021", + "sha256:934a50a614fb831614db5dbfba35127ee277624dda4d15895c957d2f5d48610c", + "sha256:93be280fc69a952c76e261036312c20b910e7fa9e234f1d89bdfe3fa34f8a023", + "sha256:951095be8d4451a7182403354c22ec2de3e513e0cc40408b689af08d02611588", + "sha256:a0782cb9bf827f0c488b6aa0f2819f618308a3caf2973cfd792e45d631bec4db", + "sha256:ab69f811a660c362651ae395eba8ce84f84c944cea0df5718ea0ba9d1e4e7252", + "sha256:ad0e0b1ce9bd3edb5cf64b5b5b76eacbfdac8c5367153aeeec8a8b1407f68342", + "sha256:add8850db04b98507a8b62d248a326ecc8561e6d24336d1ca5c605bbfaab4cad", + "sha256:afab2f7f2486a866ff04d6d905e9386ca6a231379181a3838abce1f32fbdcc37", + "sha256:b5587feda2b65a79da985ae6d116daf6428bf7489992badc29fc96d16cd27b05", + "sha256:b9198c1f1f8910a3b86b60f4fe2556d9d28d3fefe35bffe6be509a27402e694d", + "sha256:bc164f32dd9691e7082ce5df24b4cf8c6c394bbf9bdeeb5d843127cd07ab8ad2", + "sha256:bcde83a553a96dc7533736c547bddaa35414a2566ab0ecf7d3964fc4bdb84c11", + "sha256:c40df31a75de98db2cdfead6074d4449cd009e79f54c1ebe5e5f1f153c68ad20", + "sha256:c4f614581b61a26fbbba232a1391f6cee82bc26f2abbb6a0b44a9bba25c56a1c", + "sha256:c9bedebdc5fdad48af8783022bae307746d54006b783007d1d3c38e10872a2c6", + "sha256:cb324bb903330cbb35d87cce367a12631cd5720afa06e5b9c906483970946da6", + "sha256:d00313681015ac498e1736b304446ee6d1c72c5b287cd196996dad84369998f7", + "sha256:d0b0efc7279d768db7c74d3d07f0b5c81280d16ae3fb14e9081dc903e8360771", + "sha256:d0d5a63f1768fed7e78cf55712dee81f5a345e34d34224f3507ebf71df2b754d", + "sha256:d1b8b4d6379fe55f471914345fe6171d81a18649dacf3248abfc9c349b4442eb", + "sha256:d36608557b4dcd7a62c29ad4cd7c5a1720bbf7dc942eff9dc42d2c542a5f042d", + "sha256:d43c2d7504eda566c50203cdc9dc043aff6f55f1b7dae0dcd79dfefef9159d1c", + "sha256:d73efb03c5b39249c82488a994f0998f9e4399e3d085209d2120503305ba77a8", + "sha256:d936ae682d5b878af9d9eb4d8bb1fdd5e41275c8eb59ceddb0aeed857bb264a2", + "sha256:dd011fc3c1d88b779645495fdb8189fb318a26981eebcce14109460e062f209b", + "sha256:dd5b9b1783e14803e362a558680d88939e830db2466f3fa22df5c9319f8eea94", + "sha256:dd6a7dabcc4c32daf601bc45e01b79175dde4b52548becea4f9545b0a4428169", + "sha256:dd7230d061e755d60a4d5445bae854afe33444cdb182f3815cff26ac9fb29a15", + "sha256:e0d2b00ecbcd1a3c5ea1abc8bb99a26508f758c1759fd01c3be482a3655a176f", + "sha256:e1a1452ad5723ff129b081e3c8aa4ba56b8734fee4223355ed7b815a7ece69bc", + "sha256:e88abff510dcff903a18d11c2a75f9964e768d99c8d147839913886144b2065e", + "sha256:ea7a4a998c87c5674a27089e022110a1a08a7753f21af3baf09efe9915c23c3c", + "sha256:eb47ee773ce67476a960e2db4a0a906680c54f662521550828c0cc57d0099426", + "sha256:eed8cd98a7b24861da9d3d937f5fbfb6657350c547528a117297fe49e3960667", + "sha256:ef28c3b328d29b5e2756903aed888960bc5df39b4c2eab157ae212f70ed5bf74", + "sha256:ef59a53be400c1fad2c914b8d74c9d42384fed5174f9321dd021b7017fd40270", + "sha256:f39caec26007a2d0efab6b8b1d74873ede9351962707afab622cc2285dd26ed0", + "sha256:f8efb03ca77bd7725dfacc9254df00d73e6f43013cf39bd37ef1a8ed0ebb5165", + "sha256:fa97278ae6614346b5ca41a45a911f37a3261b57dbe4a00602048652c862c28b", + "sha256:fc3dc9fb413fc34c396f52f4c87de18d0bd5023804afa8ab5cc224deeb6a9900", + "sha256:ff7bc1bbdaa3e487c9469128bf39408e91f5573901cb852e03af378d3582c52d" + ], + "index": "pypi", + "markers": "python_version >= '2.5' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==3.19.3" + }, "six": { "hashes": [ "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", @@ -1587,26 +1873,26 @@ }, "types-redis": { "hashes": [ - "sha256:0e7537e5c085fe96b7d468d5edae0cf667b4ba4b62c6e4a5dfc340bd3b868c23", - "sha256:4bab1a378dbf23c2c95c370dfdb89a8f033957c4fd1a53fee71b529c182fe008" + "sha256:5f17d2b3f9091ab75384153bfa276619ffa1cf6a38da60e10d5e6749cc5b902e", + "sha256:ef5da68cb827e5f606c8f9c0b49eeee4c2669d6d97122f301d3a55dc6a63f6ed" ], "markers": "python_version >= '3.8'", - "version": "==4.6.0.20240903" + "version": "==4.6.0.20241004" }, "types-setuptools": { "hashes": [ - "sha256:06f78307e68d1bbde6938072c57b81cf8a99bc84bd6dc7e4c5014730b097dc0c", - "sha256:12f12a165e7ed383f31def705e5c0fa1c26215dd466b0af34bd042f7d5331f55" + "sha256:78cb5fef4a6056d2f37114d27da90f4655a306e4e38042d7034a8a880bc3f5dd", + "sha256:f9e1ebd17a56f606e16395c4ee4efa1cdc394b9a2a0ee898a624058b4b62ef8f" ], "markers": "python_version >= '3.8'", - "version": "==75.1.0.20240917" + "version": "==75.3.0.20241112" }, "typing-extensions": { "hashes": [ "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8" ], - "markers": "python_version < '3.13'", + "markers": "python_version >= '3.8'", "version": "==4.12.2" }, "tzdata": { @@ -1665,101 +1951,91 @@ }, "yarl": { "hashes": [ - "sha256:08d7148ff11cb8e886d86dadbfd2e466a76d5dd38c7ea8ebd9b0e07946e76e4b", - "sha256:098b870c18f1341786f290b4d699504e18f1cd050ed179af8123fd8232513424", - "sha256:11b3ca8b42a024513adce810385fcabdd682772411d95bbbda3b9ed1a4257644", - "sha256:1891d69a6ba16e89473909665cd355d783a8a31bc84720902c5911dbb6373465", - "sha256:1bbb418f46c7f7355084833051701b2301092e4611d9e392360c3ba2e3e69f88", - "sha256:1d0828e17fa701b557c6eaed5edbd9098eb62d8838344486248489ff233998b8", - "sha256:1d8e3ca29f643dd121f264a7c89f329f0fcb2e4461833f02de6e39fef80f89da", - "sha256:1fa56f34b2236f5192cb5fceba7bbb09620e5337e0b6dfe2ea0ddbd19dd5b154", - "sha256:216a6785f296169ed52cd7dcdc2612f82c20f8c9634bf7446327f50398732a51", - "sha256:22b739f99c7e4787922903f27a892744189482125cc7b95b747f04dd5c83aa9f", - "sha256:2430cf996113abe5aee387d39ee19529327205cda975d2b82c0e7e96e5fdabdc", - "sha256:269c201bbc01d2cbba5b86997a1e0f73ba5e2f471cfa6e226bcaa7fd664b598d", - "sha256:298c1eecfd3257aa16c0cb0bdffb54411e3e831351cd69e6b0739be16b1bdaa8", - "sha256:2a93a4557f7fc74a38ca5a404abb443a242217b91cd0c4840b1ebedaad8919d4", - "sha256:2b2442a415a5f4c55ced0fade7b72123210d579f7d950e0b5527fc598866e62c", - "sha256:2db874dd1d22d4c2c657807562411ffdfabec38ce4c5ce48b4c654be552759dc", - "sha256:309c104ecf67626c033845b860d31594a41343766a46fa58c3309c538a1e22b2", - "sha256:31497aefd68036d8e31bfbacef915826ca2e741dbb97a8d6c7eac66deda3b606", - "sha256:373f16f38721c680316a6a00ae21cc178e3a8ef43c0227f88356a24c5193abd6", - "sha256:396e59b8de7e4d59ff5507fb4322d2329865b909f29a7ed7ca37e63ade7f835c", - "sha256:3bb83a0f12701c0b91112a11148b5217617982e1e466069d0555be9b372f2734", - "sha256:3de86547c820e4f4da4606d1c8ab5765dd633189791f15247706a2eeabc783ae", - "sha256:3fdbf0418489525231723cdb6c79e7738b3cbacbaed2b750cb033e4ea208f220", - "sha256:40c6e73c03a6befb85b72da213638b8aaa80fe4136ec8691560cf98b11b8ae6e", - "sha256:44a4c40a6f84e4d5955b63462a0e2a988f8982fba245cf885ce3be7618f6aa7d", - "sha256:44b07e1690f010c3c01d353b5790ec73b2f59b4eae5b0000593199766b3f7a5c", - "sha256:45d23c4668d4925688e2ea251b53f36a498e9ea860913ce43b52d9605d3d8177", - "sha256:45f209fb4bbfe8630e3d2e2052535ca5b53d4ce2d2026bed4d0637b0416830da", - "sha256:4afdf84610ca44dcffe8b6c22c68f309aff96be55f5ea2fa31c0c225d6b83e23", - "sha256:4feaaa4742517eaceafcbe74595ed335a494c84634d33961214b278126ec1485", - "sha256:576365c9f7469e1f6124d67b001639b77113cfd05e85ce0310f5f318fd02fe85", - "sha256:5820bd4178e6a639b3ef1db8b18500a82ceab6d8b89309e121a6859f56585b05", - "sha256:5989a38ba1281e43e4663931a53fbf356f78a0325251fd6af09dd03b1d676a09", - "sha256:5a9bacedbb99685a75ad033fd4de37129449e69808e50e08034034c0bf063f99", - "sha256:5b66c87da3c6da8f8e8b648878903ca54589038a0b1e08dde2c86d9cd92d4ac9", - "sha256:5c5e32fef09ce101fe14acd0f498232b5710effe13abac14cd95de9c274e689e", - "sha256:658e8449b84b92a4373f99305de042b6bd0d19bf2080c093881e0516557474a5", - "sha256:6a2acde25be0cf9be23a8f6cbd31734536a264723fca860af3ae5e89d771cd71", - "sha256:6a5185ad722ab4dd52d5fb1f30dcc73282eb1ed494906a92d1a228d3f89607b0", - "sha256:6b7f6e699304717fdc265a7e1922561b02a93ceffdaefdc877acaf9b9f3080b8", - "sha256:703b0f584fcf157ef87816a3c0ff868e8c9f3c370009a8b23b56255885528f10", - "sha256:7055bbade838d68af73aea13f8c86588e4bcc00c2235b4b6d6edb0dbd174e246", - "sha256:78f271722423b2d4851cf1f4fa1a1c4833a128d020062721ba35e1a87154a049", - "sha256:7addd26594e588503bdef03908fc207206adac5bd90b6d4bc3e3cf33a829f57d", - "sha256:81bad32c8f8b5897c909bf3468bf601f1b855d12f53b6af0271963ee67fff0d2", - "sha256:82e692fb325013a18a5b73a4fed5a1edaa7c58144dc67ad9ef3d604eccd451ad", - "sha256:84bbcdcf393139f0abc9f642bf03f00cac31010f3034faa03224a9ef0bb74323", - "sha256:86c438ce920e089c8c2388c7dcc8ab30dfe13c09b8af3d306bcabb46a053d6f7", - "sha256:8be8cdfe20787e6a5fcbd010f8066227e2bb9058331a4eccddec6c0db2bb85b2", - "sha256:8c723c91c94a3bc8033dd2696a0f53e5d5f8496186013167bddc3fb5d9df46a3", - "sha256:8ca53632007c69ddcdefe1e8cbc3920dd88825e618153795b57e6ebcc92e752a", - "sha256:8f722f30366474a99745533cc4015b1781ee54b08de73260b2bbe13316079851", - "sha256:942c80a832a79c3707cca46bd12ab8aa58fddb34b1626d42b05aa8f0bcefc206", - "sha256:94a993f976cdcb2dc1b855d8b89b792893220db8862d1a619efa7451817c836b", - "sha256:95c6737f28069153c399d875317f226bbdea939fd48a6349a3b03da6829fb550", - "sha256:9915300fe5a0aa663c01363db37e4ae8e7c15996ebe2c6cce995e7033ff6457f", - "sha256:9a18595e6a2ee0826bf7dfdee823b6ab55c9b70e8f80f8b77c37e694288f5de1", - "sha256:9c8854b9f80693d20cec797d8e48a848c2fb273eb6f2587b57763ccba3f3bd4b", - "sha256:9cec42a20eae8bebf81e9ce23fb0d0c729fc54cf00643eb251ce7c0215ad49fe", - "sha256:9d2e1626be8712333a9f71270366f4a132f476ffbe83b689dd6dc0d114796c74", - "sha256:9d74f3c335cfe9c21ea78988e67f18eb9822f5d31f88b41aec3a1ec5ecd32da5", - "sha256:9fb4134cc6e005b99fa29dbc86f1ea0a298440ab6b07c6b3ee09232a3b48f495", - "sha256:a0ae6637b173d0c40b9c1462e12a7a2000a71a3258fa88756a34c7d38926911c", - "sha256:a31d21089894942f7d9a8df166b495101b7258ff11ae0abec58e32daf8088813", - "sha256:a3442c31c11088e462d44a644a454d48110f0588de830921fd201060ff19612a", - "sha256:ab9524e45ee809a083338a749af3b53cc7efec458c3ad084361c1dbf7aaf82a2", - "sha256:b1481c048fe787f65e34cb06f7d6824376d5d99f1231eae4778bbe5c3831076d", - "sha256:b8c837ab90c455f3ea8e68bee143472ee87828bff19ba19776e16ff961425b57", - "sha256:bbf2c3f04ff50f16404ce70f822cdc59760e5e2d7965905f0e700270feb2bbfc", - "sha256:bbf9c2a589be7414ac4a534d54e4517d03f1cbb142c0041191b729c2fa23f320", - "sha256:bcd5bf4132e6a8d3eb54b8d56885f3d3a38ecd7ecae8426ecf7d9673b270de43", - "sha256:c14c16831b565707149c742d87a6203eb5597f4329278446d5c0ae7a1a43928e", - "sha256:c49f3e379177f4477f929097f7ed4b0622a586b0aa40c07ac8c0f8e40659a1ac", - "sha256:c92b89bffc660f1274779cb6fbb290ec1f90d6dfe14492523a0667f10170de26", - "sha256:cd66152561632ed4b2a9192e7f8e5a1d41e28f58120b4761622e0355f0fe034c", - "sha256:cf1ad338620249f8dd6d4b6a91a69d1f265387df3697ad5dc996305cf6c26fb2", - "sha256:d07b52c8c450f9366c34aa205754355e933922c79135125541daae6cbf31c799", - "sha256:d0d12fe78dcf60efa205e9a63f395b5d343e801cf31e5e1dda0d2c1fb618073d", - "sha256:d4ee1d240b84e2f213565f0ec08caef27a0e657d4c42859809155cf3a29d1735", - "sha256:d959fe96e5c2712c1876d69af0507d98f0b0e8d81bee14cfb3f6737470205419", - "sha256:dcaef817e13eafa547cdfdc5284fe77970b891f731266545aae08d6cce52161e", - "sha256:df4e82e68f43a07735ae70a2d84c0353e58e20add20ec0af611f32cd5ba43fb4", - "sha256:ec8cfe2295f3e5e44c51f57272afbd69414ae629ec7c6b27f5a410efc78b70a0", - "sha256:ec9dd328016d8d25702a24ee274932aebf6be9787ed1c28d021945d264235b3c", - "sha256:ef9b85fa1bc91c4db24407e7c4da93a5822a73dd4513d67b454ca7064e8dc6a3", - "sha256:f3bf60444269345d712838bb11cc4eadaf51ff1a364ae39ce87a5ca8ad3bb2c8", - "sha256:f452cc1436151387d3d50533523291d5f77c6bc7913c116eb985304abdbd9ec9", - "sha256:f7917697bcaa3bc3e83db91aa3a0e448bf5cde43c84b7fc1ae2427d2417c0224", - "sha256:f90575e9fe3aae2c1e686393a9689c724cd00045275407f71771ae5d690ccf38", - "sha256:fb382fd7b4377363cc9f13ba7c819c3c78ed97c36a82f16f3f92f108c787cbbf", - "sha256:fb9f59f3848edf186a76446eb8bcf4c900fe147cb756fbbd730ef43b2e67c6a7", - "sha256:fc2931ac9ce9c61c9968989ec831d3a5e6fcaaff9474e7cfa8de80b7aff5a093" - ], - "markers": "python_version >= '3.8'", - "version": "==1.13.1" + "sha256:06157fb3c58f2736a5e47c8fcbe1afc8b5de6fb28b14d25574af9e62150fcaac", + "sha256:067a63fcfda82da6b198fa73079b1ca40b7c9b7994995b6ee38acda728b64d47", + "sha256:0b1794853124e2f663f0ea54efb0340b457f08d40a1cef78edfa086576179c91", + "sha256:0bdff5e0995522706c53078f531fb586f56de9c4c81c243865dd5c66c132c3b5", + "sha256:117ed8b3732528a1e41af3aa6d4e08483c2f0f2e3d3d7dca7cf538b3516d93df", + "sha256:14bc88baa44e1f84164a392827b5defb4fa8e56b93fecac3d15315e7c8e5d8b3", + "sha256:1654ec814b18be1af2c857aa9000de7a601400bd4c9ca24629b18486c2e35463", + "sha256:16bca6678a83657dd48df84b51bd56a6c6bd401853aef6d09dc2506a78484c7b", + "sha256:1a3b91c44efa29e6c8ef8a9a2b583347998e2ba52c5d8280dbd5919c02dfc3b5", + "sha256:1a52a1ffdd824fb1835272e125385c32fd8b17fbdefeedcb4d543cc23b332d74", + "sha256:1ce36ded585f45b1e9bb36d0ae94765c6608b43bd2e7f5f88079f7a85c61a4d3", + "sha256:299f11b44d8d3a588234adbe01112126010bd96d9139c3ba7b3badd9829261c3", + "sha256:2b24ec55fad43e476905eceaf14f41f6478780b870eda5d08b4d6de9a60b65b4", + "sha256:2d374d70fdc36f5863b84e54775452f68639bc862918602d028f89310a034ab0", + "sha256:2d9f0606baaec5dd54cb99667fcf85183a7477f3766fbddbe3f385e7fc253299", + "sha256:2e7ba4c9377e48fb7b20dedbd473cbcbc13e72e1826917c185157a137dac9df2", + "sha256:2f0a6423295a0d282d00e8701fe763eeefba8037e984ad5de44aa349002562ac", + "sha256:327828786da2006085a4d1feb2594de6f6d26f8af48b81eb1ae950c788d97f61", + "sha256:380e6c38ef692b8fd5a0f6d1fa8774d81ebc08cfbd624b1bca62a4d4af2f9931", + "sha256:3b74ff4767d3ef47ffe0cd1d89379dc4d828d4873e5528976ced3b44fe5b0a21", + "sha256:3e844be8d536afa129366d9af76ed7cb8dfefec99f5f1c9e4f8ae542279a6dc3", + "sha256:459e81c2fb920b5f5df744262d1498ec2c8081acdcfe18181da44c50f51312f7", + "sha256:46ddf6e0b975cd680eb83318aa1d321cb2bf8d288d50f1754526230fcf59ba96", + "sha256:482c122b72e3c5ec98f11457aeb436ae4aecca75de19b3d1de7cf88bc40db82f", + "sha256:561c87fea99545ef7d692403c110b2f99dced6dff93056d6e04384ad3bc46243", + "sha256:578d00c9b7fccfa1745a44f4eddfdc99d723d157dad26764538fbdda37209857", + "sha256:58c8e9620eb82a189c6c40cb6b59b4e35b2ee68b1f2afa6597732a2b467d7e8f", + "sha256:5b29beab10211a746f9846baa39275e80034e065460d99eb51e45c9a9495bcca", + "sha256:5d1d42556b063d579cae59e37a38c61f4402b47d70c29f0ef15cee1acaa64488", + "sha256:5f236cb5999ccd23a0ab1bd219cfe0ee3e1c1b65aaf6dd3320e972f7ec3a39da", + "sha256:62a91aefff3d11bf60e5956d340eb507a983a7ec802b19072bb989ce120cd948", + "sha256:64cc6e97f14cf8a275d79c5002281f3040c12e2e4220623b5759ea7f9868d6a5", + "sha256:6f4c9156c4d1eb490fe374fb294deeb7bc7eaccda50e23775b2354b6a6739934", + "sha256:7294e38f9aa2e9f05f765b28ffdc5d81378508ce6dadbe93f6d464a8c9594473", + "sha256:7615058aabad54416ddac99ade09a5510cf77039a3b903e94e8922f25ed203d7", + "sha256:7e48cdb8226644e2fbd0bdb0a0f87906a3db07087f4de77a1b1b1ccfd9e93685", + "sha256:7f63d176a81555984e91f2c84c2a574a61cab7111cc907e176f0f01538e9ff6e", + "sha256:7f6595c852ca544aaeeb32d357e62c9c780eac69dcd34e40cae7b55bc4fb1147", + "sha256:7fac95714b09da9278a0b52e492466f773cfe37651cf467a83a1b659be24bf71", + "sha256:81713b70bea5c1386dc2f32a8f0dab4148a2928c7495c808c541ee0aae614d67", + "sha256:846dd2e1243407133d3195d2d7e4ceefcaa5f5bf7278f0a9bda00967e6326b04", + "sha256:84c063af19ef5130084db70ada40ce63a84f6c1ef4d3dbc34e5e8c4febb20822", + "sha256:881764d610e3269964fc4bb3c19bb6fce55422828e152b885609ec176b41cf11", + "sha256:8994b29c462de9a8fce2d591028b986dbbe1b32f3ad600b2d3e1c482c93abad6", + "sha256:8c79e9d7e3d8a32d4824250a9c6401194fb4c2ad9a0cec8f6a96e09a582c2cc0", + "sha256:8ee427208c675f1b6e344a1f89376a9613fc30b52646a04ac0c1f6587c7e46ec", + "sha256:949681f68e0e3c25377462be4b658500e85ca24323d9619fdc41f68d46a1ffda", + "sha256:9e275792097c9f7e80741c36de3b61917aebecc08a67ae62899b074566ff8556", + "sha256:9fb815155aac6bfa8d86184079652c9715c812d506b22cfa369196ef4e99d1b4", + "sha256:a2a64e62c7a0edd07c1c917b0586655f3362d2c2d37d474db1a509efb96fea1c", + "sha256:a7ac5b4984c468ce4f4a553df281450df0a34aefae02e58d77a0847be8d1e11f", + "sha256:aa46dce75078fceaf7cecac5817422febb4355fbdda440db55206e3bd288cfb8", + "sha256:ae3476e934b9d714aa8000d2e4c01eb2590eee10b9d8cd03e7983ad65dfbfcba", + "sha256:b0341e6d9a0c0e3cdc65857ef518bb05b410dbd70d749a0d33ac0f39e81a4258", + "sha256:b40d1bf6e6f74f7c0a567a9e5e778bbd4699d1d3d2c0fe46f4b717eef9e96b95", + "sha256:b5c4804e4039f487e942c13381e6c27b4b4e66066d94ef1fae3f6ba8b953f383", + "sha256:b5d6a6c9602fd4598fa07e0389e19fe199ae96449008d8304bf5d47cb745462e", + "sha256:b5f1ac7359e17efe0b6e5fec21de34145caef22b260e978336f325d5c84e6938", + "sha256:c0167540094838ee9093ef6cc2c69d0074bbf84a432b4995835e8e5a0d984374", + "sha256:c180ac742a083e109c1a18151f4dd8675f32679985a1c750d2ff806796165b55", + "sha256:c73df5b6e8fabe2ddb74876fb82d9dd44cbace0ca12e8861ce9155ad3c886139", + "sha256:c7e177c619342e407415d4f35dec63d2d134d951e24b5166afcdfd1362828e17", + "sha256:cbad927ea8ed814622305d842c93412cb47bd39a496ed0f96bfd42b922b4a217", + "sha256:cc353841428d56b683a123a813e6a686e07026d6b1c5757970a877195f880c2d", + "sha256:cc7c92c1baa629cb03ecb0c3d12564f172218fb1739f54bf5f3881844daadc6d", + "sha256:cc7d768260f4ba4ea01741c1b5fe3d3a6c70eb91c87f4c8761bbcce5181beafe", + "sha256:d0eea830b591dbc68e030c86a9569826145df485b2b4554874b07fea1275a199", + "sha256:d216e5d9b8749563c7f2c6f7a0831057ec844c68b4c11cb10fc62d4fd373c26d", + "sha256:d401f07261dc5aa36c2e4efc308548f6ae943bfff20fcadb0a07517a26b196d8", + "sha256:d6324274b4e0e2fa1b3eccb25997b1c9ed134ff61d296448ab8269f5ac068c4c", + "sha256:d8a8b74d843c2638f3864a17d97a4acda58e40d3e44b6303b8cc3d3c44ae2d29", + "sha256:d9b6b28a57feb51605d6ae5e61a9044a31742db557a3b851a74c13bc61de5172", + "sha256:de599af166970d6a61accde358ec9ded821234cbbc8c6413acfec06056b8e860", + "sha256:e594b22688d5747b06e957f1ef822060cb5cb35b493066e33ceac0cf882188b7", + "sha256:e5b078134f48552c4d9527db2f7da0b5359abd49393cdf9794017baec7506170", + "sha256:eb6dce402734575e1a8cc0bb1509afca508a400a57ce13d306ea2c663bad1138", + "sha256:f1790a4b1e8e8e028c391175433b9c8122c39b46e1663228158e61e6f915bf06", + "sha256:f5efe0661b9fcd6246f27957f6ae1c0eb29bc60552820f01e970b4996e016004", + "sha256:f9cbfbc5faca235fbdf531b93aa0f9f005ec7d267d9d738761a4d42b744ea159", + "sha256:fbea1751729afe607d84acfd01efd95e3b31db148a181a441984ce9b3d3469da", + "sha256:fca4b4307ebe9c3ec77a084da3a9d1999d164693d16492ca2b64594340999988", + "sha256:ff5c6771c7e3511a06555afa317879b7db8d640137ba55d6ab0d0c50425cab75" + ], + "markers": "python_version >= '3.9'", + "version": "==1.17.1" } }, "develop": { @@ -1809,19 +2085,19 @@ }, "botocore": { "hashes": [ - "sha256:4cee814875bc78656aef4011d3d6b2231e96f53ea3661ee428201afb579d5c31", - "sha256:f7bfa910cf2cbcc8c2307c1cf7b93495d614c2d699883417893e0a337fe4eb63" + "sha256:bcd66d7f55c8d1b6020eb86f2d87893fe591fb4be6a7d2a689c18be586452334", + "sha256:de0ce655fedfc02c87869dfaa3b622488a17ff37da316ef8106cbe1573b83c98" ], "markers": "python_version >= '3.8'", - "version": "==1.35.31" + "version": "==1.35.59" }, "botocore-stubs": { "hashes": [ - "sha256:b26f79253d8f2460aa8f2d49ae933c3f352fe38be72ea033651c15cd47a822a9", - "sha256:b7289c27b759dad40759c1421519cbd7ec65b79f7aa8be5dfc76004a61aef42b" + "sha256:1456af3358be1a0e49dd8428bfb81863406659d9fad871362bf18a098eeac90a", + "sha256:dd83003963ca957a6e4835d192d7f163fb55312ce3d3f798f625ac9438616e4f" ], "markers": "python_version >= '3.8'", - "version": "==1.35.31" + "version": "==1.35.59" }, "certifi": { "hashes": [ @@ -1841,99 +2117,114 @@ }, "charset-normalizer": { "hashes": [ - "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027", - "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087", - "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786", - "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8", - "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09", - "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185", - "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574", - "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e", - "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519", - "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898", - "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269", - "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3", - "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f", - "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6", - "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8", - "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a", - "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73", - "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc", - "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714", - "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2", - "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc", - "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce", - "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d", - "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e", - "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6", - "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269", - "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96", - "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d", - "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a", - "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4", - "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77", - "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d", - "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0", - "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed", - "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068", - "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac", - "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25", - "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8", - "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab", - "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26", - "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2", - "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db", - "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f", - "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5", - "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99", - "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c", - "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d", - "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811", - "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa", - "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a", - "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03", - "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b", - "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04", - "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c", - "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001", - "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458", - "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389", - "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99", - "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985", - "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537", - "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238", - "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f", - "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d", - "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796", - "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a", - "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143", - "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8", - "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c", - "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5", - "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5", - "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711", - "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4", - "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6", - "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c", - "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7", - "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4", - "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b", - "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae", - "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12", - "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c", - "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae", - "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8", - "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887", - "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b", - "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4", - "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f", - "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5", - "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33", - "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519", - "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561" + "sha256:0099d79bdfcf5c1f0c2c72f91516702ebf8b0b8ddd8905f97a8aecf49712c621", + "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6", + "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8", + "sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912", + "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c", + "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b", + "sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d", + "sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d", + "sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95", + "sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e", + "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565", + "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64", + "sha256:2006769bd1640bdf4d5641c69a3d63b71b81445473cac5ded39740a226fa88ab", + "sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be", + "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e", + "sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907", + "sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0", + "sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2", + "sha256:2f6c34da58ea9c1a9515621f4d9ac379871a8f21168ba1b5e09d74250de5ad62", + "sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62", + "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23", + "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc", + "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284", + "sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca", + "sha256:425c5f215d0eecee9a56cdb703203dda90423247421bf0d67125add85d0c4455", + "sha256:43193c5cda5d612f247172016c4bb71251c784d7a4d9314677186a838ad34858", + "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b", + "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594", + "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc", + "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db", + "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b", + "sha256:4ec9dd88a5b71abfc74e9df5ebe7921c35cbb3b641181a531ca65cdb5e8e4dea", + "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6", + "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920", + "sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749", + "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7", + "sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd", + "sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99", + "sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242", + "sha256:62f60aebecfc7f4b82e3f639a7d1433a20ec32824db2199a11ad4f5e146ef5ee", + "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129", + "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2", + "sha256:6b493a043635eb376e50eedf7818f2f322eabbaa974e948bd8bdd29eb7ef2a51", + "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee", + "sha256:6fd30dc99682dc2c603c2b315bded2799019cea829f8bf57dc6b61efde6611c8", + "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b", + "sha256:7706f5850360ac01d80c89bcef1640683cc12ed87f42579dab6c5d3ed6888613", + "sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742", + "sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe", + "sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3", + "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5", + "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631", + "sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7", + "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15", + "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c", + "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea", + "sha256:9289fd5dddcf57bab41d044f1756550f9e7cf0c8e373b8cdf0ce8773dc4bd417", + "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250", + "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88", + "sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca", + "sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa", + "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99", + "sha256:9c98230f5042f4945f957d006edccc2af1e03ed5e37ce7c373f00a5a4daa6149", + "sha256:9fa2566ca27d67c86569e8c85297aaf413ffab85a8960500f12ea34ff98e4c41", + "sha256:a14969b8691f7998e74663b77b4c36c0337cb1df552da83d5c9004a93afdb574", + "sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0", + "sha256:a8e538f46104c815be19c975572d74afb53f29650ea2025bbfaef359d2de2f7f", + "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d", + "sha256:aa693779a8b50cd97570e5a0f343538a8dbd3e496fa5dcb87e29406ad0299654", + "sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3", + "sha256:ab2e5bef076f5a235c3774b4f4028a680432cded7cad37bba0fd90d64b187d19", + "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90", + "sha256:af73657b7a68211996527dbfeffbb0864e043d270580c5aef06dc4b659a4b578", + "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9", + "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1", + "sha256:b8831399554b92b72af5932cdbbd4ddc55c55f631bb13ff8fe4e6536a06c5c51", + "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719", + "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236", + "sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a", + "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c", + "sha256:c3e446d253bd88f6377260d07c895816ebf33ffffd56c1c792b13bff9c3e1ade", + "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944", + "sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc", + "sha256:cab5d0b79d987c67f3b9e9c53f54a61360422a5a0bc075f43cab5621d530c3b6", + "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6", + "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27", + "sha256:d5b054862739d276e09928de37c79ddeec42a6e1bfc55863be96a36ba22926f6", + "sha256:dbe03226baf438ac4fda9e2d0715022fd579cb641c4cf639fa40d53b2fe6f3e2", + "sha256:dc15e99b2d8a656f8e666854404f1ba54765871104e50c8e9813af8a7db07f12", + "sha256:dcaf7c1524c0542ee2fc82cc8ec337f7a9f7edee2532421ab200d2b920fc97cf", + "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114", + "sha256:dd9a8bd8900e65504a305bf8ae6fa9fbc66de94178c420791d0293702fce2df7", + "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf", + "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d", + "sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b", + "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed", + "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03", + "sha256:f09cb5a7bbe1ecae6e87901a2eb23e0256bb524a79ccc53eb0b7629fbe7677c4", + "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67", + "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365", + "sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a", + "sha256:f3e73a4255342d4eb26ef6df01e3962e73aa29baa3124a8e824c5d3364a65748", + "sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b", + "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079", + "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482" ], "markers": "python_full_version >= '3.7.0'", - "version": "==3.3.2" + "version": "==3.4.0" }, "coverage": { "hashes": [ @@ -2053,10 +2344,10 @@ }, "distlib": { "hashes": [ - "sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784", - "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64" + "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87", + "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403" ], - "version": "==0.3.8" + "version": "==0.3.9" }, "django": { "hashes": [ @@ -2095,19 +2386,19 @@ }, "django-stubs": { "hashes": [ - "sha256:86128c228b65e6c9a85e5dc56eb1c6f41125917dae0e21e6cfecdf1b27e630c5", - "sha256:b98d49a80aa4adf1433a97407102d068de26c739c405431d93faad96dd282c40" + "sha256:126d354bbdff4906c4e93e6361197f6fbfb6231c3df6def85a291dae6f9f577b", + "sha256:c4dc64260bd72e6d32b9e536e8dd0d9247922f0271f82d1d5132a18f24b388ac" ], "markers": "python_version >= '3.8'", - "version": "==5.1.0" + "version": "==5.1.1" }, "django-stubs-ext": { "hashes": [ - "sha256:a455fc222c90b30b29ad8c53319559f5b54a99b4197205ddbb385aede03b395d", - "sha256:ed7d51c0b731651879fc75f331fb0806d98b67bfab464e96e2724db6b46ef926" + "sha256:3907f99e178c93323e2ce908aef8352adb8c047605161f8d9e5e7b4efb5a6a9c", + "sha256:db7364e4f50ae7e5360993dbd58a3a57ea4b2e7e5bab0fbd525ccdb3e7975d1c" ], "markers": "python_version >= '3.8'", - "version": "==5.1.0" + "version": "==5.1.1" }, "djangorestframework-stubs": { "hashes": [ @@ -2137,11 +2428,11 @@ }, "faker": { "hashes": [ - "sha256:dbf81295c948270a9e96cd48a9a3ebec73acac9a153d0c854fbbd0294557609f", - "sha256:e0593931bd7be9a9ea984b5d8c302ef1cec19392585d1e90d444199271d0a94d" + "sha256:aac536ba04e6b7beb2332c67df78485fc29c1880ff723beac6d1efd45e2f10f5", + "sha256:c77522577863c264bdc9dad3a2a750ad3f7ee43ff8185072e482992288898814" ], "markers": "python_version >= '3.8'", - "version": "==30.1.0" + "version": "==32.1.0" }, "filelock": { "hashes": [ @@ -2170,11 +2461,11 @@ }, "identify": { "hashes": [ - "sha256:53863bcac7caf8d2ed85bd20312ea5dcfc22226800f6d6881f232d861db5a8f0", - "sha256:91478c5fb7c3aac5ff7bf9b4344f803843dc586832d5f110d672b19aa1984c98" + "sha256:c097384259f49e372f4ea00a19719d95ae27dd5ff0fd77ad630aa891306b82f3", + "sha256:fab5c716c24d7a789775228823797296a2994b075fb6080ac83a102772a98cbd" ], - "markers": "python_version >= '3.8'", - "version": "==2.6.1" + "markers": "python_version >= '3.9'", + "version": "==2.6.2" }, "idna": { "hashes": [ @@ -2195,11 +2486,11 @@ }, "jedi": { "hashes": [ - "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd", - "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0" + "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", + "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9" ], "markers": "python_version >= '3.6'", - "version": "==0.19.1" + "version": "==0.19.2" }, "jmespath": { "hashes": [ @@ -2211,69 +2502,70 @@ }, "markupsafe": { "hashes": [ - "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf", - "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff", - "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f", - "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3", - "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532", - "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f", - "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617", - "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df", - "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4", - "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906", - "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f", - "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4", - "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8", - "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371", - "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2", - "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465", - "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52", - "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6", - "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169", - "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad", - "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2", - "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0", - "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029", - "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f", - "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a", - "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced", - "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5", - "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c", - "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf", - "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9", - "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb", - "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad", - "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3", - "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1", - "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46", - "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc", - "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a", - "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee", - "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900", - "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5", - "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea", - "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f", - "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5", - "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e", - "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a", - "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f", - "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50", - "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a", - "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b", - "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4", - "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff", - "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2", - "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46", - "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b", - "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf", - "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5", - "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5", - "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab", - "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd", - "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68" + "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4", + "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", + "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0", + "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", + "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", + "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13", + "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", + "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca", + "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", + "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832", + "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0", + "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b", + "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579", + "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", + "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", + "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff", + "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", + "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", + "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", + "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb", + "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e", + "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", + "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a", + "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d", + "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a", + "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b", + "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8", + "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", + "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", + "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144", + "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f", + "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", + "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d", + "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93", + "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", + "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158", + "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84", + "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", + "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", + "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171", + "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", + "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", + "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", + "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d", + "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", + "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", + "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", + "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", + "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29", + "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", + "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798", + "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c", + "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", + "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", + "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", + "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a", + "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178", + "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", + "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", + "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", + "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50" ], - "markers": "python_version >= '3.7'", - "version": "==2.1.5" + "markers": "python_version >= '3.9'", + "version": "==3.0.2" }, "matplotlib-inline": { "hashes": [ @@ -2319,10 +2611,10 @@ }, "mypy-boto3-s3": { "hashes": [ - "sha256:5b5aec56e16ef48766ae81b1807263127eebc4e6bfbeeef3f2f2cb7c30c06d03", - "sha256:9f64e1196ffecc2c6ab7bee95e848692b5f464a1df14211361ea6bbbc2038387" + "sha256:34d19dfba400f5b9bd6b64f09eb8f8eedef60545b410a3753fe99fec0c41ba78", + "sha256:f0087a3765d103b2db565cd8065ebc2b0f70f2dd4e92c132f64b8945dd869940" ], - "version": "==1.35.22" + "version": "==1.35.46" }, "mypy-extensions": { "hashes": [ @@ -2523,11 +2815,11 @@ }, "s3transfer": { "hashes": [ - "sha256:0711534e9356d3cc692fdde846b4a1e4b0cb6519971860796e6bc4c7aea00ef6", - "sha256:eca1c20de70a39daee580aef4986996620f365c4e0fda6a86100231d62f1bf69" + "sha256:263ed587a5803c6c708d3ce44dc4dfedaab4c1a32e8329bab818933d79ddcf5d", + "sha256:4f50ed74ab84d474ce614475e0b8d5047ff080810aac5d01ea25231cfc944b0c" ], "markers": "python_version >= '3.8'", - "version": "==0.10.2" + "version": "==0.10.3" }, "six": { "hashes": [ @@ -2571,11 +2863,11 @@ }, "types-awscrt": { "hashes": [ - "sha256:67a660c90bad360c339f6a79310cc17094d12472042c7ca5a41450aaf5fc9a54", - "sha256:b2c196bbd3226bab42d80fae13c34548de9ddc195f5a366d79c15d18e5897aa9" + "sha256:3fd1edeac923d1956c0e907c973fb83bda465beae7f054716b371b293f9b5fdc", + "sha256:517d9d06f19cf58d778ca90ad01e52e0489466bf70dcf78c7f47f74fdf151a60" ], "markers": "python_version >= '3.8'", - "version": "==0.22.0" + "version": "==0.23.0" }, "types-pyyaml": { "hashes": [ @@ -2587,26 +2879,26 @@ }, "types-requests": { "hashes": [ - "sha256:2850e178db3919d9bf809e434eef65ba49d0e7e33ac92d588f4a5e295fffd405", - "sha256:59c2f673eb55f32a99b2894faf6020e1a9f4a402ad0f192bfee0b64469054310" + "sha256:0d9cad2f27515d0e3e3da7134a1b6f28fb97129d86b867f24d9c726452634d95", + "sha256:4195d62d6d3e043a4eaaf08ff8a62184584d2e8684e9d2aa178c7915a7da3747" ], "markers": "python_version >= '3.8'", - "version": "==2.32.0.20240914" + "version": "==2.32.0.20241016" }, "types-s3transfer": { "hashes": [ - "sha256:60167a3bfb5c536ec6cdb5818f7f9a28edca9dc3e0b5ff85ae374526fc5e576e", - "sha256:7a3fec8cd632e2b5efb665a355ef93c2a87fdd5a45b74a949f95a9e628a86356" + "sha256:d34c5a82f531af95bb550927136ff5b737a1ed3087f90a59d545591dfde5b4cc", + "sha256:f761b2876ac4c208e6c6b75cdf5f6939009768be9950c545b11b0225e7703ee7" ], "markers": "python_version >= '3.8'", - "version": "==0.10.2" + "version": "==0.10.3" }, "typing-extensions": { "hashes": [ "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8" ], - "markers": "python_version < '3.13'", + "markers": "python_version >= '3.8'", "version": "==4.12.2" }, "urllib3": { @@ -2619,11 +2911,11 @@ }, "virtualenv": { "hashes": [ - "sha256:280aede09a2a5c317e409a00102e7077c6432c5a38f0ef938e643805a7ad2c48", - "sha256:7345cc5b25405607a624d8418154577459c3e0277f5466dd79c49d5e492995f2" + "sha256:142c6be10212543b32c6c45d3d3893dff89112cc588b7d0879ae5a1ec03a47ba", + "sha256:f11f1b8a29525562925f745563bfd48b189450f61fb34c4f9cc79dd5aa32a1f4" ], - "markers": "python_version >= '3.7'", - "version": "==20.26.6" + "markers": "python_version >= '3.8'", + "version": "==20.27.1" }, "watchdog": { "hashes": [ @@ -2714,99 +3006,114 @@ }, "charset-normalizer": { "hashes": [ - "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027", - "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087", - "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786", - "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8", - "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09", - "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185", - "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574", - "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e", - "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519", - "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898", - "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269", - "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3", - "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f", - "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6", - "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8", - "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a", - "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73", - "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc", - "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714", - "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2", - "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc", - "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce", - "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d", - "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e", - "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6", - "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269", - "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96", - "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d", - "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a", - "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4", - "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77", - "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d", - "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0", - "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed", - "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068", - "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac", - "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25", - "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8", - "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab", - "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26", - "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2", - "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db", - "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f", - "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5", - "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99", - "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c", - "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d", - "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811", - "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa", - "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a", - "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03", - "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b", - "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04", - "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c", - "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001", - "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458", - "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389", - "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99", - "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985", - "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537", - "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238", - "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f", - "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d", - "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796", - "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a", - "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143", - "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8", - "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c", - "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5", - "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5", - "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711", - "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4", - "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6", - "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c", - "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7", - "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4", - "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b", - "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae", - "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12", - "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c", - "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae", - "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8", - "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887", - "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b", - "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4", - "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f", - "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5", - "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33", - "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519", - "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561" + "sha256:0099d79bdfcf5c1f0c2c72f91516702ebf8b0b8ddd8905f97a8aecf49712c621", + "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6", + "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8", + "sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912", + "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c", + "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b", + "sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d", + "sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d", + "sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95", + "sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e", + "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565", + "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64", + "sha256:2006769bd1640bdf4d5641c69a3d63b71b81445473cac5ded39740a226fa88ab", + "sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be", + "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e", + "sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907", + "sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0", + "sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2", + "sha256:2f6c34da58ea9c1a9515621f4d9ac379871a8f21168ba1b5e09d74250de5ad62", + "sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62", + "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23", + "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc", + "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284", + "sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca", + "sha256:425c5f215d0eecee9a56cdb703203dda90423247421bf0d67125add85d0c4455", + "sha256:43193c5cda5d612f247172016c4bb71251c784d7a4d9314677186a838ad34858", + "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b", + "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594", + "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc", + "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db", + "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b", + "sha256:4ec9dd88a5b71abfc74e9df5ebe7921c35cbb3b641181a531ca65cdb5e8e4dea", + "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6", + "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920", + "sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749", + "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7", + "sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd", + "sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99", + "sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242", + "sha256:62f60aebecfc7f4b82e3f639a7d1433a20ec32824db2199a11ad4f5e146ef5ee", + "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129", + "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2", + "sha256:6b493a043635eb376e50eedf7818f2f322eabbaa974e948bd8bdd29eb7ef2a51", + "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee", + "sha256:6fd30dc99682dc2c603c2b315bded2799019cea829f8bf57dc6b61efde6611c8", + "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b", + "sha256:7706f5850360ac01d80c89bcef1640683cc12ed87f42579dab6c5d3ed6888613", + "sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742", + "sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe", + "sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3", + "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5", + "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631", + "sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7", + "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15", + "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c", + "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea", + "sha256:9289fd5dddcf57bab41d044f1756550f9e7cf0c8e373b8cdf0ce8773dc4bd417", + "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250", + "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88", + "sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca", + "sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa", + "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99", + "sha256:9c98230f5042f4945f957d006edccc2af1e03ed5e37ce7c373f00a5a4daa6149", + "sha256:9fa2566ca27d67c86569e8c85297aaf413ffab85a8960500f12ea34ff98e4c41", + "sha256:a14969b8691f7998e74663b77b4c36c0337cb1df552da83d5c9004a93afdb574", + "sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0", + "sha256:a8e538f46104c815be19c975572d74afb53f29650ea2025bbfaef359d2de2f7f", + "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d", + "sha256:aa693779a8b50cd97570e5a0f343538a8dbd3e496fa5dcb87e29406ad0299654", + "sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3", + "sha256:ab2e5bef076f5a235c3774b4f4028a680432cded7cad37bba0fd90d64b187d19", + "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90", + "sha256:af73657b7a68211996527dbfeffbb0864e043d270580c5aef06dc4b659a4b578", + "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9", + "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1", + "sha256:b8831399554b92b72af5932cdbbd4ddc55c55f631bb13ff8fe4e6536a06c5c51", + "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719", + "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236", + "sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a", + "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c", + "sha256:c3e446d253bd88f6377260d07c895816ebf33ffffd56c1c792b13bff9c3e1ade", + "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944", + "sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc", + "sha256:cab5d0b79d987c67f3b9e9c53f54a61360422a5a0bc075f43cab5621d530c3b6", + "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6", + "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27", + "sha256:d5b054862739d276e09928de37c79ddeec42a6e1bfc55863be96a36ba22926f6", + "sha256:dbe03226baf438ac4fda9e2d0715022fd579cb641c4cf639fa40d53b2fe6f3e2", + "sha256:dc15e99b2d8a656f8e666854404f1ba54765871104e50c8e9813af8a7db07f12", + "sha256:dcaf7c1524c0542ee2fc82cc8ec337f7a9f7edee2532421ab200d2b920fc97cf", + "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114", + "sha256:dd9a8bd8900e65504a305bf8ae6fa9fbc66de94178c420791d0293702fce2df7", + "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf", + "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d", + "sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b", + "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed", + "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03", + "sha256:f09cb5a7bbe1ecae6e87901a2eb23e0256bb524a79ccc53eb0b7629fbe7677c4", + "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67", + "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365", + "sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a", + "sha256:f3e73a4255342d4eb26ef6df01e3962e73aa29baa3124a8e824c5d3364a65748", + "sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b", + "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079", + "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482" ], "markers": "python_full_version >= '3.7.0'", - "version": "==3.3.2" + "version": "==3.4.0" }, "docutils": { "hashes": [ @@ -2859,69 +3166,70 @@ }, "markupsafe": { "hashes": [ - "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf", - "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff", - "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f", - "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3", - "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532", - "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f", - "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617", - "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df", - "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4", - "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906", - "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f", - "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4", - "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8", - "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371", - "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2", - "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465", - "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52", - "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6", - "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169", - "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad", - "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2", - "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0", - "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029", - "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f", - "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a", - "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced", - "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5", - "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c", - "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf", - "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9", - "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb", - "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad", - "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3", - "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1", - "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46", - "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc", - "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a", - "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee", - "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900", - "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5", - "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea", - "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f", - "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5", - "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e", - "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a", - "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f", - "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50", - "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a", - "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b", - "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4", - "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff", - "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2", - "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46", - "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b", - "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf", - "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5", - "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5", - "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab", - "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd", - "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68" + "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4", + "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", + "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0", + "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", + "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", + "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13", + "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", + "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca", + "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", + "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832", + "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0", + "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b", + "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579", + "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", + "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", + "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff", + "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", + "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", + "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", + "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb", + "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e", + "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", + "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a", + "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d", + "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a", + "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b", + "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8", + "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", + "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", + "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144", + "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f", + "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", + "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d", + "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93", + "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", + "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158", + "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84", + "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", + "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", + "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171", + "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", + "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", + "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", + "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d", + "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", + "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", + "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", + "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", + "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29", + "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", + "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798", + "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c", + "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", + "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", + "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", + "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a", + "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178", + "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", + "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", + "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", + "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50" ], - "markers": "python_version >= '3.7'", - "version": "==2.1.5" + "markers": "python_version >= '3.9'", + "version": "==3.0.2" }, "mdit-py-plugins": { "hashes": [ @@ -2950,11 +3258,11 @@ }, "packaging": { "hashes": [ - "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002", - "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124" + "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", + "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f" ], "markers": "python_version >= '3.8'", - "version": "==24.1" + "version": "==24.2" }, "pygments": { "hashes": [ diff --git a/care/emr/__init__.py b/care/emr/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/care/emr/api/viewsets/__init__.py b/care/emr/api/viewsets/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/care/emr/api/viewsets/allergy_intolerance.py b/care/emr/api/viewsets/allergy_intolerance.py new file mode 100644 index 0000000000..cf77f393a6 --- /dev/null +++ b/care/emr/api/viewsets/allergy_intolerance.py @@ -0,0 +1,25 @@ +from drf_spectacular.utils import extend_schema, extend_schema_view + +from care.emr.api.viewsets.base import EMRModelViewSet +from care.emr.models.allergy_intolerance import AllergyIntolerance +from care.emr.resources.allergy_intolerance.spec import ( + AllergyIntoleranceSpec, + AllergyIntrolanceSpecRead, +) + + +@extend_schema_view( + create=extend_schema(request=AllergyIntoleranceSpec), +) +class AllergyIntoleranceViewSet(EMRModelViewSet): + database_model = AllergyIntolerance + pydantic_model = AllergyIntoleranceSpec + pydantic_read_model = AllergyIntrolanceSpecRead + + def clean_create_data(self, request, *args, **kwargs): + data = request.data + data["encounter"] = kwargs["consultation_external_id"] + return data + + def get_queryset(self): + return super().get_queryset().select_related("patient", "encounter") diff --git a/care/emr/api/viewsets/base.py b/care/emr/api/viewsets/base.py new file mode 100644 index 0000000000..95627a9d00 --- /dev/null +++ b/care/emr/api/viewsets/base.py @@ -0,0 +1,129 @@ +import json + +from pydantic import ValidationError +from rest_framework.decorators import action +from rest_framework.generics import get_object_or_404 +from rest_framework.response import Response +from rest_framework.views import exception_handler as drf_exception_handler +from rest_framework.viewsets import GenericViewSet + +from care.emr.models.base import EMRBaseModel +from care.emr.resources.base import FHIRResource + + +def emr_exception_handler(exc, context): + if isinstance(exc, ValidationError): + return Response({"errors": json.loads(exc.json())}, status=400) + return drf_exception_handler(exc, context) + + +class EMRQuestionnaireMixin: + @action(detail=False, methods=["GET"]) + def questionnaire_spec(self, request, *args, **kwargs): + return Response( + {"version": 1, "questions": self.pydantic_model.questionnaire()} + ) + + +class EMRRetrieveMixin: + def retrieve(self, request, *args, **kwargs): + instance = self.get_object() + data = self.get_read_pydantic_model().serialize(instance) + return Response(data.model_dump(exclude=["meta"])) + + +class EMRCreateMixin: + def perform_create(self, instance): + instance.save() + + def clean_create_data(self, request, *args, **kwargs): + return request.data + + def create(self, request, *args, **kwargs): + clean_data = self.clean_create_data(request, *args, **kwargs) + instance = self.pydantic_model(**clean_data) + model_instance = instance.de_serialize() + self.perform_create(model_instance) + return Response( + self.get_read_pydantic_model() + .serialize(model_instance) + .model_dump(exclude=["meta"]) + ) + + +class EMRListMixin: + def list(self, request, *args, **kwargs): + queryset = self.get_queryset() + paginator = self.pagination_class() + page = paginator.paginate_queryset(queryset, request) + if page is not None: + data = [ + self.get_read_pydantic_model() + .serialize(obj) + .model_dump(exclude=["meta"]) + for obj in page + ] + return paginator.get_paginated_response(data) + data = [ + self.get_read_pydantic_model().serialize(obj).model_dump(exclude=["meta"]) + for obj in queryset + ] + return Response(data) + + +class EMRBaseViewSet(GenericViewSet): + pydantic_model: FHIRResource = None + pydantic_read_model: FHIRResource = None + database_model: EMRBaseModel = None + lookup_field = "external_id" + + def get_exception_handler(self): + return emr_exception_handler + + def get_queryset(self): + return self.database_model.objects.all() + + def get_read_pydantic_model(self): + if self.pydantic_read_model: + return self.pydantic_read_model + return self.pydantic_model + + def get_object(self): + queryset = self.get_queryset() + return get_object_or_404( + queryset, **{self.lookup_field: self.kwargs[self.lookup_field]} + ) + + def update(self, request, *args, **kwargs): + return Response({"update": "working"}) + + def delete(self, request, *args, **kwargs): + return Response({"delete": "working"}) + + +class EMRModelViewSet( + EMRCreateMixin, + EMRRetrieveMixin, + EMRListMixin, + EMRQuestionnaireMixin, + EMRBaseViewSet, +): + pass + + +# Maybe use a different pydantic model for request and response, Response does not need validations or defined Types +# Maybe switch to use custom mixins +# Complete update and delete logic +# Create valuesets for allergy intolerance and write the logic for validation +# Convert to questionnaire spec and store it somewhere and return on the questionnaire API +# Write the history function based on the update. + +# Validate valueset data on create +# Add option for extra validation being written in the model + +# Model the questionnaire object in pydantic +# Create CRUD for questionnaire +# Create definition returning API for questionnaire +# Submit API for Questionnaire -> Implicitly requires observations to be completed + +# Create API's for valuesets and code concepts ( integrations already built ) diff --git a/care/emr/api/viewsets/batch_request.py b/care/emr/api/viewsets/batch_request.py new file mode 100644 index 0000000000..8dcdf80aa8 --- /dev/null +++ b/care/emr/api/viewsets/batch_request.py @@ -0,0 +1,48 @@ +from django.db import transaction +from pydantic import BaseModel, Field +from rest_framework.response import Response +from rest_framework.viewsets import GenericViewSet + +from care.emr.api.viewsets.base import emr_exception_handler +from care.emr.utils.batch_requests import execute_batch_requests + + +class Request(BaseModel): + url: str + method: str + body: dict = {} + + +class BatchRequest(BaseModel): + requests: list[Request] = Field(..., min_length=1, max_length=20) + + +class HandledError(Exception): + pass + + +class BatchRequestView(GenericViewSet): + def get_exception_handler(self): + return emr_exception_handler + + def create(self, request, *args, **kwargs): + requests = BatchRequest(**request.data) + errored = False + try: + with transaction.atomic(): + responses = execute_batch_requests(request, requests) + structured_responses = [] + for response in responses: + if response["status_code"] > 299: # noqa PLR2004 + errored = True + structured_responses.append( + { + "data": response["data"], + "status_code": response["status_code"], + } + ) + if errored: + raise HandledError + except HandledError: + pass + return Response({"results": structured_responses}) diff --git a/care/emr/api/viewsets/valueset.py b/care/emr/api/viewsets/valueset.py new file mode 100644 index 0000000000..f81598d4e2 --- /dev/null +++ b/care/emr/api/viewsets/valueset.py @@ -0,0 +1,41 @@ +from drf_spectacular.utils import extend_schema +from pydantic import BaseModel, Field +from rest_framework.decorators import action +from rest_framework.response import Response + +from care.emr.api.viewsets.base import EMRModelViewSet +from care.emr.fhir.schema.base import Coding +from care.emr.models.valueset import ValueSet +from care.emr.resources.valueset.spec import ValueSetSpec + + +class ExpandRequest(BaseModel): + search: str = "" + count: int = Field(10, gt=0, lt=100) + + +class LookupRequest(BaseModel): + code: Coding + + +class ValueSetViewSet(EMRModelViewSet): + database_model = ValueSet + pydantic_model = ValueSetSpec + lookup_field = "slug" + + def get_serializer_class(self): + return ValueSetSpec + + @extend_schema(request=ExpandRequest, responses={200: None}, methods=["POST"]) + @action(detail=True, methods=["POST"]) + def expand(self, request, *args, **kwargs): + request_params = ExpandRequest(**request.data) + results = self.get_object().search(**request_params.model_dump()) + return Response({"results": [result.model_dump() for result in results]}) + + @extend_schema(request=LookupRequest, responses={200: None}, methods=["POST"]) + @action(detail=True, methods=["POST"]) + def lookup(self, request, *args, **kwargs): + request_params = LookupRequest(**request.data) + result = self.get_object().lookup(request_params.code) + return Response({"result": result}) diff --git a/care/emr/apps.py b/care/emr/apps.py new file mode 100644 index 0000000000..52b407ce5d --- /dev/null +++ b/care/emr/apps.py @@ -0,0 +1,7 @@ +from django.apps import AppConfig +from django.utils.translation import gettext_lazy as _ + + +class EMRConfig(AppConfig): + name = "care.emr" + verbose_name = _("Electronic Medical Record") diff --git a/care/emr/fhir/__init__.py b/care/emr/fhir/__init__.py new file mode 100644 index 0000000000..3a85006310 --- /dev/null +++ b/care/emr/fhir/__init__.py @@ -0,0 +1,3 @@ +""" +This class represents all utilities that are written for FHIR +""" diff --git a/care/emr/fhir/client.py b/care/emr/fhir/client.py new file mode 100644 index 0000000000..5d400c0a34 --- /dev/null +++ b/care/emr/fhir/client.py @@ -0,0 +1,25 @@ +import requests + + +class FHIRClient: + """ + This client will be used for all queries performed over the FHIR protocol + This class is designed to perform FHIR based queries to some remote server and convert them into python objects + """ + + def __init__(self, server_url): + self.server_url = server_url + + def query(self, *, method, resource, operation=None, parameters, detail=None): + url = f"{self.server_url}/{resource}" + if detail: + url += f"/{detail}" + if operation: + url += f"/${operation}" + request_kwargs = {} + if method == "GET": + request_kwargs["params"] = parameters + else: + request_kwargs["json"] = parameters + response = requests.request(method, url, **request_kwargs, timeout=60) + return response.json() diff --git a/care/emr/fhir/exceptions.py b/care/emr/fhir/exceptions.py new file mode 100644 index 0000000000..464a46bf8d --- /dev/null +++ b/care/emr/fhir/exceptions.py @@ -0,0 +1,6 @@ +class BaseFHIRError(Exception): + pass + + +class MoreThanOneFHIRResourceFoundError(BaseFHIRError): + pass diff --git a/care/emr/fhir/resources/__init__.py b/care/emr/fhir/resources/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/care/emr/fhir/resources/base.py b/care/emr/fhir/resources/base.py new file mode 100644 index 0000000000..ef94dbbee4 --- /dev/null +++ b/care/emr/fhir/resources/base.py @@ -0,0 +1,62 @@ +# ruff : noqa : SLF001 +from copy import deepcopy + +import json_fingerprint +import simplejson as json +from django.core.cache import cache +from json_fingerprint import hash_functions + +from care.emr.fhir.client import FHIRClient + +default_fhir_client = FHIRClient(server_url="http://165.22.211.144/fhir") + + +class ResourceManger: + _fhir_client = default_fhir_client + resource = "" + allowed_properties = [] + cache_prefix_key = "fhir_resource:" + + def __init__(self, fhir_client=None): + self._filters = {} + self._meta = {} + self._executed = False + if fhir_client: + self._fhir_client = fhir_client + + def query(self, method, resource, parameters): + payload = {"method": method, "resource": resource, "parameters": parameters} + fingerprint = json_fingerprint.create( + input=json.dumps(payload), hash_function=hash_functions.SHA256, version=1 + ) + cache_key = f"self.cache_prefix_key{fingerprint}" + if cached_data := cache.get(cache_key): + return cached_data + results = self._fhir_client.query(**payload) + cache.set(cache_key, results, 10) + return results + + def validate_filter(self): + pass + + def filter(self, *args, **kwargs): + if kwargs: + for key in kwargs: + if key in self.allowed_properties: + self._filters[key] = kwargs[key] + self.validate_filter() + return self.clone() + + def clone(self): + obj = self.__class__() + obj._filters = deepcopy(self._filters) + obj._meta = deepcopy(self._meta) + obj._executed = self._executed + obj._fhir_client = self._fhir_client + return obj + + def handle_list(self, results): + return [self.serialize(result) for result in results] + + def serialize(self, result): + raise NotImplementedError diff --git a/care/emr/fhir/resources/code_concept.py b/care/emr/fhir/resources/code_concept.py new file mode 100644 index 0000000000..9577c84f46 --- /dev/null +++ b/care/emr/fhir/resources/code_concept.py @@ -0,0 +1,39 @@ +from pydantic.main import BaseModel + +from care.emr.fhir.resources.base import ResourceManger +from care.emr.fhir.utils import parse_fhir_parameter_output + + +class CodeConceptResource(ResourceManger): + allowed_properties = ["system", "code"] + resource = "CodeConcept" + + def serialize_lookup(self, result): + structured_output = parse_fhir_parameter_output(result) + return CodeConcept( + name=structured_output["name"], + display=structured_output["display"], + code=self._filters["code"], + system=structured_output["system"], + property=structured_output.get("property", {}), + designation=structured_output.get("designation", {}) or {}, + ) + + def get(self): + if "system" not in self._filters or "code" not in self._filters: + err = "Both system and code are required" + raise ValueError(err) + full_result = self.query("GET", "CodeSystem/$lookup", self._filters) + return self.serialize_lookup(full_result["parameter"]) + + +class MinimalCodeConcept(BaseModel): + display: str + system: str + code: str + + +class CodeConcept(MinimalCodeConcept): + name: str + property: dict + designation: dict diff --git a/care/emr/fhir/resources/code_system.py b/care/emr/fhir/resources/code_system.py new file mode 100644 index 0000000000..590560c976 --- /dev/null +++ b/care/emr/fhir/resources/code_system.py @@ -0,0 +1,43 @@ +# ruff : noqa : N815 + +from pydantic.main import BaseModel + +from care.emr.fhir.exceptions import MoreThanOneFHIRResourceFoundError +from care.emr.fhir.resources.base import ResourceManger +from care.facility.models import User + +User.objects.filter() + + +class CodeSystemResource(ResourceManger): + allowed_properties = ["name", "url"] + resource = "CodeSystem" + + def serialize(self, result): + return CodeSystem( + name=result["resource"]["name"], + resourceType=result["resource"]["resourceType"], + id=result["resource"]["id"], + url=result["resource"]["url"], + title=result["resource"]["title"], + ) + + def search(self): + full_result = self.query("GET", self.resource, self._filters) + results = full_result["entry"] + return self.handle_list(results) + + def get(self): + full_result = self.query("GET", self.resource, self._filters) + if full_result["total"] != 1: + raise MoreThanOneFHIRResourceFoundError + results = full_result["entry"] + return self.serialize(results[0]) + + +class CodeSystem(BaseModel): + name: str + resourceType: str + id: str + url: str + title: str diff --git a/care/emr/fhir/resources/valueset.py b/care/emr/fhir/resources/valueset.py new file mode 100644 index 0000000000..723400f53b --- /dev/null +++ b/care/emr/fhir/resources/valueset.py @@ -0,0 +1,79 @@ +from pydantic.main import BaseModel + +from care.emr.fhir.resources.base import ResourceManger +from care.emr.fhir.resources.code_concept import MinimalCodeConcept +from care.emr.fhir.schema.base import Coding +from care.emr.fhir.schema.valueset.valueset import ValueSetInclude + + +class ValueSetFilterValidation(BaseModel): + include: list[ValueSetInclude] = None + exclude: list[ValueSetInclude] = None + search: str = None + count: int = None + + +class ValueSetResource(ResourceManger): + allowed_properties = ["include", "exclude", "search", "count"] + + def serialize(self, result): + return MinimalCodeConcept( + system=result["system"], code=result["code"], display=result["display"] + ) + + def validate_filter(self): + ValueSetFilterValidation(**self._filters) + + def lookup(self, code: Coding): + parameters = [ + { + "name": "valueSet", + "resource": { + "resourceType": "ValueSet", + "compose": { + "include": self._filters.get("include", []), + "exclude": self._filters.get("exclude", []), + }, + }, + }, + {"name": "coding", "valueCoding": code.model_dump(exclude_defaults=True)}, + ] + request_json = {"resourceType": "Parameters", "parameter": parameters} + full_result = self.query("POST", "ValueSet/$validate-code", request_json) + try: + results = full_result["parameter"] + for result in results: + if result["name"] == "result": + return result["valueBoolean"] + except Exception as e: + err = "Unknown Value Returned from Terminology Server" + raise Exception(err) from e + + def search(self): + parameters = [] + for key in self._filters: + if key == "search": + parameters.append({"name": "filter", "valueString": self._filters[key]}) + if key == "count": + parameters.append({"name": "count", "valueInteger": self._filters[key]}) + parameters.append( + { + "name": "valueSet", + "resource": { + "resourceType": "ValueSet", + "compose": { + "include": self._filters.get("include", []), + "exclude": self._filters.get("exclude", []), + }, + }, + } + ) + request_json = {"resourceType": "Parameters", "parameter": parameters} + full_result = self.query("POST", "ValueSet/$expand", request_json) + # TODO Add Exception Handling + if "expansion" not in full_result: + return [] + results = full_result["expansion"] + if "contains" not in results: + return [] + return self.handle_list(results["contains"]) diff --git a/care/emr/fhir/schema/__init__.py b/care/emr/fhir/schema/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/care/emr/fhir/schema/base.py b/care/emr/fhir/schema/base.py new file mode 100644 index 0000000000..a376452e11 --- /dev/null +++ b/care/emr/fhir/schema/base.py @@ -0,0 +1,2130 @@ +# ruff: noqa: ERA001 N815 F405 - Naming convention is disabled for this file because it needs to match the FHIR schema +# Partly generated from fhir.schema.json R5 on 2024-11-09 + +from __future__ import annotations + +from enum import Enum +from typing import Any + +from pydantic import BaseModel, ConfigDict, Field, RootModel, constr + + +class Base64Binary(RootModel[str]): + root: str = Field(..., description="A stream of bytes") + + +class Boolean(RootModel[bool]): + root: bool = Field(..., description='Value of "true" or "false"') + + +class Canonical(RootModel[constr(pattern=r"^\S*$")]): + root: constr(pattern=r"^\S*$") = Field( + ..., + description="A URI that is a reference to a canonical URL on a FHIR resource", + ) + + +class Code(RootModel[constr(pattern=r"^[^\s]+( [^\s]+)*$")]): + root: constr(pattern=r"^[^\s]+( [^\s]+)*$") = Field( + ..., + description="A string which has at least one character and no leading or trailing whitespace and where there is no whitespace other than single spaces in the contents", + ) + + +class Date( + RootModel[ + constr( + pattern=r"^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?$" + ) + ] +): + root: constr( + pattern=r"^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?$" + ) = Field( + ..., + description="A date or partial date (e.g. just year or year + month). There is no UTC offset. The format is a union of the schema types gYear, gYearMonth and date. Dates SHALL be valid dates.", + ) + + +class DateTime( + RootModel[ + constr( + pattern=r"^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\.[0-9]{1,9})?)?)?(Z|(\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)?)?)?$" + ) + ] +): + root: constr( + pattern=r"^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\.[0-9]{1,9})?)?)?(Z|(\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)?)?)?$" + ) = Field( + ..., + description="A date, date-time or partial date (e.g. just year or year + month). If hours and minutes are specified, a UTC offset SHALL be populated. The format is a union of the schema types gYear, gYearMonth, date and dateTime. Seconds must be provided due to schema type constraints but may be zero-filled and may be ignored. Dates SHALL be valid dates.", + ) + + +class Decimal(RootModel[float]): + root: float = Field(..., description="A rational number with implicit precision") + + +class Id(RootModel[constr(pattern=r"^[A-Za-z0-9\-\.]{1,64}$")]): + root: constr(pattern=r"^[A-Za-z0-9\-\.]{1,64}$") = Field( + ..., + description='Any combination of letters, numerals, "-" and ".", with a length limit of 64 characters. (This might be an integer, an unprefixed OID, UUID or any other identifier pattern that meets these constraints.) Ids are case-insensitive.', + ) + + +class Instant( + RootModel[ + constr( + pattern=r"^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\.[0-9]{1,9})?(Z|(\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))$" + ) + ] +): + root: constr( + pattern=r"^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\.[0-9]{1,9})?(Z|(\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))$" + ) = Field(..., description="An instant in time - known at least to the second") + + +class Integer(RootModel[float]): + root: float = Field(..., description="A whole number") + + +class Integer64(RootModel[constr(pattern=r"^[0]|[-+]?[1-9][0-9]*$")]): + root: constr(pattern=r"^[0]|[-+]?[1-9][0-9]*$") = Field( + ..., description="A very large whole number" + ) + + +class Markdown(RootModel[constr(pattern=r"^^[\s\S]+$$")]): + root: constr(pattern=r"^^[\s\S]+$$") = Field( + ..., + description="A string that may contain Github Flavored Markdown syntax for optional processing by a mark down presentation engine", + ) + + +class Oid(RootModel[constr(pattern=r"^urn:oid:[0-2](\.(0|[1-9][0-9]*))+$")]): + root: constr(pattern=r"^urn:oid:[0-2](\.(0|[1-9][0-9]*))+$") = Field( + ..., description="An OID represented as a URI" + ) + + +class PositiveInt(RootModel[float]): + root: float = Field( + ..., description="An integer with a value that is positive (e.g. >0)" + ) + + +class String(RootModel[constr(pattern=r"^^[\s\S]+$$")]): + root: constr(pattern=r"^^[\s\S]+$$") = Field( + ..., description="A sequence of Unicode characters" + ) + + +class Time( + RootModel[ + constr( + pattern=r"^([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\.[0-9]{1,9})?$" + ) + ] +): + root: constr( + pattern=r"^([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\.[0-9]{1,9})?$" + ) = Field(..., description="A time during the day, with no date specified") + + +class UnsignedInt(RootModel[float]): + root: float = Field( + ..., description="An integer with a value that is not negative (e.g. >= 0)" + ) + + +class Uri(RootModel[constr(pattern=r"^\S*$")]): + root: constr(pattern=r"^\S*$") = Field( + ..., description="String of characters used to identify a name or a resource" + ) + + +class Url(RootModel[constr(pattern=r"^\S*$")]): + root: constr(pattern=r"^\S*$") = Field( + ..., description="A URI that is a literal reference" + ) + + +class Uuid( + RootModel[ + constr( + pattern=r"^urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$" + ) + ] +): + root: constr( + pattern=r"^urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$" + ) = Field(..., description="A UUID, represented as a URI") + + +class Xhtml(RootModel[Any]): + root: Any = Field(..., description="xhtml - escaped html (see specfication)") + + +class Base(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + + +class Status(Enum): + generated = "generated" + extensions = "extensions" + additional = "additional" + empty = "empty" + + +class Use(Enum): + usual = "usual" + official = "official" + temp = "temp" + secondary = "secondary" + old = "old" + + +class Comparator(Enum): + field_ = "<" + field__ = "<=" + field___1 = ">=" + field__1 = ">" + ad = "ad" + + +class Use1(Enum): + usual = "usual" + official = "official" + temp = "temp" + nickname = "nickname" + anonymous = "anonymous" + old = "old" + maiden = "maiden" + + +class Use2(Enum): + home = "home" + work = "work" + temp = "temp" + old = "old" + billing = "billing" + + +class Type(Enum): + postal = "postal" + physical = "physical" + both = "both" + + +class System(Enum): + phone = "phone" + fax = "fax" + email = "email" + pager = "pager" + url = "url" + sms = "sms" + other = "other" + + +class Use3(Enum): + home = "home" + work = "work" + temp = "temp" + old = "old" + mobile = "mobile" + + +class DurationUnit(Enum): + s = "s" + min = "min" + h = "h" + d = "d" + wk = "wk" + mo = "mo" + a = "a" + + +class PeriodUnit(Enum): + s = "s" + min = "min" + h = "h" + d = "d" + wk = "wk" + mo = "mo" + a = "a" + + +class WhenEnum(Enum): + MORN = "MORN" + MORN_early = "MORN.early" + MORN_late = "MORN.late" + NOON = "NOON" + AFT = "AFT" + AFT_early = "AFT.early" + AFT_late = "AFT.late" + EVE = "EVE" + EVE_early = "EVE.early" + EVE_late = "EVE.late" + NIGHT = "NIGHT" + PHS = "PHS" + IMD = "IMD" + HS = "HS" + WAKE = "WAKE" + C = "C" + CM = "CM" + CD = "CD" + CV = "CV" + AC = "AC" + ACM = "ACM" + ACD = "ACD" + ACV = "ACV" + PC = "PC" + PCM = "PCM" + PCD = "PCD" + PCV = "PCV" + + +class Type1(Enum): + author = "author" + editor = "editor" + reviewer = "reviewer" + endorser = "endorser" + + +class Direction(Enum): + ascending = "ascending" + descending = "descending" + + +class Type2(Enum): + documentation = "documentation" + justification = "justification" + citation = "citation" + predecessor = "predecessor" + successor = "successor" + derived_from = "derived-from" + depends_on = "depends-on" + composed_of = "composed-of" + part_of = "part-of" + amends = "amends" + amended_with = "amended-with" + appends = "appends" + appended_with = "appended-with" + cites = "cites" + cited_by = "cited-by" + comments_on = "comments-on" + comment_in = "comment-in" + contains = "contains" + contained_in = "contained-in" + corrects = "corrects" + correction_in = "correction-in" + replaces = "replaces" + replaced_with = "replaced-with" + retracts = "retracts" + retracted_by = "retracted-by" + signs = "signs" + similar_to = "similar-to" + supports = "supports" + supported_with = "supported-with" + transforms = "transforms" + transformed_into = "transformed-into" + transformed_with = "transformed-with" + documents = "documents" + specification_of = "specification-of" + created_with = "created-with" + cite_as = "cite-as" + + +class Type3(Enum): + named_event = "named-event" + periodic = "periodic" + data_changed = "data-changed" + data_added = "data-added" + data_modified = "data-modified" + data_removed = "data-removed" + data_accessed = "data-accessed" + data_access_ended = "data-access-ended" + + +class RepresentationEnum(Enum): + xmlAttr = "xmlAttr" + xmlText = "xmlText" + typeAttr = "typeAttr" + cdaText = "cdaText" + xhtml = "xhtml" + + +class Rules(Enum): + closed = "closed" + open = "open" + openAtEnd = "openAtEnd" + + +class Type4(Enum): + value = "value" + exists = "exists" + pattern = "pattern" + type = "type" + profile = "profile" + position = "position" + + +class AggregationEnum(Enum): + contained = "contained" + referenced = "referenced" + bundled = "bundled" + + +class Versioning(Enum): + either = "either" + independent = "independent" + specific = "specific" + + +class Severity(Enum): + error = "error" + warning = "warning" + + +class Strength(Enum): + required = "required" + extensible = "extensible" + preferred = "preferred" + example = "example" + + +class Element(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + + +class DataType(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + + +class PrimitiveType(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + + +class BackboneType(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + modifierExtension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + ) + + +class Extension(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + url: Uri | None = Field( + None, + description="Source of the definition for the extension code - a logical name or a URL.", + ) + field_url: Element | None = Field( + None, alias="_url", description="Extensions for url" + ) + valueBase64Binary: ( + constr( + pattern="^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$" + ) + | None + ) = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + field_valueBase64Binary: Element | None = Field( + None, alias="_valueBase64Binary", description="Extensions for valueBase64Binary" + ) + valueBoolean: bool | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + field_valueBoolean: Element | None = Field( + None, alias="_valueBoolean", description="Extensions for valueBoolean" + ) + valueCanonical: constr(pattern="^\\S*$") | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + field_valueCanonical: Element | None = Field( + None, alias="_valueCanonical", description="Extensions for valueCanonical" + ) + valueCode: constr(pattern="^[^\\s]+( [^\\s]+)*$") | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + field_valueCode: Element | None = Field( + None, alias="_valueCode", description="Extensions for valueCode" + ) + valueDate: ( + constr( + pattern="^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?$" + ) + | None + ) = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + field_valueDate: Element | None = Field( + None, alias="_valueDate", description="Extensions for valueDate" + ) + valueDateTime: ( + constr( + pattern="^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]{1,9})?)?)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)?)?)?$" + ) + | None + ) = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + field_valueDateTime: Element | None = Field( + None, alias="_valueDateTime", description="Extensions for valueDateTime" + ) + valueDecimal: float | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + field_valueDecimal: Element | None = Field( + None, alias="_valueDecimal", description="Extensions for valueDecimal" + ) + valueId: constr(pattern="^[A-Za-z0-9\\-\\.]{1,64}$") | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + field_valueId: Element | None = Field( + None, alias="_valueId", description="Extensions for valueId" + ) + valueInstant: ( + constr( + pattern="^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]{1,9})?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))$" + ) + | None + ) = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + field_valueInstant: Element | None = Field( + None, alias="_valueInstant", description="Extensions for valueInstant" + ) + valueInteger: float | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + field_valueInteger: Element | None = Field( + None, alias="_valueInteger", description="Extensions for valueInteger" + ) + valueInteger64: constr(pattern="^[0]|[-+]?[1-9][0-9]*$") | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + field_valueInteger64: Element | None = Field( + None, alias="_valueInteger64", description="Extensions for valueInteger64" + ) + valueMarkdown: constr(pattern="^^[\\s\\S]+$$") | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + field_valueMarkdown: Element | None = Field( + None, alias="_valueMarkdown", description="Extensions for valueMarkdown" + ) + valueOid: constr(pattern="^urn:oid:[0-2](\\.(0|[1-9][0-9]*))+$") | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + field_valueOid: Element | None = Field( + None, alias="_valueOid", description="Extensions for valueOid" + ) + valuePositiveInt: float | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + field_valuePositiveInt: Element | None = Field( + None, alias="_valuePositiveInt", description="Extensions for valuePositiveInt" + ) + valueString: constr(pattern="^^[\\s\\S]+$$") | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + field_valueString: Element | None = Field( + None, alias="_valueString", description="Extensions for valueString" + ) + valueTime: ( + constr( + pattern="^([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]{1,9})?$" + ) + | None + ) = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + field_valueTime: Element | None = Field( + None, alias="_valueTime", description="Extensions for valueTime" + ) + valueUnsignedInt: float | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + field_valueUnsignedInt: Element | None = Field( + None, alias="_valueUnsignedInt", description="Extensions for valueUnsignedInt" + ) + valueUri: constr(pattern="^\\S*$") | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + field_valueUri: Element | None = Field( + None, alias="_valueUri", description="Extensions for valueUri" + ) + valueUrl: constr(pattern="^\\S*$") | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + field_valueUrl: Element | None = Field( + None, alias="_valueUrl", description="Extensions for valueUrl" + ) + valueUuid: ( + constr( + pattern="^urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$" + ) + | None + ) = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + field_valueUuid: Element | None = Field( + None, alias="_valueUuid", description="Extensions for valueUuid" + ) + valueAddress: Address | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + valueAge: Age | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + valueAnnotation: Annotation | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + valueAttachment: Attachment | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + valueCodeableConcept: CodeableConcept | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + valueCodeableReference: CodeableReference | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + valueCoding: Coding | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + valueContactPoint: ContactPoint | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + valueCount: Count | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + valueDistance: Distance | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + valueDuration: Duration | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + valueHumanName: HumanName | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + valueIdentifier: Identifier | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + valueMoney: Money | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + valuePeriod: Period | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + valueQuantity: Quantity | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + valueRange: Range | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + valueRatio: Ratio | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + valueRatioRange: RatioRange | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + valueReference: Reference | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + valueSampledData: SampledData | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + valueSignature: Signature | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + valueTiming: Timing | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + valueContactDetail: ContactDetail | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + # valueDataRequirement: Optional[DataRequirement] = Field( + # None, + # description='Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).', + # ) + valueExpression: Expression | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + valueParameterDefinition: ParameterDefinition | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + # valueRelatedArtifact: Optional[RelatedArtifact] = Field( + # None, + # description='Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).', + # ) + # valueTriggerDefinition: Optional[TriggerDefinition] = Field( + # None, + # description='Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).', + # ) + valueUsageContext: UsageContext | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + # valueAvailability: Optional[Availability] = Field( + # None, + # description='Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).', + # ) + # valueExtendedContactDetail: Optional[ExtendedContactDetail] = Field( + # None, + # description='Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).', + # ) + # valueDosage: Optional[Dosage] = Field( + # None, + # description='Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).', + # ) + valueMeta: Meta | None = Field( + None, + description="Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", + ) + + +class Narrative(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + status: Status | None = Field( + None, + description="The status of the narrative - whether it's entirely generated (from just the defined data or the extensions too), or whether a human authored it and it may contain additional data.", + ) + field_status: Element | None = Field( + None, alias="_status", description="Extensions for status" + ) + div: Xhtml = Field( + ..., + description="The actual narrative content, a stripped down version of XHTML.", + ) + + +class Annotation(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + authorReference: Reference | None = Field( + None, description="The individual responsible for making the annotation." + ) + authorString: constr(pattern="^^[\\s\\S]+$$") | None = Field( + None, description="The individual responsible for making the annotation." + ) + field_authorString: Element | None = Field( + None, alias="_authorString", description="Extensions for authorString" + ) + time: DateTime | None = Field( + None, description="Indicates when this particular annotation was made." + ) + field_time: Element | None = Field( + None, alias="_time", description="Extensions for time" + ) + text: Markdown | None = Field( + None, description="The text of the annotation in markdown format." + ) + field_text: Element | None = Field( + None, alias="_text", description="Extensions for text" + ) + + +class Attachment(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + contentType: Code | None = Field( + None, + description="Identifies the type of the data in the attachment and allows a method to be chosen to interpret or render the data. Includes mime type parameters such as charset where appropriate.", + ) + field_contentType: Element | None = Field( + None, alias="_contentType", description="Extensions for contentType" + ) + language: Code | None = Field( + None, + description="The human language of the content. The value can be any valid value according to BCP 47.", + ) + field_language: Element | None = Field( + None, alias="_language", description="Extensions for language" + ) + data: Base64Binary | None = Field( + None, + description="The actual data of the attachment - a sequence of bytes, base64 encoded.", + ) + field_data: Element | None = Field( + None, alias="_data", description="Extensions for data" + ) + url: Url | None = Field( + None, description="A location where the data can be accessed." + ) + field_url: Element | None = Field( + None, alias="_url", description="Extensions for url" + ) + size: Integer64 | None = Field( + None, + description="The number of bytes of data that make up this attachment (before base64 encoding, if that is done).", + ) + field_size: Element | None = Field( + None, alias="_size", description="Extensions for size" + ) + hash: Base64Binary | None = Field( + None, + description="The calculated hash of the data using SHA-1. Represented using base64.", + ) + field_hash: Element | None = Field( + None, alias="_hash", description="Extensions for hash" + ) + title: String | None = Field( + None, description="A label or set of text to display in place of the data." + ) + field_title: Element | None = Field( + None, alias="_title", description="Extensions for title" + ) + creation: DateTime | None = Field( + None, description="The date that the attachment was first created." + ) + field_creation: Element | None = Field( + None, alias="_creation", description="Extensions for creation" + ) + height: PositiveInt | None = Field( + None, description="Height of the image in pixels (photo/video)." + ) + field_height: Element | None = Field( + None, alias="_height", description="Extensions for height" + ) + width: PositiveInt | None = Field( + None, description="Width of the image in pixels (photo/video)." + ) + field_width: Element | None = Field( + None, alias="_width", description="Extensions for width" + ) + frames: PositiveInt | None = Field( + None, + description="The number of frames in a photo. This is used with a multi-page fax, or an imaging acquisition context that takes multiple slices in a single image, or an animated gif. If there is more than one frame, this SHALL have a value in order to alert interface software that a multi-frame capable rendering widget is required.", + ) + field_frames: Element | None = Field( + None, alias="_frames", description="Extensions for frames" + ) + duration: Decimal | None = Field( + None, + description="The duration of the recording in seconds - for audio and video.", + ) + field_duration: Element | None = Field( + None, alias="_duration", description="Extensions for duration" + ) + pages: PositiveInt | None = Field( + None, description="The number of pages when printed." + ) + field_pages: Element | None = Field( + None, alias="_pages", description="Extensions for pages" + ) + + +class Identifier(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + use: Use | None = Field(None, description="The purpose of this identifier.") + field_use: Element | None = Field( + None, alias="_use", description="Extensions for use" + ) + type: CodeableConcept | None = Field( + None, + description="A coded type for the identifier that can be used to determine which identifier to use for a specific purpose.", + ) + system: Uri | None = Field( + None, + description="Establishes the namespace for the value - that is, an absolute URL that describes a set values that are unique.", + ) + field_system: Element | None = Field( + None, alias="_system", description="Extensions for system" + ) + value: String | None = Field( + None, + description="The portion of the identifier typically relevant to the user and which is unique within the context of the system.", + ) + field_value: Element | None = Field( + None, alias="_value", description="Extensions for value" + ) + period: Period | None = Field( + None, description="Time period during which identifier is/was valid for use." + ) + assigner: Reference | None = Field( + None, description="Organization that issued/manages the identifier." + ) + + +class CodeableConcept(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + coding: list[Coding] | None = Field( + None, description="A reference to a code defined by a terminology system." + ) + text: String | None = Field( + None, + description="A human language representation of the concept as seen/selected/uttered by the user who entered the data and/or which represents the intended meaning of the user.", + ) + field_text: Element | None = Field( + None, alias="_text", description="Extensions for text" + ) + + +class CodeableReference(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + concept: CodeableConcept | None = Field( + None, + description="A reference to a concept - e.g. the information is identified by its general class to the degree of precision found in the terminology.", + ) + reference: Reference | None = Field( + None, + description="A reference to a resource the provides exact details about the information being referenced.", + ) + + +class Coding(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + system: Uri | None = Field( + None, + description="The identification of the code system that defines the meaning of the symbol in the code.", + ) + field_system: Element | None = Field( + None, alias="_system", description="Extensions for system" + ) + version: String | None = Field( + None, + description="The version of the code system which was used when choosing this code. Note that a well-maintained code system does not need the version reported, because the meaning of codes is consistent across versions. However this cannot consistently be assured, and when the meaning is not guaranteed to be consistent, the version SHOULD be exchanged.", + ) + field_version: Element | None = Field( + None, alias="_version", description="Extensions for version" + ) + code: Code | None = Field( + None, + description="A symbol in syntax defined by the system. The symbol may be a predefined code or an expression in a syntax defined by the coding system (e.g. post-coordination).", + ) + field_code: Element | None = Field( + None, alias="_code", description="Extensions for code" + ) + display: String | None = Field( + None, + description="A representation of the meaning of the code in the system, following the rules of the system.", + ) + field_display: Element | None = Field( + None, alias="_display", description="Extensions for display" + ) + userSelected: Boolean | None = Field( + None, + description="Indicates that this coding was chosen by a user directly - e.g. off a pick list of available items (codes or displays).", + ) + field_userSelected: Element | None = Field( + None, alias="_userSelected", description="Extensions for userSelected" + ) + + +class Quantity(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + value: Decimal | None = Field( + None, + description="The value of the measured amount. The value includes an implicit precision in the presentation of the value.", + ) + field_value: Element | None = Field( + None, alias="_value", description="Extensions for value" + ) + comparator: Comparator | None = Field( + None, + description='How the value should be understood and represented - whether the actual value is greater or less than the stated value due to measurement issues; e.g. if the comparator is "<" , then the real value is < stated value.', + ) + field_comparator: Element | None = Field( + None, alias="_comparator", description="Extensions for comparator" + ) + unit: String | None = Field(None, description="A human-readable form of the unit.") + field_unit: Element | None = Field( + None, alias="_unit", description="Extensions for unit" + ) + system: Uri | None = Field( + None, + description="The identification of the system that provides the coded form of the unit.", + ) + field_system: Element | None = Field( + None, alias="_system", description="Extensions for system" + ) + code: Code | None = Field( + None, + description="A computer processable form of the unit in some unit representation system.", + ) + field_code: Element | None = Field( + None, alias="_code", description="Extensions for code" + ) + + +class Duration(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + value: Decimal | None = Field( + None, + description="The value of the measured amount. The value includes an implicit precision in the presentation of the value.", + ) + field_value: Element | None = Field( + None, alias="_value", description="Extensions for value" + ) + comparator: Comparator | None = Field( + None, + description='How the value should be understood and represented - whether the actual value is greater or less than the stated value due to measurement issues; e.g. if the comparator is "<" , then the real value is < stated value.', + ) + field_comparator: Element | None = Field( + None, alias="_comparator", description="Extensions for comparator" + ) + unit: String | None = Field(None, description="A human-readable form of the unit.") + field_unit: Element | None = Field( + None, alias="_unit", description="Extensions for unit" + ) + system: Uri | None = Field( + None, + description="The identification of the system that provides the coded form of the unit.", + ) + field_system: Element | None = Field( + None, alias="_system", description="Extensions for system" + ) + code: Code | None = Field( + None, + description="A computer processable form of the unit in some unit representation system.", + ) + field_code: Element | None = Field( + None, alias="_code", description="Extensions for code" + ) + + +class Distance(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + value: Decimal | None = Field( + None, + description="The value of the measured amount. The value includes an implicit precision in the presentation of the value.", + ) + field_value: Element | None = Field( + None, alias="_value", description="Extensions for value" + ) + comparator: Comparator | None = Field( + None, + description='How the value should be understood and represented - whether the actual value is greater or less than the stated value due to measurement issues; e.g. if the comparator is "<" , then the real value is < stated value.', + ) + field_comparator: Element | None = Field( + None, alias="_comparator", description="Extensions for comparator" + ) + unit: String | None = Field(None, description="A human-readable form of the unit.") + field_unit: Element | None = Field( + None, alias="_unit", description="Extensions for unit" + ) + system: Uri | None = Field( + None, + description="The identification of the system that provides the coded form of the unit.", + ) + field_system: Element | None = Field( + None, alias="_system", description="Extensions for system" + ) + code: Code | None = Field( + None, + description="A computer processable form of the unit in some unit representation system.", + ) + field_code: Element | None = Field( + None, alias="_code", description="Extensions for code" + ) + + +class Count(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + value: Decimal | None = Field( + None, + description="The value of the measured amount. The value includes an implicit precision in the presentation of the value.", + ) + field_value: Element | None = Field( + None, alias="_value", description="Extensions for value" + ) + comparator: Comparator | None = Field( + None, + description='How the value should be understood and represented - whether the actual value is greater or less than the stated value due to measurement issues; e.g. if the comparator is "<" , then the real value is < stated value.', + ) + field_comparator: Element | None = Field( + None, alias="_comparator", description="Extensions for comparator" + ) + unit: String | None = Field(None, description="A human-readable form of the unit.") + field_unit: Element | None = Field( + None, alias="_unit", description="Extensions for unit" + ) + system: Uri | None = Field( + None, + description="The identification of the system that provides the coded form of the unit.", + ) + field_system: Element | None = Field( + None, alias="_system", description="Extensions for system" + ) + code: Code | None = Field( + None, + description="A computer processable form of the unit in some unit representation system.", + ) + field_code: Element | None = Field( + None, alias="_code", description="Extensions for code" + ) + + +class Money(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + value: Decimal | None = Field( + None, description="Numerical value (with implicit precision)." + ) + field_value: Element | None = Field( + None, alias="_value", description="Extensions for value" + ) + currency: Code | None = Field(None, description="ISO 4217 Currency Code.") + field_currency: Element | None = Field( + None, alias="_currency", description="Extensions for currency" + ) + + +class Age(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + value: Decimal | None = Field( + None, + description="The value of the measured amount. The value includes an implicit precision in the presentation of the value.", + ) + field_value: Element | None = Field( + None, alias="_value", description="Extensions for value" + ) + comparator: Comparator | None = Field( + None, + description='How the value should be understood and represented - whether the actual value is greater or less than the stated value due to measurement issues; e.g. if the comparator is "<" , then the real value is < stated value.', + ) + field_comparator: Element | None = Field( + None, alias="_comparator", description="Extensions for comparator" + ) + unit: String | None = Field(None, description="A human-readable form of the unit.") + field_unit: Element | None = Field( + None, alias="_unit", description="Extensions for unit" + ) + system: Uri | None = Field( + None, + description="The identification of the system that provides the coded form of the unit.", + ) + field_system: Element | None = Field( + None, alias="_system", description="Extensions for system" + ) + code: Code | None = Field( + None, + description="A computer processable form of the unit in some unit representation system.", + ) + field_code: Element | None = Field( + None, alias="_code", description="Extensions for code" + ) + + +class Range(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + low: Quantity | None = Field( + None, description="The low limit. The boundary is inclusive." + ) + high: Quantity | None = Field( + None, description="The high limit. The boundary is inclusive." + ) + + +class Period(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + start: DateTime | None = Field( + None, description="The start of the period. The boundary is inclusive." + ) + field_start: Element | None = Field( + None, alias="_start", description="Extensions for start" + ) + end: DateTime | None = Field( + None, + description="The end of the period. If the end of the period is missing, it means no end was known or planned at the time the instance was created. The start may be in the past, and the end date in the future, which means that period is expected/planned to end at that time.", + ) + field_end: Element | None = Field( + None, alias="_end", description="Extensions for end" + ) + + +class Ratio(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + numerator: Quantity | None = Field(None, description="The value of the numerator.") + denominator: Quantity | None = Field( + None, description="The value of the denominator." + ) + + +class RatioRange(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + lowNumerator: Quantity | None = Field( + None, description="The value of the low limit numerator." + ) + highNumerator: Quantity | None = Field( + None, description="The value of the high limit numerator." + ) + denominator: Quantity | None = Field( + None, description="The value of the denominator." + ) + + +class Reference(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + reference: String | None = Field( + None, + description="A reference to a location at which the other resource is found. The reference may be a relative reference, in which case it is relative to the service base URL, or an absolute URL that resolves to the location where the resource is found. The reference may be version specific or not. If the reference is not to a FHIR RESTful server, then it should be assumed to be version specific. Internal fragment references (start with '#') refer to contained resources.", + ) + field_reference: Element | None = Field( + None, alias="_reference", description="Extensions for reference" + ) + type: Uri | None = Field( + None, + description='The expected type of the target of the reference. If both Reference.type and Reference.reference are populated and Reference.reference is a FHIR URL, both SHALL be consistent.\n\nThe type is the Canonical URL of Resource Definition that is the type this reference refers to. References are URLs that are relative to http://hl7.org/fhir/StructureDefinition/ e.g. "Patient" is a reference to http://hl7.org/fhir/StructureDefinition/Patient. Absolute URLs are only allowed for logical models (and can only be used in references in logical models, not resources).', + ) + field_type: Element | None = Field( + None, alias="_type", description="Extensions for type" + ) + identifier: Identifier | None = Field( + None, + description="An identifier for the target resource. This is used when there is no way to reference the other resource directly, either because the entity it represents is not available through a FHIR server, or because there is no way for the author of the resource to convert a known identifier to an actual location. There is no requirement that a Reference.identifier point to something that is actually exposed as a FHIR instance, but it SHALL point to a business concept that would be expected to be exposed as a FHIR instance, and that instance would need to be of a FHIR resource type allowed by the reference.", + ) + display: String | None = Field( + None, + description="Plain text narrative that identifies the resource in addition to the resource reference.", + ) + field_display: Element | None = Field( + None, alias="_display", description="Extensions for display" + ) + + +class SampledData(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + origin: Quantity = Field( + ..., + description="The base quantity that a measured value of zero represents. In addition, this provides the units of the entire measurement series.", + ) + interval: Decimal | None = Field( + None, + description="Amount of intervalUnits between samples, e.g. milliseconds for time-based sampling.", + ) + field_interval: Element | None = Field( + None, alias="_interval", description="Extensions for interval" + ) + intervalUnit: Code | None = Field( + None, + description="The measurement unit in which the sample interval is expressed.", + ) + field_intervalUnit: Element | None = Field( + None, alias="_intervalUnit", description="Extensions for intervalUnit" + ) + factor: Decimal | None = Field( + None, + description="A correction factor that is applied to the sampled data points before they are added to the origin.", + ) + field_factor: Element | None = Field( + None, alias="_factor", description="Extensions for factor" + ) + lowerLimit: Decimal | None = Field( + None, + description='The lower limit of detection of the measured points. This is needed if any of the data points have the value "L" (lower than detection limit).', + ) + field_lowerLimit: Element | None = Field( + None, alias="_lowerLimit", description="Extensions for lowerLimit" + ) + upperLimit: Decimal | None = Field( + None, + description='The upper limit of detection of the measured points. This is needed if any of the data points have the value "U" (higher than detection limit).', + ) + field_upperLimit: Element | None = Field( + None, alias="_upperLimit", description="Extensions for upperLimit" + ) + dimensions: PositiveInt | None = Field( + None, + description="The number of sample points at each time point. If this value is greater than one, then the dimensions will be interlaced - all the sample points for a point in time will be recorded at once.", + ) + field_dimensions: Element | None = Field( + None, alias="_dimensions", description="Extensions for dimensions" + ) + codeMap: Canonical | None = Field( + None, + description="Reference to ConceptMap that defines the codes used in the data.", + ) + offsets: String | None = Field( + None, + description="A series of data points which are decimal values separated by a single space (character u20). The units in which the offsets are expressed are found in intervalUnit. The absolute point at which the measurements begin SHALL be conveyed outside the scope of this datatype, e.g. Observation.effectiveDateTime for a timing offset.", + ) + field_offsets: Element | None = Field( + None, alias="_offsets", description="Extensions for offsets" + ) + data: String | None = Field( + None, + description='A series of data points which are decimal values or codes separated by a single space (character u20). The special codes "E" (error), "L" (below detection limit) and "U" (above detection limit) are also defined for used in place of decimal values.', + ) + field_data: Element | None = Field( + None, alias="_data", description="Extensions for data" + ) + + +class Signature(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + type: list[Coding] | None = Field( + None, + description="An indication of the reason that the entity signed this document. This may be explicitly included as part of the signature information and can be used when determining accountability for various actions concerning the document.", + ) + when: Instant | None = Field( + None, description="When the digital signature was signed." + ) + field_when: Element | None = Field( + None, alias="_when", description="Extensions for when" + ) + who: Reference | None = Field( + None, + description="A reference to an application-usable description of the identity that signed (e.g. the signature used their private key).", + ) + onBehalfOf: Reference | None = Field( + None, + description="A reference to an application-usable description of the identity that is represented by the signature.", + ) + targetFormat: Code | None = Field( + None, + description="A mime type that indicates the technical format of the target resources signed by the signature.", + ) + field_targetFormat: Element | None = Field( + None, alias="_targetFormat", description="Extensions for targetFormat" + ) + sigFormat: Code | None = Field( + None, + description="A mime type that indicates the technical format of the signature. Important mime types are application/signature+xml for X ML DigSig, application/jose for JWS, and image/* for a graphical image of a signature, etc.", + ) + field_sigFormat: Element | None = Field( + None, alias="_sigFormat", description="Extensions for sigFormat" + ) + data: Base64Binary | None = Field( + None, + description="The base64 encoding of the Signature content. When signature is not recorded electronically this element would be empty.", + ) + field_data: Element | None = Field( + None, alias="_data", description="Extensions for data" + ) + + +class HumanName(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + use: Use1 | None = Field(None, description="Identifies the purpose for this name.") + field_use: Element | None = Field( + None, alias="_use", description="Extensions for use" + ) + text: String | None = Field( + None, + description="Specifies the entire name as it should be displayed e.g. on an application UI. This may be provided instead of or as well as the specific parts.", + ) + field_text: Element | None = Field( + None, alias="_text", description="Extensions for text" + ) + family: String | None = Field( + None, + description="The part of a name that links to the genealogy. In some cultures (e.g. Eritrea) the family name of a son is the first name of his father.", + ) + field_family: Element | None = Field( + None, alias="_family", description="Extensions for family" + ) + given: list[String] | None = Field(None, description="Given name.") + field_given: list[Element] | None = Field( + None, alias="_given", description="Extensions for given" + ) + prefix: list[String] | None = Field( + None, + description="Part of the name that is acquired as a title due to academic, legal, employment or nobility status, etc. and that appears at the start of the name.", + ) + field_prefix: list[Element] | None = Field( + None, alias="_prefix", description="Extensions for prefix" + ) + suffix: list[String] | None = Field( + None, + description="Part of the name that is acquired as a title due to academic, legal, employment or nobility status, etc. and that appears at the end of the name.", + ) + field_suffix: list[Element] | None = Field( + None, alias="_suffix", description="Extensions for suffix" + ) + period: Period | None = Field( + None, + description="Indicates the period of time when this name was valid for the named person.", + ) + + +class Address(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + use: Use2 | None = Field(None, description="The purpose of this address.") + field_use: Element | None = Field( + None, alias="_use", description="Extensions for use" + ) + type: Type | None = Field( + None, + description="Distinguishes between physical addresses (those you can visit) and mailing addresses (e.g. PO Boxes and care-of addresses). Most addresses are both.", + ) + field_type: Element | None = Field( + None, alias="_type", description="Extensions for type" + ) + text: String | None = Field( + None, + description="Specifies the entire address as it should be displayed e.g. on a postal label. This may be provided instead of or as well as the specific parts.", + ) + field_text: Element | None = Field( + None, alias="_text", description="Extensions for text" + ) + line: list[String] | None = Field( + None, + description="This component contains the house number, apartment number, street name, street direction, P.O. Box number, delivery hints, and similar address information.", + ) + field_line: list[Element] | None = Field( + None, alias="_line", description="Extensions for line" + ) + city: String | None = Field( + None, + description="The name of the city, town, suburb, village or other community or delivery center.", + ) + field_city: Element | None = Field( + None, alias="_city", description="Extensions for city" + ) + district: String | None = Field( + None, description="The name of the administrative area (county)." + ) + field_district: Element | None = Field( + None, alias="_district", description="Extensions for district" + ) + state: String | None = Field( + None, + description="Sub-unit of a country with limited sovereignty in a federally organized country. A code may be used if codes are in common use (e.g. US 2 letter state codes).", + ) + field_state: Element | None = Field( + None, alias="_state", description="Extensions for state" + ) + postalCode: String | None = Field( + None, + description="A postal code designating a region defined by the postal service.", + ) + field_postalCode: Element | None = Field( + None, alias="_postalCode", description="Extensions for postalCode" + ) + country: String | None = Field( + None, + description="Country - a nation as commonly understood or generally accepted.", + ) + field_country: Element | None = Field( + None, alias="_country", description="Extensions for country" + ) + period: Period | None = Field( + None, description="Time period when address was/is in use." + ) + + +class ContactPoint(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + system: System | None = Field( + None, + description="Telecommunications form for contact point - what communications system is required to make use of the contact.", + ) + field_system: Element | None = Field( + None, alias="_system", description="Extensions for system" + ) + value: String | None = Field( + None, + description="The actual contact point details, in a form that is meaningful to the designated communication system (i.e. phone number or email address).", + ) + field_value: Element | None = Field( + None, alias="_value", description="Extensions for value" + ) + use: Use3 | None = Field( + None, description="Identifies the purpose for the contact point." + ) + field_use: Element | None = Field( + None, alias="_use", description="Extensions for use" + ) + rank: PositiveInt | None = Field( + None, + description="Specifies a preferred order in which to use a set of contacts. ContactPoints with lower rank values are more preferred than those with higher rank values.", + ) + field_rank: Element | None = Field( + None, alias="_rank", description="Extensions for rank" + ) + period: Period | None = Field( + None, description="Time period when the contact point was/is in use." + ) + + +class Timing(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + modifierExtension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + ) + event: list[DateTime] | None = Field( + None, description="Identifies specific times when the event occurs." + ) + field_event: list[Element] | None = Field( + None, alias="_event", description="Extensions for event" + ) + repeat: TimingRepeat | None = Field( + None, description="A set of rules that describe when the event is scheduled." + ) + code: CodeableConcept | None = Field( + None, + description="A code for the timing schedule (or just text in code.text). Some codes such as BID are ubiquitous, but many institutions define their own additional codes. If a code is provided, the code is understood to be a complete statement of whatever is specified in the structured timing data, and either the code or the data may be used to interpret the Timing, with the exception that .repeat.bounds still applies over the code (and is not contained in the code).", + ) + + +class TimingRepeat(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + modifierExtension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + ) + boundsDuration: Duration | None = Field( + None, + description="Either a duration for the length of the timing schedule, a range of possible length, or outer bounds for start and/or end limits of the timing schedule.", + ) + boundsRange: Range | None = Field( + None, + description="Either a duration for the length of the timing schedule, a range of possible length, or outer bounds for start and/or end limits of the timing schedule.", + ) + boundsPeriod: Period | None = Field( + None, + description="Either a duration for the length of the timing schedule, a range of possible length, or outer bounds for start and/or end limits of the timing schedule.", + ) + count: PositiveInt | None = Field( + None, + description="A total count of the desired number of repetitions across the duration of the entire timing specification. If countMax is present, this element indicates the lower bound of the allowed range of count values.", + ) + field_count: Element | None = Field( + None, alias="_count", description="Extensions for count" + ) + countMax: PositiveInt | None = Field( + None, + description="If present, indicates that the count is a range - so to perform the action between [count] and [countMax] times.", + ) + field_countMax: Element | None = Field( + None, alias="_countMax", description="Extensions for countMax" + ) + duration: Decimal | None = Field( + None, + description="How long this thing happens for when it happens. If durationMax is present, this element indicates the lower bound of the allowed range of the duration.", + ) + field_duration: Element | None = Field( + None, alias="_duration", description="Extensions for duration" + ) + durationMax: Decimal | None = Field( + None, + description="If present, indicates that the duration is a range - so to perform the action between [duration] and [durationMax] time length.", + ) + field_durationMax: Element | None = Field( + None, alias="_durationMax", description="Extensions for durationMax" + ) + durationUnit: DurationUnit | None = Field( + None, + description="The units of time for the duration, in UCUM units\nNormal practice is to use the 'mo' code as a calendar month when calculating the next occurrence.", + ) + field_durationUnit: Element | None = Field( + None, alias="_durationUnit", description="Extensions for durationUnit" + ) + frequency: PositiveInt | None = Field( + None, + description="The number of times to repeat the action within the specified period. If frequencyMax is present, this element indicates the lower bound of the allowed range of the frequency.", + ) + field_frequency: Element | None = Field( + None, alias="_frequency", description="Extensions for frequency" + ) + frequencyMax: PositiveInt | None = Field( + None, + description="If present, indicates that the frequency is a range - so to repeat between [frequency] and [frequencyMax] times within the period or period range.", + ) + field_frequencyMax: Element | None = Field( + None, alias="_frequencyMax", description="Extensions for frequencyMax" + ) + period: Decimal | None = Field( + None, + description='Indicates the duration of time over which repetitions are to occur; e.g. to express "3 times per day", 3 would be the frequency and "1 day" would be the period. If periodMax is present, this element indicates the lower bound of the allowed range of the period length.', + ) + field_period: Element | None = Field( + None, alias="_period", description="Extensions for period" + ) + periodMax: Decimal | None = Field( + None, + description='If present, indicates that the period is a range from [period] to [periodMax], allowing expressing concepts such as "do this once every 3-5 days.', + ) + field_periodMax: Element | None = Field( + None, alias="_periodMax", description="Extensions for periodMax" + ) + periodUnit: PeriodUnit | None = Field( + None, + description="The units of time for the period in UCUM units\nNormal practice is to use the 'mo' code as a calendar month when calculating the next occurrence.", + ) + field_periodUnit: Element | None = Field( + None, alias="_periodUnit", description="Extensions for periodUnit" + ) + dayOfWeek: list[Code] | None = Field( + None, + description="If one or more days of week is provided, then the action happens only on the specified day(s).", + ) + field_dayOfWeek: list[Element] | None = Field( + None, alias="_dayOfWeek", description="Extensions for dayOfWeek" + ) + timeOfDay: list[Time] | None = Field( + None, description="Specified time of day for action to take place." + ) + field_timeOfDay: list[Element] | None = Field( + None, alias="_timeOfDay", description="Extensions for timeOfDay" + ) + when: list[WhenEnum] | None = Field( + None, + description="An approximate time period during the day, potentially linked to an event of daily living that indicates when the action should occur.", + ) + field_when: list[Element] | None = Field( + None, alias="_when", description="Extensions for when" + ) + offset: UnsignedInt | None = Field( + None, + description="The number of minutes from the event. If the event code does not indicate whether the minutes is before or after the event, then the offset is assumed to be after the event.", + ) + field_offset: Element | None = Field( + None, alias="_offset", description="Extensions for offset" + ) + + +class Meta(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + versionId: Id | None = Field( + None, + description="The version specific identifier, as it appears in the version portion of the URL. This value changes when the resource is created, updated, or deleted.", + ) + field_versionId: Element | None = Field( + None, alias="_versionId", description="Extensions for versionId" + ) + lastUpdated: Instant | None = Field( + None, + description="When the resource last changed - e.g. when the version changed.", + ) + field_lastUpdated: Element | None = Field( + None, alias="_lastUpdated", description="Extensions for lastUpdated" + ) + source: Uri | None = Field( + None, + description="A uri that identifies the source system of the resource. This provides a minimal amount of [[[Provenance]]] information that can be used to track or differentiate the source of information in the resource. The source may identify another FHIR server, document, message, database, etc.", + ) + field_source: Element | None = Field( + None, alias="_source", description="Extensions for source" + ) + profile: list[Canonical] | None = Field( + None, + description="A list of profiles (references to [[[StructureDefinition]]] resources) that this resource claims to conform to. The URL is a reference to [[[StructureDefinition.url]]].", + ) + security: list[Coding] | None = Field( + None, + description="Security labels applied to this resource. These tags connect specific resources to the overall security policy and infrastructure.", + ) + tag: list[Coding] | None = Field( + None, + description="Tags applied to this resource. Tags are intended to be used to identify and relate resources to process and workflow, and applications are not required to consider the tags when interpreting the meaning of a resource.", + ) + + +class ContactDetail(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + name: String | None = Field( + None, description="The name of an individual to contact." + ) + field_name: Element | None = Field( + None, alias="_name", description="Extensions for name" + ) + telecom: list[ContactPoint] | None = Field( + None, + description="The contact details for the individual (if a name was provided) or the organization.", + ) + + +class Expression(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + description: String | None = Field( + None, + description="A brief, natural language description of the condition that effectively communicates the intended semantics.", + ) + field_description: Element | None = Field( + None, alias="_description", description="Extensions for description" + ) + name: Code | None = Field( + None, + description="A short name assigned to the expression to allow for multiple reuse of the expression in the context where it is defined.", + ) + field_name: Element | None = Field( + None, alias="_name", description="Extensions for name" + ) + language: Code | None = Field( + None, description="The media type of the language for the expression." + ) + field_language: Element | None = Field( + None, alias="_language", description="Extensions for language" + ) + expression: String | None = Field( + None, + description="An expression in the specified language that returns a value.", + ) + field_expression: Element | None = Field( + None, alias="_expression", description="Extensions for expression" + ) + reference: Uri | None = Field( + None, description="A URI that defines where the expression is found." + ) + field_reference: Element | None = Field( + None, alias="_reference", description="Extensions for reference" + ) + + +class ParameterDefinition(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + name: Code | None = Field( + None, + description="The name of the parameter used to allow access to the value of the parameter in evaluation contexts.", + ) + field_name: Element | None = Field( + None, alias="_name", description="Extensions for name" + ) + use: Code | None = Field( + None, description="Whether the parameter is input or output for the module." + ) + field_use: Element | None = Field( + None, alias="_use", description="Extensions for use" + ) + min: Integer | None = Field( + None, + description="The minimum number of times this parameter SHALL appear in the request or response.", + ) + field_min: Element | None = Field( + None, alias="_min", description="Extensions for min" + ) + max: String | None = Field( + None, + description="The maximum number of times this element is permitted to appear in the request or response.", + ) + field_max: Element | None = Field( + None, alias="_max", description="Extensions for max" + ) + documentation: String | None = Field( + None, + description="A brief discussion of what the parameter is for and how it is used by the module.", + ) + field_documentation: Element | None = Field( + None, alias="_documentation", description="Extensions for documentation" + ) + type: Code | None = Field(None, description="The type of the parameter.") + field_type: Element | None = Field( + None, alias="_type", description="Extensions for type" + ) + profile: Canonical | None = Field( + None, + description="If specified, this indicates a profile that the input data must conform to, or that the output data will conform to.", + ) + + +class UsageContext(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + code: Coding = Field( + ..., + description="A code that identifies the type of context being specified by this usage context.", + ) + valueCodeableConcept: CodeableConcept | None = Field( + None, + description="A value that defines the context specified in this context of use. The interpretation of the value is defined by the code.", + ) + valueQuantity: Quantity | None = Field( + None, + description="A value that defines the context specified in this context of use. The interpretation of the value is defined by the code.", + ) + valueRange: Range | None = Field( + None, + description="A value that defines the context specified in this context of use. The interpretation of the value is defined by the code.", + ) + valueReference: Reference | None = Field( + None, + description="A value that defines the context specified in this context of use. The interpretation of the value is defined by the code.", + ) diff --git a/care/emr/fhir/schema/valueset/__init__.py b/care/emr/fhir/schema/valueset/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/care/emr/fhir/schema/valueset/valueset.py b/care/emr/fhir/schema/valueset/valueset.py new file mode 100644 index 0000000000..281621ea92 --- /dev/null +++ b/care/emr/fhir/schema/valueset/valueset.py @@ -0,0 +1,938 @@ +# ruff: noqa: F403 N815 F405 ERA001 - Naming convention is disabled for this file because it needs to match the FHIR schema +# Partly generated from fhir.schema.json R5 on 2024-11-09 + +from __future__ import annotations + +from typing import Literal + +from pydantic import BaseModel, ConfigDict, Field, constr + +from care.emr.fhir.schema.base import * + + +class ValueSet(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + + # id: Id | None = Field( + # None, + # description="The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", + # ) + meta: Meta | None = Field( + None, + description="The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", + ) + implicitRules: Uri | None = Field( + None, + description="A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", + ) + # field_implicitRules: Element | None = Field( + # None, alias="_implicitRules", description="Extensions for implicitRules" + # ) + language: Code | None = Field( + None, description="The base language in which the resource is written." + ) + # field_language: Element | None = Field( + # None, alias="_language", description="Extensions for language" + # ) + text: Narrative | None = Field( + None, + description='A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.', + ) + # contained: list[ResourceList] | None = Field( + # None, + # description="These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, nor can they have their own independent transaction scope. This is allowed to be a Parameters resource if and only if it is referenced by a resource that provides context/meaning.", + # ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + modifierExtension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + ) + url: Uri | None = Field( + None, + description="An absolute URI that is used to identify this value set when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which an authoritative instance of this value set is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the value set is stored on different servers.", + ) + # field_url: Element | None = Field( + # None, alias="_url", description="Extensions for url" + # ) + identifier: list[Identifier] | None = Field( + None, + description="A formal identifier that is used to identify this value set when it is represented in other formats, or referenced in a specification, model, design or an instance.", + ) + version: String | None = Field( + None, + description="The identifier that is used to identify this version of the value set when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the value set author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.", + ) + # field_version: Element | None = Field( + # None, alias="_version", description="Extensions for version" + # ) + versionAlgorithmString: constr(pattern="^^[\\s\\S]+$$") | None = Field( + None, + description="Indicates the mechanism used to compare versions to determine which ValueSet is more current.", + ) + # field_versionAlgorithmString: Element | None = Field( + # None, + # alias="_versionAlgorithmString", + # description="Extensions for versionAlgorithmString", + # ) + versionAlgorithmCoding: Coding | None = Field( + None, + description="Indicates the mechanism used to compare versions to determine which ValueSet is more current.", + ) + name: String = Field( + ..., + description="A natural language name identifying the value set. This name should be usable as an identifier for the module by machine processing applications such as code generation.", + ) + # field_name: Element | None = Field( + # None, alias="_name", description="Extensions for name" + # ) + title: String | None = Field( + None, description="A short, descriptive, user-friendly title for the value set." + ) + # field_title: Element | None = Field( + # None, alias="_title", description="Extensions for title" + # ) + status: Code | None = Field( + None, + description="The status of this value set. Enables tracking the life-cycle of the content. The status of the value set applies to the value set definition (ValueSet.compose) and the associated ValueSet metadata. Expansions do not have a state.", + ) + # field_status: Element | None = Field( + # None, alias="_status", description="Extensions for status" + # ) + experimental: Boolean | None = Field( + None, + description="A Boolean value to indicate that this value set is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.", + ) + # field_experimental: Element | None = Field( + # None, alias="_experimental", description="Extensions for experimental" + # ) + date: DateTime | None = Field( + None, + description="The date (and optionally time) when the value set metadata or content logical definition (.compose) was created or revised.", + ) + # field_date: Element | None = Field( + # None, alias="_date", description="Extensions for date" + # ) + publisher: String | None = Field( + None, + description="The name of the organization or individual responsible for the release and ongoing maintenance of the value set.", + ) + # field_publisher: Element | None = Field( + # None, alias="_publisher", description="Extensions for publisher" + # ) + contact: list[ContactDetail] | None = Field( + None, + description="Contact details to assist a user in finding and communicating with the publisher.", + ) + description: String = Field( + ..., + description="A free text natural language description of the value set from a consumer's perspective. The textual description specifies the span of meanings for concepts to be included within the Value Set Expansion, and also may specify the intended use and limitations of the Value Set.", + ) + # field_description: Element | None = Field( + # None, alias="_description", description="Extensions for description" + # ) + useContext: list[UsageContext] | None = Field( + None, + description="The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate value set instances.", + ) + jurisdiction: list[CodeableConcept] | None = Field( + None, + description="A legal or geographic region in which the value set is intended to be used.", + ) + purpose: Markdown | None = Field( + None, + description="Explanation of why this value set is needed and why it has been designed as it has.", + ) + # field_purpose: Element | None = Field( + # None, alias="_purpose", description="Extensions for purpose" + # ) + copyright: Markdown | None = Field( + None, + description="A copyright statement relating to the value set and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the value set.", + ) + # field_copyright: Element | None = Field( + # None, alias="_copyright", description="Extensions for copyright" + # ) + copyrightLabel: String | None = Field( + None, + description="A short string (<50 characters), suitable for inclusion in a page footer that identifies the copyright holder, effective period, and optionally whether rights are resctricted. (e.g. 'All rights reserved', 'Some rights reserved').", + ) + # field_copyrightLabel: Element | None = Field( + # None, alias="_copyrightLabel", description="Extensions for copyrightLabel" + # ) + approvalDate: Date | None = Field( + None, + description="The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.", + ) + # field_approvalDate: Element | None = Field( + # None, alias="_approvalDate", description="Extensions for approvalDate" + # ) + lastReviewDate: Date | None = Field( + None, + description="The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.", + ) + # field_lastReviewDate: Element | None = Field( + # None, alias="_lastReviewDate", description="Extensions for lastReviewDate" + # ) + effectivePeriod: Period | None = Field( + None, + description="The period during which the ValueSet content was or is planned to be in active use.", + ) + topic: list[CodeableConcept] | None = Field( + None, + description="Descriptions related to the content of the ValueSet. Topics provide a high-level categorization as well as keywords for the ValueSet that can be useful for filtering and searching.", + ) + author: list[ContactDetail] | None = Field( + None, + description="An individiual or organization primarily involved in the creation and maintenance of the ValueSet.", + ) + editor: list[ContactDetail] | None = Field( + None, + description="An individual or organization primarily responsible for internal coherence of the ValueSet.", + ) + reviewer: list[ContactDetail] | None = Field( + None, + description="An individual or organization asserted by the publisher to be primarily responsible for review of some aspect of the ValueSet.", + ) + endorser: list[ContactDetail] | None = Field( + None, + description="An individual or organization asserted by the publisher to be responsible for officially endorsing the ValueSet for use in some setting.", + ) + # relatedArtifact: list[RelatedArtifact] | None = Field( + # None, + # description="Related artifacts such as additional documentation, justification, dependencies, bibliographic references, and predecessor and successor artifacts.", + # ) + immutable: Boolean | None = Field( + None, + description="If this is set to 'true', then no new versions of the content logical definition can be created. Note: Other metadata might still change.", + ) + # field_immutable: Element | None = Field( + # None, alias="_immutable", description="Extensions for immutable" + # ) + compose: ValueSetCompose = Field( + ..., + description="A set of criteria that define the contents of the value set by including or excluding codes selected from the specified code system(s) that the value set draws from. This is also known as the Content Logical Definition (CLD).", + ) + expansion: ValueSetExpansion | None = Field( + None, + description='A value set can also be "expanded", where the value set is turned into a simple collection of enumerated codes. This element holds the expansion, if it has been performed.', + ) + scope: ValueSetScope | None = Field( + None, + description="Description of the semantic space the Value Set Expansion is intended to cover and should further clarify the text in ValueSet.description.", + ) + + +class ValueSetCompose(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + modifierExtension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + ) + lockedDate: Date | None = Field( + None, + description="The Locked Date is the effective date that is used to determine the version of all referenced Code Systems and Value Set Definitions included in the compose that are not already tied to a specific version.", + ) + # field_lockedDate: Element | None = Field( + # None, alias="_lockedDate", description="Extensions for lockedDate" + # ) + inactive: Boolean | None = Field( + None, + description="Whether inactive codes - codes that are not approved for current use - are in the value set. If inactive = true, inactive codes are to be included in the expansion, if inactive = false, the inactive codes will not be included in the expansion. If absent, the behavior is determined by the implementation, or by the applicable $expand parameters (but generally, inactive codes would be expected to be included).", + ) + # field_inactive: Element | None = Field( + # None, alias="_inactive", description="Extensions for inactive" + # ) + include: list[ValueSetInclude] = Field( + ..., + description="Include one or more codes from a code system or other value set(s).", + ) + exclude: list[ValueSetInclude] | None = Field( + None, + description="Exclude one or more codes from the value set based on code system filters and/or other value sets.", + ) + property: list[String] | None = Field( + None, + description="A property to return in the expansion, if the client doesn't ask for any particular properties. May be either a code from the code system definition (convenient) or a the formal URI that refers to the property. The special value '*' means all properties known to the server.", + ) + # field_property: list[Element] | None = Field( + # None, alias="_property", description="Extensions for property" + # ) + + +class ValueSetInclude(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + modifierExtension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + ) + system: Uri | None = Field( + None, + description="An absolute URI which is the code system from which the selected codes come from.", + ) + # field_system: Element | None = Field( + # None, alias="_system", description="Extensions for system" + # ) + version: String | None = Field( + None, + description="The version of the code system that the codes are selected from, or the special version '*' for all versions.", + ) + # field_version: Element | None = Field( + # None, alias="_version", description="Extensions for version" + # ) + concept: list[ValueSetConcept] | None = Field( + None, description="Specifies a concept to be included or excluded." + ) + filter: list[ValueSetFilter] | None = Field( + None, + description="Select concepts by specifying a matching criterion based on the properties (including relationships) defined by the system, or on filters defined by the system. If multiple filters are specified within the include, they SHALL all be true.", + ) + valueSet: list[Canonical] | None = Field( + None, + description="Selects the concepts found in this value set (based on its value set definition). This is an absolute URI that is a reference to ValueSet.url. If multiple value sets are specified this includes the intersection of the contents of all of the referenced value sets.", + ) + copyright: String | None = Field( + None, + description="A copyright statement for the specific code system asserted by the containing ValueSet.compose.include element's system value (if the associated ValueSet.compose.include.version element is not present); or the code system and version combination (if the associated ValueSet.compose.include.version element is present).", + ) + # field_copyright: Element | None = Field( + # None, alias="_copyright", description="Extensions for copyright" + # ) + + +class ValueSetConcept(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + modifierExtension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + ) + code: Code | None = Field( + None, description="Specifies a code for the concept to be included or excluded." + ) + # field_code: Element | None = Field( + # None, alias="_code", description="Extensions for code" + # ) + display: String | None = Field( + None, + description="The text to display to the user for this concept in the context of this valueset. If no display is provided, then applications using the value set use the display specified for the code by the system.", + ) + # field_display: Element | None = Field( + # None, alias="_display", description="Extensions for display" + # ) + designation: list[ValueSetDesignation] | None = Field( + None, + description="Additional representations for this concept when used in this value set - other languages, aliases, specialized purposes, used for particular purposes, etc.", + ) + + +class ValueSetDesignation(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + modifierExtension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + ) + language: Code | None = Field( + None, description="The language this designation is defined for." + ) + # field_language: Element | None = Field( + # None, alias="_language", description="Extensions for language" + # ) + use: Coding | None = Field( + None, description="A code that represents types of uses of designations." + ) + additionalUse: list[Coding] | None = Field( + None, + description="Additional codes that detail how this designation would be used, if there is more than one use.", + ) + value: String | None = Field( + None, description="The text value for this designation." + ) + # field_value: Element | None = Field( + # None, alias="_value", description="Extensions for value" + # ) + + +class ValueSetFilter(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + modifierExtension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + ) + property: Code | None = Field( + None, + description="A code that identifies a property or a filter defined in the code system.", + ) + # field_property: Element | None = Field( + # None, alias="_property", description="Extensions for property" + # ) + op: Code | None = Field( + None, + description="The kind of operation to perform as a part of the filter criteria.", + ) + # field_op: Element | None = Field(None, alias="_op", description="Extensions for op") + value: String | None = Field( + None, + description="The match value may be either a code defined by the system, or a string value, which is a regex match on the literal string of the property value (if the filter represents a property defined in CodeSystem) or of the system filter value (if the filter represents a filter defined in CodeSystem) when the operation is 'regex', or one of the values (true and false), when the operation is 'exists'.", + ) + # field_value: Element | None = Field( + # None, alias="_value", description="Extensions for value" + # ) + + +class ValueSetExpansion(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + modifierExtension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + ) + identifier: Uri | None = Field( + None, + description="An identifier that uniquely identifies this expansion of the valueset, based on a unique combination of the provided parameters, the system default parameters, and the underlying system code system versions etc. Systems may re-use the same identifier as long as those factors remain the same, and the expansion is the same, but are not required to do so. This is a business identifier.", + ) + # field_identifier: Element | None = Field( + # None, alias="_identifier", description="Extensions for identifier" + # ) + next: Uri | None = Field( + None, + description="As per paging Search results, the next URLs are opaque to the client, have no dictated structure, and only the server understands them.", + ) + # field_next: Element | None = Field( + # None, alias="_next", description="Extensions for next" + # ) + timestamp: DateTime | None = Field( + None, + description="The time at which the expansion was produced by the expanding system.", + ) + # field_timestamp: Element | None = Field( + # None, alias="_timestamp", description="Extensions for timestamp" + # ) + total: Integer | None = Field( + None, + description="The total number of concepts in the expansion. If the number of concept nodes in this resource is less than the stated number, then the server can return more using the offset parameter.", + ) + # field_total: Element | None = Field( + # None, alias="_total", description="Extensions for total" + # ) + offset: Integer | None = Field( + None, + description="If paging is being used, the offset at which this resource starts. I.e. this resource is a partial view into the expansion. If paging is not being used, this element SHALL NOT be present.", + ) + # field_offset: Element | None = Field( + # None, alias="_offset", description="Extensions for offset" + # ) + parameter: list[ValueSetParameter] | None = Field( + None, + description="A parameter that controlled the expansion process. These parameters may be used by users of expanded value sets to check whether the expansion is suitable for a particular purpose, or to pick the correct expansion.", + ) + property: list[ValueSetProperty] | None = Field( + None, + description="A property defines an additional slot through which additional information can be provided about a concept.", + ) + contains: list[ValueSetContains] | None = Field( + None, description="The codes that are contained in the value set expansion." + ) + + +class ValueSetParameter(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + modifierExtension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + ) + name: String | None = Field( + None, + description="Name of the input parameter to the $expand operation; may be a server-assigned name for additional default or other server-supplied parameters used to control the expansion process.", + ) + # field_name: Element | None = Field( + # None, alias="_name", description="Extensions for name" + # ) + valueString: constr(pattern="^^[\\s\\S]+$$") | None = Field( + None, description="The value of the parameter." + ) + field_valueString: Element | None = Field( + None, alias="_valueString", description="Extensions for valueString" + ) + valueBoolean: bool | None = Field(None, description="The value of the parameter.") + # field_valueBoolean: Element | None = Field( + # None, alias="_valueBoolean", description="Extensions for valueBoolean" + # ) + valueInteger: float | None = Field(None, description="The value of the parameter.") + # field_valueInteger: Element | None = Field( + # None, alias="_valueInteger", description="Extensions for valueInteger" + # ) + valueDecimal: float | None = Field(None, description="The value of the parameter.") + # field_valueDecimal: Element | None = Field( + # None, alias="_valueDecimal", description="Extensions for valueDecimal" + # ) + valueUri: constr(pattern="^\\S*$") | None = Field( + None, description="The value of the parameter." + ) + # field_valueUri: Element | None = Field( + # None, alias="_valueUri", description="Extensions for valueUri" + # ) + valueCode: constr(pattern="^[^\\s]+( [^\\s]+)*$") | None = Field( + None, description="The value of the parameter." + ) + # field_valueCode: Element | None = Field( + # None, alias="_valueCode", description="Extensions for valueCode" + # ) + valueDateTime: ( + constr( + pattern="^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]{1,9})?)?)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)?)?)?$" + ) + | None + ) = Field(None, description="The value of the parameter.") + # field_valueDateTime: Element | None = Field( + # None, alias="_valueDateTime", description="Extensions for valueDateTime" + # ) + + +class ValueSetProperty(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + modifierExtension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + ) + code: Code | None = Field( + None, + description="A code that is used to identify the property. The code is used in ValueSet.expansion.contains.property.code.", + ) + # field_code: Element | None = Field( + # None, alias="_code", description="Extensions for code" + # ) + uri: Uri | None = Field( + None, + description="Reference to the formal meaning of the property. One possible source of meaning is the [Concept Properties](codesystem-concept-properties.html) code system.", + ) + # field_uri: Element | None = Field( + # None, alias="_uri", description="Extensions for uri" + # ) + + +class ValueSetContains(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + modifierExtension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + ) + system: Uri | None = Field( + None, + description="An absolute URI which is the code system in which the code for this item in the expansion is defined.", + ) + # field_system: Element | None = Field( + # None, alias="_system", description="Extensions for system" + # ) + abstract: Boolean | None = Field( + None, + description="If true, this entry is included in the expansion for navigational purposes, and the user cannot select the code directly as a proper value.", + ) + # field_abstract: Element | None = Field( + # None, alias="_abstract", description="Extensions for abstract" + # ) + inactive: Boolean | None = Field( + None, + description="If the concept is inactive in the code system that defines it. Inactive codes are those that are no longer to be used, but are maintained by the code system for understanding legacy data. It might not be known or specified whether a concept is inactive (and it may depend on the context of use).", + ) + # field_inactive: Element | None = Field( + # None, alias="_inactive", description="Extensions for inactive" + # ) + version: String | None = Field( + None, + description="The version of the code system from this code was taken. Note that a well-maintained code system does not need the version reported, because the meaning of codes is consistent across versions. However this cannot consistently be assured, and when the meaning is not guaranteed to be consistent, the version SHOULD be exchanged.", + ) + # field_version: Element | None = Field( + # None, alias="_version", description="Extensions for version" + # ) + code: Code | None = Field( + None, + description="The code for this item in the expansion hierarchy. If this code is missing the entry in the hierarchy is a place holder (abstract) and does not represent a valid code in the value set.", + ) + # field_code: Element | None = Field( + # None, alias="_code", description="Extensions for code" + # ) + display: String | None = Field( + None, description="The recommended display for this item in the expansion." + ) + # field_display: Element | None = Field( + # None, alias="_display", description="Extensions for display" + # ) + designation: list[ValueSetDesignation] | None = Field( + None, + description="Additional representations for this item - other languages, aliases, specialized purposes, used for particular purposes, etc. These are relevant when the conditions of the expansion do not fix to a single correct representation.", + ) + property: list[ValueSetProperty1] | None = Field( + None, description="A property value for this concept." + ) + contains: list[ValueSetContains] | None = Field( + None, + description="Other codes and entries contained under this entry in the hierarchy.", + ) + + +class ValueSetProperty1(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + modifierExtension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + ) + code: Code | None = Field( + None, + description="A code that is a reference to ValueSet.expansion.property.code.", + ) + # field_code: Element | None = Field( + # None, alias="_code", description="Extensions for code" + # ) + valueCode: constr(pattern="^[^\\s]+( [^\\s]+)*$") | None = Field( + None, description="The value of this property." + ) + # field_valueCode: Element | None = Field( + # None, alias="_valueCode", description="Extensions for valueCode" + # ) + valueCoding: Coding | None = Field(None, description="The value of this property.") + valueString: constr(pattern="^^[\\s\\S]+$$") | None = Field( + None, description="The value of this property." + ) + # field_valueString: Element | None = Field( + # None, alias="_valueString", description="Extensions for valueString" + # ) + valueInteger: float | None = Field(None, description="The value of this property.") + # field_valueInteger: Element | None = Field( + # None, alias="_valueInteger", description="Extensions for valueInteger" + # ) + valueBoolean: bool | None = Field(None, description="The value of this property.") + # field_valueBoolean: Element | None = Field( + # None, alias="_valueBoolean", description="Extensions for valueBoolean" + # ) + valueDateTime: ( + constr( + pattern="^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]{1,9})?)?)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)?)?)?$" + ) + | None + ) = Field(None, description="The value of this property.") + # field_valueDateTime: Element | None = Field( + # None, alias="_valueDateTime", description="Extensions for valueDateTime" + # ) + valueDecimal: float | None = Field(None, description="The value of this property.") + # field_valueDecimal: Element | None = Field( + # None, alias="_valueDecimal", description="Extensions for valueDecimal" + # ) + subProperty: list[ValueSetSubProperty] | None = Field( + None, description="A subproperty value for this concept." + ) + + +class ValueSetSubProperty(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + modifierExtension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + ) + code: Code | None = Field( + None, + description="A code that is a reference to ValueSet.expansion.property.code.", + ) + # field_code: Element | None = Field( + # None, alias="_code", description="Extensions for code" + # ) + valueCode: constr(pattern="^[^\\s]+( [^\\s]+)*$") | None = Field( + None, description="The value of this subproperty." + ) + # field_valueCode: Element | None = Field( + # None, alias="_valueCode", description="Extensions for valueCode" + # ) + valueCoding: Coding | None = Field( + None, description="The value of this subproperty." + ) + valueString: constr(pattern="^^[\\s\\S]+$$") | None = Field( + None, description="The value of this subproperty." + ) + # field_valueString: Element | None = Field( + # None, alias="_valueString", description="Extensions for valueString" + # ) + valueInteger: float | None = Field( + None, description="The value of this subproperty." + ) + # field_valueInteger: Element | None = Field( + # None, alias="_valueInteger", description="Extensions for valueInteger" + # ) + valueBoolean: bool | None = Field( + None, description="The value of this subproperty." + ) + # field_valueBoolean: Element | None = Field( + # None, alias="_valueBoolean", description="Extensions for valueBoolean" + # ) + valueDateTime: ( + constr( + pattern="^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]{1,9})?)?)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)?)?)?$" + ) + | None + ) = Field(None, description="The value of this subproperty.") + # field_valueDateTime: Element | None = Field( + # None, alias="_valueDateTime", description="Extensions for valueDateTime" + # ) + valueDecimal: float | None = Field( + None, description="The value of this subproperty." + ) + # field_valueDecimal: Element | None = Field( + # None, alias="_valueDecimal", description="Extensions for valueDecimal" + # ) + + +class ValueSetScope(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + id: String | None = Field( + None, + description="Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", + ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + modifierExtension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + ) + inclusionCriteria: String | None = Field( + None, + description="Criteria describing which concepts or codes should be included and why.", + ) + # field_inclusionCriteria: Element | None = Field( + # None, alias="_inclusionCriteria", description="Extensions for inclusionCriteria" + # ) + exclusionCriteria: String | None = Field( + None, + description="Criteria describing which concepts or codes should be excluded and why.", + ) + # field_exclusionCriteria: Element | None = Field( + # None, alias="_exclusionCriteria", description="Extensions for exclusionCriteria" + # ) + + +class VerificationResult(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + resourceType: Literal["VerificationResult"] = Field( + ..., description="This is a VerificationResult resource" + ) + id: Id | None = Field( + None, + description="The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", + ) + meta: Meta | None = Field( + None, + description="The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", + ) + implicitRules: Uri | None = Field( + None, + description="A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", + ) + # field_implicitRules: Element | None = Field( + # None, alias="_implicitRules", description="Extensions for implicitRules" + # ) + language: Code | None = Field( + None, description="The base language in which the resource is written." + ) + # field_language: Element | None = Field( + # None, alias="_language", description="Extensions for language" + # ) + text: Narrative | None = Field( + None, + description='A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.', + ) + # contained: list[ResourceList] | None = Field( + # None, + # description="These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, nor can they have their own independent transaction scope. This is allowed to be a Parameters resource if and only if it is referenced by a resource that provides context/meaning.", + # ) + extension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", + ) + modifierExtension: list[Extension] | None = Field( + None, + description="May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", + ) + target: list[Reference] | None = Field( + None, description="A resource that was validated." + ) + targetLocation: list[String] | None = Field( + None, + description="The fhirpath location(s) within the resource that was validated.", + ) + # field_targetLocation: list[Element] | None = Field( + # None, alias="_targetLocation", description="Extensions for targetLocation" + # ) + need: CodeableConcept | None = Field( + None, + description="The frequency with which the target must be validated (none; initial; periodic).", + ) + status: Code | None = Field( + None, + description="The validation status of the target (attested; validated; in process; requires revalidation; validation failed; revalidation failed).", + ) + # field_status: Element | None = Field( + # None, alias="_status", description="Extensions for status" + # ) + statusDate: DateTime | None = Field( + None, description="When the validation status was updated." + ) + # field_statusDate: Element | None = Field( + # None, alias="_statusDate", description="Extensions for statusDate" + # ) + validationType: CodeableConcept | None = Field( + None, + description="What the target is validated against (nothing; primary source; multiple sources).", + ) + validationProcess: list[CodeableConcept] | None = Field( + None, + description="The primary process by which the target is validated (edit check; value set; primary source; multiple sources; standalone; in context).", + ) + frequency: Timing | None = Field(None, description="Frequency of revalidation.") + lastPerformed: DateTime | None = Field( + None, + description="The date/time validation was last completed (including failed validations).", + ) + # field_lastPerformed: Element | None = Field( + # None, alias="_lastPerformed", description="Extensions for lastPerformed" + # ) + nextScheduled: Date | None = Field( + None, description="The date when target is next validated, if appropriate." + ) + # field_nextScheduled: Element | None = Field( + # None, alias="_nextScheduled", description="Extensions for nextScheduled" + # ) + failureAction: CodeableConcept | None = Field( + None, + description="The result if validation fails (fatal; warning; record only; none).", + ) + # primarySource: list[VerificationResultPrimarySource] | None = Field( + # None, + # description="Information about the primary source(s) involved in validation.", + # ) + # attestation: VerificationResultAttestation | None = Field( + # None, description="Information about the entity attesting to information." + # ) + # validator: list[VerificationResultValidator] | None = Field( + # None, description="Information about the entity validating information." + # ) + + +ValueSetInclude.model_rebuild() +ValueSetCompose.model_rebuild() +ValueSetExpansion.model_rebuild() diff --git a/care/emr/fhir/schema/valueset/valueset_enum.py b/care/emr/fhir/schema/valueset/valueset_enum.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/care/emr/fhir/utils.py b/care/emr/fhir/utils.py new file mode 100644 index 0000000000..958177e829 --- /dev/null +++ b/care/emr/fhir/utils.py @@ -0,0 +1,30 @@ +def parse_fhir_property_part(part): + code = "" + value = None + for subpart in part: + if subpart["name"] == "code": + code = subpart["valueCode"] + elif subpart["name"] == "value": + if "valueString" in subpart: + value = subpart["valueString"] + if "valueCoding" in subpart: + value = subpart["valueCoding"] + return {code: value} + + +def parse_fhir_parameter_output(parameters): + """ + Makes a json structure from an FHIR parameter response + """ + response = {} + for parameter in parameters: + value = "" + if "valueString" in parameter: + value = parameter["valueString"] + if parameter["name"] == "property": + if "property" not in response: + response["property"] = {} + response["property"].update(parse_fhir_property_part(parameter["part"])) + else: + response[parameter["name"]] = value + return response diff --git a/care/emr/management/commands/__init__.py b/care/emr/management/commands/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/care/emr/management/commands/sync_valueset.py b/care/emr/management/commands/sync_valueset.py new file mode 100644 index 0000000000..1e1deaaf65 --- /dev/null +++ b/care/emr/management/commands/sync_valueset.py @@ -0,0 +1,35 @@ +# ruff : noqa : T201 F841 + +from django.core.management.base import BaseCommand + +from care.emr.models import ValueSet +from care.emr.resources.care_valueset.care_valueset import SystemValueSet + + +class Command(BaseCommand): + """ """ + + help = "Sync Care ValueSets to Database. Optionally overwrite them." + + def add_arguments(self, parser): + parser.add_argument( + "--overwrite", + default=True, + type=bool, + help="Overwrite the valueset if already present", + ) + + def handle(self, *args, **options): + valuesets = SystemValueSet.get_all_valuesets() + for valueset in valuesets: + queryset = ValueSet.objects.filter(slug=valueset.slug) + obj = queryset.first() + if obj and not options["overwrite"]: + continue + if not obj: + obj = ValueSet(slug=valueset.slug) + obj.name = valueset.name + obj.status = valueset.status + obj.compose = valueset.composition.model_dump(exclude_defaults=True) + obj.is_system_defined = True + obj.save() diff --git a/care/emr/management/commands/test_emr.py b/care/emr/management/commands/test_emr.py new file mode 100644 index 0000000000..f3e9477f33 --- /dev/null +++ b/care/emr/management/commands/test_emr.py @@ -0,0 +1,32 @@ +# ruff : noqa : T201 F841 + +from django.core.management.base import BaseCommand + +from care.emr.fhir.resources.code_concept import CodeConceptResource +from care.emr.fhir.resources.code_system import CodeSystemResource +from care.emr.fhir.resources.valueset import ValueSetResource +from care.emr.resources.allergy_intolerance.valueset import CARE_ALLERGY_CODE_VALUESET + + +class Command(BaseCommand): + """ """ + + help = "" + + def handle(self, *args, **options): + code_system = CodeSystemResource().filter(url="http://loinc.org").get() + code_concept = ( + CodeConceptResource().filter(system=code_system.url, code="8302-2").get() + ) + valueset = ( + ValueSetResource() + .filter( + search="Pressure", + count=2, + include=[{"system": code_system.url, "filter": []}], + ) + .search() + ) + print(CARE_ALLERGY_CODE_VALUESET.composition) + for i in CARE_ALLERGY_CODE_VALUESET.search("nut"): + print(i) diff --git a/care/emr/migrations/0001_initial.py b/care/emr/migrations/0001_initial.py new file mode 100644 index 0000000000..0b849aeb19 --- /dev/null +++ b/care/emr/migrations/0001_initial.py @@ -0,0 +1,42 @@ +# Generated by Django 5.1.1 on 2024-11-13 16:51 + +import django.db.models.deletion +import uuid +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('facility', '0466_camera_presets'), + ] + + operations = [ + migrations.CreateModel( + name='AllergyIntolerance', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('external_id', models.UUIDField(db_index=True, default=uuid.uuid4, unique=True)), + ('created_date', models.DateTimeField(auto_now_add=True, db_index=True, null=True)), + ('modified_date', models.DateTimeField(auto_now=True, db_index=True, null=True)), + ('deleted', models.BooleanField(db_index=True, default=False)), + ('history', models.JSONField(default=dict)), + ('clinical_status', models.CharField(blank=True, max_length=100, null=True)), + ('verification_status', models.CharField(blank=True, max_length=100, null=True)), + ('category', models.CharField(blank=True, max_length=100, null=True)), + ('criticality', models.CharField(blank=True, max_length=100, null=True)), + ('code', models.JSONField(default={})), + ('onset', models.JSONField(default={})), + ('recorded_date', models.DateTimeField(blank=True, null=True)), + ('last_occurrence', models.DateTimeField(blank=True, null=True)), + ('note', models.TextField(blank=True, null=True)), + ('encounter', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='facility.patientconsultation')), + ('patient', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='facility.patientregistration')), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/care/emr/migrations/0002_allergyintolerance_meta_and_more.py b/care/emr/migrations/0002_allergyintolerance_meta_and_more.py new file mode 100644 index 0000000000..19e58f79a8 --- /dev/null +++ b/care/emr/migrations/0002_allergyintolerance_meta_and_more.py @@ -0,0 +1,28 @@ +# Generated by Django 5.1.1 on 2024-11-16 12:50 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('emr', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='allergyintolerance', + name='meta', + field=models.JSONField(default=dict), + ), + migrations.AlterField( + model_name='allergyintolerance', + name='code', + field=models.JSONField(default=dict), + ), + migrations.AlterField( + model_name='allergyintolerance', + name='onset', + field=models.JSONField(default=dict), + ), + ] diff --git a/care/emr/migrations/0003_valueset.py b/care/emr/migrations/0003_valueset.py new file mode 100644 index 0000000000..db3da76b45 --- /dev/null +++ b/care/emr/migrations/0003_valueset.py @@ -0,0 +1,35 @@ +# Generated by Django 5.1.1 on 2024-11-16 14:46 + +import uuid +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('emr', '0002_allergyintolerance_meta_and_more'), + ] + + operations = [ + migrations.CreateModel( + name='ValueSet', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('external_id', models.UUIDField(db_index=True, default=uuid.uuid4, unique=True)), + ('created_date', models.DateTimeField(auto_now_add=True, db_index=True, null=True)), + ('modified_date', models.DateTimeField(auto_now=True, db_index=True, null=True)), + ('deleted', models.BooleanField(db_index=True, default=False)), + ('history', models.JSONField(default=dict)), + ('meta', models.JSONField(default=dict)), + ('slug', models.SlugField(max_length=255, unique=True)), + ('name', models.CharField(max_length=255)), + ('description', models.TextField(default='')), + ('compose', models.JSONField(default=dict)), + ('status', models.CharField(max_length=255)), + ('is_system_defined', models.BooleanField(default=False)), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/care/emr/migrations/__init__.py b/care/emr/migrations/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/care/emr/models/__init__.py b/care/emr/models/__init__.py new file mode 100644 index 0000000000..eb289c72ce --- /dev/null +++ b/care/emr/models/__init__.py @@ -0,0 +1,2 @@ +from .allergy_intolerance import * # noqa F403 +from .valueset import * # noqa F403 diff --git a/care/emr/models/allergy_intolerance.py b/care/emr/models/allergy_intolerance.py new file mode 100644 index 0000000000..5c513bea68 --- /dev/null +++ b/care/emr/models/allergy_intolerance.py @@ -0,0 +1,21 @@ +from django.db import models + +from care.emr.models.base import EMRBaseModel + + +class AllergyIntolerance(EMRBaseModel): + clinical_status = models.CharField(max_length=100, null=True, blank=True) + verification_status = models.CharField(max_length=100, null=True, blank=True) + category = models.CharField(max_length=100, null=True, blank=True) + criticality = models.CharField(max_length=100, null=True, blank=True) + code = models.JSONField(default=dict, null=False, blank=False) + patient = models.ForeignKey( + "facility.PatientRegistration", on_delete=models.CASCADE + ) + encounter = models.ForeignKey( + "facility.PatientConsultation", on_delete=models.CASCADE + ) + onset = models.JSONField(default=dict) + recorded_date = models.DateTimeField(null=True, blank=True) + last_occurrence = models.DateTimeField(null=True, blank=True) + note = models.TextField(null=True, blank=True) diff --git a/care/emr/models/base.py b/care/emr/models/base.py new file mode 100644 index 0000000000..c81b022448 --- /dev/null +++ b/care/emr/models/base.py @@ -0,0 +1,11 @@ +from django.db import models + +from care.utils.models.base import BaseModel + + +class EMRBaseModel(BaseModel): + history = models.JSONField(default=dict) + meta = models.JSONField(default=dict) + + class Meta: + abstract = True diff --git a/care/emr/models/valueset.py b/care/emr/models/valueset.py new file mode 100644 index 0000000000..5d846ccf20 --- /dev/null +++ b/care/emr/models/valueset.py @@ -0,0 +1,49 @@ +from django.db import models + +from care.emr.fhir.resources.valueset import ValueSetResource +from care.emr.fhir.schema.valueset.valueset import ValueSetCompose +from care.emr.models import EMRBaseModel + + +class ValueSet(EMRBaseModel): + slug = models.SlugField(max_length=255, unique=True, db_index=True) + name = models.CharField(max_length=255) + description = models.TextField(default="") + compose = models.JSONField(default=dict) + status = models.CharField(max_length=255) + is_system_defined = models.BooleanField(default=False) + + def create_composition(self): + systems = {} + compose = self.compose + if type(self.compose) is dict: + compose = ValueSetCompose(**self.compose) + for include in compose.include: + system = include.system.root + if system not in systems: + systems[system] = {"include": []} + systems[system]["include"].append(include.model_dump(exclude_defaults=True)) + for exclude in compose.exclude: + system = exclude.system.root + if system not in systems: + systems[system] = {"exclude": []} + systems[system]["exclude"].append(exclude.model_dump(exclude_defaults=True)) + return systems + + def search(self, search="", count=10): + systems = self.create_composition() + results = [] + for system in systems: + results.extend( + ValueSetResource() + .filter(search=search, count=count, **systems[system]) + .search() + ) + return results + + def lookup(self, code): + systems = self.create_composition() + results = [] + for system in systems: + results.append(ValueSetResource().filter(**systems[system]).lookup(code)) + return any(results) diff --git a/care/emr/resources/__init__.py b/care/emr/resources/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/care/emr/resources/allergy_intolerance/__init__.py b/care/emr/resources/allergy_intolerance/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/care/emr/resources/allergy_intolerance/spec.py b/care/emr/resources/allergy_intolerance/spec.py new file mode 100644 index 0000000000..bc90328ce1 --- /dev/null +++ b/care/emr/resources/allergy_intolerance/spec.py @@ -0,0 +1,97 @@ +import datetime +from enum import Enum + +from pydantic import UUID4, Field, field_validator + +from care.emr.fhir.schema.base import Coding +from care.emr.models.allergy_intolerance import AllergyIntolerance +from care.emr.resources.allergy_intolerance.valueset import CARE_ALLERGY_CODE_VALUESET +from care.emr.resources.base import FHIRResource +from care.emr.resources.care_valueset.care_valueset import validate_valueset +from care.facility.models import PatientConsultation + + +class ClinicalStatusChoices(str, Enum): + active = "active" + inactive = "inactive" + resolved = "resolved" + + +class VerificationStatusChoices(str, Enum): + unconfirmed = "unconfirmed" + presumed = "presumed" + confirmed = "confirmed" + refuted = "refuted" + entered_in_error = "entered-in-error" + + +class CategoryChoices(str, Enum): + food = "food" + medication = "medication" + environment = "environment" + biologic = "biologic" + + +class CriticalityChoices(str, Enum): + low = "low" + high = "high" + unable_to_assess = "unable-to-assess" + + +class AllergyIntoleranceOnSetSpec(FHIRResource): + onset_datetime: datetime.datetime = None + onset_age: int = None + onset_string: str = None + recorded_date: datetime.datetime | None = None + last_occurrence: datetime.datetime | None = None + note: str + + +class BaseAllergyIntoleranceSpec(FHIRResource): + __model__ = AllergyIntolerance + __exclude__ = ["patient", "encounter"] + id: UUID4 = None + + +class AllergyIntoleranceSpec(BaseAllergyIntoleranceSpec): + clinical_status: ClinicalStatusChoices + verification_status: VerificationStatusChoices + category: CategoryChoices + criticality: CriticalityChoices + code: Coding = Field( + {}, json_schema_extra={"slug": CARE_ALLERGY_CODE_VALUESET.slug} + ) + encounter: UUID4 + onset: AllergyIntoleranceOnSetSpec = {} + + @field_validator("code") + @classmethod + def validate_code(cls, code: int) -> int: + return validate_valueset( + "code", cls.model_fields["code"].json_schema_extra["slug"], code + ) + + def perform_extra_deserialization(self, is_update, obj): + if not is_update: + obj.encounter = PatientConsultation.objects.get( + external_id=self.encounter + ) # Needs more validation + obj.patient = obj.encounter.patient + + +class AllergyIntrolanceSpecRead(BaseAllergyIntoleranceSpec): + """ + Validation for deeper models may not be required on read, Just an extra optimisation + """ + + # Maybe we can use model_construct() to be better at reads, need profiling to be absolutely sure + clinical_status: str + verification_status: str + category: str + criticality: str + code: Coding + onset: AllergyIntoleranceOnSetSpec = {} + + @classmethod + def perform_extra_serialization(cls, mapping, obj): + mapping["id"] = obj.external_id diff --git a/care/emr/resources/allergy_intolerance/valueset.py b/care/emr/resources/allergy_intolerance/valueset.py new file mode 100644 index 0000000000..465b38c06b --- /dev/null +++ b/care/emr/resources/allergy_intolerance/valueset.py @@ -0,0 +1,48 @@ +from care.emr.fhir.schema.valueset.valueset import ValueSetCompose, ValueSetInclude +from care.emr.resources.care_valueset.care_valueset import CareValueset +from care.emr.resources.valueset.spec import ValueSetStatusOptions + +CARE_ALLERGY_CODE_VALUESET = CareValueset( + "Disease", "system-allergy-code", ValueSetStatusOptions.active.value +) + +CARE_ALLERGY_CODE_VALUESET.register_valueset( + ValueSetCompose( + include=[ + ValueSetInclude( + system="http://snomed.info/sct", + filter=[{"property": "concept", "op": "is-a", "value": "105590001"}], + ), + ValueSetInclude( + system="http://snomed.info/sct", + filter=[{"property": "concept", "op": "is-a", "value": "418038007"}], + ), + ValueSetInclude( + system="http://snomed.info/sct", + filter=[{"property": "concept", "op": "is-a", "value": "267425008"}], + ), + ValueSetInclude( + system="http://snomed.info/sct", + filter=[{"property": "concept", "op": "is-a", "value": "29736007"}], + ), + ValueSetInclude( + system="http://snomed.info/sct", + filter=[{"property": "concept", "op": "is-a", "value": "340519003"}], + ), + ValueSetInclude( + system="http://snomed.info/sct", + filter=[{"property": "concept", "op": "is-a", "value": "190753003"}], + ), + ValueSetInclude( + system="http://snomed.info/sct", + filter=[{"property": "concept", "op": "is-a", "value": "413427002"}], + ), + ValueSetInclude( + system="http://snomed.info/sct", + filter=[{"property": "concept", "op": "is-a", "value": "716186003"}], + ), + ] + ) +) + +CARE_ALLERGY_CODE_VALUESET.register_as_system() diff --git a/care/emr/resources/base.py b/care/emr/resources/base.py new file mode 100644 index 0000000000..4e40086fda --- /dev/null +++ b/care/emr/resources/base.py @@ -0,0 +1,102 @@ +import datetime +import uuid +from enum import Enum +from types import UnionType + +from pydantic import BaseModel + +from care.emr.fhir.schema.base import CodeableConcept + + +class FHIRResource(BaseModel): + __model__ = None + __exclude__ = [] + + meta: dict = {} + __questionnaire_cache__ = {} + + @classmethod + def get_database_mapping(cls): + """ + Mapping of database fields to pydantic object + """ + database_fields = [] + for field in cls.__model__._meta.fields: # noqa SLF001 + database_fields.append(field.name) + return database_fields + + @classmethod + def perform_extra_serialization(cls, mapping, obj): + mapping["id"] = obj.external_id + + @classmethod + def serialize(cls, obj: __model__): + """ + Creates a pydantic object from a database object + """ + mappings = cls.get_database_mapping() + constructed = {} + for mapping in mappings: + if mapping in cls.model_fields and mapping not in cls.__exclude__: + constructed[mapping] = getattr(obj, mapping) + for field in obj.meta: + if field in cls.model_fields: + constructed[field] = obj.meta[field] + cls.perform_extra_serialization(constructed, obj) + return cls.model_construct(**constructed) + + def perform_extra_deserialization(self, is_update, obj): + pass + + def de_serialize(self, obj=None): + """ + Creates a database object from a pydantic object + """ + is_update = True + if not obj: + is_update = False + obj = self.__model__() + database_fields = self.get_database_mapping() + meta = {} + dump = self.model_dump(exclude_defaults=True) + for field in dump: + if field in database_fields and field not in self.__exclude__: + obj.__setattr__(field, dump[field]) + elif field not in self.__exclude__: + meta[field] = dump[field] + obj.meta = meta + self.perform_extra_deserialization(is_update, obj) + return obj + + @classmethod + def questionnaire(cls): + if cls.__questionnaire_cache__: + return cls.__questionnaire_cache__ + questionnire_obj = [] + for field in cls.model_fields: + field_class = cls.model_fields[field] + field_obj = {"linkId": field} + if type(field_class.annotation) is UnionType: + continue + if issubclass(field_class.annotation, Enum): + field_obj["type"] = "string" + field_obj["answerOption"] = [ + {x.name: x.value} for x in field_class.annotation + ] + elif issubclass(field_class.annotation, datetime.datetime): + field_obj["type"] = "dateTime" + elif issubclass(field_class.annotation, str): + field_obj["type"] = "string" + elif issubclass(field_class.annotation, int): + field_obj["type"] = "integer" + elif issubclass(field_class.annotation, uuid.UUID): + field_obj["type"] = "string" + elif field_class.annotation is CodeableConcept: + field_obj["type"] = "coding" + field_obj["valueset"] = {"slug": field_class.json_schema_extra["slug"]} + elif issubclass(field_class.annotation, FHIRResource): + field_obj["type"] = "group" + field_obj["questions"] = field_class.annotation.questionnaire() + questionnire_obj.append(field_obj) + cls.__questionnaire_cache__ = questionnire_obj + return questionnire_obj diff --git a/care/emr/resources/care_valueset/__init__.py b/care/emr/resources/care_valueset/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/care/emr/resources/care_valueset/care_valueset.py b/care/emr/resources/care_valueset/care_valueset.py new file mode 100644 index 0000000000..59a1fc215e --- /dev/null +++ b/care/emr/resources/care_valueset/care_valueset.py @@ -0,0 +1,103 @@ +from care.emr.fhir.resources.valueset import ValueSetResource +from care.emr.fhir.schema.valueset.valueset import ( + ValueSet, + ValueSetCompose, +) +from care.emr.models.valueset import ValueSet as ValuesetDatabaseModel + + +class CareValueset: + """ + Care Valueset is a pre-system defined valueset which can be enhanced by plugs + Eg, A Disease valueset can be system created and used for all system related API's + This valueset will be initially empty, but plugs can register their values into this valueset + as they are added. This allows for a pluggable valueset concept + + Valuesets are written to the database using a management command, they can be reset based on this as well. + These valuesets can then be edited to the admins requirements + """ + + slug = None + name = None + status = None + + def __init__(self, name, slug, status, compose=None): + self.name = name + self.slug = slug + self.status = status + if compose: + self.composition = compose + else: + self.composition = ValueSetCompose(include=[], exclude=[]) + + def register_as_system(self): + SystemValueSet.add_system_valueset(self) + + def register_valueset(self, composition: ValueSetCompose): + """ + Register a valueset to the system + """ + if composition.include: + for include in composition.include: + self.composition.include.append(include) + if composition.exclude: + for exclude in composition.exclude: + self.composition.exclude.append(exclude) + + @property + def valueset(self): + return ValueSet(name=self.name, status=self.status, compose=self.composition) + + def create_composition(self): + systems = {} + for include in self.composition.include: + system = include.system.root + if system not in systems: + systems[system] = {"include": []} + systems[system]["include"].append(include.model_dump(exclude_defaults=True)) + for exclude in self.composition.exclude: + system = exclude.system.root + if system not in systems: + systems[system] = {"exclude": []} + systems[system]["exclude"].append(exclude.model_dump(exclude_defaults=True)) + return systems + + def search(self, filter=""): + # Create a composition with the same system + # Query each system + # Combine and return + systems = self.create_composition() + + results = [] + + for system in systems: + results.extend( + ValueSetResource() + .filter(search=filter, count=10, **systems[system]) + .search() + ) + return results + + +class SystemValueSet: + _valuesets = [] + + @classmethod + def add_system_valueset(cls, valueset: CareValueset): + cls._valuesets.append(valueset) + + @classmethod + def get_all_valuesets(cls): + return cls._valuesets + + +def validate_valueset(field, slug, code): + valueset_obj = ValuesetDatabaseModel.objects.filter(slug=slug).first() + if not valueset_obj: + err = "Valueset does not exist in care, Resync valuesets" + raise ValueError(err) + exists = valueset_obj.lookup(code) + if not exists: + err = "Code does not exist in the valueset" + raise ValueError(err) + return code diff --git a/care/emr/resources/utils/__init__.py b/care/emr/resources/utils/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/care/emr/resources/valueset/__init__.py b/care/emr/resources/valueset/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/care/emr/resources/valueset/spec.py b/care/emr/resources/valueset/spec.py new file mode 100644 index 0000000000..f7860432fa --- /dev/null +++ b/care/emr/resources/valueset/spec.py @@ -0,0 +1,34 @@ +from enum import Enum + +from pydantic import UUID4 + +from care.emr.fhir.schema.valueset.valueset import ( + ValueSetCompose, +) +from care.emr.models.valueset import ValueSet as ValuesetDatabaseModel +from care.emr.resources.base import FHIRResource + + +class ValueSetStatusOptions(str, Enum): + draft = "draft" + active = "active" + retired = "retired" + unknown = "unknown" + + +class ValueSetSpec(FHIRResource): + __model__ = ValuesetDatabaseModel + + id: UUID4 = None + slug: str + name: str + description: str + compose: ValueSetCompose + status: ValueSetStatusOptions + is_system_defined: bool = False + + def perform_extra_deserialization(self, is_update, obj): + obj.compose = self.compose.model_dump(exclude_defaults=True, exclude_none=True) + + +ValueSetSpec.model_rebuild() diff --git a/care/emr/utils/__init__.py b/care/emr/utils/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/care/emr/utils/batch_requests.py b/care/emr/utils/batch_requests.py new file mode 100644 index 0000000000..6d633fb19d --- /dev/null +++ b/care/emr/utils/batch_requests.py @@ -0,0 +1,104 @@ +import logging + +from django.test.client import RequestFactory +from django.urls import Resolver404, resolve + +HEADERS_TO_INCLUDE = ["HTTP_USER_AGENT", "HTTP_AUTHORIZATION"] +DEFAULT_CONTENT_TYPE = "application/json" + + +def get_response(wsgi_request): + try: + view, args, kwargs = resolve(wsgi_request.path_info) + kwargs.update({"request": wsgi_request}) + resp = view(*args, **kwargs) + data = resp.data + headers = resp.headers.values() + status_code = resp.status_code + except Resolver404: + data = {"detail": "Route not found"} + headers = {} + status_code = 404 + except Exception as exc: + data = {"detail": "server_error"} + headers = {} + logging.exception(exc) + status_code = 500 + return {"status_code": status_code, "headers": headers, "data": data} + + +def pre_process_method_headers(method, headers): + method = method.lower() + + wsgi_headers = [ + "content_length", + "content_type", + "query_string", + "remote_addr", + "remote_host", + "remote_user", + "request_method", + "server_name", + "server_port", + ] + transformed_headers = {} + + for header, value in headers.items(): + new_header = header.replace("-", "_") + http_header = ( + f"http_{new_header}" + if new_header.lower() not in wsgi_headers + else new_header + ) + transformed_headers.update({http_header.upper(): value}) + return method, transformed_headers + + +def headers_to_include_from_request(curr_request): + return {h: v for h, v in curr_request.META.items() if h in HEADERS_TO_INCLUDE} + + +def get_wsgi_request_object(curr_request, method, url, headers, body): + logging.info(curr_request) + x_headers = headers_to_include_from_request(curr_request) + logging.info(x_headers) + method, t_headers = pre_process_method_headers(method, headers) + + if "CONTENT_TYPE" not in t_headers: + t_headers.update({"CONTENT_TYPE": DEFAULT_CONTENT_TYPE}) + + x_headers.update(t_headers) + content_type = x_headers.get("CONTENT_TYPE", DEFAULT_CONTENT_TYPE) + + request_factory = RequestFactory() + request_provider = getattr(request_factory, method) + + secure = False + + return request_provider( + url, data=body, secure=secure, content_type=content_type, **x_headers + ) + + +def execute_serially(requests, resp_generator): + return [resp_generator(request) for request in requests] + + +def construct_wsgi_from_data(request, data): + url = data.url + body = data.body + method = data.method + headers = {} # data.get("headers", {}) + return get_wsgi_request_object(request, method, url, headers, body) + + +def convert_batch_request_to_wsgi(parent_request, batch_request_data): + return [ + construct_wsgi_from_data(parent_request, data) + for data in batch_request_data.requests + ] + + +def execute_batch_requests(parent_request, batch_request_data): + wsgi_requests = convert_batch_request_to_wsgi(parent_request, batch_request_data) + return execute_serially(wsgi_requests, get_response) diff --git a/care/utils/pagination/__init__.py b/care/utils/pagination/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/care/utils/pagination/care_pagination.py b/care/utils/pagination/care_pagination.py new file mode 100644 index 0000000000..9c72cc62eb --- /dev/null +++ b/care/utils/pagination/care_pagination.py @@ -0,0 +1,7 @@ +from rest_framework.pagination import LimitOffsetPagination +from rest_framework.response import Response + + +class CareLimitOffsetPagination(LimitOffsetPagination): + def get_paginated_response(self, data): + return Response({"count": self.count, "results": data}) diff --git a/config/api_router.py b/config/api_router.py index 7e00754a00..cbe937e30f 100644 --- a/config/api_router.py +++ b/config/api_router.py @@ -3,6 +3,9 @@ from rest_framework.routers import DefaultRouter, SimpleRouter from rest_framework_nested.routers import NestedSimpleRouter +from care.emr.api.viewsets.allergy_intolerance import AllergyIntoleranceViewSet +from care.emr.api.viewsets.batch_request import BatchRequestView +from care.emr.api.viewsets.valueset import ValueSetViewSet from care.facility.api.viewsets.ambulance import AmbulanceViewSet from care.facility.api.viewsets.asset import ( AssetLocationViewSet, @@ -129,6 +132,8 @@ router.register("notification", NotificationViewSet, basename="notification") +router.register("batch_requests", BatchRequestView, basename="batch-requests") + # Summarisation router.register( "facility_summary", FacilityCapacitySummaryViewSet, basename="summary-facility" @@ -137,6 +142,8 @@ router.register("tests_summary", TestsSummaryViewSet, basename="summary-tests") router.register("triage_summary", TriageSummaryViewSet, basename="summary-triage") +router.register("valueset", ValueSetViewSet, basename="value-set") + # District Summary router.register( "district_patient_summary", @@ -277,9 +284,16 @@ consultation_nested_router = NestedSimpleRouter( router, r"consultation", lookup="consultation" ) + +consultation_nested_router.register( + r"allergy_intolerance", AllergyIntoleranceViewSet, basename="allergy-intolerance" +) + consultation_nested_router.register( r"daily_rounds", DailyRoundsViewSet, basename="consultation-daily-rounds" ) + + consultation_nested_router.register( r"diagnoses", ConsultationDiagnosisViewSet, basename="consultation-diagnoses" ) diff --git a/config/settings/base.py b/config/settings/base.py index df20ebb0cf..ea982dd6dd 100644 --- a/config/settings/base.py +++ b/config/settings/base.py @@ -123,11 +123,7 @@ "django_rest_passwordreset", "healthy_django", ] -LOCAL_APPS = [ - "care.facility", - "care.users", - "care.audit_log", -] +LOCAL_APPS = ["care.facility", "care.users", "care.audit_log", "care.emr"] PLUGIN_APPS = manager.get_apps() @@ -367,7 +363,7 @@ "DEFAULT_PERMISSION_CLASSES": [ "rest_framework.permissions.IsAuthenticated", ], - "DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.LimitOffsetPagination", + "DEFAULT_PAGINATION_CLASS": "care.utils.pagination.care_pagination.CareLimitOffsetPagination", "PAGE_SIZE": 14, "SEARCH_PARAM": "search_text", "DEFAULT_SCHEMA_CLASS": "care.utils.schema.AutoSchema", diff --git a/plug_config.py b/plug_config.py index 27be9de162..a99af83fc5 100644 --- a/plug_config.py +++ b/plug_config.py @@ -1,20 +1,5 @@ from plugs.manager import PlugManager -from plugs.plug import Plug -abdm_plugin = Plug( - name="abdm", - package_name="git+https://github.com/ohcnetwork/care_abdm.git", - version="@main", - configs={}, -) - -hcx_plugin = Plug( - name="hcx", - package_name="git+https://github.com/ohcnetwork/care_hcx.git", - version="@main", - configs={}, -) - -plugs = [hcx_plugin, abdm_plugin] +plugs = [] manager = PlugManager(plugs)