diff --git a/.github/workflows/fetch.yml b/.github/workflows/fetch.yml index a97a1d0..4d13bfe 100644 --- a/.github/workflows/fetch.yml +++ b/.github/workflows/fetch.yml @@ -1,15 +1,10 @@ name: Fetch Data on: - push: + # push: schedule: - - cron: '15 1 1-20 1,4,7,10 *' - - cron: '15 5 1-20 1,4,7,10 *' - - cron: '15 9 1-20 1,4,7,10 *' - - cron: '15 13 1-20 1,4,7,10 *' - - cron: '15 17 1-20 1,4,7,10 *' - - cron: '15 21 1-20 1,4,7,10 *' - - cron: '15 23 1-20 1,4,7,10 *' + # 1:15am onwards, days 1-20, first month of each quarter + - cron: '15 1,5,9,13,17,21,23 1-20 1,4,7,10 *' workflow_dispatch: jobs: @@ -34,7 +29,6 @@ jobs: pip install --upgrade pip pip install pipenv pipenv sync --system - pip install -r requirements.txt - name: Set PYTHONPATH run: echo "PYTHONPATH=./scripts" >> $GITHUB_ENV @@ -42,21 +36,3 @@ jobs: - name: Run fetch script run: | python scripts/1-fetch/gcs_fetched.py - - - name: Fetch and merge changes - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - python scripts/shared.py --operation fetch_and_merge --branch fetch-automation - - - name: Add and commit changes - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - python scripts/shared.py --operation add_and_commit --message "Automated data fetch and commit" - - - name: Push changes - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - python scripts/shared.py --operation push diff --git a/.github/workflows/process.yml b/.github/workflows/process.yml index 1cb79cd..3e0962e 100644 --- a/.github/workflows/process.yml +++ b/.github/workflows/process.yml @@ -3,13 +3,8 @@ name: Process Data on: # push: schedule: - - cron: '15 1 1-20 1,4,7,10 *' - - cron: '15 5 1-20 1,4,7,10 *' - - cron: '15 9 1-20 1,4,7,10 *' - - cron: '15 13 1-20 1,4,7,10 *' - - cron: '15 17 1-20 1,4,7,10 *' - - cron: '15 21 1-20 1,4,7,10 *' - - cron: '15 23 1-20 1,4,7,10 *' + # 1:15am onwards, days 1-20, second month of each quarter + - cron: '15 1,5,9,13,17,21,23 1-20 2,5,8,11 *' workflow_dispatch: jobs: @@ -30,7 +25,6 @@ jobs: pip install --upgrade pip pip install pipenv pipenv sync --system - pip install -r requirements.txt - name: Set PYTHONPATH run: echo "PYTHONPATH=./scripts" >> $GITHUB_ENV @@ -38,21 +32,3 @@ jobs: - name: Run process script run: | python scripts/2-process/gcs_processed.py - - - name: Fetch and merge changes - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - python scripts/shared.py --operation fetch_and_merge --branch fetch-automation - - - name: Add and commit changes - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - python scripts/shared.py --operation add_and_commit --message "Automated data processing and commit" - - - name: Push changes - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - python scripts/shared.py --operation push diff --git a/.github/workflows/report.yml b/.github/workflows/report.yml index b5513e5..49e5713 100644 --- a/.github/workflows/report.yml +++ b/.github/workflows/report.yml @@ -3,15 +3,11 @@ name: Generate Report on: push: schedule: - - cron: '15 1 1-20 1,4,7,10 *' - - cron: '15 5 1-20 1,4,7,10 *' - - cron: '15 9 1-20 1,4,7,10 *' - - cron: '15 13 1-20 1,4,7,10 *' - - cron: '15 17 1-20 1,4,7,10 *' - - cron: '15 21 1-20 1,4,7,10 *' - - cron: '15 23 1-20 1,4,7,10 *' + # 1:15am onwards, days 1-20, third month of each quarter + - cron: '15 1,5,9,13,17,21,23 1-20 3,6,9,12 *' workflow_dispatch: + jobs: generate-report: runs-on: ubuntu-latest @@ -30,7 +26,6 @@ jobs: pip install --upgrade pip pip install pipenv pipenv sync --system - pip install -r requirements.txt - name: Set PYTHONPATH run: echo "PYTHONPATH=./scripts" >> $GITHUB_ENV @@ -38,21 +33,3 @@ jobs: - name: Run report script run: | python scripts/3-report/gcs_reports.py - - - name: Fetch and merge changes - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - python scripts/shared.py --operation fetch_and_merge --branch fetch-automation - - - name: Add and commit changes - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - python scripts/shared.py --operation add_and_commit --message "Automated data report and commit" - - - name: Push changes - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - python scripts/shared.py --operation push diff --git a/Pipfile b/Pipfile index 1fe063a..d468799 100644 --- a/Pipfile +++ b/Pipfile @@ -5,6 +5,7 @@ name = "pypi" [packages] flickrapi = "*" +GitPython = "*" google-api-python-client = "*" internetarchive = "*" jupyterlab = ">=3.6.7" diff --git a/Pipfile.lock b/Pipfile.lock index e2f35e9..62479c8 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "4f7948d5e430e33cfea93eb230e5434e99deb5d3c1909cf833b2c9ca18a486c9" + "sha256": "c67ae4cf56f055f7a160df6e2d223fe3a2158b0f73ffd01670237af94b96445f" }, "pipfile-spec": 6, "requires": { @@ -124,19 +124,19 @@ }, "cachetools": { "hashes": [ - "sha256:0abad1021d3f8325b2fc1d2e9c8b9c9d57b04c3932657a72465447332c24d945", - "sha256:ba29e2dfa0b8b556606f097407ed1aa62080ee108ab0dc5ec9d6a723a007d105" + "sha256:3ae3b49a3d5e28a77a0be2b37dbcb89005058959cb2323858c2657c4a8cab474", + "sha256:b8adc2e7c07f105ced7bc56dbb6dfbe7c4a00acce20e2227b3f355be89bc6827" ], "markers": "python_version >= '3.7'", - "version": "==5.3.3" + "version": "==5.4.0" }, "certifi": { "hashes": [ - "sha256:3cd43f1c6fa7dedc5899d69d3ad0398fd018ad1a17fba83ddaf78aa46c747516", - "sha256:ddc6c8ce995e6987e7faf5e3f1b02b302836a0e5d98ece18392cb1a36c72ad56" + "sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b", + "sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90" ], "markers": "python_version >= '3.6'", - "version": "==2024.6.2" + "version": "==2024.7.4" }, "cffi": { "hashes": [ @@ -360,31 +360,31 @@ }, "debugpy": { "hashes": [ - "sha256:016a9fcfc2c6b57f939673c874310d8581d51a0fe0858e7fac4e240c5eb743cb", - "sha256:0de56aba8249c28a300bdb0672a9b94785074eb82eb672db66c8144fff673146", - "sha256:1a9fe0829c2b854757b4fd0a338d93bc17249a3bf69ecf765c61d4c522bb92a8", - "sha256:28acbe2241222b87e255260c76741e1fbf04fdc3b6d094fcf57b6c6f75ce1242", - "sha256:3a79c6f62adef994b2dbe9fc2cc9cc3864a23575b6e387339ab739873bea53d0", - "sha256:3bda0f1e943d386cc7a0e71bfa59f4137909e2ed947fb3946c506e113000f741", - "sha256:3ebb70ba1a6524d19fa7bb122f44b74170c447d5746a503e36adc244a20ac539", - "sha256:58911e8521ca0c785ac7a0539f1e77e0ce2df753f786188f382229278b4cdf23", - "sha256:6df9aa9599eb05ca179fb0b810282255202a66835c6efb1d112d21ecb830ddd3", - "sha256:7a3afa222f6fd3d9dfecd52729bc2e12c93e22a7491405a0ecbf9e1d32d45b39", - "sha256:7eb7bd2b56ea3bedb009616d9e2f64aab8fc7000d481faec3cd26c98a964bcdd", - "sha256:92116039b5500633cc8d44ecc187abe2dfa9b90f7a82bbf81d079fcdd506bae9", - "sha256:a2e658a9630f27534e63922ebf655a6ab60c370f4d2fc5c02a5b19baf4410ace", - "sha256:bfb20cb57486c8e4793d41996652e5a6a885b4d9175dd369045dad59eaacea42", - "sha256:caad2846e21188797a1f17fc09c31b84c7c3c23baf2516fed5b40b378515bbf0", - "sha256:d915a18f0597ef685e88bb35e5d7ab968964b7befefe1aaea1eb5b2640b586c7", - "sha256:dda73bf69ea479c8577a0448f8c707691152e6c4de7f0c4dec5a4bc11dee516e", - "sha256:e38beb7992b5afd9d5244e96ad5fa9135e94993b0c551ceebf3fe1a5d9beb234", - "sha256:edcc9f58ec0fd121a25bc950d4578df47428d72e1a0d66c07403b04eb93bcf98", - "sha256:efd3fdd3f67a7e576dd869c184c5dd71d9aaa36ded271939da352880c012e703", - "sha256:f696d6be15be87aef621917585f9bb94b1dc9e8aced570db1b8a6fc14e8f9b42", - "sha256:fd97ed11a4c7f6d042d320ce03d83b20c3fb40da892f994bc041bbc415d7a099" - ], - "markers": "python_version >= '3.8'", - "version": "==1.8.1" + "sha256:0600faef1d0b8d0e85c816b8bb0cb90ed94fc611f308d5fde28cb8b3d2ff0fe3", + "sha256:1523bc551e28e15147815d1397afc150ac99dbd3a8e64641d53425dba57b0ff9", + "sha256:15bc2f4b0f5e99bf86c162c91a74c0631dbd9cef3c6a1d1329c946586255e859", + "sha256:16c8dcab02617b75697a0a925a62943e26a0330da076e2a10437edd9f0bf3755", + "sha256:16e16df3a98a35c63c3ab1e4d19be4cbc7fdda92d9ddc059294f18910928e0ca", + "sha256:2cbd4d9a2fc5e7f583ff9bf11f3b7d78dfda8401e8bb6856ad1ed190be4281ad", + "sha256:3f8c3f7c53130a070f0fc845a0f2cee8ed88d220d6b04595897b66605df1edd6", + "sha256:40f062d6877d2e45b112c0bbade9a17aac507445fd638922b1a5434df34aed02", + "sha256:5a019d4574afedc6ead1daa22736c530712465c0c4cd44f820d803d937531b2d", + "sha256:5d3ccd39e4021f2eb86b8d748a96c766058b39443c1f18b2dc52c10ac2757835", + "sha256:62658aefe289598680193ff655ff3940e2a601765259b123dc7f89c0239b8cd3", + "sha256:7ee2e1afbf44b138c005e4380097d92532e1001580853a7cb40ed84e0ef1c3d2", + "sha256:7f8d57a98c5a486c5c7824bc0b9f2f11189d08d73635c326abef268f83950326", + "sha256:8a13417ccd5978a642e91fb79b871baded925d4fadd4dfafec1928196292aa0a", + "sha256:95378ed08ed2089221896b9b3a8d021e642c24edc8fef20e5d4342ca8be65c00", + "sha256:acdf39855f65c48ac9667b2801234fc64d46778021efac2de7e50907ab90c634", + "sha256:bd11fe35d6fd3431f1546d94121322c0ac572e1bfb1f6be0e9b8655fb4ea941e", + "sha256:c78ba1680f1015c0ca7115671fe347b28b446081dada3fedf54138f44e4ba031", + "sha256:cf327316ae0c0e7dd81eb92d24ba8b5e88bb4d1b585b5c0d32929274a66a5210", + "sha256:d3408fddd76414034c02880e891ea434e9a9cf3a69842098ef92f6e809d09afa", + "sha256:e24ccb0cd6f8bfaec68d577cb49e9c680621c336f347479b3fce060ba7c09ec1", + "sha256:f179af1e1bd4c88b0b9f0fa153569b24f6b6f3de33f94703336363ae62f4bf47" + ], + "markers": "python_version >= '3.8'", + "version": "==1.8.2" }, "decorator": { "hashes": [ @@ -418,10 +418,10 @@ }, "fastjsonschema": { "hashes": [ - "sha256:3672b47bc94178c9f23dbb654bf47440155d4db9df5f7bc47643315f9c405cd0", - "sha256:e3126a94bdc4623d3de4485f8d468a12f02a67921315ddc87836d6e456dc789d" + "sha256:3d48fc5300ee96f5d116f10fe6f28d938e6008f59a6a025c2649475b87f76a23", + "sha256:5875f0b0fa7a0043a91e93a9b8f793bcbbba9691e7fd83dca95c28ba26d21f0a" ], - "version": "==2.19.1" + "version": "==2.20.0" }, "flickrapi": { "hashes": [ @@ -433,51 +433,51 @@ }, "fonttools": { "hashes": [ - "sha256:099634631b9dd271d4a835d2b2a9e042ccc94ecdf7e2dd9f7f34f7daf333358d", - "sha256:0c555e039d268445172b909b1b6bdcba42ada1cf4a60e367d68702e3f87e5f64", - "sha256:1e677bfb2b4bd0e5e99e0f7283e65e47a9814b0486cb64a41adf9ef110e078f2", - "sha256:2367d47816cc9783a28645bc1dac07f8ffc93e0f015e8c9fc674a5b76a6da6e4", - "sha256:28d072169fe8275fb1a0d35e3233f6df36a7e8474e56cb790a7258ad822b6fd6", - "sha256:31f0e3147375002aae30696dd1dc596636abbd22fca09d2e730ecde0baad1d6b", - "sha256:3e0ad3c6ea4bd6a289d958a1eb922767233f00982cf0fe42b177657c86c80a8f", - "sha256:45b4afb069039f0366a43a5d454bc54eea942bfb66b3fc3e9a2c07ef4d617380", - "sha256:4a2a6ba400d386e904fd05db81f73bee0008af37799a7586deaa4aef8cd5971e", - "sha256:4f520d9ac5b938e6494f58a25c77564beca7d0199ecf726e1bd3d56872c59749", - "sha256:52a6e0a7a0bf611c19bc8ec8f7592bdae79c8296c70eb05917fd831354699b20", - "sha256:5a4788036201c908079e89ae3f5399b33bf45b9ea4514913f4dbbe4fac08efe0", - "sha256:6b4f04b1fbc01a3569d63359f2227c89ab294550de277fd09d8fca6185669fa4", - "sha256:715b41c3e231f7334cbe79dfc698213dcb7211520ec7a3bc2ba20c8515e8a3b5", - "sha256:73121a9b7ff93ada888aaee3985a88495489cc027894458cb1a736660bdfb206", - "sha256:74ae2441731a05b44d5988d3ac2cf784d3ee0a535dbed257cbfff4be8bb49eb9", - "sha256:7d6166192dcd925c78a91d599b48960e0a46fe565391c79fe6de481ac44d20ac", - "sha256:7f193f060391a455920d61684a70017ef5284ccbe6023bb056e15e5ac3de11d1", - "sha256:907fa0b662dd8fc1d7c661b90782ce81afb510fc4b7aa6ae7304d6c094b27bce", - "sha256:93156dd7f90ae0a1b0e8871032a07ef3178f553f0c70c386025a808f3a63b1f4", - "sha256:93bc9e5aaa06ff928d751dc6be889ff3e7d2aa393ab873bc7f6396a99f6fbb12", - "sha256:95db0c6581a54b47c30860d013977b8a14febc206c8b5ff562f9fe32738a8aca", - "sha256:973d030180eca8255b1bce6ffc09ef38a05dcec0e8320cc9b7bcaa65346f341d", - "sha256:9cd7a6beec6495d1dffb1033d50a3f82dfece23e9eb3c20cd3c2444d27514068", - "sha256:9fe9096a60113e1d755e9e6bda15ef7e03391ee0554d22829aa506cdf946f796", - "sha256:a209d2e624ba492df4f3bfad5996d1f76f03069c6133c60cd04f9a9e715595ec", - "sha256:a239afa1126b6a619130909c8404070e2b473dd2b7fc4aacacd2e763f8597fea", - "sha256:ba9f09ff17f947392a855e3455a846f9855f6cf6bec33e9a427d3c1d254c712f", - "sha256:bb7273789f69b565d88e97e9e1da602b4ee7ba733caf35a6c2affd4334d4f005", - "sha256:bd5bc124fae781a4422f61b98d1d7faa47985f663a64770b78f13d2c072410c2", - "sha256:bff98816cb144fb7b85e4b5ba3888a33b56ecef075b0e95b95bcd0a5fbf20f06", - "sha256:c4ee5a24e281fbd8261c6ab29faa7fd9a87a12e8c0eed485b705236c65999109", - "sha256:c93ed66d32de1559b6fc348838c7572d5c0ac1e4a258e76763a5caddd8944002", - "sha256:d1a24f51a3305362b94681120c508758a88f207fa0a681c16b5a4172e9e6c7a9", - "sha256:d8f191a17369bd53a5557a5ee4bab91d5330ca3aefcdf17fab9a497b0e7cff7a", - "sha256:daaef7390e632283051e3cf3e16aff2b68b247e99aea916f64e578c0449c9c68", - "sha256:e40013572bfb843d6794a3ce076c29ef4efd15937ab833f520117f8eccc84fd6", - "sha256:eceef49f457253000e6a2d0f7bd08ff4e9fe96ec4ffce2dbcb32e34d9c1b8161", - "sha256:ee595d7ba9bba130b2bec555a40aafa60c26ce68ed0cf509983e0f12d88674fd", - "sha256:ef50ec31649fbc3acf6afd261ed89d09eb909b97cc289d80476166df8438524d", - "sha256:fa1f3e34373aa16045484b4d9d352d4c6b5f9f77ac77a178252ccbc851e8b2ee", - "sha256:fca66d9ff2ac89b03f5aa17e0b21a97c21f3491c46b583bb131eb32c7bab33af" - ], - "markers": "python_version >= '3.8'", - "version": "==4.53.0" + "sha256:02569e9a810f9d11f4ae82c391ebc6fb5730d95a0657d24d754ed7763fb2d122", + "sha256:0679a30b59d74b6242909945429dbddb08496935b82f91ea9bf6ad240ec23397", + "sha256:10f5e6c3510b79ea27bb1ebfcc67048cde9ec67afa87c7dd7efa5c700491ac7f", + "sha256:2af40ae9cdcb204fc1d8f26b190aa16534fcd4f0df756268df674a270eab575d", + "sha256:32f029c095ad66c425b0ee85553d0dc326d45d7059dbc227330fc29b43e8ba60", + "sha256:35250099b0cfb32d799fb5d6c651220a642fe2e3c7d2560490e6f1d3f9ae9169", + "sha256:3b3c8ebafbee8d9002bd8f1195d09ed2bd9ff134ddec37ee8f6a6375e6a4f0e8", + "sha256:4824c198f714ab5559c5be10fd1adf876712aa7989882a4ec887bf1ef3e00e31", + "sha256:5ff7e5e9bad94e3a70c5cd2fa27f20b9bb9385e10cddab567b85ce5d306ea923", + "sha256:651390c3b26b0c7d1f4407cad281ee7a5a85a31a110cbac5269de72a51551ba2", + "sha256:6e08f572625a1ee682115223eabebc4c6a2035a6917eac6f60350aba297ccadb", + "sha256:6ed170b5e17da0264b9f6fae86073be3db15fa1bd74061c8331022bca6d09bab", + "sha256:73379d3ffdeecb376640cd8ed03e9d2d0e568c9d1a4e9b16504a834ebadc2dfb", + "sha256:75a157d8d26c06e64ace9df037ee93a4938a4606a38cb7ffaf6635e60e253b7a", + "sha256:791b31ebbc05197d7aa096bbc7bd76d591f05905d2fd908bf103af4488e60670", + "sha256:7b6b35e52ddc8fb0db562133894e6ef5b4e54e1283dff606fda3eed938c36fc8", + "sha256:84ec3fb43befb54be490147b4a922b5314e16372a643004f182babee9f9c3407", + "sha256:8959a59de5af6d2bec27489e98ef25a397cfa1774b375d5787509c06659b3671", + "sha256:9dfdae43b7996af46ff9da520998a32b105c7f098aeea06b2226b30e74fbba88", + "sha256:9e6ceba2a01b448e36754983d376064730690401da1dd104ddb543519470a15f", + "sha256:9efd176f874cb6402e607e4cc9b4a9cd584d82fc34a4b0c811970b32ba62501f", + "sha256:a1c7c5aa18dd3b17995898b4a9b5929d69ef6ae2af5b96d585ff4005033d82f0", + "sha256:aae7bd54187e8bf7fd69f8ab87b2885253d3575163ad4d669a262fe97f0136cb", + "sha256:b21952c092ffd827504de7e66b62aba26fdb5f9d1e435c52477e6486e9d128b2", + "sha256:b96cd370a61f4d083c9c0053bf634279b094308d52fdc2dd9a22d8372fdd590d", + "sha256:becc5d7cb89c7b7afa8321b6bb3dbee0eec2b57855c90b3e9bf5fb816671fa7c", + "sha256:bee32ea8765e859670c4447b0817514ca79054463b6b79784b08a8df3a4d78e3", + "sha256:c6e7170d675d12eac12ad1a981d90f118c06cf680b42a2d74c6c931e54b50719", + "sha256:c818c058404eb2bba05e728d38049438afd649e3c409796723dfc17cd3f08749", + "sha256:c8696544c964500aa9439efb6761947393b70b17ef4e82d73277413f291260a4", + "sha256:c9cd19cf4fe0595ebdd1d4915882b9440c3a6d30b008f3cc7587c1da7b95be5f", + "sha256:d4d0096cb1ac7a77b3b41cd78c9b6bc4a400550e21dc7a92f2b5ab53ed74eb02", + "sha256:d92d3c2a1b39631a6131c2fa25b5406855f97969b068e7e08413325bc0afba58", + "sha256:da33440b1413bad53a8674393c5d29ce64d8c1a15ef8a77c642ffd900d07bfe1", + "sha256:e013aae589c1c12505da64a7d8d023e584987e51e62006e1bb30d72f26522c41", + "sha256:e128778a8e9bc11159ce5447f76766cefbd876f44bd79aff030287254e4752c4", + "sha256:e54f1bba2f655924c1138bbc7fa91abd61f45c68bd65ab5ed985942712864bbb", + "sha256:e5b708073ea3d684235648786f5f6153a48dc8762cdfe5563c57e80787c29fbb", + "sha256:e8bf06b94694251861ba7fdeea15c8ec0967f84c3d4143ae9daf42bbc7717fe3", + "sha256:f08df60fbd8d289152079a65da4e66a447efc1d5d5a4d3f299cdd39e3b2e4a7d", + "sha256:f1f8758a2ad110bd6432203a344269f445a2907dc24ef6bccfd0ac4e14e0d71d", + "sha256:f677ce218976496a587ab17140da141557beb91d2a5c1a14212c994093f2eae2" + ], + "markers": "python_version >= '3.8'", + "version": "==4.53.1" }, "fqdn": { "hashes": [ @@ -486,30 +486,47 @@ ], "version": "==1.5.1" }, + "gitdb": { + "hashes": [ + "sha256:81a3407ddd2ee8df444cbacea00e2d038e40150acfa3001696fe0dcf1d3adfa4", + "sha256:bf5421126136d6d0af55bc1e7c1af1c397a34f5b7bd79e776cd3e89785c2b04b" + ], + "markers": "python_version >= '3.7'", + "version": "==4.0.11" + }, + "gitpython": { + "hashes": [ + "sha256:35f314a9f878467f5453cc1fee295c3e18e52f1b99f10f6cf5b1682e968a9e7c", + "sha256:eec7ec56b92aad751f9912a73404bc02ba212a23adb2c7098ee668417051a1ff" + ], + "index": "pypi", + "markers": "python_version >= '3.7'", + "version": "==3.1.43" + }, "google-api-core": { "hashes": [ - "sha256:8661eec4078c35428fd3f69a2c7ee29e342896b70f01d1a1cbcb334372dd6251", - "sha256:cf1b7c2694047886d2af1128a03ae99e391108a08804f87cfd35970e49c9cd10" + "sha256:f12a9b8309b5e21d92483bbd47ce2c445861ec7d269ef6784ecc0ea8c1fa6125", + "sha256:f4695f1e3650b316a795108a76a1c416e6afb036199d1c1f1f110916df479ffd" ], "markers": "python_version >= '3.7'", - "version": "==2.19.0" + "version": "==2.19.1" }, "google-api-python-client": { "hashes": [ - "sha256:293092905b66a046d3187a99ac454e12b00cc2c70444f26eb2f1f9c1a82720b4", - "sha256:396fe676ea0dfed066654dcf9f8dea77a1342f9d9bb23bb88e45b7b81e773926" + "sha256:1850a92505d91a82e2ca1635ab2b8dff179f4b67082c2651e1db332e8039840c", + "sha256:ed4bc3abe2c060a87412465b4e8254620bbbc548eefc5388e2c5ff912d36a68b" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==2.133.0" + "version": "==2.139.0" }, "google-auth": { "hashes": [ - "sha256:8df7da660f62757388b8a7f249df13549b3373f24388cb5d2f1dd91cc18180b5", - "sha256:ab630a1320f6720909ad76a7dbdb6841cdf5c66b328d690027e4867bdfb16688" + "sha256:49315be72c55a6a37d62819e3573f6b416aca00721f7e3e31a008d928bf64022", + "sha256:53326ea2ebec768070a94bee4e1b9194c9646ea0c2bd72422785bd0f9abfad7b" ], "markers": "python_version >= '3.7'", - "version": "==2.30.0" + "version": "==2.32.0" }, "google-auth-httplib2": { "hashes": [ @@ -520,11 +537,11 @@ }, "googleapis-common-protos": { "hashes": [ - "sha256:0e1c2cdfcbc354b76e4a211a35ea35d6926a835cba1377073c4861db904a1877", - "sha256:c6442f7a0a6b2a80369457d79e6672bb7dcbaab88e0848302497e3ec80780a6a" + "sha256:27a2499c7e8aff199665b22741997e485eccc8645aa9176c7c988e6fae507945", + "sha256:27c5abdffc4911f28101e635de1533fb4cfd2c37fbaa9174587c799fac90aa87" ], "markers": "python_version >= '3.7'", - "version": "==1.63.1" + "version": "==1.63.2" }, "h11": { "hashes": [ @@ -577,19 +594,19 @@ }, "ipykernel": { "hashes": [ - "sha256:1181e653d95c6808039c509ef8e67c4126b3b3af7781496c7cbfb5ed938a27da", - "sha256:3d44070060f9475ac2092b760123fadf105d2e2493c24848b6691a7c4f42af5c" + "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5", + "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215" ], "markers": "python_version >= '3.8'", - "version": "==6.29.4" + "version": "==6.29.5" }, "ipython": { "hashes": [ - "sha256:53eee7ad44df903a06655871cbab66d156a051fd86f3ec6750470ac9604ac1ab", - "sha256:c6ed726a140b6e725b911528f80439c534fac915246af3efc39440a6b0f9d716" + "sha256:1cec0fbba8404af13facebe83d04436a7434c7400e59f47acf467c64abd0956c", + "sha256:e6b347c27bdf9c32ee9d31ae85defc525755a1869f14057e900675b9e8d6e6ff" ], "markers": "python_version >= '3.10'", - "version": "==8.25.0" + "version": "==8.26.0" }, "isoduration": { "hashes": [ @@ -643,11 +660,11 @@ "format-nongpl" ], "hashes": [ - "sha256:5b22d434a45935119af990552c862e5d6d564e8f6601206b305a61fdf661a2b7", - "sha256:ff4cfd6b1367a40e7bc6411caec72effadd3db0bbe5017de188f2d6108335802" + "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4", + "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566" ], "markers": "python_version >= '3.8'", - "version": "==4.22.0" + "version": "==4.23.0" }, "jsonschema-specifications": { "hashes": [ @@ -691,11 +708,11 @@ }, "jupyter-server": { "hashes": [ - "sha256:12558d158ec7a0653bf96cc272bc7ad79e0127d503b982ed144399346694f726", - "sha256:16f7177c3a4ea8fe37784e2d31271981a812f0b2874af17339031dc3510cc2a5" + "sha256:47ff506127c2f7851a17bf4713434208fc490955d0e8632e95014a9a9afbeefd", + "sha256:66095021aa9638ced276c248b1d81862e4c50f292d575920bbe960de1c56b12b" ], "markers": "python_version >= '3.8'", - "version": "==2.14.1" + "version": "==2.14.2" }, "jupyter-server-terminals": { "hashes": [ @@ -707,12 +724,12 @@ }, "jupyterlab": { "hashes": [ - "sha256:59ee9b839f43308c3dfd55d72d1f1a299ed42a7f91f2d1afe9c12a783f9e525f", - "sha256:a534b6a25719a92a40d514fb133a9fe8f0d9981b0bbce5d8a5fcaa33344a3038" + "sha256:343a979fb9582fd08c8511823e320703281cd072a0049bcdafdc7afeda7f2537", + "sha256:807a7ec73637744f879e112060d4b9d9ebe028033b7a429b2d1f4fc523d00245" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==4.2.2" + "version": "==4.2.4" }, "jupyterlab-pygments": { "hashes": [ @@ -724,11 +741,11 @@ }, "jupyterlab-server": { "hashes": [ - "sha256:15cbb349dc45e954e09bacf81b9f9bcb10815ff660fb2034ecd7417db3a7ea27", - "sha256:54aa2d64fd86383b5438d9f0c032f043c4d8c0264b8af9f60bd061157466ea43" + "sha256:e697488f66c3db49df675158a77b3b017520d772c6e1548c7d9bcc5df7944ee4", + "sha256:eb36caca59e74471988f0ae25c77945610b887f777255aa21f8065def9e51ed4" ], "markers": "python_version >= '3.8'", - "version": "==2.27.2" + "version": "==2.27.3" }, "kiwisolver": { "hashes": [ @@ -908,39 +925,39 @@ }, "matplotlib": { "hashes": [ - "sha256:063af8587fceeac13b0936c42a2b6c732c2ab1c98d38abc3337e430e1ff75e38", - "sha256:06a478f0d67636554fa78558cfbcd7b9dba85b51f5c3b5a0c9be49010cf5f321", - "sha256:0a490715b3b9984fa609116481b22178348c1a220a4499cda79132000a79b4db", - "sha256:0fc51eaa5262553868461c083d9adadb11a6017315f3a757fc45ec6ec5f02888", - "sha256:13beb4840317d45ffd4183a778685e215939be7b08616f431c7795276e067463", - "sha256:290d304e59be2b33ef5c2d768d0237f5bd132986bdcc66f80bc9bcc300066a03", - "sha256:2bcee1dffaf60fe7656183ac2190bd630842ff87b3153afb3e384d966b57fe56", - "sha256:2e7f03e5cbbfacdd48c8ea394d365d91ee8f3cae7e6ec611409927b5ed997ee4", - "sha256:3f988bafb0fa39d1074ddd5bacd958c853e11def40800c5824556eb630f94d3b", - "sha256:52146fc3bd7813cc784562cb93a15788be0b2875c4655e2cc6ea646bfa30344b", - "sha256:550cdda3adbd596078cca7d13ed50b77879104e2e46392dcd7c75259d8f00e85", - "sha256:616fabf4981a3b3c5a15cd95eba359c8489c4e20e03717aea42866d8d0465956", - "sha256:76cce0f31b351e3551d1f3779420cf8f6ec0d4a8cf9c0237a3b549fd28eb4abb", - "sha256:7ff2e239c26be4f24bfa45860c20ffccd118d270c5b5d081fa4ea409b5469fcd", - "sha256:8146ce83cbc5dc71c223a74a1996d446cd35cfb6a04b683e1446b7e6c73603b7", - "sha256:81c40af649d19c85f8073e25e5806926986806fa6d54be506fbf02aef47d5a89", - "sha256:9a2fa6d899e17ddca6d6526cf6e7ba677738bf2a6a9590d702c277204a7c6152", - "sha256:a5be985db2596d761cdf0c2eaf52396f26e6a64ab46bd8cd810c48972349d1be", - "sha256:af4001b7cae70f7eaacfb063db605280058246de590fa7874f00f62259f2df7e", - "sha256:bd4f2831168afac55b881db82a7730992aa41c4f007f1913465fb182d6fb20c0", - "sha256:bdd1ecbe268eb3e7653e04f451635f0fb0f77f07fd070242b44c076c9106da84", - "sha256:c53aeb514ccbbcbab55a27f912d79ea30ab21ee0531ee2c09f13800efb272674", - "sha256:c79f3a585f1368da6049318bdf1f85568d8d04b2e89fc24b7e02cc9b62017382", - "sha256:cd53c79fd02f1c1808d2cfc87dd3cf4dbc63c5244a58ee7944497107469c8d8a", - "sha256:d38e85a1a6d732f645f1403ce5e6727fd9418cd4574521d5803d3d94911038e5", - "sha256:d91a4ffc587bacf5c4ce4ecfe4bcd23a4b675e76315f2866e588686cc97fccdf", - "sha256:e6d29ea6c19e34b30fb7d88b7081f869a03014f66fe06d62cc77d5a6ea88ed7a", - "sha256:eaf3978060a106fab40c328778b148f590e27f6fa3cd15a19d6892575bce387d", - "sha256:fe428e191ea016bb278758c8ee82a8129c51d81d8c4bc0846c09e7e8e9057241" + "sha256:0000354e32efcfd86bda75729716b92f5c2edd5b947200be9881f0a671565c33", + "sha256:0c584210c755ae921283d21d01f03a49ef46d1afa184134dd0f95b0202ee6f03", + "sha256:0e835c6988edc3d2d08794f73c323cc62483e13df0194719ecb0723b564e0b5c", + "sha256:0fc001516ffcf1a221beb51198b194d9230199d6842c540108e4ce109ac05cc0", + "sha256:11fed08f34fa682c2b792942f8902e7aefeed400da71f9e5816bea40a7ce28fe", + "sha256:208cbce658b72bf6a8e675058fbbf59f67814057ae78165d8a2f87c45b48d0ff", + "sha256:2315837485ca6188a4b632c5199900e28d33b481eb083663f6a44cfc8987ded3", + "sha256:26040c8f5121cd1ad712abffcd4b5222a8aec3a0fe40bc8542c94331deb8780d", + "sha256:3fda72d4d472e2ccd1be0e9ccb6bf0d2eaf635e7f8f51d737ed7e465ac020cb3", + "sha256:421851f4f57350bcf0811edd754a708d2275533e84f52f6760b740766c6747a7", + "sha256:44a21d922f78ce40435cb35b43dd7d573cf2a30138d5c4b709d19f00e3907fd7", + "sha256:4db17fea0ae3aceb8e9ac69c7e3051bae0b3d083bfec932240f9bf5d0197a049", + "sha256:565d572efea2b94f264dd86ef27919515aa6d629252a169b42ce5f570db7f37b", + "sha256:591d3a88903a30a6d23b040c1e44d1afdd0d778758d07110eb7596f811f31842", + "sha256:6d397fd8ccc64af2ec0af1f0efc3bacd745ebfb9d507f3f552e8adb689ed730a", + "sha256:7ccd6270066feb9a9d8e0705aa027f1ff39f354c72a87efe8fa07632f30fc6bb", + "sha256:82cd5acf8f3ef43f7532c2f230249720f5dc5dd40ecafaf1c60ac8200d46d7eb", + "sha256:83c6a792f1465d174c86d06f3ae85a8fe36e6f5964633ae8106312ec0921fdf5", + "sha256:84b3ba8429935a444f1fdc80ed930babbe06725bcf09fbeb5c8757a2cd74af04", + "sha256:a0c977c5c382f6696caf0bd277ef4f936da7e2aa202ff66cad5f0ac1428ee15b", + "sha256:a973c53ad0668c53e0ed76b27d2eeeae8799836fd0d0caaa4ecc66bf4e6676c0", + "sha256:ab38a4f3772523179b2f772103d8030215b318fef6360cb40558f585bf3d017f", + "sha256:b3fce58971b465e01b5c538f9d44915640c20ec5ff31346e963c9e1cd66fa812", + "sha256:b918770bf3e07845408716e5bbda17eadfc3fcbd9307dc67f37d6cf834bb3d98", + "sha256:d12cb1837cffaac087ad6b44399d5e22b78c729de3cdae4629e252067b705e2b", + "sha256:dc23f48ab630474264276be156d0d7710ac6c5a09648ccdf49fef9200d8cbe80", + "sha256:dd2a59ff4b83d33bca3b5ec58203cc65985367812cb8c257f3e101632be86d92", + "sha256:de06b19b8db95dd33d0dc17c926c7c9ebed9f572074b6fac4f65068a6814d010", + "sha256:f1f2e5d29e9435c97ad4c36fb6668e89aee13d48c75893e25cef064675038ac9" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==3.9.0" + "version": "==3.9.1" }, "matplotlib-inline": { "hashes": [ @@ -1000,46 +1017,55 @@ }, "numpy": { "hashes": [ - "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b", - "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818", - "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20", - "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0", - "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010", - "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a", - "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea", - "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c", - "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71", - "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110", - "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be", - "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a", - "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a", - "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5", - "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed", - "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd", - "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c", - "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e", - "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0", - "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c", - "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a", - "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b", - "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0", - "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6", - "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2", - "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a", - "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30", - "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218", - "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5", - "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07", - "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2", - "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4", - "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764", - "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef", - "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3", - "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f" + "sha256:08458fbf403bff5e2b45f08eda195d4b0c9b35682311da5a5a0a0925b11b9bd8", + "sha256:0fbb536eac80e27a2793ffd787895242b7f18ef792563d742c2d673bfcb75134", + "sha256:12f5d865d60fb9734e60a60f1d5afa6d962d8d4467c120a1c0cda6eb2964437d", + "sha256:15eb4eca47d36ec3f78cde0a3a2ee24cf05ca7396ef808dda2c0ddad7c2bde67", + "sha256:173a00b9995f73b79eb0191129f2455f1e34c203f559dd118636858cc452a1bf", + "sha256:1b902ce0e0a5bb7704556a217c4f63a7974f8f43e090aff03fcf262e0b135e02", + "sha256:1f682ea61a88479d9498bf2091fdcd722b090724b08b31d63e022adc063bad59", + "sha256:1f87fec1f9bc1efd23f4227becff04bd0e979e23ca50cc92ec88b38489db3b55", + "sha256:24a0e1befbfa14615b49ba9659d3d8818a0f4d8a1c5822af8696706fbda7310c", + "sha256:2c3a346ae20cfd80b6cfd3e60dc179963ef2ea58da5ec074fd3d9e7a1e7ba97f", + "sha256:36d3a9405fd7c511804dc56fc32974fa5533bdeb3cd1604d6b8ff1d292b819c4", + "sha256:3fdabe3e2a52bc4eff8dc7a5044342f8bd9f11ef0934fcd3289a788c0eb10018", + "sha256:4127d4303b9ac9f94ca0441138acead39928938660ca58329fe156f84b9f3015", + "sha256:4658c398d65d1b25e1760de3157011a80375da861709abd7cef3bad65d6543f9", + "sha256:485b87235796410c3519a699cfe1faab097e509e90ebb05dcd098db2ae87e7b3", + "sha256:529af13c5f4b7a932fb0e1911d3a75da204eff023ee5e0e79c1751564221a5c8", + "sha256:5a3d94942c331dd4e0e1147f7a8699a4aa47dffc11bf8a1523c12af8b2e91bbe", + "sha256:5daab361be6ddeb299a918a7c0864fa8618af66019138263247af405018b04e1", + "sha256:61728fba1e464f789b11deb78a57805c70b2ed02343560456190d0501ba37b0f", + "sha256:6790654cb13eab303d8402354fabd47472b24635700f631f041bd0b65e37298a", + "sha256:69ff563d43c69b1baba77af455dd0a839df8d25e8590e79c90fcbe1499ebde42", + "sha256:6bf4e6f4a2a2e26655717a1983ef6324f2664d7011f6ef7482e8c0b3d51e82ac", + "sha256:6e4eeb6eb2fced786e32e6d8df9e755ce5be920d17f7ce00bc38fcde8ccdbf9e", + "sha256:72dc22e9ec8f6eaa206deb1b1355eb2e253899d7347f5e2fae5f0af613741d06", + "sha256:75b4e316c5902d8163ef9d423b1c3f2f6252226d1aa5cd8a0a03a7d01ffc6268", + "sha256:7b9853803278db3bdcc6cd5beca37815b133e9e77ff3d4733c247414e78eb8d1", + "sha256:7d6fddc5fe258d3328cd8e3d7d3e02234c5d70e01ebe377a6ab92adb14039cb4", + "sha256:81b0893a39bc5b865b8bf89e9ad7807e16717f19868e9d234bdaf9b1f1393868", + "sha256:8efc84f01c1cd7e34b3fb310183e72fcdf55293ee736d679b6d35b35d80bba26", + "sha256:8fae4ebbf95a179c1156fab0b142b74e4ba4204c87bde8d3d8b6f9c34c5825ef", + "sha256:99d0d92a5e3613c33a5f01db206a33f8fdf3d71f2912b0de1739894668b7a93b", + "sha256:9adbd9bb520c866e1bfd7e10e1880a1f7749f1f6e5017686a5fbb9b72cf69f82", + "sha256:a1e01dcaab205fbece13c1410253a9eea1b1c9b61d237b6fa59bcc46e8e89343", + "sha256:a8fc2de81ad835d999113ddf87d1ea2b0f4704cbd947c948d2f5513deafe5a7b", + "sha256:b83e16a5511d1b1f8a88cbabb1a6f6a499f82c062a4251892d9ad5d609863fb7", + "sha256:bb2124fdc6e62baae159ebcfa368708867eb56806804d005860b6007388df171", + "sha256:bfc085b28d62ff4009364e7ca34b80a9a080cbd97c2c0630bb5f7f770dae9414", + "sha256:cbab9fc9c391700e3e1287666dfd82d8666d10e69a6c4a09ab97574c0b7ee0a7", + "sha256:e5eeca8067ad04bc8a2a8731183d51d7cbaac66d86085d5f4766ee6bf19c7f87", + "sha256:e9e81fa9017eaa416c056e5d9e71be93d05e2c3c2ab308d23307a8bc4443c368", + "sha256:ea2326a4dca88e4a274ba3a4405eb6c6467d3ffbd8c7d38632502eaae3820587", + "sha256:eacf3291e263d5a67d8c1a581a8ebbcfd6447204ef58828caf69a5e3e8c75990", + "sha256:ec87f5f8aca726117a1c9b7083e7656a9d0d606eec7299cc067bb83d26f16e0c", + "sha256:f1659887361a7151f89e79b276ed8dff3d75877df906328f14d8bb40bb4f5101", + "sha256:f9cf5ea551aec449206954b075db819f52adc1638d46a6738253a712d553c7b4" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==1.26.4" + "version": "==2.0.1" }, "oauthlib": { "hashes": [ @@ -1127,78 +1153,89 @@ }, "pillow": { "hashes": [ - "sha256:048ad577748b9fa4a99a0548c64f2cb8d672d5bf2e643a739ac8faff1164238c", - "sha256:048eeade4c33fdf7e08da40ef402e748df113fd0b4584e32c4af74fe78baaeb2", - "sha256:0ba26351b137ca4e0db0342d5d00d2e355eb29372c05afd544ebf47c0956ffeb", - "sha256:0ea2a783a2bdf2a561808fe4a7a12e9aa3799b701ba305de596bc48b8bdfce9d", - "sha256:1530e8f3a4b965eb6a7785cf17a426c779333eb62c9a7d1bbcf3ffd5bf77a4aa", - "sha256:16563993329b79513f59142a6b02055e10514c1a8e86dca8b48a893e33cf91e3", - "sha256:19aeb96d43902f0a783946a0a87dbdad5c84c936025b8419da0a0cd7724356b1", - "sha256:1a1d1915db1a4fdb2754b9de292642a39a7fb28f1736699527bb649484fb966a", - "sha256:1b87bd9d81d179bd8ab871603bd80d8645729939f90b71e62914e816a76fc6bd", - "sha256:1dfc94946bc60ea375cc39cff0b8da6c7e5f8fcdc1d946beb8da5c216156ddd8", - "sha256:2034f6759a722da3a3dbd91a81148cf884e91d1b747992ca288ab88c1de15999", - "sha256:261ddb7ca91fcf71757979534fb4c128448b5b4c55cb6152d280312062f69599", - "sha256:2ed854e716a89b1afcedea551cd85f2eb2a807613752ab997b9974aaa0d56936", - "sha256:3102045a10945173d38336f6e71a8dc71bcaeed55c3123ad4af82c52807b9375", - "sha256:339894035d0ede518b16073bdc2feef4c991ee991a29774b33e515f1d308e08d", - "sha256:412444afb8c4c7a6cc11a47dade32982439925537e483be7c0ae0cf96c4f6a0b", - "sha256:4203efca580f0dd6f882ca211f923168548f7ba334c189e9eab1178ab840bf60", - "sha256:45ebc7b45406febf07fef35d856f0293a92e7417ae7933207e90bf9090b70572", - "sha256:4b5ec25d8b17217d635f8935dbc1b9aa5907962fae29dff220f2659487891cd3", - "sha256:4c8e73e99da7db1b4cad7f8d682cf6abad7844da39834c288fbfa394a47bbced", - "sha256:4e6f7d1c414191c1199f8996d3f2282b9ebea0945693fb67392c75a3a320941f", - "sha256:4eaa22f0d22b1a7e93ff0a596d57fdede2e550aecffb5a1ef1106aaece48e96b", - "sha256:50b8eae8f7334ec826d6eeffaeeb00e36b5e24aa0b9df322c247539714c6df19", - "sha256:50fd3f6b26e3441ae07b7c979309638b72abc1a25da31a81a7fbd9495713ef4f", - "sha256:51243f1ed5161b9945011a7360e997729776f6e5d7005ba0c6879267d4c5139d", - "sha256:5d512aafa1d32efa014fa041d38868fda85028e3f930a96f85d49c7d8ddc0383", - "sha256:5f77cf66e96ae734717d341c145c5949c63180842a545c47a0ce7ae52ca83795", - "sha256:6b02471b72526ab8a18c39cb7967b72d194ec53c1fd0a70b050565a0f366d355", - "sha256:6fb1b30043271ec92dc65f6d9f0b7a830c210b8a96423074b15c7bc999975f57", - "sha256:7161ec49ef0800947dc5570f86568a7bb36fa97dd09e9827dc02b718c5643f09", - "sha256:72d622d262e463dfb7595202d229f5f3ab4b852289a1cd09650362db23b9eb0b", - "sha256:74d28c17412d9caa1066f7a31df8403ec23d5268ba46cd0ad2c50fb82ae40462", - "sha256:78618cdbccaa74d3f88d0ad6cb8ac3007f1a6fa5c6f19af64b55ca170bfa1edf", - "sha256:793b4e24db2e8742ca6423d3fde8396db336698c55cd34b660663ee9e45ed37f", - "sha256:798232c92e7665fe82ac085f9d8e8ca98826f8e27859d9a96b41d519ecd2e49a", - "sha256:81d09caa7b27ef4e61cb7d8fbf1714f5aec1c6b6c5270ee53504981e6e9121ad", - "sha256:8ab74c06ffdab957d7670c2a5a6e1a70181cd10b727cd788c4dd9005b6a8acd9", - "sha256:8eb0908e954d093b02a543dc963984d6e99ad2b5e36503d8a0aaf040505f747d", - "sha256:90b9e29824800e90c84e4022dd5cc16eb2d9605ee13f05d47641eb183cd73d45", - "sha256:9797a6c8fe16f25749b371c02e2ade0efb51155e767a971c61734b1bf6293994", - "sha256:9d2455fbf44c914840c793e89aa82d0e1763a14253a000743719ae5946814b2d", - "sha256:9d3bea1c75f8c53ee4d505c3e67d8c158ad4df0d83170605b50b64025917f338", - "sha256:9e2ec1e921fd07c7cda7962bad283acc2f2a9ccc1b971ee4b216b75fad6f0463", - "sha256:9e91179a242bbc99be65e139e30690e081fe6cb91a8e77faf4c409653de39451", - "sha256:a0eaa93d054751ee9964afa21c06247779b90440ca41d184aeb5d410f20ff591", - "sha256:a2c405445c79c3f5a124573a051062300936b0281fee57637e706453e452746c", - "sha256:aa7e402ce11f0885305bfb6afb3434b3cd8f53b563ac065452d9d5654c7b86fd", - "sha256:aff76a55a8aa8364d25400a210a65ff59d0168e0b4285ba6bf2bd83cf675ba32", - "sha256:b09b86b27a064c9624d0a6c54da01c1beaf5b6cadfa609cf63789b1d08a797b9", - "sha256:b14f16f94cbc61215115b9b1236f9c18403c15dd3c52cf629072afa9d54c1cbf", - "sha256:b50811d664d392f02f7761621303eba9d1b056fb1868c8cdf4231279645c25f5", - "sha256:b7bc2176354defba3edc2b9a777744462da2f8e921fbaf61e52acb95bafa9828", - "sha256:c78e1b00a87ce43bb37642c0812315b411e856a905d58d597750eb79802aaaa3", - "sha256:c83341b89884e2b2e55886e8fbbf37c3fa5efd6c8907124aeb72f285ae5696e5", - "sha256:ca2870d5d10d8726a27396d3ca4cf7976cec0f3cb706debe88e3a5bd4610f7d2", - "sha256:ccce24b7ad89adb5a1e34a6ba96ac2530046763912806ad4c247356a8f33a67b", - "sha256:cd5e14fbf22a87321b24c88669aad3a51ec052eb145315b3da3b7e3cc105b9a2", - "sha256:ce49c67f4ea0609933d01c0731b34b8695a7a748d6c8d186f95e7d085d2fe475", - "sha256:d33891be6df59d93df4d846640f0e46f1a807339f09e79a8040bc887bdcd7ed3", - "sha256:d3b2348a78bc939b4fed6552abfd2e7988e0f81443ef3911a4b8498ca084f6eb", - "sha256:d886f5d353333b4771d21267c7ecc75b710f1a73d72d03ca06df49b09015a9ef", - "sha256:d93480005693d247f8346bc8ee28c72a2191bdf1f6b5db469c096c0c867ac015", - "sha256:dc1a390a82755a8c26c9964d457d4c9cbec5405896cba94cf51f36ea0d855002", - "sha256:dd78700f5788ae180b5ee8902c6aea5a5726bac7c364b202b4b3e3ba2d293170", - "sha256:e46f38133e5a060d46bd630faa4d9fa0202377495df1f068a8299fd78c84de84", - "sha256:e4b878386c4bf293578b48fc570b84ecfe477d3b77ba39a6e87150af77f40c57", - "sha256:f0d0591a0aeaefdaf9a5e545e7485f89910c977087e7de2b6c388aec32011e9f", - "sha256:fdcbb4068117dfd9ce0138d068ac512843c52295ed996ae6dd1faf537b6dbc27", - "sha256:ff61bfd9253c3915e6d41c651d5f962da23eda633cf02262990094a18a55371a" - ], - "markers": "python_version >= '3.8'", - "version": "==10.3.0" + "sha256:02a2be69f9c9b8c1e97cf2713e789d4e398c751ecfd9967c18d0ce304efbf885", + "sha256:030abdbe43ee02e0de642aee345efa443740aa4d828bfe8e2eb11922ea6a21ea", + "sha256:06b2f7898047ae93fad74467ec3d28fe84f7831370e3c258afa533f81ef7f3df", + "sha256:0755ffd4a0c6f267cccbae2e9903d95477ca2f77c4fcf3a3a09570001856c8a5", + "sha256:0a9ec697746f268507404647e531e92889890a087e03681a3606d9b920fbee3c", + "sha256:0ae24a547e8b711ccaaf99c9ae3cd975470e1a30caa80a6aaee9a2f19c05701d", + "sha256:134ace6dc392116566980ee7436477d844520a26a4b1bd4053f6f47d096997fd", + "sha256:166c1cd4d24309b30d61f79f4a9114b7b2313d7450912277855ff5dfd7cd4a06", + "sha256:1b5dea9831a90e9d0721ec417a80d4cbd7022093ac38a568db2dd78363b00908", + "sha256:1d846aea995ad352d4bdcc847535bd56e0fd88d36829d2c90be880ef1ee4668a", + "sha256:1ef61f5dd14c300786318482456481463b9d6b91ebe5ef12f405afbba77ed0be", + "sha256:297e388da6e248c98bc4a02e018966af0c5f92dfacf5a5ca22fa01cb3179bca0", + "sha256:298478fe4f77a4408895605f3482b6cc6222c018b2ce565c2b6b9c354ac3229b", + "sha256:29dbdc4207642ea6aad70fbde1a9338753d33fb23ed6956e706936706f52dd80", + "sha256:2db98790afc70118bd0255c2eeb465e9767ecf1f3c25f9a1abb8ffc8cfd1fe0a", + "sha256:32cda9e3d601a52baccb2856b8ea1fc213c90b340c542dcef77140dfa3278a9e", + "sha256:37fb69d905be665f68f28a8bba3c6d3223c8efe1edf14cc4cfa06c241f8c81d9", + "sha256:416d3a5d0e8cfe4f27f574362435bc9bae57f679a7158e0096ad2beb427b8696", + "sha256:43efea75eb06b95d1631cb784aa40156177bf9dd5b4b03ff38979e048258bc6b", + "sha256:4b35b21b819ac1dbd1233317adeecd63495f6babf21b7b2512d244ff6c6ce309", + "sha256:4d9667937cfa347525b319ae34375c37b9ee6b525440f3ef48542fcf66f2731e", + "sha256:5161eef006d335e46895297f642341111945e2c1c899eb406882a6c61a4357ab", + "sha256:543f3dc61c18dafb755773efc89aae60d06b6596a63914107f75459cf984164d", + "sha256:551d3fd6e9dc15e4c1eb6fc4ba2b39c0c7933fa113b220057a34f4bb3268a060", + "sha256:59291fb29317122398786c2d44427bbd1a6d7ff54017075b22be9d21aa59bd8d", + "sha256:5b001114dd152cfd6b23befeb28d7aee43553e2402c9f159807bf55f33af8a8d", + "sha256:5b4815f2e65b30f5fbae9dfffa8636d992d49705723fe86a3661806e069352d4", + "sha256:5dc6761a6efc781e6a1544206f22c80c3af4c8cf461206d46a1e6006e4429ff3", + "sha256:5e84b6cc6a4a3d76c153a6b19270b3526a5a8ed6b09501d3af891daa2a9de7d6", + "sha256:6209bb41dc692ddfee4942517c19ee81b86c864b626dbfca272ec0f7cff5d9fb", + "sha256:673655af3eadf4df6b5457033f086e90299fdd7a47983a13827acf7459c15d94", + "sha256:6c762a5b0997f5659a5ef2266abc1d8851ad7749ad9a6a5506eb23d314e4f46b", + "sha256:7086cc1d5eebb91ad24ded9f58bec6c688e9f0ed7eb3dbbf1e4800280a896496", + "sha256:73664fe514b34c8f02452ffb73b7a92c6774e39a647087f83d67f010eb9a0cf0", + "sha256:76a911dfe51a36041f2e756b00f96ed84677cdeb75d25c767f296c1c1eda1319", + "sha256:780c072c2e11c9b2c7ca37f9a2ee8ba66f44367ac3e5c7832afcfe5104fd6d1b", + "sha256:7928ecbf1ece13956b95d9cbcfc77137652b02763ba384d9ab508099a2eca856", + "sha256:7970285ab628a3779aecc35823296a7869f889b8329c16ad5a71e4901a3dc4ef", + "sha256:7a8d4bade9952ea9a77d0c3e49cbd8b2890a399422258a77f357b9cc9be8d680", + "sha256:7c1ee6f42250df403c5f103cbd2768a28fe1a0ea1f0f03fe151c8741e1469c8b", + "sha256:7dfecdbad5c301d7b5bde160150b4db4c659cee2b69589705b6f8a0c509d9f42", + "sha256:812f7342b0eee081eaec84d91423d1b4650bb9828eb53d8511bcef8ce5aecf1e", + "sha256:866b6942a92f56300012f5fbac71f2d610312ee65e22f1aa2609e491284e5597", + "sha256:86dcb5a1eb778d8b25659d5e4341269e8590ad6b4e8b44d9f4b07f8d136c414a", + "sha256:87dd88ded2e6d74d31e1e0a99a726a6765cda32d00ba72dc37f0651f306daaa8", + "sha256:8bc1a764ed8c957a2e9cacf97c8b2b053b70307cf2996aafd70e91a082e70df3", + "sha256:8d4d5063501b6dd4024b8ac2f04962d661222d120381272deea52e3fc52d3736", + "sha256:8f0aef4ef59694b12cadee839e2ba6afeab89c0f39a3adc02ed51d109117b8da", + "sha256:930044bb7679ab003b14023138b50181899da3f25de50e9dbee23b61b4de2126", + "sha256:950be4d8ba92aca4b2bb0741285a46bfae3ca699ef913ec8416c1b78eadd64cd", + "sha256:961a7293b2457b405967af9c77dcaa43cc1a8cd50d23c532e62d48ab6cdd56f5", + "sha256:9b885f89040bb8c4a1573566bbb2f44f5c505ef6e74cec7ab9068c900047f04b", + "sha256:9f4727572e2918acaa9077c919cbbeb73bd2b3ebcfe033b72f858fc9fbef0026", + "sha256:a02364621fe369e06200d4a16558e056fe2805d3468350df3aef21e00d26214b", + "sha256:a985e028fc183bf12a77a8bbf36318db4238a3ded7fa9df1b9a133f1cb79f8fc", + "sha256:ac1452d2fbe4978c2eec89fb5a23b8387aba707ac72810d9490118817d9c0b46", + "sha256:b15e02e9bb4c21e39876698abf233c8c579127986f8207200bc8a8f6bb27acf2", + "sha256:b2724fdb354a868ddf9a880cb84d102da914e99119211ef7ecbdc613b8c96b3c", + "sha256:bbc527b519bd3aa9d7f429d152fea69f9ad37c95f0b02aebddff592688998abe", + "sha256:bcd5e41a859bf2e84fdc42f4edb7d9aba0a13d29a2abadccafad99de3feff984", + "sha256:bd2880a07482090a3bcb01f4265f1936a903d70bc740bfcb1fd4e8a2ffe5cf5a", + "sha256:bee197b30783295d2eb680b311af15a20a8b24024a19c3a26431ff83eb8d1f70", + "sha256:bf2342ac639c4cf38799a44950bbc2dfcb685f052b9e262f446482afaf4bffca", + "sha256:c76e5786951e72ed3686e122d14c5d7012f16c8303a674d18cdcd6d89557fc5b", + "sha256:cbed61494057c0f83b83eb3a310f0bf774b09513307c434d4366ed64f4128a91", + "sha256:cfdd747216947628af7b259d274771d84db2268ca062dd5faf373639d00113a3", + "sha256:d7480af14364494365e89d6fddc510a13e5a2c3584cb19ef65415ca57252fb84", + "sha256:dbc6ae66518ab3c5847659e9988c3b60dc94ffb48ef9168656e0019a93dbf8a1", + "sha256:dc3e2db6ba09ffd7d02ae9141cfa0ae23393ee7687248d46a7507b75d610f4f5", + "sha256:dfe91cb65544a1321e631e696759491ae04a2ea11d36715eca01ce07284738be", + "sha256:e4d49b85c4348ea0b31ea63bc75a9f3857869174e2bf17e7aba02945cd218e6f", + "sha256:e4db64794ccdf6cb83a59d73405f63adbe2a1887012e308828596100a0b2f6cc", + "sha256:e553cad5179a66ba15bb18b353a19020e73a7921296a7979c4a2b7f6a5cd57f9", + "sha256:e88d5e6ad0d026fba7bdab8c3f225a69f063f116462c49892b0149e21b6c0a0e", + "sha256:ecd85a8d3e79cd7158dec1c9e5808e821feea088e2f69a974db5edf84dc53141", + "sha256:f5b92f4d70791b4a67157321c4e8225d60b119c5cc9aee8ecf153aace4aad4ef", + "sha256:f5f0c3e969c8f12dd2bb7e0b15d5c468b51e5017e01e2e867335c81903046a22", + "sha256:f7baece4ce06bade126fb84b8af1c33439a76d8a6fd818970215e0560ca28c27", + "sha256:ff25afb18123cea58a591ea0244b92eb1e61a1fd497bf6d6384f09bc3262ec3e", + "sha256:ff337c552345e95702c5fde3158acb0625111017d0e5f24bf3acdb9cc16b90d1" + ], + "markers": "python_version >= '3.8'", + "version": "==10.4.0" }, "platformdirs": { "hashes": [ @@ -1210,12 +1247,12 @@ }, "plotly": { "hashes": [ - "sha256:68fc1901f098daeb233cc3dd44ec9dc31fb3ca4f4e53189344199c43496ed006", - "sha256:859fdadbd86b5770ae2466e542b761b247d1c6b49daed765b95bb8c7063e7469" + "sha256:76cbe78f75eddc10c56f5a4ee3e7ccaade7c0a57465546f02098c0caed6c2d1a", + "sha256:89e57d003a116303a34de6700862391367dd564222ab71f8531df70279fc0193" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==5.22.0" + "version": "==5.23.0" }, "prometheus-client": { "hashes": [ @@ -1235,50 +1272,51 @@ }, "proto-plus": { "hashes": [ - "sha256:89075171ef11988b3fa157f5dbd8b9cf09d65fffee97e29ce403cd8defba19d2", - "sha256:a829c79e619e1cf632de091013a4173deed13a55f326ef84f05af6f50ff4c82c" + "sha256:30b72a5ecafe4406b0d339db35b56c4059064e69227b8c3bda7462397f966445", + "sha256:402576830425e5f6ce4c2a6702400ac79897dab0b4343821aa5188b0fab81a12" ], - "markers": "python_version >= '3.6'", - "version": "==1.23.0" + "markers": "python_version >= '3.7'", + "version": "==1.24.0" }, "protobuf": { "hashes": [ - "sha256:19b270aeaa0099f16d3ca02628546b8baefe2955bbe23224aaf856134eccf1e4", - "sha256:209ba4cc916bab46f64e56b85b090607a676f66b473e6b762e6f1d9d591eb2e8", - "sha256:25b5d0b42fd000320bd7830b349e3b696435f3b329810427a6bcce6a5492cc5c", - "sha256:7c8daa26095f82482307bc717364e7c13f4f1c99659be82890dcfc215194554d", - "sha256:c053062984e61144385022e53678fbded7aea14ebb3e0305ae3592fb219ccfa4", - "sha256:d4198877797a83cbfe9bffa3803602bbe1625dc30d8a097365dbc762e5790faa", - "sha256:e3c97a1555fd6388f857770ff8b9703083de6bf1f9274a002a332d65fbb56c8c", - "sha256:e7cb0ae90dd83727f0c0718634ed56837bfeeee29a5f82a7514c03ee1364c019", - "sha256:f0700d54bcf45424477e46a9f0944155b46fb0639d69728739c0e47bab83f2b9", - "sha256:f1279ab38ecbfae7e456a108c5c0681e4956d5b1090027c1de0f934dfdb4b35c", - "sha256:f4f118245c4a087776e0a8408be33cf09f6c547442c00395fbfb116fac2f8ac2" + "sha256:0e341109c609749d501986b835f667c6e1e24531096cff9d34ae411595e26505", + "sha256:176c12b1f1c880bf7a76d9f7c75822b6a2bc3db2d28baa4d300e8ce4cde7409b", + "sha256:354d84fac2b0d76062e9b3221f4abbbacdfd2a4d8af36bab0474f3a0bb30ab38", + "sha256:4fadd8d83e1992eed0248bc50a4a6361dc31bcccc84388c54c86e530b7f58863", + "sha256:54330f07e4949d09614707c48b06d1a22f8ffb5763c159efd5c0928326a91470", + "sha256:610e700f02469c4a997e58e328cac6f305f649826853813177e6290416e846c6", + "sha256:7fc3add9e6003e026da5fc9e59b131b8f22b428b991ccd53e2af8071687b4fce", + "sha256:9e8f199bf7f97bd7ecebffcae45ebf9527603549b2b562df0fbc6d4d688f14ca", + "sha256:a109916aaac42bff84702fb5187f3edadbc7c97fc2c99c5ff81dd15dcce0d1e5", + "sha256:b848dbe1d57ed7c191dfc4ea64b8b004a3f9ece4bf4d0d80a367b76df20bf36e", + "sha256:f3ecdef226b9af856075f28227ff2c90ce3a594d092c39bee5513573f25e2714" ], "markers": "python_version >= '3.8'", - "version": "==4.25.3" + "version": "==5.27.2" }, "psutil": { "hashes": [ - "sha256:02615ed8c5ea222323408ceba16c60e99c3f91639b07da6373fb7e6539abc56d", - "sha256:05806de88103b25903dff19bb6692bd2e714ccf9e668d050d144012055cbca73", - "sha256:26bd09967ae00920df88e0352a91cff1a78f8d69b3ecabbfe733610c0af486c8", - "sha256:27cc40c3493bb10de1be4b3f07cae4c010ce715290a5be22b98493509c6299e2", - "sha256:36f435891adb138ed3c9e58c6af3e2e6ca9ac2f365efe1f9cfef2794e6c93b4e", - "sha256:50187900d73c1381ba1454cf40308c2bf6f34268518b3f36a9b663ca87e65e36", - "sha256:611052c4bc70432ec770d5d54f64206aa7203a101ec273a0cd82418c86503bb7", - "sha256:6be126e3225486dff286a8fb9a06246a5253f4c7c53b475ea5f5ac934e64194c", - "sha256:7d79560ad97af658a0f6adfef8b834b53f64746d45b403f225b85c5c2c140eee", - "sha256:8cb6403ce6d8e047495a701dc7c5bd788add903f8986d523e3e20b98b733e421", - "sha256:8db4c1b57507eef143a15a6884ca10f7c73876cdf5d51e713151c1236a0e68cf", - "sha256:aee678c8720623dc456fa20659af736241f575d79429a0e5e9cf88ae0605cc81", - "sha256:bc56c2a1b0d15aa3eaa5a60c9f3f8e3e565303b465dbf57a1b730e7a2b9844e0", - "sha256:bd1184ceb3f87651a67b2708d4c3338e9b10c5df903f2e3776b62303b26cb631", - "sha256:d06016f7f8625a1825ba3732081d77c94589dca78b7a3fc072194851e88461a4", - "sha256:d16bbddf0693323b8c6123dd804100241da461e41d6e332fb0ba6058f630f8c8" + "sha256:02b69001f44cc73c1c5279d02b30a817e339ceb258ad75997325e0e6169d8b35", + "sha256:1287c2b95f1c0a364d23bc6f2ea2365a8d4d9b726a3be7294296ff7ba97c17f0", + "sha256:1e7c870afcb7d91fdea2b37c24aeb08f98b6d67257a5cb0a8bc3ac68d0f1a68c", + "sha256:21f1fb635deccd510f69f485b87433460a603919b45e2a324ad65b0cc74f8fb1", + "sha256:33ea5e1c975250a720b3a6609c490db40dae5d83a4eb315170c4fe0d8b1f34b3", + "sha256:34859b8d8f423b86e4385ff3665d3f4d94be3cdf48221fbe476e883514fdb71c", + "sha256:5fd9a97c8e94059b0ef54a7d4baf13b405011176c3b6ff257c247cae0d560ecd", + "sha256:6ec7588fb3ddaec7344a825afe298db83fe01bfaaab39155fa84cf1c0d6b13c3", + "sha256:6ed2440ada7ef7d0d608f20ad89a04ec47d2d3ab7190896cd62ca5fc4fe08bf0", + "sha256:8faae4f310b6d969fa26ca0545338b21f73c6b15db7c4a8d934a5482faa818f2", + "sha256:a021da3e881cd935e64a3d0a20983bda0bb4cf80e4f74fa9bfcb1bc5785360c6", + "sha256:a495580d6bae27291324fe60cea0b5a7c23fa36a7cd35035a16d93bdcf076b9d", + "sha256:a9a3dbfb4de4f18174528d87cc352d1f788b7496991cca33c6996f40c9e3c92c", + "sha256:c588a7e9b1173b6e866756dde596fd4cad94f9399daf99ad8c3258b3cb2b47a0", + "sha256:e2e8d0054fc88153ca0544f5c4d554d42e33df2e009c4ff42284ac9ebdef4132", + "sha256:fc8c9510cde0146432bbdb433322861ee8c3efbf8589865c8bf8d21cb30c4d14", + "sha256:ffe7fc9b6b36beadc8c322f84e1caff51e8703b88eee1da46d1e3a6ae11b4fd0" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==5.9.8" + "version": "==6.0.0" }, "ptyprocess": { "hashes": [ @@ -1290,53 +1328,53 @@ }, "pure-eval": { "hashes": [ - "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350", - "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3" + "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", + "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42" ], - "version": "==0.2.2" + "version": "==0.2.3" }, "pyarrow": { "hashes": [ - "sha256:06ebccb6f8cb7357de85f60d5da50e83507954af617d7b05f48af1621d331c9a", - "sha256:0d07de3ee730647a600037bc1d7b7994067ed64d0eba797ac74b2bc77384f4c2", - "sha256:0d27bf89dfc2576f6206e9cd6cf7a107c9c06dc13d53bbc25b0bd4556f19cf5f", - "sha256:0d32000693deff8dc5df444b032b5985a48592c0697cb6e3071a5d59888714e2", - "sha256:15fbb22ea96d11f0b5768504a3f961edab25eaf4197c341720c4a387f6c60315", - "sha256:17e23b9a65a70cc733d8b738baa6ad3722298fa0c81d88f63ff94bf25eaa77b9", - "sha256:185d121b50836379fe012753cf15c4ba9638bda9645183ab36246923875f8d1b", - "sha256:18da9b76a36a954665ccca8aa6bd9f46c1145f79c0bb8f4f244f5f8e799bca55", - "sha256:19741c4dbbbc986d38856ee7ddfdd6a00fc3b0fc2d928795b95410d38bb97d15", - "sha256:25233642583bf658f629eb230b9bb79d9af4d9f9229890b3c878699c82f7d11e", - "sha256:2e51ca1d6ed7f2e9d5c3c83decf27b0d17bb207a7dea986e8dc3e24f80ff7d6f", - "sha256:2e73cfc4a99e796727919c5541c65bb88b973377501e39b9842ea71401ca6c1c", - "sha256:31a1851751433d89a986616015841977e0a188662fcffd1a5677453f1df2de0a", - "sha256:3b20bd67c94b3a2ea0a749d2a5712fc845a69cb5d52e78e6449bbd295611f3aa", - "sha256:4740cc41e2ba5d641071d0ab5e9ef9b5e6e8c7611351a5cb7c1d175eaf43674a", - "sha256:48be160782c0556156d91adbdd5a4a7e719f8d407cb46ae3bb4eaee09b3111bd", - "sha256:8785bb10d5d6fd5e15d718ee1d1f914fe768bf8b4d1e5e9bf253de8a26cb1628", - "sha256:98100e0268d04e0eec47b73f20b39c45b4006f3c4233719c3848aa27a03c1aef", - "sha256:99f7549779b6e434467d2aa43ab2b7224dd9e41bdde486020bae198978c9e05e", - "sha256:9cf389d444b0f41d9fe1444b70650fea31e9d52cfcb5f818b7888b91b586efff", - "sha256:a33a64576fddfbec0a44112eaf844c20853647ca833e9a647bfae0582b2ff94b", - "sha256:a8914cd176f448e09746037b0c6b3a9d7688cef451ec5735094055116857580c", - "sha256:b04707f1979815f5e49824ce52d1dceb46e2f12909a48a6a753fe7cafbc44a0c", - "sha256:b5f5705ab977947a43ac83b52ade3b881eb6e95fcc02d76f501d549a210ba77f", - "sha256:ba8ac20693c0bb0bf4b238751d4409e62852004a8cf031c73b0e0962b03e45e3", - "sha256:bf9251264247ecfe93e5f5a0cd43b8ae834f1e61d1abca22da55b20c788417f6", - "sha256:d0ebea336b535b37eee9eee31761813086d33ed06de9ab6fc6aaa0bace7b250c", - "sha256:ddf5aace92d520d3d2a20031d8b0ec27b4395cab9f74e07cc95edf42a5cc0147", - "sha256:ddfe389a08ea374972bd4065d5f25d14e36b43ebc22fc75f7b951f24378bf0b5", - "sha256:e1369af39587b794873b8a307cc6623a3b1194e69399af0efd05bb202195a5a7", - "sha256:e6b6d3cd35fbb93b70ade1336022cc1147b95ec6af7d36906ca7fe432eb09710", - "sha256:f07fdffe4fd5b15f5ec15c8b64584868d063bc22b86b46c9695624ca3505b7b4", - "sha256:f2c5fb249caa17b94e2b9278b36a05ce03d3180e6da0c4c3b3ce5b2788f30eed", - "sha256:f68f409e7b283c085f2da014f9ef81e885d90dcd733bd648cfba3ef265961848", - "sha256:fbef391b63f708e103df99fbaa3acf9f671d77a183a07546ba2f2c297b361e83", - "sha256:febde33305f1498f6df85e8020bca496d0e9ebf2093bab9e0f65e2b4ae2b3444" + "sha256:0071ce35788c6f9077ff9ecba4858108eebe2ea5a3f7cf2cf55ebc1dbc6ee24a", + "sha256:02dae06ce212d8b3244dd3e7d12d9c4d3046945a5933d28026598e9dbbda1fca", + "sha256:0b72e87fe3e1db343995562f7fff8aee354b55ee83d13afba65400c178ab2597", + "sha256:0cdb0e627c86c373205a2f94a510ac4376fdc523f8bb36beab2e7f204416163c", + "sha256:13d7a460b412f31e4c0efa1148e1d29bdf18ad1411eb6757d38f8fbdcc8645fb", + "sha256:1c8856e2ef09eb87ecf937104aacfa0708f22dfeb039c363ec99735190ffb977", + "sha256:2e19f569567efcbbd42084e87f948778eb371d308e137a0f97afe19bb860ccb3", + "sha256:32503827abbc5aadedfa235f5ece8c4f8f8b0a3cf01066bc8d29de7539532687", + "sha256:392bc9feabc647338e6c89267635e111d71edad5fcffba204425a7c8d13610d7", + "sha256:42bf93249a083aca230ba7e2786c5f673507fa97bbd9725a1e2754715151a204", + "sha256:4beca9521ed2c0921c1023e68d097d0299b62c362639ea315572a58f3f50fd28", + "sha256:5984f416552eea15fd9cee03da53542bf4cddaef5afecefb9aa8d1010c335087", + "sha256:6b244dc8e08a23b3e352899a006a26ae7b4d0da7bb636872fa8f5884e70acf15", + "sha256:757074882f844411fcca735e39aae74248a1531367a7c80799b4266390ae51cc", + "sha256:75c06d4624c0ad6674364bb46ef38c3132768139ddec1c56582dbac54f2663e2", + "sha256:7c7916bff914ac5d4a8fe25b7a25e432ff921e72f6f2b7547d1e325c1ad9d155", + "sha256:9b564a51fbccfab5a04a80453e5ac6c9954a9c5ef2890d1bcf63741909c3f8df", + "sha256:9b8a823cea605221e61f34859dcc03207e52e409ccf6354634143e23af7c8d22", + "sha256:9ba11c4f16976e89146781a83833df7f82077cdab7dc6232c897789343f7891a", + "sha256:a155acc7f154b9ffcc85497509bcd0d43efb80d6f733b0dc3bb14e281f131c8b", + "sha256:a27532c38f3de9eb3e90ecab63dfda948a8ca859a66e3a47f5f42d1e403c4d03", + "sha256:a48ddf5c3c6a6c505904545c25a4ae13646ae1f8ba703c4df4a1bfe4f4006bda", + "sha256:a5c8b238d47e48812ee577ee20c9a2779e6a5904f1708ae240f53ecbee7c9f07", + "sha256:af5ff82a04b2171415f1410cff7ebb79861afc5dae50be73ce06d6e870615204", + "sha256:b0c6ac301093b42d34410b187bba560b17c0330f64907bfa4f7f7f2444b0cf9b", + "sha256:d7d192305d9d8bc9082d10f361fc70a73590a4c65cf31c3e6926cd72b76bc35c", + "sha256:da1e060b3876faa11cee287839f9cc7cdc00649f475714b8680a05fd9071d545", + "sha256:db023dc4c6cae1015de9e198d41250688383c3f9af8f565370ab2b4cb5f62655", + "sha256:dc5c31c37409dfbc5d014047817cb4ccd8c1ea25d19576acf1a001fe07f5b420", + "sha256:dec8d129254d0188a49f8a1fc99e0560dc1b85f60af729f47de4046015f9b0a5", + "sha256:e3343cb1e88bc2ea605986d4b94948716edc7a8d14afd4e2c097232f729758b4", + "sha256:edca18eaca89cd6382dfbcff3dd2d87633433043650c07375d095cd3517561d8", + "sha256:f1e70de6cb5790a50b01d2b686d54aaf73da01266850b05e3af2a1bc89e16053", + "sha256:f553ca691b9e94b202ff741bdd40f6ccb70cdd5fbf65c187af132f1317de6145", + "sha256:f7ae2de664e0b158d1607699a16a488de3d008ba99b3a7aa5de1cbc13574d047", + "sha256:fa3c246cc58cb5a4a5cb407a18f193354ea47dd0648194e6265bd24177982fe8" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==16.1.0" + "version": "==17.0.0" }, "pyasn1": { "hashes": [ @@ -1612,108 +1650,112 @@ }, "rpds-py": { "hashes": [ - "sha256:05f3d615099bd9b13ecf2fc9cf2d839ad3f20239c678f461c753e93755d629ee", - "sha256:06d218939e1bf2ca50e6b0ec700ffe755e5216a8230ab3e87c059ebb4ea06afc", - "sha256:07f2139741e5deb2c5154a7b9629bc5aa48c766b643c1a6750d16f865a82c5fc", - "sha256:08d74b184f9ab6289b87b19fe6a6d1a97fbfea84b8a3e745e87a5de3029bf944", - "sha256:0abeee75434e2ee2d142d650d1e54ac1f8b01e6e6abdde8ffd6eeac6e9c38e20", - "sha256:154bf5c93d79558b44e5b50cc354aa0459e518e83677791e6adb0b039b7aa6a7", - "sha256:17c6d2155e2423f7e79e3bb18151c686d40db42d8645e7977442170c360194d4", - "sha256:1805d5901779662d599d0e2e4159d8a82c0b05faa86ef9222bf974572286b2b6", - "sha256:19ba472b9606c36716062c023afa2484d1e4220548751bda14f725a7de17b4f6", - "sha256:19e515b78c3fc1039dd7da0a33c28c3154458f947f4dc198d3c72db2b6b5dc93", - "sha256:1d54f74f40b1f7aaa595a02ff42ef38ca654b1469bef7d52867da474243cc633", - "sha256:207c82978115baa1fd8d706d720b4a4d2b0913df1c78c85ba73fe6c5804505f0", - "sha256:2625f03b105328729f9450c8badda34d5243231eef6535f80064d57035738360", - "sha256:27bba383e8c5231cd559affe169ca0b96ec78d39909ffd817f28b166d7ddd4d8", - "sha256:2c3caec4ec5cd1d18e5dd6ae5194d24ed12785212a90b37f5f7f06b8bedd7139", - "sha256:2cc7c1a47f3a63282ab0f422d90ddac4aa3034e39fc66a559ab93041e6505da7", - "sha256:2fc24a329a717f9e2448f8cd1f960f9dac4e45b6224d60734edeb67499bab03a", - "sha256:312fe69b4fe1ffbe76520a7676b1e5ac06ddf7826d764cc10265c3b53f96dbe9", - "sha256:32b7daaa3e9389db3695964ce8e566e3413b0c43e3394c05e4b243a4cd7bef26", - "sha256:338dee44b0cef8b70fd2ef54b4e09bb1b97fc6c3a58fea5db6cc083fd9fc2724", - "sha256:352a88dc7892f1da66b6027af06a2e7e5d53fe05924cc2cfc56495b586a10b72", - "sha256:35b2b771b13eee8729a5049c976197ff58a27a3829c018a04341bcf1ae409b2b", - "sha256:38e14fb4e370885c4ecd734f093a2225ee52dc384b86fa55fe3f74638b2cfb09", - "sha256:3c20f05e8e3d4fc76875fc9cb8cf24b90a63f5a1b4c5b9273f0e8225e169b100", - "sha256:3dd3cd86e1db5aadd334e011eba4e29d37a104b403e8ca24dcd6703c68ca55b3", - "sha256:489bdfe1abd0406eba6b3bb4fdc87c7fa40f1031de073d0cfb744634cc8fa261", - "sha256:48c2faaa8adfacefcbfdb5f2e2e7bdad081e5ace8d182e5f4ade971f128e6bb3", - "sha256:4a98a1f0552b5f227a3d6422dbd61bc6f30db170939bd87ed14f3c339aa6c7c9", - "sha256:4adec039b8e2928983f885c53b7cc4cda8965b62b6596501a0308d2703f8af1b", - "sha256:4e0ee01ad8260184db21468a6e1c37afa0529acc12c3a697ee498d3c2c4dcaf3", - "sha256:51584acc5916212e1bf45edd17f3a6b05fe0cbb40482d25e619f824dccb679de", - "sha256:531796fb842b53f2695e94dc338929e9f9dbf473b64710c28af5a160b2a8927d", - "sha256:5463c47c08630007dc0fe99fb480ea4f34a89712410592380425a9b4e1611d8e", - "sha256:5c45a639e93a0c5d4b788b2613bd637468edd62f8f95ebc6fcc303d58ab3f0a8", - "sha256:6031b25fb1b06327b43d841f33842b383beba399884f8228a6bb3df3088485ff", - "sha256:607345bd5912aacc0c5a63d45a1f73fef29e697884f7e861094e443187c02be5", - "sha256:618916f5535784960f3ecf8111581f4ad31d347c3de66d02e728de460a46303c", - "sha256:636a15acc588f70fda1661234761f9ed9ad79ebed3f2125d44be0862708b666e", - "sha256:673fdbbf668dd958eff750e500495ef3f611e2ecc209464f661bc82e9838991e", - "sha256:6afd80f6c79893cfc0574956f78a0add8c76e3696f2d6a15bca2c66c415cf2d4", - "sha256:6b5ff7e1d63a8281654b5e2896d7f08799378e594f09cf3674e832ecaf396ce8", - "sha256:6c4c4c3f878df21faf5fac86eda32671c27889e13570645a9eea0a1abdd50922", - "sha256:6cd8098517c64a85e790657e7b1e509b9fe07487fd358e19431cb120f7d96338", - "sha256:6d1e42d2735d437e7e80bab4d78eb2e459af48c0a46e686ea35f690b93db792d", - "sha256:6e30ac5e329098903262dc5bdd7e2086e0256aa762cc8b744f9e7bf2a427d3f8", - "sha256:70a838f7754483bcdc830444952fd89645569e7452e3226de4a613a4c1793fb2", - "sha256:720edcb916df872d80f80a1cc5ea9058300b97721efda8651efcd938a9c70a72", - "sha256:732672fbc449bab754e0b15356c077cc31566df874964d4801ab14f71951ea80", - "sha256:740884bc62a5e2bbb31e584f5d23b32320fd75d79f916f15a788d527a5e83644", - "sha256:7700936ef9d006b7ef605dc53aa364da2de5a3aa65516a1f3ce73bf82ecfc7ae", - "sha256:7732770412bab81c5a9f6d20aeb60ae943a9b36dcd990d876a773526468e7163", - "sha256:7750569d9526199c5b97e5a9f8d96a13300950d910cf04a861d96f4273d5b104", - "sha256:7f1944ce16401aad1e3f7d312247b3d5de7981f634dc9dfe90da72b87d37887d", - "sha256:81c5196a790032e0fc2464c0b4ab95f8610f96f1f2fa3d4deacce6a79852da60", - "sha256:8352f48d511de5f973e4f2f9412736d7dea76c69faa6d36bcf885b50c758ab9a", - "sha256:8927638a4d4137a289e41d0fd631551e89fa346d6dbcfc31ad627557d03ceb6d", - "sha256:8c7672e9fba7425f79019db9945b16e308ed8bc89348c23d955c8c0540da0a07", - "sha256:8d2e182c9ee01135e11e9676e9a62dfad791a7a467738f06726872374a83db49", - "sha256:910e71711d1055b2768181efa0a17537b2622afeb0424116619817007f8a2b10", - "sha256:942695a206a58d2575033ff1e42b12b2aece98d6003c6bc739fbf33d1773b12f", - "sha256:9437ca26784120a279f3137ee080b0e717012c42921eb07861b412340f85bae2", - "sha256:967342e045564cef76dfcf1edb700b1e20838d83b1aa02ab313e6a497cf923b8", - "sha256:998125738de0158f088aef3cb264a34251908dd2e5d9966774fdab7402edfab7", - "sha256:9e6934d70dc50f9f8ea47081ceafdec09245fd9f6032669c3b45705dea096b88", - "sha256:a3d456ff2a6a4d2adcdf3c1c960a36f4fd2fec6e3b4902a42a384d17cf4e7a65", - "sha256:a7b28c5b066bca9a4eb4e2f2663012debe680f097979d880657f00e1c30875a0", - "sha256:a888e8bdb45916234b99da2d859566f1e8a1d2275a801bb8e4a9644e3c7e7909", - "sha256:aa3679e751408d75a0b4d8d26d6647b6d9326f5e35c00a7ccd82b78ef64f65f8", - "sha256:aaa71ee43a703c321906813bb252f69524f02aa05bf4eec85f0c41d5d62d0f4c", - "sha256:b646bf655b135ccf4522ed43d6902af37d3f5dbcf0da66c769a2b3938b9d8184", - "sha256:b906b5f58892813e5ba5c6056d6a5ad08f358ba49f046d910ad992196ea61397", - "sha256:b9bb1f182a97880f6078283b3505a707057c42bf55d8fca604f70dedfdc0772a", - "sha256:bd1105b50ede37461c1d51b9698c4f4be6e13e69a908ab7751e3807985fc0346", - "sha256:bf18932d0003c8c4d51a39f244231986ab23ee057d235a12b2684ea26a353590", - "sha256:c273e795e7a0f1fddd46e1e3cb8be15634c29ae8ff31c196debb620e1edb9333", - "sha256:c69882964516dc143083d3795cb508e806b09fc3800fd0d4cddc1df6c36e76bb", - "sha256:c827576e2fa017a081346dce87d532a5310241648eb3700af9a571a6e9fc7e74", - "sha256:cbfbea39ba64f5e53ae2915de36f130588bba71245b418060ec3330ebf85678e", - "sha256:ce0bb20e3a11bd04461324a6a798af34d503f8d6f1aa3d2aa8901ceaf039176d", - "sha256:d0cee71bc618cd93716f3c1bf56653740d2d13ddbd47673efa8bf41435a60daa", - "sha256:d21be4770ff4e08698e1e8e0bce06edb6ea0626e7c8f560bc08222880aca6a6f", - "sha256:d31dea506d718693b6b2cffc0648a8929bdc51c70a311b2770f09611caa10d53", - "sha256:d44607f98caa2961bab4fa3c4309724b185b464cdc3ba6f3d7340bac3ec97cc1", - "sha256:d58ad6317d188c43750cb76e9deacf6051d0f884d87dc6518e0280438648a9ac", - "sha256:d70129cef4a8d979caa37e7fe957202e7eee8ea02c5e16455bc9808a59c6b2f0", - "sha256:d85164315bd68c0806768dc6bb0429c6f95c354f87485ee3593c4f6b14def2bd", - "sha256:d960de62227635d2e61068f42a6cb6aae91a7fe00fca0e3aeed17667c8a34611", - "sha256:dc48b479d540770c811fbd1eb9ba2bb66951863e448efec2e2c102625328e92f", - "sha256:e1735502458621921cee039c47318cb90b51d532c2766593be6207eec53e5c4c", - "sha256:e2be6e9dd4111d5b31ba3b74d17da54a8319d8168890fbaea4b9e5c3de630ae5", - "sha256:e4c39ad2f512b4041343ea3c7894339e4ca7839ac38ca83d68a832fc8b3748ab", - "sha256:ed402d6153c5d519a0faf1bb69898e97fb31613b49da27a84a13935ea9164dfc", - "sha256:ee17cd26b97d537af8f33635ef38be873073d516fd425e80559f4585a7b90c43", - "sha256:f3027be483868c99b4985fda802a57a67fdf30c5d9a50338d9db646d590198da", - "sha256:f5bab211605d91db0e2995a17b5c6ee5edec1270e46223e513eaa20da20076ac", - "sha256:f6f8e3fecca256fefc91bb6765a693d96692459d7d4c644660a9fff32e517843", - "sha256:f7afbfee1157e0f9376c00bb232e80a60e59ed716e3211a80cb8506550671e6e", - "sha256:fa242ac1ff583e4ec7771141606aafc92b361cd90a05c30d93e343a0c2d82a89", - "sha256:fab6ce90574645a0d6c58890e9bcaac8d94dff54fb51c69e5522a7358b80ab64" + "sha256:01227f8b3e6c8961490d869aa65c99653df80d2f0a7fde8c64ebddab2b9b02fd", + "sha256:08ce9c95a0b093b7aec75676b356a27879901488abc27e9d029273d280438505", + "sha256:0b02dd77a2de6e49078c8937aadabe933ceac04b41c5dde5eca13a69f3cf144e", + "sha256:0d4b52811dcbc1aba08fd88d475f75b4f6db0984ba12275d9bed1a04b2cae9b5", + "sha256:13e6d4840897d4e4e6b2aa1443e3a8eca92b0402182aafc5f4ca1f5e24f9270a", + "sha256:1a129c02b42d46758c87faeea21a9f574e1c858b9f358b6dd0bbd71d17713175", + "sha256:1a8dfa125b60ec00c7c9baef945bb04abf8ac772d8ebefd79dae2a5f316d7850", + "sha256:1c32e41de995f39b6b315d66c27dea3ef7f7c937c06caab4c6a79a5e09e2c415", + "sha256:1d494887d40dc4dd0d5a71e9d07324e5c09c4383d93942d391727e7a40ff810b", + "sha256:1d4af2eb520d759f48f1073ad3caef997d1bfd910dc34e41261a595d3f038a94", + "sha256:1fb93d3486f793d54a094e2bfd9cd97031f63fcb5bc18faeb3dd4b49a1c06523", + "sha256:24f8ae92c7fae7c28d0fae9b52829235df83f34847aa8160a47eb229d9666c7b", + "sha256:24fc5a84777cb61692d17988989690d6f34f7f95968ac81398d67c0d0994a897", + "sha256:26ab43b6d65d25b1a333c8d1b1c2f8399385ff683a35ab5e274ba7b8bb7dc61c", + "sha256:271accf41b02687cef26367c775ab220372ee0f4925591c6796e7c148c50cab5", + "sha256:2ddd50f18ebc05ec29a0d9271e9dbe93997536da3546677f8ca00b76d477680c", + "sha256:31dd5794837f00b46f4096aa8ccaa5972f73a938982e32ed817bb520c465e520", + "sha256:31e450840f2f27699d014cfc8865cc747184286b26d945bcea6042bb6aa4d26e", + "sha256:32e0db3d6e4f45601b58e4ac75c6f24afbf99818c647cc2066f3e4b192dabb1f", + "sha256:346557f5b1d8fd9966059b7a748fd79ac59f5752cd0e9498d6a40e3ac1c1875f", + "sha256:34bca66e2e3eabc8a19e9afe0d3e77789733c702c7c43cd008e953d5d1463fde", + "sha256:3511f6baf8438326e351097cecd137eb45c5f019944fe0fd0ae2fea2fd26be39", + "sha256:35af5e4d5448fa179fd7fff0bba0fba51f876cd55212f96c8bbcecc5c684ae5c", + "sha256:3837c63dd6918a24de6c526277910e3766d8c2b1627c500b155f3eecad8fad65", + "sha256:39d67896f7235b2c886fb1ee77b1491b77049dcef6fbf0f401e7b4cbed86bbd4", + "sha256:3b823be829407393d84ee56dc849dbe3b31b6a326f388e171555b262e8456cc1", + "sha256:3c73254c256081704dba0a333457e2fb815364018788f9b501efe7c5e0ada401", + "sha256:3ddab996807c6b4227967fe1587febade4e48ac47bb0e2d3e7858bc621b1cace", + "sha256:3e1dc59a5e7bc7f44bd0c048681f5e05356e479c50be4f2c1a7089103f1621d5", + "sha256:4383beb4a29935b8fa28aca8fa84c956bf545cb0c46307b091b8d312a9150e6a", + "sha256:4cc4bc73e53af8e7a42c8fd7923bbe35babacfa7394ae9240b3430b5dcf16b2a", + "sha256:4dd02e29c8cbed21a1875330b07246b71121a1c08e29f0ee3db5b4cfe16980c4", + "sha256:4f580ae79d0b861dfd912494ab9d477bea535bfb4756a2269130b6607a21802e", + "sha256:53dbc35808c6faa2ce3e48571f8f74ef70802218554884787b86a30947842a14", + "sha256:56313be667a837ff1ea3508cebb1ef6681d418fa2913a0635386cf29cff35165", + "sha256:57863d16187995c10fe9cf911b897ed443ac68189179541734502353af33e693", + "sha256:5953391af1405f968eb5701ebbb577ebc5ced8d0041406f9052638bafe52209d", + "sha256:5beffdbe766cfe4fb04f30644d822a1080b5359df7db3a63d30fa928375b2720", + "sha256:5e360188b72f8080fefa3adfdcf3618604cc8173651c9754f189fece068d2a45", + "sha256:5e58b61dcbb483a442c6239c3836696b79f2cd8e7eec11e12155d3f6f2d886d1", + "sha256:69084fd29bfeff14816666c93a466e85414fe6b7d236cfc108a9c11afa6f7301", + "sha256:6d1d7539043b2b31307f2c6c72957a97c839a88b2629a348ebabe5aa8b626d6b", + "sha256:6d8b735c4d162dc7d86a9cf3d717f14b6c73637a1f9cd57fe7e61002d9cb1972", + "sha256:6ea961a674172ed2235d990d7edf85d15d8dfa23ab8575e48306371c070cda67", + "sha256:71157f9db7f6bc6599a852852f3389343bea34315b4e6f109e5cbc97c1fb2963", + "sha256:720f3108fb1bfa32e51db58b832898372eb5891e8472a8093008010911e324c5", + "sha256:74129d5ffc4cde992d89d345f7f7d6758320e5d44a369d74d83493429dad2de5", + "sha256:747251e428406b05fc86fee3904ee19550c4d2d19258cef274e2151f31ae9d38", + "sha256:75130df05aae7a7ac171b3b5b24714cffeabd054ad2ebc18870b3aa4526eba23", + "sha256:7b3661e6d4ba63a094138032c1356d557de5b3ea6fd3cca62a195f623e381c76", + "sha256:7d5c7e32f3ee42f77d8ff1a10384b5cdcc2d37035e2e3320ded909aa192d32c3", + "sha256:8124101e92c56827bebef084ff106e8ea11c743256149a95b9fd860d3a4f331f", + "sha256:81db2e7282cc0487f500d4db203edc57da81acde9e35f061d69ed983228ffe3b", + "sha256:840e18c38098221ea6201f091fc5d4de6128961d2930fbbc96806fb43f69aec1", + "sha256:89cc8921a4a5028d6dd388c399fcd2eef232e7040345af3d5b16c04b91cf3c7e", + "sha256:8b32cd4ab6db50c875001ba4f5a6b30c0f42151aa1fbf9c2e7e3674893fb1dc4", + "sha256:8df1c283e57c9cb4d271fdc1875f4a58a143a2d1698eb0d6b7c0d7d5f49c53a1", + "sha256:902cf4739458852fe917104365ec0efbea7d29a15e4276c96a8d33e6ed8ec137", + "sha256:97fbb77eaeb97591efdc654b8b5f3ccc066406ccfb3175b41382f221ecc216e8", + "sha256:9c7042488165f7251dc7894cd533a875d2875af6d3b0e09eda9c4b334627ad1c", + "sha256:9e318e6786b1e750a62f90c6f7fa8b542102bdcf97c7c4de2a48b50b61bd36ec", + "sha256:a9421b23c85f361a133aa7c5e8ec757668f70343f4ed8fdb5a4a14abd5437244", + "sha256:aaf71f95b21f9dc708123335df22e5a2fef6307e3e6f9ed773b2e0938cc4d491", + "sha256:afedc35fe4b9e30ab240b208bb9dc8938cb4afe9187589e8d8d085e1aacb8309", + "sha256:b5e28e56143750808c1c79c70a16519e9bc0a68b623197b96292b21b62d6055c", + "sha256:b82c9514c6d74b89a370c4060bdb80d2299bc6857e462e4a215b4ef7aa7b090e", + "sha256:b8f78398e67a7227aefa95f876481485403eb974b29e9dc38b307bb6eb2315ea", + "sha256:bbda75f245caecff8faa7e32ee94dfaa8312a3367397975527f29654cd17a6ed", + "sha256:bca34e913d27401bda2a6f390d0614049f5a95b3b11cd8eff80fe4ec340a1208", + "sha256:bd04d8cab16cab5b0a9ffc7d10f0779cf1120ab16c3925404428f74a0a43205a", + "sha256:c149a652aeac4902ecff2dd93c3b2681c608bd5208c793c4a99404b3e1afc87c", + "sha256:c2087dbb76a87ec2c619253e021e4fb20d1a72580feeaa6892b0b3d955175a71", + "sha256:c34f751bf67cab69638564eee34023909380ba3e0d8ee7f6fe473079bf93f09b", + "sha256:c6d20c8896c00775e6f62d8373aba32956aa0b850d02b5ec493f486c88e12859", + "sha256:c7af6f7b80f687b33a4cdb0a785a5d4de1fb027a44c9a049d8eb67d5bfe8a687", + "sha256:c7b07959866a6afb019abb9564d8a55046feb7a84506c74a6f197cbcdf8a208e", + "sha256:ca0dda0c5715efe2ab35bb83f813f681ebcd2840d8b1b92bfc6fe3ab382fae4a", + "sha256:cdb7eb3cf3deb3dd9e7b8749323b5d970052711f9e1e9f36364163627f96da58", + "sha256:ce757c7c90d35719b38fa3d4ca55654a76a40716ee299b0865f2de21c146801c", + "sha256:d1fa67ef839bad3815124f5f57e48cd50ff392f4911a9f3cf449d66fa3df62a5", + "sha256:d2dbd8f4990d4788cb122f63bf000357533f34860d269c1a8e90ae362090ff3a", + "sha256:d4ec0046facab83012d821b33cead742a35b54575c4edfb7ed7445f63441835f", + "sha256:dbceedcf4a9329cc665452db1aaf0845b85c666e4885b92ee0cddb1dbf7e052a", + "sha256:dc733d35f861f8d78abfaf54035461e10423422999b360966bf1c443cbc42705", + "sha256:dd635c2c4043222d80d80ca1ac4530a633102a9f2ad12252183bcf338c1b9474", + "sha256:de1f7cd5b6b351e1afd7568bdab94934d656abe273d66cda0ceea43bbc02a0c2", + "sha256:df7c841813f6265e636fe548a49664c77af31ddfa0085515326342a751a6ba51", + "sha256:e0f9d268b19e8f61bf42a1da48276bcd05f7ab5560311f541d22557f8227b866", + "sha256:e2d66eb41ffca6cc3c91d8387509d27ba73ad28371ef90255c50cb51f8953301", + "sha256:e429fc517a1c5e2a70d576077231538a98d59a45dfc552d1ac45a132844e6dfb", + "sha256:e4d2b88efe65544a7d5121b0c3b003ebba92bfede2ea3577ce548b69c5235185", + "sha256:e76c902d229a3aa9d5ceb813e1cbcc69bf5bda44c80d574ff1ac1fa3136dea71", + "sha256:ef07a0a1d254eeb16455d839cef6e8c2ed127f47f014bbda64a58b5482b6c836", + "sha256:f09529d2332264a902688031a83c19de8fda5eb5881e44233286b9c9ec91856d", + "sha256:f0a6d4a93d2a05daec7cb885157c97bbb0be4da739d6f9dfb02e101eb40921cd", + "sha256:f0cf2a0dbb5987da4bd92a7ca727eadb225581dd9681365beba9accbe5308f7d", + "sha256:f2671cb47e50a97f419a02cd1e0c339b31de017b033186358db92f4d8e2e17d8", + "sha256:f35b34a5184d5e0cc360b61664c1c06e866aab077b5a7c538a3e20c8fcdbf90b", + "sha256:f3d73022990ab0c8b172cce57c69fd9a89c24fd473a5e79cbce92df87e3d9c48", + "sha256:f5b8353ea1a4d7dfb59a7f45c04df66ecfd363bb5b35f33b11ea579111d4655f", + "sha256:f809a17cc78bd331e137caa25262b507225854073fd319e987bd216bed911b7c", + "sha256:f9bc4161bd3b970cd6a6fcda70583ad4afd10f2750609fb1f3ca9505050d4ef3", + "sha256:fdf4890cda3b59170009d012fca3294c00140e7f2abe1910e6a730809d0f3f9b" ], "markers": "python_version >= '3.8'", - "version": "==0.18.1" + "version": "==0.19.1" }, "rsa": { "hashes": [ @@ -1749,11 +1791,11 @@ }, "setuptools": { "hashes": [ - "sha256:54faa7f2e8d2d11bcd2c07bed282eef1046b5c080d1c32add737d7b5817b1ad4", - "sha256:f211a66637b8fa059bb28183da127d4e86396c991a942b028c6650d4319c3fd0" + "sha256:5a03e1860cf56bb6ef48ce186b0e557fdba433237481a9a625176c2831be15d1", + "sha256:8d243eff56d095e5817f796ede6ae32941278f542e0f941867cc05ae52b162ec" ], "markers": "python_version >= '3.8'", - "version": "==70.0.0" + "version": "==72.1.0" }, "six": { "hashes": [ @@ -1763,6 +1805,14 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.16.0" }, + "smmap": { + "hashes": [ + "sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62", + "sha256:e6d8668fa5f93e706934a62d7b4db19c8d9eb8cf2adbb75ef1b675aa332b69da" + ], + "markers": "python_version >= '3.7'", + "version": "==5.0.1" + }, "sniffio": { "hashes": [ "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", @@ -1788,11 +1838,11 @@ }, "tenacity": { "hashes": [ - "sha256:3649f6443dbc0d9b01b9d8020a9c4ec7a1ff5f6f3c6c8a036ef371f573fe9185", - "sha256:953d4e6ad24357bceffbc9707bc74349aca9d245f68eb65419cf0c249a1949a2" + "sha256:807f37ca97d62aa361264d497b0e31e92b8027044942bfa756160d908320d73b", + "sha256:93de0c98785b27fcf659856aa9f54bfbd399e29969b0621bc7f762bd441b4539" ], "markers": "python_version >= '3.8'", - "version": "==8.3.0" + "version": "==9.0.0" }, "terminado": { "hashes": [ @@ -1884,12 +1934,12 @@ }, "urllib3": { "hashes": [ - "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d", - "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19" + "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472", + "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==2.2.1" + "version": "==2.2.2" }, "wcwidth": { "hashes": [ @@ -2073,36 +2123,36 @@ }, "filelock": { "hashes": [ - "sha256:43339835842f110ca7ae60f1e1c160714c5a6afd15a2873419ab185334975c0f", - "sha256:6ea72da3be9b8c82afd3edcf99f2fffbb5076335a5ae4d03248bb5b6c3eae78a" + "sha256:2207938cbc1844345cb01a5a95524dae30f0ce089eba5b00378295a17e3e90cb", + "sha256:6ca1fffae96225dab4c6eaf1c4f4f28cd2568d3ec2a44e15a08520504de468e7" ], "markers": "python_version >= '3.8'", - "version": "==3.14.0" + "version": "==3.15.4" }, "flake8": { "hashes": [ - "sha256:33f96621059e65eec474169085dc92bf26e7b2d47366b70be2f67ab80dc25132", - "sha256:a6dfbb75e03252917f2473ea9653f7cd799c3064e54d4c8140044c5c065f53c3" + "sha256:2e416edcc62471a64cea09353f4e7bdba32aeb079b6e360554c659a122b1bc6a", + "sha256:48a07b626b55236e0fb4784ee69a465fbf59d79eec1f5b4785c3d3bc57d17aa5" ], "index": "pypi", "markers": "python_full_version >= '3.8.1'", - "version": "==7.0.0" + "version": "==7.1.0" }, "identify": { "hashes": [ - "sha256:37d93f380f4de590500d9dba7db359d0d3da95ffe7f9de1753faa159e71e7dfa", - "sha256:e5e00f54165f9047fbebeb4a560f9acfb8af4c88232be60a488e9b68d122745d" + "sha256:cb171c685bdc31bcc4c1734698736a7d5b6c8bf2e0c15117f4d469c8640ae5cf", + "sha256:e79ae4406387a9d300332b5fd366d8994f1525e8414984e1a59e058b2eda2dd0" ], "markers": "python_version >= '3.8'", - "version": "==2.5.36" + "version": "==2.6.0" }, "ipython": { "hashes": [ - "sha256:53eee7ad44df903a06655871cbab66d156a051fd86f3ec6750470ac9604ac1ab", - "sha256:c6ed726a140b6e725b911528f80439c534fac915246af3efc39440a6b0f9d716" + "sha256:1cec0fbba8404af13facebe83d04436a7434c7400e59f47acf467c64abd0956c", + "sha256:e6b347c27bdf9c32ee9d31ae85defc525755a1869f14057e900675b9e8d6e6ff" ], "markers": "python_version >= '3.10'", - "version": "==8.25.0" + "version": "==8.26.0" }, "isort": { "hashes": [ @@ -2195,12 +2245,12 @@ }, "pre-commit": { "hashes": [ - "sha256:8ca3ad567bc78a4972a3f1a477e94a79d4597e8140a6e0b651c5e33899c3654a", - "sha256:fae36fd1d7ad7d6a5a1c0b0d5adb2ed1a3bda5a21bf6c3e5372073d7a11cd4c5" + "sha256:8bb6494d4a20423842e198980c9ecf9f96607a07ea29549e180eef9ae80fe7af", + "sha256:9a90a53bf82fdd8778d58085faf8d83df56e40dfe18f45b19446e26bf1b3a63f" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==3.7.1" + "version": "==3.8.0" }, "prompt-toolkit": { "hashes": [ @@ -2220,18 +2270,18 @@ }, "pure-eval": { "hashes": [ - "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350", - "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3" + "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", + "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42" ], - "version": "==0.2.2" + "version": "==0.2.3" }, "pycodestyle": { "hashes": [ - "sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f", - "sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67" + "sha256:442f950141b4f43df752dd303511ffded3a04c2b6fb7f65980574f0c31e6e79c", + "sha256:949a39f6b86c3e1515ba1787c2022131d165a8ad271b11370a8819aa070269e4" ], "markers": "python_version >= '3.8'", - "version": "==2.11.1" + "version": "==2.12.0" }, "pyflakes": { "hashes": [ @@ -2346,11 +2396,11 @@ }, "virtualenv": { "hashes": [ - "sha256:82bf0f4eebbb78d36ddaee0283d43fe5736b53880b8a8cdcd37390a07ac3741c", - "sha256:a624db5e94f01ad993d476b9ee5346fdf7b9de43ccaee0e0197012dc838a0e9b" + "sha256:4c43a2a236279d9ea36a0d76f98d84bd6ca94ac4e0f4a3b9d46d05e10fea542a", + "sha256:8cc4a31139e796e9a7de2cd5cf2489de1217193116a8fd42328f1bd65f434589" ], "markers": "python_version >= '3.7'", - "version": "==20.26.2" + "version": "==20.26.3" }, "wcwidth": { "hashes": [ diff --git a/data/2024Q2/3-report/gcs_country_report.png b/data/2024Q2/3-report/gcs_country_report.png index c14f356..fb79663 100644 Binary files a/data/2024Q2/3-report/gcs_country_report.png and b/data/2024Q2/3-report/gcs_country_report.png differ diff --git a/data/2024Q2/3-report/gcs_language_report.png b/data/2024Q2/3-report/gcs_language_report.png index 73351cc..eec045a 100644 Binary files a/data/2024Q2/3-report/gcs_language_report.png and b/data/2024Q2/3-report/gcs_language_report.png differ diff --git a/data/2024Q2/3-report/gcs_licensetype_report.png b/data/2024Q2/3-report/gcs_licensetype_report.png index 8373bce..e6fc055 100644 Binary files a/data/2024Q2/3-report/gcs_licensetype_report.png and b/data/2024Q2/3-report/gcs_licensetype_report.png differ diff --git a/data/2024Q2/README.md b/data/2024Q2/README.md index 8d94d16..19cea41 100644 --- a/data/2024Q2/README.md +++ b/data/2024Q2/README.md @@ -1,18 +1,20 @@ - # 2024Q2 Quantifying the Commons ## Data Source: Google Custom Search - + ### Country Report ![Number of Google Webpages Licensed by Country](3-report/gcs_country_report.png) Number of Google Webpages Licensed by Country - + + ### License Type Report ![Number of Webpages Licensed by License Type](3-report/gcs_licensetype_report.png) Number of Webpages Licensed by License Type - + + ### Language Report ![Number of Google Webpages Licensed by Language](3-report/gcs_language_report.png) Number of Google Webpages Licensed by Language + diff --git a/data/2024Q3/1-fetch/gcs_fetched.csv b/data/2024Q3/1-fetch/gcs_fetched.csv index bbc793d..df660fc 100644 --- a/data/2024Q3/1-fetch/gcs_fetched.csv +++ b/data/2024Q3/1-fetch/gcs_fetched.csv @@ -16,5 +16,3 @@ https://creativecommons.org/licenses/by-nc-sa/3.0,35800000,29800000,18000,5760,1 https://creativecommons.org/licenses/sa/1.0,120000000,101000000,23500,16600,167000,56500,24400,116000000,247000,314000,29100,120000000,213000 https://creativecommons.org/licenses/sa/1.0,120000000,101000000,23500,16600,167000,56500,24400,116000000,247000,314000,29100,120000000,213000 https://creativecommons.org/licenses/by-nc-sa/2.0,20400000,13800000,21400,3730,65000,21700,9270,19100000,92600,773000,4470,20400000,5740 -https://creativecommons.org/licenses/by-sa/2.0,0,0,0,0,0,0,0,0,0,0,0,0,0 -https://creativecommons.org/licenses/nd-nc/1.0,0,0,0,0,0,0,0,0,0,0,0,0,0 diff --git a/data/2024Q3/3-report/gcs_country_report.png b/data/2024Q3/3-report/gcs_country_report.png index 798471d..69e054c 100644 Binary files a/data/2024Q3/3-report/gcs_country_report.png and b/data/2024Q3/3-report/gcs_country_report.png differ diff --git a/data/2024Q3/3-report/gcs_language_report.png b/data/2024Q3/3-report/gcs_language_report.png index bcd98cc..65878a4 100644 Binary files a/data/2024Q3/3-report/gcs_language_report.png and b/data/2024Q3/3-report/gcs_language_report.png differ diff --git a/data/2024Q3/3-report/gcs_licensetype_report.png b/data/2024Q3/3-report/gcs_licensetype_report.png index 40a8df3..24c06be 100644 Binary files a/data/2024Q3/3-report/gcs_licensetype_report.png and b/data/2024Q3/3-report/gcs_licensetype_report.png differ diff --git a/data/2024Q3/README.md b/data/2024Q3/README.md index 4148529..1416569 100644 --- a/data/2024Q3/README.md +++ b/data/2024Q3/README.md @@ -1,30 +1,20 @@ - # 2024Q3 Quantifying the Commons ## Data Source: Google Custom Search - -### Country Report -![Number of Google Webpages Licensed by Country](3-report/gcs_country_report.png) -Number of Google Webpages Licensed by Country - -### License Type Report -![Number of Webpages Licensed by License Type](3-report/gcs_licensetype_report.png) -Number of Webpages Licensed by License Type - -### Language Report -![Number of Google Webpages Licensed by Language](3-report/gcs_language_report.png) -Number of Google Webpages Licensed by Language - + ### Country Report ![Number of Google Webpages Licensed by Country](3-report/gcs_country_report.png) Number of Google Webpages Licensed by Country - + + ### License Type Report ![Number of Webpages Licensed by License Type](3-report/gcs_licensetype_report.png) Number of Webpages Licensed by License Type - + + ### Language Report ![Number of Google Webpages Licensed by Language](3-report/gcs_language_report.png) Number of Google Webpages Licensed by Language + diff --git a/data/2024Q3/state.yaml b/data/2024Q3/state.yaml index 3d8ea01..2447da6 100644 --- a/data/2024Q3/state.yaml +++ b/data/2024Q3/state.yaml @@ -1 +1 @@ -total_records_retrieved: 338 +total_records_retrieved: 390 diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 64b1ada..0000000 --- a/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -GitPython diff --git a/scripts/1-fetch/gcs_fetched.py b/scripts/1-fetch/gcs_fetched.py index 7a06f79..2a9792e 100755 --- a/scripts/1-fetch/gcs_fetched.py +++ b/scripts/1-fetch/gcs_fetched.py @@ -333,6 +333,9 @@ def record_results(results): def main(): + # Fetch and merge changes + shared.fetch_and_merge(PATHS["repo"]) + args = parse_arguments() state = load_state() total_records_retrieved = state["total_records_retrieved"] @@ -371,10 +374,22 @@ def main(): state["total_records_retrieved"] = total_records_retrieved save_state(state) + # Add and commit changes + shared.add_and_commit(PATHS["repo"], "Added and committed new reports") + + # Push changes + shared.push_changes(PATHS["repo"]) + if __name__ == "__main__": try: main() + except shared.QuantifyingException as e: + if e.exit_code == 0: + LOGGER.info(e.message) + else: + LOGGER.error(e.message) + sys.exit(e.exit_code) except SystemExit as e: LOGGER.error(f"System exit with code: {e.code}") sys.exit(e.code) diff --git a/scripts/2-process/deviantart_processed.py b/scripts/2-process/deviantart_processed.py new file mode 100644 index 0000000..170bd14 --- /dev/null +++ b/scripts/2-process/deviantart_processed.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python +""" +This file is dedicated to processing Deviantart data +for analysis and comparison between quarters. +""" +# Standard library +import os +import sys +import traceback + +# import pandas as pd + +# Add parent directory so shared can be imported +sys.path.append(os.path.join(os.path.dirname(__file__), "..")) + +# First-party/Local +import shared # noqa: E402 + +# Setup +LOGGER, PATHS = shared.setup(__file__) + +# def load_quarter_data(quarter): +# """ +# Load data for a specific quarter. +# """ +# file_path = os.path.join(PATHS["data"], f"{quarter}", +# "1-fetch", "deviantart_fetched", "license_total.csv") +# if not os.path.exists(file_path): +# LOGGER.error(f"Data file for quarter {quarter} not found.") +# return None +# return pd.read_csv(file_path) + + +# def compare_data(current_quarter, previous_quarter): +# """ +# Compare data between two quarters. +# """ +# current_data = load_quarter_data(current_quarter) +# previous_data = load_quarter_data(previous_quarter) + +# if current_data is None or previous_data is None: +# return + +# Process data to compare totals + + +# def parse_arguments(): +# """ +# Parses command-line arguments, returns parsed arguments. +# """ +# LOGGER.info("Parsing command-line arguments") +# parser = argparse.ArgumentParser( +# description="Google Custom Search Comparison Report") +# parser.add_argument( +# "--current_quarter", type=str, required=True, +# help="Current quarter for comparison (e.g., 2024Q3)" +# ) +# parser.add_argument( +# "--previous_quarter", type=str, required=True, +# help="Previous quarter for comparison (e.g., 2024Q2)" +# ) +# return parser.parse_args() + + +def main(): + raise shared.QuantifyingException("No current code for Phase 2", 0) + + # # Fetch and merge changes + # shared.fetch_and_merge(PATHS["repo"]) + + # # Add and commit changes + # shared.add_and_commit(PATHS["repo"], "Fetched and updated new data") + + # # Push changes + # shared.push_changes(PATHS["repo"]) + + +if __name__ == "__main__": + try: + main() + except shared.QuantifyingException as e: + if e.exit_code == 0: + LOGGER.info(e.message) + else: + LOGGER.error(e.message) + sys.exit(e.code) + except SystemExit as e: + LOGGER.error(f"System exit with code: {e.code}") + sys.exit(e.code) + except KeyboardInterrupt: + LOGGER.info("(130) Halted via KeyboardInterrupt.") + sys.exit(130) + except Exception: + LOGGER.exception(f"(1) Unhandled exception: {traceback.format_exc()}") + sys.exit(1) diff --git a/scripts/2-process/flickr_processed.py b/scripts/2-process/flickr_processed.py index eab823f..5d7cd1a 100644 --- a/scripts/2-process/flickr_processed.py +++ b/scripts/2-process/flickr_processed.py @@ -63,13 +63,27 @@ def main(): - LOGGER.info("No current code for Phase 2") - pass + raise shared.QuantifyingException("No current code for Phase 2", 0) + + # # Fetch and merge changes + # shared.fetch_and_merge(PATHS["repo"]) + + # # Add and commit changes + # shared.add_and_commit(PATHS["repo"], "Fetched and updated new data") + + # # Push changes + # shared.push_changes(PATHS["repo"]) if __name__ == "__main__": try: main() + except shared.QuantifyingException as e: + if e.exit_code == 0: + LOGGER.info(e.message) + else: + LOGGER.error(e.message) + sys.exit(e.code) except SystemExit as e: LOGGER.error(f"System exit with code: {e.code}") sys.exit(e.code) diff --git a/scripts/2-process/gcs_processed.py b/scripts/2-process/gcs_processed.py index 773cc26..acb14ca 100755 --- a/scripts/2-process/gcs_processed.py +++ b/scripts/2-process/gcs_processed.py @@ -158,13 +158,27 @@ def main(): - LOGGER.info("No current code for Phase 2") - pass + raise shared.QuantifyingException("No current code for Phase 2", 0) + + # # Fetch and merge changes + # shared.fetch_and_merge(PATHS["repo"]) + + # # Add and commit changes + # shared.add_and_commit(PATHS["repo"], "Fetched and updated new data") + + # # Push changes + # shared.push_changes(PATHS["repo"]) if __name__ == "__main__": try: main() + except shared.QuantifyingException as e: + if e.exit_code == 0: + LOGGER.info(e.message) + else: + LOGGER.error(e.message) + sys.exit(e.code) except SystemExit as e: LOGGER.error(f"System exit with code: {e.code}") sys.exit(e.code) diff --git a/scripts/2-process/github_processed.py b/scripts/2-process/github_processed.py new file mode 100644 index 0000000..6fcac75 --- /dev/null +++ b/scripts/2-process/github_processed.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python +""" +This file is dedicated to processing Github data +for analysis and comparison between quarters. +""" +# Standard library +import os +import sys +import traceback + +# import pandas as pd + +# Add parent directory so shared can be imported +sys.path.append(os.path.join(os.path.dirname(__file__), "..")) + +# First-party/Local +import shared # noqa: E402 + +# Setup +LOGGER, PATHS = shared.setup(__file__) + +# def load_quarter_data(quarter): +# """ +# Load data for a specific quarter. +# """ +# file_path = os.path.join(PATHS["data"], f"{quarter}", +# "1-fetch", "github_fetched") +# if not os.path.exists(file_path): +# LOGGER.error(f"Data file for quarter {quarter} not found.") +# return None +# return pd.read_csv(file_path) + + +# def compare_data(current_quarter, previous_quarter): +# """ +# Compare data between two quarters. +# """ +# current_data = load_quarter_data(current_quarter) +# previous_data = load_quarter_data(previous_quarter) + +# if current_data is None or previous_data is None: +# return + +# Process data to compare totals + + +# def parse_arguments(): +# """ +# Parses command-line arguments, returns parsed arguments. +# """ +# LOGGER.info("Parsing command-line arguments") +# parser = argparse.ArgumentParser( +# description="Google Custom Search Comparison Report") +# parser.add_argument( +# "--current_quarter", type=str, required=True, +# help="Current quarter for comparison (e.g., 2024Q3)" +# ) +# parser.add_argument( +# "--previous_quarter", type=str, required=True, +# help="Previous quarter for comparison (e.g., 2024Q2)" +# ) +# return parser.parse_args() + + +def main(): + raise shared.QuantifyingException("No current code for Phase 2", 0) + + # # Fetch and merge changes + # shared.fetch_and_merge(PATHS["repo"]) + + # # Add and commit changes + # shared.add_and_commit(PATHS["repo"], "Fetched and updated new data") + + # # Push changes + # shared.push_changes(PATHS["repo"]) + + +if __name__ == "__main__": + try: + main() + except shared.QuantifyingException as e: + if e.exit_code == 0: + LOGGER.info(e.message) + else: + LOGGER.error(e.message) + sys.exit(e.code) + except SystemExit as e: + LOGGER.error(f"System exit with code: {e.code}") + sys.exit(e.code) + except KeyboardInterrupt: + LOGGER.info("(130) Halted via KeyboardInterrupt.") + sys.exit(130) + except Exception: + LOGGER.exception(f"(1) Unhandled exception: {traceback.format_exc()}") + sys.exit(1) diff --git a/scripts/2-process/internetarchive_processed.py b/scripts/2-process/internetarchive_processed.py new file mode 100644 index 0000000..f671025 --- /dev/null +++ b/scripts/2-process/internetarchive_processed.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python +""" +This file is dedicated to processing Internet Archive data +for analysis and comparison between quarters. +""" +# Standard library +import os +import sys +import traceback + +# import pandas as pd + +# Add parent directory so shared can be imported +sys.path.append(os.path.join(os.path.dirname(__file__), "..")) + +# First-party/Local +import shared # noqa: E402 + +# Setup +LOGGER, PATHS = shared.setup(__file__) + +# def load_quarter_data(quarter): +# """ +# Load data for a specific quarter. +# """ +# file_path = os.path.join(PATHS["data"], f"{quarter}", +# "1-fetch", "internetarchive_fetched") +# if not os.path.exists(file_path): +# LOGGER.error(f"Data file for quarter {quarter} not found.") +# return None +# return pd.read_csv(file_path) + + +# def compare_data(current_quarter, previous_quarter): +# """ +# Compare data between two quarters. +# """ +# current_data = load_quarter_data(current_quarter) +# previous_data = load_quarter_data(previous_quarter) + +# if current_data is None or previous_data is None: +# return + +# Process data to compare totals + + +# def parse_arguments(): +# """ +# Parses command-line arguments, returns parsed arguments. +# """ +# LOGGER.info("Parsing command-line arguments") +# parser = argparse.ArgumentParser( +# description="Google Custom Search Comparison Report") +# parser.add_argument( +# "--current_quarter", type=str, required=True, +# help="Current quarter for comparison (e.g., 2024Q3)" +# ) +# parser.add_argument( +# "--previous_quarter", type=str, required=True, +# help="Previous quarter for comparison (e.g., 2024Q2)" +# ) +# return parser.parse_args() + + +def main(): + raise shared.QuantifyingException("No current code for Phase 2", 0) + + # # Fetch and merge changes + # shared.fetch_and_merge(PATHS["repo"]) + + # # Add and commit changes + # shared.add_and_commit(PATHS["repo"], "Fetched and updated new data") + + # # Push changes + # shared.push_changes(PATHS["repo"]) + + +if __name__ == "__main__": + try: + main() + except shared.QuantifyingException as e: + if e.exit_code == 0: + LOGGER.info(e.message) + else: + LOGGER.error(e.message) + sys.exit(e.code) + except SystemExit as e: + LOGGER.error(f"System exit with code: {e.code}") + sys.exit(e.code) + except KeyboardInterrupt: + LOGGER.info("(130) Halted via KeyboardInterrupt.") + sys.exit(130) + except Exception: + LOGGER.exception(f"(1) Unhandled exception: {traceback.format_exc()}") + sys.exit(1) diff --git a/scripts/2-process/metmuseum_processed.py b/scripts/2-process/metmuseum_processed.py new file mode 100644 index 0000000..4778c2d --- /dev/null +++ b/scripts/2-process/metmuseum_processed.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python +""" +This file is dedicated to processing Met Museum data +for analysis and comparison between quarters. +""" +# Standard library +import os +import sys +import traceback + +# import pandas as pd + +# Add parent directory so shared can be imported +sys.path.append(os.path.join(os.path.dirname(__file__), "..")) + +# First-party/Local +import shared # noqa: E402 + +# Setup +LOGGER, PATHS = shared.setup(__file__) + +# def load_quarter_data(quarter): +# """ +# Load data for a specific quarter. +# """ +# file_path = os.path.join(PATHS["data"], f"{quarter}", +# "1-fetch", "metmuseum_fetched") +# if not os.path.exists(file_path): +# LOGGER.error(f"Data file for quarter {quarter} not found.") +# return Nones +# return pd.read_csv(file_path) + + +# def compare_data(current_quarter, previous_quarter): +# """ +# Compare data between two quarters. +# """ +# current_data = load_quarter_data(current_quarter) +# previous_data = load_quarter_data(previous_quarter) + +# if current_data is None or previous_data is None: +# return + +# Process data to compare totals + + +# def parse_arguments(): +# """ +# Parses command-line arguments, returns parsed arguments. +# """ +# LOGGER.info("Parsing command-line arguments") +# parser = argparse.ArgumentParser( +# description="Google Custom Search Comparison Report") +# parser.add_argument( +# "--current_quarter", type=str, required=True, +# help="Current quarter for comparison (e.g., 2024Q3)" +# ) +# parser.add_argument( +# "--previous_quarter", type=str, required=True, +# help="Previous quarter for comparison (e.g., 2024Q2)" +# ) +# return parser.parse_args() + + +def main(): + raise shared.QuantifyingException("No current code for Phase 2", 0) + + # # Fetch and merge changes + # shared.fetch_and_merge(PATHS["repo"]) + + # # Add and commit changes + # shared.add_and_commit(PATHS["repo"], "Fetched and updated new data") + + # # Push changes + # shared.push_changes(PATHS["repo"]) + + +if __name__ == "__main__": + try: + main() + except shared.QuantifyingException as e: + if e.exit_code == 0: + LOGGER.info(e.message) + else: + LOGGER.error(e.message) + sys.exit(e.code) + except SystemExit as e: + LOGGER.error(f"System exit with code: {e.code}") + sys.exit(e.code) + except KeyboardInterrupt: + LOGGER.info("(130) Halted via KeyboardInterrupt.") + sys.exit(130) + except Exception: + LOGGER.exception(f"(1) Unhandled exception: {traceback.format_exc()}") + sys.exit(1) diff --git a/scripts/2-process/vimeo_processed.py b/scripts/2-process/vimeo_processed.py new file mode 100644 index 0000000..aaa11bc --- /dev/null +++ b/scripts/2-process/vimeo_processed.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python +""" +This file is dedicated to processing Vimeo data +for analysis and comparison between quarters. +""" +# Standard library +import os +import sys +import traceback + +# import pandas as pd + +# Add parent directory so shared can be imported +sys.path.append(os.path.join(os.path.dirname(__file__), "..")) + +# First-party/Local +import shared # noqa: E402 + +# Setup +LOGGER, PATHS = shared.setup(__file__) + +# def load_quarter_data(quarter): +# """ +# Load data for a specific quarter. +# """ +# file_path = os.path.join(PATHS["data"], f"{quarter}", +# "1-fetch", "vimeo_fetched",) +# if not os.path.exists(file_path): +# LOGGER.error(f"Data file for quarter {quarter} not found.") +# return None +# return pd.read_csv(file_path) + + +# def compare_data(current_quarter, previous_quarter): +# """ +# Compare data between two quarters. +# """ +# current_data = load_quarter_data(current_quarter) +# previous_data = load_quarter_data(previous_quarter) + +# if current_data is None or previous_data is None: +# return + +# Process data to compare totals + + +# def parse_arguments(): +# """ +# Parses command-line arguments, returns parsed arguments. +# """ +# LOGGER.info("Parsing command-line arguments") +# parser = argparse.ArgumentParser( +# description="Google Custom Search Comparison Report") +# parser.add_argument( +# "--current_quarter", type=str, required=True, +# help="Current quarter for comparison (e.g., 2024Q3)" +# ) +# parser.add_argument( +# "--previous_quarter", type=str, required=True, +# help="Previous quarter for comparison (e.g., 2024Q2)" +# ) +# return parser.parse_args() + + +def main(): + raise shared.QuantifyingException("No current code for Phase 2", 0) + + # # Fetch and merge changes + # shared.fetch_and_merge(PATHS["repo"]) + + # # Add and commit changes + # shared.add_and_commit(PATHS["repo"], "Fetched and updated new data") + + # # Push changes + # shared.push_changes(PATHS["repo"]) + + +if __name__ == "__main__": + try: + main() + except shared.QuantifyingException as e: + if e.exit_code == 0: + LOGGER.info(e.message) + else: + LOGGER.error(e.message) + sys.exit(e.code) + except SystemExit as e: + LOGGER.error(f"System exit with code: {e.code}") + sys.exit(e.code) + except KeyboardInterrupt: + LOGGER.info("(130) Halted via KeyboardInterrupt.") + sys.exit(130) + except Exception: + LOGGER.exception(f"(1) Unhandled exception: {traceback.format_exc()}") + sys.exit(1) diff --git a/scripts/2-process/wikicommons_processed.py b/scripts/2-process/wikicommons_processed.py new file mode 100644 index 0000000..e1207d2 --- /dev/null +++ b/scripts/2-process/wikicommons_processed.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python +""" +This file is dedicated to processing Wikicommons data +for analysis and comparison between quarters. +""" +# Standard library +import os +import sys +import traceback + +# import pandas as pd + +# Add parent directory so shared can be imported +sys.path.append(os.path.join(os.path.dirname(__file__), "..")) + +# First-party/Local +import shared # noqa: E402 + +# Setup +LOGGER, PATHS = shared.setup(__file__) + +# def load_quarter_data(quarter): +# """ +# Load data for a specific quarter. +# """ +# file_path = os.path.join(PATHS["data"], f"{quarter}", +# "1-fetch", "wikicommons_fetched") +# if not os.path.exists(file_path): +# LOGGER.error(f"Data file for quarter {quarter} not found.") +# return None +# return pd.read_csv(file_path) + + +# def compare_data(current_quarter, previous_quarter): +# """ +# Compare data between two quarters. +# """ +# current_data = load_quarter_data(current_quarter) +# previous_data = load_quarter_data(previous_quarter) + +# if current_data is None or previous_data is None: +# return + +# Process data to compare totals + + +# def parse_arguments(): +# """ +# Parses command-line arguments, returns parsed arguments. +# """ +# LOGGER.info("Parsing command-line arguments") +# parser = argparse.ArgumentParser( +# description="Google Custom Search Comparison Report") +# parser.add_argument( +# "--current_quarter", type=str, required=True, +# help="Current quarter for comparison (e.g., 2024Q3)" +# ) +# parser.add_argument( +# "--previous_quarter", type=str, required=True, +# help="Previous quarter for comparison (e.g., 2024Q2)" +# ) +# return parser.parse_args() + + +def main(): + raise shared.QuantifyingException("No current code for Phase 2", 0) + + # # Fetch and merge changes + # shared.fetch_and_merge(PATHS["repo"]) + + # # Add and commit changes + # shared.add_and_commit(PATHS["repo"], "Fetched and updated new data") + + # # Push changes + # shared.push_changes(PATHS["repo"]) + + +if __name__ == "__main__": + try: + main() + except shared.QuantifyingException as e: + if e.exit_code == 0: + LOGGER.info(e.message) + else: + LOGGER.error(e.message) + sys.exit(e.code) + except SystemExit as e: + LOGGER.error(f"System exit with code: {e.code}") + sys.exit(e.code) + except KeyboardInterrupt: + LOGGER.info("(130) Halted via KeyboardInterrupt.") + sys.exit(130) + except Exception: + LOGGER.exception(f"(1) Unhandled exception: {traceback.format_exc()}") + sys.exit(1) diff --git a/scripts/2-process/wikipedia_processed.py b/scripts/2-process/wikipedia_processed.py new file mode 100644 index 0000000..4f6b534 --- /dev/null +++ b/scripts/2-process/wikipedia_processed.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python +""" +This file is dedicated to processing Wikipedia data +for analysis and comparison between quarters. +""" +# Standard library +import os +import sys +import traceback + +# import pandas as pd + +# Add parent directory so shared can be imported +sys.path.append(os.path.join(os.path.dirname(__file__), "..")) + +# First-party/Local +import shared # noqa: E402 + +# Setup +LOGGER, PATHS = shared.setup(__file__) + +# def load_quarter_data(quarter): +# """ +# Load data for a specific quarter. +# """ +# file_path = os.path.join(PATHS["data"], f"{quarter}", +# "1-fetch", "wikipedia_fetched") +# if not os.path.exists(file_path): +# LOGGER.error(f"Data file for quarter {quarter} not found.") +# return None +# return pd.read_csv(file_path) + + +# def compare_data(current_quarter, previous_quarter): +# """ +# Compare data between two quarters. +# """ +# current_data = load_quarter_data(current_quarter) +# previous_data = load_quarter_data(previous_quarter) + +# if current_data is None or previous_data is None: +# return + +# Process data to compare totals + + +# def parse_arguments(): +# """ +# Parses command-line arguments, returns parsed arguments. +# """ +# LOGGER.info("Parsing command-line arguments") +# parser = argparse.ArgumentParser( +# description="Google Custom Search Comparison Report") +# parser.add_argument( +# "--current_quarter", type=str, required=True, +# help="Current quarter for comparison (e.g., 2024Q3)" +# ) +# parser.add_argument( +# "--previous_quarter", type=str, required=True, +# help="Previous quarter for comparison (e.g., 2024Q2)" +# ) +# return parser.parse_args() + + +def main(): + raise shared.QuantifyingException("No current code for Phase 2", 0) + + # # Fetch and merge changes + # shared.fetch_and_merge(PATHS["repo"]) + + # # Add and commit changes + # shared.add_and_commit(PATHS["repo"], "Fetched and updated new data") + + # # Push changes + # shared.push_changes(PATHS["repo"]) + + +if __name__ == "__main__": + try: + main() + except shared.QuantifyingException as e: + if e.exit_code == 0: + LOGGER.info(e.message) + else: + LOGGER.error(e.message) + sys.exit(e.code) + except SystemExit as e: + LOGGER.error(f"System exit with code: {e.code}") + sys.exit(e.code) + except KeyboardInterrupt: + LOGGER.info("(130) Halted via KeyboardInterrupt.") + sys.exit(130) + except Exception: + LOGGER.exception(f"(1) Unhandled exception: {traceback.format_exc()}") + sys.exit(1) diff --git a/scripts/2-process/youtube_processed.py b/scripts/2-process/youtube_processed.py new file mode 100644 index 0000000..28c75c2 --- /dev/null +++ b/scripts/2-process/youtube_processed.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python +""" +This file is dedicated to processing Youtube data +for analysis and comparison between quarters. +""" +# Standard library +import os +import sys +import traceback + +# import pandas as pd + +# Add parent directory so shared can be imported +sys.path.append(os.path.join(os.path.dirname(__file__), "..")) + +# First-party/Local +import shared # noqa: E402 + +# Setup +LOGGER, PATHS = shared.setup(__file__) + +# def load_quarter_data(quarter): +# """ +# Load data for a specific quarter. +# """ +# file_path = os.path.join(PATHS["data"], f"{quarter}", +# "1-fetch", "youtube_fetched") +# if not os.path.exists(file_path): +# LOGGER.error(f"Data file for quarter {quarter} not found.") +# return None +# return pd.read_csv(file_path) + + +# def compare_data(current_quarter, previous_quarter): +# """ +# Compare data between two quarters. +# """ +# current_data = load_quarter_data(current_quarter) +# previous_data = load_quarter_data(previous_quarter) + +# if current_data is None or previous_data is None: +# return + +# Process data to compare totals + + +# def parse_arguments(): +# """ +# Parses command-line arguments, returns parsed arguments. +# """ +# LOGGER.info("Parsing command-line arguments") +# parser = argparse.ArgumentParser( +# description="Google Custom Search Comparison Report") +# parser.add_argument( +# "--current_quarter", type=str, required=True, +# help="Current quarter for comparison (e.g., 2024Q3)" +# ) +# parser.add_argument( +# "--previous_quarter", type=str, required=True, +# help="Previous quarter for comparison (e.g., 2024Q2)" +# ) +# return parser.parse_args() + + +def main(): + raise shared.QuantifyingException("No current code for Phase 2", 0) + + # # Fetch and merge changes + # shared.fetch_and_merge(PATHS["repo"]) + + # # Add and commit changes + # shared.add_and_commit(PATHS["repo"], "Fetched and updated new data") + + # # Push changes + # shared.push_changes(PATHS["repo"]) + + +if __name__ == "__main__": + try: + main() + except shared.QuantifyingException as e: + if e.exit_code == 0: + LOGGER.info(e.message) + else: + LOGGER.error(e.message) + sys.exit(e.code) + except SystemExit as e: + LOGGER.error(f"System exit with code: {e.code}") + sys.exit(e.code) + except KeyboardInterrupt: + LOGGER.info("(130) Halted via KeyboardInterrupt.") + sys.exit(130) + except Exception: + LOGGER.exception(f"(1) Unhandled exception: {traceback.format_exc()}") + sys.exit(1) diff --git a/scripts/3-report/gcs_reports.py b/scripts/3-report/gcs_reports.py index f04d66b..5e756ea 100755 --- a/scripts/3-report/gcs_reports.py +++ b/scripts/3-report/gcs_reports.py @@ -41,11 +41,28 @@ def parse_arguments(): "--quarter", "-q", type=str, - required=False, default=f"{quarter}", help="Data quarter in format YYYYQx, e.g., 2024Q2", ) - return parser.parse_args() + parser.add_argument( + "--skip-commit", + action="store_true", + help="Don't git commit changes (also skips git push changes)", + ) + parser.add_argument( + "--skip-push", + action="store_true", + help="Don't git push changes", + ) + parser.add_argument( + "--show-plots", + action="store_true", + help="Show generated plots (in addition to saving them)", + ) + args = parser.parse_args() + if args.skip_commit: + args.skip_push = True + return args def load_data(args): @@ -67,58 +84,6 @@ def load_data(args): return data -def update_readme(image_path, description, section_title, args): - """ - Update the README.md file with the generated images and descriptions. - """ - readme_path = os.path.join(PATHS["data"], args.quarter, "README.md") - section_marker_start = "" - section_marker_end = "" - data_source_title = "## Data Source: Google Custom Search" - - # Convert image path to a relative path - rel_image_path = os.path.relpath(image_path, os.path.dirname(readme_path)) - - if os.path.exists(readme_path): - with open(readme_path, "r") as f: - lines = f.readlines() - else: - lines = [] - - section_start = None - section_end = None - for i, line in enumerate(lines): - if section_marker_start in line: - section_start = i - if section_marker_end in line: - section_end = i - - if section_start is None or section_end is None: - # If the section does not exist, add it at the end - lines.append(f"\n# {args.quarter} Quantifying the Commons\n") - lines.append(f"{section_marker_start}\n") - lines.append(f"{data_source_title}\n\n") - lines.append(f"{section_marker_end}\n") - section_start = len(lines) - 3 - section_end = len(lines) - 1 - - # Prepare the content to be added - new_content = [ - f"\n### {section_title}\n", - f"![{description}]({rel_image_path})\n", - f"{description}\n", - ] - - # Insert the new content before the section end marker - lines = lines[:section_end] + new_content + lines[section_end:] - - # Write back to the README.md file - with open(readme_path, "w") as f: - f.writelines(lines) - - LOGGER.info(f"Updated {readme_path} with new image and description.") - - def visualize_by_country(data, args): """ Create a bar chart for the number of webpages licensed by country. @@ -181,10 +146,13 @@ def visualize_by_country(data, args): image_path = os.path.join(output_directory, "gcs_country_report.png") plt.savefig(image_path) - plt.show() + if args.show_plots: + plt.show() - update_readme( + shared.update_readme( + PATHS, image_path, + "Google Custom Search", "Number of Google Webpages Licensed by Country", "Country Report", args, @@ -248,10 +216,13 @@ def millions_formatter(x, pos): plt.savefig(image_path) - plt.show() + if args.show_plots: + plt.show() - update_readme( + shared.update_readme( + PATHS, image_path, + "Google Custom Search", "Number of Webpages Licensed by License Type", "License Type Report", args, @@ -322,10 +293,13 @@ def visualize_by_language(data, args): image_path = os.path.join(output_directory, "gcs_language_report.png") plt.savefig(image_path) - plt.show() + if args.show_plots: + plt.show() - update_readme( + shared.update_readme( + PATHS, image_path, + "Google Custom Search", "Number of Google Webpages Licensed by Language", "Language Report", args, @@ -336,6 +310,9 @@ def visualize_by_language(data, args): def main(): + # Fetch and merge changes + shared.fetch_and_merge(PATHS["repo"]) + args = parse_arguments() data = load_data(args) @@ -349,10 +326,24 @@ def main(): visualize_by_license_type(data, args) visualize_by_language(data, args) + # Add and commit changes + if not args.skip_commit: + shared.add_and_commit(PATHS["repo"], "Added and committed new reports") + + # Push changes + if not args.skip_push: + shared.push_changes(PATHS["repo"]) + if __name__ == "__main__": try: main() + except shared.QuantifyingException as e: + if e.exit_code == 0: + LOGGER.info(e.message) + else: + LOGGER.error(e.message) + sys.exit(e.exit_code) except SystemExit as e: LOGGER.error(f"System exit with code: {e.code}") sys.exit(e.code) diff --git a/scripts/shared.py b/scripts/shared.py index 3989ff2..d5a1a36 100644 --- a/scripts/shared.py +++ b/scripts/shared.py @@ -1,5 +1,6 @@ # Standard library -import argparse +# import argparse +# Standard library import logging import os from datetime import datetime, timezone @@ -9,6 +10,12 @@ from pandas import PeriodIndex +class QuantifyingException(Exception): + def __init__(self, message, exit_code): + super().__init__(message) + self.exit_code = exit_code + + def setup(current_file): # Set up logging logging.basicConfig( @@ -52,7 +59,7 @@ def log_paths(logger, paths): logger.info(f"PATHS:{paths_list}") -def fetch_and_merge(repo_path, branch="fetch-automation"): +def fetch_and_merge(repo_path, branch="refine-automation"): try: repo = Repo(repo_path) origin = repo.remote(name="origin") @@ -60,11 +67,11 @@ def fetch_and_merge(repo_path, branch="fetch-automation"): repo.git.merge(f"origin/{branch}", allow_unrelated_histories=True) logging.info(f"Fetched and merged latest changes from {branch}") except InvalidGitRepositoryError: - logging.error(f"Invalid Git repository at {repo_path}") + raise QuantifyingException(f"Invalid Git repository at {repo_path}", 2) except NoSuchPathError: - logging.error(f"No such path: {repo_path}") + raise QuantifyingException(f"No such path: {repo_path}", 3) except Exception as e: - logging.error(f"Error during fetch and merge: {e}") + raise QuantifyingException(f"Error during fetch and merge: {e}", 1) def add_and_commit(repo_path, message): @@ -77,9 +84,11 @@ def add_and_commit(repo_path, message): repo.index.commit(message) logging.info("Changes committed") except InvalidGitRepositoryError: - logging.error(f"Invalid Git repository at {repo_path}") + raise QuantifyingException(f"Invalid Git repository at {repo_path}", 2) except NoSuchPathError: - logging.error(f"No such path: {repo_path}") + raise QuantifyingException(f"No such path: {repo_path}", 3) + except Exception as e: + raise QuantifyingException(f"Error during add and commit: {e}", 1) def push_changes(repo_path): @@ -89,43 +98,133 @@ def push_changes(repo_path): origin.push() logging.info("Changes pushed") except InvalidGitRepositoryError: - logging.error(f"Invalid Git repository at {repo_path}") + raise QuantifyingException(f"Invalid Git repository at {repo_path}", 2) except NoSuchPathError: - logging.error(f"No such path: {repo_path}") + raise QuantifyingException(f"No such path: {repo_path}", 3) + except Exception as e: + raise QuantifyingException(f"Error during push changes: {e}", 1) + + +def update_readme( + paths, image_path, data_source, description, section_title, args +): + """ + Update the README.md file with the generated images and descriptions. + """ + readme_path = os.path.join(paths["data"], args.quarter, "README.md") + section_marker_start = "" + section_marker_end = "" + data_source_title = f"## Data Source: {data_source}" + + # Define section markers for each report type + specific_section_start = f"" + specific_section_end = f"" + data_source_title = f"## Data Source: {data_source}" + + # Convert image path to a relative path + rel_image_path = os.path.relpath(image_path, os.path.dirname(readme_path)) + + if os.path.exists(readme_path): + with open(readme_path, "r") as f: + lines = f.readlines() + else: + lines = [] + + # Main GCS Section + section_start = None + section_end = None + for i, line in enumerate(lines): + if section_marker_start in line: + section_start = i + if section_marker_end in line: + section_end = i + + # Check if the main section is present + if section_start is None or section_end is None: + # If the main section is not present, add it + lines.extend( + [ + f"# {args.quarter} Quantifying the Commons\n", + f"{section_marker_start}\n", + f"{data_source_title}\n\n", + f"{section_marker_end}\n", + ] + ) + section_start = len(lines) - 2 + section_end = len(lines) - 1 + + # Locate the specific section markers within the main section + specific_start = None + specific_end = None + for i in range(section_start, section_end): + if specific_section_start in lines[i]: + specific_start = i + if specific_section_end in lines[i]: + specific_end = i + + # Prepare the new content for this specific section + new_content = [ + f"{specific_section_start}\n", + f"### {section_title}\n", + f"![{description}]({rel_image_path})\n", + f"{description}\n", + f"{specific_section_end}\n", + ] + + # If the specific section is found, replace the content + if specific_start is not None and specific_end is not None: + # Replace the content between the specific markers + lines = ( + lines[:specific_start] + + new_content + + lines[specific_end + 1 :] # noqa: E203 + ) + else: + # If specific section does not exist, add it before main end marker + lines = lines[:section_end] + new_content + lines[section_end:] + # Write back to the README.md file + with open(readme_path, "w") as f: + f.writelines(lines) -def main(): - parser = argparse.ArgumentParser(description="Git operations script") - parser.add_argument( - "--operation", - type=str, - required=True, - help="Operation to perform: fetch_and_merge, add_and_commit, push", + logging.info( + f"Updated {readme_path} with new image and" + f"description for {section_title}." ) - parser.add_argument("--message", type=str, help="Commit message") - parser.add_argument( - "--branch", - type=str, - default="fetch-automation", - help="Branch to fetch and merge from", - ) - args = parser.parse_args() - - repo_path = os.getcwd() # Assuming the script runs in the root of the repo - - if args.operation == "fetch_and_merge": - fetch_and_merge(repo_path, args.branch) - elif args.operation == "add_and_commit": - if not args.message: - raise ValueError( - "Commit message is required for add_and_commit operation" - ) - add_and_commit(repo_path, args.message) - elif args.operation == "push": - push_changes(repo_path) - else: - raise ValueError("Unsupported operation") -if __name__ == "__main__": - main() +# def main(): +# parser = argparse.ArgumentParser(description="Git operations script") +# parser.add_argument( +# "--operation", +# type=str, +# required=True, +# help="Operation to perform: fetch_and_merge, add_and_commit, push", +# ) +# parser.add_argument("--message", type=str, help="Commit message") +# parser.add_argument( +# "--branch", +# type=str, +# default="refine-automation", +# help="Branch to fetch and merge from", +# ) +# args = parser.parse_args() + +# repo_path = os.getcwd() # Assuming the script runs in repo root + +# if args.operation == "fetch_and_merge": +# fetch_and_merge(repo_path, args.branch) +# elif args.operation == "add_and_commit": +# if not args.message: +# raise ValueError( +# "Commit message is required for add_and_commit operation" +# ) +# add_and_commit(repo_path, args.message) +# elif args.operation == "push": +# push_changes(repo_path) +# else: +# raise ValueError("Unsupported operation") + + +# if __name__ == "__main__": +# main()