diff --git a/Pipfile.lock b/Pipfile.lock index 39650371..027ec504 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -48,11 +48,11 @@ }, "apscheduler": { "hashes": [ - "sha256:236dbf7244200ffc79c6c0b9ff7d2ed10e7e985f37f48d4a23f4142f4967dcb5", - "sha256:f8a3e6e4d178de40fdbd5a3eefcc217588fc7f42f443e2335bb2dc29daf99357" + "sha256:65e6574b6395498d371d045f2a8a7e4f7d50c6ad21ef7313d15b1c7cf20df1e3", + "sha256:ddc25a0ddd899de44d7f451f4375fb971887e65af51e41e5dcf681f59b8b2c9a" ], "index": "pypi", - "version": "==3.9.0.post1" + "version": "==3.9.1" }, "attrs": { "hashes": [ @@ -89,7 +89,7 @@ "sha256:f04e857b59d9d1ccc39ce2da1021d196e47234873820cbeaad210724b1ee28ac", "sha256:fadbfe37f74051d024037f223b8e001611eac868b5c5b06144ef4d8b799862f2" ], - "markers": "python_version < '3.9'", + "markers": "python_version >= '3.6' and python_version < '3.9'", "version": "==0.2.1" }, "bcrypt": { @@ -131,11 +131,11 @@ }, "celery": { "hashes": [ - "sha256:2844eb040e915398623a43253a8e1016723442ece6b0751a3c416d8a2b34216f", - "sha256:5a68a351076cfac4f678fa5ffd898105c28825a2224902da006970005196d061" + "sha256:8aacd02fc23a02760686d63dde1eb0daa9f594e735e73ea8fb15c2ff15cb608c", + "sha256:e2cd41667ad97d4f6a2f4672d1c6a6ebada194c619253058b5f23704aaadaa82" ], "index": "pypi", - "version": "==5.2.2" + "version": "==5.2.3" }, "certifi": { "hashes": [ @@ -549,11 +549,11 @@ }, "importlib-metadata": { "hashes": [ - "sha256:175f4ee440a0317f6e8d81b7f8d4869f93316170a65ad2b007d2929186c8052c", - "sha256:e0bc84ff355328a4adfc5240c4f211e0ab386f80aa640d1b11f0618a1d282094" + "sha256:b36ffa925fe3139b2f6ff11d6925ffd4fa7bc47870165e3ac260ac7b4f91e6ac", + "sha256:d16e8c1deb60de41b8e8ed21c1a7b947b0bc62fab7e1d470bcdf331cea2e6735" ], - "markers": "python_version < '3.9'", - "version": "==4.11.1" + "markers": "python_version < '3.10'", + "version": "==4.11.2" }, "importlib-resources": { "hashes": [ @@ -1080,82 +1080,83 @@ }, "regex": { "hashes": [ - "sha256:04611cc0f627fc4a50bc4a9a2e6178a974c6a6a4aa9c1cca921635d2c47b9c87", - "sha256:0b5d6f9aed3153487252d00a18e53f19b7f52a1651bc1d0c4b5844bc286dfa52", - "sha256:0d2f5c3f7057530afd7b739ed42eb04f1011203bc5e4663e1e1d01bb50f813e3", - "sha256:11772be1eb1748e0e197a40ffb82fb8fd0d6914cd147d841d9703e2bef24d288", - "sha256:1333b3ce73269f986b1fa4d5d395643810074dc2de5b9d262eb258daf37dc98f", - "sha256:16f81025bb3556eccb0681d7946e2b35ff254f9f888cff7d2120e8826330315c", - "sha256:1a171eaac36a08964d023eeff740b18a415f79aeb212169080c170ec42dd5184", - "sha256:1d6301f5288e9bdca65fab3de6b7de17362c5016d6bf8ee4ba4cbe833b2eda0f", - "sha256:1e031899cb2bc92c0cf4d45389eff5b078d1936860a1be3aa8c94fa25fb46ed8", - "sha256:1f8c0ae0a0de4e19fddaaff036f508db175f6f03db318c80bbc239a1def62d02", - "sha256:2245441445099411b528379dee83e56eadf449db924648e5feb9b747473f42e3", - "sha256:22709d701e7037e64dae2a04855021b62efd64a66c3ceed99dfd684bfef09e38", - "sha256:24c89346734a4e4d60ecf9b27cac4c1fee3431a413f7aa00be7c4d7bbacc2c4d", - "sha256:25716aa70a0d153cd844fe861d4f3315a6ccafce22b39d8aadbf7fcadff2b633", - "sha256:2dacb3dae6b8cc579637a7b72f008bff50a94cde5e36e432352f4ca57b9e54c4", - "sha256:34316bf693b1d2d29c087ee7e4bb10cdfa39da5f9c50fa15b07489b4ab93a1b5", - "sha256:36b2d700a27e168fa96272b42d28c7ac3ff72030c67b32f37c05616ebd22a202", - "sha256:37978254d9d00cda01acc1997513f786b6b971e57b778fbe7c20e30ae81a97f3", - "sha256:38289f1690a7e27aacd049e420769b996826f3728756859420eeee21cc857118", - "sha256:385ccf6d011b97768a640e9d4de25412204fbe8d6b9ae39ff115d4ff03f6fe5d", - "sha256:3c7ea86b9ca83e30fa4d4cd0eaf01db3ebcc7b2726a25990966627e39577d729", - "sha256:49810f907dfe6de8da5da7d2b238d343e6add62f01a15d03e2195afc180059ed", - "sha256:519c0b3a6fbb68afaa0febf0d28f6c4b0a1074aefc484802ecb9709faf181607", - "sha256:51f02ca184518702975b56affde6c573ebad4e411599005ce4468b1014b4786c", - "sha256:552a39987ac6655dad4bf6f17dd2b55c7b0c6e949d933b8846d2e312ee80005a", - "sha256:596f5ae2eeddb79b595583c2e0285312b2783b0ec759930c272dbf02f851ff75", - "sha256:6014038f52b4b2ac1fa41a58d439a8a00f015b5c0735a0cd4b09afe344c94899", - "sha256:61ebbcd208d78658b09e19c78920f1ad38936a0aa0f9c459c46c197d11c580a0", - "sha256:6213713ac743b190ecbf3f316d6e41d099e774812d470422b3a0f137ea635832", - "sha256:637e27ea1ebe4a561db75a880ac659ff439dec7f55588212e71700bb1ddd5af9", - "sha256:6aa427c55a0abec450bca10b64446331b5ca8f79b648531138f357569705bc4a", - "sha256:6ca45359d7a21644793de0e29de497ef7f1ae7268e346c4faf87b421fea364e6", - "sha256:6db1b52c6f2c04fafc8da17ea506608e6be7086715dab498570c3e55e4f8fbd1", - "sha256:752e7ddfb743344d447367baa85bccd3629c2c3940f70506eb5f01abce98ee68", - "sha256:760c54ad1b8a9b81951030a7e8e7c3ec0964c1cb9fee585a03ff53d9e531bb8e", - "sha256:768632fd8172ae03852e3245f11c8a425d95f65ff444ce46b3e673ae5b057b74", - "sha256:7a0b9f6a1a15d494b35f25ed07abda03209fa76c33564c09c9e81d34f4b919d7", - "sha256:7e070d3aef50ac3856f2ef5ec7214798453da878bb5e5a16c16a61edf1817cc3", - "sha256:7e12949e5071c20ec49ef00c75121ed2b076972132fc1913ddf5f76cae8d10b4", - "sha256:7e26eac9e52e8ce86f915fd33380f1b6896a2b51994e40bb094841e5003429b4", - "sha256:85ffd6b1cb0dfb037ede50ff3bef80d9bf7fa60515d192403af6745524524f3b", - "sha256:8618d9213a863c468a865e9d2ec50221015f7abf52221bc927152ef26c484b4c", - "sha256:8acef4d8a4353f6678fd1035422a937c2170de58a2b29f7da045d5249e934101", - "sha256:8d2f355a951f60f0843f2368b39970e4667517e54e86b1508e76f92b44811a8a", - "sha256:90b6840b6448203228a9d8464a7a0d99aa8fa9f027ef95fe230579abaf8a6ee1", - "sha256:9187500d83fd0cef4669385cbb0961e227a41c0c9bc39219044e35810793edf7", - "sha256:93c20777a72cae8620203ac11c4010365706062aa13aaedd1a21bb07adbb9d5d", - "sha256:93cce7d422a0093cfb3606beae38a8e47a25232eea0f292c878af580a9dc7605", - "sha256:94c623c331a48a5ccc7d25271399aff29729fa202c737ae3b4b28b89d2b0976d", - "sha256:97f32dc03a8054a4c4a5ab5d761ed4861e828b2c200febd4e46857069a483916", - "sha256:9a2bf98ac92f58777c0fafc772bf0493e67fcf677302e0c0a630ee517a43b949", - "sha256:a602bdc8607c99eb5b391592d58c92618dcd1537fdd87df1813f03fed49957a6", - "sha256:a9d24b03daf7415f78abc2d25a208f234e2c585e5e6f92f0204d2ab7b9ab48e3", - "sha256:abfcb0ef78df0ee9df4ea81f03beea41849340ce33a4c4bd4dbb99e23ec781b6", - "sha256:b013f759cd69cb0a62de954d6d2096d648bc210034b79b1881406b07ed0a83f9", - "sha256:b02e3e72665cd02afafb933453b0c9f6c59ff6e3708bd28d0d8580450e7e88af", - "sha256:b52cc45e71657bc4743a5606d9023459de929b2a198d545868e11898ba1c3f59", - "sha256:ba37f11e1d020969e8a779c06b4af866ffb6b854d7229db63c5fdddfceaa917f", - "sha256:bb804c7d0bfbd7e3f33924ff49757de9106c44e27979e2492819c16972ec0da2", - "sha256:bf594cc7cc9d528338d66674c10a5b25e3cde7dd75c3e96784df8f371d77a298", - "sha256:c38baee6bdb7fe1b110b6b3aaa555e6e872d322206b7245aa39572d3fc991ee4", - "sha256:c73d2166e4b210b73d1429c4f1ca97cea9cc090e5302df2a7a0a96ce55373f1c", - "sha256:c9099bf89078675c372339011ccfc9ec310310bf6c292b413c013eb90ffdcafc", - "sha256:cf0db26a1f76aa6b3aa314a74b8facd586b7a5457d05b64f8082a62c9c49582a", - "sha256:d19a34f8a3429bd536996ad53597b805c10352a8561d8382e05830df389d2b43", - "sha256:da80047524eac2acf7c04c18ac7a7da05a9136241f642dd2ed94269ef0d0a45a", - "sha256:de2923886b5d3214be951bc2ce3f6b8ac0d6dfd4a0d0e2a4d2e5523d8046fdfb", - "sha256:defa0652696ff0ba48c8aff5a1fac1eef1ca6ac9c660b047fc8e7623c4eb5093", - "sha256:e54a1eb9fd38f2779e973d2f8958fd575b532fe26013405d1afb9ee2374e7ab8", - "sha256:e5c31d70a478b0ca22a9d2d76d520ae996214019d39ed7dd93af872c7f301e52", - "sha256:ebaeb93f90c0903233b11ce913a7cb8f6ee069158406e056f884854c737d2442", - "sha256:ecfe51abf7f045e0b9cdde71ca9e153d11238679ef7b5da6c82093874adf3338", - "sha256:f99112aed4fb7cee00c7f77e8b964a9b10f69488cdff626ffd797d02e2e4484f", - "sha256:fd914db437ec25bfa410f8aa0aa2f3ba87cdfc04d9919d608d02330947afaeab" + "sha256:0008650041531d0eadecc96a73d37c2dc4821cf51b0766e374cb4f1ddc4e1c14", + "sha256:03299b0bcaa7824eb7c0ebd7ef1e3663302d1b533653bfe9dc7e595d453e2ae9", + "sha256:06b1df01cf2aef3a9790858af524ae2588762c8a90e784ba00d003f045306204", + "sha256:09b4b6ccc61d4119342b26246ddd5a04accdeebe36bdfe865ad87a0784efd77f", + "sha256:0be0c34a39e5d04a62fd5342f0886d0e57592a4f4993b3f9d257c1f688b19737", + "sha256:0d96eec8550fd2fd26f8e675f6d8b61b159482ad8ffa26991b894ed5ee19038b", + "sha256:0eb0e2845e81bdea92b8281a3969632686502565abf4a0b9e4ab1471c863d8f3", + "sha256:13bbf0c9453c6d16e5867bda7f6c0c7cff1decf96c5498318bb87f8136d2abd4", + "sha256:17e51ad1e6131c496b58d317bc9abec71f44eb1957d32629d06013a21bc99cac", + "sha256:1977bb64264815d3ef016625adc9df90e6d0e27e76260280c63eca993e3f455f", + "sha256:1e30762ddddb22f7f14c4f59c34d3addabc789216d813b0f3e2788d7bcf0cf29", + "sha256:1e73652057473ad3e6934944af090852a02590c349357b79182c1b681da2c772", + "sha256:20e6a27959f162f979165e496add0d7d56d7038237092d1aba20b46de79158f1", + "sha256:286ff9ec2709d56ae7517040be0d6c502642517ce9937ab6d89b1e7d0904f863", + "sha256:297c42ede2c81f0cb6f34ea60b5cf6dc965d97fa6936c11fc3286019231f0d66", + "sha256:320c2f4106962ecea0f33d8d31b985d3c185757c49c1fb735501515f963715ed", + "sha256:35ed2f3c918a00b109157428abfc4e8d1ffabc37c8f9abc5939ebd1e95dabc47", + "sha256:3d146e5591cb67c5e836229a04723a30af795ef9b70a0bbd913572e14b7b940f", + "sha256:42bb37e2b2d25d958c25903f6125a41aaaa1ed49ca62c103331f24b8a459142f", + "sha256:42d6007722d46bd2c95cce700181570b56edc0dcbadbfe7855ec26c3f2d7e008", + "sha256:43eba5c46208deedec833663201752e865feddc840433285fbadee07b84b464d", + "sha256:452519bc4c973e961b1620c815ea6dd8944a12d68e71002be5a7aff0a8361571", + "sha256:4b9c16a807b17b17c4fa3a1d8c242467237be67ba92ad24ff51425329e7ae3d0", + "sha256:5510932596a0f33399b7fff1bd61c59c977f2b8ee987b36539ba97eb3513584a", + "sha256:55820bc631684172b9b56a991d217ec7c2e580d956591dc2144985113980f5a3", + "sha256:57484d39447f94967e83e56db1b1108c68918c44ab519b8ecfc34b790ca52bf7", + "sha256:58ba41e462653eaf68fc4a84ec4d350b26a98d030be1ab24aba1adcc78ffe447", + "sha256:5bc5f921be39ccb65fdda741e04b2555917a4bced24b4df14eddc7569be3b493", + "sha256:5dcc4168536c8f68654f014a3db49b6b4a26b226f735708be2054314ed4964f4", + "sha256:5f92a7cdc6a0ae2abd184e8dfd6ef2279989d24c85d2c85d0423206284103ede", + "sha256:67250b36edfa714ba62dc62d3f238e86db1065fccb538278804790f578253640", + "sha256:6df070a986fc064d865c381aecf0aaff914178fdf6874da2f2387e82d93cc5bd", + "sha256:729aa8ca624c42f309397c5fc9e21db90bf7e2fdd872461aabdbada33de9063c", + "sha256:72bc3a5effa5974be6d965ed8301ac1e869bc18425c8a8fac179fbe7876e3aee", + "sha256:74d86e8924835f863c34e646392ef39039405f6ce52956d8af16497af4064a30", + "sha256:79e5af1ff258bc0fe0bdd6f69bc4ae33935a898e3cbefbbccf22e88a27fa053b", + "sha256:7b103dffb9f6a47ed7ffdf352b78cfe058b1777617371226c1894e1be443afec", + "sha256:83f03f0bd88c12e63ca2d024adeee75234d69808b341e88343b0232329e1f1a1", + "sha256:86d7a68fa53688e1f612c3246044157117403c7ce19ebab7d02daf45bd63913e", + "sha256:878c626cbca3b649e14e972c14539a01191d79e58934e3f3ef4a9e17f90277f8", + "sha256:878f5d649ba1db9f52cc4ef491f7dba2d061cdc48dd444c54260eebc0b1729b9", + "sha256:87bc01226cd288f0bd9a4f9f07bf6827134dc97a96c22e2d28628e824c8de231", + "sha256:8babb2b5751105dc0aef2a2e539f4ba391e738c62038d8cb331c710f6b0f3da7", + "sha256:91e0f7e7be77250b808a5f46d90bf0032527d3c032b2131b63dee54753a4d729", + "sha256:9557545c10d52c845f270b665b52a6a972884725aa5cf12777374e18f2ea8960", + "sha256:9ccb0a4ab926016867260c24c192d9df9586e834f5db83dfa2c8fffb3a6e5056", + "sha256:9d828c5987d543d052b53c579a01a52d96b86f937b1777bbfe11ef2728929357", + "sha256:9efa41d1527b366c88f265a227b20bcec65bda879962e3fc8a2aee11e81266d7", + "sha256:aaf5317c961d93c1a200b9370fb1c6b6836cc7144fef3e5a951326912bf1f5a3", + "sha256:ab69b4fe09e296261377d209068d52402fb85ef89dc78a9ac4a29a895f4e24a7", + "sha256:ad397bc7d51d69cb07ef89e44243f971a04ce1dca9bf24c992c362406c0c6573", + "sha256:ae17fc8103f3b63345709d3e9654a274eee1c6072592aec32b026efd401931d0", + "sha256:af4d8cc28e4c7a2f6a9fed544228c567340f8258b6d7ea815b62a72817bbd178", + "sha256:b22ff939a8856a44f4822da38ef4868bd3a9ade22bb6d9062b36957c850e404f", + "sha256:b549d851f91a4efb3e65498bd4249b1447ab6035a9972f7fc215eb1f59328834", + "sha256:be319f4eb400ee567b722e9ea63d5b2bb31464e3cf1b016502e3ee2de4f86f5c", + "sha256:c0446b2871335d5a5e9fcf1462f954586b09a845832263db95059dcd01442015", + "sha256:c68d2c04f7701a418ec2e5631b7f3552efc32f6bcc1739369c6eeb1af55f62e0", + "sha256:c87ac58b9baaf50b6c1b81a18d20eda7e2883aa9a4fb4f1ca70f2e443bfcdc57", + "sha256:caa2734ada16a44ae57b229d45091f06e30a9a52ace76d7574546ab23008c635", + "sha256:cb34c2d66355fb70ae47b5595aafd7218e59bb9c00ad8cc3abd1406ca5874f07", + "sha256:cb3652bbe6720786b9137862205986f3ae54a09dec8499a995ed58292bdf77c2", + "sha256:cf668f26604e9f7aee9f8eaae4ca07a948168af90b96be97a4b7fa902a6d2ac1", + "sha256:d326ff80ed531bf2507cba93011c30fff2dd51454c85f55df0f59f2030b1687b", + "sha256:d6c2441538e4fadd4291c8420853431a229fcbefc1bf521810fbc2629d8ae8c2", + "sha256:d6ecfd1970b3380a569d7b3ecc5dd70dba295897418ed9e31ec3c16a5ab099a5", + "sha256:e5602a9b5074dcacc113bba4d2f011d2748f50e3201c8139ac5b68cf2a76bd8b", + "sha256:ef806f684f17dbd6263d72a54ad4073af42b42effa3eb42b877e750c24c76f86", + "sha256:f3356afbb301ec34a500b8ba8b47cba0b44ed4641c306e1dd981a08b416170b5", + "sha256:f6f7ee2289176cb1d2c59a24f50900f8b9580259fa9f1a739432242e7d254f93", + "sha256:f7e8f1ee28e0a05831c92dc1c0c1c94af5289963b7cf09eca5b5e3ce4f8c91b0", + "sha256:f8169ec628880bdbca67082a9196e2106060a4a5cbd486ac51881a4df805a36f", + "sha256:fbc88d3ba402b5d041d204ec2449c4078898f89c4a6e6f0ed1c1a510ef1e221d", + "sha256:fbd3fe37353c62fd0eb19fb76f78aa693716262bcd5f9c14bb9e5aca4b3f0dc4" ], - "version": "==2022.1.18" + "markers": "python_version >= '3.6'", + "version": "==2022.3.2" }, "requests": { "hashes": [ @@ -1176,14 +1177,6 @@ "index": "pypi", "version": "==0.14.4" }, - "setuptools": { - "hashes": [ - "sha256:2347b2b432c891a863acadca2da9ac101eae6169b1d3dfee2ec605ecd50dbfe5", - "sha256:e4f30b9f84e5ab3decf945113119649fec09c1fc3507c6ebffec75646c56e62b" - ], - "markers": "python_version >= '3.7'", - "version": "==60.9.3" - }, "six": { "hashes": [ "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", @@ -1273,7 +1266,7 @@ }, "spiffworkflow": { "git": "https://github.com/sartography/SpiffWorkflow", - "ref": "3904fdbc90f7fabddfe1e6a4f802963a2364ae7e" + "ref": "bd09454132aba6a2d0c774672f9bc5c7bfd7fd36" }, "sqlalchemy": { "hashes": [ @@ -1471,18 +1464,18 @@ }, "xlsxwriter": { "hashes": [ - "sha256:1aa65166697c42284e82f5bf9a33c2e913341eeef2b262019c3f5b5334768765", - "sha256:53005f03e8eb58f061ebf41d5767c7495ee0772c2396fe26b7e0ca22fa9c2570" + "sha256:df0aefe5137478d206847eccf9f114715e42aaea077e6a48d0e8a2152e983010", + "sha256:e89f4a1d2fa2c9ea15cde77de95cd3fd8b0345d0efb3964623f395c8c4988b7f" ], "index": "pypi", - "version": "==3.0.2" + "version": "==3.0.3" }, "zipp": { "hashes": [ "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d", "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375" ], - "markers": "python_version >= '3.7'", + "markers": "python_version < '3.10'", "version": "==3.7.0" } }, diff --git a/crc/api/tools.py b/crc/api/tools.py index e33757fc..0910c7f5 100644 --- a/crc/api/tools.py +++ b/crc/api/tools.py @@ -102,7 +102,7 @@ def evaluate_python_expression(body): try: script_engine = CustomBpmnScriptEngine() - result = script_engine._evaluate(body['expression'], **body['data']) + result = script_engine._evaluate(body['expression'], body['data']) return {"result": result, "expression": body['expression'], "key": body['key']} except Exception as e: return {"result": False, "expression": body['expression'], "key": body['key'], "error": str(e)} diff --git a/crc/services/workflow_processor.py b/crc/services/workflow_processor.py index ba283ca8..1a1e7e01 100644 --- a/crc/services/workflow_processor.py +++ b/crc/services/workflow_processor.py @@ -37,24 +37,34 @@ class CustomBpmnScriptEngine(PythonScriptEngine): scripts directory available for execution. """ def evaluate(self, task, expression): + return self._evaluate(expression, task.data, task) + + @staticmethod + def __get_augment_methods(task): + methods = [] + if task: + study_id = task.workflow.data[WorkflowProcessor.STUDY_ID_KEY] + if WorkflowProcessor.WORKFLOW_ID_KEY in task.workflow.data: + workflow_id = task.workflow.data[WorkflowProcessor.WORKFLOW_ID_KEY] + else: + workflow_id = None + + if task.workflow.data[WorkflowProcessor.VALIDATION_PROCESS_KEY]: + methods = Script.generate_augmented_validate_list(task, study_id, workflow_id) + else: + methods = Script.generate_augmented_list(task, study_id, workflow_id) + return methods + + def _evaluate(self, expression, context, task=None, external_methods=None): """ Evaluate the given expression, within the context of the given task and return the result. """ - study_id = task.workflow.data[WorkflowProcessor.STUDY_ID_KEY] - if WorkflowProcessor.WORKFLOW_ID_KEY in task.workflow.data: - workflow_id = task.workflow.data[WorkflowProcessor.WORKFLOW_ID_KEY] - else: - workflow_id = None - + methods = self.__get_augment_methods(task) + if(external_methods): + methods.update(external_methods) try: - if task.workflow.data[WorkflowProcessor.VALIDATION_PROCESS_KEY]: - augmentMethods = Script.generate_augmented_validate_list(task, study_id, workflow_id) - else: - augmentMethods = Script.generate_augmented_list(task, study_id, workflow_id) - - return self._evaluate(expression, external_methods=augmentMethods, **task.data) - + return super()._evaluate(expression, context, task, methods) except Exception as e: raise WorkflowTaskExecException(task, "Error evaluating expression " @@ -67,11 +77,7 @@ class CustomBpmnScriptEngine(PythonScriptEngine): else: workflow_id = None try: - if task.workflow.data[WorkflowProcessor.VALIDATION_PROCESS_KEY]: - augment_methods = Script.generate_augmented_validate_list(task, study_id, workflow_id) - else: - # Costs 0.25 seconds the first time it is executed. - augment_methods = Script.generate_augmented_list(task, study_id, workflow_id) + augment_methods = self.__get_augment_methods(task) super().execute(task, script, data, external_methods=augment_methods) except WorkflowException as e: raise e @@ -134,12 +140,7 @@ class WorkflowProcessor(object): self.bpmn_workflow = self.__get_bpmn_workflow(workflow_model, spec, validate_only) self.bpmn_workflow.script_engine = self._script_engine - if UserService.has_user(): - current_user = UserService.current_user(allow_admin_impersonate=True) - current_user_data = UserModelSchema().dump(current_user) - tasks = self.bpmn_workflow.get_tasks(SpiffTask.READY) - for task in tasks: - task.data['current_user'] = current_user_data + self.add_user_info_to_workflow(self.bpmn_workflow) if self.WORKFLOW_ID_KEY not in self.bpmn_workflow.data: if not workflow_model.id: @@ -160,6 +161,15 @@ class WorkflowProcessor(object): " '%s' due to a mis-placed or missing task '%s'" % (self.workflow_spec_id, str(ke))) + @staticmethod + def add_user_info_to_workflow(bpmn_workflow): + if UserService.has_user(): + current_user = UserService.current_user(allow_admin_impersonate=True) + current_user_data = UserModelSchema().dump(current_user) + tasks = bpmn_workflow.get_tasks(SpiffTask.READY) + for task in tasks: + task.data['current_user'] = current_user_data + @staticmethod def reset(workflow_model, clear_data=False, delete_files=False): # Try to execute a cancel notify @@ -220,6 +230,7 @@ class WorkflowProcessor(object): bpmn_workflow = BpmnWorkflow(spec, script_engine=WorkflowProcessor._script_engine) bpmn_workflow.data[WorkflowProcessor.STUDY_ID_KEY] = study.id bpmn_workflow.data[WorkflowProcessor.VALIDATION_PROCESS_KEY] = False + WorkflowProcessor.add_user_info_to_workflow(bpmn_workflow) bpmn_workflow.do_engine_steps() except WorkflowException as we: raise ApiError.from_task_spec("error_running_master_spec", str(we), we.sender) diff --git a/crc/services/workflow_service.py b/crc/services/workflow_service.py index 122a648c..0633f4fd 100755 --- a/crc/services/workflow_service.py +++ b/crc/services/workflow_service.py @@ -277,7 +277,7 @@ class WorkflowService(object): if field.label: try: # Assure that we can evaluate the field.label, but no need to save the resulting value. - task.workflow.script_engine._evaluate(field.label, data) + task.workflow.script_engine._evaluate(field.label, data, task) except Exception as e: raise ApiError.from_task("bad label", f'The label "{field.label}" in field {field.id} ' f'could not be understood or evaluated. ', @@ -419,7 +419,7 @@ class WorkflowService(object): # This is generally handled by the front end, but it is possible that the file was uploaded BEFORE # the doc_code was correctly set, so this is a stop gap measure to assure we still hit it correctly. file_id = data[field.id]["id"] - doc_code = task.workflow.script_engine._evaluate(field.get_property(Task.FIELD_PROP_DOC_CODE), **data) + doc_code = task.workflow.script_engine._evaluate(field.get_property(Task.FIELD_PROP_DOC_CODE), data, task) file = db.session.query(FileModel).filter(FileModel.id == file_id).first() if (file): file.irb_doc_code = doc_code @@ -463,7 +463,7 @@ class WorkflowService(object): new_data = copy.deepcopy(task.data) try: - return task.workflow.script_engine._evaluate(expression, **data) + return task.workflow.script_engine._evaluate(expression, data, task) except Exception as e: message = f"The field {field.id} contains an invalid expression: '{expression}'. {e}" raise ApiError.from_task(f'invalid_{property_name}', message, task=task) @@ -484,7 +484,7 @@ class WorkflowService(object): default = None if field.default_value is not None: try: - default = task.workflow.script_engine._evaluate(field.default_value, data) + default = task.workflow.script_engine._evaluate(field.default_value, data, task) except Exception as e: raise WorkflowTaskExecException(task, "invalid_default", e) # If no default exists, return None diff --git a/tests/workflow/test_workflow_processor.py b/tests/workflow/test_workflow_processor.py index 44881bb4..28133eb7 100644 --- a/tests/workflow/test_workflow_processor.py +++ b/tests/workflow/test_workflow_processor.py @@ -1,24 +1,21 @@ -import json -import logging import os -from unittest.mock import patch - -from SpiffWorkflow.bpmn.specs.events import EndEvent from tests.base_test import BaseTest +from SpiffWorkflow.bpmn.specs.events import EndEvent from SpiffWorkflow.camunda.specs.UserTask import FormField +from flask import g from crc import session, db, app from crc.api.common import ApiError from crc.models.file import FileModel, FileDataModel -from crc.models.protocol_builder import ProtocolBuilderCreatorStudySchema from crc.models.study import StudyModel from crc.models.workflow import WorkflowStatus +from crc.models.user import UserModel +from crc.services.spec_file_service import SpecFileService from crc.services.study_service import StudyService from crc.services.workflow_processor import WorkflowProcessor from crc.services.workflow_service import WorkflowService -from crc.services.spec_file_service import SpecFileService class TestWorkflowProcessor(BaseTest): @@ -347,3 +344,14 @@ class TestWorkflowProcessor(BaseTest): supervisor_task = processor.next_user_tasks()[0] self.assertEqual("supervisor", supervisor_task.task_spec.lane) + def test_run_master_spec_knows_about_current_user(self): + """Master spec should have access to the current user.""" + spec = self.load_test_spec('empty_workflow', "Master", master_spec=True) + study = self.create_study() + + # Make it seem like we are logged in + g.user = UserModel.query.filter_by(uid=study.user_uid).first() + g.token = 'my_fake_token' + + results = WorkflowProcessor.run_master_spec(spec, study) + self.assertIn('current_user', results.keys()) \ No newline at end of file