From a9201794b093c5f520cad168da2aed28988891e2 Mon Sep 17 00:00:00 2001 From: Brad Macdonald Date: Wed, 22 Mar 2023 15:24:07 -0600 Subject: [PATCH 01/31] adds pipenv files --- .gitignore | 3 +- Pipfile | 16 + Pipfile.lock | 992 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 1009 insertions(+), 2 deletions(-) create mode 100644 Pipfile create mode 100644 Pipfile.lock diff --git a/.gitignore b/.gitignore index 6424c305..14aa1c4b 100644 --- a/.gitignore +++ b/.gitignore @@ -91,8 +91,7 @@ ipython_config.py # However, in case of collaboration, if having platform-specific dependencies or dependencies # having no cross-platform support, pipenv may install dependencies that don't work, or not # install all needed dependencies. -Pipfile.lock -Pipfile + # PEP 582; used by e.g. github.com/David-OConnor/pyflow __pypackages__/ diff --git a/Pipfile b/Pipfile new file mode 100644 index 00000000..40b9ec47 --- /dev/null +++ b/Pipfile @@ -0,0 +1,16 @@ +[[source]] +url = "https://pypi.org/simple" +verify_ssl = true +name = "pypi" + +[packages] +agoradatatools = {editable = true, path = ".", extras = ["all"]} + +[dev-packages] +agoradatatools = {editable = true, path = ".", extras = ["testing", "dev"]} + +[requires] +python_version = "3.9.13" + +[pipenv] +allow_prereleases = true diff --git a/Pipfile.lock b/Pipfile.lock new file mode 100644 index 00000000..39037292 --- /dev/null +++ b/Pipfile.lock @@ -0,0 +1,992 @@ +{ + "_meta": { + "hash": { + "sha256": "9749f3af3fad73e0b8faf295fcf5419b705766fc8956248e5b86a730dff7d39b" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.9.13" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "agora-data-tools": { + "editable": true, + "extras": [ + "all" + ], + "path": "." + }, + "agoradatatools": { + "editable": true, + "extras": [ + "all" + ], + "path": "." + }, + "attrs": { + "hashes": [ + "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836", + "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99" + ], + "markers": "python_version >= '3.6'", + "version": "==22.2.0" + }, + "certifi": { + "hashes": [ + "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3", + "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18" + ], + "markers": "python_version >= '3.6'", + "version": "==2022.12.7" + }, + "charset-normalizer": { + "hashes": [ + "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6", + "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1", + "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e", + "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373", + "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62", + "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230", + "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be", + "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c", + "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0", + "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448", + "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f", + "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649", + "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d", + "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0", + "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706", + "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a", + "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59", + "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23", + "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5", + "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb", + "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e", + "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e", + "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c", + "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28", + "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d", + "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41", + "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974", + "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce", + "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f", + "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1", + "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d", + "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8", + "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017", + "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31", + "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7", + "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8", + "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e", + "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14", + "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd", + "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d", + "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795", + "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b", + "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b", + "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b", + "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203", + "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f", + "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19", + "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1", + "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a", + "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac", + "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9", + "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0", + "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137", + "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f", + "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6", + "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5", + "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909", + "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f", + "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0", + "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324", + "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755", + "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb", + "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854", + "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c", + "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60", + "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84", + "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0", + "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b", + "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1", + "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531", + "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1", + "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11", + "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326", + "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df", + "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab" + ], + "markers": "python_full_version >= '3.7.0'", + "version": "==3.1.0" + }, + "click": { + "hashes": [ + "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e", + "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48" + ], + "markers": "python_version >= '3.7'", + "version": "==8.1.3" + }, + "deprecated": { + "hashes": [ + "sha256:43ac5335da90c31c24ba028af536a91d41d53f9e6901ddb021bcc572ce44e38d", + "sha256:64756e3e14c8c5eea9795d93c524551432a0be75629f8f29e67ab8caf076c76d" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==1.2.13" + }, + "exceptiongroup": { + "hashes": [ + "sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e", + "sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785" + ], + "markers": "python_version < '3.11'", + "version": "==1.1.1" + }, + "idna": { + "hashes": [ + "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4", + "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" + ], + "markers": "python_version >= '3.5'", + "version": "==3.4" + }, + "importlib-metadata": { + "hashes": [ + "sha256:43ce9281e097583d758c2c708c4376371261a02c34682491a8e98352365aad20", + "sha256:ff80f3b5394912eb1b108fcfd444dc78b7f1f3e16b16188054bd01cb9cb86f09" + ], + "markers": "python_version >= '3.7'", + "version": "==6.1.0" + }, + "iniconfig": { + "hashes": [ + "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", + "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374" + ], + "markers": "python_version >= '3.7'", + "version": "==2.0.0" + }, + "keyring": { + "hashes": [ + "sha256:17e49fb0d6883c2b4445359434dba95aad84aabb29bbff044ad0ed7100232eca", + "sha256:89cbd74d4683ed164c8082fb38619341097741323b3786905c6dac04d6915a55" + ], + "markers": "python_version >= '3.6'", + "version": "==23.4.1" + }, + "numpy": { + "hashes": [ + "sha256:003a9f530e880cb2cd177cba1af7220b9aa42def9c4afc2a2fc3ee6be7eb2b22", + "sha256:150947adbdfeceec4e5926d956a06865c1c690f2fd902efede4ca6fe2e657c3f", + "sha256:2620e8592136e073bd12ee4536149380695fbe9ebeae845b81237f986479ffc9", + "sha256:2eabd64ddb96a1239791da78fa5f4e1693ae2dadc82a76bc76a14cbb2b966e96", + "sha256:4173bde9fa2a005c2c6e2ea8ac1618e2ed2c1c6ec8a7657237854d42094123a0", + "sha256:4199e7cfc307a778f72d293372736223e39ec9ac096ff0a2e64853b866a8e18a", + "sha256:4cecaed30dc14123020f77b03601559fff3e6cd0c048f8b5289f4eeabb0eb281", + "sha256:557d42778a6869c2162deb40ad82612645e21d79e11c1dc62c6e82a2220ffb04", + "sha256:63e45511ee4d9d976637d11e6c9864eae50e12dc9598f531c035265991910468", + "sha256:6524630f71631be2dabe0c541e7675db82651eb998496bbe16bc4f77f0772253", + "sha256:76807b4063f0002c8532cfeac47a3068a69561e9c8715efdad3c642eb27c0756", + "sha256:7de8fdde0003f4294655aa5d5f0a89c26b9f22c0a58790c38fae1ed392d44a5a", + "sha256:889b2cc88b837d86eda1b17008ebeb679d82875022200c6e8e4ce6cf549b7acb", + "sha256:92011118955724465fb6853def593cf397b4a1367495e0b59a7e69d40c4eb71d", + "sha256:97cf27e51fa078078c649a51d7ade3c92d9e709ba2bfb97493007103c741f1d0", + "sha256:9a23f8440561a633204a67fb44617ce2a299beecf3295f0d13c495518908e910", + "sha256:a51725a815a6188c662fb66fb32077709a9ca38053f0274640293a14fdd22978", + "sha256:a77d3e1163a7770164404607b7ba3967fb49b24782a6ef85d9b5f54126cc39e5", + "sha256:adbdce121896fd3a17a77ab0b0b5eedf05a9834a18699db6829a64e1dfccca7f", + "sha256:c29e6bd0ec49a44d7690ecb623a8eac5ab8a923bce0bea6293953992edf3a76a", + "sha256:c72a6b2f4af1adfe193f7beb91ddf708ff867a3f977ef2ec53c0ffb8283ab9f5", + "sha256:d0a2db9d20117bf523dde15858398e7c0858aadca7c0f088ac0d6edd360e9ad2", + "sha256:e3ab5d32784e843fc0dd3ab6dcafc67ef806e6b6828dc6af2f689be0eb4d781d", + "sha256:e428c4fbfa085f947b536706a2fc349245d7baa8334f0c5723c56a10595f9b95", + "sha256:e8d2859428712785e8a8b7d2b3ef0a1d1565892367b32f915c4a4df44d0e64f5", + "sha256:eef70b4fc1e872ebddc38cddacc87c19a3709c0e3e5d20bf3954c147b1dd941d", + "sha256:f64bb98ac59b3ea3bf74b02f13836eb2e24e48e0ab0145bbda646295769bd780", + "sha256:f9006288bcf4895917d02583cf3411f98631275bc67cce355a7f39f8c14338fa" + ], + "markers": "python_version >= '3.8'", + "version": "==1.24.2" + }, + "packaging": { + "hashes": [ + "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2", + "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97" + ], + "markers": "python_version >= '3.7'", + "version": "==23.0" + }, + "pandas": { + "hashes": [ + "sha256:09ff20955ca020a053522f5942f6ff3759bf656b95ed1e84ce8b99589b2bf31f", + "sha256:19989dbbb63658a0614adc3b190298635e5b3be6ca47ac1884a0e6d9fd3d6749", + "sha256:1f762147b2435bfa891b1c4167758dd12c0d4b669125032eed6e2efaa13f90da", + "sha256:3375801374960f6fe44a5d9149438d88fa1f32fd1fcdcd443ad7f91f7f1b2eb2", + "sha256:46984e8c45d2c71687f9876440b27c1d21432d7b2bc18d552142c8781b9af6be", + "sha256:52494974c3432a817c34d1c8920dad92b0bd653bbd12b50b2927f6fefb0785e3", + "sha256:54f3611e1626facb951fcfeeea435c6349b7acfb796b8fdef47618dcf1cf2087", + "sha256:5c869eb3ad3eeb78bf83b2ff96abc7173723510daf99febfcae520c9c5b9ff69", + "sha256:5dcc104f419842692859f5d110018c59ef46b882d74bb117c352e698ce06d96e", + "sha256:6322c756c2ed5afa4997667af26dd7bac94abffe16e3ed7c3dfd7f219ba58e2f", + "sha256:86506b49bdb1b851c8c3a50b3b8d9165927bbe2d1836f94756bde28a918ca8d3", + "sha256:8932531d2160a1ecbadb359e656a9fa1801bb818c500786b1fbacfae82130008", + "sha256:8fa487f3ec94555f6b8971925fca1e8484cfa41acedcde0a877900ee76c6e5ec", + "sha256:969155aca6379f1450604f17ce3cbffd3ee78af3b993241068349e3015fc59ce", + "sha256:9c29b1c7539da052ffa5f114a90207c30dfd2dc24c25ca498ba0fd00433b853e", + "sha256:9f85525ce2b253240efe6c1e6a630599c52492a99100432b1bb30bcee99ae2cb", + "sha256:a222eeee07461fdf7f37bd0cfded29558603da6e8acfdbd34b8a4f2e396ffcb7", + "sha256:a573e45dadbab3680879fdb12d385478dafdf34631e0c15b7df8db6dd1fbcbec", + "sha256:c5a54ef5ad40620d90acc3cdc8fa54fcbdd7f3153635dca0094a1812f43879c8", + "sha256:cef0e7d0721f359903399059f19661f27ef0da96c805d04dc86e45e712401e1d", + "sha256:e1a3bebb9a58bb6c002f56b805a5f304e2cee2d364f19cc1a882c3dd8cec83ea", + "sha256:ea3cca91363c22e1ee24628384ce7893c8e94eb535274fcb0abf9a9530437510", + "sha256:f2dee3af85409f874d0e86753949547c814cd4a55192af819e0f5f7206ad6c95", + "sha256:f7c5dd5b723a53488be21e89807464f75313173b97d3a8c6523c81569f8bfb23", + "sha256:f85621c194639c6368b5fe7fd14601f452cdbdf0c4cf34311cb2afbc020018e9" + ], + "markers": "python_version >= '3.8'", + "version": "==2.0.0rc1" + }, + "pluggy": { + "hashes": [ + "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159", + "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3" + ], + "markers": "python_version >= '3.6'", + "version": "==1.0.0" + }, + "pyarrow": { + "hashes": [ + "sha256:1cbcfcbb0e74b4d94f0b7dde447b835a01bc1d16510edb8bb7d6224b9bf5bafc", + "sha256:25aa11c443b934078bfd60ed63e4e2d42461682b5ac10f67275ea21e60e6042c", + "sha256:2d53ba72917fdb71e3584ffc23ee4fcc487218f8ff29dd6df3a34c5c48fe8c06", + "sha256:2d942c690ff24a08b07cb3df818f542a90e4d359381fbff71b8f2aea5bf58841", + "sha256:2f51dc7ca940fdf17893227edb46b6784d37522ce08d21afc56466898cb213b2", + "sha256:362a7c881b32dc6b0eccf83411a97acba2774c10edcec715ccaab5ebf3bb0835", + "sha256:3e99be85973592051e46412accea31828da324531a060bd4585046a74ba45854", + "sha256:40bb42afa1053c35c749befbe72f6429b7b5f45710e85059cdd534553ebcf4f2", + "sha256:410624da0708c37e6a27eba321a72f29d277091c8f8d23f72c92bada4092eb5e", + "sha256:41a1451dd895c0b2964b83d91019e46f15b5564c7ecd5dcb812dadd3f05acc97", + "sha256:5461c57dbdb211a632a48facb9b39bbeb8a7905ec95d768078525283caef5f6d", + "sha256:69309be84dcc36422574d19c7d3a30a7ea43804f12552356d1ab2a82a713c418", + "sha256:7c28b5f248e08dea3b3e0c828b91945f431f4202f1a9fe84d1012a761324e1ba", + "sha256:8f40be0d7381112a398b93c45a7e69f60261e7b0269cc324e9f739ce272f4f70", + "sha256:a37bc81f6c9435da3c9c1e767324ac3064ffbe110c4e460660c43e144be4ed85", + "sha256:aaee8f79d2a120bf3e032d6d64ad20b3af6f56241b0ffc38d201aebfee879d00", + "sha256:ad42bb24fc44c48f74f0d8c72a9af16ba9a01a2ccda5739a517aa860fa7e3d56", + "sha256:ad7c53def8dbbc810282ad308cc46a523ec81e653e60a91c609c2233ae407689", + "sha256:becc2344be80e5dce4e1b80b7c650d2fc2061b9eb339045035a1baa34d5b8f1c", + "sha256:caad867121f182d0d3e1a0d36f197df604655d0b466f1bc9bafa903aa95083e4", + "sha256:ccbf29a0dadfcdd97632b4f7cca20a966bb552853ba254e874c66934931b9841", + "sha256:da93340fbf6f4e2a62815064383605b7ffa3e9eeb320ec839995b1660d69f89b", + "sha256:e217d001e6389b20a6759392a5ec49d670757af80101ee6b5f2c8ff0172e02ca", + "sha256:f010ce497ca1b0f17a8243df3048055c0d18dcadbcc70895d5baf8921f753de5", + "sha256:f12932e5a6feb5c58192209af1d2607d488cb1d404fbc038ac12ada60327fa34" + ], + "markers": "python_version >= '3.7'", + "version": "==11.0.0" + }, + "pytest": { + "hashes": [ + "sha256:130328f552dcfac0b1cec75c12e3f005619dc5f874f0a06e8ff7263f0ee6225e", + "sha256:c99ab0c73aceb050f68929bc93af19ab6db0558791c6a0715723abe9d0ade9d4" + ], + "markers": "python_version >= '3.7'", + "version": "==7.2.2" + }, + "python-dateutil": { + "hashes": [ + "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86", + "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", + "version": "==2.8.2" + }, + "pytz": { + "hashes": [ + "sha256:01a0681c4b9684a28304615eba55d1ab31ae00bf68ec157ec3708a8182dbbcd0", + "sha256:78f4f37d8198e0627c5f1143240bb0206b8691d8d7ac6d78fee88b78733f8c4a" + ], + "version": "==2022.7.1" + }, + "pyyaml": { + "hashes": [ + "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf", + "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293", + "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b", + "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57", + "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b", + "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4", + "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07", + "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba", + "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9", + "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" + ], + "markers": "python_version >= '3.6'", + "version": "==6.0" + }, + "requests": { + "hashes": [ + "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa", + "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf" + ], + "markers": "python_version >= '3.7' and python_version < '4'", + "version": "==2.28.2" + }, + "six": { + "hashes": [ + "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", + "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", + "version": "==1.16.0" + }, + "synapseclient": { + "hashes": [ + "sha256:241f170f0e8c8c3735cd73f81711e592a581c55f7a5c4566be7bee82d72a56bc", + "sha256:29f5e3c87474cb2629e9ce77c97e81e80a08f24ec2c5889f9fba14530b8c4bf7" + ], + "markers": "python_version >= '3.7'", + "version": "==2.7.0" + }, + "tomli": { + "hashes": [ + "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc", + "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f" + ], + "markers": "python_version < '3.11'", + "version": "==2.0.1" + }, + "typer": { + "hashes": [ + "sha256:b5e704f4e48ec263de1c0b3a2387cd405a13767d2f907f44c1a08cbad96f606d", + "sha256:ff797846578a9f2a201b53442aedeb543319466870fbe1c701eab66dd7681165" + ], + "markers": "python_version >= '3.6'", + "version": "==0.7.0" + }, + "urllib3": { + "hashes": [ + "sha256:8a388717b9476f934a21484e8c8e61875ab60644d29b9b39e11e4b9dc1c6b305", + "sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", + "version": "==1.26.15" + }, + "wrapt": { + "hashes": [ + "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0", + "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420", + "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a", + "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c", + "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079", + "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923", + "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f", + "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1", + "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8", + "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86", + "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0", + "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364", + "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e", + "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c", + "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e", + "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c", + "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727", + "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff", + "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e", + "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29", + "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7", + "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72", + "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475", + "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a", + "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317", + "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2", + "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd", + "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640", + "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98", + "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248", + "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e", + "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d", + "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec", + "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1", + "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e", + "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9", + "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92", + "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb", + "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094", + "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46", + "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29", + "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd", + "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705", + "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8", + "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975", + "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb", + "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e", + "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b", + "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418", + "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019", + "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1", + "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba", + "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6", + "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2", + "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3", + "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7", + "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752", + "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416", + "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f", + "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1", + "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc", + "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145", + "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee", + "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a", + "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7", + "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b", + "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653", + "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0", + "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90", + "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29", + "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6", + "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034", + "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09", + "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559", + "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==1.15.0" + }, + "zipp": { + "hashes": [ + "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b", + "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556" + ], + "markers": "python_version >= '3.7'", + "version": "==3.15.0" + } + }, + "develop": { + "agora-data-tools": { + "editable": true, + "extras": [ + "all" + ], + "path": "." + }, + "agoradatatools": { + "editable": true, + "extras": [ + "all" + ], + "path": "." + }, + "attrs": { + "hashes": [ + "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836", + "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99" + ], + "markers": "python_version >= '3.6'", + "version": "==22.2.0" + }, + "certifi": { + "hashes": [ + "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3", + "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18" + ], + "markers": "python_version >= '3.6'", + "version": "==2022.12.7" + }, + "charset-normalizer": { + "hashes": [ + "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6", + "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1", + "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e", + "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373", + "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62", + "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230", + "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be", + "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c", + "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0", + "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448", + "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f", + "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649", + "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d", + "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0", + "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706", + "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a", + "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59", + "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23", + "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5", + "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb", + "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e", + "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e", + "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c", + "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28", + "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d", + "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41", + "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974", + "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce", + "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f", + "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1", + "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d", + "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8", + "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017", + "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31", + "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7", + "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8", + "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e", + "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14", + "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd", + "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d", + "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795", + "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b", + "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b", + "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b", + "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203", + "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f", + "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19", + "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1", + "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a", + "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac", + "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9", + "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0", + "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137", + "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f", + "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6", + "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5", + "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909", + "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f", + "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0", + "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324", + "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755", + "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb", + "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854", + "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c", + "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60", + "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84", + "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0", + "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b", + "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1", + "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531", + "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1", + "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11", + "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326", + "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df", + "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab" + ], + "markers": "python_full_version >= '3.7.0'", + "version": "==3.1.0" + }, + "click": { + "hashes": [ + "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e", + "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48" + ], + "markers": "python_version >= '3.7'", + "version": "==8.1.3" + }, + "deprecated": { + "hashes": [ + "sha256:43ac5335da90c31c24ba028af536a91d41d53f9e6901ddb021bcc572ce44e38d", + "sha256:64756e3e14c8c5eea9795d93c524551432a0be75629f8f29e67ab8caf076c76d" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==1.2.13" + }, + "exceptiongroup": { + "hashes": [ + "sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e", + "sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785" + ], + "markers": "python_version < '3.11'", + "version": "==1.1.1" + }, + "idna": { + "hashes": [ + "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4", + "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" + ], + "markers": "python_version >= '3.5'", + "version": "==3.4" + }, + "importlib-metadata": { + "hashes": [ + "sha256:43ce9281e097583d758c2c708c4376371261a02c34682491a8e98352365aad20", + "sha256:ff80f3b5394912eb1b108fcfd444dc78b7f1f3e16b16188054bd01cb9cb86f09" + ], + "markers": "python_version >= '3.7'", + "version": "==6.1.0" + }, + "iniconfig": { + "hashes": [ + "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", + "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374" + ], + "markers": "python_version >= '3.7'", + "version": "==2.0.0" + }, + "keyring": { + "hashes": [ + "sha256:17e49fb0d6883c2b4445359434dba95aad84aabb29bbff044ad0ed7100232eca", + "sha256:89cbd74d4683ed164c8082fb38619341097741323b3786905c6dac04d6915a55" + ], + "markers": "python_version >= '3.6'", + "version": "==23.4.1" + }, + "numpy": { + "hashes": [ + "sha256:003a9f530e880cb2cd177cba1af7220b9aa42def9c4afc2a2fc3ee6be7eb2b22", + "sha256:150947adbdfeceec4e5926d956a06865c1c690f2fd902efede4ca6fe2e657c3f", + "sha256:2620e8592136e073bd12ee4536149380695fbe9ebeae845b81237f986479ffc9", + "sha256:2eabd64ddb96a1239791da78fa5f4e1693ae2dadc82a76bc76a14cbb2b966e96", + "sha256:4173bde9fa2a005c2c6e2ea8ac1618e2ed2c1c6ec8a7657237854d42094123a0", + "sha256:4199e7cfc307a778f72d293372736223e39ec9ac096ff0a2e64853b866a8e18a", + "sha256:4cecaed30dc14123020f77b03601559fff3e6cd0c048f8b5289f4eeabb0eb281", + "sha256:557d42778a6869c2162deb40ad82612645e21d79e11c1dc62c6e82a2220ffb04", + "sha256:63e45511ee4d9d976637d11e6c9864eae50e12dc9598f531c035265991910468", + "sha256:6524630f71631be2dabe0c541e7675db82651eb998496bbe16bc4f77f0772253", + "sha256:76807b4063f0002c8532cfeac47a3068a69561e9c8715efdad3c642eb27c0756", + "sha256:7de8fdde0003f4294655aa5d5f0a89c26b9f22c0a58790c38fae1ed392d44a5a", + "sha256:889b2cc88b837d86eda1b17008ebeb679d82875022200c6e8e4ce6cf549b7acb", + "sha256:92011118955724465fb6853def593cf397b4a1367495e0b59a7e69d40c4eb71d", + "sha256:97cf27e51fa078078c649a51d7ade3c92d9e709ba2bfb97493007103c741f1d0", + "sha256:9a23f8440561a633204a67fb44617ce2a299beecf3295f0d13c495518908e910", + "sha256:a51725a815a6188c662fb66fb32077709a9ca38053f0274640293a14fdd22978", + "sha256:a77d3e1163a7770164404607b7ba3967fb49b24782a6ef85d9b5f54126cc39e5", + "sha256:adbdce121896fd3a17a77ab0b0b5eedf05a9834a18699db6829a64e1dfccca7f", + "sha256:c29e6bd0ec49a44d7690ecb623a8eac5ab8a923bce0bea6293953992edf3a76a", + "sha256:c72a6b2f4af1adfe193f7beb91ddf708ff867a3f977ef2ec53c0ffb8283ab9f5", + "sha256:d0a2db9d20117bf523dde15858398e7c0858aadca7c0f088ac0d6edd360e9ad2", + "sha256:e3ab5d32784e843fc0dd3ab6dcafc67ef806e6b6828dc6af2f689be0eb4d781d", + "sha256:e428c4fbfa085f947b536706a2fc349245d7baa8334f0c5723c56a10595f9b95", + "sha256:e8d2859428712785e8a8b7d2b3ef0a1d1565892367b32f915c4a4df44d0e64f5", + "sha256:eef70b4fc1e872ebddc38cddacc87c19a3709c0e3e5d20bf3954c147b1dd941d", + "sha256:f64bb98ac59b3ea3bf74b02f13836eb2e24e48e0ab0145bbda646295769bd780", + "sha256:f9006288bcf4895917d02583cf3411f98631275bc67cce355a7f39f8c14338fa" + ], + "markers": "python_version >= '3.8'", + "version": "==1.24.2" + }, + "packaging": { + "hashes": [ + "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2", + "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97" + ], + "markers": "python_version >= '3.7'", + "version": "==23.0" + }, + "pandas": { + "hashes": [ + "sha256:09ff20955ca020a053522f5942f6ff3759bf656b95ed1e84ce8b99589b2bf31f", + "sha256:19989dbbb63658a0614adc3b190298635e5b3be6ca47ac1884a0e6d9fd3d6749", + "sha256:1f762147b2435bfa891b1c4167758dd12c0d4b669125032eed6e2efaa13f90da", + "sha256:3375801374960f6fe44a5d9149438d88fa1f32fd1fcdcd443ad7f91f7f1b2eb2", + "sha256:46984e8c45d2c71687f9876440b27c1d21432d7b2bc18d552142c8781b9af6be", + "sha256:52494974c3432a817c34d1c8920dad92b0bd653bbd12b50b2927f6fefb0785e3", + "sha256:54f3611e1626facb951fcfeeea435c6349b7acfb796b8fdef47618dcf1cf2087", + "sha256:5c869eb3ad3eeb78bf83b2ff96abc7173723510daf99febfcae520c9c5b9ff69", + "sha256:5dcc104f419842692859f5d110018c59ef46b882d74bb117c352e698ce06d96e", + "sha256:6322c756c2ed5afa4997667af26dd7bac94abffe16e3ed7c3dfd7f219ba58e2f", + "sha256:86506b49bdb1b851c8c3a50b3b8d9165927bbe2d1836f94756bde28a918ca8d3", + "sha256:8932531d2160a1ecbadb359e656a9fa1801bb818c500786b1fbacfae82130008", + "sha256:8fa487f3ec94555f6b8971925fca1e8484cfa41acedcde0a877900ee76c6e5ec", + "sha256:969155aca6379f1450604f17ce3cbffd3ee78af3b993241068349e3015fc59ce", + "sha256:9c29b1c7539da052ffa5f114a90207c30dfd2dc24c25ca498ba0fd00433b853e", + "sha256:9f85525ce2b253240efe6c1e6a630599c52492a99100432b1bb30bcee99ae2cb", + "sha256:a222eeee07461fdf7f37bd0cfded29558603da6e8acfdbd34b8a4f2e396ffcb7", + "sha256:a573e45dadbab3680879fdb12d385478dafdf34631e0c15b7df8db6dd1fbcbec", + "sha256:c5a54ef5ad40620d90acc3cdc8fa54fcbdd7f3153635dca0094a1812f43879c8", + "sha256:cef0e7d0721f359903399059f19661f27ef0da96c805d04dc86e45e712401e1d", + "sha256:e1a3bebb9a58bb6c002f56b805a5f304e2cee2d364f19cc1a882c3dd8cec83ea", + "sha256:ea3cca91363c22e1ee24628384ce7893c8e94eb535274fcb0abf9a9530437510", + "sha256:f2dee3af85409f874d0e86753949547c814cd4a55192af819e0f5f7206ad6c95", + "sha256:f7c5dd5b723a53488be21e89807464f75313173b97d3a8c6523c81569f8bfb23", + "sha256:f85621c194639c6368b5fe7fd14601f452cdbdf0c4cf34311cb2afbc020018e9" + ], + "markers": "python_version >= '3.8'", + "version": "==2.0.0rc1" + }, + "pluggy": { + "hashes": [ + "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159", + "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3" + ], + "markers": "python_version >= '3.6'", + "version": "==1.0.0" + }, + "pyarrow": { + "hashes": [ + "sha256:1cbcfcbb0e74b4d94f0b7dde447b835a01bc1d16510edb8bb7d6224b9bf5bafc", + "sha256:25aa11c443b934078bfd60ed63e4e2d42461682b5ac10f67275ea21e60e6042c", + "sha256:2d53ba72917fdb71e3584ffc23ee4fcc487218f8ff29dd6df3a34c5c48fe8c06", + "sha256:2d942c690ff24a08b07cb3df818f542a90e4d359381fbff71b8f2aea5bf58841", + "sha256:2f51dc7ca940fdf17893227edb46b6784d37522ce08d21afc56466898cb213b2", + "sha256:362a7c881b32dc6b0eccf83411a97acba2774c10edcec715ccaab5ebf3bb0835", + "sha256:3e99be85973592051e46412accea31828da324531a060bd4585046a74ba45854", + "sha256:40bb42afa1053c35c749befbe72f6429b7b5f45710e85059cdd534553ebcf4f2", + "sha256:410624da0708c37e6a27eba321a72f29d277091c8f8d23f72c92bada4092eb5e", + "sha256:41a1451dd895c0b2964b83d91019e46f15b5564c7ecd5dcb812dadd3f05acc97", + "sha256:5461c57dbdb211a632a48facb9b39bbeb8a7905ec95d768078525283caef5f6d", + "sha256:69309be84dcc36422574d19c7d3a30a7ea43804f12552356d1ab2a82a713c418", + "sha256:7c28b5f248e08dea3b3e0c828b91945f431f4202f1a9fe84d1012a761324e1ba", + "sha256:8f40be0d7381112a398b93c45a7e69f60261e7b0269cc324e9f739ce272f4f70", + "sha256:a37bc81f6c9435da3c9c1e767324ac3064ffbe110c4e460660c43e144be4ed85", + "sha256:aaee8f79d2a120bf3e032d6d64ad20b3af6f56241b0ffc38d201aebfee879d00", + "sha256:ad42bb24fc44c48f74f0d8c72a9af16ba9a01a2ccda5739a517aa860fa7e3d56", + "sha256:ad7c53def8dbbc810282ad308cc46a523ec81e653e60a91c609c2233ae407689", + "sha256:becc2344be80e5dce4e1b80b7c650d2fc2061b9eb339045035a1baa34d5b8f1c", + "sha256:caad867121f182d0d3e1a0d36f197df604655d0b466f1bc9bafa903aa95083e4", + "sha256:ccbf29a0dadfcdd97632b4f7cca20a966bb552853ba254e874c66934931b9841", + "sha256:da93340fbf6f4e2a62815064383605b7ffa3e9eeb320ec839995b1660d69f89b", + "sha256:e217d001e6389b20a6759392a5ec49d670757af80101ee6b5f2c8ff0172e02ca", + "sha256:f010ce497ca1b0f17a8243df3048055c0d18dcadbcc70895d5baf8921f753de5", + "sha256:f12932e5a6feb5c58192209af1d2607d488cb1d404fbc038ac12ada60327fa34" + ], + "markers": "python_version >= '3.7'", + "version": "==11.0.0" + }, + "pytest": { + "hashes": [ + "sha256:130328f552dcfac0b1cec75c12e3f005619dc5f874f0a06e8ff7263f0ee6225e", + "sha256:c99ab0c73aceb050f68929bc93af19ab6db0558791c6a0715723abe9d0ade9d4" + ], + "markers": "python_version >= '3.7'", + "version": "==7.2.2" + }, + "python-dateutil": { + "hashes": [ + "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86", + "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", + "version": "==2.8.2" + }, + "pytz": { + "hashes": [ + "sha256:01a0681c4b9684a28304615eba55d1ab31ae00bf68ec157ec3708a8182dbbcd0", + "sha256:78f4f37d8198e0627c5f1143240bb0206b8691d8d7ac6d78fee88b78733f8c4a" + ], + "version": "==2022.7.1" + }, + "pyyaml": { + "hashes": [ + "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf", + "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293", + "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b", + "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57", + "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b", + "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4", + "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07", + "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba", + "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9", + "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" + ], + "markers": "python_version >= '3.6'", + "version": "==6.0" + }, + "requests": { + "hashes": [ + "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa", + "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf" + ], + "markers": "python_version >= '3.7' and python_version < '4'", + "version": "==2.28.2" + }, + "six": { + "hashes": [ + "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", + "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", + "version": "==1.16.0" + }, + "synapseclient": { + "hashes": [ + "sha256:241f170f0e8c8c3735cd73f81711e592a581c55f7a5c4566be7bee82d72a56bc", + "sha256:29f5e3c87474cb2629e9ce77c97e81e80a08f24ec2c5889f9fba14530b8c4bf7" + ], + "markers": "python_version >= '3.7'", + "version": "==2.7.0" + }, + "tomli": { + "hashes": [ + "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc", + "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f" + ], + "markers": "python_version < '3.11'", + "version": "==2.0.1" + }, + "typer": { + "hashes": [ + "sha256:b5e704f4e48ec263de1c0b3a2387cd405a13767d2f907f44c1a08cbad96f606d", + "sha256:ff797846578a9f2a201b53442aedeb543319466870fbe1c701eab66dd7681165" + ], + "markers": "python_version >= '3.6'", + "version": "==0.7.0" + }, + "urllib3": { + "hashes": [ + "sha256:8a388717b9476f934a21484e8c8e61875ab60644d29b9b39e11e4b9dc1c6b305", + "sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", + "version": "==1.26.15" + }, + "wrapt": { + "hashes": [ + "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0", + "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420", + "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a", + "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c", + "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079", + "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923", + "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f", + "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1", + "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8", + "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86", + "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0", + "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364", + "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e", + "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c", + "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e", + "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c", + "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727", + "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff", + "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e", + "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29", + "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7", + "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72", + "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475", + "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a", + "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317", + "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2", + "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd", + "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640", + "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98", + "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248", + "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e", + "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d", + "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec", + "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1", + "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e", + "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9", + "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92", + "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb", + "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094", + "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46", + "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29", + "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd", + "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705", + "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8", + "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975", + "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb", + "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e", + "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b", + "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418", + "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019", + "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1", + "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba", + "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6", + "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2", + "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3", + "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7", + "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752", + "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416", + "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f", + "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1", + "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc", + "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145", + "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee", + "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a", + "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7", + "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b", + "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653", + "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0", + "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90", + "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29", + "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6", + "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034", + "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09", + "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559", + "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==1.15.0" + }, + "zipp": { + "hashes": [ + "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b", + "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556" + ], + "markers": "python_version >= '3.7'", + "version": "==3.15.0" + } + } +} From 5b96e999fb94e26db866532c3f11e4b94d28f58b Mon Sep 17 00:00:00 2001 From: Brad Macdonald Date: Wed, 22 Mar 2023 15:25:27 -0600 Subject: [PATCH 02/31] moves agoradatatools source code to src dir, adjusts setup.cfg to allow installation of agoradatatools as a package in pipenv, adds typer app configuration --- setup.cfg | 22 ++++++++++++++----- .../agoradatatools}/__init__.py | 0 src/agoradatatools/__main__.py | 4 ++++ .../agoradatatools}/errors.py | 0 .../agoradatatools}/etl/__init__.py | 0 .../agoradatatools}/etl/extract.py | 0 .../agoradatatools}/etl/load.py | 0 .../agoradatatools}/etl/test.py | 0 .../agoradatatools}/etl/transform.py | 0 .../agoradatatools}/etl/utils.py | 0 .../agoradatatools}/process.py | 19 +++++++++++++--- 11 files changed, 36 insertions(+), 9 deletions(-) rename {agoradatatools => src/agoradatatools}/__init__.py (100%) create mode 100644 src/agoradatatools/__main__.py rename {agoradatatools => src/agoradatatools}/errors.py (100%) rename {agoradatatools => src/agoradatatools}/etl/__init__.py (100%) rename {agoradatatools => src/agoradatatools}/etl/extract.py (100%) rename {agoradatatools => src/agoradatatools}/etl/load.py (100%) rename {agoradatatools => src/agoradatatools}/etl/test.py (100%) rename {agoradatatools => src/agoradatatools}/etl/transform.py (100%) rename {agoradatatools => src/agoradatatools}/etl/utils.py (100%) rename {agoradatatools => src/agoradatatools}/process.py (93%) diff --git a/setup.cfg b/setup.cfg index d4a6f6b9..a57a7568 100644 --- a/setup.cfg +++ b/setup.cfg @@ -29,12 +29,22 @@ project_urls = [options] packages = find: install_requires = - pandas~=1.2.4 - numpy~=1.21.0 - pytest~=6.2.4 - synapseclient~=2.6.0 - PyYAML~=5.4.1 - pyarrow~=3.0.0 + pandas>=1.2.4 + numpy>=1.21.0 + pytest>=6.2.4 + synapseclient>=2.7.0 + PyYAML>=5.4.1 + pyarrow>=3.0.0 + typer>=0.7.0 python_requires = >=3.7, <3.10 include_package_data = True zip_safe = False +[options.packages.find] +where = src +exclude = + tests + data_analysis + staging +[options.entry_points] +console_scripts = + agoradatatools = agoradatatools.process:app diff --git a/agoradatatools/__init__.py b/src/agoradatatools/__init__.py similarity index 100% rename from agoradatatools/__init__.py rename to src/agoradatatools/__init__.py diff --git a/src/agoradatatools/__main__.py b/src/agoradatatools/__main__.py new file mode 100644 index 00000000..4cba6c5c --- /dev/null +++ b/src/agoradatatools/__main__.py @@ -0,0 +1,4 @@ +if __name__ == "__main__": + from process import app + + app(prog_name="agoradatatools") diff --git a/agoradatatools/errors.py b/src/agoradatatools/errors.py similarity index 100% rename from agoradatatools/errors.py rename to src/agoradatatools/errors.py diff --git a/agoradatatools/etl/__init__.py b/src/agoradatatools/etl/__init__.py similarity index 100% rename from agoradatatools/etl/__init__.py rename to src/agoradatatools/etl/__init__.py diff --git a/agoradatatools/etl/extract.py b/src/agoradatatools/etl/extract.py similarity index 100% rename from agoradatatools/etl/extract.py rename to src/agoradatatools/etl/extract.py diff --git a/agoradatatools/etl/load.py b/src/agoradatatools/etl/load.py similarity index 100% rename from agoradatatools/etl/load.py rename to src/agoradatatools/etl/load.py diff --git a/agoradatatools/etl/test.py b/src/agoradatatools/etl/test.py similarity index 100% rename from agoradatatools/etl/test.py rename to src/agoradatatools/etl/test.py diff --git a/agoradatatools/etl/transform.py b/src/agoradatatools/etl/transform.py similarity index 100% rename from agoradatatools/etl/transform.py rename to src/agoradatatools/etl/transform.py diff --git a/agoradatatools/etl/utils.py b/src/agoradatatools/etl/utils.py similarity index 100% rename from agoradatatools/etl/utils.py rename to src/agoradatatools/etl/utils.py diff --git a/agoradatatools/process.py b/src/agoradatatools/process.py similarity index 93% rename from agoradatatools/process.py rename to src/agoradatatools/process.py index fd3640d6..64cf10f1 100644 --- a/agoradatatools/process.py +++ b/src/agoradatatools/process.py @@ -2,6 +2,7 @@ from pandas import DataFrame import synapseclient +from typer import Typer import agoradatatools.etl.extract as extract import agoradatatools.etl.transform as transform @@ -184,12 +185,24 @@ def build_parser(): return parser -def main(): +app = Typer() + + +@app.command() +def process(config_path: str = "config.yaml"): + parser = build_parser() + args = parser.parse_args() + syn = utils._login_to_synapse(token=args.authtoken) + process_all_files(config_path=config_path, syn=syn) + + +@app.command() +def process_test(config_path: str = "test_config.yaml"): parser = build_parser() args = parser.parse_args() syn = utils._login_to_synapse(token=args.authtoken) - process_all_files(config_path=args.configpath, syn=syn) + process_all_files(config_path=config_path, syn=syn) if __name__ == "__main__": - main() + app() From e13a41fdbfb7824e02ba6acab86b7eb1c1fdad81 Mon Sep 17 00:00:00 2001 From: Brad Macdonald Date: Wed, 22 Mar 2023 15:38:30 -0600 Subject: [PATCH 03/31] adjust ci --- .github/workflows/dev.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index 7b721656..56425a81 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -31,7 +31,7 @@ jobs: if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - name: Test with pytest run: | - pytest tests/ --cov=agoradatatools --cov-report=html + pytest tests/ --cov=src/agoradatatools --cov-report=html - name: Upload pytest test results uses: actions/upload-artifact@v3 with: From 7aaaaf548a103b64e15eb58755280d0d06b34b87 Mon Sep 17 00:00:00 2001 From: Brad Macdonald Date: Wed, 22 Mar 2023 15:42:29 -0600 Subject: [PATCH 04/31] updates ci --- .github/workflows/dev.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index 56425a81..4f879bdf 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -27,11 +27,11 @@ jobs: run: | python -m pip install --upgrade pip pip install pytest pytest-cov - pip install . + pip install src/ if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - name: Test with pytest run: | - pytest tests/ --cov=src/agoradatatools --cov-report=html + pytest tests/ --cov=agoradatatools --cov-report=html - name: Upload pytest test results uses: actions/upload-artifact@v3 with: From b3ed44b0e160243799e76617ebde1eb41c1e9ec8 Mon Sep 17 00:00:00 2001 From: Brad Macdonald Date: Wed, 22 Mar 2023 15:48:31 -0600 Subject: [PATCH 05/31] updates ci --- .github/workflows/dev.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index 4f879bdf..a6f41004 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -27,7 +27,7 @@ jobs: run: | python -m pip install --upgrade pip pip install pytest pytest-cov - pip install src/ + pip install ./src/agoradatatools if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - name: Test with pytest run: | From b96828552bda724f173c17cd555153158d91dae8 Mon Sep 17 00:00:00 2001 From: Brad Macdonald Date: Wed, 22 Mar 2023 15:50:38 -0600 Subject: [PATCH 06/31] updates ci --- .github/workflows/dev.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index a6f41004..fa6ccec1 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -27,7 +27,6 @@ jobs: run: | python -m pip install --upgrade pip pip install pytest pytest-cov - pip install ./src/agoradatatools if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - name: Test with pytest run: | From 1a4eac835d1752dd45e55038bf7e5ecff2cb5e5e Mon Sep 17 00:00:00 2001 From: Brad Macdonald Date: Wed, 22 Mar 2023 16:46:07 -0600 Subject: [PATCH 07/31] updates ci --- .github/workflows/dev.yml | 3 ++- setup.py | 8 ++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index fa6ccec1..59546a2e 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -4,7 +4,7 @@ name: CI on: push: - branches: ["dev"] + branches: ["dev", "bwmac/IBCDPE-409/implement_cli_2"] pull_request: # Allows you to run this workflow manually from the Actions tab @@ -26,6 +26,7 @@ jobs: - name: Install dependencies run: | python -m pip install --upgrade pip + pip install . pip install pytest pytest-cov if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - name: Test with pytest diff --git a/setup.py b/setup.py index 60684932..2eb6ecd1 100644 --- a/setup.py +++ b/setup.py @@ -1,3 +1,7 @@ -from setuptools import setup +from setuptools import setup, find_packages -setup() +setup( + name="agoradatatools", + packages=find_packages(where="src"), + package_dir={"": "src"}, +) From fd759aac7117f63d79163e4b03dd79b7631151e6 Mon Sep 17 00:00:00 2001 From: Brad Macdonald Date: Thu, 23 Mar 2023 09:56:12 -0600 Subject: [PATCH 08/31] changes cli command name to `adt` --- setup.cfg | 2 +- src/agoradatatools/__main__.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/setup.cfg b/setup.cfg index a57a7568..6730ee6f 100644 --- a/setup.cfg +++ b/setup.cfg @@ -47,4 +47,4 @@ exclude = staging [options.entry_points] console_scripts = - agoradatatools = agoradatatools.process:app + adt = agoradatatools.process:app diff --git a/src/agoradatatools/__main__.py b/src/agoradatatools/__main__.py index 4cba6c5c..0aa65ded 100644 --- a/src/agoradatatools/__main__.py +++ b/src/agoradatatools/__main__.py @@ -1,4 +1,4 @@ if __name__ == "__main__": from process import app - app(prog_name="agoradatatools") + app(prog_name="adt") From 5e842e86cfb4f9cb04f8825f21f9e2a69f617ec4 Mon Sep 17 00:00:00 2001 From: Brad Macdonald Date: Thu, 23 Mar 2023 09:56:58 -0600 Subject: [PATCH 09/31] adds Argument and description to process --- src/agoradatatools/process.py | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/agoradatatools/process.py b/src/agoradatatools/process.py index 64cf10f1..7b3c0fcd 100644 --- a/src/agoradatatools/process.py +++ b/src/agoradatatools/process.py @@ -2,7 +2,7 @@ from pandas import DataFrame import synapseclient -from typer import Typer +from typer import Typer, Argument import agoradatatools.etl.extract as extract import agoradatatools.etl.transform as transform @@ -188,16 +188,11 @@ def build_parser(): app = Typer() -@app.command() -def process(config_path: str = "config.yaml"): - parser = build_parser() - args = parser.parse_args() - syn = utils._login_to_synapse(token=args.authtoken) - process_all_files(config_path=config_path, syn=syn) +input_path_arg = Argument(..., help="Path to configuration file for processing run") @app.command() -def process_test(config_path: str = "test_config.yaml"): +def process(config_path: str = input_path_arg): parser = build_parser() args = parser.parse_args() syn = utils._login_to_synapse(token=args.authtoken) From 65b09986552db465fdb13db49b0a559028087112 Mon Sep 17 00:00:00 2001 From: Brad Macdonald Date: Thu, 23 Mar 2023 10:11:04 -0600 Subject: [PATCH 10/31] adds auth token arg to process, removes argparser --- src/agoradatatools/process.py | 38 +++++++++-------------------------- tests/test_process.py | 11 ---------- 2 files changed, 9 insertions(+), 40 deletions(-) diff --git a/src/agoradatatools/process.py b/src/agoradatatools/process.py index 7b3c0fcd..e79ea923 100644 --- a/src/agoradatatools/process.py +++ b/src/agoradatatools/process.py @@ -1,14 +1,11 @@ -import argparse - -from pandas import DataFrame import synapseclient -from typer import Typer, Argument +from pandas import DataFrame +from typer import Argument, Typer import agoradatatools.etl.extract as extract -import agoradatatools.etl.transform as transform import agoradatatools.etl.load as load +import agoradatatools.etl.transform as transform import agoradatatools.etl.utils as utils - from agoradatatools.errors import ADTDataProcessingError @@ -166,36 +163,19 @@ def process_all_files(config_path: str = None, syn=None): ) -def build_parser(): - """Builds the argument parser and returns the result. - - Returns: - argparse.ArgumentParser: argument parser for agora data processing - """ - parser = argparse.ArgumentParser(description="Agora data processing") - parser.add_argument( - "configpath", - help="Agora processing yaml configuration", - ) - parser.add_argument( - "-a", - "--authtoken", - help="Synapse PAT", - ) - return parser - - app = Typer() input_path_arg = Argument(..., help="Path to configuration file for processing run") +synapse_auth_arg = Argument(..., help="Synapse authentication token") @app.command() -def process(config_path: str = input_path_arg): - parser = build_parser() - args = parser.parse_args() - syn = utils._login_to_synapse(token=args.authtoken) +def process( + config_path: str = input_path_arg, + auth_token: str = synapse_auth_arg, +): + syn = utils._login_to_synapse(token=auth_token) process_all_files(config_path=config_path, syn=syn) diff --git a/tests/test_process.py b/tests/test_process.py index 77d806f3..96bc9c60 100644 --- a/tests/test_process.py +++ b/tests/test_process.py @@ -234,14 +234,3 @@ def test_process_all_files_full(self, syn): staging_path="./staging", filename="data_manifest.csv", ) - - -def test_build_parser(): - with patch.object( - argparse, - "ArgumentParser", - return_value=argparse.ArgumentParser(), - ) as patch_build_parser: - parser = process.build_parser() - patch_build_parser.assert_called_once_with(description="Agora data processing") - assert parser == argparse.ArgumentParser() From 1831af8c87aeb9fd2ea30582fb8fac9b4d10cec2 Mon Sep 17 00:00:00 2001 From: Brad Macdonald Date: Thu, 23 Mar 2023 10:15:56 -0600 Subject: [PATCH 11/31] updates ci --- .github/workflows/dev.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index 59546a2e..a6e771d5 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -28,7 +28,6 @@ jobs: python -m pip install --upgrade pip pip install . pip install pytest pytest-cov - if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - name: Test with pytest run: | pytest tests/ --cov=agoradatatools --cov-report=html @@ -51,6 +50,5 @@ jobs: with: python-version: "3.9" - run: pip install -U setuptools - - run: pip install -r ./requirements.txt - run: pip install . - - run: python ./agoradatatools/process.py test_config.yaml --authtoken ${{secrets.SYNAPSE_PAT}} + - run: adt test_config.yaml ${{secrets.SYNAPSE_PAT}} From 5332e1886d3aeec8dce5b469698f835830075f45 Mon Sep 17 00:00:00 2001 From: Brad Macdonald Date: Thu, 23 Mar 2023 10:44:53 -0600 Subject: [PATCH 12/31] bumps setuptools version --- setup.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.cfg b/setup.cfg index 6730ee6f..e3aea8e5 100644 --- a/setup.cfg +++ b/setup.cfg @@ -32,6 +32,7 @@ install_requires = pandas>=1.2.4 numpy>=1.21.0 pytest>=6.2.4 + setuptools>=67.0.0 synapseclient>=2.7.0 PyYAML>=5.4.1 pyarrow>=3.0.0 From 6cabe8ff589aed8c227ceeeca8550317a619d2c3 Mon Sep 17 00:00:00 2001 From: Brad Macdonald Date: Thu, 23 Mar 2023 10:45:10 -0600 Subject: [PATCH 13/31] removes requirements.txt --- requirements.txt | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 requirements.txt diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index d9a0819d..00000000 --- a/requirements.txt +++ /dev/null @@ -1,7 +0,0 @@ -pandas~=1.2.4 -numpy~=1.21.0 -pytest~=6.2.4 -synapseclient~=2.7.0 -setuptools~=49.2.1 -PyYAML~=5.4.1 -pyarrow~=3.0.0 From fe189ddda6670b13fb0f9a8d9f127efc78776ab5 Mon Sep 17 00:00:00 2001 From: Brad Macdonald Date: Thu, 23 Mar 2023 10:46:17 -0600 Subject: [PATCH 14/31] changes auth token to option instead of arg, updates ci to reflect change --- .github/workflows/dev.yml | 2 +- src/agoradatatools/process.py | 14 +++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index a6e771d5..46d9bed5 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -51,4 +51,4 @@ jobs: python-version: "3.9" - run: pip install -U setuptools - run: pip install . - - run: adt test_config.yaml ${{secrets.SYNAPSE_PAT}} + - run: adt test_config.yaml -at ${{secrets.SYNAPSE_PAT}} diff --git a/src/agoradatatools/process.py b/src/agoradatatools/process.py index e79ea923..10f15ea9 100644 --- a/src/agoradatatools/process.py +++ b/src/agoradatatools/process.py @@ -1,6 +1,8 @@ +import os + import synapseclient from pandas import DataFrame -from typer import Argument, Typer +from typer import Argument, Option, Typer import agoradatatools.etl.extract as extract import agoradatatools.etl.load as load @@ -167,13 +169,19 @@ def process_all_files(config_path: str = None, syn=None): input_path_arg = Argument(..., help="Path to configuration file for processing run") -synapse_auth_arg = Argument(..., help="Synapse authentication token") +synapse_auth_opt = Option( + os.environ.get("SYNAPSE_AUTH_TOKEN"), + "--auth-token", + "-at", + help="Synapse authentication token. Defaults to environment variabe $SYNAPSE_AUTH_TOKEN", + show_default=False, +) @app.command() def process( config_path: str = input_path_arg, - auth_token: str = synapse_auth_arg, + auth_token: str = synapse_auth_opt, ): syn = utils._login_to_synapse(token=auth_token) process_all_files(config_path=config_path, syn=syn) From 1270299ce8af0ace6b943e3e4fc9de14ceb328ea Mon Sep 17 00:00:00 2001 From: Brad Macdonald Date: Thu, 23 Mar 2023 10:46:52 -0600 Subject: [PATCH 15/31] removes feature branch from ci --- .github/workflows/dev.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index 46d9bed5..d3c2c741 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -4,7 +4,7 @@ name: CI on: push: - branches: ["dev", "bwmac/IBCDPE-409/implement_cli_2"] + branches: ["dev"] pull_request: # Allows you to run this workflow manually from the Actions tab From a8f2cad6f6e6ae62e72b253c6c4977a64d405b7c Mon Sep 17 00:00:00 2001 From: Brad Macdonald Date: Thu, 23 Mar 2023 12:52:13 -0600 Subject: [PATCH 16/31] removes extras from pipfile and lock --- Pipfile | 4 ++-- Pipfile.lock | 34 +++++++++++++++++++++++----------- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/Pipfile b/Pipfile index 40b9ec47..b3693e18 100644 --- a/Pipfile +++ b/Pipfile @@ -4,10 +4,10 @@ verify_ssl = true name = "pypi" [packages] -agoradatatools = {editable = true, path = ".", extras = ["all"]} +agoradatatools = {editable = true, path = "."} [dev-packages] -agoradatatools = {editable = true, path = ".", extras = ["testing", "dev"]} +agoradatatools = {editable = true, path = "."} [requires] python_version = "3.9.13" diff --git a/Pipfile.lock b/Pipfile.lock index 39037292..6ed4daa0 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "9749f3af3fad73e0b8faf295fcf5419b705766fc8956248e5b86a730dff7d39b" + "sha256": "db7a638a85c89b1a6cf2156b144523fa8bbfa690e41af36b816f1279773a37f8" }, "pipfile-spec": 6, "requires": { @@ -18,9 +18,7 @@ "default": { "agora-data-tools": { "editable": true, - "extras": [ - "all" - ], + "extras": [], "path": "." }, "agoradatatools": { @@ -308,7 +306,7 @@ "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86", "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==2.8.2" }, "pytz": { @@ -372,12 +370,20 @@ "markers": "python_version >= '3.7' and python_version < '4'", "version": "==2.28.2" }, + "setuptools": { + "hashes": [ + "sha256:2ee892cd5f29f3373097f5a814697e397cf3ce313616df0af11231e2ad118077", + "sha256:b78aaa36f6b90a074c1fa651168723acbf45d14cb1196b6f02c0fd07f17623b2" + ], + "markers": "python_version >= '3.7'", + "version": "==67.6.0" + }, "six": { "hashes": [ "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.16.0" }, "synapseclient": { @@ -505,9 +511,7 @@ "develop": { "agora-data-tools": { "editable": true, - "extras": [ - "all" - ], + "extras": [], "path": "." }, "agoradatatools": { @@ -795,7 +799,7 @@ "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86", "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==2.8.2" }, "pytz": { @@ -859,12 +863,20 @@ "markers": "python_version >= '3.7' and python_version < '4'", "version": "==2.28.2" }, + "setuptools": { + "hashes": [ + "sha256:2ee892cd5f29f3373097f5a814697e397cf3ce313616df0af11231e2ad118077", + "sha256:b78aaa36f6b90a074c1fa651168723acbf45d14cb1196b6f02c0fd07f17623b2" + ], + "markers": "python_version >= '3.7'", + "version": "==67.6.0" + }, "six": { "hashes": [ "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.16.0" }, "synapseclient": { From 246003d0910e62deeb9aa9b84e3d713640a5c0be Mon Sep 17 00:00:00 2001 From: Brad Macdonald Date: Thu, 23 Mar 2023 13:23:57 -0600 Subject: [PATCH 17/31] alters authentication default --- src/agoradatatools/process.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/agoradatatools/process.py b/src/agoradatatools/process.py index 10f15ea9..f71bcc57 100644 --- a/src/agoradatatools/process.py +++ b/src/agoradatatools/process.py @@ -170,10 +170,10 @@ def process_all_files(config_path: str = None, syn=None): input_path_arg = Argument(..., help="Path to configuration file for processing run") synapse_auth_opt = Option( - os.environ.get("SYNAPSE_AUTH_TOKEN"), + None, "--auth-token", "-at", - help="Synapse authentication token. Defaults to environment variabe $SYNAPSE_AUTH_TOKEN", + help="Synapse authentication token. Defaults to environment variable $SYNAPSE_AUTH_TOKEN via syn.login() functionality", show_default=False, ) From aa28cba671b2c084dc16919ac1f596c3920b4c91 Mon Sep 17 00:00:00 2001 From: Brad Macdonald Date: Thu, 23 Mar 2023 13:38:05 -0600 Subject: [PATCH 18/31] updates README --- README.md | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 12b1ce29..4df0cf29 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ into the Agora databases is handled by [agora-data-manager](https://github.com/S You can run the pipeline in any of the following ways: 1. [Nextflow Tower](#nextflow-tower) is the simplest, but least flexible, way to run the pipeline; it does not require Synapse permissions, creating a Synapse PAT, or setting up the Synapse Python client. -2. [Locally](#locally) requires installing Python, obtaining the required Synapse permissions, creating a Synpase PAT, and setting up the Synapse Python client. +2. [Locally](#locally) requires installing Python and Pipenv, obtaining the required Synapse permissions, creating a Synpase PAT, and setting up the Synapse Python client. 3. [Docker](#docker) requires installing Docker, obtaining the required Synapse permissions, and creating a Synpase PAT. When running the pipeline, you must specify the config file that will be used. There are two config files that are checked into this repo: @@ -57,14 +57,13 @@ Perform the following one-time steps to set up your local environment and to obt * conda - please follow instructions [here](https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html) to manage environments * pyenv - you will want to use [virtualenv](https://virtualenv.pypa.io/en/latest/) to manage your python environment -2. Install the package locally using conda or pyenv, depending on which you chose: +2. After navigating to the `agora-data-tools` directory, install the package locally using conda, pyenv or pipenv: * conda ```bash conda create -n agora python=3.9 conda activate agora pip install . - pip install -r requirements.txt ``` * pyenv + virtualenv ```bash @@ -73,7 +72,12 @@ Perform the following one-time steps to set up your local environment and to obt python -m venv env source env/bin/activate python3 -m pip install . - python3 -m pip -r requirements.txt + ``` + * pipenv + ```bash + pip install pipenv + pipenv install + pipenv shell ``` 3. Obtain download access to all required source files in Synapse, including accepting the terms of use on the AD Knowledge Portal backend [here](https://www.synapse.org/#!Synapse:syn5550378). If you see a green unlocked lock icon, then you should be good to go. @@ -81,10 +85,10 @@ Perform the following one-time steps to set up your local environment and to obt 5. Create a Synapse personal access token (PAT) 6. [Set up](https://help.synapse.org/docs/Client-Configuration.1985446156.html) your Synapse Python client locally -Once you have completed the setup steps outlined above, execute the pipeline by running `process.py` and providing the desired [config file](#config) as an argument. The following example command will execute the pipeline using ```test_config.yaml```: +Once you have completed the setup steps outlined above, execute the pipeline by running `adt` and providing the desired [config file](#config) as an argument. The following example command will execute the pipeline using ```test_config.yaml```: ```bash - python ./agoradatatools/process.py test_config.yaml + adt test_config.yaml ``` ### Docker From a7a82e7d09ff0e2a7ba9f9a5193c31185cb3530b Mon Sep 17 00:00:00 2001 From: Brad Macdonald Date: Thu, 23 Mar 2023 13:40:47 -0600 Subject: [PATCH 19/31] updates option tage to one letter --- .github/workflows/dev.yml | 2 +- src/agoradatatools/process.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index d3c2c741..7e9b20e5 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -51,4 +51,4 @@ jobs: python-version: "3.9" - run: pip install -U setuptools - run: pip install . - - run: adt test_config.yaml -at ${{secrets.SYNAPSE_PAT}} + - run: adt test_config.yaml -t ${{secrets.SYNAPSE_PAT}} diff --git a/src/agoradatatools/process.py b/src/agoradatatools/process.py index f71bcc57..ce837a18 100644 --- a/src/agoradatatools/process.py +++ b/src/agoradatatools/process.py @@ -171,8 +171,8 @@ def process_all_files(config_path: str = None, syn=None): input_path_arg = Argument(..., help="Path to configuration file for processing run") synapse_auth_opt = Option( None, - "--auth-token", - "-at", + "--token", + "-t", help="Synapse authentication token. Defaults to environment variable $SYNAPSE_AUTH_TOKEN via syn.login() functionality", show_default=False, ) From 1464ec07f06e0deddb6c461236b9ad0b03f7995a Mon Sep 17 00:00:00 2001 From: Brad Macdonald Date: Thu, 23 Mar 2023 13:47:58 -0600 Subject: [PATCH 20/31] adjusts setup --- setup.cfg | 4 ---- setup.py | 8 ++------ 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/setup.cfg b/setup.cfg index e3aea8e5..5aa54c08 100644 --- a/setup.cfg +++ b/setup.cfg @@ -42,10 +42,6 @@ include_package_data = True zip_safe = False [options.packages.find] where = src -exclude = - tests - data_analysis - staging [options.entry_points] console_scripts = adt = agoradatatools.process:app diff --git a/setup.py b/setup.py index 2eb6ecd1..60684932 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,3 @@ -from setuptools import setup, find_packages +from setuptools import setup -setup( - name="agoradatatools", - packages=find_packages(where="src"), - package_dir={"": "src"}, -) +setup() From b07331842f26b0049504a48e3152ed050f234931 Mon Sep 17 00:00:00 2001 From: Brad Macdonald Date: Thu, 23 Mar 2023 13:49:51 -0600 Subject: [PATCH 21/31] adds package_dir to setup.cfg --- setup.cfg | 2 ++ 1 file changed, 2 insertions(+) diff --git a/setup.cfg b/setup.cfg index 5aa54c08..1d9a2153 100644 --- a/setup.cfg +++ b/setup.cfg @@ -27,6 +27,8 @@ project_urls = Source Code = https://github.com/Sage-Bionetworks/agora-data-tools [options] +package_dir = + = src packages = find: install_requires = pandas>=1.2.4 From 7ad44c603c8c431426c14e9c1b7badeec3757092 Mon Sep 17 00:00:00 2001 From: Brad Macdonald Date: Fri, 24 Mar 2023 14:15:00 -0600 Subject: [PATCH 22/31] pins pandas version --- Pipfile.lock | 96 ++++++++++++++++++++++------------------------------ setup.cfg | 2 +- 2 files changed, 41 insertions(+), 57 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index 6ed4daa0..cd6c566b 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -225,34 +225,26 @@ }, "pandas": { "hashes": [ - "sha256:09ff20955ca020a053522f5942f6ff3759bf656b95ed1e84ce8b99589b2bf31f", - "sha256:19989dbbb63658a0614adc3b190298635e5b3be6ca47ac1884a0e6d9fd3d6749", - "sha256:1f762147b2435bfa891b1c4167758dd12c0d4b669125032eed6e2efaa13f90da", - "sha256:3375801374960f6fe44a5d9149438d88fa1f32fd1fcdcd443ad7f91f7f1b2eb2", - "sha256:46984e8c45d2c71687f9876440b27c1d21432d7b2bc18d552142c8781b9af6be", - "sha256:52494974c3432a817c34d1c8920dad92b0bd653bbd12b50b2927f6fefb0785e3", - "sha256:54f3611e1626facb951fcfeeea435c6349b7acfb796b8fdef47618dcf1cf2087", - "sha256:5c869eb3ad3eeb78bf83b2ff96abc7173723510daf99febfcae520c9c5b9ff69", - "sha256:5dcc104f419842692859f5d110018c59ef46b882d74bb117c352e698ce06d96e", - "sha256:6322c756c2ed5afa4997667af26dd7bac94abffe16e3ed7c3dfd7f219ba58e2f", - "sha256:86506b49bdb1b851c8c3a50b3b8d9165927bbe2d1836f94756bde28a918ca8d3", - "sha256:8932531d2160a1ecbadb359e656a9fa1801bb818c500786b1fbacfae82130008", - "sha256:8fa487f3ec94555f6b8971925fca1e8484cfa41acedcde0a877900ee76c6e5ec", - "sha256:969155aca6379f1450604f17ce3cbffd3ee78af3b993241068349e3015fc59ce", - "sha256:9c29b1c7539da052ffa5f114a90207c30dfd2dc24c25ca498ba0fd00433b853e", - "sha256:9f85525ce2b253240efe6c1e6a630599c52492a99100432b1bb30bcee99ae2cb", - "sha256:a222eeee07461fdf7f37bd0cfded29558603da6e8acfdbd34b8a4f2e396ffcb7", - "sha256:a573e45dadbab3680879fdb12d385478dafdf34631e0c15b7df8db6dd1fbcbec", - "sha256:c5a54ef5ad40620d90acc3cdc8fa54fcbdd7f3153635dca0094a1812f43879c8", - "sha256:cef0e7d0721f359903399059f19661f27ef0da96c805d04dc86e45e712401e1d", - "sha256:e1a3bebb9a58bb6c002f56b805a5f304e2cee2d364f19cc1a882c3dd8cec83ea", - "sha256:ea3cca91363c22e1ee24628384ce7893c8e94eb535274fcb0abf9a9530437510", - "sha256:f2dee3af85409f874d0e86753949547c814cd4a55192af819e0f5f7206ad6c95", - "sha256:f7c5dd5b723a53488be21e89807464f75313173b97d3a8c6523c81569f8bfb23", - "sha256:f85621c194639c6368b5fe7fd14601f452cdbdf0c4cf34311cb2afbc020018e9" - ], - "markers": "python_version >= '3.8'", - "version": "==2.0.0rc1" + "sha256:167693a80abc8eb28051fbd184c1b7afd13ce2c727a5af47b048f1ea3afefff4", + "sha256:2111c25e69fa9365ba80bbf4f959400054b2771ac5d041ed19415a8b488dc70a", + "sha256:298f0553fd3ba8e002c4070a723a59cdb28eda579f3e243bc2ee397773f5398b", + "sha256:2b063d41803b6a19703b845609c0b700913593de067b552a8b24dd8eeb8c9895", + "sha256:2cb7e8f4f152f27dc93f30b5c7a98f6c748601ea65da359af734dd0cf3fa733f", + "sha256:52d2472acbb8a56819a87aafdb8b5b6d2b3386e15c95bde56b281882529a7ded", + "sha256:612add929bf3ba9d27b436cc8853f5acc337242d6b584203f207e364bb46cb12", + "sha256:649ecab692fade3cbfcf967ff936496b0cfba0af00a55dfaacd82bdda5cb2279", + "sha256:68d7baa80c74aaacbed597265ca2308f017859123231542ff8a5266d489e1858", + "sha256:8d4c74177c26aadcfb4fd1de6c1c43c2bf822b3e0fc7a9b409eeaf84b3e92aaa", + "sha256:971e2a414fce20cc5331fe791153513d076814d30a60cd7348466943e6e909e4", + "sha256:9db70ffa8b280bb4de83f9739d514cd0735825e79eef3a61d312420b9f16b758", + "sha256:b730add5267f873b3383c18cac4df2527ac4f0f0eed1c6cf37fcb437e25cf558", + "sha256:bd659c11a4578af740782288cac141a322057a2e36920016e0fc7b25c5a4b686", + "sha256:c601c6fdebc729df4438ec1f62275d6136a0dd14d332fc0e8ce3f7d2aadb4dd6", + "sha256:d0877407359811f7b853b548a614aacd7dea83b0c0c84620a9a643f180060950" + ], + "index": "pypi", + "markers": "python_full_version >= '3.7.1'", + "version": "==1.2.4" }, "pluggy": { "hashes": [ @@ -718,34 +710,26 @@ }, "pandas": { "hashes": [ - "sha256:09ff20955ca020a053522f5942f6ff3759bf656b95ed1e84ce8b99589b2bf31f", - "sha256:19989dbbb63658a0614adc3b190298635e5b3be6ca47ac1884a0e6d9fd3d6749", - "sha256:1f762147b2435bfa891b1c4167758dd12c0d4b669125032eed6e2efaa13f90da", - "sha256:3375801374960f6fe44a5d9149438d88fa1f32fd1fcdcd443ad7f91f7f1b2eb2", - "sha256:46984e8c45d2c71687f9876440b27c1d21432d7b2bc18d552142c8781b9af6be", - "sha256:52494974c3432a817c34d1c8920dad92b0bd653bbd12b50b2927f6fefb0785e3", - "sha256:54f3611e1626facb951fcfeeea435c6349b7acfb796b8fdef47618dcf1cf2087", - "sha256:5c869eb3ad3eeb78bf83b2ff96abc7173723510daf99febfcae520c9c5b9ff69", - "sha256:5dcc104f419842692859f5d110018c59ef46b882d74bb117c352e698ce06d96e", - "sha256:6322c756c2ed5afa4997667af26dd7bac94abffe16e3ed7c3dfd7f219ba58e2f", - "sha256:86506b49bdb1b851c8c3a50b3b8d9165927bbe2d1836f94756bde28a918ca8d3", - "sha256:8932531d2160a1ecbadb359e656a9fa1801bb818c500786b1fbacfae82130008", - "sha256:8fa487f3ec94555f6b8971925fca1e8484cfa41acedcde0a877900ee76c6e5ec", - "sha256:969155aca6379f1450604f17ce3cbffd3ee78af3b993241068349e3015fc59ce", - "sha256:9c29b1c7539da052ffa5f114a90207c30dfd2dc24c25ca498ba0fd00433b853e", - "sha256:9f85525ce2b253240efe6c1e6a630599c52492a99100432b1bb30bcee99ae2cb", - "sha256:a222eeee07461fdf7f37bd0cfded29558603da6e8acfdbd34b8a4f2e396ffcb7", - "sha256:a573e45dadbab3680879fdb12d385478dafdf34631e0c15b7df8db6dd1fbcbec", - "sha256:c5a54ef5ad40620d90acc3cdc8fa54fcbdd7f3153635dca0094a1812f43879c8", - "sha256:cef0e7d0721f359903399059f19661f27ef0da96c805d04dc86e45e712401e1d", - "sha256:e1a3bebb9a58bb6c002f56b805a5f304e2cee2d364f19cc1a882c3dd8cec83ea", - "sha256:ea3cca91363c22e1ee24628384ce7893c8e94eb535274fcb0abf9a9530437510", - "sha256:f2dee3af85409f874d0e86753949547c814cd4a55192af819e0f5f7206ad6c95", - "sha256:f7c5dd5b723a53488be21e89807464f75313173b97d3a8c6523c81569f8bfb23", - "sha256:f85621c194639c6368b5fe7fd14601f452cdbdf0c4cf34311cb2afbc020018e9" - ], - "markers": "python_version >= '3.8'", - "version": "==2.0.0rc1" + "sha256:167693a80abc8eb28051fbd184c1b7afd13ce2c727a5af47b048f1ea3afefff4", + "sha256:2111c25e69fa9365ba80bbf4f959400054b2771ac5d041ed19415a8b488dc70a", + "sha256:298f0553fd3ba8e002c4070a723a59cdb28eda579f3e243bc2ee397773f5398b", + "sha256:2b063d41803b6a19703b845609c0b700913593de067b552a8b24dd8eeb8c9895", + "sha256:2cb7e8f4f152f27dc93f30b5c7a98f6c748601ea65da359af734dd0cf3fa733f", + "sha256:52d2472acbb8a56819a87aafdb8b5b6d2b3386e15c95bde56b281882529a7ded", + "sha256:612add929bf3ba9d27b436cc8853f5acc337242d6b584203f207e364bb46cb12", + "sha256:649ecab692fade3cbfcf967ff936496b0cfba0af00a55dfaacd82bdda5cb2279", + "sha256:68d7baa80c74aaacbed597265ca2308f017859123231542ff8a5266d489e1858", + "sha256:8d4c74177c26aadcfb4fd1de6c1c43c2bf822b3e0fc7a9b409eeaf84b3e92aaa", + "sha256:971e2a414fce20cc5331fe791153513d076814d30a60cd7348466943e6e909e4", + "sha256:9db70ffa8b280bb4de83f9739d514cd0735825e79eef3a61d312420b9f16b758", + "sha256:b730add5267f873b3383c18cac4df2527ac4f0f0eed1c6cf37fcb437e25cf558", + "sha256:bd659c11a4578af740782288cac141a322057a2e36920016e0fc7b25c5a4b686", + "sha256:c601c6fdebc729df4438ec1f62275d6136a0dd14d332fc0e8ce3f7d2aadb4dd6", + "sha256:d0877407359811f7b853b548a614aacd7dea83b0c0c84620a9a643f180060950" + ], + "index": "pypi", + "markers": "python_full_version >= '3.7.1'", + "version": "==1.2.4" }, "pluggy": { "hashes": [ diff --git a/setup.cfg b/setup.cfg index 1d9a2153..07449c39 100644 --- a/setup.cfg +++ b/setup.cfg @@ -31,7 +31,7 @@ package_dir = = src packages = find: install_requires = - pandas>=1.2.4 + pandas==1.2.4 numpy>=1.21.0 pytest>=6.2.4 setuptools>=67.0.0 From b8c1849acf62fb33a8816da556a71db27b9eef89 Mon Sep 17 00:00:00 2001 From: Brad Macdonald Date: Fri, 24 Mar 2023 15:13:10 -0600 Subject: [PATCH 23/31] bump requirements versions, adjust version rules. adds `pyproject.toml` (autogenerated by setuptools) --- pyproject.toml | 3 +++ setup.cfg | 14 +++++++------- 2 files changed, 10 insertions(+), 7 deletions(-) create mode 100644 pyproject.toml diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..864b334a --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["setuptools", "wheel"] +build-backend = "setuptools.build_meta:__legacy__" diff --git a/setup.cfg b/setup.cfg index 07449c39..16dfec15 100644 --- a/setup.cfg +++ b/setup.cfg @@ -32,13 +32,13 @@ package_dir = packages = find: install_requires = pandas==1.2.4 - numpy>=1.21.0 - pytest>=6.2.4 - setuptools>=67.0.0 - synapseclient>=2.7.0 - PyYAML>=5.4.1 - pyarrow>=3.0.0 - typer>=0.7.0 + numpy~=1.24 + pytest~=7.2 + setuptools~=67.0.0 + synapseclient~=2.7.0 + PyYAML~=6.0 + pyarrow~=11.0 + typer~=0.7.0 python_requires = >=3.7, <3.10 include_package_data = True zip_safe = False From a8feee2c9f41ca59cc14e5597b4ccd83746fa3bc Mon Sep 17 00:00:00 2001 From: Brad Macdonald Date: Fri, 24 Mar 2023 15:18:19 -0600 Subject: [PATCH 24/31] change numpy version for CI --- setup.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.cfg b/setup.cfg index 16dfec15..b40e448a 100644 --- a/setup.cfg +++ b/setup.cfg @@ -32,7 +32,7 @@ package_dir = packages = find: install_requires = pandas==1.2.4 - numpy~=1.24 + numpy~=1.21 pytest~=7.2 setuptools~=67.0.0 synapseclient~=2.7.0 From 7a0966c3259b8cb1e11751ee3448d6fb75cd69fc Mon Sep 17 00:00:00 2001 From: Brad Macdonald Date: Fri, 24 Mar 2023 15:59:27 -0600 Subject: [PATCH 25/31] adds python 3.10 to CI --- .github/workflows/dev.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index 7e9b20e5..7fce0296 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -16,7 +16,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.7, 3.8, 3.9] + python-version: [3.7, 3.8, 3.9, 3.10] steps: - uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} From b3b0c5f18ac3f429cb122ee281261f71c3be701a Mon Sep 17 00:00:00 2001 From: Brad Macdonald Date: Fri, 24 Mar 2023 16:08:55 -0600 Subject: [PATCH 26/31] changes pytohn version to 3.10.0 --- .github/workflows/dev.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index 7fce0296..cf4cc345 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -16,7 +16,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.7, 3.8, 3.9, 3.10] + python-version: [3.7, 3.8, 3.9, 3.10.0] steps: - uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} From 066d45bd2c8749cd00cd9c5cbbe3d058d561653f Mon Sep 17 00:00:00 2001 From: Brad Macdonald Date: Fri, 24 Mar 2023 16:12:13 -0600 Subject: [PATCH 27/31] adjusts ci for 3.10 --- .github/workflows/dev.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index cf4cc345..b53dc18b 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -16,7 +16,11 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.7, 3.8, 3.9, 3.10.0] + python-version: + - "3.7" + - "3.8" + - "3.9" + - "3.10" steps: - uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} From 2973a37afeb86c457426410fc24200bbf01f11be Mon Sep 17 00:00:00 2001 From: Brad Macdonald Date: Fri, 24 Mar 2023 16:14:38 -0600 Subject: [PATCH 28/31] adjusts agoradatatools requireed python version allow 3.10 --- setup.cfg | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/setup.cfg b/setup.cfg index b40e448a..6ac91c74 100644 --- a/setup.cfg +++ b/setup.cfg @@ -21,6 +21,7 @@ classifiers = Programming Language :: Python :: 3.7 Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 + Programming Language :: Python :: 3.10 Topic :: Scientific/Engineering project_urls = Bug Tracker = https://github.com/Sage-Bionetworks/agora-data-tools/issues @@ -39,7 +40,7 @@ install_requires = PyYAML~=6.0 pyarrow~=11.0 typer~=0.7.0 -python_requires = >=3.7, <3.10 +python_requires = >=3.7, <3.11 include_package_data = True zip_safe = False [options.packages.find] From b8231cb39f4a7205b434f7ad3cdc081e6c85417a Mon Sep 17 00:00:00 2001 From: Brad Macdonald Date: Mon, 27 Mar 2023 09:29:37 -0600 Subject: [PATCH 29/31] updates README --- README.md | 60 +++++++++++++++++++++++-------------------------------- 1 file changed, 25 insertions(+), 35 deletions(-) diff --git a/README.md b/README.md index 4df0cf29..041ac2a2 100644 --- a/README.md +++ b/README.md @@ -13,20 +13,20 @@ A place for Agora's ETL, data testing, and data analysis This configuration-driven data pipeline uses a config file - which is easy for -engineers, analysts, and project managers to understand - to drive the entire ETL process. The code in `/agoradatatools` uses +engineers, analysts, and project managers to understand - to drive the entire ETL process. The code in `src/agoradatatools` uses parameters defined in a config file to determine which kinds of extraction and transformations a particular dataset needs to go through before the resulting data is serialized as json files that can be loaded into Agora's data repository. In the spirit of importing datasets with the minimum amount of transformations, one can simply add a dataset to the config file, and run the scripts. -This `/agoradatatools` implementation was influenced by the "Modern Config Driven ELT Framework for Building a +This `src/agoradatatools` implementation was influenced by the "Modern Config Driven ELT Framework for Building a Data Lake" talk given at the Data + AI Summit of 2021. Python notebooks that describe the custom logic for various datasets are located in `/data_analysis/notebooks`. ## Running the pipeline -The json files generated by `/agoradatatools` are written to folders in the [Agora Synapse project](https://www.synapse.org/#!Synapse:syn11850457/files/) by default, +The json files generated by `src/agoradatatools` are written to folders in the [Agora Synapse project](https://www.synapse.org/#!Synapse:syn11850457/files/) by default, although you can modify the destination Synapse folder in the [config file](#config). Note that running the pipeline does _not_ automatically update the Agora database in any environment. Ingestion of generated json files @@ -50,42 +50,35 @@ This pipeline can be executed without any local installation, permissions, or cr The instructions to trigger the workflow can be found at [Sage-Bionetworks-Workflows/nf-agora](https://github.com/Sage-Bionetworks-Workflows/nf-agora) +### Configuring Synapse Credentials + +1. Obtain download access to all required source files in Synapse, including accepting the terms of use on the AD Knowledge Portal backend [here](https://www.synapse.org/#!Synapse:syn5550378). If you see a green unlocked lock icon, then you should be good to go. +2. Obtain write access to the destination Synapse project, e.g. [Agora Synapse project](https://www.synapse.org/#!Synapse:syn11850457/files/) +3. Create a Synapse personal access token (PAT) +4. [Set up](https://help.synapse.org/docs/Client-Configuration.1985446156.html) your Synapse Python client locally + +Your configured Synapse credentials can be used to run this package both locally and using Docker, as outlined below. + ### Locally Perform the following one-time steps to set up your local environment and to obtain the required Synapse permissions: -1. Due to the nature of Python, you will want to set up your python environment with [conda](https://www.anaconda.com/products/distribution) or [pyenv](https://github.com/pyenv/pyenv). You will want to create a virtual environment to do your work. - * conda - please follow instructions [here](https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html) to manage environments - * pyenv - you will want to use [virtualenv](https://virtualenv.pypa.io/en/latest/) to manage your python environment +1. If you have not already, [install](https://cloud.google.com/python/docs/setup) a supported version of Python and. Versions supported by this package are all versions >3.7 and <3.11. Make sure that Python and `pip` are installed correctly and have been added to your PATH by running `python3 --version` and `pip3 --version`. If your installation was successful, your terminal will return the versions of Python and `pip` that you installed. -2. After navigating to the `agora-data-tools` directory, install the package locally using conda, pyenv or pipenv: +2. Install `pipenv` by running `pip install pipenv`. + +3. Install `git` if you have not done so already using [these instructions](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) + +4. Clone this Github Repository to your local machine by opening your terminal, navigating to the directory that you want this repository to be cloned and running `git clone https://github.com/Sage-Bionetworks/agora-data-tools.git`. After cloning is complete, navigate into the newly created `agora-data-tools` directory. + +5. Install `agoradatatools` locally using pipenv: - * conda - ```bash - conda create -n agora python=3.9 - conda activate agora - pip install . - ``` - * pyenv + virtualenv - ```bash - pyenv install -v 3.9.13 - pyenv global 3.9.13 - python -m venv env - source env/bin/activate - python3 -m pip install . - ``` * pipenv ```bash - pip install pipenv pipenv install pipenv shell ``` -3. Obtain download access to all required source files in Synapse, including accepting the terms of use on the AD Knowledge Portal backend [here](https://www.synapse.org/#!Synapse:syn5550378). If you see a green unlocked lock icon, then you should be good to go. -4. Obtain write access to the destination Synapse project, e.g. [Agora Synapse project](https://www.synapse.org/#!Synapse:syn11850457/files/) -5. Create a Synapse personal access token (PAT) -6. [Set up](https://help.synapse.org/docs/Client-Configuration.1985446156.html) your Synapse Python client locally - -Once you have completed the setup steps outlined above, execute the pipeline by running `adt` and providing the desired [config file](#config) as an argument. The following example command will execute the pipeline using ```test_config.yaml```: +6. You can check if the package was isntalled correctly by running `adt --help` in the terminal. If it returns instructions about how to use the CLI, installation was successful and you can run the pipeline by providing the desired [config file](#config) as an argument. The following example command will execute the pipeline using ```test_config.yaml```: ```bash adt test_config.yaml @@ -93,20 +86,17 @@ Once you have completed the setup steps outlined above, execute the pipeline by ### Docker -There is a publicly available [DockerHub repository](https://hub.docker.com/r/sagebionetworks/agora-data-tools) automatically build via DockerHub. That said, you may want to develop using Docker locally on a feature branch. +There is a publicly available [DockerHub repository](https://hub.docker.com/r/sagebionetworks/agora-data-tools) automatically built via DockerHub. That said, you may want to develop using Docker locally on a feature branch. -If you don't want to deal with Python paths and dependencies, you can use Docker to run the pipeline. Perform the following one-time steps to set up your docker environment and to obtain the required Synapse permissions: +If you don't want to deal with Python paths and dependencies, you can use Docker to run the pipeline. Perform the following one-time step to set up your docker environment and to obtain the required Synapse permissions: 1. Install [Docker](https://docs.docker.com/get-docker/). -2. Obtain download access to all required source files in Synapse, including accepting the terms of use on the AD Knowledge Portal backend [here](https://www.synapse.org/#!Synapse:syn5550378). If you see a green unlocked lock icon, then you should be good to go. -3. Obtain write access to the destination Synapse project, e.g. [Agora Synapse project](https://www.synapse.org/#!Synapse:syn11850457/files/) -4. Create a Synapse personal access token (PAT) -Once you have completed the one-time setup steps outlined above, execute the pipeline by running the following command and providing your PAT and the desired [config file](#config) as an argument. The following example command will execute the pipeline in Docker using ```test_config.yaml```: +Once you have completed the one-time setup step outlined above, execute the pipeline by running the following command and providing your PAT and the desired [config file](#config) as an argument. The following example command will execute the pipeline in Docker using ```test_config.yaml```: ``` # This creates a local docker image docker build -t agora-data-tools . -docker run -e SYNAPSE_AUTH_TOKEN= agora-data-tools python ./agoradatatools/process.py test_config.yaml +docker run -e SYNAPSE_AUTH_TOKEN= agora-data-tools adt test_config.yaml ``` ## Testing Github Workflow From d1a379fd5305ecfcd32776813cba326651c8c068 Mon Sep 17 00:00:00 2001 From: Brad Macdonald Date: Mon, 27 Mar 2023 15:37:08 -0600 Subject: [PATCH 30/31] updates Dockerfile to resolve local build error --- Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Dockerfile b/Dockerfile index 4816393f..bfe7aad0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,6 +2,8 @@ FROM python:3.9-slim-buster RUN apt-get update && \ apt-get install -y procps && \ + apt-get install -y gcc && \ + apt-get install -y g++ && \ rm -rf /var/lib/apt/lists/* WORKDIR /agora-data-tools From b014e6d61ff303d93577ba888c841317d6456b81 Mon Sep 17 00:00:00 2001 From: Brad Macdonald Date: Mon, 27 Mar 2023 16:42:53 -0600 Subject: [PATCH 31/31] fixes README typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 041ac2a2..d0873b25 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ Your configured Synapse credentials can be used to run this package both locally ### Locally Perform the following one-time steps to set up your local environment and to obtain the required Synapse permissions: -1. If you have not already, [install](https://cloud.google.com/python/docs/setup) a supported version of Python and. Versions supported by this package are all versions >3.7 and <3.11. Make sure that Python and `pip` are installed correctly and have been added to your PATH by running `python3 --version` and `pip3 --version`. If your installation was successful, your terminal will return the versions of Python and `pip` that you installed. +1. If you have not already, [install](https://cloud.google.com/python/docs/setup) a supported version of Python. Versions supported by this package are all versions >3.7 and <3.11. Make sure that Python and `pip` are installed correctly and have been added to your PATH by running `python3 --version` and `pip3 --version`. If your installation was successful, your terminal will return the versions of Python and `pip` that you installed. 2. Install `pipenv` by running `pip install pipenv`.