diff --git a/.tool-versions b/.tool-versions index d7e67e5f..4ed0450a 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1,2 +1,3 @@ +python 3.10.4 python 3.9.12 python 3.9.1 diff --git a/Pipfile b/Pipfile index 16290c79..5c665e29 100644 --- a/Pipfile +++ b/Pipfile @@ -52,7 +52,6 @@ dateparser = "*" # pipenv install --editable ../SpiffWorkflow (but fix things back before commiting!) # Merged Commit https://github.com/sartography/SpiffWorkflow/pull/178 broke usage of SpiffWorkflow # References to task states will need to be updated to allow using newest version -#spiffworkflow = {editable = true, path = "./../SpiffWorkflow"} spiffworkflow = {git = "https://github.com/sartography/SpiffWorkflow"} [requires] diff --git a/Pipfile.lock b/Pipfile.lock index b7f90b7a..961da184 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -56,11 +56,11 @@ }, "attrs": { "hashes": [ - "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4", - "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd" + "sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6", + "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==21.4.0" + "markers": "python_version >= '3.5'", + "version": "==22.1.0" }, "babel": { "hashes": [ @@ -72,27 +72,37 @@ }, "bcrypt": { "hashes": [ - "sha256:2b02d6bfc6336d1094276f3f588aa1225a598e27f8e3388f4db9948cb707b521", - "sha256:433c410c2177057705da2a9f2cd01dd157493b2a7ac14c8593a16b3dab6b6bfb", - "sha256:4e029cef560967fb0cf4a802bcf4d562d3d6b4b1bf81de5ec1abbe0f1adb027e", - "sha256:61bae49580dce88095d669226d5076d0b9d927754cedbdf76c6c9f5099ad6f26", - "sha256:6d2cb9d969bfca5bc08e45864137276e4c3d3d7de2b162171def3d188bf9d34a", - "sha256:7180d98a96f00b1050e93f5b0f556e658605dd9f524d0b0e68ae7944673f525e", - "sha256:7d9ba2e41e330d2af4af6b1b6ec9e6128e91343d0b4afb9282e54e5508f31baa", - "sha256:7ff2069240c6bbe49109fe84ca80508773a904f5a8cb960e02a977f7f519b129", - "sha256:88273d806ab3a50d06bc6a2fc7c87d737dd669b76ad955f449c43095389bc8fb", - "sha256:a2c46100e315c3a5b90fdc53e429c006c5f962529bc27e1dfd656292c20ccc40", - "sha256:cd43303d6b8a165c29ec6756afd169faba9396a9472cdff753fe9f19b96ce2fa" + "sha256:089098effa1bc35dc055366740a067a2fc76987e8ec75349eb9484061c54f535", + "sha256:08d2947c490093a11416df18043c27abe3921558d2c03e2076ccb28a116cb6d0", + "sha256:0eaa47d4661c326bfc9d08d16debbc4edf78778e6aaba29c1bc7ce67214d4410", + "sha256:27d375903ac8261cfe4047f6709d16f7d18d39b1ec92aaf72af989552a650ebd", + "sha256:2b3ac11cf45161628f1f3733263e63194f22664bf4d0c0f3ab34099c02134665", + "sha256:2caffdae059e06ac23fce178d31b4a702f2a3264c20bfb5ff541b338194d8fab", + "sha256:3100851841186c25f127731b9fa11909ab7b1df6fc4b9f8353f4f1fd952fbf71", + "sha256:5ad4d32a28b80c5fa6671ccfb43676e8c1cc232887759d1cd7b6f56ea4355215", + "sha256:67a97e1c405b24f19d08890e7ae0c4f7ce1e56a712a016746c8b2d7732d65d4b", + "sha256:705b2cea8a9ed3d55b4491887ceadb0106acf7c6387699fca771af56b1cdeeda", + "sha256:8a68f4341daf7522fe8d73874de8906f3a339048ba406be6ddc1b3ccb16fc0d9", + "sha256:a522427293d77e1c29e303fc282e2d71864579527a04ddcfda6d4f8396c6c36a", + "sha256:ae88eca3024bb34bb3430f964beab71226e761f51b912de5133470b649d82344", + "sha256:b1023030aec778185a6c16cf70f359cbb6e0c289fd564a7cfa29e727a1c38f8f", + "sha256:b3b85202d95dd568efcb35b53936c5e3b3600c7cdcc6115ba461df3a8e89f38d", + "sha256:b57adba8a1444faf784394de3436233728a1ecaeb6e07e8c22c8848f179b893c", + "sha256:bf4fa8b2ca74381bb5442c089350f09a3f17797829d958fad058d6e44d9eb83c", + "sha256:ca3204d00d3cb2dfed07f2d74a25f12fc12f73e606fcaa6975d1f7ae69cacbb2", + "sha256:cbb03eec97496166b704ed663a53680ab57c5084b2fc98ef23291987b525cb7d", + "sha256:e9a51bbfe7e9802b5f3508687758b564069ba937748ad7b9e890086290d2f79e", + "sha256:fbdaec13c5105f0c4e5c52614d04f0bca5f5af007910daa8b6b12095edaa67b3" ], "markers": "python_version >= '3.6'", - "version": "==3.2.2" + "version": "==4.0.1" }, "beautifulsoup4": { "hashes": [ "sha256:58d5c3d29f5a36ffeb94f02f0d786cd53014cf9b3b3951d42e0080d8a9498d30", "sha256:ad9aa55b65ef2808eb405f46cf74df7fcb7044d5cbc26487f96eb2ef2e436693" ], - "markers": "python_version >= '3.6'", + "markers": "python_full_version >= '3.6.0'", "version": "==4.11.1" }, "billiard": { @@ -119,11 +129,11 @@ }, "certifi": { "hashes": [ - "sha256:84c85a9078b11105f04f3036a9482ae10e4621616db313fe045dd24743a0820d", - "sha256:fe86415d55e84719d75f8b69414f6438ac3547d2078ab91b67e779ef69378412" + "sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14", + "sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382" ], "markers": "python_version >= '3.6'", - "version": "==2022.6.15" + "version": "==2022.9.24" }, "cffi": { "hashes": [ @@ -196,11 +206,11 @@ }, "charset-normalizer": { "hashes": [ - "sha256:5189b6f22b01957427f35b6a08d9a0bc45b46d3788ef5a92e978433c7a35f8a5", - "sha256:575e708016ff3a5e3681541cb9d79312c416835686d054a23accb873b254f413" + "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845", + "sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f" ], - "markers": "python_version >= '3.6'", - "version": "==2.1.0" + "markers": "python_full_version >= '3.6.0'", + "version": "==2.1.1" }, "click": { "hashes": [ @@ -215,7 +225,7 @@ "sha256:a0713dc7a1de3f06bc0df5a9567ad19ead2d3d5689b434768a6145bff77c0667", "sha256:f184f0d851d96b6d29297354ed981b7dd71df7ff500d82fa6d11f0856bee8035" ], - "markers": "python_version < '4' and python_full_version >= '3.6.2'", + "markers": "python_full_version >= '3.6.2' and python_full_version < '4.0.0'", "version": "==0.3.0" }, "click-plugins": { @@ -248,69 +258,78 @@ }, "configparser": { "hashes": [ - "sha256:1b35798fdf1713f1c3139016cfcbc461f09edbf099d1fb658d4b7479fcaa3daa", - "sha256:e8b39238fb6f0153a069aa253d349467c3c4737934f253ef6abac5fe0eca1e5d" + "sha256:8be267824b541c09b08db124917f48ab525a6c3e837011f3130781a224c57090", + "sha256:b065779fd93c6bf4cee42202fa4351b4bb842e96a3fb469440e484517a49b9fa" ], - "markers": "python_version >= '3.6'", - "version": "==5.2.0" + "markers": "python_version >= '3.7'", + "version": "==5.3.0" }, "connexion": { "extras": [ "swagger-ui" ], "hashes": [ - "sha256:4e50c1b0b6d287e20830d053c8de09a73bead5ac0760200ade074364c7362ab6", - "sha256:ed6f9c97ca5281257935c5530570b2a2394a689ece1b171c18d855cf751adbb4" + "sha256:99aa5781e70a7b94f8ffae8cf89f309d49cdb811bbd65a8e2f2546f3b19a01e6", + "sha256:f343717241b4c4802a694c38fee66fb1693c897fe4ea5a957fa9b3b07caf6394" ], "index": "pypi", - "version": "==2.14.0" + "version": "==2.14.1" }, "coverage": { "hashes": [ - "sha256:0895ea6e6f7f9939166cc835df8fa4599e2d9b759b02d1521b574e13b859ac32", - "sha256:0f211df2cba951ffcae210ee00e54921ab42e2b64e0bf2c0befc977377fb09b7", - "sha256:147605e1702d996279bb3cc3b164f408698850011210d133a2cb96a73a2f7996", - "sha256:24b04d305ea172ccb21bee5bacd559383cba2c6fcdef85b7701cf2de4188aa55", - "sha256:25b7ec944f114f70803d6529394b64f8749e93cbfac0fe6c5ea1b7e6c14e8a46", - "sha256:2b20286c2b726f94e766e86a3fddb7b7e37af5d0c635bdfa7e4399bc523563de", - "sha256:2dff52b3e7f76ada36f82124703f4953186d9029d00d6287f17c68a75e2e6039", - "sha256:2f8553878a24b00d5ab04b7a92a2af50409247ca5c4b7a2bf4eabe94ed20d3ee", - "sha256:3def6791adf580d66f025223078dc84c64696a26f174131059ce8e91452584e1", - "sha256:422fa44070b42fef9fb8dabd5af03861708cdd6deb69463adc2130b7bf81332f", - "sha256:4f89d8e03c8a3757aae65570d14033e8edf192ee9298303db15955cadcff0c63", - "sha256:5336e0352c0b12c7e72727d50ff02557005f79a0b8dcad9219c7c4940a930083", - "sha256:54d8d0e073a7f238f0666d3c7c0d37469b2aa43311e4024c925ee14f5d5a1cbe", - "sha256:5ef42e1db047ca42827a85e34abe973971c635f83aed49611b7f3ab49d0130f0", - "sha256:5f65e5d3ff2d895dab76b1faca4586b970a99b5d4b24e9aafffc0ce94a6022d6", - "sha256:6c3ccfe89c36f3e5b9837b9ee507472310164f352c9fe332120b764c9d60adbe", - "sha256:6d0b48aff8e9720bdec315d67723f0babd936a7211dc5df453ddf76f89c59933", - "sha256:6fe75dcfcb889b6800f072f2af5a331342d63d0c1b3d2bf0f7b4f6c353e8c9c0", - "sha256:79419370d6a637cb18553ecb25228893966bd7935a9120fa454e7076f13b627c", - "sha256:7bb00521ab4f99fdce2d5c05a91bddc0280f0afaee0e0a00425e28e209d4af07", - "sha256:80db4a47a199c4563d4a25919ff29c97c87569130375beca3483b41ad5f698e8", - "sha256:866ebf42b4c5dbafd64455b0a1cd5aa7b4837a894809413b930026c91e18090b", - "sha256:8af6c26ba8df6338e57bedbf916d76bdae6308e57fc8f14397f03b5da8622b4e", - "sha256:a13772c19619118903d65a91f1d5fea84be494d12fd406d06c849b00d31bf120", - "sha256:a697977157adc052284a7160569b36a8bbec09db3c3220642e6323b47cec090f", - "sha256:a9032f9b7d38bdf882ac9f66ebde3afb8145f0d4c24b2e600bc4c6304aafb87e", - "sha256:b5e28db9199dd3833cc8a07fa6cf429a01227b5d429facb56eccd765050c26cd", - "sha256:c77943ef768276b61c96a3eb854eba55633c7a3fddf0a79f82805f232326d33f", - "sha256:d230d333b0be8042ac34808ad722eabba30036232e7a6fb3e317c49f61c93386", - "sha256:d4548be38a1c810d79e097a38107b6bf2ff42151900e47d49635be69943763d8", - "sha256:d4e7ced84a11c10160c0697a6cc0b214a5d7ab21dfec1cd46e89fbf77cc66fae", - "sha256:d56f105592188ce7a797b2bd94b4a8cb2e36d5d9b0d8a1d2060ff2a71e6b9bbc", - "sha256:d714af0bdba67739598849c9f18efdcc5a0412f4993914a0ec5ce0f1e864d783", - "sha256:d774d9e97007b018a651eadc1b3970ed20237395527e22cbeb743d8e73e0563d", - "sha256:e0524adb49c716ca763dbc1d27bedce36b14f33e6b8af6dba56886476b42957c", - "sha256:e2618cb2cf5a7cc8d698306e42ebcacd02fb7ef8cfc18485c59394152c70be97", - "sha256:e36750fbbc422c1c46c9d13b937ab437138b998fe74a635ec88989afb57a3978", - "sha256:edfdabe7aa4f97ed2b9dd5dde52d2bb29cb466993bb9d612ddd10d0085a683cf", - "sha256:f22325010d8824594820d6ce84fa830838f581a7fd86a9235f0d2ed6deb61e29", - "sha256:f23876b018dfa5d3e98e96f5644b109090f16a4acb22064e0f06933663005d39", - "sha256:f7bd0ffbcd03dc39490a1f40b2669cc414fae0c4e16b77bb26806a4d0b7d1452" + "sha256:027018943386e7b942fa832372ebc120155fd970837489896099f5cfa2890f79", + "sha256:11b990d520ea75e7ee8dcab5bc908072aaada194a794db9f6d7d5cfd19661e5a", + "sha256:12adf310e4aafddc58afdb04d686795f33f4d7a6fa67a7a9d4ce7d6ae24d949f", + "sha256:1431986dac3923c5945271f169f59c45b8802a114c8f548d611f2015133df77a", + "sha256:1ef221513e6f68b69ee9e159506d583d31aa3567e0ae84eaad9d6ec1107dddaa", + "sha256:20c8ac5386253717e5ccc827caad43ed66fea0efe255727b1053a8154d952398", + "sha256:2198ea6fc548de52adc826f62cb18554caedfb1d26548c1b7c88d8f7faa8f6ba", + "sha256:255758a1e3b61db372ec2736c8e2a1fdfaf563977eedbdf131de003ca5779b7d", + "sha256:265de0fa6778d07de30bcf4d9dc471c3dc4314a23a3c6603d356a3c9abc2dfcf", + "sha256:33a7da4376d5977fbf0a8ed91c4dffaaa8dbf0ddbf4c8eea500a2486d8bc4d7b", + "sha256:42eafe6778551cf006a7c43153af1211c3aaab658d4d66fa5fcc021613d02518", + "sha256:4433b90fae13f86fafff0b326453dd42fc9a639a0d9e4eec4d366436d1a41b6d", + "sha256:4a5375e28c5191ac38cca59b38edd33ef4cc914732c916f2929029b4bfb50795", + "sha256:4a8dbc1f0fbb2ae3de73eb0bdbb914180c7abfbf258e90b311dcd4f585d44bd2", + "sha256:59f53f1dc5b656cafb1badd0feb428c1e7bc19b867479ff72f7a9dd9b479f10e", + "sha256:5dbec3b9095749390c09ab7c89d314727f18800060d8d24e87f01fb9cfb40b32", + "sha256:633713d70ad6bfc49b34ead4060531658dc6dfc9b3eb7d8a716d5873377ab745", + "sha256:6b07130585d54fe8dff3d97b93b0e20290de974dc8177c320aeaf23459219c0b", + "sha256:6c4459b3de97b75e3bd6b7d4b7f0db13f17f504f3d13e2a7c623786289dd670e", + "sha256:6d4817234349a80dbf03640cec6109cd90cba068330703fa65ddf56b60223a6d", + "sha256:723e8130d4ecc8f56e9a611e73b31219595baa3bb252d539206f7bbbab6ffc1f", + "sha256:784f53ebc9f3fd0e2a3f6a78b2be1bd1f5575d7863e10c6e12504f240fd06660", + "sha256:7b6be138d61e458e18d8e6ddcddd36dd96215edfe5f1168de0b1b32635839b62", + "sha256:7ccf362abd726b0410bf8911c31fbf97f09f8f1061f8c1cf03dfc4b6372848f6", + "sha256:83516205e254a0cb77d2d7bb3632ee019d93d9f4005de31dca0a8c3667d5bc04", + "sha256:851cf4ff24062c6aec510a454b2584f6e998cada52d4cb58c5e233d07172e50c", + "sha256:8f830ed581b45b82451a40faabb89c84e1a998124ee4212d440e9c6cf70083e5", + "sha256:94e2565443291bd778421856bc975d351738963071e9b8839ca1fc08b42d4bef", + "sha256:95203854f974e07af96358c0b261f1048d8e1083f2de9b1c565e1be4a3a48cfc", + "sha256:97117225cdd992a9c2a5515db1f66b59db634f59d0679ca1fa3fe8da32749cae", + "sha256:98e8a10b7a314f454d9eff4216a9a94d143a7ee65018dd12442e898ee2310578", + "sha256:a1170fa54185845505fbfa672f1c1ab175446c887cce8212c44149581cf2d466", + "sha256:a6b7d95969b8845250586f269e81e5dfdd8ff828ddeb8567a4a2eaa7313460c4", + "sha256:a8fb6cf131ac4070c9c5a3e21de0f7dc5a0fbe8bc77c9456ced896c12fcdad91", + "sha256:af4fffaffc4067232253715065e30c5a7ec6faac36f8fc8d6f64263b15f74db0", + "sha256:b4a5be1748d538a710f87542f22c2cad22f80545a847ad91ce45e77417293eb4", + "sha256:b5604380f3415ba69de87a289a2b56687faa4fe04dbee0754bfcae433489316b", + "sha256:b9023e237f4c02ff739581ef35969c3739445fb059b060ca51771e69101efffe", + "sha256:bc8ef5e043a2af066fa8cbfc6e708d58017024dc4345a1f9757b329a249f041b", + "sha256:c4ed2820d919351f4167e52425e096af41bfabacb1857186c1ea32ff9983ed75", + "sha256:cca4435eebea7962a52bdb216dec27215d0df64cf27fc1dd538415f5d2b9da6b", + "sha256:d900bb429fdfd7f511f868cedd03a6bbb142f3f9118c09b99ef8dc9bf9643c3c", + "sha256:d9ecf0829c6a62b9b573c7bb6d4dcd6ba8b6f80be9ba4fc7ed50bf4ac9aecd72", + "sha256:dbdb91cd8c048c2b09eb17713b0c12a54fbd587d79adcebad543bc0cd9a3410b", + "sha256:de3001a203182842a4630e7b8d1a2c7c07ec1b45d3084a83d5d227a3806f530f", + "sha256:e07f4a4a9b41583d6eabec04f8b68076ab3cd44c20bd29332c6572dda36f372e", + "sha256:ef8674b0ee8cc11e2d574e3e2998aea5df5ab242e012286824ea3c6970580e53", + "sha256:f4f05d88d9a80ad3cac6244d36dd89a3c00abc16371769f1340101d3cb899fc3", + "sha256:f642e90754ee3e06b0e7e51bce3379590e76b7f76b708e1a71ff043f87025c84", + "sha256:fc2af30ed0d5ae0b1abdb4ebdce598eafd5b35397d4d75deb341a614d333d987" ], "index": "pypi", - "version": "==6.4.2" + "version": "==6.5.0" }, "dateparser": { "hashes": [ @@ -330,25 +349,25 @@ }, "docutils": { "hashes": [ - "sha256:23010f129180089fbcd3bc08cfefccb3b890b0050e1ca00c867036e9d161b98c", - "sha256:679987caf361a7539d76e584cbeddc311e3aee937877c87346f31debc63e9d06" + "sha256:33995a6753c30b7f577febfc2c50411fec6aac7f7ffeb7c4cfe5991072dcf9e6", + "sha256:5e1de4d849fee02c63b040a4a3fd567f4ab104defd8a5511fbbc24a8a017efbc" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==0.18.1" + "markers": "python_version >= '3.7'", + "version": "==0.19" }, "docxcompose": { "hashes": [ - "sha256:f91b6e4b136937152081c07471596368324cce2bffa82dfec579f6fa20f59161" + "sha256:224f62525bdd3ed6587274e35d2f1baf8901e5b235efc0b5620c0c78cd795214" ], - "version": "==1.3.5" + "version": "==1.3.6" }, "docxtpl": { "hashes": [ - "sha256:238e6b9ac23f231d5031b939c0950ab609ce34e6c2c1b862bd0cab0399b3a8d9", - "sha256:b8c5cd679877007a8fec55f28aa472d88b583b66cb779c72a966ac2ada0eca53" + "sha256:a823396053cf49fb9ed2ca2b75c2f3da9f87496eac4fdc6f1d1ba830b543402d", + "sha256:ffaa08b76a01577e22eef731553c55d3048fe96cc2dc99950e6448e68922cb2e" ], "index": "pypi", - "version": "==0.16.3" + "version": "==0.16.4" }, "et-xmlfile": { "hashes": [ @@ -360,11 +379,11 @@ }, "flask": { "hashes": [ - "sha256:15972e5017df0575c3d6c090ba168b6db90259e620ac8d7ea813a396bad5b6cb", - "sha256:9013281a7402ad527f8fd56375164f3aa021ecfaff89bfe3825346c24f87e04c" + "sha256:642c450d19c4ad482f96729bd2a8f6d32554aa1e231f4f6b4e7e5264b16cca2b", + "sha256:b9c46cc36662a7949f34b52d8ec7bb59c0d74ba08ba6cb9ce9adc1d8676d9526" ], "index": "pypi", - "version": "==2.1.3" + "version": "==2.2.2" }, "flask-admin": { "hashes": [ @@ -422,11 +441,11 @@ }, "flask-sqlalchemy": { "hashes": [ - "sha256:2bda44b43e7cacb15d4e05ff3cc1f8bc97936cc464623424102bfc2c35e95912", - "sha256:f12c3d4cc5cc7fdcc148b9527ea05671718c3ea45d50c7e732cceb33f574b390" + "sha256:0a5d586774949856e4f1fe8be3a64c594615959e39e2b041e887bac5c756bc42", + "sha256:649eddf17ae18814f87f33eb26d9d7b37412ec7ee67985873b3cf882aca099f5" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==2.5.1" + "markers": "python_version >= '3.7'", + "version": "==3.0.1" }, "gitdb": { "hashes": [ @@ -438,72 +457,83 @@ }, "gitpython": { "hashes": [ - "sha256:1c885ce809e8ba2d88a29befeb385fcea06338d3640712b59ca623c220bb5704", - "sha256:5b68b000463593e05ff2b261acff0ff0972df8ab1b70d3cdbd41b546c8b8fc3d" + "sha256:41eea0deec2deea139b459ac03656f0dd28fc4a3387240ec1d3c259a2c47850f", + "sha256:cc36bfc4a3f913e66805a28e84703e419d9c264c1077e537b54f0e1af85dbefd" ], "index": "pypi", - "version": "==3.1.27" + "version": "==3.1.29" }, "greenlet": { "hashes": [ - "sha256:0051c6f1f27cb756ffc0ffbac7d2cd48cb0362ac1736871399a739b2885134d3", - "sha256:00e44c8afdbe5467e4f7b5851be223be68adb4272f44696ee71fe46b7036a711", - "sha256:013d61294b6cd8fe3242932c1c5e36e5d1db2c8afb58606c5a67efce62c1f5fd", - "sha256:049fe7579230e44daef03a259faa24511d10ebfa44f69411d99e6a184fe68073", - "sha256:14d4f3cd4e8b524ae9b8aa567858beed70c392fdec26dbdb0a8a418392e71708", - "sha256:166eac03e48784a6a6e0e5f041cfebb1ab400b394db188c48b3a84737f505b67", - "sha256:17ff94e7a83aa8671a25bf5b59326ec26da379ace2ebc4411d690d80a7fbcf23", - "sha256:1e12bdc622676ce47ae9abbf455c189e442afdde8818d9da983085df6312e7a1", - "sha256:21915eb821a6b3d9d8eefdaf57d6c345b970ad722f856cd71739493ce003ad08", - "sha256:288c6a76705dc54fba69fbcb59904ae4ad768b4c768839b8ca5fdadec6dd8cfd", - "sha256:2bde6792f313f4e918caabc46532aa64aa27a0db05d75b20edfc5c6f46479de2", - "sha256:32ca72bbc673adbcfecb935bb3fb1b74e663d10a4b241aaa2f5a75fe1d1f90aa", - "sha256:356b3576ad078c89a6107caa9c50cc14e98e3a6c4874a37c3e0273e4baf33de8", - "sha256:40b951f601af999a8bf2ce8c71e8aaa4e8c6f78ff8afae7b808aae2dc50d4c40", - "sha256:572e1787d1460da79590bf44304abbc0a2da944ea64ec549188fa84d89bba7ab", - "sha256:58df5c2a0e293bf665a51f8a100d3e9956febfbf1d9aaf8c0677cf70218910c6", - "sha256:64e6175c2e53195278d7388c454e0b30997573f3f4bd63697f88d855f7a6a1fc", - "sha256:7227b47e73dedaa513cdebb98469705ef0d66eb5a1250144468e9c3097d6b59b", - "sha256:7418b6bfc7fe3331541b84bb2141c9baf1ec7132a7ecd9f375912eca810e714e", - "sha256:7cbd7574ce8e138bda9df4efc6bf2ab8572c9aff640d8ecfece1b006b68da963", - "sha256:7ff61ff178250f9bb3cd89752df0f1dd0e27316a8bd1465351652b1b4a4cdfd3", - "sha256:833e1551925ed51e6b44c800e71e77dacd7e49181fdc9ac9a0bf3714d515785d", - "sha256:8639cadfda96737427330a094476d4c7a56ac03de7265622fcf4cfe57c8ae18d", - "sha256:8c5d5b35f789a030ebb95bff352f1d27a93d81069f2adb3182d99882e095cefe", - "sha256:8c790abda465726cfb8bb08bd4ca9a5d0a7bd77c7ac1ca1b839ad823b948ea28", - "sha256:8d2f1fb53a421b410751887eb4ff21386d119ef9cde3797bf5e7ed49fb51a3b3", - "sha256:903bbd302a2378f984aef528f76d4c9b1748f318fe1294961c072bdc7f2ffa3e", - "sha256:93f81b134a165cc17123626ab8da2e30c0455441d4ab5576eed73a64c025b25c", - "sha256:95e69877983ea39b7303570fa6760f81a3eec23d0e3ab2021b7144b94d06202d", - "sha256:9633b3034d3d901f0a46b7939f8c4d64427dfba6bbc5a36b1a67364cf148a1b0", - "sha256:97e5306482182170ade15c4b0d8386ded995a07d7cc2ca8f27958d34d6736497", - "sha256:9f3cba480d3deb69f6ee2c1825060177a22c7826431458c697df88e6aeb3caee", - "sha256:aa5b467f15e78b82257319aebc78dd2915e4c1436c3c0d1ad6f53e47ba6e2713", - "sha256:abb7a75ed8b968f3061327c433a0fbd17b729947b400747c334a9c29a9af6c58", - "sha256:aec52725173bd3a7b56fe91bc56eccb26fbdff1386ef123abb63c84c5b43b63a", - "sha256:b11548073a2213d950c3f671aa88e6f83cda6e2fb97a8b6317b1b5b33d850e06", - "sha256:b1692f7d6bc45e3200844be0dba153612103db241691088626a33ff1f24a0d88", - "sha256:b336501a05e13b616ef81ce329c0e09ac5ed8c732d9ba7e3e983fcc1a9e86965", - "sha256:b8c008de9d0daba7b6666aa5bbfdc23dcd78cafc33997c9b7741ff6353bafb7f", - "sha256:b92e29e58bef6d9cfd340c72b04d74c4b4e9f70c9fa7c78b674d1fec18896dc4", - "sha256:be5f425ff1f5f4b3c1e33ad64ab994eed12fc284a6ea71c5243fd564502ecbe5", - "sha256:dd0b1e9e891f69e7675ba5c92e28b90eaa045f6ab134ffe70b52e948aa175b3c", - "sha256:e30f5ea4ae2346e62cedde8794a56858a67b878dd79f7df76a0767e356b1744a", - "sha256:e6a36bb9474218c7a5b27ae476035497a6990e21d04c279884eb10d9b290f1b1", - "sha256:e859fcb4cbe93504ea18008d1df98dee4f7766db66c435e4882ab35cf70cac43", - "sha256:eb6ea6da4c787111adf40f697b4e58732ee0942b5d3bd8f435277643329ba627", - "sha256:ec8c433b3ab0419100bd45b47c9c8551248a5aee30ca5e9d399a0b57ac04651b", - "sha256:eff9d20417ff9dcb0d25e2defc2574d10b491bf2e693b4e491914738b7908168", - "sha256:f0214eb2a23b85528310dad848ad2ac58e735612929c8072f6093f3585fd342d", - "sha256:f276df9830dba7a333544bd41070e8175762a7ac20350786b322b714b0e654f5", - "sha256:f3acda1924472472ddd60c29e5b9db0cec629fbe3c5c5accb74d6d6d14773478", - "sha256:f70a9e237bb792c7cc7e44c531fd48f5897961701cdaa06cf22fc14965c496cf", - "sha256:f9d29ca8a77117315101425ec7ec2a47a22ccf59f5593378fc4077ac5b754fce", - "sha256:fa877ca7f6b48054f847b61d6fa7bed5cebb663ebc55e018fda12db09dcc664c", - "sha256:fdcec0b8399108577ec290f55551d926d9a1fa6cad45882093a7a07ac5ec147b" + "sha256:0120a879aa2b1ac5118bce959ea2492ba18783f65ea15821680a256dfad04754", + "sha256:025b8de2273d2809f027d347aa2541651d2e15d593bbce0d5f502ca438c54136", + "sha256:05ae7383f968bba4211b1fbfc90158f8e3da86804878442b4fb6c16ccbcaa519", + "sha256:0914f02fcaa8f84f13b2df4a81645d9e82de21ed95633765dd5cc4d3af9d7403", + "sha256:0971d37ae0eaf42344e8610d340aa0ad3d06cd2eee381891a10fe771879791f9", + "sha256:0a954002064ee919b444b19c1185e8cce307a1f20600f47d6f4b6d336972c809", + "sha256:0aa1845944e62f358d63fcc911ad3b415f585612946b8edc824825929b40e59e", + "sha256:104f29dd822be678ef6b16bf0035dcd43206a8a48668a6cae4d2fe9c7a7abdeb", + "sha256:11fc7692d95cc7a6a8447bb160d98671ab291e0a8ea90572d582d57361360f05", + "sha256:17a69967561269b691747e7f436d75a4def47e5efcbc3c573180fc828e176d80", + "sha256:2794eef1b04b5ba8948c72cc606aab62ac4b0c538b14806d9c0d88afd0576d6b", + "sha256:2c6e942ca9835c0b97814d14f78da453241837419e0d26f7403058e8db3e38f8", + "sha256:2ccdc818cc106cc238ff7eba0d71b9c77be868fdca31d6c3b1347a54c9b187b2", + "sha256:325f272eb997916b4a3fc1fea7313a8adb760934c2140ce13a2117e1b0a8095d", + "sha256:39464518a2abe9c505a727af7c0b4efff2cf242aa168be5f0daa47649f4d7ca8", + "sha256:3a24f3213579dc8459e485e333330a921f579543a5214dbc935bc0763474ece3", + "sha256:3aeac044c324c1a4027dca0cde550bd83a0c0fbff7ef2c98df9e718a5086c194", + "sha256:3c22998bfef3fcc1b15694818fc9b1b87c6cc8398198b96b6d355a7bcb8c934e", + "sha256:467b73ce5dcd89e381292fb4314aede9b12906c18fab903f995b86034d96d5c8", + "sha256:4a8b58232f5b72973350c2b917ea3df0bebd07c3c82a0a0e34775fc2c1f857e9", + "sha256:4f74aa0092602da2069df0bc6553919a15169d77bcdab52a21f8c5242898f519", + "sha256:5662492df0588a51d5690f6578f3bbbd803e7f8d99a99f3bf6128a401be9c269", + "sha256:5c2d21c2b768d8c86ad935e404cc78c30d53dea009609c3ef3a9d49970c864b5", + "sha256:5edf75e7fcfa9725064ae0d8407c849456553a181ebefedb7606bac19aa1478b", + "sha256:60839ab4ea7de6139a3be35b77e22e0398c270020050458b3d25db4c7c394df5", + "sha256:62723e7eb85fa52e536e516ee2ac91433c7bb60d51099293671815ff49ed1c21", + "sha256:64e10f303ea354500c927da5b59c3802196a07468332d292aef9ddaca08d03dd", + "sha256:66aa4e9a726b70bcbfcc446b7ba89c8cec40f405e51422c39f42dfa206a96a05", + "sha256:695d0d8b5ae42c800f1763c9fce9d7b94ae3b878919379150ee5ba458a460d57", + "sha256:70048d7b2c07c5eadf8393e6398595591df5f59a2f26abc2f81abca09610492f", + "sha256:7afa706510ab079fd6d039cc6e369d4535a48e202d042c32e2097f030a16450f", + "sha256:7cf37343e43404699d58808e51f347f57efd3010cc7cee134cdb9141bd1ad9ea", + "sha256:8149a6865b14c33be7ae760bcdb73548bb01e8e47ae15e013bf7ef9290ca309a", + "sha256:814f26b864ed2230d3a7efe0336f5766ad012f94aad6ba43a7c54ca88dd77cba", + "sha256:82a38d7d2077128a017094aff334e67e26194f46bd709f9dcdacbf3835d47ef5", + "sha256:83a7a6560df073ec9de2b7cb685b199dfd12519bc0020c62db9d1bb522f989fa", + "sha256:8415239c68b2ec9de10a5adf1130ee9cb0ebd3e19573c55ba160ff0ca809e012", + "sha256:88720794390002b0c8fa29e9602b395093a9a766b229a847e8d88349e418b28a", + "sha256:890f633dc8cb307761ec566bc0b4e350a93ddd77dc172839be122be12bae3e10", + "sha256:8926a78192b8b73c936f3e87929931455a6a6c6c385448a07b9f7d1072c19ff3", + "sha256:8c0581077cf2734569f3e500fab09c0ff6a2ab99b1afcacbad09b3c2843ae743", + "sha256:8fda1139d87ce5f7bd80e80e54f9f2c6fe2f47983f1a6f128c47bf310197deb6", + "sha256:91a84faf718e6f8b888ca63d0b2d6d185c8e2a198d2a7322d75c303e7097c8b7", + "sha256:924df1e7e5db27d19b1359dc7d052a917529c95ba5b8b62f4af611176da7c8ad", + "sha256:949c9061b8c6d3e6e439466a9be1e787208dec6246f4ec5fffe9677b4c19fcc3", + "sha256:9649891ab4153f217f319914455ccf0b86986b55fc0573ce803eb998ad7d6854", + "sha256:96656c5f7c95fc02c36d4f6ef32f4e94bb0b6b36e6a002c21c39785a4eec5f5d", + "sha256:a812df7282a8fc717eafd487fccc5ba40ea83bb5b13eb3c90c446d88dbdfd2be", + "sha256:a8d24eb5cb67996fb84633fdc96dbc04f2d8b12bfcb20ab3222d6be271616b67", + "sha256:bef49c07fcb411c942da6ee7d7ea37430f830c482bf6e4b72d92fd506dd3a427", + "sha256:bffba15cff4802ff493d6edcf20d7f94ab1c2aee7cfc1e1c7627c05f1102eee8", + "sha256:c0643250dd0756f4960633f5359884f609a234d4066686754e834073d84e9b51", + "sha256:c6f90234e4438062d6d09f7d667f79edcc7c5e354ba3a145ff98176f974b8132", + "sha256:c8c9301e3274276d3d20ab6335aa7c5d9e5da2009cccb01127bddb5c951f8870", + "sha256:c8ece5d1a99a2adcb38f69af2f07d96fb615415d32820108cd340361f590d128", + "sha256:cb863057bed786f6622982fb8b2c122c68e6e9eddccaa9fa98fd937e45ee6c4f", + "sha256:ccbe7129a282ec5797df0451ca1802f11578be018a32979131065565da89b392", + "sha256:d25cdedd72aa2271b984af54294e9527306966ec18963fd032cc851a725ddc1b", + "sha256:d75afcbb214d429dacdf75e03a1d6d6c5bd1fa9c35e360df8ea5b6270fb2211c", + "sha256:d7815e1519a8361c5ea2a7a5864945906f8e386fa1bc26797b4d443ab11a4589", + "sha256:eb6ac495dccb1520667cfea50d89e26f9ffb49fa28496dea2b95720d8b45eb54", + "sha256:ec615d2912b9ad807afd3be80bf32711c0ff9c2b00aa004a45fd5d5dde7853d9", + "sha256:f5e09dc5c6e1796969fd4b775ea1417d70e49a5df29aaa8e5d10675d9e11872c", + "sha256:f6661b58412879a2aa099abb26d3c93e91dedaba55a6394d1fb1512a77e85de9", + "sha256:f7d20c3267385236b4ce54575cc8e9f43e7673fc761b069c820097092e318e3b", + "sha256:fe7c51f8a2ab616cb34bc33d810c887e89117771028e1e3d3b77ca25ddeace04" ], "markers": "python_version >= '3' and platform_machine == 'aarch64' or (platform_machine == 'ppc64le' or (platform_machine == 'x86_64' or (platform_machine == 'amd64' or (platform_machine == 'AMD64' or (platform_machine == 'win32' or platform_machine == 'WIN32')))))", - "version": "==1.1.2" + "version": "==1.1.3.post0" }, "gunicorn": { "hashes": [ @@ -522,11 +552,11 @@ }, "idna": { "hashes": [ - "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff", - "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d" + "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4", + "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" ], "markers": "python_version >= '3.5'", - "version": "==3.3" + "version": "==3.4" }, "imagesize": { "hashes": [ @@ -538,11 +568,11 @@ }, "importlib-metadata": { "hashes": [ - "sha256:637245b8bab2b6502fcbc752cc4b7a6f6243bb02b31c5c26156ad103d3d45670", - "sha256:7401a975809ea1fdc658c3aa4f78cc2195a0e019c5cbc4c06122884e9ae80c23" + "sha256:8a8a81bcf996e74fee46f0d16bd3eaa382a7eb20fd82445c3ad11f4090334116", + "sha256:dd0173e8f150d6815e098fd354f6414b0f079af4644ddfe90c71e2fc6174346d" ], - "markers": "python_version < '3.10'", - "version": "==4.12.0" + "markers": "python_version >= '3.7'", + "version": "==4.13.0" }, "inflection": { "hashes": [ @@ -570,11 +600,11 @@ }, "jsonschema": { "hashes": [ - "sha256:73764f461d61eb97a057c929368610a134d1d1fffd858acfe88864ee94f1f1d3", - "sha256:c7448a421b25e424fccfceea86b4e3a8672b4436e1988ccbde92c80828d4f085" + "sha256:165059f076eff6971bae5b742fc029a7b4ef3f9bcf04c14e4776a7605de14b23", + "sha256:9e74b8f9738d6a946d70705dc692b74b5429cd0960d58e79ffecfc43b2221eb9" ], "markers": "python_version >= '3.7'", - "version": "==4.7.2" + "version": "==4.16.0" }, "kombu": { "hashes": [ @@ -673,11 +703,11 @@ }, "mako": { "hashes": [ - "sha256:df3921c3081b013c8a2d5ff03c18375651684921ae83fd12e64800b7da923257", - "sha256:f054a5ff4743492f1aa9ecc47172cb33b42b9d993cffcc146c9de17e717b0307" + "sha256:7fde96466fcfeedb0eed94f187f20b23d85e4cb41444be0e542e2c8c65c396cd", + "sha256:c413a086e38cd885088d5e165305ee8eed04e8b3f8f62df343480da0a385735f" ], "markers": "python_version >= '3.7'", - "version": "==1.2.1" + "version": "==1.2.3" }, "markdown": { "hashes": [ @@ -735,11 +765,11 @@ }, "marshmallow": { "hashes": [ - "sha256:00040ab5ea0c608e8787137627a8efae97fabd60552a05dc889c888f814e75eb", - "sha256:635fb65a3285a31a30f276f30e958070f5214c7196202caa5c7ecf28f5274bc7" + "sha256:35e02a3a06899c9119b785c12a22f4cda361745d66a71ab691fd7610202ae104", + "sha256:6804c16114f7fce1f5b4dadc31f4674af23317fcc7f075da21e35c1a35d781f7" ], "index": "pypi", - "version": "==3.17.0" + "version": "==3.18.0" }, "marshmallow-enum": { "hashes": [ @@ -759,31 +789,37 @@ }, "numpy": { "hashes": [ - "sha256:1408c3527a74a0209c781ac82bde2182b0f0bf54dea6e6a363fe0cc4488a7ce7", - "sha256:173f28921b15d341afadf6c3898a34f20a0569e4ad5435297ba262ee8941e77b", - "sha256:1865fdf51446839ca3fffaab172461f2b781163f6f395f1aed256b1ddc253622", - "sha256:3119daed207e9410eaf57dcf9591fdc68045f60483d94956bee0bfdcba790953", - "sha256:35590b9c33c0f1c9732b3231bb6a72d1e4f77872390c47d50a615686ae7ed3fd", - "sha256:37e5ebebb0eb54c5b4a9b04e6f3018e16b8ef257d26c8945925ba8105008e645", - "sha256:37ece2bd095e9781a7156852e43d18044fd0d742934833335599c583618181b9", - "sha256:3ab67966c8d45d55a2bdf40701536af6443763907086c0a6d1232688e27e5447", - "sha256:47f10ab202fe4d8495ff484b5561c65dd59177949ca07975663f4494f7269e3e", - "sha256:55df0f7483b822855af67e38fb3a526e787adf189383b4934305565d71c4b148", - "sha256:5d732d17b8a9061540a10fda5bfeabca5785700ab5469a5e9b93aca5e2d3a5fb", - "sha256:68b69f52e6545af010b76516f5daaef6173e73353e3295c5cb9f96c35d755641", - "sha256:7e8229f3687cdadba2c4faef39204feb51ef7c1a9b669247d49a24f3e2e1617c", - "sha256:8002574a6b46ac3b5739a003b5233376aeac5163e5dcd43dd7ad062f3e186129", - "sha256:876f60de09734fbcb4e27a97c9a286b51284df1326b1ac5f1bf0ad3678236b22", - "sha256:9ce242162015b7e88092dccd0e854548c0926b75c7924a3495e02c6067aba1f5", - "sha256:a35c4e64dfca659fe4d0f1421fc0f05b8ed1ca8c46fb73d9e5a7f175f85696bb", - "sha256:aeba539285dcf0a1ba755945865ec61240ede5432df41d6e29fab305f4384db2", - "sha256:b15c3f1ed08df4980e02cc79ee058b788a3d0bef2fb3c9ca90bb8cbd5b8a3a04", - "sha256:c2f91f88230042a130ceb1b496932aa717dcbd665350beb821534c5c7e15881c", - "sha256:d748ef349bfef2e1194b59da37ed5a29c19ea8d7e6342019921ba2ba4fd8b624", - "sha256:e0d7447679ae9a7124385ccf0ea990bb85bb869cef217e2ea6c844b6a6855073" + "sha256:0fe563fc8ed9dc4474cbf70742673fc4391d70f4363f917599a7fa99f042d5a8", + "sha256:12ac457b63ec8ded85d85c1e17d85efd3c2b0967ca39560b307a35a6703a4735", + "sha256:2341f4ab6dba0834b685cce16dad5f9b6606ea8a00e6da154f5dbded70fdc4dd", + "sha256:296d17aed51161dbad3c67ed6d164e51fcd18dbcd5dd4f9d0a9c6055dce30810", + "sha256:488a66cb667359534bc70028d653ba1cf307bae88eab5929cd707c761ff037db", + "sha256:4d52914c88b4930dafb6c48ba5115a96cbab40f45740239d9f4159c4ba779962", + "sha256:5e13030f8793e9ee42f9c7d5777465a560eb78fa7e11b1c053427f2ccab90c79", + "sha256:61be02e3bf810b60ab74e81d6d0d36246dbfb644a462458bb53b595791251911", + "sha256:7607b598217745cc40f751da38ffd03512d33ec06f3523fb0b5f82e09f6f676d", + "sha256:7a70a7d3ce4c0e9284e92285cba91a4a3f5214d87ee0e95928f3614a256a1488", + "sha256:7ab46e4e7ec63c8a5e6dbf5c1b9e1c92ba23a7ebecc86c336cb7bf3bd2fb10e5", + "sha256:8981d9b5619569899666170c7c9748920f4a5005bf79c72c07d08c8a035757b0", + "sha256:8c053d7557a8f022ec823196d242464b6955a7e7e5015b719e76003f63f82d0f", + "sha256:926db372bc4ac1edf81cfb6c59e2a881606b409ddc0d0920b988174b2e2a767f", + "sha256:95d79ada05005f6f4f337d3bb9de8a7774f259341c70bc88047a1f7b96a4bcb2", + "sha256:95de7dc7dc47a312f6feddd3da2500826defdccbc41608d0031276a24181a2c0", + "sha256:a0882323e0ca4245eb0a3d0a74f88ce581cc33aedcfa396e415e5bba7bf05f68", + "sha256:a8365b942f9c1a7d0f0dc974747d99dd0a0cdfc5949a33119caf05cb314682d3", + "sha256:a8aae2fb3180940011b4862b2dd3756616841c53db9734b27bb93813cd79fce6", + "sha256:c237129f0e732885c9a6076a537e974160482eab8f10db6292e92154d4c67d71", + "sha256:c67b833dbccefe97cdd3f52798d430b9d3430396af7cdb2a0c32954c3ef73894", + "sha256:ce03305dd694c4873b9429274fd41fc7eb4e0e4dea07e0af97a933b079a5814f", + "sha256:d331afac87c92373826af83d2b2b435f57b17a5c74e6268b79355b970626e329", + "sha256:dada341ebb79619fe00a291185bba370c9803b1e1d7051610e01ed809ef3a4ba", + "sha256:ed2cc92af0efad20198638c69bb0fc2870a58dabfba6eb722c933b48556c686c", + "sha256:f260da502d7441a45695199b4e7fd8ca87db659ba1c78f2bbf31f934fe76ae0e", + "sha256:f2f390aa4da44454db40a1f0201401f9036e8d578a25f01a6e237cea238337ef", + "sha256:f76025acc8e2114bb664294a07ede0727aa75d63a06d2fae96bf29a81747e4a7" ], - "markers": "python_version < '3.10' and platform_machine != 'aarch64' and platform_machine != 'arm64'", - "version": "==1.23.1" + "markers": "python_version < '3.10'", + "version": "==1.23.4" }, "openpyxl": { "hashes": [ @@ -803,100 +839,109 @@ }, "pandas": { "hashes": [ - "sha256:07238a58d7cbc8a004855ade7b75bbd22c0db4b0ffccc721556bab8a095515f6", - "sha256:0daf876dba6c622154b2e6741f29e87161f844e64f84801554f879d27ba63c0d", - "sha256:16ad23db55efcc93fa878f7837267973b61ea85d244fc5ff0ccbcfa5638706c5", - "sha256:1d9382f72a4f0e93909feece6fef5500e838ce1c355a581b3d8f259839f2ea76", - "sha256:24ea75f47bbd5574675dae21d51779a4948715416413b30614c1e8b480909f81", - "sha256:2893e923472a5e090c2d5e8db83e8f907364ec048572084c7d10ef93546be6d1", - "sha256:2ff7788468e75917574f080cd4681b27e1a7bf36461fe968b49a87b5a54d007c", - "sha256:41fc406e374590a3d492325b889a2686b31e7a7780bec83db2512988550dadbf", - "sha256:48350592665ea3cbcd07efc8c12ff12d89be09cd47231c7925e3b8afada9d50d", - "sha256:605d572126eb4ab2eadf5c59d5d69f0608df2bf7bcad5c5880a47a20a0699e3e", - "sha256:6dfbf16b1ea4f4d0ee11084d9c026340514d1d30270eaa82a9f1297b6c8ecbf0", - "sha256:6f803320c9da732cc79210d7e8cc5c8019aad512589c910c66529eb1b1818230", - "sha256:721a3dd2f06ef942f83a819c0f3f6a648b2830b191a72bbe9451bcd49c3bd42e", - "sha256:755679c49460bd0d2f837ab99f0a26948e68fa0718b7e42afbabd074d945bf84", - "sha256:78b00429161ccb0da252229bcda8010b445c4bf924e721265bec5a6e96a92e92", - "sha256:958a0588149190c22cdebbc0797e01972950c927a11a900fe6c2296f207b1d6f", - "sha256:a3924692160e3d847e18702bb048dc38e0e13411d2b503fecb1adf0fcf950ba4", - "sha256:d51674ed8e2551ef7773820ef5dab9322be0828629f2cbf8d1fc31a0c4fed640", - "sha256:d5ebc990bd34f4ac3c73a2724c2dcc9ee7bf1ce6cf08e87bb25c6ad33507e318", - "sha256:d6c0106415ff1a10c326c49bc5dd9ea8b9897a6ca0c8688eb9c30ddec49535ef", - "sha256:e48fbb64165cda451c06a0f9e4c7a16b534fcabd32546d531b3c240ce2844112" + "sha256:0d8d7433d19bfa33f11c92ad9997f15a902bda4f5ad3a4814a21d2e910894484", + "sha256:1642fc6138b4e45d57a12c1b464a01a6d868c0148996af23f72dde8d12486bbc", + "sha256:171cef540bfcec52257077816a4dbbac152acdb8236ba11d3196ae02bf0959d8", + "sha256:1b82ccc7b093e0a93f8dffd97a542646a3e026817140e2c01266aaef5fdde11b", + "sha256:1d34b1f43d9e3f4aea056ba251f6e9b143055ebe101ed04c847b41bb0bb4a989", + "sha256:207d63ac851e60ec57458814613ef4b3b6a5e9f0b33c57623ba2bf8126c311f8", + "sha256:2504c032f221ef9e4a289f5e46a42b76f5e087ecb67d62e342ccbba95a32a488", + "sha256:33a9d9e21ab2d91e2ab6e83598419ea6a664efd4c639606b299aae8097c1c94f", + "sha256:3ee61b881d2f64dd90c356eb4a4a4de75376586cd3c9341c6c0fcaae18d52977", + "sha256:41aec9f87455306496d4486df07c1b98c15569c714be2dd552a6124cd9fda88f", + "sha256:4e30a31039574d96f3d683df34ccb50bb435426ad65793e42a613786901f6761", + "sha256:5cc47f2ebaa20ef96ae72ee082f9e101b3dfbf74f0e62c7a12c0b075a683f03c", + "sha256:62e61003411382e20d7c2aec1ee8d7c86c8b9cf46290993dd8a0a3be44daeb38", + "sha256:73844e247a7b7dac2daa9df7339ecf1fcf1dfb8cbfd11e3ffe9819ae6c31c515", + "sha256:85a516a7f6723ca1528f03f7851fa8d0360d1d6121cf15128b290cf79b8a7f6a", + "sha256:86d87279ebc5bc20848b4ceb619073490037323f80f515e0ec891c80abad958a", + "sha256:8a4fc04838615bf0a8d3a03ed68197f358054f0df61f390bcc64fbe39e3d71ec", + "sha256:8e8e5edf97d8793f51d258c07c629bd49d271d536ce15d66ac00ceda5c150eb3", + "sha256:947ed9f896ee61adbe61829a7ae1ade493c5a28c66366ec1de85c0642009faac", + "sha256:a68a9b9754efff364b0c5ee5b0f18e15ca640c01afe605d12ba8b239ca304d6b", + "sha256:c76f1d104844c5360c21d2ef0e1a8b2ccf8b8ebb40788475e255b9462e32b2be", + "sha256:c7f38d91f21937fe2bec9449570d7bf36ad7136227ef43b321194ec249e2149d", + "sha256:de34636e2dc04e8ac2136a8d3c2051fd56ebe9fd6cd185581259330649e73ca9", + "sha256:e178ce2d7e3b934cf8d01dc2d48d04d67cb0abfaffdcc8aa6271fd5a436f39c8", + "sha256:e252a9e49b233ff96e2815c67c29702ac3a062098d80a170c506dff3470fd060", + "sha256:e9c5049333c5bebf993033f4bf807d163e30e8fada06e1da7fa9db86e2392009", + "sha256:fc987f7717e53d372f586323fff441263204128a1ead053c1b98d7288f836ac9" ], "index": "pypi", - "version": "==1.4.3" + "version": "==1.5.0" }, "prompt-toolkit": { "hashes": [ - "sha256:859b283c50bde45f5f97829f77a4674d1c1fcd88539364f1b28a37805cfd89c0", - "sha256:d8916d3f62a7b67ab353a952ce4ced6a1d2587dfe9ef8ebc30dd7c386751f289" + "sha256:9696f386133df0fc8ca5af4895afe5d78f5fcfe5258111c2a79a1c3e41ffa96d", + "sha256:9ada952c9d1787f52ff6d5f3484d0b4df8952787c087edf6a1f7c2cb1ea88148" ], "markers": "python_full_version >= '3.6.2'", - "version": "==3.0.30" + "version": "==3.0.31" }, "psycopg2-binary": { "hashes": [ - "sha256:01310cf4cf26db9aea5158c217caa92d291f0500051a6469ac52166e1a16f5b7", - "sha256:083a55275f09a62b8ca4902dd11f4b33075b743cf0d360419e2051a8a5d5ff76", - "sha256:090f3348c0ab2cceb6dfbe6bf721ef61262ddf518cd6cc6ecc7d334996d64efa", - "sha256:0a29729145aaaf1ad8bafe663131890e2111f13416b60e460dae0a96af5905c9", - "sha256:0c9d5450c566c80c396b7402895c4369a410cab5a82707b11aee1e624da7d004", - "sha256:10bb90fb4d523a2aa67773d4ff2b833ec00857f5912bafcfd5f5414e45280fb1", - "sha256:12b11322ea00ad8db8c46f18b7dfc47ae215e4df55b46c67a94b4effbaec7094", - "sha256:152f09f57417b831418304c7f30d727dc83a12761627bb826951692cc6491e57", - "sha256:15803fa813ea05bef089fa78835118b5434204f3a17cb9f1e5dbfd0b9deea5af", - "sha256:15c4e4cfa45f5a60599d9cec5f46cd7b1b29d86a6390ec23e8eebaae84e64554", - "sha256:183a517a3a63503f70f808b58bfbf962f23d73b6dccddae5aa56152ef2bcb232", - "sha256:1f14c8b0942714eb3c74e1e71700cbbcb415acbc311c730370e70c578a44a25c", - "sha256:1f6b813106a3abdf7b03640d36e24669234120c72e91d5cbaeb87c5f7c36c65b", - "sha256:280b0bb5cbfe8039205c7981cceb006156a675362a00fe29b16fbc264e242834", - "sha256:2d872e3c9d5d075a2e104540965a1cf898b52274a5923936e5bfddb58c59c7c2", - "sha256:2f9ffd643bc7349eeb664eba8864d9e01f057880f510e4681ba40a6532f93c71", - "sha256:3303f8807f342641851578ee7ed1f3efc9802d00a6f83c101d21c608cb864460", - "sha256:35168209c9d51b145e459e05c31a9eaeffa9a6b0fd61689b48e07464ffd1a83e", - "sha256:3a79d622f5206d695d7824cbf609a4f5b88ea6d6dab5f7c147fc6d333a8787e4", - "sha256:404224e5fef3b193f892abdbf8961ce20e0b6642886cfe1fe1923f41aaa75c9d", - "sha256:46f0e0a6b5fa5851bbd9ab1bc805eef362d3a230fbdfbc209f4a236d0a7a990d", - "sha256:47133f3f872faf28c1e87d4357220e809dfd3fa7c64295a4a148bcd1e6e34ec9", - "sha256:526ea0378246d9b080148f2d6681229f4b5964543c170dd10bf4faaab6e0d27f", - "sha256:53293533fcbb94c202b7c800a12c873cfe24599656b341f56e71dd2b557be063", - "sha256:539b28661b71da7c0e428692438efbcd048ca21ea81af618d845e06ebfd29478", - "sha256:57804fc02ca3ce0dbfbef35c4b3a4a774da66d66ea20f4bda601294ad2ea6092", - "sha256:63638d875be8c2784cfc952c9ac34e2b50e43f9f0a0660b65e2a87d656b3116c", - "sha256:6472a178e291b59e7f16ab49ec8b4f3bdada0a879c68d3817ff0963e722a82ce", - "sha256:68641a34023d306be959101b345732360fc2ea4938982309b786f7be1b43a4a1", - "sha256:6e82d38390a03da28c7985b394ec3f56873174e2c88130e6966cb1c946508e65", - "sha256:761df5313dc15da1502b21453642d7599d26be88bff659382f8f9747c7ebea4e", - "sha256:7af0dd86ddb2f8af5da57a976d27cd2cd15510518d582b478fbb2292428710b4", - "sha256:7b1e9b80afca7b7a386ef087db614faebbf8839b7f4db5eb107d0f1a53225029", - "sha256:874a52ecab70af13e899f7847b3e074eeb16ebac5615665db33bce8a1009cf33", - "sha256:887dd9aac71765ac0d0bac1d0d4b4f2c99d5f5c1382d8b770404f0f3d0ce8a39", - "sha256:8b344adbb9a862de0c635f4f0425b7958bf5a4b927c8594e6e8d261775796d53", - "sha256:8fc53f9af09426a61db9ba357865c77f26076d48669f2e1bb24d85a22fb52307", - "sha256:91920527dea30175cc02a1099f331aa8c1ba39bf8b7762b7b56cbf54bc5cce42", - "sha256:93cd1967a18aa0edd4b95b1dfd554cf15af657cb606280996d393dadc88c3c35", - "sha256:99485cab9ba0fa9b84f1f9e1fef106f44a46ef6afdeec8885e0b88d0772b49e8", - "sha256:9d29409b625a143649d03d0fd7b57e4b92e0ecad9726ba682244b73be91d2fdb", - "sha256:a29b3ca4ec9defec6d42bf5feb36bb5817ba3c0230dd83b4edf4bf02684cd0ae", - "sha256:a9e1f75f96ea388fbcef36c70640c4efbe4650658f3d6a2967b4cc70e907352e", - "sha256:accfe7e982411da3178ec690baaceaad3c278652998b2c45828aaac66cd8285f", - "sha256:adf20d9a67e0b6393eac162eb81fb10bc9130a80540f4df7e7355c2dd4af9fba", - "sha256:af9813db73395fb1fc211bac696faea4ca9ef53f32dc0cfa27e4e7cf766dcf24", - "sha256:b1c8068513f5b158cf7e29c43a77eb34b407db29aca749d3eb9293ee0d3103ca", - "sha256:bda845b664bb6c91446ca9609fc69f7db6c334ec5e4adc87571c34e4f47b7ddb", - "sha256:c381bda330ddf2fccbafab789d83ebc6c53db126e4383e73794c74eedce855ef", - "sha256:c3ae8e75eb7160851e59adc77b3a19a976e50622e44fd4fd47b8b18208189d42", - "sha256:d1c1b569ecafe3a69380a94e6ae09a4789bbb23666f3d3a08d06bbd2451f5ef1", - "sha256:def68d7c21984b0f8218e8a15d514f714d96904265164f75f8d3a70f9c295667", - "sha256:dffc08ca91c9ac09008870c9eb77b00a46b3378719584059c034b8945e26b272", - "sha256:e3699852e22aa68c10de06524a3721ade969abf382da95884e6a10ff798f9281", - "sha256:e847774f8ffd5b398a75bc1c18fbb56564cda3d629fe68fd81971fece2d3c67e", - "sha256:ffb7a888a047696e7f8240d649b43fb3644f14f0ee229077e7f6b9f9081635bd" + "sha256:02cde837df012fa5d579b9cf4bc8e1feb460f38d61f7a4ab4a919d55a9f6eeef", + "sha256:044b6ab68613de7ea1e63856627deea091bfea09dea5ab4f050b13250fd18cab", + "sha256:0a9465f0aa36480c8e7614991cbe8ca8aa16b0517c5398a49648ce345e446c19", + "sha256:0d8e0c9eec79fe1ae66691e06e3cc714da6fbd77981209bf32fa823c03dbaff8", + "sha256:0eae72190be519bf2629062eab7ac8d4ceec5bd132953cefa1596584d86964fe", + "sha256:15e0ac0ed8a85f6049e836e95ddee627766561c85be8d23f4b3edb6ddbaa7310", + "sha256:161dc52a617f0bb610a87d391cb2e77fe65b89ebfbd752f4f3217dde701ea196", + "sha256:181ac372a5a5308b4076933601a9b5f0cd139b389b0aa5e164786a2abbcdb978", + "sha256:1c22c59ab7d9dc110d409445f111f58556bf699b0548f3fc5176684a29c629c4", + "sha256:226f11be577b70a57f4910c0ee28591d4d9fcb3d455e966267179156ae2e0c41", + "sha256:24d627ed69e754c48dd142a914124858c600b4108c92546eb0ba822e63c0c6e2", + "sha256:2535f44b00f26f6af0e949c825e6aecb9adcb56c965c17af5b97137fb69f00c0", + "sha256:25e0517ad7ee3c5c3c69dbe3c1d95504c811e42f452b39a3505d0763b1f6caa0", + "sha256:2903bf90b1e6bfc9bbfc94a1db0b50ffa9830a0ca4c042fbc38d93890c02ce08", + "sha256:2f1ded23d17af0d738e7e78087f0b88a53228887845b1989b03af4dfd3fef703", + "sha256:30200b07779446760813eef06098ec6d084131e4365b4e023eb43100de758b11", + "sha256:33ac8b4754e6b6b21f3ee180da169d8526d91aee9408ec1fc573c16ab32b0207", + "sha256:34fd249275faa782c3a2016e86ac2330636ac58d731a1580e7d686e3976b9536", + "sha256:44f5dc9b4384bafca8429759ce76c8960ffc2b583fcad9e5dfb3e5f4894269e4", + "sha256:451550e0bb5889bbabbf92575a6d6eafced941cc28c86be6ae4667f81bf32d67", + "sha256:52383e932e6de5595963f9178cf2af7b9e1f3daacf5135b9c0e21aabbc5bf7c4", + "sha256:55137faec669c4277c5687c6ce7c1fbc4dece0e2f14256ee808f4a652f0a2170", + "sha256:576b9dfbcd154a0e8b5d9dae6316d037450e64a3b31df87dec71d88e2a2d5e5f", + "sha256:59a3010d566a48b919490a982f6807f68842686941dc12d568e129d9cd7703d6", + "sha256:61c6a258469c66412ae8358a0501df6ccb3bb48aa9c43b56624571ff9767f91d", + "sha256:63edc507f8cbfbb5903adb75bad8a99f9798981c854df9119dbebab2ec3ee0e1", + "sha256:65d5f4e70a2d3fbaa1349236968792611088f3f2dccead36c1626e1d183cc327", + "sha256:6a1618260a112a9c93504511f0b6254b4402a8c41b7130dc6d4c9e39aff3aa0c", + "sha256:704f1fcdc5b606b70563ea696c69bda90caee3a2f45ffc9cee60a901b394a79f", + "sha256:7751b11cd7f6b952b4b5ec5b93b5be9ce20faba786c18c25c354f5d8717a173c", + "sha256:7ad9d032dc1a31a86ca7b059f43554a049a2bfda8fe32d1492ad25f6686aff03", + "sha256:7b01d07006a0ac2216921b69a220b9f0974345d0b1b36efaeabdc7550b1cc4f8", + "sha256:7b47643c45e7619788c081d42e1d9d98c7c8a4933010a9967d097cc3c4c29f41", + "sha256:80ed219ce6cb21a5b53ead0edf5b56b6d23de4cb95389ac606f47670474f4816", + "sha256:82df4a8600999c4c0cb7d6614df1bbdb3c74732f63e79f78487893ffbed3d083", + "sha256:8660112e9127a019969a23c878e1b4a419e8a6427f9a9050c19830f152628c8a", + "sha256:89a86c2b35460700d04b4d6461153ab39ee85af5a5385acac9563a8310e6320a", + "sha256:8d7bc25729bb6d96b44f49ad78fde0e27a1a867cb205322b7e5f5b49e04d6f1f", + "sha256:97e4f3d9b17d12e7c00cb1c29c0040044135cd5146838da4274615dbe0baae78", + "sha256:a431deb6ffdfa551f7400b3a94fa4b964837e67f49e3c37aa26d90dc75970816", + "sha256:a6a2d3d75d8698dee492f4af7ad07606d0734e581edf9e2ce2f74b6fce90f42e", + "sha256:ae5b41dbf7731b838021923edfbe3b5ccdec84d92d5795f5229c0d08d32509d9", + "sha256:aff258af03dda9a990960a53759d10c3a9b936837c71fe2f3b581acd356b9121", + "sha256:b216a15e13f6e763db40ac3beb74b588650bc030d10a78fde182b88d273b82b5", + "sha256:b23b25b1243576b952689966205ef7d4285688068b966a1ca0e620bcb390d483", + "sha256:b896637091cde69d170a89253dde9aee814b25ca204b7e213fd0a6462e666638", + "sha256:d5f27b1d1b56470385faa2b2636fcb823e7ac5b5b734e0aa76b14637c66eb3b7", + "sha256:d6ba33f39436191ece7ea2b3d0b4dff00af71acd5c6e6f1d6b7563aa7286e9f2", + "sha256:d6c5e1df6f427d7a82606cf8f07cf3ba9fb3f366804b01e65f1f00f8df6b54f1", + "sha256:e02f77b620ad6b36564fe41980865436912e21a3b1138cdde175cf24afde1bc5", + "sha256:e72491d72870c3cb2f0d6f4174485533caec0e9ed7e717e2859b7cc7ff2ae1c4", + "sha256:ea8d5cd689fa7225d81ae0a049ba03e0165f4ed9ca083b19a405be9ad0b36845", + "sha256:eb5341fc7c53fdd95ac2415be77b1de854ab266488cff71174ebb007baf0e675", + "sha256:edf0a66ce9517365c7dcfed597894d8dd1f27b59e550b77a089054101435213b", + "sha256:f225784812b2b57d340f2eb0d2cebef989dcc82c288f5553e28ee9767c7c8344", + "sha256:f5fbb3b325c65010e04af206a9243e2df8606736c510c7f268aca6a93e5294a9", + "sha256:f78cafa25731e0b5aa16fe20bea1abf643d4e853f6bfb8a64421b06b878e2b88", + "sha256:fb639a0e65dce4a9cccbcbdd8ddd0c8c6ab10bca317b827a5c52ac3c3a4ad60a", + "sha256:ffb2f288f577a748cc23c65a818290755a4c2da1f87a40d7055b61a096d31e20" ], "index": "pypi", - "version": "==2.9.3" + "version": "==2.9.4" }, "pyasn1": { "hashes": [ @@ -926,27 +971,27 @@ }, "pygithub": { "hashes": [ - "sha256:1bbfff9372047ff3f21d5cd8e07720f3dbfdaf6462fcaed9d815f528f1ba7283", - "sha256:2caf0054ea079b71e539741ae56c5a95e073b81fa472ce222e81667381b9601b" + "sha256:80c6d85cf0f9418ffeb840fd105840af694c4f17e102970badbaf678251f2a01", + "sha256:d15f13d82165306da8a68aefc0f848a6f6432d5febbff13b60a94758ce3ef8b5" ], "index": "pypi", - "version": "==1.55" + "version": "==1.56" }, "pygments": { "hashes": [ - "sha256:5eb116118f9612ff1ee89ac96437bb6b49e8f04d8a13b514ba26f620208e26eb", - "sha256:dc9c10fb40944260f6ed4c688ece0cd2048414940f1cea51b8b226318411c519" + "sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1", + "sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42" ], "markers": "python_version >= '3.6'", - "version": "==2.12.0" + "version": "==2.13.0" }, "pyjwt": { "hashes": [ - "sha256:72d1d253f32dbd4f5c88eaf1fdc62f3a19f676ccbadb9dbc5d07e951b2b26daf", - "sha256:d42908208c699b3b973cbeb01a969ba6a96c821eefb1c5bfe4c390c01d67abba" + "sha256:8d82e7087868e94dd8d7d418e5088ce64f7daab4b36db654cbaedb46f9d1ca80", + "sha256:e77ab89480905d86998442ac5788f35333fa85f65047a534adc38edf3c88fc3b" ], "index": "pypi", - "version": "==2.4.0" + "version": "==2.5.0" }, "pynacl": { "hashes": [ @@ -1015,10 +1060,10 @@ }, "pytz": { "hashes": [ - "sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7", - "sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c" + "sha256:2c0784747071402c6e99f0bafdb7da0fa22645f06554c7ae06bf6358897e9c91", + "sha256:48ce799d83b6f8aab2020e369b627446696619e79645419610b9facd909b3174" ], - "version": "==2022.1" + "version": "==2022.4" }, "pytz-deprecation-shim": { "hashes": [ @@ -1030,6 +1075,7 @@ }, "pyyaml": { "hashes": [ + "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf", "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293", "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b", "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57", @@ -1041,26 +1087,32 @@ "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287", "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513", "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0", + "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782", "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0", "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92", "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f", "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2", "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc", + "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1", "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c", "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86", "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4", "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c", "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34", "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b", + "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d", "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c", "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb", + "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7", "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737", "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3", "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d", + "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358", "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53", "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78", "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803", "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a", + "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f", "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174", "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5" ], @@ -1176,11 +1228,11 @@ }, "setuptools": { "hashes": [ - "sha256:0d33c374d41c7863419fc8f6c10bfe25b7b498aa34164d135c622e52580c6b16", - "sha256:c04b44a57a6265fe34a4a444e965884716d34bae963119a76353434d6f18e450" + "sha256:1b6bdc6161661409c5f21508763dc63ab20a9ac2f8ba20029aaaa7fdb9118012", + "sha256:3050e338e5871e70c72983072fe34f6032ae1cdeeeb67338199c2f74e083a80e" ], "markers": "python_version >= '3.7'", - "version": "==63.2.0" + "version": "==65.4.1" }, "six": { "hashes": [ @@ -1215,11 +1267,11 @@ }, "sphinx": { "hashes": [ - "sha256:b18e978ea7565720f26019c702cd85c84376e948370f1cd43d60265010e1c7b0", - "sha256:d3e57663eed1d7c5c50895d191fdeda0b54ded6f44d5621b50709466c338d1e8" + "sha256:5b10cb1022dac8c035f75767799c39217a05fc0fe2d6fe5597560d38e44f0363", + "sha256:7abf6fabd7b58d0727b7317d5e2650ef68765bbe0ccb63c8795fa8683477eaa2" ], "index": "pypi", - "version": "==5.0.2" + "version": "==5.2.3" }, "sphinxcontrib-applehelp": { "hashes": [ @@ -1271,49 +1323,54 @@ }, "spiffworkflow": { "git": "https://github.com/sartography/SpiffWorkflow", - "ref": "5fccb2b5ddacf13d377a252726ed5ba78d5d1b5d" + "ref": "63db3e45947ec66b8d0efc2c74064004f8ff482c" }, "sqlalchemy": { "hashes": [ - "sha256:047ef5ccd8860f6147b8ac6c45a4bc573d4e030267b45d9a1c47b55962ff0e6f", - "sha256:05a05771617bfa723ba4cef58d5b25ac028b0d68f28f403edebed5b8243b3a87", - "sha256:0ec54460475f0c42512895c99c63d90dd2d9cbd0c13491a184182e85074b04c5", - "sha256:107df519eb33d7f8e0d0d052128af2f25066c1a0f6b648fd1a9612ab66800b86", - "sha256:14ea8ff2d33c48f8e6c3c472111d893b9e356284d1482102da9678195e5a8eac", - "sha256:1745987ada1890b0e7978abdb22c133eca2e89ab98dc17939042240063e1ef21", - "sha256:1962dfee37b7fb17d3d4889bf84c4ea08b1c36707194c578f61e6e06d12ab90f", - "sha256:20bf65bcce65c538e68d5df27402b39341fabeecf01de7e0e72b9d9836c13c52", - "sha256:26146c59576dfe9c546c9f45397a7c7c4a90c25679492ff610a7500afc7d03a6", - "sha256:365b75938049ae31cf2176efd3d598213ddb9eb883fbc82086efa019a5f649df", - "sha256:4770eb3ba69ec5fa41c681a75e53e0e342ac24c1f9220d883458b5596888e43a", - "sha256:50e7569637e2e02253295527ff34666706dbb2bc5f6c61a5a7f44b9610c9bb09", - "sha256:5c2d19bfb33262bf987ef0062345efd0f54c4189c2d95159c72995457bf4a359", - "sha256:621f050e72cc7dfd9ad4594ff0abeaad954d6e4a2891545e8f1a53dcdfbef445", - "sha256:6d81de54e45f1d756785405c9d06cd17918c2eecc2d4262dc2d276ca612c2f61", - "sha256:6f95706da857e6e79b54c33c1214f5467aab10600aa508ddd1239d5df271986e", - "sha256:752ef2e8dbaa3c5d419f322e3632f00ba6b1c3230f65bc97c2ff5c5c6c08f441", - "sha256:7b2785dd2a0c044a36836857ac27310dc7a99166253551ee8f5408930958cc60", - "sha256:7f13644b15665f7322f9e0635129e0ef2098409484df67fcd225d954c5861559", - "sha256:8194896038753b46b08a0b0ae89a5d80c897fb601dd51e243ed5720f1f155d27", - "sha256:864d4f89f054819cb95e93100b7d251e4d114d1c60bc7576db07b046432af280", - "sha256:8b773c9974c272aae0fa7e95b576d98d17ee65f69d8644f9b6ffc90ee96b4d19", - "sha256:8f901be74f00a13bf375241a778455ee864c2c21c79154aad196b7a994e1144f", - "sha256:91d2b89bb0c302f89e753bea008936acfa4e18c156fb264fe41eb6bbb2bbcdeb", - "sha256:b0538b66f959771c56ff996d828081908a6a52a47c5548faed4a3d0a027a5368", - "sha256:b30e70f1594ee3c8902978fd71900d7312453922827c4ce0012fa6a8278d6df4", - "sha256:b71be98ef6e180217d1797185c75507060a57ab9cd835653e0112db16a710f0d", - "sha256:c6d00cb9da8d0cbfaba18cad046e94b06de6d4d0ffd9d4095a3ad1838af22528", - "sha256:d1f665e50592caf4cad3caed3ed86f93227bffe0680218ccbb293bd5a6734ca8", - "sha256:e6e2c8581c6620136b9530137954a8376efffd57fe19802182c7561b0ab48b48", - "sha256:e7a7667d928ba6ee361a3176e1bef6847c1062b37726b33505cc84136f657e0d", - "sha256:ec3985c883d6d217cf2013028afc6e3c82b8907192ba6195d6e49885bfc4b19d", - "sha256:ede13a472caa85a13abe5095e71676af985d7690eaa8461aeac5c74f6600b6c0", - "sha256:f24d4d6ec301688c59b0c4bb1c1c94c5d0bff4ecad33bb8f5d9efdfb8d8bc925", - "sha256:f2a42acc01568b9701665e85562bbff78ec3e21981c7d51d56717c22e5d3d58b", - "sha256:fbc076f79d830ae4c9d49926180a1140b49fa675d0f0d555b44c9a15b29f4c80" + "sha256:0002e829142b2af00b4eaa26c51728f3ea68235f232a2e72a9508a3116bd6ed0", + "sha256:0005bd73026cd239fc1e8ccdf54db58b6193be9a02b3f0c5983808f84862c767", + "sha256:0292f70d1797e3c54e862e6f30ae474014648bc9c723e14a2fda730adb0a9791", + "sha256:036d8472356e1d5f096c5e0e1a7e0f9182140ada3602f8fff6b7329e9e7cfbcd", + "sha256:05f0de3a1dc3810a776275763764bb0015a02ae0f698a794646ebc5fb06fad33", + "sha256:0990932f7cca97fece8017414f57fdd80db506a045869d7ddf2dda1d7cf69ecc", + "sha256:13e397a9371ecd25573a7b90bd037db604331cf403f5318038c46ee44908c44d", + "sha256:14576238a5f89bcf504c5f0a388d0ca78df61fb42cb2af0efe239dc965d4f5c9", + "sha256:199a73c31ac8ea59937cc0bf3dfc04392e81afe2ec8a74f26f489d268867846c", + "sha256:2082a2d2fca363a3ce21cfa3d068c5a1ce4bf720cf6497fb3a9fc643a8ee4ddd", + "sha256:22ff16cedab5b16a0db79f1bc99e46a6ddececb60c396562e50aab58ddb2871c", + "sha256:2307495d9e0ea00d0c726be97a5b96615035854972cc538f6e7eaed23a35886c", + "sha256:2ad2b727fc41c7f8757098903f85fafb4bf587ca6605f82d9bf5604bd9c7cded", + "sha256:2d6495f84c4fd11584f34e62f9feec81bf373787b3942270487074e35cbe5330", + "sha256:361f6b5e3f659e3c56ea3518cf85fbdae1b9e788ade0219a67eeaaea8a4e4d2a", + "sha256:3e2ef592ac3693c65210f8b53d0edcf9f4405925adcfc031ff495e8d18169682", + "sha256:4676d51c9f6f6226ae8f26dc83ec291c088fe7633269757d333978df78d931ab", + "sha256:4ba7e122510bbc07258dc42be6ed45997efdf38129bde3e3f12649be70683546", + "sha256:5102fb9ee2c258a2218281adcb3e1918b793c51d6c2b4666ce38c35101bb940e", + "sha256:5323252be2bd261e0aa3f33cb3a64c45d76829989fa3ce90652838397d84197d", + "sha256:58bb65b3274b0c8a02cea9f91d6f44d0da79abc993b33bdedbfec98c8440175a", + "sha256:59bdc291165b6119fc6cdbc287c36f7f2859e6051dd923bdf47b4c55fd2f8bd0", + "sha256:5facb7fd6fa8a7353bbe88b95695e555338fb038ad19ceb29c82d94f62775a05", + "sha256:639e1ae8d48b3c86ffe59c0daa9a02e2bfe17ca3d2b41611b30a0073937d4497", + "sha256:8eb8897367a21b578b26f5713833836f886817ee2ffba1177d446fa3f77e67c8", + "sha256:90484a2b00baedad361402c257895b13faa3f01780f18f4a104a2f5c413e4536", + "sha256:9c56e19780cd1344fcd362fd6265a15f48aa8d365996a37fab1495cae8fcd97d", + "sha256:b67fc780cfe2b306180e56daaa411dd3186bf979d50a6a7c2a5b5036575cbdbb", + "sha256:c0dcf127bb99458a9d211e6e1f0f3edb96c874dd12f2503d4d8e4f1fd103790b", + "sha256:c23d64a0b28fc78c96289ffbd0d9d1abd48d267269b27f2d34e430ea73ce4b26", + "sha256:ccfd238f766a5bb5ee5545a62dd03f316ac67966a6a658efb63eeff8158a4bbf", + "sha256:cd767cf5d7252b1c88fcfb58426a32d7bd14a7e4942497e15b68ff5d822b41ad", + "sha256:ce8feaa52c1640de9541eeaaa8b5fb632d9d66249c947bb0d89dd01f87c7c288", + "sha256:d2e054aed4645f9b755db85bc69fc4ed2c9020c19c8027976f66576b906a74f1", + "sha256:e16c2be5cb19e2c08da7bd3a87fed2a0d4e90065ee553a940c4fc1a0fb1ab72b", + "sha256:e4b12e3d88a8fffd0b4ca559f6d4957ed91bd4c0613a4e13846ab8729dc5c251", + "sha256:e570cfc40a29d6ad46c9aeaddbdcee687880940a3a327f2c668dd0e4ef0a441d", + "sha256:eb30cf008850c0a26b72bd1b9be6730830165ce049d239cfdccd906f2685f892", + "sha256:f37fa70d95658763254941ddd30ecb23fc4ec0c5a788a7c21034fc2305dab7cc", + "sha256:f5ebeeec5c14533221eb30bad716bc1fd32f509196318fb9caa7002c4a364e4c", + "sha256:f5fa526d027d804b1f85cdda1eb091f70bde6fb7d87892f6dd5a48925bc88898" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==1.4.39" + "version": "==1.4.41" }, "swagger-ui-bundle": { "hashes": [ @@ -1325,11 +1382,11 @@ }, "tzdata": { "hashes": [ - "sha256:238e70234214138ed7b4e8a0fab0e5e13872edab3be586ab8198c407620e2ab9", - "sha256:8b536a8ec63dc0751342b3984193a3118f8fca2afe25752bb9b7fffd398552d3" + "sha256:323161b22b7802fdc78f20ca5f6073639c64f1a7227c40cd3e19fd1d0ce6650a", + "sha256:e15b2b3005e2546108af42a0eb4ccab4d9e225e2dfbf4f77aad50c70a4b1f3ab" ], "markers": "python_version >= '3.6'", - "version": "==2022.1" + "version": "==2022.5" }, "tzlocal": { "hashes": [ @@ -1341,11 +1398,11 @@ }, "urllib3": { "hashes": [ - "sha256:8298d6d56d39be0e3bc13c1c97d133f9b45d797169a0e11cdd0e0489d786f7ec", - "sha256:879ba4d1e89654d9769ce13121e0f94310ea32e8d2f8cf587b77c08bbcdb30d6" + "sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e", + "sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' and python_version < '4'", - "version": "==1.26.10" + "version": "==1.26.12" }, "vine": { "hashes": [ @@ -1360,7 +1417,7 @@ "sha256:7500c9625927c8ec60f54377d590f67b30c8e70ef4b8894214ac6e4cad233d2a", "sha256:780a4082c5fbc0fde6a2fcfe5e26e6efc1e8f425730863c04085769781f51eba" ], - "markers": "python_version >= '3.7'", + "markers": "python_full_version >= '3.7.0'", "version": "==2.1.2" }, "wcwidth": { @@ -1388,11 +1445,11 @@ }, "werkzeug": { "hashes": [ - "sha256:1ce08e8093ed67d638d63879fd1ba3735817f7a80de3674d293f5984f25fb6e6", - "sha256:72a4b735692dd3135217911cbeaa1be5fa3f62bffb8745c5215420a03dc55255" + "sha256:7ea2d48322cc7c0f8b3a215ed73eabd7b5d75d0b50e31ab006286ccff9e00b8f", + "sha256:f979ab81f58d7318e064e99c4506445d60135ac5cd2e177a2de0089bfd4c9bd5" ], "index": "pypi", - "version": "==2.1.2" + "version": "==2.2.2" }, "wrapt": { "hashes": [ @@ -1490,68 +1547,77 @@ }, "zipp": { "hashes": [ - "sha256:05b45f1ee8f807d0cc928485ca40a07cb491cf092ff587c0df9cb1fd154848d2", - "sha256:47c40d7fe183a6f21403a199b3e4192cca5774656965b0a4988ad2f8feb5f009" + "sha256:3a7af91c3db40ec72dd9d154ae18e008c69efe8ca88dde4f9a731bb82fe2f9eb", + "sha256:972cfa31bc2fedd3fa838a51e9bc7e64b7fb725a8c00e7431554311f180e9980" ], "markers": "python_version >= '3.7'", - "version": "==3.8.1" + "version": "==3.9.0" } }, "develop": { "attrs": { "hashes": [ - "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4", - "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd" + "sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6", + "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==21.4.0" + "markers": "python_version >= '3.5'", + "version": "==22.1.0" }, "coverage": { "hashes": [ - "sha256:0895ea6e6f7f9939166cc835df8fa4599e2d9b759b02d1521b574e13b859ac32", - "sha256:0f211df2cba951ffcae210ee00e54921ab42e2b64e0bf2c0befc977377fb09b7", - "sha256:147605e1702d996279bb3cc3b164f408698850011210d133a2cb96a73a2f7996", - "sha256:24b04d305ea172ccb21bee5bacd559383cba2c6fcdef85b7701cf2de4188aa55", - "sha256:25b7ec944f114f70803d6529394b64f8749e93cbfac0fe6c5ea1b7e6c14e8a46", - "sha256:2b20286c2b726f94e766e86a3fddb7b7e37af5d0c635bdfa7e4399bc523563de", - "sha256:2dff52b3e7f76ada36f82124703f4953186d9029d00d6287f17c68a75e2e6039", - "sha256:2f8553878a24b00d5ab04b7a92a2af50409247ca5c4b7a2bf4eabe94ed20d3ee", - "sha256:3def6791adf580d66f025223078dc84c64696a26f174131059ce8e91452584e1", - "sha256:422fa44070b42fef9fb8dabd5af03861708cdd6deb69463adc2130b7bf81332f", - "sha256:4f89d8e03c8a3757aae65570d14033e8edf192ee9298303db15955cadcff0c63", - "sha256:5336e0352c0b12c7e72727d50ff02557005f79a0b8dcad9219c7c4940a930083", - "sha256:54d8d0e073a7f238f0666d3c7c0d37469b2aa43311e4024c925ee14f5d5a1cbe", - "sha256:5ef42e1db047ca42827a85e34abe973971c635f83aed49611b7f3ab49d0130f0", - "sha256:5f65e5d3ff2d895dab76b1faca4586b970a99b5d4b24e9aafffc0ce94a6022d6", - "sha256:6c3ccfe89c36f3e5b9837b9ee507472310164f352c9fe332120b764c9d60adbe", - "sha256:6d0b48aff8e9720bdec315d67723f0babd936a7211dc5df453ddf76f89c59933", - "sha256:6fe75dcfcb889b6800f072f2af5a331342d63d0c1b3d2bf0f7b4f6c353e8c9c0", - "sha256:79419370d6a637cb18553ecb25228893966bd7935a9120fa454e7076f13b627c", - "sha256:7bb00521ab4f99fdce2d5c05a91bddc0280f0afaee0e0a00425e28e209d4af07", - "sha256:80db4a47a199c4563d4a25919ff29c97c87569130375beca3483b41ad5f698e8", - "sha256:866ebf42b4c5dbafd64455b0a1cd5aa7b4837a894809413b930026c91e18090b", - "sha256:8af6c26ba8df6338e57bedbf916d76bdae6308e57fc8f14397f03b5da8622b4e", - "sha256:a13772c19619118903d65a91f1d5fea84be494d12fd406d06c849b00d31bf120", - "sha256:a697977157adc052284a7160569b36a8bbec09db3c3220642e6323b47cec090f", - "sha256:a9032f9b7d38bdf882ac9f66ebde3afb8145f0d4c24b2e600bc4c6304aafb87e", - "sha256:b5e28db9199dd3833cc8a07fa6cf429a01227b5d429facb56eccd765050c26cd", - "sha256:c77943ef768276b61c96a3eb854eba55633c7a3fddf0a79f82805f232326d33f", - "sha256:d230d333b0be8042ac34808ad722eabba30036232e7a6fb3e317c49f61c93386", - "sha256:d4548be38a1c810d79e097a38107b6bf2ff42151900e47d49635be69943763d8", - "sha256:d4e7ced84a11c10160c0697a6cc0b214a5d7ab21dfec1cd46e89fbf77cc66fae", - "sha256:d56f105592188ce7a797b2bd94b4a8cb2e36d5d9b0d8a1d2060ff2a71e6b9bbc", - "sha256:d714af0bdba67739598849c9f18efdcc5a0412f4993914a0ec5ce0f1e864d783", - "sha256:d774d9e97007b018a651eadc1b3970ed20237395527e22cbeb743d8e73e0563d", - "sha256:e0524adb49c716ca763dbc1d27bedce36b14f33e6b8af6dba56886476b42957c", - "sha256:e2618cb2cf5a7cc8d698306e42ebcacd02fb7ef8cfc18485c59394152c70be97", - "sha256:e36750fbbc422c1c46c9d13b937ab437138b998fe74a635ec88989afb57a3978", - "sha256:edfdabe7aa4f97ed2b9dd5dde52d2bb29cb466993bb9d612ddd10d0085a683cf", - "sha256:f22325010d8824594820d6ce84fa830838f581a7fd86a9235f0d2ed6deb61e29", - "sha256:f23876b018dfa5d3e98e96f5644b109090f16a4acb22064e0f06933663005d39", - "sha256:f7bd0ffbcd03dc39490a1f40b2669cc414fae0c4e16b77bb26806a4d0b7d1452" + "sha256:027018943386e7b942fa832372ebc120155fd970837489896099f5cfa2890f79", + "sha256:11b990d520ea75e7ee8dcab5bc908072aaada194a794db9f6d7d5cfd19661e5a", + "sha256:12adf310e4aafddc58afdb04d686795f33f4d7a6fa67a7a9d4ce7d6ae24d949f", + "sha256:1431986dac3923c5945271f169f59c45b8802a114c8f548d611f2015133df77a", + "sha256:1ef221513e6f68b69ee9e159506d583d31aa3567e0ae84eaad9d6ec1107dddaa", + "sha256:20c8ac5386253717e5ccc827caad43ed66fea0efe255727b1053a8154d952398", + "sha256:2198ea6fc548de52adc826f62cb18554caedfb1d26548c1b7c88d8f7faa8f6ba", + "sha256:255758a1e3b61db372ec2736c8e2a1fdfaf563977eedbdf131de003ca5779b7d", + "sha256:265de0fa6778d07de30bcf4d9dc471c3dc4314a23a3c6603d356a3c9abc2dfcf", + "sha256:33a7da4376d5977fbf0a8ed91c4dffaaa8dbf0ddbf4c8eea500a2486d8bc4d7b", + "sha256:42eafe6778551cf006a7c43153af1211c3aaab658d4d66fa5fcc021613d02518", + "sha256:4433b90fae13f86fafff0b326453dd42fc9a639a0d9e4eec4d366436d1a41b6d", + "sha256:4a5375e28c5191ac38cca59b38edd33ef4cc914732c916f2929029b4bfb50795", + "sha256:4a8dbc1f0fbb2ae3de73eb0bdbb914180c7abfbf258e90b311dcd4f585d44bd2", + "sha256:59f53f1dc5b656cafb1badd0feb428c1e7bc19b867479ff72f7a9dd9b479f10e", + "sha256:5dbec3b9095749390c09ab7c89d314727f18800060d8d24e87f01fb9cfb40b32", + "sha256:633713d70ad6bfc49b34ead4060531658dc6dfc9b3eb7d8a716d5873377ab745", + "sha256:6b07130585d54fe8dff3d97b93b0e20290de974dc8177c320aeaf23459219c0b", + "sha256:6c4459b3de97b75e3bd6b7d4b7f0db13f17f504f3d13e2a7c623786289dd670e", + "sha256:6d4817234349a80dbf03640cec6109cd90cba068330703fa65ddf56b60223a6d", + "sha256:723e8130d4ecc8f56e9a611e73b31219595baa3bb252d539206f7bbbab6ffc1f", + "sha256:784f53ebc9f3fd0e2a3f6a78b2be1bd1f5575d7863e10c6e12504f240fd06660", + "sha256:7b6be138d61e458e18d8e6ddcddd36dd96215edfe5f1168de0b1b32635839b62", + "sha256:7ccf362abd726b0410bf8911c31fbf97f09f8f1061f8c1cf03dfc4b6372848f6", + "sha256:83516205e254a0cb77d2d7bb3632ee019d93d9f4005de31dca0a8c3667d5bc04", + "sha256:851cf4ff24062c6aec510a454b2584f6e998cada52d4cb58c5e233d07172e50c", + "sha256:8f830ed581b45b82451a40faabb89c84e1a998124ee4212d440e9c6cf70083e5", + "sha256:94e2565443291bd778421856bc975d351738963071e9b8839ca1fc08b42d4bef", + "sha256:95203854f974e07af96358c0b261f1048d8e1083f2de9b1c565e1be4a3a48cfc", + "sha256:97117225cdd992a9c2a5515db1f66b59db634f59d0679ca1fa3fe8da32749cae", + "sha256:98e8a10b7a314f454d9eff4216a9a94d143a7ee65018dd12442e898ee2310578", + "sha256:a1170fa54185845505fbfa672f1c1ab175446c887cce8212c44149581cf2d466", + "sha256:a6b7d95969b8845250586f269e81e5dfdd8ff828ddeb8567a4a2eaa7313460c4", + "sha256:a8fb6cf131ac4070c9c5a3e21de0f7dc5a0fbe8bc77c9456ced896c12fcdad91", + "sha256:af4fffaffc4067232253715065e30c5a7ec6faac36f8fc8d6f64263b15f74db0", + "sha256:b4a5be1748d538a710f87542f22c2cad22f80545a847ad91ce45e77417293eb4", + "sha256:b5604380f3415ba69de87a289a2b56687faa4fe04dbee0754bfcae433489316b", + "sha256:b9023e237f4c02ff739581ef35969c3739445fb059b060ca51771e69101efffe", + "sha256:bc8ef5e043a2af066fa8cbfc6e708d58017024dc4345a1f9757b329a249f041b", + "sha256:c4ed2820d919351f4167e52425e096af41bfabacb1857186c1ea32ff9983ed75", + "sha256:cca4435eebea7962a52bdb216dec27215d0df64cf27fc1dd538415f5d2b9da6b", + "sha256:d900bb429fdfd7f511f868cedd03a6bbb142f3f9118c09b99ef8dc9bf9643c3c", + "sha256:d9ecf0829c6a62b9b573c7bb6d4dcd6ba8b6f80be9ba4fc7ed50bf4ac9aecd72", + "sha256:dbdb91cd8c048c2b09eb17713b0c12a54fbd587d79adcebad543bc0cd9a3410b", + "sha256:de3001a203182842a4630e7b8d1a2c7c07ec1b45d3084a83d5d227a3806f530f", + "sha256:e07f4a4a9b41583d6eabec04f8b68076ab3cd44c20bd29332c6572dda36f372e", + "sha256:ef8674b0ee8cc11e2d574e3e2998aea5df5ab242e012286824ea3c6970580e53", + "sha256:f4f05d88d9a80ad3cac6244d36dd89a3c00abc16371769f1340101d3cb899fc3", + "sha256:f642e90754ee3e06b0e7e51bce3379590e76b7f76b708e1a71ff043f87025c84", + "sha256:fc2af30ed0d5ae0b1abdb4ebdce598eafd5b35397d4d75deb341a614d333d987" ], "index": "pypi", - "version": "==6.4.2" + "version": "==6.5.0" }, "iniconfig": { "hashes": [ @@ -1570,11 +1636,11 @@ }, "pbr": { "hashes": [ - "sha256:e547125940bcc052856ded43be8e101f63828c2d94239ffbe2b327ba3d5ccf0a", - "sha256:e8dca2f4b43560edef58813969f52a56cef023146cbb8931626db80e6c1c4308" + "sha256:cfcc4ff8e698256fc17ea3ff796478b050852585aa5bae79ecd05b2ab7b39b9a", + "sha256:da3e18aac0a3c003e9eea1a81bd23e5a3a75d745670dcf736317b7d966887fdf" ], "index": "pypi", - "version": "==5.9.0" + "version": "==5.10.0" }, "pluggy": { "hashes": [ @@ -1602,11 +1668,11 @@ }, "pytest": { "hashes": [ - "sha256:13d0e3ccfc2b6e26be000cb6568c832ba67ba32e719443bfe725814d3c42433c", - "sha256:a06a0425453864a270bc45e71f783330a7428defb4230fb5e6a731fde06ecd45" + "sha256:1377bda3466d70b55e3f5cecfa55bb7cfcf219c7964629b967c37cf0bda818b7", + "sha256:4f365fec2dff9c1162f834d9f18af1ba13062db0c708bf7b946f8a5c76180c39" ], "index": "pypi", - "version": "==7.1.2" + "version": "==7.1.3" }, "tomli": { "hashes": [ diff --git a/crc/__init__.py b/crc/__init__.py index f21728af..facede7f 100644 --- a/crc/__init__.py +++ b/crc/__init__.py @@ -6,8 +6,6 @@ import click import sentry_sdk import connexion -from SpiffWorkflow import WorkflowException -from SpiffWorkflow.bpmn.exceptions import WorkflowTaskExecException from connexion import ProblemException from flask import Response from flask_cors import CORS diff --git a/crc/api/common.py b/crc/api/common.py index d7d5f972..873dabd0 100644 --- a/crc/api/common.py +++ b/crc/api/common.py @@ -1,10 +1,10 @@ import json -from SpiffWorkflow import WorkflowException -from SpiffWorkflow.bpmn.exceptions import WorkflowTaskExecException from flask import g from jinja2 import TemplateError from werkzeug.exceptions import InternalServerError +from SpiffWorkflow.exceptions import WorkflowException +from SpiffWorkflow.bpmn.exceptions import WorkflowTaskExecException from crc import ma, app diff --git a/crc/api/file.py b/crc/api/file.py index 2ddbe70a..6c4d5845 100644 --- a/crc/api/file.py +++ b/crc/api/file.py @@ -81,9 +81,9 @@ def get_file_data(file_id): if file_model is not None: return send_file( io.BytesIO(file_model.data), - attachment_filename=file_model.name, + download_name=file_model.name, mimetype=file_model.content_type, - cache_timeout=-1 # Don't cache these files on the browser. + max_age=-1 # Don't cache these files on the browser. ) else: raise ApiError('missing_file_model', f'The file id you provided ({file_id}) does not exist') @@ -97,9 +97,9 @@ def get_file_data_link(file_id, auth_token): raise ApiError('no_such_file', f'The file id you provided ({file_id}) does not exist') return send_file( io.BytesIO(file_model.data), - attachment_filename=file_model.name, + download_name=file_model.name, mimetype=file_model.content_type, - cache_timeout=-1, # Don't cache these files on the browser. + max_age=-1, # Don't cache these files on the browser. last_modified=file_model.date_created, as_attachment=True ) @@ -136,8 +136,8 @@ def dmn_from_ss(): result = UserFileService.dmn_from_spreadsheet(file) return send_file( io.BytesIO(result), - attachment_filename='temp_dmn.dmn', + download_name='temp_dmn.dmn', mimetype='text/xml', - cache_timeout=-1, # Don't cache these files on the browser. + max_age=-1, # Don't cache these files on the browser. last_modified=datetime.now() ) diff --git a/crc/api/reference_file.py b/crc/api/reference_file.py index eb9456d4..f67a6319 100644 --- a/crc/api/reference_file.py +++ b/crc/api/reference_file.py @@ -20,9 +20,9 @@ def get_reference_file_data(name): file_data = ReferenceFileService().get_data(name) return send_file( io.BytesIO(file_data), - attachment_filename=name, + download_name=name, mimetype=content_type, - cache_timeout=-1 # Don't cache these files on the browser. + max_age=-1 # Don't cache these files on the browser. ) diff --git a/crc/api/spec_file.py b/crc/api/spec_file.py index 9d3b5d85..87b6fc82 100644 --- a/crc/api/spec_file.py +++ b/crc/api/spec_file.py @@ -80,9 +80,9 @@ def get_data(spec_id, file_name): file_info = SpecFileService.get_files(workflow_spec, file_name)[0] return send_file( io.BytesIO(file_data), - attachment_filename=file_name, + download_name=file_name, mimetype=file_info.content_type, - cache_timeout=-1 # Don't cache these files on the browser. + max_age=-1 # Don't cache these files on the browser. ) else: raise ApiError(code='missing_data_model', diff --git a/crc/api/study.py b/crc/api/study.py index d365b80f..9d4a070f 100644 --- a/crc/api/study.py +++ b/crc/api/study.py @@ -1,7 +1,6 @@ import json from datetime import datetime -from SpiffWorkflow.util.metrics import timeit, firsttime, sincetime from flask import g, send_file from sqlalchemy.exc import IntegrityError from crc import session @@ -140,9 +139,9 @@ def download_logs_for_study(study_id, auth_token): return send_file( io.BytesIO(spreadsheet), - attachment_filename='logs.xlsx', + download_name='logs.xlsx', mimetype='xlsx', - cache_timeout=-1, # Don't cache these files on the browser. + max_age=-1, # Don't cache these files on the browser. last_modified=datetime.now(), as_attachment=True ) diff --git a/crc/api/tools.py b/crc/api/tools.py index 0910c7f5..60f435ac 100644 --- a/crc/api/tools.py +++ b/crc/api/tools.py @@ -47,9 +47,9 @@ def render_docx(): return send_file( io.BytesIO(target_stream.read()), as_attachment=True, - attachment_filename="output.docx", + download_name="output.docx", mimetype="application/octet-stream", - cache_timeout=-1 # Don't cache these files on the browser. + max_age=-1 # Don't cache these files on the browser. ) except ValueError as e: raise ApiError(code="undefined_field", message=str(e)) diff --git a/crc/api/workflow.py b/crc/api/workflow.py index 4b13455f..679b64de 100644 --- a/crc/api/workflow.py +++ b/crc/api/workflow.py @@ -1,6 +1,6 @@ import uuid -from SpiffWorkflow import TaskState +from SpiffWorkflow.task import TaskState from flask import g from crc import session diff --git a/crc/models/api_models.py b/crc/models/api_models.py index 25fe98d6..5c4f954e 100644 --- a/crc/models/api_models.py +++ b/crc/models/api_models.py @@ -1,13 +1,14 @@ import enum import marshmallow -from SpiffWorkflow.navigation import NavItem from marshmallow import INCLUDE from marshmallow_enum import EnumField from crc import ma from crc.models.workflow import WorkflowStatus, WorkflowModel from crc.models.file import FileSchema +from crc.models.nav_item import NavItem + class MultiInstanceType(enum.Enum): none = "none" @@ -181,12 +182,10 @@ class NavigationItemSchema(ma.Schema): state = data.pop('state', None) task_id = data.pop('task_id', None) children = data.pop('children', []) - spec_type = data.pop('spec_type', None) item = NavItem(**data) item.state = state item.task_id = task_id item.children = children - item.spec_type = spec_type return item class DocumentDirectorySchema(ma.Schema): diff --git a/crc/models/nav_item.py b/crc/models/nav_item.py new file mode 100644 index 00000000..36d8aa92 --- /dev/null +++ b/crc/models/nav_item.py @@ -0,0 +1,95 @@ +from SpiffWorkflow.bpmn.specs.BpmnSpecMixin import BpmnSpecMixin, SequenceFlow + + +class NavItem(object): + """ + A waypoint in a workflow along with some key metrics + - Each list item has : + spec_id - TaskSpec or Sequence flow id + name - The name of the task spec (or sequence) + spec_type - The type of task spec (it's class name) + task_id - The uuid of the actual task instance, if it exists + description - Text description + backtrack_to - The spec_id of the task this will back track to. + indent - A hint for indentation + lane - This is the lane for the task if indicated. + state - State of the task + """ + + def __init__(self, spec_id, name, description, spec_type, + lane=None, backtrack_to=None, indent=0): + self.spec_id = spec_id + self.name = name + self.spec_type = "None" + self.description = description + self.lane = lane + self.backtrack_to = backtrack_to + self.indent = indent + self.task_id = None + self.state = None + self.children = [] + + @classmethod + def from_spec(cls, spec: BpmnSpecMixin, backtrack_to=None, indent=None): + instance = cls( + spec_id=spec.id, + name=spec.name, + description=spec.description, + spec_type=spec.spec_type, + lane=spec.lane, + backtrack_to=backtrack_to, + indent=indent, + ) + + return instance + + @classmethod + def from_flow(cls, flow: SequenceFlow, lane, backtrack_to, indent): + """We include flows in the navigation if we hit a conditional gateway, + as in do this if x, do this if y....""" + instance = cls( + spec_id=flow.id, + name=flow.name, + description=flow.name, + lane=lane, + backtrack_to=backtrack_to, + indent=indent + ) + instance.set_spec_type(flow) + return instance + + def __eq__(self, other): + if isinstance(other, NavItem): + return self.spec_id == other.spec_id and \ + self.name == other.name and \ + self.spec_type == other.spec_type and \ + self.description == other.description and \ + self.lane == other.lane and \ + self.backtrack_to == other.backtrack_to and \ + self.indent == other.indent + return False + + def __str__(self): + text = self.description + if self.spec_type == "StartEvent": + text = "O" + elif self.spec_type == "TaskEndEvent": + text = "@" + elif self.spec_type == "ExclusiveGateway": + text = f"X {text} X" + elif self.spec_type == "ParallelGateway": + text = f"+ {text}" + elif self.spec_type == "SequenceFlow": + text = f"-> {text}" + elif self.spec_type[-4:] == "Task": + text = f"[{text}] TASK ID: {self.task_id}" + else: + text = f"({self.spec_type}) {text}" + + result = f' {"..," * self.indent} STATE: {self.state} {text}' + if self.lane: + result = f'|{self.lane}| {result}' + if self.backtrack_to: + result += f" (BACKTRACK to {self.backtrack_to}" + + return result \ No newline at end of file diff --git a/crc/scripts/complete_template.py b/crc/scripts/complete_template.py index 804e1988..106b2c42 100644 --- a/crc/scripts/complete_template.py +++ b/crc/scripts/complete_template.py @@ -74,8 +74,11 @@ And one optional argument: else: image_file_data = None + # Just pass along the data in task.data -- not any of the executables. + data = self.just_the_data(task.data) + try: - return JinjaService().make_template(BytesIO(file_data), task.data, image_file_data) + return JinjaService().make_template(BytesIO(file_data), data, image_file_data) except ApiError as ae: # In some cases we want to provide a very specific error, that does not get obscured when going # through the python expression engine. We can do that by throwing a WorkflowTaskExecException, @@ -83,6 +86,8 @@ And one optional argument: raise WorkflowTaskExecException(task, ae.message, exception=ae, line_number=ae.line_number, error_line=ae.error_line) + + @staticmethod def get_image_file_data(fields_str, task): image_file_data = [] diff --git a/crc/scripts/is_file_uploaded.py b/crc/scripts/is_file_uploaded.py index eba44802..4971f967 100644 --- a/crc/scripts/is_file_uploaded.py +++ b/crc/scripts/is_file_uploaded.py @@ -1,5 +1,3 @@ -from SpiffWorkflow.util.metrics import timeit - from crc.scripts.script import Script from crc.services.user_file_service import UserFileService diff --git a/crc/scripts/script.py b/crc/scripts/script.py index b52129e5..eab3fd76 100644 --- a/crc/scripts/script.py +++ b/crc/scripts/script.py @@ -1,8 +1,7 @@ import importlib import os import pkgutil - -from SpiffWorkflow.util.metrics import timeit +from types import ModuleType from crc.api.common import ApiError @@ -32,6 +31,17 @@ class Script(object): "does must provide a validate_only option that mimics the do_task, " + "but does not make external calls or database updates." ) + @staticmethod + def just_the_data(task_data): + """Task Data can include the full context during execution - such as libraries, builtins, and embedded functions, things you + don't generally want to be working with, this will strip out all of those details, so you are just getting + the serializable data from the Task.""" + result = {k: v for (k, v) in task_data.items() + if not hasattr(v, '__call__') + and not isinstance(v, ModuleType) + and not k == '__builtins__'} + return result + @staticmethod def generate_augmented_list(task, study_id, workflow_id): """ diff --git a/crc/scripts/study_info.py b/crc/scripts/study_info.py index 28c5f73c..4a1901e2 100644 --- a/crc/scripts/study_info.py +++ b/crc/scripts/study_info.py @@ -1,8 +1,6 @@ import json from SpiffWorkflow.bpmn.PythonScriptEngine import Box -from SpiffWorkflow.util.metrics import timeit - from crc import session from crc.api.common import ApiError from crc.models.protocol_builder import ProtocolBuilderInvestigatorType diff --git a/crc/services/cache_service.py b/crc/services/cache_service.py index 39c24f0e..67e68893 100644 --- a/crc/services/cache_service.py +++ b/crc/services/cache_service.py @@ -1,6 +1,6 @@ import time -from SpiffWorkflow import Task +from SpiffWorkflow.task import Task cache_store = {} diff --git a/crc/services/protocol_builder.py b/crc/services/protocol_builder.py index 0927794f..46f6453c 100644 --- a/crc/services/protocol_builder.py +++ b/crc/services/protocol_builder.py @@ -3,7 +3,6 @@ from json import JSONDecodeError from typing import List, Optional import requests -from SpiffWorkflow.util.metrics import timeit from crc import app from crc.api.common import ApiError diff --git a/crc/services/study_service.py b/crc/services/study_service.py index 972f7050..f8267e44 100755 --- a/crc/services/study_service.py +++ b/crc/services/study_service.py @@ -4,10 +4,9 @@ from dateutil import parser from typing import List import requests -from SpiffWorkflow import WorkflowException +from SpiffWorkflow.exceptions import WorkflowException from SpiffWorkflow.bpmn.PythonScriptEngine import Box from SpiffWorkflow.bpmn.exceptions import WorkflowTaskExecException -from SpiffWorkflow.util.metrics import timeit, firsttime, sincetime, LOG from flask import g from ldap3.core.exceptions import LDAPSocketOpenError @@ -109,18 +108,14 @@ class StudyService(object): return warnings @staticmethod - @timeit def get_study(study_id, categories: List[WorkflowSpecCategory], study_model: StudyModel = None, master_workflow_results=None, process_categories=False): """Returns a study model that contains all the workflows organized by category. Pass in the results of the master workflow spec, and the status of other workflows will be updated.""" - last_time = firsttime() if not study_model: study_model = session.query(StudyModel).filter_by(id=study_id).first() study = Study.from_model(study_model) - last_time = sincetime("from model", last_time) study.create_user_display = LdapService.user_info(study.user_uid).display_name - last_time = sincetime("user", last_time) last_event: TaskEventModel = session.query(TaskEventModel) \ .filter_by(study_id=study_id, action='COMPLETE') \ .order_by(TaskEventModel.date.desc()).first() @@ -130,12 +125,10 @@ class StudyService(object): else: study.last_activity_user = LdapService.user_info(last_event.user_uid).display_name study.last_activity_date = last_event.date - last_time = sincetime("task_events", last_time) study.categories = categories files = UserFileService.get_files_for_study(study.id) files = (File.from_file_model(model, DocumentService.get_dictionary()) for model in files) study.files = list(files) - last_time = sincetime("files", last_time) if process_categories and master_workflow_results is not None: if study.status != StudyStatus.abandoned: workflow_metas = [] @@ -149,8 +142,6 @@ class StudyService(object): category.meta = category_meta study.warnings = StudyService.get_study_warnings(workflow_metas, master_workflow_results) - last_time = sincetime("categories", last_time) - if study.primary_investigator is None: associates = StudyService().get_study_associates(study.id) for associate in associates: @@ -449,7 +440,6 @@ class StudyService(object): return {} @staticmethod - @timeit def synch_with_protocol_builder_if_enabled(user, specs): """Assures that the studies we have locally for the given user are in sync with the studies available in protocol builder. """ diff --git a/crc/services/task_logging_service.py b/crc/services/task_logging_service.py index dd5f5c84..dd666b76 100644 --- a/crc/services/task_logging_service.py +++ b/crc/services/task_logging_service.py @@ -97,7 +97,8 @@ class TaskLoggingService(object): sort_column = desc(task_log_query.sort_column) else: sort_column = task_log_query.sort_column - paginator = sql_query.order_by(sort_column).paginate(task_log_query.page + 1, task_log_query.per_page, + paginator = sql_query.order_by(sort_column).paginate(page=task_log_query.page + 1, + per_page=task_log_query.per_page, error_out=False) task_log_query.update_from_sqlalchemy_paginator(paginator) return task_log_query diff --git a/crc/services/workflow_processor.py b/crc/services/workflow_processor.py index db2d7ca4..b3995e0c 100644 --- a/crc/services/workflow_processor.py +++ b/crc/services/workflow_processor.py @@ -3,14 +3,16 @@ from typing import List from SpiffWorkflow.bpmn.PythonScriptEngine import PythonScriptEngine from SpiffWorkflow.bpmn.serializer import BpmnWorkflowSerializer -from SpiffWorkflow.bpmn.specs.events import EndEvent, CancelEventDefinition +from SpiffWorkflow.bpmn.specs.events import EndEvent, SignalEventDefinition from SpiffWorkflow.camunda.serializer import UserTaskConverter from SpiffWorkflow.dmn.serializer import BusinessRuleTaskConverter from SpiffWorkflow.serializer.exceptions import MissingSpecError from lxml import etree from datetime import datetime -from SpiffWorkflow import Task as SpiffTask, WorkflowException, Task, TaskState +from SpiffWorkflow.task import Task as SpiffTask, Task, TaskState +from SpiffWorkflow.exceptions import WorkflowException + from SpiffWorkflow.bpmn.parser.ValidationException import ValidationException from SpiffWorkflow.bpmn.serializer.BpmnSerializer import BpmnSerializer from SpiffWorkflow.bpmn.workflow import BpmnWorkflow @@ -40,7 +42,7 @@ class CustomBpmnScriptEngine(PythonScriptEngine): scripts directory available for execution. """ def evaluate(self, task, expression): - return self._evaluate(expression, task.data, task) + return self._evaluate(expression, task.data, task=task) def __get_augment_methods(self, task): methods = [] @@ -67,16 +69,16 @@ class CustomBpmnScriptEngine(PythonScriptEngine): if(external_methods): methods.update(external_methods) try: - return super()._evaluate(expression, context, task, methods) + return super()._evaluate(expression, context, methods) except Exception as e: raise WorkflowTaskExecException(task, "Error evaluating expression " "'%s', %s" % (expression, str(e))) - def execute(self, task: SpiffTask, script, data): + def execute(self, task: SpiffTask, script): try: augment_methods = self.__get_augment_methods(task) - super().execute(task, script, data, external_methods=augment_methods) + super().execute(task, script, external_methods=augment_methods) except WorkflowException as e: raise e except Exception as e: @@ -326,8 +328,7 @@ class WorkflowProcessor(object): def __cancel_notify(bpmn_workflow): try: # A little hackly, but make the bpmn_workflow catch a cancel event. - bpmn_workflow.signal('cancel') # generate a cancel signal. - bpmn_workflow.catch(CancelEventDefinition()) + bpmn_workflow.catch(SignalEventDefinition('cancel')) bpmn_workflow.do_engine_steps() except WorkflowTaskExecException as we: raise ApiError.from_workflow_exception("task_error", str(we), we) diff --git a/crc/services/workflow_service.py b/crc/services/workflow_service.py index 4b395fc5..8ec517a4 100755 --- a/crc/services/workflow_service.py +++ b/crc/services/workflow_service.py @@ -8,7 +8,8 @@ from datetime import datetime from typing import List import jinja2 -from SpiffWorkflow import Task as SpiffTask, WorkflowException, NavItem, TaskState +from SpiffWorkflow.task import Task as SpiffTask, TaskState, TaskStateNames +from SpiffWorkflow.exceptions import WorkflowException from SpiffWorkflow.bpmn.PythonScriptEngine import Box from SpiffWorkflow.bpmn.specs.ManualTask import ManualTask from SpiffWorkflow.bpmn.specs.ScriptTask import ScriptTask @@ -26,6 +27,7 @@ from crc.api.common import ApiError from crc.models.api_models import Task, MultiInstanceType, WorkflowApi from crc.models.file import LookupDataModel, FileModel, File, FileSchema from crc.models.ldap import LdapModel +from crc.models.nav_item import NavItem from crc.models.study import StudyModel from crc.models.task_event import TaskEventModel, TaskAction from crc.models.user import UserModel @@ -674,7 +676,7 @@ class WorkflowService(object): if any(nav.name == user_task.task_spec.name and user_task.state == TaskState.FUTURE for nav in navigation): continue # Don't re-add the same spec for future items nav_item = NavItem.from_spec(spec=user_task.task_spec) - nav_item.state = user_task.state.name + nav_item.state = TaskStateNames[user_task.state] nav_item.task_id = user_task.id nav_item.indent = 0 # we should remove indent, this is not nested now. navigation.append(nav_item) @@ -685,8 +687,8 @@ class WorkflowService(object): def processor_to_workflow_api(processor: WorkflowProcessor, next_task=None): """Returns an API model representing the state of the current workflow, if requested, and possible, next_task is set to the current_task.""" - navigation = processor.bpmn_workflow.get_deep_nav_list() - WorkflowService.update_navigation(navigation, processor) + # navigation = processor.bpmn_workflow.get_deep_nav_list() + # WorkflowService.update_navigation(navigation, processor) spec_service = WorkflowSpecService() spec = spec_service.get_spec(processor.workflow_spec_id) is_admin_workflow = WorkflowService.is_admin_workflow(processor.workflow_spec_id) @@ -772,16 +774,7 @@ class WorkflowService(object): @staticmethod def spiff_task_to_api_task(spiff_task, add_docs_and_forms=False): - task_type = spiff_task.task_spec.__class__.__name__ - - task_types = [UserTask, ManualTask, BusinessRuleTask, CancelTask, ScriptTask, StartTask, EndEvent, StartEvent] - - for t in task_types: - if isinstance(spiff_task.task_spec, t): - task_type = t.__name__ - break - else: - task_type = "NoneTask" + task_type = spiff_task.task_spec.spec_type info = spiff_task.task_info() if info["is_looping"]: @@ -802,7 +795,6 @@ class WorkflowService(object): lane = spiff_task.task_spec.lane else: lane = None - task = Task(spiff_task.id, spiff_task.task_spec.name, spiff_task.task_spec.description, diff --git a/example_data.py b/example_data.py index 69190984..976de79c 100644 --- a/example_data.py +++ b/example_data.py @@ -16,11 +16,8 @@ class ExampleDataLoader: @staticmethod def clean_db(): session.flush() # Clear out any transactions before deleting it all to avoid spurious errors. - engine = session.bind.engine - connection = engine.connect() for table in reversed(db.metadata.sorted_tables): - if engine.dialect.has_table(connection, table): - session.execute(table.delete()) + session.execute(table.delete()) session.commit() session.flush() diff --git a/tests/base_test.py b/tests/base_test.py index 34916954..017658c8 100644 --- a/tests/base_test.py +++ b/tests/base_test.py @@ -94,8 +94,9 @@ class BaseTest(unittest.TestCase): @classmethod def tearDownClass(cls): - cls.ctx.pop() + db.session.commit() db.drop_all() + cls.ctx.pop() def setUp(self): pass @@ -212,14 +213,18 @@ class BaseTest(unittest.TestCase): return data def assert_success(self, rv, msg=""): + error_message = "" try: data = json.loads(rv.get_data(as_text=True)) - self.assertTrue(200 <= rv.status_code < 300, - "BAD Response: %i. \n %s" % - (rv.status_code, data['message']) + ". " + msg + ". ") - except: - self.assertTrue(200 <= rv.status_code < 300, - "BAD Response: %i." % rv.status_code + ". " + msg) + if 'message' in data: + error_message = data['message'] + except Exception as e: + # Can't get an error message from the body. + error_message = "unparsable response" + + self.assertTrue(200 <= rv.status_code < 300, + "BAD Response: %i. \n %s" % + (rv.status_code, error_message + ". " + msg + ". ")) def assert_failure(self, rv, status_code=0, error_code=""): self.assertFalse(200 <= rv.status_code < 300, diff --git a/tests/data/check_study_script/check_study_script.bpmn b/tests/data/check_study_script/check_study_script.bpmn index 91cfc790..bd2cfbaf 100644 --- a/tests/data/check_study_script/check_study_script.bpmn +++ b/tests/data/check_study_script/check_study_script.bpmn @@ -1,5 +1,5 @@ - + Flow_17nzcku @@ -8,12 +8,12 @@ Flow_17nzcku Flow_0oozrfg - check_study = check_study() + my_check_study = check_study() # Check Study -<div><span>{{check_study}}</span></div> +<div><span>{{my_check_study}}</span></div> Flow_0oozrfg Flow_10sc31i @@ -25,28 +25,28 @@ - - + + - - + + - - + + - + - + - + - + diff --git a/tests/data/study_cancellations/study_cancellations.bpmn b/tests/data/study_cancellations/study_cancellations.bpmn index 69596b6e..ef510c8d 100644 --- a/tests/data/study_cancellations/study_cancellations.bpmn +++ b/tests/data/study_cancellations/study_cancellations.bpmn @@ -1,5 +1,5 @@ - + Flow_0xym55y @@ -14,7 +14,7 @@ print('New Title') - + Flow_1e9j7mj @@ -51,7 +51,7 @@ print('Second Title') - + Flow_0tbg5qf @@ -63,24 +63,37 @@ print('Second Title') - - Flow_1qqhbqp - - Flow_16q1uec + + Flow_1qqhbqp + + + + + + + + + + + + + + + @@ -100,24 +113,15 @@ print('Second Title') - - - - - - - - - - - - + + + @@ -133,20 +137,17 @@ print('Second Title') - - - - - - - + + + + @@ -156,15 +157,18 @@ print('Second Title') - - - + + + + + + - \ No newline at end of file + diff --git a/tests/data/study_sponsors_associate/study_sponsors_associate.bpmn b/tests/data/study_sponsors_associate/study_sponsors_associate.bpmn index 924dd03e..db418b0b 100644 --- a/tests/data/study_sponsors_associate/study_sponsors_associate.bpmn +++ b/tests/data/study_sponsors_associate/study_sponsors_associate.bpmn @@ -1,5 +1,5 @@ - + SequenceFlow_1nfe5m9 @@ -32,7 +32,7 @@ out4 = get_study_associate('lb3dp') Flow_1vlh6s0 uids = [] for assoc in out: - uids.append(assoc.uid) + uids.append(assoc['uid']) update_study_associates([{'uid':'lb3dp','role':'SuperGal','send_email':False,'access':True}]) diff --git a/tests/data/update_study_info/update_study_info.bpmn b/tests/data/update_study_info/update_study_info.bpmn index b04d62b2..ffb0a95e 100644 --- a/tests/data/update_study_info/update_study_info.bpmn +++ b/tests/data/update_study_info/update_study_info.bpmn @@ -1,5 +1,5 @@ - + Flow_0g8e1jy @@ -8,8 +8,8 @@ - - + + Flow_0g8e1jy @@ -25,12 +25,12 @@ Flow_0xf0u0k Flow_0tzamxo - study_info = study_info("info") + my_study_info = study_info("info") # Info -{{ study_info }} +{{ my_study_info }} Flow_0tzamxo Flow_0x5ex3d @@ -43,42 +43,42 @@ - - + + - - + + - - + + - - + + - - + + - + - + - + - + - + - + diff --git a/tests/test_lane_permissions.py b/tests/test_lane_permissions.py index 19d14ed8..3b86bd0c 100644 --- a/tests/test_lane_permissions.py +++ b/tests/test_lane_permissions.py @@ -73,5 +73,5 @@ class TestLanePermissions(BaseTest): # Complete the workflow as lje5u workflow_api = self.complete_form(workflow, third_task, {}, user_uid='lje5u') - self.assertEqual('EndEvent', workflow_api.next_task.type) + self.assertEqual('End Event', workflow_api.next_task.type) self.assertEqual('COMPLETED', workflow_api.next_task.state) diff --git a/tests/test_multi_instance_tasks_api.py b/tests/test_multi_instance_tasks_api.py index d9e47d76..187beeb6 100644 --- a/tests/test_multi_instance_tasks_api.py +++ b/tests/test_multi_instance_tasks_api.py @@ -31,7 +31,7 @@ class TestMultiinstanceTasksApi(BaseTest): workflow_api = self.get_workflow_api(workflow) navigation = self.get_workflow_api(workflow_api).navigation self.assertEqual(2, len(navigation)) # Start task, multi-instance/user task - self.assertEqual("UserTask", workflow_api.next_task.type) + self.assertEqual("User Task", workflow_api.next_task.type) self.assertEqual(MultiInstanceType.sequential.value, workflow_api.next_task.multi_instance_type) self.assertEqual(5, workflow_api.next_task.multi_instance_count) @@ -56,7 +56,7 @@ class TestMultiinstanceTasksApi(BaseTest): ready_items = [nav for nav in workflow_api.navigation if nav.state == "READY"] self.assertEqual(5, len(ready_items)) # Just the 5 investigators. - self.assertEqual("UserTask", workflow_api.next_task.type) + self.assertEqual("User Task", workflow_api.next_task.type) self.assertEqual("MultiInstanceTask",workflow_api.next_task.name) self.assertEqual("Primary Investigator", workflow_api.next_task.title) @@ -94,7 +94,7 @@ class TestMultiinstanceTasksApi(BaseTest): ready_items = [nav for nav in workflow_api.navigation if nav.state == "READY"] self.assertEqual(5, len(ready_items)) - self.assertEqual("UserTask", workflow_api.next_task.type) + self.assertEqual("User Task", workflow_api.next_task.type) self.assertEqual("MultiInstanceTask",workflow_api.next_task.name) self.assertEqual("Primary Investigator", workflow_api.next_task.title) diff --git a/tests/test_study_info_script.py b/tests/test_study_info_script.py index 4cbd2ea1..c73d663a 100644 --- a/tests/test_study_info_script.py +++ b/tests/test_study_info_script.py @@ -46,10 +46,7 @@ class TestStudyInfoScript(BaseTest): workflow_api = self.complete_form(workflow, task, {'short_name': short_name, 'proposal_name': proposal_name}) task = workflow_api.next_task - # The workflow calls study_info('info') and puts the result in Element Documentation - # I create a dictionary of that info with `eval` to make the asserts easier to read - study_info = eval(task.documentation) - + study_info = task.data['my_study_info'] self.assertIn('short_name', study_info.keys()) self.assertEqual(short_name, study_info['short_name']) self.assertIn('proposal_name', study_info.keys()) diff --git a/tests/test_tasks_api.py b/tests/test_tasks_api.py index 6620f3b3..e294c779 100644 --- a/tests/test_tasks_api.py +++ b/tests/test_tasks_api.py @@ -63,7 +63,7 @@ class TestTasksApi(BaseTest): self.assertEqual('two_forms', workflow_api.workflow_spec_id) self.assertEqual(3, len(workflow_api.navigation)) # start and 2 forms self.assertIsNotNone(workflow_api.next_task.form) - self.assertEqual("UserTask", workflow_api.next_task.type) + self.assertEqual("User Task", workflow_api.next_task.type) self.assertEqual("StepOne", workflow_api.next_task.name) self.assertEqual(1, len(workflow_api.next_task.form['fields'])) @@ -98,40 +98,6 @@ class TestTasksApi(BaseTest): workflow_api = self.get_workflow_api(workflow) self.assertEqual("Task_Num_Bananas", workflow_api.next_task.name) - def test_navigation_with_parallel_forms(self): - workflow = self.create_workflow('exclusive_gateway') - processor = WorkflowProcessor(workflow) - nav = processor.bpmn_workflow.get_deep_nav_list() - self.assertEqual(4, len(nav)) - self.assertEqual("Enter Do You Have Bananas", nav[1].description) - self.assertEqual("Has Bananas?", nav[2].description) - - self.assertEqual("yes", nav[2].children[0].description) - self.assertEqual("MAYBE", nav[2].children[0].state) - self.assertEqual("Number of Bananas", nav[2].children[0].children[0].description) - self.assertEqual("EndEvent", nav[2].children[0].children[1].spec_type) - - self.assertEqual("no", nav[2].children[1].description) - self.assertEqual("MAYBE", nav[2].children[1].state) - self.assertEqual("Why no bananas", nav[2].children[1].children[0].description) - self.assertEqual("EndEvent", nav[2].children[1].children[1].spec_type) - - def test_navigation_with_exclusive_gateway(self): - workflow = self.create_workflow('exclusive_gateway_2') - processor = WorkflowProcessor(workflow) - # get the first form in the two form workflow. - nav = processor.bpmn_workflow.get_deep_nav_list() - self.assertEqual(7, len(nav)) - self.assertEqual("Enter Task 1", nav[1].description) - self.assertEqual("Decide Which Branch?", nav[2].description) - self.assertEqual("a", nav[2].children[0].description) - self.assertEqual("Enter Task 2a", nav[2].children[0].children[0].description) - self.assertEqual("b", nav[2].children[1].description) - self.assertEqual("Enter Task 2b", nav[2].children[1].children[0].description) - self.assertEqual(None, nav[3].description) - self.assertEqual("Enter Task 3", nav[4].description) - self.assertEqual("EndEvent", nav[5].spec_type) - def test_document_added_to_workflow_shows_up_in_file_list(self): self.create_reference_document() workflow = self.create_workflow('docx') @@ -226,7 +192,7 @@ class TestTasksApi(BaseTest): workflow = self.get_workflow_api(workflow) self.assertEqual('Task_Manual_One', workflow.next_task.name) - self.assertEqual('ManualTask', workflow_api.next_task.type) + self.assertEqual('Manual Task', workflow_api.next_task.type) self.assertTrue('Markdown' in workflow_api.next_task.documentation) self.assertTrue('Dan' in workflow_api.next_task.documentation) @@ -351,7 +317,7 @@ class TestTasksApi(BaseTest): task = workflow_api.next_task self.assertEqual(4, len(navigation)) # 2 start events + 2 user tasks - self.assertEqual("UserTask", task.type) + self.assertEqual("User Task", task.type) self.assertEqual("Activity_A", task.name) self.assertEqual("My Sub Process", task.process_name) workflow_api = self.complete_form(workflow, task, {"FieldA": "Dan"}) diff --git a/tests/test_user_roles.py b/tests/test_user_roles.py index 52691897..bf0b613d 100644 --- a/tests/test_user_roles.py +++ b/tests/test_user_roles.py @@ -189,7 +189,7 @@ class TestUserRoles(BaseTest): workflow_api = self.get_workflow_api(workflow, user_uid=submitter.uid) self.assertEqual('COMPLETED', workflow_api.next_task.state) - self.assertEqual('EndEvent', workflow_api.next_task.type) # Are are at the end. + self.assertEqual('End Event', workflow_api.next_task.type) # Are are at the end. self.assertEqual(WorkflowStatus.complete, workflow_api.status) def get_assignment_task_events(self, uid): @@ -245,7 +245,7 @@ class TestUserRoles(BaseTest): data["approval"] = True workflow_api = self.complete_form(workflow, workflow_api.next_task, data, user_uid=supervisor.uid) self.assertEqual(WorkflowStatus.complete, workflow_api.status) - self.assertEqual('EndEvent', workflow_api.next_task.type) # Are are at the end. + self.assertEqual('End Event', workflow_api.next_task.type) # Are are at the end. self.assertEqual(0, len(self.get_assignment_task_events(submitter.uid))) self.assertEqual(0, len(self.get_assignment_task_events(supervisor.uid))) diff --git a/tests/workflow/test_workflow_name_error_hint.py b/tests/workflow/test_workflow_name_error_hint.py index 3a4ef862..46056d7e 100644 --- a/tests/workflow/test_workflow_name_error_hint.py +++ b/tests/workflow/test_workflow_name_error_hint.py @@ -11,4 +11,4 @@ class TestNameErrorHint(BaseTest): spec_model = self.load_test_spec('script_with_name_error') rv = self.app.get('/v1.0/workflow-specification/%s/validate' % spec_model.id, headers=self.logged_in_headers()) json_data = json.loads(rv.get_data(as_text=True)) - self.assertIn('Did you mean \'[\'spam\'', json_data[0]['message']) + self.assertIn('Did you mean one of \'[\'spam\'', json_data[0]['message']) diff --git a/tests/workflow/test_workflow_processor.py b/tests/workflow/test_workflow_processor.py index c4e6a912..6b7e109e 100644 --- a/tests/workflow/test_workflow_processor.py +++ b/tests/workflow/test_workflow_processor.py @@ -1,7 +1,7 @@ import json import os -from SpiffWorkflow import TaskState +from SpiffWorkflow.task import TaskState from SpiffWorkflow.bpmn.serializer.BpmnSerializer import BpmnSerializer from tests.base_test import BaseTest diff --git a/tests/workflow/test_workflow_processor_multi_instance.py b/tests/workflow/test_workflow_processor_multi_instance.py index b92b5504..8cd622d7 100644 --- a/tests/workflow/test_workflow_processor_multi_instance.py +++ b/tests/workflow/test_workflow_processor_multi_instance.py @@ -44,7 +44,6 @@ class TestWorkflowProcessorMultiInstance(BaseTest): # This depends on getting a list of investigators back from the protocol builder. mock_study_service.return_value = self.mock_investigator_response - workflow_spec_model = self.create_workflow("irb_api_personnel") study = session.query(StudyModel).first() processor = WorkflowProcessor(workflow_spec_model) @@ -52,12 +51,13 @@ class TestWorkflowProcessorMultiInstance(BaseTest): task_list = processor.get_ready_user_tasks() processor.complete_task(task_list[0]) processor.do_engine_steps() - nav_list = processor.bpmn_workflow.get_flat_nav_list() processor.save() # reload after save processor = WorkflowProcessor(workflow_spec_model) - nav_list2 = processor.bpmn_workflow.get_flat_nav_list() - self.assertEqual(nav_list,nav_list2) + task_list = processor.get_ready_user_tasks() + data = task_list[0].data + self.assertIn('investigators', data) + self.assertEqual(data['investigators'], self.mock_investigator_response) @patch('crc.services.study_service.StudyService.get_investigators') def test_create_and_complete_workflow(self, mock_study_service): @@ -156,9 +156,6 @@ class TestWorkflowProcessorMultiInstance(BaseTest): # In the Parallel instance, there should be three tasks, all of them in the ready state. next_user_tasks = processor.next_user_tasks() self.assertEqual(3, len(next_user_tasks)) - # There should be six tasks in the navigation: start event, the script task, end event, and three tasks - # for the three executions of hte multi-instance. - self.assertEqual(7, len(processor.bpmn_workflow.get_flat_nav_list())) # We can complete the tasks out of order. task = next_user_tasks[2] @@ -176,7 +173,6 @@ class TestWorkflowProcessorMultiInstance(BaseTest): task.update_data({"investigator": {"email": "dhf8r@virginia.edu"}}) processor.complete_task(task) processor.do_engine_steps() - self.assertEqual(7, len(processor.bpmn_workflow.get_flat_nav_list())) task = next_user_tasks[0] api_task = WorkflowService.spiff_task_to_api_task(task) @@ -184,7 +180,6 @@ class TestWorkflowProcessorMultiInstance(BaseTest): task.update_data({"investigator":{"email":"asd3v@virginia.edu"}}) processor.complete_task(task) processor.do_engine_steps() - self.assertEqual(7, len(processor.bpmn_workflow.get_flat_nav_list())) task = next_user_tasks[1] api_task = WorkflowService.spiff_task_to_api_task(task) @@ -192,7 +187,6 @@ class TestWorkflowProcessorMultiInstance(BaseTest): task.update_data({"investigator":{"email":"asdf32@virginia.edu"}}) processor.complete_task(task) processor.do_engine_steps() - self.assertEqual(7, len(processor.bpmn_workflow.get_flat_nav_list())) # Completing the tasks out of order, still provides the correct information. expected = self.mock_investigator_response @@ -203,4 +197,3 @@ class TestWorkflowProcessorMultiInstance(BaseTest): task.data['StudyInfo']['investigators']) self.assertEqual(WorkflowStatus.complete, processor.get_status()) - self.assertEqual(7, len(processor.bpmn_workflow.get_flat_nav_list())) diff --git a/tests/workflow/test_workflow_spec_validation_api.py b/tests/workflow/test_workflow_spec_validation_api.py index b451734c..d318bc19 100644 --- a/tests/workflow/test_workflow_spec_validation_api.py +++ b/tests/workflow/test_workflow_spec_validation_api.py @@ -1,7 +1,5 @@ import json import time - -from SpiffWorkflow.util.metrics import timeit from unittest.mock import patch from tests.base_test import BaseTest @@ -54,7 +52,7 @@ class TestWorkflowSpecValidation(BaseTest): self.assertEqual("ExclusiveGateway_003amsm", errors[0]['task_id']) self.assertEqual("Has Bananas Gateway", errors[0]['task_name']) self.assertEqual("invalid_expression.bpmn", errors[0]['file_name']) - self.assertEqual('ExclusiveGateway_003amsm: Error evaluating expression \'this_value_does_not_exist==true\', ' + self.assertEqual('Error evaluating expression \'this_value_does_not_exist==true\', ' 'name \'this_value_does_not_exist\' is not defined', errors[0]["message"]) self.assertIsNotNone(errors[0]['task_data']) self.assertIn("has_bananas", errors[0]['task_data'])