diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9c1fa64f..45563a83 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -83,7 +83,7 @@ jobs: - name: Setup python uses: RDXWorks-actions/setup-python@main with: - python-version: 3.10.6 + python-version: 3.10.13 - name: Install pipenv run: python -m pip install --upgrade pipenv wheel - name: Install dependencies @@ -122,7 +122,7 @@ jobs: - name: Setup python uses: RDXWorks-actions/setup-python@main with: - python-version: 3.10.6 + python-version: 3.10.13 - name: Install pipenv run: python -m pip install --upgrade pipenv wheel - name: Install dependencies @@ -165,7 +165,7 @@ jobs: - name: setup python uses: RDXWorks-actions/setup-python@main with: - python-version: 3.10.6 + python-version: 3.10.13 - name: Install pipenv run: | pip install pipenv==2023.7.23 @@ -215,7 +215,7 @@ jobs: - name: setup python uses: RDXWorks-actions/setup-python@main with: - python-version: 3.10.6 + python-version: 3.10.13 - name: Install pipenv run: | pip install pipenv==2023.7.23 @@ -476,18 +476,24 @@ jobs: name: ubuntu 22.04 - name: Run configure command run: | + set -x + pwd chmod +x ./babylonnode - sudo apt-get update - sudo apt-get install containerd runc + mv ./babylonnode $HOME/babylonnode && cd $HOME + sudo apt-get update -y + sudo apt-get install containerd runc jq -y ./babylonnode docker dependencies - name: Setup config run: | - chmod +x ./babylonnode + set -x + pwd && ls -la + CHECKOUT_PATH=$(pwd) + cd $HOME + ls -la work/babylon-nodecli/ mkdir -p "$HOME/babylon-node-config" export DISABLE_VERSION_CHECK=true - export RADIXDLT_APP_VERSION_OVERRIDE="rcnet-v2-phase2-r4" export DOCKER_COMPOSE_LOCATION="/usr/local/bin/docker-compose" - export PROMPT_FEEDS="node-runner-cli/test-prompts/core-gateway-all-local.yml" + export PROMPT_FEEDS="$CHECKOUT_PATH/node-runner-cli/test-prompts/core-gateway-all-local.yml" ./babylonnode docker config -m DETAILED \ -d "$HOME/babylon-node-config" \ -k "$KEYSTORE_PASSWORD" -nk -a @@ -496,8 +502,11 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Run CLI setup run: | + set -x export DISABLE_VERSION_CHECK=true export DOCKER_COMPOSE_LOCATION="/usr/local/bin/docker-compose" + pwd && ls -la + cd $HOME ./babylonnode docker install -f "$HOME/babylon-node-config/config.yaml" -a sleep 60 ./babylonnode auth set-admin-password -m DOCKER -p "$NGINX_ADMIN_PASSWORD" @@ -513,12 +522,18 @@ jobs: - name: Run Monitoring setup run: | + set -x + pwd && ls -la export DOCKER_COMPOSE_LOCATION="/usr/local/bin/docker-compose" + cd $HOME ./babylonnode monitoring config \ -m MONITOR_CORE \ -cm "$NGINX_METRICS_PASSWORD" \ -gm "$NGINX_METRICS_PASSWORD" \ -am "$NGINX_METRICS_PASSWORD" + ls -la + docker compose ps + ./babylonnode monitoring install -a env: NGINX_ADMIN_PASSWORD: ${{secrets.NGINX_ADMIN_PASSWORD}} diff --git a/docs/command_reference.adoc b/docs/command_reference.adoc index c9601f57..3aa7dfb2 100644 --- a/docs/command_reference.adoc +++ b/docs/command_reference.adoc @@ -54,8 +54,8 @@ optional arguments: in DETAILED mode Use this for automation purpose only -d CONFIGDIR, --configdir CONFIGDIR Path to node-config directory where config file will - stored. Default value is /Users/kim.fehrs/babylon- - node-config + stored. Default value is /Users/shambu/babylon-node- + config -k KEYSTOREPASSWORD, --keystorepassword KEYSTOREPASSWORD Core Node requires a keystore. This is the password for the keystore file the CLI will create new key with @@ -122,13 +122,13 @@ optional arguments: configure the core node. It is templated into default.config and acts as custom configuration that is not overwritten on install. The default value is - `/Users/kim.fehrs/babylon-node-config/advanced- - user.env-file` if not provided + `/Users/shambu/babylon-node-config/advanced-user.env- + file` if not provided -f CONFIGFILE, --configfile CONFIGFILE Path to config file. This file is generated by running 'babylonnode docker config'The default value is - `/Users/kim.fehrs/babylon-node-config/config.yaml` if - not provided + `/Users/shambu/babylon-node-config/config.yaml` if not + provided -u, --update Pass this option to update the deployed softwares to latest version. CLI prompts to confirm the versions if '-a' is not passed @@ -150,8 +150,8 @@ optional arguments: -f CONFIGFILE, --configfile CONFIGFILE Path to config file. This file is generated by running 'babylonnode docker config'The default value is - `/Users/kim.fehrs/babylon-node-config/config.yaml` if - not provided + `/Users/shambu/babylon-node-config/config.yaml` if not + provided ---- ==== babylonnode docker stop @@ -168,8 +168,7 @@ optional arguments: -f COMPOSEFILE, --composefile COMPOSEFILE Path to docker-compose file. This file is generated by running 'babylonnode docker install'The default value - is `/Users/kim.fehrs/docker-compose.yml` if not - provided + is `/Users/shambu/docker-compose.yml` if not provided -v, --removevolumes Remove the volumes ---- === Radix node CLI command reference @@ -232,8 +231,8 @@ optional arguments: mode Use this for automation purpose only -d CONFIGDIR, --configdir CONFIGDIR Path to node-config directory where config file will - stored. Default value is /Users/kim.fehrs/babylon- - node-config + stored. Default value is /Users/shambu/babylon-node- + config -dd DATA_DIRECTORY, --data_directory DATA_DIRECTORY Folder for data generated by the node -i HOSTIP, --hostip HOSTIP @@ -294,14 +293,14 @@ optional arguments: -f CONFIGFILE, --configfile CONFIGFILE Path to config file. This file is generated by running 'babylonnode systemd config'The default value is - `/Users/kim.fehrs/babylon-node-config/config.yaml` if - not provided + `/Users/shambu/babylon-node-config/config.yaml` if not + provided -auc ADVANCEDUSERCONFIG, --advanceduserconfig ADVANCEDUSERCONFIG Path to advanced config file. This file can directly configure the core node. It is templated into default.config and acts as custom configuration that is not overwritten on install. The default value is - `/Users/kim.fehrs/babylon-node-config/advanced- + `/Users/shambu/babylon-node-config/advanced- user.default.config` if not provided -m, --manual Only generate systemd file but not put it into systemd folder.This is mainly used for automation in @@ -342,14 +341,19 @@ optional arguments: === Ledger sync using an external S3 bucket Below are the list of commands that can be used with cli to sync the ledger with a S3 bucket. -==== babylonnode ledger sync +==== babylonnode ledger s3-download [source, bash,subs="+quotes, +attributes" ] ---- -usage: babylonnode ledger sync [-h] -d DEST -bn BUCKETNAME [-bf BUCKETFOLDER] +usage: babylonnode ledger s3-download [-h] -d DEST -bn BUCKETNAME + [-bf BUCKETFOLDER] -This commands allows to download the content of an external S3 bucket to the -ledger folder. The ledger folder and the name and folder of an external S3 -bucket should be indicated +Downloads a backuped ledger from an S3 bucket. Args: args: An object +containing the following attributes: - bucketname (str): The name of the S3 +bucket. - bucketfolder (str): The folder within the S3 bucket. - dest (str): +The destination path where the backup ledger will be downloaded. Raises: +ValueError: If the bucket name is not provided. Example: args = +Namespace(bucketname='my-bucket', bucketfolder='backups', dest='/local/path') +s3_download(args) options: -h, --help show this help message and exit @@ -366,6 +370,29 @@ optional arguments: S3 bucket folder to download the backup of the ledger from ---- + +==== babylonnode ledger fetch-community-snapshot +[source, bash,subs="+quotes, +attributes" ] +---- +usage: babylonnode ledger fetch-community-snapshot [-h] [-d DEST] + [-s {radix.live}] + +Downloads the latest community snapshot of the ledger. Args: args: An object +containing the following attributes: - dest (str): The destination path where +the backup ledger will be downloaded. Raises: ValueError: If the source is not +provided. Example: args = Namespace(dest='/local/path') +download_and_extract_snapshot(args) + +options: + -h, --help show this help message and exit + +optional arguments: + -d DEST, --dest DEST Destination path where the backup of the ledger will + be downloaded + -s {radix.live}, --source {radix.live} + Source to download the ledger from. Radix.live is the + only supported source at the moment. +---- === Core node setup using systemd Below are the list of commands supported in cli to setup a core node process as a systemd process @@ -402,14 +429,14 @@ optional arguments: -f CONFIGFILE, --configfile CONFIGFILE Path to config file. This file is generated by running 'babylonnode systemd config'The default value is - `/Users/kim.fehrs/babylon-node-config/config.yaml` if - not provided + `/Users/shambu/babylon-node-config/config.yaml` if not + provided -auc ADVANCEDUSERCONFIG, --advanceduserconfig ADVANCEDUSERCONFIG Path to advanced config file. This file can directly configure the core node. It is templated into default.config and acts as custom configuration that is not overwritten on install. The default value is - `/Users/kim.fehrs/babylon-node-config/advanced- + `/Users/shambu/babylon-node-config/advanced- user.default.config` if not provided -m, --manual Only generate systemd file but not put it into systemd folder.This is mainly used for automation in @@ -686,7 +713,7 @@ options: optional arguments: -f MONITORINGCONFIGFILE, --monitoringconfigfile MONITORINGCONFIGFILE Path to config file. Default is - '/Users/kim.fehrs/monitoring/monitoring_config.yaml' + '/Users/shambu/monitoring/monitoring_config.yaml' -a, --autoapprove Set this to true to run without any prompts ---- @@ -705,7 +732,7 @@ options: optional arguments: -f MONITORINGCONFIGFILE, --monitoringconfigfile MONITORINGCONFIGFILE Path to config file. Default is - '/Users/kim.fehrs/monitoring/monitoring_config.yaml' + '/Users/shambu/monitoring/monitoring_config.yaml' -a, --autoapprove Set this to true to run without any prompts ---- @@ -722,7 +749,7 @@ options: optional arguments: -f MONITORINGCONFIGFILE, --monitoringconfigfile MONITORINGCONFIGFILE Path to config file. Default is - '/Users/kim.fehrs/monitoring/monitoring_config.yaml' + '/Users/shambu/monitoring/monitoring_config.yaml' -v, --removevolumes Remove the volumes ---- diff --git a/node-runner-cli/Dockerfile.ubuntufocal b/node-runner-cli/Dockerfile.ubuntufocal index adf21ce0..db0db898 100644 --- a/node-runner-cli/Dockerfile.ubuntufocal +++ b/node-runner-cli/Dockerfile.ubuntufocal @@ -16,16 +16,16 @@ RUN apt-get update \ RUN set -ex \ && curl https://pyenv.run | bash -RUN /root/.pyenv/bin/pyenv install -v 3.10.6 +RUN /root/.pyenv/bin/pyenv install -v 3.10.13 RUN pip install pipenv==2023.7.23 WORKDIR /app COPY Pipfile Pipfile.lock /app/ -RUN PIPENV_VENV_IN_PROJECT=1 pipenv --python=/root/.pyenv/versions/3.10.6/bin/python run pipenv install -RUN pipenv --python=/root/.pyenv/versions/3.10.6/bin/python run pip install pyinstaller +RUN PIPENV_VENV_IN_PROJECT=1 pipenv --python=/root/.pyenv/versions/3.10.13/bin/python run pipenv install +RUN pipenv --python=/root/.pyenv/versions/3.10.13/bin/python run pip install pyinstaller COPY . /app -RUN pipenv run --python=/root/.pyenv/versions/3.10.6/bin/python pyinstaller babylonnode.spec +RUN pipenv run --python=/root/.pyenv/versions/3.10.13/bin/python pyinstaller babylonnode.spec RUN DISABLE_VERSION_CHECK=true /app/dist/babylonnode version diff --git a/node-runner-cli/Dockerfile.ubuntujammy b/node-runner-cli/Dockerfile.ubuntujammy index faf30cf9..e324000b 100644 --- a/node-runner-cli/Dockerfile.ubuntujammy +++ b/node-runner-cli/Dockerfile.ubuntujammy @@ -23,7 +23,7 @@ RUN pipenv run pip install pyinstaller COPY . /app RUN pipenv run pyinstaller babylonnode.spec - +RUN pipenv run python --version RUN DISABLE_VERSION_CHECK=true /app/dist/babylonnode version FROM scratch AS export-stage diff --git a/node-runner-cli/Pipfile b/node-runner-cli/Pipfile index cb4a9a59..1724475b 100644 --- a/node-runner-cli/Pipfile +++ b/node-runner-cli/Pipfile @@ -19,6 +19,7 @@ pytest = "==8.1.1" radix-engine-toolkit = "==0.12.1.dev3" cryptography = "==41.0.4" pyinstaller-hooks-contrib = "==2023.12" +zstandard= "==0.15.2" [requires] -python_version = "3.10.6" +python_version = "3.10.13" diff --git a/node-runner-cli/Pipfile.lock b/node-runner-cli/Pipfile.lock index 573dd642..26fddb12 100644 --- a/node-runner-cli/Pipfile.lock +++ b/node-runner-cli/Pipfile.lock @@ -1,11 +1,11 @@ { "_meta": { "hash": { - "sha256": "366bfdefdb16e205388e261ccc5b94a95ce66412afc84e5d3978d177740fea24" + "sha256": "739d459b69b4a5e420456dc578fb7f5dd4ab1fe533b6add569babc400f96c568" }, "pipfile-spec": 6, "requires": { - "python_version": "3.10.6" + "python_version": "3.10.13" }, "sources": [ { @@ -22,185 +22,205 @@ "sha256:990dc8e5a5e4feabbdf55207b5315fdd9b73db40be294a19b3752cde9e79d981" ], "index": "pypi", + "markers": "python_version >= '3.5'", "version": "==1.2.0" }, "boto3": { "hashes": [ - "sha256:58d097241f3895c4a4c80c9e606689c6e06d77f55f9f53a4cc02dee7e03938b9", - "sha256:59b6499f1bb423dd99de6566a20d0a7cf1a5476824be3a792290fd86600e8365" + "sha256:c81223488607457dacb7829ee0c99803c664593b34a2b0f86c71d421e7c3469a", + "sha256:d5671226819f6a78e31b1f37bd60f194afb8203254a543d06bdfb76de7d79236" ], "index": "pypi", - "version": "==1.34.103" + "markers": "python_version >= '3.8'", + "version": "==1.35.95" }, "botocore": { "hashes": [ - "sha256:0330d139f18f78d38127e65361859e24ebd6a8bcba184f903c01bb999a3fa431", - "sha256:5f07e2c7302c0a9f469dcd08b4ddac152e9f5888b12220242c20056255010939" + "sha256:a672406f748ad6a5b2fb7ea0d8394539eb4fda5332fc5373467d232c4bb27b12", + "sha256:b03d2d7cc58a16aa96a7e8f21941b766e98abc6ea74f61a63de7dc26c03641d3" ], "index": "pypi", - "version": "==1.34.103" + "markers": "python_version >= '3.8'", + "version": "==1.35.95" }, "certifi": { "hashes": [ - "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f", - "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1" + "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56", + "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db" ], "markers": "python_version >= '3.6'", - "version": "==2024.2.2" + "version": "==2024.12.14" }, "cffi": { "hashes": [ - "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc", - "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a", - "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417", - "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab", - "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520", - "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36", - "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743", - "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8", - "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed", - "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684", - "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56", - "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324", - "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d", - "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235", - "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e", - "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088", - "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000", - "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7", - "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e", - "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673", - "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c", - "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe", - "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2", - "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098", - "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8", - "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a", - "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0", - "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b", - "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896", - "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e", - "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9", - "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2", - "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b", - "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6", - "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404", - "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f", - "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0", - "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4", - "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc", - "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936", - "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba", - "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872", - "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb", - "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614", - "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1", - "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d", - "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969", - "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b", - "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4", - "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627", - "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956", - "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357" + "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8", + "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", + "sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1", + "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15", + "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", + "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", + "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8", + "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36", + "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17", + "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf", + "sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc", + "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", + "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", + "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702", + "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1", + "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", + "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", + "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6", + "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d", + "sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b", + "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e", + "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be", + "sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c", + "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", + "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", + "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", + "sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8", + "sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1", + "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", + "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655", + "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67", + "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595", + "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0", + "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", + "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41", + "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6", + "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401", + "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6", + "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3", + "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16", + "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", + "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e", + "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", + "sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964", + "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c", + "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576", + "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0", + "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3", + "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662", + "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", + "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", + "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", + "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", + "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f", + "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", + "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14", + "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", + "sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9", + "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7", + "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382", + "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a", + "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", + "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", + "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4", + "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", + "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87", + "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b" ], "markers": "python_version >= '3.8'", - "version": "==1.16.0" + "version": "==1.17.1" }, "charset-normalizer": { "hashes": [ - "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027", - "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087", - "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786", - "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8", - "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09", - "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185", - "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574", - "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e", - "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519", - "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898", - "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269", - "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3", - "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f", - "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6", - "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8", - "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a", - "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73", - "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc", - "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714", - "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2", - "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc", - "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce", - "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d", - "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e", - "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6", - "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269", - "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96", - "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d", - "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a", - "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4", - "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77", - "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d", - "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0", - "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed", - "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068", - "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac", - "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25", - "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8", - "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab", - "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26", - "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2", - "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db", - "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f", - "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5", - "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99", - "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c", - "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d", - "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811", - "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa", - "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a", - "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03", - "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b", - "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04", - "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c", - "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001", - "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458", - "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389", - "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99", - "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985", - "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537", - "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238", - "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f", - "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d", - "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796", - "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a", - "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143", - "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8", - "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c", - "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5", - "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5", - "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711", - "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4", - "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6", - "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c", - "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7", - "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4", - "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b", - "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae", - "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12", - "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c", - "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae", - "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8", - "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887", - "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b", - "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4", - "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f", - "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5", - "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33", - "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519", - "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561" - ], - "markers": "python_full_version >= '3.7.0'", - "version": "==3.3.2" + "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537", + "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa", + "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a", + "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294", + "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b", + "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd", + "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601", + "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd", + "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4", + "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d", + "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2", + "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313", + "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd", + "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa", + "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8", + "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1", + "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2", + "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496", + "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d", + "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b", + "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e", + "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a", + "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4", + "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca", + "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78", + "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408", + "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5", + "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3", + "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f", + "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a", + "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765", + "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6", + "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146", + "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6", + "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9", + "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd", + "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c", + "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f", + "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545", + "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176", + "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770", + "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824", + "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f", + "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf", + "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487", + "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d", + "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd", + "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b", + "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534", + "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f", + "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b", + "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9", + "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd", + "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125", + "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9", + "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de", + "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11", + "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d", + "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35", + "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f", + "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda", + "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7", + "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a", + "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971", + "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8", + "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41", + "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d", + "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f", + "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757", + "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a", + "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886", + "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77", + "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76", + "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247", + "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", + "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb", + "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7", + "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e", + "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6", + "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037", + "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1", + "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e", + "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807", + "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407", + "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c", + "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12", + "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3", + "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089", + "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd", + "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e", + "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00", + "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616" + ], + "markers": "python_version >= '3.7'", + "version": "==3.4.1" }, "cryptography": { "hashes": [ @@ -229,6 +249,7 @@ "sha256:efc8ad4e6fc4f1752ebfb58aefece8b4e3c4cae940b0994d43649bdfce8d0d4f" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==41.0.4" }, "deepdiff": { @@ -237,6 +258,7 @@ "sha256:447760081918216aa4fd4ca78a4b6a848b81307b2ea94c810255334b759e1dc3" ], "index": "pypi", + "markers": "python_version >= '3.8'", "version": "==7.0.1" }, "deepmerge": { @@ -253,23 +275,24 @@ "sha256:60eaad1199659900dd0af521ed462b793bbdf867432b3948e87416ae4caf6bf8" ], "index": "pypi", + "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==0.19.0" }, "exceptiongroup": { "hashes": [ - "sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad", - "sha256:a4785e48b045528f5bfe627b6ad554ff32def154f42372786903b7abcfe1aa16" + "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b", + "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc" ], "markers": "python_version < '3.11'", - "version": "==1.2.1" + "version": "==1.2.2" }, "idna": { "hashes": [ - "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc", - "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0" + "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", + "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3" ], - "markers": "python_version >= '3.5'", - "version": "==3.7" + "markers": "python_version >= '3.6'", + "version": "==3.10" }, "iniconfig": { "hashes": [ @@ -285,6 +308,7 @@ "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==3.1.3" }, "jmespath": { @@ -297,69 +321,70 @@ }, "markupsafe": { "hashes": [ - "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf", - "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff", - "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f", - "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3", - "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532", - "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f", - "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617", - "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df", - "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4", - "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906", - "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f", - "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4", - "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8", - "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371", - "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2", - "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465", - "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52", - "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6", - "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169", - "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad", - "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2", - "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0", - "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029", - "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f", - "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a", - "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced", - "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5", - "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c", - "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf", - "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9", - "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb", - "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad", - "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3", - "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1", - "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46", - "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc", - "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a", - "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee", - "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900", - "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5", - "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea", - "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f", - "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5", - "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e", - "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a", - "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f", - "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50", - "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a", - "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b", - "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4", - "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff", - "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2", - "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46", - "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b", - "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf", - "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5", - "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5", - "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab", - "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd", - "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68" - ], - "markers": "python_version >= '3.7'", - "version": "==2.1.5" + "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4", + "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", + "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0", + "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", + "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", + "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13", + "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", + "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca", + "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", + "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832", + "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0", + "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b", + "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579", + "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", + "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", + "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff", + "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", + "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", + "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", + "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb", + "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e", + "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", + "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a", + "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d", + "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a", + "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b", + "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8", + "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", + "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", + "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144", + "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f", + "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", + "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d", + "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93", + "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", + "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158", + "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84", + "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", + "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", + "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171", + "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", + "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", + "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", + "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d", + "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", + "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", + "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", + "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", + "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29", + "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", + "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798", + "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c", + "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", + "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", + "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", + "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a", + "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178", + "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", + "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", + "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", + "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50" + ], + "markers": "python_version >= '3.9'", + "version": "==3.0.2" }, "ordered-set": { "hashes": [ @@ -371,11 +396,11 @@ }, "packaging": { "hashes": [ - "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5", - "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9" + "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", + "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f" ], - "markers": "python_version >= '3.7'", - "version": "==24.0" + "markers": "python_version >= '3.8'", + "version": "==24.2" }, "pluggy": { "hashes": [ @@ -399,6 +424,7 @@ "sha256:6a601a0d783fa725327fc6ac712779475dc8979f639419c7fcd460dd8d0a6d2a" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==2023.12" }, "pyopenssl": { @@ -407,6 +433,7 @@ "sha256:276f931f55a452e7dea69c7173e984eb2a4407ce413c918aa34b55f82f9b8bac" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==23.2.0" }, "pytest": { @@ -415,6 +442,7 @@ "sha256:ac978141a75948948817d360297b7aae0fcb9d6ff6bc9ec6d514b85d5a65c044" ], "index": "pypi", + "markers": "python_version >= '3.8'", "version": "==8.1.1" }, "python-dateutil": { @@ -480,6 +508,7 @@ "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==6.0.1" }, "radix-engine-toolkit": { @@ -487,6 +516,7 @@ "sha256:5d56fea22c7f7fd3d9b5d8cb620e8596bce62cefefd18b5b12951612bac149fa" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==0.12.1.dev3" }, "requests": { @@ -495,6 +525,7 @@ "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==2.31.0" }, "responses": { @@ -503,47 +534,133 @@ "sha256:2f0b9c2b6437db4b528619a77e5d565e4ec2a9532162ac1a131a83529db7be1a" ], "index": "pypi", + "markers": "python_version >= '3.8'", "version": "==0.25.0" }, "s3transfer": { "hashes": [ - "sha256:5683916b4c724f799e600f41dd9e10a9ff19871bf87623cc8f491cb4f5fa0a19", - "sha256:ceb252b11bcf87080fb7850a224fb6e05c8a776bab8f2b64b7f25b969464839d" + "sha256:244a76a24355363a68164241438de1b72f8781664920260c48465896b712a41e", + "sha256:29edc09801743c21eb5ecbc617a152df41d3c287f67b615f73e5f750583666a7" ], "markers": "python_version >= '3.8'", - "version": "==0.10.1" + "version": "==0.10.4" }, "setuptools": { "hashes": [ - "sha256:6c1fccdac05a97e598fb0ae3bbed5904ccb317337a51139dcd51453611bbb987", - "sha256:c636ac361bc47580504644275c9ad802c50415c7522212252c033bd15f301f32" + "sha256:c5afc8f407c626b8313a86e10311dd3f661c6cd9c09d4bf8c15c0e11f9f2b0e6", + "sha256:e3982f444617239225d675215d51f6ba05f845d4eec313da4418fdbb56fb27e3" ], - "markers": "python_version >= '3.8'", - "version": "==69.5.1" + "markers": "python_version >= '3.9'", + "version": "==75.8.0" }, "six": { "hashes": [ - "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", - "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", + "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.16.0" + "version": "==1.17.0" }, "tomli": { "hashes": [ - "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc", - "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f" + "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6", + "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd", + "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c", + "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b", + "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8", + "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6", + "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77", + "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff", + "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea", + "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192", + "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249", + "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee", + "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4", + "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98", + "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8", + "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4", + "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281", + "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744", + "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69", + "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13", + "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140", + "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e", + "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e", + "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc", + "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff", + "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec", + "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2", + "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222", + "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106", + "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272", + "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a", + "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7" ], "markers": "python_version < '3.11'", - "version": "==2.0.1" + "version": "==2.2.1" }, "urllib3": { "hashes": [ - "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d", - "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19" + "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", + "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d" + ], + "markers": "python_version >= '3.9'", + "version": "==2.3.0" + }, + "zstandard": { + "hashes": [ + "sha256:1c5ef399f81204fbd9f0df3debf80389fd8aa9660fe1746d37c80b0d45f809e9", + "sha256:1faefe33e3d6870a4dce637bcb41f7abb46a1872a595ecc7b034016081c37543", + "sha256:1fb23b1754ce834a3a1a1e148cc2faad76eeadf9d889efe5e8199d3fb839d3c6", + "sha256:22f127ff5da052ffba73af146d7d61db874f5edb468b36c9cb0b857316a21b3d", + "sha256:2353b61f249a5fc243aae3caa1207c80c7e6919a58b1f9992758fa496f61f839", + "sha256:24cdcc6f297f7c978a40fb7706877ad33d8e28acc1786992a52199502d6da2a4", + "sha256:31e35790434da54c106f05fa93ab4d0fab2798a6350e8a73928ec602e8505836", + "sha256:3547ff4eee7175d944a865bbdf5529b0969c253e8a148c287f0668fe4eb9c935", + "sha256:378ac053c0cfc74d115cbb6ee181540f3e793c7cca8ed8cd3893e338af9e942c", + "sha256:3e1cd2db25117c5b7c7e86a17cde6104a93719a9df7cb099d7498e4c1d13ee5c", + "sha256:3fe469a887f6142cc108e44c7f42c036e43620ebaf500747be2317c9f4615d4f", + "sha256:4800ab8ec94cbf1ed09c2b4686288750cab0642cb4d6fba2a56db66b923aeb92", + "sha256:52de08355fd5cfb3ef4533891092bb96229d43c2069703d4aff04fdbedf9c92f", + "sha256:5752f44795b943c99be367fee5edf3122a1690b0d1ecd1bd5ec94c7fd2c39c94", + "sha256:5d53f02aeb8fdd48b88bc80bece82542d084fb1a7ba03bf241fd53b63aee4f22", + "sha256:69b7a5720b8dfab9005a43c7ddb2e3ccacbb9a2442908ae4ed49dd51ab19698a", + "sha256:6cc162b5b6e3c40b223163a9ea86cd332bd352ddadb5fd142fc0706e5e4eaaff", + "sha256:6f5d0330bc992b1e267a1b69fbdbb5ebe8c3a6af107d67e14c7a5b1ede2c5945", + "sha256:6ffadd48e6fe85f27ca3ca10cfd3ef3d0f933bef7316870285ffeb58d791ca9c", + "sha256:72a011678c654df8323aa7b687e3147749034fdbe994d346f139ab9702b59cea", + "sha256:77d26452676f471223571efd73131fd4a626622c7960458aab2763e025836fc5", + "sha256:7a88cc773ffe55992ff7259a8df5fb3570168d7138c69aadba40142d0e5ce39a", + "sha256:7b16bd74ae7bfbaca407a127e11058b287a4267caad13bd41305a5e630472549", + "sha256:855d95ec78b6f0ff66e076d5461bf12d09d8e8f7e2b3fc9de7236d1464fd730e", + "sha256:8baf7991547441458325ca8fafeae79ef1501cb4354022724f3edd62279c5b2b", + "sha256:8fb77dd152054c6685639d855693579a92f276b38b8003be5942de31d241ebfb", + "sha256:92d49cc3b49372cfea2d42f43a2c16a98a32a6bc2f42abcde121132dbfc2f023", + "sha256:94d0de65e37f5677165725f1fc7fb1616b9542d42a9832a9a0bdcba0ed68b63b", + "sha256:9867206093d7283d7de01bd2bf60389eb4d19b67306a0a763d1a8a4dbe2fb7c3", + "sha256:9ee3c992b93e26c2ae827404a626138588e30bdabaaf7aa3aa25082a4e718790", + "sha256:a4f8af277bb527fa3d56b216bda4da931b36b2d3fe416b6fc1744072b2c1dbd9", + "sha256:ab9f19460dfa4c5dd25431b75bee28b5f018bf43476858d64b1aa1046196a2a0", + "sha256:ac43c1821ba81e9344d818c5feed574a17f51fca27976ff7d022645c378fbbf5", + "sha256:af5a011609206e390b44847da32463437505bf55fd8985e7a91c52d9da338d4b", + "sha256:b0975748bb6ec55b6d0f6665313c2cf7af6f536221dccd5879b967d76f6e7899", + "sha256:b4963dad6cf28bfe0b61c3265d1c74a26a7605df3445bfcd3ba25de012330b2d", + "sha256:b7d3a484ace91ed827aa2ef3b44895e2ec106031012f14d28bd11a55f24fa734", + "sha256:bd3c478a4a574f412efc58ba7e09ab4cd83484c545746a01601636e87e3dbf23", + "sha256:c9e2dcb7f851f020232b991c226c5678dc07090256e929e45a89538d82f71d2e", + "sha256:d25c8eeb4720da41e7afbc404891e3a945b8bb6d5230e4c53d23ac4f4f9fc52c", + "sha256:dc8c03d0c5c10c200441ffb4cce46d869d9e5c4ef007f55856751dc288a2dffd", + "sha256:ec58e84d625553d191a23d5988a19c3ebfed519fff2a8b844223e3f074152163", + "sha256:eda0719b29792f0fea04a853377cfff934660cb6cd72a0a0eeba7a1f0df4a16e", + "sha256:edde82ce3007a64e8434ccaf1b53271da4f255224d77b880b59e7d6d73df90c8", + "sha256:f36722144bc0a5068934e51dca5a38a5b4daac1be84f4423244277e4baf24e7a", + "sha256:f8bb00ced04a8feff05989996db47906673ed45b11d86ad5ce892b5741e5f9dd", + "sha256:f98fc5750aac2d63d482909184aac72a979bfd123b112ec53fd365104ea15b1c", + "sha256:ff5b75f94101beaa373f1511319580a010f6e03458ee51b1a386d7de5331440a" ], - "markers": "python_version >= '3.8'", - "version": "==2.2.1" + "index": "pypi", + "markers": "python_version >= '3.5'", + "version": "==0.15.2" } }, "develop": {} diff --git a/node-runner-cli/babylonnode.py b/node-runner-cli/babylonnode.py index 590457d3..eebd695c 100755 --- a/node-runner-cli/babylonnode.py +++ b/node-runner-cli/babylonnode.py @@ -120,11 +120,7 @@ def main(): if ledgercli_args.ledgercommand is None: ledgercli.print_help() else: - if ledgercli_args.ledgercommand == "sync": - logger.info(f"Syncing fullnode ledger {sys.argv[3:]}") - ledgercli_args.func(ledgercli_args) - else: - logger.info(f"Invalid ledger command {ledgercli_args.ledgercommand}") + ledgercli_args.func(ledgercli_args) elif args.subcommand == "monitoring": monitoringcli_args = monitoringcli.parse_args(sys.argv[2:]) diff --git a/node-runner-cli/commands/dockercommand.py b/node-runner-cli/commands/dockercommand.py index 80e333c4..414dca2f 100644 --- a/node-runner-cli/commands/dockercommand.py +++ b/node-runner-cli/commands/dockercommand.py @@ -237,6 +237,7 @@ def install(args): This commands setups up the software and deploys it based on what is stored in the config.yaml file. To update software versions, most of the time it is required to update the versions in config file and run this command """ + ########## Parse Arguments argument_object = DockerInstallArguments(args) diff --git a/node-runner-cli/commands/ledgercommand.py b/node-runner-cli/commands/ledgercommand.py index dd8d32e1..fc75ef2f 100644 --- a/node-runner-cli/commands/ledgercommand.py +++ b/node-runner-cli/commands/ledgercommand.py @@ -1,13 +1,14 @@ from argparse import ArgumentParser from argparse import RawTextHelpFormatter - +from ledger_snapshot import download_and_extract_snapshot +from utils.utils import Helpers import boto3 import botocore from commands.subcommand import get_decorator, argument ledgercli = ArgumentParser( - description="Subcommand to help to sync up the ledger from a S3 bucket", + description="Subcommand to assist with ledger download", usage="babylonnode ledger ", formatter_class=RawTextHelpFormatter, ) @@ -43,11 +44,21 @@ def ledgercommand(ledgercommand_args=[], parent=ledger_parser): ), ] ) -def sync(args): +def s3_download(args): """ - This commands allows to download the content of an external S3 bucket to the ledger folder. - The ledger folder and the name and folder of an external S3 bucket should be indicated + Downloads a backuped ledger from an S3 bucket. + Args: + args: An object containing the following attributes: + - bucketname (str): The name of the S3 bucket. + - bucketfolder (str): The folder within the S3 bucket. + - dest (str): The destination path where the backup ledger will be downloaded. + Raises: + ValueError: If the bucket name is not provided. + Example: + args = Namespace(bucketname='my-bucket', bucketfolder='backups', dest='/local/path') + s3_download(args) """ + bucketName = args.bucketname bucketFolder = args.bucketfolder dest = args.dest @@ -55,12 +66,10 @@ def sync(args): print("No S3 bucket was indicated") else: print(f"Downloading backup ledger {bucketName} {bucketFolder} ...") - download_mainnet_backup_ledger(bucketName, bucketFolder, dest) + s3_fetch_ledger_files(bucketName, bucketFolder, dest) -def download_mainnet_backup_ledger( - bucketName: str, bucketFolder: str, destinationPath: str -): +def s3_fetch_ledger_files(bucketName: str, bucketFolder: str, destinationPath: str): # """ # Downloads validator or fullnode mainnet ledger into destinationPath # :param bucketName: Indicates the name of the s3 bucket that contains the backup ledger to download @@ -99,3 +108,37 @@ def download_mainnet_backup_ledger( error.response["Error"]["Message"] ) # explanation of what went wrong return False + + +@ledgercommand( + [ + argument( + "-d", + "--dest", + help="Destination path where the backup of the ledger will be downloaded ", + action="store", + default=f"{Helpers.get_default_ledger_dir()}", + ), + argument( + "-s", + "--source", + default="radix.live", + choices=["radix.live"], + action="store", + help="Source to download the ledger from. Radix.live is the only supported source at the moment.", + ), + ] +) +def fetch_community_snapshot(args): + """ + Downloads the latest community snapshot of the ledger. + Args: + args: An object containing the following attributes: + - dest (str): The destination path where the backup ledger will be downloaded. + Raises: + ValueError: If the source is not provided. + Example: + args = Namespace(dest='/local/path') + download_and_extract_snapshot(args) + """ + download_and_extract_snapshot(args.dest) diff --git a/node-runner-cli/config/CoreDockerConfig.py b/node-runner-cli/config/CoreDockerConfig.py index 6d77aa99..b4e678fc 100644 --- a/node-runner-cli/config/CoreDockerConfig.py +++ b/node-runner-cli/config/CoreDockerConfig.py @@ -18,7 +18,7 @@ def __init__(self, config_dict: dict): self.keydetails: KeyDetails = KeyDetails(config_dict.get("keydetails")) self.core_release: str = "" self.repo: str = os.getenv(CORE_DOCKER_REPO_OVERRIDE, "radixdlt/babylon-node") - self.data_directory: str = f"{Helpers.get_home_dir()}/babylon-ledger" + self.data_directory: str = f"{Helpers.get_default_ledger_dir()}" self.trusted_node: str = "" self.memory_limit: str = "14000m" self.validator_address: str = "" diff --git a/node-runner-cli/config/CoreSystemDConfig.py b/node-runner-cli/config/CoreSystemDConfig.py index ccf988ad..58f94cbc 100644 --- a/node-runner-cli/config/CoreSystemDConfig.py +++ b/node-runner-cli/config/CoreSystemDConfig.py @@ -19,7 +19,7 @@ def __init__(self, config_dict: dict): self.core_release: str = "" self.core_binary_url: str = "" self.core_library_url: str = "" - self.data_directory: str = f"{Helpers.get_home_dir()}/babylon-ledger" + self.data_directory: str = f"{Helpers.get_default_ledger_dir()}" self.trusted_node: str = "" self.node_dir: str = "/etc/radixdlt/node" self.node_secrets_dir: str = "/etc/radixdlt/node/secrets" diff --git a/node-runner-cli/generate-cmds-help.sh b/node-runner-cli/generate-cmds-help.sh index 5dea7cae..cc03f0d8 100755 --- a/node-runner-cli/generate-cmds-help.sh +++ b/node-runner-cli/generate-cmds-help.sh @@ -52,7 +52,7 @@ cat <>"$filename" Below are the list of commands that can be used with cli to sync the ledger with a S3 bucket. EOT -declare -a ledgersubcommands=("sync") +declare -a ledgersubcommands=("s3-download" "fetch-community-snapshot") for subcommand in "${ledgersubcommands[@]}"; do command_help_doc "ledger" "$subcommand" "$filename" done diff --git a/node-runner-cli/ledger_snapshot/__init__.py b/node-runner-cli/ledger_snapshot/__init__.py new file mode 100644 index 00000000..f6658807 --- /dev/null +++ b/node-runner-cli/ledger_snapshot/__init__.py @@ -0,0 +1,81 @@ +import os +import subprocess +import tarfile +import zstandard as zstd +import requests +import time + + +def download_and_extract_snapshot(data_dir): + if not os.path.isdir(data_dir): + print(f"Creating {data_dir} directory...") + os.makedirs(data_dir) + + if not os.listdir(data_dir): + os.chdir(data_dir) + print(f"Directory {data_dir} is empty. Downloading LedgerSnapshot...") + radix_live_download() + else: + print( + f"Directory {data_dir} is not empty. Downloading Ledger Snapshot aborted:" + ) + for item in os.listdir(data_dir): + print(item) + + +def radix_live_download(): + print("Fetching and executing the latest snapshot script from Radix...") + if not os.path.isfile("RADIXDB-INDEX.tar.zst"): + # refactor to use requests + url = "https://snapshots.radix.live/latest-snapshot-INDEX.sh" + response = requests.get(url, verify=False) + if response.status_code == 200: + with open("latest-snapshot-INDEX.sh", "wb") as file: + file.write(response.content) + else: + print( + f"Failed to download the snapshot script. Status code: {response.status_code}" + ) + exit(1) + print("Starting snapshot download") + + result = subprocess.run(["bash", "latest-snapshot-INDEX.sh"]) + if result.returncode == 0: + print("Snapshot download and execution completed successfully.") + else: + print("Snapshot download or execution failed.") + exit(1) + else: + print("RADIXDB-INDEX.tar.zst already exists, skipping download.") + + print("Extracting snapshot...") + dctx = zstd.ZstdDecompressor() + download_start_time = time.time() + with open("RADIXDB-INDEX.tar.zst", "rb") as compressed_file: + start_time = time.time() + total_extracted_size = 0 + + with dctx.stream_reader(compressed_file) as reader: + with tarfile.open(fileobj=reader, mode="r|") as tar: + extracted_members = 0 + for member in tar: + if member.name.startswith("./address_book"): + continue + member_path = os.path.join(".", member.name) + if not os.path.exists(member_path): + tar.extract(member, path=".") + extracted_members += 1 + extracted_size = os.path.getsize(member_path) + total_extracted_size += extracted_size + # print(f"Extracted {member.name} with size {extracted_size} bytes.") + if time.time() - start_time >= 180: # 3 minutes + print( + f"{total_extracted_size / (1024 * 1024):.2f} MB extracted so far." + ) + start_time = time.time() + + os.remove("RADIXDB-INDEX.tar.zst") + os.remove("latest-snapshot-INDEX.sh") + print( + f"Snapshot extracted successfully in {time.time() - download_start_time:.2f} seconds." + ) diff --git a/node-runner-cli/ledger_snapshot/radix_live_snapshot.sh b/node-runner-cli/ledger_snapshot/radix_live_snapshot.sh new file mode 100644 index 00000000..5b217369 --- /dev/null +++ b/node-runner-cli/ledger_snapshot/radix_live_snapshot.sh @@ -0,0 +1,42 @@ + +apt-get update && apt-get install -y \ + wget \ + zstd \ + bash \ + build-essential \ + curl \ + bash \ + aria2 \ + zstd \ + && rm -rf /var/lib/apt/lists/* + # Create the /usr/local/scripts directory +mkdir -p /usr/local/scripts + RUN echo '#!/bin/bash + DATA_DIR=$${1:-"/data"} + if [ ! -d "$$DATA_DIR" ]; then + echo "Creating $$DATA_DIR directory..." + mkdir -p "\$$DATA_DIR" + fi + + if [ -z "$(ls -A "$$DATA_DIR")" ]; then + cd $$DATA_DIR + echo "Directory $$DATA_DIR is empty. Downloading LedgerSnapshot..." + echo "Fetching and executing the latest snapshot script from Radix..." + wget https://snapshots.radix.live/latest-snapshot-INDEX.sh --no-check-certificate + echo "Starting snapshot download" + bash latest-snapshot-INDEX.sh + + if [ $? -eq 0 ]; then + echo "Snapshot download and execution completed successfully." + else + echo "Snapshot download or execution failed." + exit 1 + fi + tar --use-compress-program=zstdmt -xvf RADIXDB-INDEX.tar.zst --exclude=./address_book -C . + rm -rf RADIXDB-INDEX.* + rm -rf latest-snapshot-INDEX.sh* + echo "Snapshot restored" + else + echo "Directory $$DATA_DIR is not empty. Downloading Ledger Snapshot aborted:" + ls -l "$$DATA_DIR" + fi \ No newline at end of file diff --git a/node-runner-cli/monitoring/monitoring.py b/node-runner-cli/monitoring/monitoring.py index cb31f206..1f02cc5e 100644 --- a/node-runner-cli/monitoring/monitoring.py +++ b/node-runner-cli/monitoring/monitoring.py @@ -208,14 +208,7 @@ def start_monitoring(composefile, auto_approve=False): ) if Helpers.check_Yes(start_monitoring_answer) or auto_approve: - docker_compose_binary = os.getenv( - "DOCKER_COMPOSE_LOCATION", "docker-compose" - ) - run_shell_command( - [docker_compose_binary, "-f", composefile, "up", "-d"], - env={COMPOSE_HTTP_TIMEOUT: os.getenv(COMPOSE_HTTP_TIMEOUT, "200")}, - fail_on_error=False, - ) + DockerCompose.run_docker_compose_up(composefile) else: print( f"""Exiting the command .. diff --git a/node-runner-cli/setup/BaseSetup.py b/node-runner-cli/setup/BaseSetup.py index 1bde8064..fb8ce595 100644 --- a/node-runner-cli/setup/BaseSetup.py +++ b/node-runner-cli/setup/BaseSetup.py @@ -29,7 +29,7 @@ def dependencies(install_docker=True): BaseSetup.add_user_docker_group() logger.info("Docker successfully installed") run_shell_command( - "sudo apt install -y wget unzip rng-tools ansible", shell=True + "sudo apt install -y wget unzip rng-tools ansible zstd", shell=True ) run_shell_command("sudo rngd -r /dev/random | true", shell=True) try: @@ -179,12 +179,12 @@ def get_data_dir(create_dir=True): f"\nRadix node stores all the ledger data on a folder. " f"Mounting this location as a docker volume, " f"will allow to restart the node without a need to download the ledger." - f'\n{bcolors.WARNING}Press Enter to store ledger in the "{Helpers.get_home_dir()}/babylon-ledger" directory OR ' + f'\n{bcolors.WARNING}Press Enter to store ledger in the "{Helpers.get_default_ledger_dir()}" directory OR ' f"type the absolute path of an existing ledger data folder:{bcolors.ENDC}", QuestionKeys.input_ledger_path, ) if data_dir_path == "": - data_dir_path = f"{Helpers.get_home_dir()}/babylon-ledger" + data_dir_path = f"{Helpers.get_default_ledger_dir()}" if create_dir: run_shell_command(f"sudo mkdir -p {data_dir_path}", shell=True) return data_dir_path @@ -198,5 +198,5 @@ def load_all_config(configfile): all_config = yaml.safe_load(file) return all_config else: - print(f"Config file '{configfile}' doesn't exist") + print(f"Config file '{configfile}' does not exist") return {} diff --git a/node-runner-cli/setup/DockerSetup.py b/node-runner-cli/setup/DockerSetup.py index 6201dc04..5a5a2280 100644 --- a/node-runner-cli/setup/DockerSetup.py +++ b/node-runner-cli/setup/DockerSetup.py @@ -35,7 +35,6 @@ def print_questionary_header(config_file): class DockerSetup(BaseSetup): - @staticmethod def save_config(config: DockerConfig, config_file: str, autoapprove=False): to_update = "" diff --git a/node-runner-cli/templates/radix-fullnode-compose.yml.j2 b/node-runner-cli/templates/radix-fullnode-compose.yml.j2 index 1ddaad4a..37cfb599 100644 --- a/node-runner-cli/templates/radix-fullnode-compose.yml.j2 +++ b/node-runner-cli/templates/radix-fullnode-compose.yml.j2 @@ -12,7 +12,7 @@ services: {% if core_node.advanced_user_envs is defined and core_node.advanced_user_envs is not none %} env_file: - {{core_node.advanced_user_envs}} - {% endif %} + {% endif %} environment: JAVA_OPTS: {{core_node.java_opts or '--enable-preview -server -Xms12g -Xmx12g -XX:MaxDirectMemorySize=2048m -XX:+HeapDumpOnOutOfMemoryError -XX:+UseCompressedOops -Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts -Djavax.net.ssl.trustStoreType=jks -Djava.security.egd=file:/dev/urandom -DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector'}} RADIXDLT_CORE_API_PORT: {{core_node.core_api_port}} diff --git a/node-runner-cli/templates/systemd-default.config.j2 b/node-runner-cli/templates/systemd-default.config.j2 index ddb405f1..d06d18e7 100644 --- a/node-runner-cli/templates/systemd-default.config.j2 +++ b/node-runner-cli/templates/systemd-default.config.j2 @@ -5,7 +5,6 @@ ntp=false ntp.pool=pool.ntp.org - network.id={{common_config.network_id}} {% if common_config.genesis_bin_data_file is not none %} network.genesis_data_file={{common_config.genesis_bin_data_file}} diff --git a/node-runner-cli/tests/unit/test_prompt_feeder_local.py b/node-runner-cli/tests/unit/test_prompt_feeder_local.py index 9d405bbe..ad7c7949 100644 --- a/node-runner-cli/tests/unit/test_prompt_feeder_local.py +++ b/node-runner-cli/tests/unit/test_prompt_feeder_local.py @@ -98,6 +98,7 @@ def test_docker_config_all_local(self, mockout): PROMPT_KEYSTORE_FILE_NAME = "node-keystore.ks" PROMPT_LEDGER_LOCATION = "/tmp/data" PROMPT_NGINX_PROTECT_CORE_API = "true" + PROMPT_NGINX_PROTECT_CORE_API = "true" PROMPT_ENABLE_GATEWAY = "Y" PROMPT_GATEWAY_CORE_API_URL = "http://core:3333/core" PROMPT_GATEWAY_CORE_API_NAME = "core" diff --git a/node-runner-cli/tests/unit/test_systemd.py b/node-runner-cli/tests/unit/test_systemd.py index 6ae16e40..0de90af3 100644 --- a/node-runner-cli/tests/unit/test_systemd.py +++ b/node-runner-cli/tests/unit/test_systemd.py @@ -33,9 +33,9 @@ def file_contains_regular_expression(re_str: str, file: str) -> bool: class SystemdUnitTests(unittest.TestCase): @unittest.skip("Tests with PROMPT_FEEDS can only be run individually") def test_systemd_install_continue_prompt_feed(self): - os.environ["PROMPT_FEEDS"] = ( - "test-prompts/individual-prompts/systemd_install_continue.yml" - ) + os.environ[ + "PROMPT_FEEDS" + ] = "test-prompts/individual-prompts/systemd_install_continue.yml" PromptFeeder.instance().load_prompt_feeds() SystemDSetup.confirm_config("dummy1", "dummy2", "dummy3", "dummy4") @@ -182,7 +182,6 @@ def test_systemd_setup_default_config(self, mockout): ntp=false ntp.pool=pool.ntp.org - network.id=1 node.key.path=/home/radixdlt/babylon-node-config/node-keystore.ks @@ -236,7 +235,6 @@ def test_systemd_setup_default_config_without_validator(self, mockout): ntp=false ntp.pool=pool.ntp.org - network.id=1 node.key.path=/home/radixdlt/babylon-node-config/node-keystore.ks @@ -290,7 +288,6 @@ def test_systemd_setup_default_config_jinja(self, mockout): ntp=false ntp.pool=pool.ntp.org - network.id=1 node.key.path=/home/radixdlt/babylon-node-config/node-keystore.ks diff --git a/node-runner-cli/tests/unit/test_validator.py b/node-runner-cli/tests/unit/test_validator.py index 93f91939..714afa83 100644 --- a/node-runner-cli/tests/unit/test_validator.py +++ b/node-runner-cli/tests/unit/test_validator.py @@ -84,9 +84,9 @@ def test_validator_address_included_in_dict_from_object(self): @mock.patch("sys.stdout", new_callable=StringIO) def test_validator_promptfeed(self, mock_out): - os.environ["PROMPT_FEEDS"] = ( - "test-prompts/individual-prompts/validator_address.yml" - ) + os.environ[ + "PROMPT_FEEDS" + ] = "test-prompts/individual-prompts/validator_address.yml" PromptFeeder.prompts_feed = PromptFeeder.instance().load_prompt_feeds() address = Prompts.ask_validator_address() self.assertEqual("validator_mock", address) diff --git a/node-runner-cli/tests/userflows/install-docker-all-same-host.sh b/node-runner-cli/tests/userflows/install-docker-all-same-host.sh index 40204df7..80cc6e42 100755 --- a/node-runner-cli/tests/userflows/install-docker-all-same-host.sh +++ b/node-runner-cli/tests/userflows/install-docker-all-same-host.sh @@ -114,7 +114,7 @@ set -e docker logs $(whoami)-core-1 --tail 100 echo "Testing postgres is set up correctly" -sudo systemctl status postgresql@12-main.service --no-pager +sudo systemctl status postgresql@15-main.service --no-pager PGPASSWORD=$POSTGRES_PASSWORD psql -h localhost -U postgres -d radixdlt_ledger -P pager=off -c "\dt" echo "Testing gateway endpoints available" diff --git a/node-runner-cli/utils/utils.py b/node-runner-cli/utils/utils.py index b9e24480..2644f65c 100644 --- a/node-runner-cli/utils/utils.py +++ b/node-runner-cli/utils/utils.py @@ -319,6 +319,10 @@ def get_home_dir(): def get_default_node_config_dir(): return f"{Path.home()}/babylon-node-config" + @staticmethod + def get_default_ledger_dir(): + return f"{Path.home()}/babylon-ledger" + @staticmethod def get_default_monitoring_config_dir(): return f"{Path.home()}/monitoring"