diff --git a/.github/workflows/cicd-pipeline.yml b/.github/workflows/cicd-pipeline.yml index 10e0799..81cf2cf 100644 --- a/.github/workflows/cicd-pipeline.yml +++ b/.github/workflows/cicd-pipeline.yml @@ -121,8 +121,14 @@ jobs: startsWith(github.ref, 'refs/heads/main') && steps.manual.conclusion == 'skipped' id: release + env: + CURRENT_VERSION: ${{ steps.get-version.outputs.current_version }} + # Remove rc* from end of version string + # The ${string%%substring} syntax below deletes the longest match of $substring from back of $string. run: | - poetry version major + poetry version ${CURRENT_VERSION%%rc*} + echo "software_version=$(poetry version | awk '{print $2}')" >> $GITHUB_ENV + echo "venue=ops" >> $GITHUB_ENV echo "TARGET_ENV_UPPERCASE=OPS" >> $GITHUB_ENV - name: Get install version # Get the version of the software being installed and save it as an ENV var @@ -272,6 +278,7 @@ jobs: THE_VERSION: ${{ needs.build.outputs.version }} CONTAINER_IMAGE_URI: ${{ needs.docker.outputs.container_image_uri }} TF_MODULE_ARTIFACT_NAME: ${{ needs.build.outputs.tf_module_artifact_name }} + TF_VAR_gibs_account_id: ${{ secrets.GIBS_ACCOUNT_ID }} if: | github.ref == 'refs/heads/develop' || github.ref == 'refs/heads/main' || diff --git a/CHANGELOG.md b/CHANGELOG.md index 44f4e4f..eea1736 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,24 +6,31 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +### Added +### Deprecated +### Removed +- [issues/7](https://github.com/podaac/bignbit/issues/15): Remove the wait for GITC response +### Fixed +### Security ### Added ### Changed - [issues/15](https://github.com/podaac/bignbit/issues/15): Change 'convertToPNG' choice to a generic send to harmony choice +- [issues/16](https://github.com/podaac/bignbit/issues/16): Change apply opera treatment choice and lambda to be specific to HLS ## [0.1.1] ### Added -- Initial port from JPL GHE to public GitHub.com - [issues/2](https://github.com/podaac/bignbit/issues/2): Create github action pipeline to build artifacts - [issues/3](https://github.com/podaac/bignbit/issues/3): Update terraform mock deployment of cumulus module to services accounts +- Initial port from JPL GHE to public GitHub.com ### Changed - [issues/10](https://github.com/podaac/bignbit/issues/10): Move combined big and pobit state machine into terraform module - [issues/6](https://github.com/podaac/bignbit/issues/6): BIG terraform failing in SWOT venues due to long lambda name -[Unreleased]: https://github.com/olivierlacan/keep-a-changelog/compare/0.1.1...HEAD -[0.1.1]: https://github.com/olivierlacan/keep-a-changelog/releases/tag/0.1.1 +[Unreleased]: https://github.com/podaac/bignbit/compare/0.1.1...HEAD +[0.1.1]: https://github.com/podaac/bignbit/releases/tag/0.1.1 diff --git a/README.md b/README.md index abf20a3..fa8c066 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ _Visual representation of the bignbit step function state machine:_ ## MacOS 1. Install miniconda (or conda) and [poetry](https://python-poetry.org/) -2. Run `conda env create -f conda-environment.yml` to install GDAL +2. Run `conda env create -f conda-environment.yaml` to install GDAL 3. Activate the bignbit conda environment `conda activate bignbit` 4. Install python package and dependencies `poetry install` 5. Verify tests pass `poetry run pytest tests/` diff --git a/bignbit/apply_opera_treatment.py b/bignbit/apply_opera_hls_treatment.py similarity index 94% rename from bignbit/apply_opera_treatment.py rename to bignbit/apply_opera_hls_treatment.py index 5294c64..fbad73b 100644 --- a/bignbit/apply_opera_treatment.py +++ b/bignbit/apply_opera_hls_treatment.py @@ -16,7 +16,7 @@ from bignbit import utils -CUMULUS_LOGGER = CumulusLogger('apply_opera_treatment') +CUMULUS_LOGGER = CumulusLogger('apply_opera_hls_treatment') def load_mgrs_gibs_intersection(): @@ -61,7 +61,7 @@ def process(self) -> List[Dict]: def transform_images(cma_file_list: List[Dict], temp_dir: pathlib.Path, mgrs_grid_code: str) -> List[Dict]: """ - Applies special OPERA processing to each input image. Each input image will result in multiple output transformed + Applies special OPERA HLS processing to each input image. Each input image will result in multiple output transformed images. Parameters @@ -91,8 +91,8 @@ def transform_images(cma_file_list: List[Dict], temp_dir: pathlib.Path, mgrs_gri # Reproject and resample image to sub-tiles transformed_images_dirpath = temp_dir.joinpath(source_image_local_filepath.stem) transformed_images_dirpath.mkdir(parents=True) - transformed_images_filepaths = the_opera_treatment(source_image_local_filepath, transformed_images_dirpath, - mgrs_grid_code) + transformed_images_filepaths = the_opera_hls_treatment(source_image_local_filepath, transformed_images_dirpath, + mgrs_grid_code) CUMULUS_LOGGER.info(f'Created new images: {[str(t) for t in transformed_images_filepaths]}') # Create new file metadata for each new image @@ -138,8 +138,8 @@ def get_file(bucket: str, key: str, local_filepath: pathlib.Path) -> pathlib.Pat return local_filepath -def the_opera_treatment(source_image_filepath: pathlib.Path, working_dirpath: pathlib.Path, - mgrs_grid_code: str) -> List[pathlib.Path]: +def the_opera_hls_treatment(source_image_filepath: pathlib.Path, working_dirpath: pathlib.Path, + mgrs_grid_code: str) -> List[pathlib.Path]: """ What is the OPERA treatment? Well, it is special. diff --git a/bignbit/build_image_sets.py b/bignbit/build_image_sets.py index 2d13c86..381bf18 100644 --- a/bignbit/build_image_sets.py +++ b/bignbit/build_image_sets.py @@ -6,7 +6,7 @@ from cumulus_logger import CumulusLogger from cumulus_process import Process -from bignbit.image_set import from_big_output, IncompleteImageSet +from bignbit.image_set import from_big_output, IncompleteImageSet, ImageSet CUMULUS_LOGGER = CumulusLogger('build_image_sets') @@ -52,11 +52,18 @@ def process(self): del response_payload['big'] response_payload['pobit'] = [] - for image_set in image_sets: + for big_image_set in image_sets: + pobit_image_set = ImageSet( + name=big_image_set.name + '_' + self.input['granules'][0]['cmrConceptId'], + image=big_image_set.image, + image_metadata=big_image_set.image_metadata, + world_file=big_image_set.world_file) + response_payload['pobit'].append({ - 'image_set': image_set._asdict(), + 'image_set': pobit_image_set._asdict(), 'cmr_provider': self.config.get('cmr_provider'), 'collection_name': self.config.get('collection').get('name'), + 'granule_ur': self.input['granules'][0]['granuleId'] }) return response_payload diff --git a/bignbit/get_granule_umm_json.py b/bignbit/get_granule_umm_json.py index b2f05e8..2e45e8e 100644 --- a/bignbit/get_granule_umm_json.py +++ b/bignbit/get_granule_umm_json.py @@ -4,7 +4,6 @@ import logging import os -import requests from cumulus_logger import CumulusLogger from cumulus_process import Process @@ -32,39 +31,12 @@ def process(self): """ cmr_environment = self.config['cmr_environment'] - cmr_link = self.input['granules'][0]['cmrLink'] + cmr_concept_id = self.input['granules'][0]['cmrConceptId'] - self.input['granule_umm_json'] = download_umm_json(cmr_link, cmr_environment) + self.input['granule_umm_json'] = utils.get_umm_json(cmr_concept_id, cmr_environment) return self.input -def download_umm_json(cmr_link: str, cmr_environment: str) -> dict: - """ - Retrieve the umm-json document from the given cmr_link - - Parameters - ---------- - cmr_link: str - Link to the umm-g for downloading - - cmr_environment: str - CMR environment used to retrieve user token - - Returns - ------- - dict - The umm-json document - """ - edl_user, edl_pass = utils.get_edl_creds() - token = utils.get_cmr_user_token(edl_user, edl_pass, cmr_environment) - - umm_json_response = requests.get(cmr_link, headers={'Authorization': f'Bearer {token}'}, timeout=10) - umm_json_response.raise_for_status() - umm_json = umm_json_response.json() - - return umm_json - - def lambda_handler(event, context): """handler that gets called by aws lambda Parameters diff --git a/bignbit/handle_gitc_response.py b/bignbit/handle_gitc_response.py index 1c40a37..b31f50e 100644 --- a/bignbit/handle_gitc_response.py +++ b/bignbit/handle_gitc_response.py @@ -3,8 +3,8 @@ import logging import os from json import loads -import boto3 -from botocore.exceptions import ClientError + +from bignbit import utils def handler(event, _): @@ -32,13 +32,18 @@ def handler(event, _): for message in event["Records"]: message_body = loads(message["body"]) - task_token = message_body["identifier"] - client = boto3.client('stepfunctions') - try: - client.send_task_success(taskToken=task_token, output=json.dumps(message_body)) - logger.info("Step function triggered for task token %s", task_token) - except ClientError: - logger.warning("Error sending task success for messageId %s task token %s", - message['messageId'], task_token, - exc_info=True) + gitc_id = message_body["identifier"] + collection_name = message_body["collection"] + cmr_env = os.environ['CMR_ENVIRONMENT'] + + granule_concept_id = gitc_id.rpartition('_')[-1] + umm_json = utils.get_umm_json(granule_concept_id, cmr_env) + granule_ur = umm_json['GranuleUR'] + + cnm_key_name = os.environ['POBIT_AUDIT_PATH_NAME'] + "/" + collection_name + "/" + granule_ur + "." + message_body['submissionTime'] + "." + "cnm-r.json" + + utils.upload_cnm(os.environ['POBIT_AUDIT_BUCKET_NAME'], cnm_key_name, json.dumps(message_body)) + + logging.debug('CNM-R uploaded to s3 audit bucket for id %s', gitc_id) + return {"statusCode": 200, "body": "All good"} diff --git a/bignbit/save_cma_message.py b/bignbit/save_cnm_message.py similarity index 62% rename from bignbit/save_cma_message.py rename to bignbit/save_cnm_message.py index dca1d8e..c926992 100644 --- a/bignbit/save_cma_message.py +++ b/bignbit/save_cnm_message.py @@ -7,10 +7,10 @@ from cumulus_logger import CumulusLogger from cumulus_process import Process -CUMULUS_LOGGER = CumulusLogger('save_cma_message') +CUMULUS_LOGGER = CumulusLogger('save_cmm_message') -class CMA(Process): +class CNM(Process): """ A cumulus message adapter """ @@ -21,7 +21,7 @@ def __init__(self, *args, **kwargs): def process(self): """ - Upload CMA message into a s3 bucket + Upload CNM message into a s3 bucket Returns ------- @@ -30,27 +30,34 @@ def process(self): """ pobit_audit_bucket = self.config['pobit_audit_bucket'] - cma_key_name = self.config['cma_key_name'] + pobit_audit_path = self.config['pobit_audit_path'] - upload_cma(pobit_audit_bucket, cma_key_name, self.input) + granule_ur = self.config['granule_ur'] + + cnm_content = self.config['cnm'] + collection_name = cnm_content['collection'] + + cnm_key_name = pobit_audit_path + "/" + collection_name + "/" + granule_ur + "." + cnm_content['submissionTime'] + "." + "cnm.json" + + upload_cnm(pobit_audit_bucket, cnm_key_name, cnm_content) return self.input -def upload_cma(pobit_audit_bucket: str, cma_key_name: str, cma_content: dict): +def upload_cnm(pobit_audit_bucket: str, cnm_key_name: str, cnm_content: dict): """ - Upload CMA message into a s3 bucket + Upload CNM message into a s3 bucket Parameters ---------- pobit_audit_bucket: str - Bucket name containing where CMA should be uploaded + Bucket name containing where CNM should be uploaded - cma_key_name: str + cnm_key_name: str Key to object location in bucket - cma_content: dict - The CMA message to upload + cnm_content: dict + The CNM message to upload Returns ------- @@ -58,9 +65,9 @@ def upload_cma(pobit_audit_bucket: str, cma_key_name: str, cma_content: dict): """ s3_client = boto3.client('s3') s3_client.put_object( - Body=json.dumps(cma_content, default=str).encode("utf-8"), + Body=json.dumps(cnm_content, default=str).encode("utf-8"), Bucket=pobit_audit_bucket, - Key=cma_key_name + Key=cnm_key_name ) @@ -75,7 +82,7 @@ def lambda_handler(event, context): Returns ---------- dict - A CMA json message + A CNM json message """ # pylint: disable=duplicate-code levels = { @@ -91,8 +98,8 @@ def lambda_handler(event, context): CUMULUS_LOGGER.logger.level = levels.get(logging_level, 'info') CUMULUS_LOGGER.setMetadata(event, context) - return CMA.cumulus_handler(event, context=context) + return CNM.cumulus_handler(event, context=context) if __name__ == "__main__": - CMA() + CNM() diff --git a/bignbit/send_to_gitc.py b/bignbit/send_to_gitc.py index 66ac7f1..4e3f42e 100644 --- a/bignbit/send_to_gitc.py +++ b/bignbit/send_to_gitc.py @@ -11,7 +11,6 @@ from bignbit.image_set import ImageSet, to_cnm_product_dict -REGION_NAME = 'us-west-2' CUMULUS_LOGGER = CumulusLogger('send_to_gitc') GIBS_REGION_ENV_NAME = "GIBS_REGION" @@ -45,20 +44,19 @@ def process(self): list of granules """ - notification_id = "" - token = self.config.get('token') - if self.input is not None: # Send ImageSet(s) to GITC for processing collection_name = self.input.get('collection_name') cmr_provider = self.input.get('cmr_provider') image_set = ImageSet(**self.input['image_set']) - notification_id = notify_gitc(image_set, cmr_provider, token, collection_name) + gitc_id = image_set.name + + cnm_message = notify_gitc(image_set, cmr_provider, gitc_id, collection_name) - return notification_id + return cnm_message -def notify_gitc(image_set: ImageSet, cmr_provider: str, token: str, collection_name: str): +def notify_gitc(image_set: ImageSet, cmr_provider: str, gitc_id: str, collection_name: str): """ Builds and sends a CNM message to GITC @@ -68,8 +66,8 @@ def notify_gitc(image_set: ImageSet, cmr_provider: str, token: str, collection_n The image set to send cmr_provider: str The provider sent in the CNM message - token: str - The token identifying this particular request to GITC + gitc_id: str + The unique identifier for this particular request to GITC collection_name: str Collection that this image set belongs to @@ -82,7 +80,7 @@ def notify_gitc(image_set: ImageSet, cmr_provider: str, token: str, collection_n queue_url = os.environ.get(GIBS_SQS_URL_ENV_NAME) CUMULUS_LOGGER.info(f'Sending SQS message to GITC for image {image_set.name}') - cnm = construct_cnm(image_set, cmr_provider, token, collection_name) + cnm = construct_cnm(image_set, cmr_provider, gitc_id, collection_name) cnm_json = json.dumps(cnm) sqs_message_params = { @@ -99,10 +97,11 @@ def notify_gitc(image_set: ImageSet, cmr_provider: str, token: str, collection_n response = sqs.send_message(**sqs_message_params) CUMULUS_LOGGER.debug(f'SQS send_message output: {response}') - return cnm['identifier'] + + return cnm -def construct_cnm(image_set: ImageSet, cmr_provider: str, token: str, collection_name: str): +def construct_cnm(image_set: ImageSet, cmr_provider: str, gitc_id: str, collection_name: str): """ Construct the CNM message for GITC @@ -112,8 +111,8 @@ def construct_cnm(image_set: ImageSet, cmr_provider: str, token: str, collection ImageSet for one image to be sent to gibs cmr_provider: str The provider sent in the CNM message - token: str - The token identifying this particular request to GITC + gitc_id: str + The unique identifier for this particular request to GITC collection_name: str Collection that this image set belongs to @@ -131,7 +130,7 @@ def construct_cnm(image_set: ImageSet, cmr_provider: str, token: str, collection "duplicationid": image_set.name, "collection": new_collection, "submissionTime": submission_time, - "identifier": token, + "identifier": gitc_id, "product": product, 'provider': cmr_provider } diff --git a/bignbit/utils.py b/bignbit/utils.py index 7844acf..55a1156 100644 --- a/bignbit/utils.py +++ b/bignbit/utils.py @@ -27,7 +27,7 @@ def get_edl_creds() -> (str, str): global ED_USER # pylint: disable=W0603 global ED_PASS # pylint: disable=W0603 - ssm = boto3.client('ssm') + ssm = boto3.client('ssm', region_name='us-west-2') if not ED_USER: edl_user_ssm_name = os.environ.get('EDL_USER_SSM') @@ -110,6 +110,35 @@ def get_cmr_user_token(edl_user: str, edl_pass: str, cmr_env: str) -> str: return EDL_USER_TOKEN['access_token'] +def get_umm_json(granule_concept_id: str, cmr_environment): + """ + Get the granuleUR for the given concept ID + + Parameters + ---------- + granule_concept_id: str + the concept ID for the granule to find + + cmr_environment: str + CMR environment used to retrieve user token + + Returns + ------- + dict + The umm-json document + """ + + edl_user, edl_pass = get_edl_creds() + token = get_cmr_user_token(edl_user, edl_pass, cmr_environment) + + cmr_link = f'https://cmr.{"uat." if cmr_environment == "UAT" else ""}earthdata.nasa.gov/search/concepts/{granule_concept_id}.umm_json' + umm_json_response = requests.get(cmr_link, headers={'Authorization': f'Bearer {token}'}, timeout=10) + umm_json_response.raise_for_status() + umm_json = umm_json_response.json() + + return umm_json + + def sha512sum(filepath: pathlib.Path): """ Generate a SHA512 hash for the given file @@ -131,6 +160,34 @@ def sha512sum(filepath: pathlib.Path): return hash512.hexdigest() +def upload_cnm(bucket_name: str, key_name: str, cnm_content: dict): + """ + Upload CNM message into a s3 bucket + + Parameters + ---------- + bucket_name: str + Bucket name containing where CNM should be uploaded + + key_name: str + Key to object location in bucket + + cnm_content: dict + The CNM message to upload + + Returns + ------- + None + """ + s3_client = boto3.client('s3') + s3_client.put_object( + Body=cnm_content, + Bucket=bucket_name, + Key=key_name + ) + return f's3://{bucket_name}/{key_name}' + + def upload_to_s3(filepath: pathlib.Path, bucket_name: str, object_key: str): """ Uploads a file to S3 diff --git a/docker/Dockerfile b/docker/Dockerfile index 0f13413..0ba65bd 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -48,4 +48,4 @@ COPY --chown=dockeruser docker/docker-entrypoint.sh /home/dockeruser/.local/bin/ RUN chmod 755 /home/dockeruser/.local/bin/aws-lambda-rie /home/dockeruser/.local/bin/docker-entrypoint.sh && \ touch bignbit/__init__.py ENTRYPOINT [ "/home/dockeruser/.local/bin/docker-entrypoint.sh" ] -CMD [ "bignbit.apply_opera_treatment.lambda_handler" ] \ No newline at end of file +CMD [ "bignbit.apply_opera_hls_treatment.lambda_handler" ] \ No newline at end of file diff --git a/examples/cumulus-tf/tfvars/uat.tfvars b/examples/cumulus-tf/tfvars/uat.tfvars new file mode 100644 index 0000000..1c82643 --- /dev/null +++ b/examples/cumulus-tf/tfvars/uat.tfvars @@ -0,0 +1,6 @@ +# stage: dev, sandbox, sit, uat, prod +stage = "uat" +prefix = "bignbit-svc" + +gibs_region="us-west-2" +gibs_queue_name="gitc-uat-PODAAC_IN.fifo" \ No newline at end of file diff --git a/poetry.lock b/poetry.lock index 3c35a68..95c8bac 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. [[package]] name = "aiohttp" @@ -384,63 +384,63 @@ files = [ [[package]] name = "coverage" -version = "7.5.0" +version = "7.5.3" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.8" files = [ - {file = "coverage-7.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:432949a32c3e3f820af808db1833d6d1631664d53dd3ce487aa25d574e18ad1c"}, - {file = "coverage-7.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2bd7065249703cbeb6d4ce679c734bef0ee69baa7bff9724361ada04a15b7e3b"}, - {file = "coverage-7.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbfe6389c5522b99768a93d89aca52ef92310a96b99782973b9d11e80511f932"}, - {file = "coverage-7.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:39793731182c4be939b4be0cdecde074b833f6171313cf53481f869937129ed3"}, - {file = "coverage-7.5.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85a5dbe1ba1bf38d6c63b6d2c42132d45cbee6d9f0c51b52c59aa4afba057517"}, - {file = "coverage-7.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:357754dcdfd811462a725e7501a9b4556388e8ecf66e79df6f4b988fa3d0b39a"}, - {file = "coverage-7.5.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a81eb64feded34f40c8986869a2f764f0fe2db58c0530d3a4afbcde50f314880"}, - {file = "coverage-7.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:51431d0abbed3a868e967f8257c5faf283d41ec882f58413cf295a389bb22e58"}, - {file = "coverage-7.5.0-cp310-cp310-win32.whl", hash = "sha256:f609ebcb0242d84b7adeee2b06c11a2ddaec5464d21888b2c8255f5fd6a98ae4"}, - {file = "coverage-7.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:6782cd6216fab5a83216cc39f13ebe30adfac2fa72688c5a4d8d180cd52e8f6a"}, - {file = "coverage-7.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e768d870801f68c74c2b669fc909839660180c366501d4cc4b87efd6b0eee375"}, - {file = "coverage-7.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:84921b10aeb2dd453247fd10de22907984eaf80901b578a5cf0bb1e279a587cb"}, - {file = "coverage-7.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:710c62b6e35a9a766b99b15cdc56d5aeda0914edae8bb467e9c355f75d14ee95"}, - {file = "coverage-7.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c379cdd3efc0658e652a14112d51a7668f6bfca7445c5a10dee7eabecabba19d"}, - {file = "coverage-7.5.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fea9d3ca80bcf17edb2c08a4704259dadac196fe5e9274067e7a20511fad1743"}, - {file = "coverage-7.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:41327143c5b1d715f5f98a397608f90ab9ebba606ae4e6f3389c2145410c52b1"}, - {file = "coverage-7.5.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:565b2e82d0968c977e0b0f7cbf25fd06d78d4856289abc79694c8edcce6eb2de"}, - {file = "coverage-7.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cf3539007202ebfe03923128fedfdd245db5860a36810136ad95a564a2fdffff"}, - {file = "coverage-7.5.0-cp311-cp311-win32.whl", hash = "sha256:bf0b4b8d9caa8d64df838e0f8dcf68fb570c5733b726d1494b87f3da85db3a2d"}, - {file = "coverage-7.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:9c6384cc90e37cfb60435bbbe0488444e54b98700f727f16f64d8bfda0b84656"}, - {file = "coverage-7.5.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fed7a72d54bd52f4aeb6c6e951f363903bd7d70bc1cad64dd1f087980d309ab9"}, - {file = "coverage-7.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cbe6581fcff7c8e262eb574244f81f5faaea539e712a058e6707a9d272fe5b64"}, - {file = "coverage-7.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad97ec0da94b378e593ef532b980c15e377df9b9608c7c6da3506953182398af"}, - {file = "coverage-7.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd4bacd62aa2f1a1627352fe68885d6ee694bdaebb16038b6e680f2924a9b2cc"}, - {file = "coverage-7.5.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:adf032b6c105881f9d77fa17d9eebe0ad1f9bfb2ad25777811f97c5362aa07f2"}, - {file = "coverage-7.5.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4ba01d9ba112b55bfa4b24808ec431197bb34f09f66f7cb4fd0258ff9d3711b1"}, - {file = "coverage-7.5.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:f0bfe42523893c188e9616d853c47685e1c575fe25f737adf473d0405dcfa7eb"}, - {file = "coverage-7.5.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a9a7ef30a1b02547c1b23fa9a5564f03c9982fc71eb2ecb7f98c96d7a0db5cf2"}, - {file = "coverage-7.5.0-cp312-cp312-win32.whl", hash = "sha256:3c2b77f295edb9fcdb6a250f83e6481c679335ca7e6e4a955e4290350f2d22a4"}, - {file = "coverage-7.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:427e1e627b0963ac02d7c8730ca6d935df10280d230508c0ba059505e9233475"}, - {file = "coverage-7.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9dd88fce54abbdbf4c42fb1fea0e498973d07816f24c0e27a1ecaf91883ce69e"}, - {file = "coverage-7.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a898c11dca8f8c97b467138004a30133974aacd572818c383596f8d5b2eb04a9"}, - {file = "coverage-7.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07dfdd492d645eea1bd70fb1d6febdcf47db178b0d99161d8e4eed18e7f62fe7"}, - {file = "coverage-7.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3d117890b6eee85887b1eed41eefe2e598ad6e40523d9f94c4c4b213258e4a4"}, - {file = "coverage-7.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6afd2e84e7da40fe23ca588379f815fb6dbbb1b757c883935ed11647205111cb"}, - {file = "coverage-7.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a9960dd1891b2ddf13a7fe45339cd59ecee3abb6b8326d8b932d0c5da208104f"}, - {file = "coverage-7.5.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ced268e82af993d7801a9db2dbc1d2322e786c5dc76295d8e89473d46c6b84d4"}, - {file = "coverage-7.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e7c211f25777746d468d76f11719e64acb40eed410d81c26cefac641975beb88"}, - {file = "coverage-7.5.0-cp38-cp38-win32.whl", hash = "sha256:262fffc1f6c1a26125d5d573e1ec379285a3723363f3bd9c83923c9593a2ac25"}, - {file = "coverage-7.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:eed462b4541c540d63ab57b3fc69e7d8c84d5957668854ee4e408b50e92ce26a"}, - {file = "coverage-7.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d0194d654e360b3e6cc9b774e83235bae6b9b2cac3be09040880bb0e8a88f4a1"}, - {file = "coverage-7.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:33c020d3322662e74bc507fb11488773a96894aa82a622c35a5a28673c0c26f5"}, - {file = "coverage-7.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cbdf2cae14a06827bec50bd58e49249452d211d9caddd8bd80e35b53cb04631"}, - {file = "coverage-7.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3235d7c781232e525b0761730e052388a01548bd7f67d0067a253887c6e8df46"}, - {file = "coverage-7.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2de4e546f0ec4b2787d625e0b16b78e99c3e21bc1722b4977c0dddf11ca84e"}, - {file = "coverage-7.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4d0e206259b73af35c4ec1319fd04003776e11e859936658cb6ceffdeba0f5be"}, - {file = "coverage-7.5.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2055c4fb9a6ff624253d432aa471a37202cd8f458c033d6d989be4499aed037b"}, - {file = "coverage-7.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:075299460948cd12722a970c7eae43d25d37989da682997687b34ae6b87c0ef0"}, - {file = "coverage-7.5.0-cp39-cp39-win32.whl", hash = "sha256:280132aada3bc2f0fac939a5771db4fbb84f245cb35b94fae4994d4c1f80dae7"}, - {file = "coverage-7.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:c58536f6892559e030e6924896a44098bc1290663ea12532c78cef71d0df8493"}, - {file = "coverage-7.5.0-pp38.pp39.pp310-none-any.whl", hash = "sha256:2b57780b51084d5223eee7b59f0d4911c31c16ee5aa12737c7a02455829ff067"}, - {file = "coverage-7.5.0.tar.gz", hash = "sha256:cf62d17310f34084c59c01e027259076479128d11e4661bb6c9acb38c5e19bb8"}, + {file = "coverage-7.5.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a6519d917abb15e12380406d721e37613e2a67d166f9fb7e5a8ce0375744cd45"}, + {file = "coverage-7.5.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aea7da970f1feccf48be7335f8b2ca64baf9b589d79e05b9397a06696ce1a1ec"}, + {file = "coverage-7.5.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:923b7b1c717bd0f0f92d862d1ff51d9b2b55dbbd133e05680204465f454bb286"}, + {file = "coverage-7.5.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62bda40da1e68898186f274f832ef3e759ce929da9a9fd9fcf265956de269dbc"}, + {file = "coverage-7.5.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8b7339180d00de83e930358223c617cc343dd08e1aa5ec7b06c3a121aec4e1d"}, + {file = "coverage-7.5.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:25a5caf742c6195e08002d3b6c2dd6947e50efc5fc2c2205f61ecb47592d2d83"}, + {file = "coverage-7.5.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:05ac5f60faa0c704c0f7e6a5cbfd6f02101ed05e0aee4d2822637a9e672c998d"}, + {file = "coverage-7.5.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:239a4e75e09c2b12ea478d28815acf83334d32e722e7433471fbf641c606344c"}, + {file = "coverage-7.5.3-cp310-cp310-win32.whl", hash = "sha256:a5812840d1d00eafae6585aba38021f90a705a25b8216ec7f66aebe5b619fb84"}, + {file = "coverage-7.5.3-cp310-cp310-win_amd64.whl", hash = "sha256:33ca90a0eb29225f195e30684ba4a6db05dbef03c2ccd50b9077714c48153cac"}, + {file = "coverage-7.5.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f81bc26d609bf0fbc622c7122ba6307993c83c795d2d6f6f6fd8c000a770d974"}, + {file = "coverage-7.5.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7cec2af81f9e7569280822be68bd57e51b86d42e59ea30d10ebdbb22d2cb7232"}, + {file = "coverage-7.5.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55f689f846661e3f26efa535071775d0483388a1ccfab899df72924805e9e7cd"}, + {file = "coverage-7.5.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50084d3516aa263791198913a17354bd1dc627d3c1639209640b9cac3fef5807"}, + {file = "coverage-7.5.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:341dd8f61c26337c37988345ca5c8ccabeff33093a26953a1ac72e7d0103c4fb"}, + {file = "coverage-7.5.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ab0b028165eea880af12f66086694768f2c3139b2c31ad5e032c8edbafca6ffc"}, + {file = "coverage-7.5.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5bc5a8c87714b0c67cfeb4c7caa82b2d71e8864d1a46aa990b5588fa953673b8"}, + {file = "coverage-7.5.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:38a3b98dae8a7c9057bd91fbf3415c05e700a5114c5f1b5b0ea5f8f429ba6614"}, + {file = "coverage-7.5.3-cp311-cp311-win32.whl", hash = "sha256:fcf7d1d6f5da887ca04302db8e0e0cf56ce9a5e05f202720e49b3e8157ddb9a9"}, + {file = "coverage-7.5.3-cp311-cp311-win_amd64.whl", hash = "sha256:8c836309931839cca658a78a888dab9676b5c988d0dd34ca247f5f3e679f4e7a"}, + {file = "coverage-7.5.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:296a7d9bbc598e8744c00f7a6cecf1da9b30ae9ad51c566291ff1314e6cbbed8"}, + {file = "coverage-7.5.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:34d6d21d8795a97b14d503dcaf74226ae51eb1f2bd41015d3ef332a24d0a17b3"}, + {file = "coverage-7.5.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e317953bb4c074c06c798a11dbdd2cf9979dbcaa8ccc0fa4701d80042d4ebf1"}, + {file = "coverage-7.5.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:705f3d7c2b098c40f5b81790a5fedb274113373d4d1a69e65f8b68b0cc26f6db"}, + {file = "coverage-7.5.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1196e13c45e327d6cd0b6e471530a1882f1017eb83c6229fc613cd1a11b53cd"}, + {file = "coverage-7.5.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:015eddc5ccd5364dcb902eaecf9515636806fa1e0d5bef5769d06d0f31b54523"}, + {file = "coverage-7.5.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:fd27d8b49e574e50caa65196d908f80e4dff64d7e592d0c59788b45aad7e8b35"}, + {file = "coverage-7.5.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:33fc65740267222fc02975c061eb7167185fef4cc8f2770267ee8bf7d6a42f84"}, + {file = "coverage-7.5.3-cp312-cp312-win32.whl", hash = "sha256:7b2a19e13dfb5c8e145c7a6ea959485ee8e2204699903c88c7d25283584bfc08"}, + {file = "coverage-7.5.3-cp312-cp312-win_amd64.whl", hash = "sha256:0bbddc54bbacfc09b3edaec644d4ac90c08ee8ed4844b0f86227dcda2d428fcb"}, + {file = "coverage-7.5.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f78300789a708ac1f17e134593f577407d52d0417305435b134805c4fb135adb"}, + {file = "coverage-7.5.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b368e1aee1b9b75757942d44d7598dcd22a9dbb126affcbba82d15917f0cc155"}, + {file = "coverage-7.5.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f836c174c3a7f639bded48ec913f348c4761cbf49de4a20a956d3431a7c9cb24"}, + {file = "coverage-7.5.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:244f509f126dc71369393ce5fea17c0592c40ee44e607b6d855e9c4ac57aac98"}, + {file = "coverage-7.5.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4c2872b3c91f9baa836147ca33650dc5c172e9273c808c3c3199c75490e709d"}, + {file = "coverage-7.5.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:dd4b3355b01273a56b20c219e74e7549e14370b31a4ffe42706a8cda91f19f6d"}, + {file = "coverage-7.5.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:f542287b1489c7a860d43a7d8883e27ca62ab84ca53c965d11dac1d3a1fab7ce"}, + {file = "coverage-7.5.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:75e3f4e86804023e991096b29e147e635f5e2568f77883a1e6eed74512659ab0"}, + {file = "coverage-7.5.3-cp38-cp38-win32.whl", hash = "sha256:c59d2ad092dc0551d9f79d9d44d005c945ba95832a6798f98f9216ede3d5f485"}, + {file = "coverage-7.5.3-cp38-cp38-win_amd64.whl", hash = "sha256:fa21a04112c59ad54f69d80e376f7f9d0f5f9123ab87ecd18fbb9ec3a2beed56"}, + {file = "coverage-7.5.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f5102a92855d518b0996eb197772f5ac2a527c0ec617124ad5242a3af5e25f85"}, + {file = "coverage-7.5.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d1da0a2e3b37b745a2b2a678a4c796462cf753aebf94edcc87dcc6b8641eae31"}, + {file = "coverage-7.5.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8383a6c8cefba1b7cecc0149415046b6fc38836295bc4c84e820872eb5478b3d"}, + {file = "coverage-7.5.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9aad68c3f2566dfae84bf46295a79e79d904e1c21ccfc66de88cd446f8686341"}, + {file = "coverage-7.5.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e079c9ec772fedbade9d7ebc36202a1d9ef7291bc9b3a024ca395c4d52853d7"}, + {file = "coverage-7.5.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bde997cac85fcac227b27d4fb2c7608a2c5f6558469b0eb704c5726ae49e1c52"}, + {file = "coverage-7.5.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:990fb20b32990b2ce2c5f974c3e738c9358b2735bc05075d50a6f36721b8f303"}, + {file = "coverage-7.5.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3d5a67f0da401e105753d474369ab034c7bae51a4c31c77d94030d59e41df5bd"}, + {file = "coverage-7.5.3-cp39-cp39-win32.whl", hash = "sha256:e08c470c2eb01977d221fd87495b44867a56d4d594f43739a8028f8646a51e0d"}, + {file = "coverage-7.5.3-cp39-cp39-win_amd64.whl", hash = "sha256:1d2a830ade66d3563bb61d1e3c77c8def97b30ed91e166c67d0632c018f380f0"}, + {file = "coverage-7.5.3-pp38.pp39.pp310-none-any.whl", hash = "sha256:3538d8fb1ee9bdd2e2692b3b18c22bb1c19ffbefd06880f5ac496e42d7bb3884"}, + {file = "coverage-7.5.3.tar.gz", hash = "sha256:04aefca5190d1dc7a53a4c1a5a7f8568811306d7a8ee231c42fb69215571944f"}, ] [package.dependencies] @@ -451,43 +451,43 @@ toml = ["tomli"] [[package]] name = "cryptography" -version = "42.0.5" +version = "42.0.7" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false python-versions = ">=3.7" files = [ - {file = "cryptography-42.0.5-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:a30596bae9403a342c978fb47d9b0ee277699fa53bbafad14706af51fe543d16"}, - {file = "cryptography-42.0.5-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:b7ffe927ee6531c78f81aa17e684e2ff617daeba7f189f911065b2ea2d526dec"}, - {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2424ff4c4ac7f6b8177b53c17ed5d8fa74ae5955656867f5a8affaca36a27abb"}, - {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:329906dcc7b20ff3cad13c069a78124ed8247adcac44b10bea1130e36caae0b4"}, - {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:b03c2ae5d2f0fc05f9a2c0c997e1bc18c8229f392234e8a0194f202169ccd278"}, - {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f8837fe1d6ac4a8052a9a8ddab256bc006242696f03368a4009be7ee3075cdb7"}, - {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:0270572b8bd2c833c3981724b8ee9747b3ec96f699a9665470018594301439ee"}, - {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:b8cac287fafc4ad485b8a9b67d0ee80c66bf3574f655d3b97ef2e1082360faf1"}, - {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:16a48c23a62a2f4a285699dba2e4ff2d1cff3115b9df052cdd976a18856d8e3d"}, - {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2bce03af1ce5a5567ab89bd90d11e7bbdff56b8af3acbbec1faded8f44cb06da"}, - {file = "cryptography-42.0.5-cp37-abi3-win32.whl", hash = "sha256:b6cd2203306b63e41acdf39aa93b86fb566049aeb6dc489b70e34bcd07adca74"}, - {file = "cryptography-42.0.5-cp37-abi3-win_amd64.whl", hash = "sha256:98d8dc6d012b82287f2c3d26ce1d2dd130ec200c8679b6213b3c73c08b2b7940"}, - {file = "cryptography-42.0.5-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:5e6275c09d2badf57aea3afa80d975444f4be8d3bc58f7f80d2a484c6f9485c8"}, - {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4985a790f921508f36f81831817cbc03b102d643b5fcb81cd33df3fa291a1a1"}, - {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7cde5f38e614f55e28d831754e8a3bacf9ace5d1566235e39d91b35502d6936e"}, - {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:7367d7b2eca6513681127ebad53b2582911d1736dc2ffc19f2c3ae49997496bc"}, - {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:cd2030f6650c089aeb304cf093f3244d34745ce0cfcc39f20c6fbfe030102e2a"}, - {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a2913c5375154b6ef2e91c10b5720ea6e21007412f6437504ffea2109b5a33d7"}, - {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:c41fb5e6a5fe9ebcd58ca3abfeb51dffb5d83d6775405305bfa8715b76521922"}, - {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:3eaafe47ec0d0ffcc9349e1708be2aaea4c6dd4978d76bf6eb0cb2c13636c6fc"}, - {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:1b95b98b0d2af784078fa69f637135e3c317091b615cd0905f8b8a087e86fa30"}, - {file = "cryptography-42.0.5-cp39-abi3-win32.whl", hash = "sha256:1f71c10d1e88467126f0efd484bd44bca5e14c664ec2ede64c32f20875c0d413"}, - {file = "cryptography-42.0.5-cp39-abi3-win_amd64.whl", hash = "sha256:a011a644f6d7d03736214d38832e030d8268bcff4a41f728e6030325fea3e400"}, - {file = "cryptography-42.0.5-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9481ffe3cf013b71b2428b905c4f7a9a4f76ec03065b05ff499bb5682a8d9ad8"}, - {file = "cryptography-42.0.5-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:ba334e6e4b1d92442b75ddacc615c5476d4ad55cc29b15d590cc6b86efa487e2"}, - {file = "cryptography-42.0.5-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:ba3e4a42397c25b7ff88cdec6e2a16c2be18720f317506ee25210f6d31925f9c"}, - {file = "cryptography-42.0.5-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:111a0d8553afcf8eb02a4fea6ca4f59d48ddb34497aa8706a6cf536f1a5ec576"}, - {file = "cryptography-42.0.5-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cd65d75953847815962c84a4654a84850b2bb4aed3f26fadcc1c13892e1e29f6"}, - {file = "cryptography-42.0.5-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:e807b3188f9eb0eaa7bbb579b462c5ace579f1cedb28107ce8b48a9f7ad3679e"}, - {file = "cryptography-42.0.5-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f12764b8fffc7a123f641d7d049d382b73f96a34117e0b637b80643169cec8ac"}, - {file = "cryptography-42.0.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:37dd623507659e08be98eec89323469e8c7b4c1407c85112634ae3dbdb926fdd"}, - {file = "cryptography-42.0.5.tar.gz", hash = "sha256:6fe07eec95dfd477eb9530aef5bead34fec819b3aaf6c5bd6d20565da607bfe1"}, + {file = "cryptography-42.0.7-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:a987f840718078212fdf4504d0fd4c6effe34a7e4740378e59d47696e8dfb477"}, + {file = "cryptography-42.0.7-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:bd13b5e9b543532453de08bcdc3cc7cebec6f9883e886fd20a92f26940fd3e7a"}, + {file = "cryptography-42.0.7-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a79165431551042cc9d1d90e6145d5d0d3ab0f2d66326c201d9b0e7f5bf43604"}, + {file = "cryptography-42.0.7-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a47787a5e3649008a1102d3df55424e86606c9bae6fb77ac59afe06d234605f8"}, + {file = "cryptography-42.0.7-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:02c0eee2d7133bdbbc5e24441258d5d2244beb31da5ed19fbb80315f4bbbff55"}, + {file = "cryptography-42.0.7-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:5e44507bf8d14b36b8389b226665d597bc0f18ea035d75b4e53c7b1ea84583cc"}, + {file = "cryptography-42.0.7-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:7f8b25fa616d8b846aef64b15c606bb0828dbc35faf90566eb139aa9cff67af2"}, + {file = "cryptography-42.0.7-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:93a3209f6bb2b33e725ed08ee0991b92976dfdcf4e8b38646540674fc7508e13"}, + {file = "cryptography-42.0.7-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:e6b8f1881dac458c34778d0a424ae5769de30544fc678eac51c1c8bb2183e9da"}, + {file = "cryptography-42.0.7-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:3de9a45d3b2b7d8088c3fbf1ed4395dfeff79d07842217b38df14ef09ce1d8d7"}, + {file = "cryptography-42.0.7-cp37-abi3-win32.whl", hash = "sha256:789caea816c6704f63f6241a519bfa347f72fbd67ba28d04636b7c6b7da94b0b"}, + {file = "cryptography-42.0.7-cp37-abi3-win_amd64.whl", hash = "sha256:8cb8ce7c3347fcf9446f201dc30e2d5a3c898d009126010cbd1f443f28b52678"}, + {file = "cryptography-42.0.7-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:a3a5ac8b56fe37f3125e5b72b61dcde43283e5370827f5233893d461b7360cd4"}, + {file = "cryptography-42.0.7-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:779245e13b9a6638df14641d029add5dc17edbef6ec915688f3acb9e720a5858"}, + {file = "cryptography-42.0.7-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d563795db98b4cd57742a78a288cdbdc9daedac29f2239793071fe114f13785"}, + {file = "cryptography-42.0.7-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:31adb7d06fe4383226c3e963471f6837742889b3c4caa55aac20ad951bc8ffda"}, + {file = "cryptography-42.0.7-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:efd0bf5205240182e0f13bcaea41be4fdf5c22c5129fc7ced4a0282ac86998c9"}, + {file = "cryptography-42.0.7-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a9bc127cdc4ecf87a5ea22a2556cab6c7eda2923f84e4f3cc588e8470ce4e42e"}, + {file = "cryptography-42.0.7-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:3577d029bc3f4827dd5bf8bf7710cac13527b470bbf1820a3f394adb38ed7d5f"}, + {file = "cryptography-42.0.7-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:2e47577f9b18723fa294b0ea9a17d5e53a227867a0a4904a1a076d1646d45ca1"}, + {file = "cryptography-42.0.7-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:1a58839984d9cb34c855197043eaae2c187d930ca6d644612843b4fe8513c886"}, + {file = "cryptography-42.0.7-cp39-abi3-win32.whl", hash = "sha256:e6b79d0adb01aae87e8a44c2b64bc3f3fe59515280e00fb6d57a7267a2583cda"}, + {file = "cryptography-42.0.7-cp39-abi3-win_amd64.whl", hash = "sha256:16268d46086bb8ad5bf0a2b5544d8a9ed87a0e33f5e77dd3c3301e63d941a83b"}, + {file = "cryptography-42.0.7-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:2954fccea107026512b15afb4aa664a5640cd0af630e2ee3962f2602693f0c82"}, + {file = "cryptography-42.0.7-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:362e7197754c231797ec45ee081f3088a27a47c6c01eff2ac83f60f85a50fe60"}, + {file = "cryptography-42.0.7-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:4f698edacf9c9e0371112792558d2f705b5645076cc0aaae02f816a0171770fd"}, + {file = "cryptography-42.0.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:5482e789294854c28237bba77c4c83be698be740e31a3ae5e879ee5444166582"}, + {file = "cryptography-42.0.7-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e9b2a6309f14c0497f348d08a065d52f3020656f675819fc405fb63bbcd26562"}, + {file = "cryptography-42.0.7-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d8e3098721b84392ee45af2dd554c947c32cc52f862b6a3ae982dbb90f577f14"}, + {file = "cryptography-42.0.7-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c65f96dad14f8528a447414125e1fc8feb2ad5a272b8f68477abbcc1ea7d94b9"}, + {file = "cryptography-42.0.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:36017400817987670037fbb0324d71489b6ead6231c9604f8fc1f7d008087c68"}, + {file = "cryptography-42.0.7.tar.gz", hash = "sha256:ecbfbc00bf55888edda9868a4cf927205de8499e7fabe6c050322298382953f2"}, ] [package.dependencies] @@ -728,13 +728,13 @@ numpy = ["numpy (>1.0.0)"] [[package]] name = "harmony-py" -version = "0.4.13" +version = "0.4.14" description = "The NASA Harmony Python library" optional = false python-versions = "<4,>=3.6" files = [ - {file = "harmony-py-0.4.13.tar.gz", hash = "sha256:c8bb59e2f3796bbeaf96c085766d4a25e27579045be4a3726bbefe061da8bcfd"}, - {file = "harmony_py-0.4.13-py3-none-any.whl", hash = "sha256:d9a3cff9cdbfe99ac407a2dde3c0e660ed8647bdbad4c9d1f6bd849d465262d7"}, + {file = "harmony_py-0.4.14-py3-none-any.whl", hash = "sha256:fe0dc176b0c5c9762916cd4a0db1b53aeb83a08a23a42f32ddd87705ede88ee9"}, + {file = "harmony_py-0.4.14.tar.gz", hash = "sha256:d33d8579af01e5597e938e0ae768d2d411da6ca09176f22b03c95f5b462394af"}, ] [package.dependencies] @@ -804,13 +804,13 @@ colors = ["colorama (>=0.4.6)"] [[package]] name = "jinja2" -version = "3.1.3" +version = "3.1.4" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" files = [ - {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"}, - {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"}, + {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, + {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, ] [package.dependencies] @@ -1147,13 +1147,13 @@ files = [ [[package]] name = "platformdirs" -version = "4.2.1" +version = "4.2.2" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" files = [ - {file = "platformdirs-4.2.1-py3-none-any.whl", hash = "sha256:17d5a1161b3fd67b390023cb2d3b026bbd40abde6fdb052dfbd3a29c3ba22ee1"}, - {file = "platformdirs-4.2.1.tar.gz", hash = "sha256:031cd18d4ec63ec53e82dceaac0417d218a6863f7745dfcc9efe7793b7039bdf"}, + {file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"}, + {file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"}, ] [package.extras] @@ -1463,7 +1463,6 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, @@ -1500,13 +1499,13 @@ files = [ [[package]] name = "requests" -version = "2.31.0" +version = "2.32.3" description = "Python HTTP for Humans." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, - {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, + {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, + {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, ] [package.dependencies] @@ -1594,24 +1593,24 @@ files = [ [[package]] name = "tomlkit" -version = "0.12.4" +version = "0.12.5" description = "Style preserving TOML library" optional = false python-versions = ">=3.7" files = [ - {file = "tomlkit-0.12.4-py3-none-any.whl", hash = "sha256:5cd82d48a3dd89dee1f9d64420aa20ae65cfbd00668d6f094d7578a78efbb77b"}, - {file = "tomlkit-0.12.4.tar.gz", hash = "sha256:7ca1cfc12232806517a8515047ba66a19369e71edf2439d0f5824f91032b6cc3"}, + {file = "tomlkit-0.12.5-py3-none-any.whl", hash = "sha256:af914f5a9c59ed9d0762c7b64d3b5d5df007448eb9cd2edc8a46b1eafead172f"}, + {file = "tomlkit-0.12.5.tar.gz", hash = "sha256:eef34fba39834d4d6b73c9ba7f3e4d1c417a4e56f89a7e96e090dd0d24b8fb3c"}, ] [[package]] name = "typing-extensions" -version = "4.11.0" +version = "4.12.0" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.11.0-py3-none-any.whl", hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"}, - {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"}, + {file = "typing_extensions-4.12.0-py3-none-any.whl", hash = "sha256:b349c66bea9016ac22978d800cfff206d5f9816951f12a7d0ec5578b0a819594"}, + {file = "typing_extensions-4.12.0.tar.gz", hash = "sha256:8cbcdc8606ebcb0d95453ad7dc5065e6237b6aa230a31e81d0f440c30fed5fd8"}, ] [[package]] @@ -1713,13 +1712,13 @@ files = [ [[package]] name = "werkzeug" -version = "3.0.2" +version = "3.0.3" description = "The comprehensive WSGI web application library." optional = false python-versions = ">=3.8" files = [ - {file = "werkzeug-3.0.2-py3-none-any.whl", hash = "sha256:3aac3f5da756f93030740bc235d3e09449efcf65f2f55e3602e1d851b8f48795"}, - {file = "werkzeug-3.0.2.tar.gz", hash = "sha256:e39b645a6ac92822588e7b39a692e7828724ceae0b0d702ef96701f90e70128d"}, + {file = "werkzeug-3.0.3-py3-none-any.whl", hash = "sha256:fc9645dc43e03e4d630d23143a04a7f947a9a3b5727cd535fdfe155a17cc48c8"}, + {file = "werkzeug-3.0.3.tar.gz", hash = "sha256:097e5bfda9f0aba8da6b8545146def481d06aa7d3266e7448e2cccf67dd8bd18"}, ] [package.dependencies] @@ -1923,20 +1922,20 @@ multidict = ">=4.0" [[package]] name = "zipp" -version = "3.18.1" +version = "3.19.0" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.18.1-py3-none-any.whl", hash = "sha256:206f5a15f2af3dbaee80769fb7dc6f249695e940acca08dfb2a4769fe61e538b"}, - {file = "zipp-3.18.1.tar.gz", hash = "sha256:2884ed22e7d8961de1c9a05142eb69a247f120291bc0206a00a7642f09b5b715"}, + {file = "zipp-3.19.0-py3-none-any.whl", hash = "sha256:96dc6ad62f1441bcaccef23b274ec471518daf4fbbc580341204936a5a3dddec"}, + {file = "zipp-3.19.0.tar.gz", hash = "sha256:952df858fb3164426c976d9338d3961e8e8b3758e2e059e0f754b8c4262625ee"}, ] [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "60ff4a221e14d420c4a35caea4f048cfb7fcd32baaee00ee7d11337c7fa5b3b8" +content-hash = "59b8e79fb778086834b847ac5687c2e4cb75618ad719049d7c243ee19bfbda7b" diff --git a/pyproject.toml b/pyproject.toml index 051ea6f..7fe4422 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "bignbit" -version = "0.2.0a3" +version = "0.2.0a6" description = "Browse image generation and transfer" authors = ["PO.DAAC "] license = "Apache 2.0" @@ -11,7 +11,7 @@ python = "^3.9" boto3 = "^1.18" cumulus-message-adapter-python = "^2.1.0" harmony-py = "^0.4.3" -cumulus-process = "^1.1.0" +cumulus-process = "^1.3.0" python-graphql-client = "^0.4.3" requests = "^2.28.2" gdal = "3.6.3" diff --git a/terraform/lambda_functions.tf b/terraform/lambda_functions.tf index 6c5d947..e788d8c 100644 --- a/terraform/lambda_functions.tf +++ b/terraform/lambda_functions.tf @@ -315,7 +315,7 @@ resource "aws_lambda_function" "copy_harmony_output_to_s3" { tags = var.default_tags } -resource "aws_lambda_function" "apply_opera_treatment" { +resource "aws_lambda_function" "apply_opera_hls_treatment" { depends_on = [ null_resource.upload_ecr_image ] @@ -323,9 +323,9 @@ resource "aws_lambda_function" "apply_opera_treatment" { package_type = "Image" image_uri = "${aws_ecr_repository.lambda-image-repo.repository_url}:${local.ecr_image_tag}" image_config { - command = ["bignbit.apply_opera_treatment.lambda_handler"] + command = ["bignbit.apply_opera_hls_treatment.lambda_handler"] } - function_name = "${local.lambda_resources_name}-apply_opera_treatment-lambda" + function_name = "${local.lambda_resources_name}-apply_opera_hls_treatment-lambda" role = var.lambda_role.arn timeout = 30 memory_size = 512 @@ -430,7 +430,7 @@ resource "aws_lambda_function" "handle_gitc_response" { } function_name = "${local.lambda_resources_name}-handle_gitc_response-lambda" role = var.lambda_role.arn - timeout = 5 + timeout = 15 memory_size = 128 environment { @@ -438,6 +438,11 @@ resource "aws_lambda_function" "handle_gitc_response" { STACK_NAME = local.lambda_resources_name CUMULUS_MESSAGE_ADAPTER_DIR = "/opt/" REGION = var.region + POBIT_AUDIT_BUCKET_NAME = var.pobit_audit_bucket + POBIT_AUDIT_PATH_NAME = var.pobit_audit_path + CMR_ENVIRONMENT = local.environment != "OPS" ? "UAT" : "" + EDL_USER_SSM = var.edl_user_ssm + EDL_PASS_SSM = var.edl_pass_ssm } } @@ -449,7 +454,7 @@ resource "aws_lambda_function" "handle_gitc_response" { tags = local.tags } -resource "aws_lambda_function" "save_cma_message" { +resource "aws_lambda_function" "save_cnm_message" { depends_on = [ null_resource.upload_ecr_image ] @@ -457,9 +462,9 @@ resource "aws_lambda_function" "save_cma_message" { package_type = "Image" image_uri = "${aws_ecr_repository.lambda-image-repo.repository_url}:${local.ecr_image_tag}" image_config { - command = ["bignbit.save_cma_message.lambda_handler"] + command = ["bignbit.save_cnm_message.lambda_handler"] } - function_name = "${local.lambda_resources_name}-save_cma_message-lambda" + function_name = "${local.lambda_resources_name}-save_cnm_message-lambda" role = var.lambda_role.arn timeout = 15 memory_size = 128 diff --git a/terraform/main.tf b/terraform/main.tf index c46471a..9df6a79 100644 --- a/terraform/main.tf +++ b/terraform/main.tf @@ -19,7 +19,7 @@ data "template_file" "workflow_definition" { ConfigDir = var.config_dir, GetGranuleUmmJsonLambda = aws_lambda_function.get_granule_umm_json.arn, IdentifyImageFileLambda = aws_lambda_function.identify_image_file.arn, - ApplyOperaTreatmentLambda = aws_lambda_function.apply_opera_treatment.arn, + ApplyOperaHLSTreatmentLambda = aws_lambda_function.apply_opera_hls_treatment.arn, GetCollectionConceptIdLambda = aws_lambda_function.get_collection_concept_id.arn, SubmitHarmonyJobLambda = aws_lambda_function.submit_harmony_job.arn, GetHarmonyJobStatusLambda = aws_lambda_function.get_harmony_job_status.arn, @@ -27,7 +27,7 @@ data "template_file" "workflow_definition" { GenerateImageMetadataLambda = aws_lambda_function.generate_image_metadata.arn, BuildImageSetsLambda = aws_lambda_function.build_image_sets.arn, SendToGITCLambda = aws_lambda_function.send_to_gitc.arn, - SaveCMAMessageLambda = aws_lambda_function.save_cma_message.arn, + SaveCNMMessageLambda = aws_lambda_function.save_cnm_message.arn, PobitAuditBucket = var.pobit_audit_bucket, PobitAuditPath = var.pobit_audit_path } diff --git a/terraform/outputs.tf b/terraform/outputs.tf index 005eb52..dc89d6b 100644 --- a/terraform/outputs.tf +++ b/terraform/outputs.tf @@ -62,8 +62,8 @@ output "copy_harmony_output_to_s3_arn"{ value = aws_lambda_function.copy_harmony_output_to_s3.arn } -output "apply_opera_treatment_arn"{ - value = aws_lambda_function.apply_opera_treatment.arn +output "apply_opera_hls_treatment_arn"{ + value = aws_lambda_function.apply_opera_hls_treatment.arn } output "pobit_build_image_sets_arn" { @@ -74,8 +74,8 @@ output "pobit_send_to_gitc_arn" { value = aws_lambda_function.send_to_gitc.arn } -output "pobit_save_cma_message_arn" { - value = aws_lambda_function.save_cma_message.arn +output "pobit_save_cnm_message_arn" { + value = aws_lambda_function.save_cnm_message.arn } output "workflow_definition" { diff --git a/terraform/state_machine_definition.tpl b/terraform/state_machine_definition.tpl index 00f473d..c13f02e 100644 --- a/terraform/state_machine_definition.tpl +++ b/terraform/state_machine_definition.tpl @@ -28,6 +28,14 @@ "IntervalSeconds":2, "MaxAttempts":6, "BackoffRate":2 + }, + { + "ErrorEquals": [ + "Lambda.Unknown" + ], + "BackoffRate": 2, + "IntervalSeconds": 2, + "MaxAttempts": 2 } ], "Next":"Get Granule umm_json" @@ -52,11 +60,21 @@ "Lambda.ServiceException", "Lambda.AWSLambdaException", "Lambda.SdkClientException", - "Lambda.TooManyRequestsException" + "Lambda.TooManyRequestsException", + "ReadTimeout", + "HTTPError" ], "IntervalSeconds":2, - "MaxAttempts":6, + "MaxAttempts":16, "BackoffRate":2 + }, + { + "ErrorEquals": [ + "Lambda.Unknown" + ], + "BackoffRate": 2, + "IntervalSeconds": 2, + "MaxAttempts": 2 } ], "Next":"Send to Harmony?" @@ -105,33 +123,41 @@ "IntervalSeconds":2, "MaxAttempts":6, "BackoffRate":2 - } + }, + { + "ErrorEquals": [ + "Lambda.Unknown" + ], + "BackoffRate": 2, + "IntervalSeconds": 2, + "MaxAttempts": 2 + } ], - "Next":"Apply OPERA Treatment?" + "Next":"Apply OPERA HLS Treatment?" }, - "Apply OPERA Treatment?":{ + "Apply OPERA HLS Treatment?":{ "Type":"Choice", "Choices":[ { "And":[ { - "Variable":"$.payload.datasetConfigurationForBIG.config.operaTreatment", + "Variable":"$.payload.datasetConfigurationForBIG.config.operaHLSTreatment", "IsPresent":true }, { - "Variable":"$.payload.datasetConfigurationForBIG.config.operaTreatment", + "Variable":"$.payload.datasetConfigurationForBIG.config.operaHLSTreatment", "BooleanEquals":true } ], - "Comment":"If operaTreatment is true", - "Next":"Apply OPERA Treatment" + "Comment":"If operaHLSTreatment is true", + "Next":"Apply OPERA HLS Treatment" } ], "Default":"Generate Image Metadata" }, - "Apply OPERA Treatment":{ + "Apply OPERA HLS Treatment":{ "Type":"Task", - "Resource":"${ApplyOperaTreatmentLambda}", + "Resource":"${ApplyOperaHLSTreatmentLambda}", "Parameters":{ "cma":{ "event.$":"$", @@ -153,6 +179,14 @@ "IntervalSeconds":2, "MaxAttempts":6, "BackoffRate":2 + }, + { + "ErrorEquals": [ + "Lambda.Unknown" + ], + "BackoffRate": 2, + "IntervalSeconds": 2, + "MaxAttempts": 2 } ], "Next":"Generate Image Metadata" @@ -179,11 +213,21 @@ "Lambda.ServiceException", "Lambda.AWSLambdaException", "Lambda.SdkClientException", - "Lambda.TooManyRequestsException" + "Lambda.TooManyRequestsException", + "ReadTimeout", + "HTTPError" ], "IntervalSeconds":2, "MaxAttempts":6, "BackoffRate":2 + }, + { + "ErrorEquals": [ + "Lambda.Unknown" + ], + "BackoffRate": 2, + "IntervalSeconds": 2, + "MaxAttempts": 2 } ], "Next":"Convert Variables To PNG" @@ -258,6 +302,14 @@ "IntervalSeconds":2, "MaxAttempts":6, "BackoffRate":2 + }, + { + "ErrorEquals": [ + "Lambda.Unknown" + ], + "BackoffRate": 2, + "IntervalSeconds": 2, + "MaxAttempts": 2 } ], "Next":"Job Complete?" @@ -292,8 +344,49 @@ ], "Default":"Wait 20 Seconds" }, +<<<<<<< HEAD "Job Successful":{ "Type":"Succeed" +======= + "Copy Harmony Results to S3":{ + "Type":"Task", + "Resource":"${CopyHarmonyOutputToS3Lambda}", + "Parameters":{ + "cma":{ + "event.$":"$", + "task_config":{ + "cmr_environment":"{$.meta.cmr.cmrEnvironment}", + "harmony_job":"{$.payload.harmony_job.job}", + "current_item":"{$.current_item}", + "cumulus_message":{ + "input":"{$.payload}" + } + } + } + }, + "Retry":[ + { + "ErrorEquals":[ + "Lambda.ServiceException", + "Lambda.AWSLambdaException", + "Lambda.SdkClientException", + "Lambda.TooManyRequestsException" + ], + "IntervalSeconds":2, + "MaxAttempts":6, + "BackoffRate":2 + }, + { + "ErrorEquals": [ + "Lambda.Unknown" + ], + "BackoffRate": 2, + "IntervalSeconds": 2, + "MaxAttempts": 2 + } + ], + "End":true +>>>>>>> develop }, "Fail":{ "Type":"Fail" @@ -328,6 +421,14 @@ "IntervalSeconds":2, "MaxAttempts":6, "BackoffRate":2 + }, + { + "ErrorEquals": [ + "Lambda.Unknown" + ], + "BackoffRate": 2, + "IntervalSeconds": 2, + "MaxAttempts": 2 } ], "Next":"Clean Output" @@ -336,18 +437,13 @@ "Type":"Pass", "Next":"BuildImageSets", "Parameters":{ - "cumulus_meta.$":"$.cumulus_meta", - "meta":{ - "buckets.$":"$.meta.buckets", - "cmr.$":"$.meta.cmr", - "collection.$":"$.meta.collection", - "distribution_endpoint.$":"$.meta.distribution_endpoint", - "launchpad.$":"$.meta.launchpad", - "provider.$":"$.meta.provider", - "stack.$":"$.meta.stack", - "template.$":"$.meta.template", - "retries.$":"$.meta.retries", - "visibilityTimeout.$":"$.meta.visibilityTimeout" + "cumulus_meta.$": "$.cumulus_meta", + "meta": { + "buckets.$": "$.meta.buckets", + "cmr.$": "$.meta.cmr", + "collection.$": "$.meta.collection", + "provider.$": "$.meta.provider", + "stack.$": "$.meta.stack" }, "payload":{ "granules.$":"$.payload.granules", @@ -388,7 +484,7 @@ "States.ALL" ], "IntervalSeconds": 2, - "MaxAttempts": 1 + "MaxAttempts": 3 } ], "Next": "TransferImageSets" @@ -397,7 +493,7 @@ "Type": "Map", "InputPath": "$", "ItemsPath": "$.payload.pobit", - "MaxConcurrency": 3, + "MaxConcurrency": 20, "Iterator": { "StartAt": "SendToGITC", "States": { @@ -410,7 +506,6 @@ "task_config": { "collection": "{$.collection}", "cmr_provider": "{$.cmr_provider}", - "token.$": "$$.Task.Token", "cumulus_message": { "input": "{$}" } @@ -419,24 +514,43 @@ } }, "Type": "Task", - "Resource": "arn:aws:states:::lambda:invoke.waitForTaskToken", + "Resource": "arn:aws:states:::lambda:invoke", "TimeoutSeconds": 86400, - "End": true, - "ResultPath": "$.gitc_response", - "Catch": [ + "ResultPath": "$.cnm", + "Next": "SaveCNMMessage" + }, + "SaveCNMMessage": { + "Type": "Task", + "Resource": "${SaveCNMMessageLambda}", + "Parameters": { + "cma": { + "event.$": "$", + "task_config": { + "collection": "{$.collection_name}", + "granule_ur": "{$.granule_ur}", + "cnm": "{$.cnm.Payload.payload}", + "pobit_audit_bucket": "${PobitAuditBucket}", + "pobit_audit_path": "${PobitAuditPath}", + "cumulus_message": { + "input": "{$}" + } + } + } + }, + "Retry": [ { "ErrorEquals": [ - "States.Timeout" - ], - "ResultPath": "$.gitc_response", - "Next": "GITC Timeout" + "Lambda.ServiceException", + "Lambda.AWSLambdaException", + "Lambda.SdkClientException", + "Lambda.TooManyRequestsException" + ], + "IntervalSeconds": 2, + "MaxAttempts": 6, + "BackoffRate": 2 } - ] - }, - "GITC Timeout": { - "Type": "Pass", - "End": true, - "Comment": "No response was received from GITC within the configured timeout" + ], + "End": true } } }, @@ -456,37 +570,7 @@ "States.ALL" ], "IntervalSeconds": 2, - "MaxAttempts": 1 - } - ], - "Next": "Save CMA Message" - }, - "Save CMA Message": { - "Type": "Task", - "Resource": "${SaveCMAMessageLambda}", - "Parameters": { - "cma": { - "event.$": "$", - "task_config": { - "pobit_audit_bucket": "${PobitAuditBucket}", - "cma_key_name.$": "States.Format('${PobitAuditPath}/{}/{}.{}.cma.json', $.meta.collection.name, $.payload.granules[0].granuleId, $$.State.EnteredTime)", - "cumulus_message": { - "input": "{$.payload}" - } - } - } - }, - "Retry": [ - { - "ErrorEquals": [ - "Lambda.ServiceException", - "Lambda.AWSLambdaException", - "Lambda.SdkClientException", - "Lambda.TooManyRequestsException" - ], - "IntervalSeconds": 2, - "MaxAttempts": 6, - "BackoffRate": 2 + "MaxAttempts": 3 } ], "Next": "WorkflowSucceeded" diff --git a/tests/test_apply_opera_treatment.py b/tests/test_apply_opera_hls_treatment.py similarity index 75% rename from tests/test_apply_opera_treatment.py rename to tests/test_apply_opera_hls_treatment.py index 19e3aeb..0e65bd1 100644 --- a/tests/test_apply_opera_treatment.py +++ b/tests/test_apply_opera_hls_treatment.py @@ -5,7 +5,7 @@ import pytest -from bignbit.apply_opera_treatment import the_opera_treatment +from bignbit.apply_opera_hls_treatment import the_opera_hls_treatment @pytest.fixture() @@ -15,10 +15,10 @@ def cnm_v151_schema(): return cnm_schema -def test_the_opera_treatment(tmp_path): +def test_the_opera_hls_treatment(tmp_path): test_data_input = pathlib.Path(dirname(realpath(__file__))).joinpath('data').joinpath( 'OPERA_L3_DSWx-HLS_T48SUE_20190302T034350Z_20230131T222341Z_L8_30_v0.0_BROWSE.tiff') - result = the_opera_treatment(test_data_input, tmp_path, 'T48SUE') + result = the_opera_hls_treatment(test_data_input, tmp_path, 'T48SUE') assert result diff --git a/tests/test_send_to_gibs_moto.py b/tests/test_send_to_gibs_moto.py index edbd2b1..50828f8 100644 --- a/tests/test_send_to_gibs_moto.py +++ b/tests/test_send_to_gibs_moto.py @@ -8,7 +8,6 @@ import os import threading import urllib.request -import uuid import boto3 import jsonschema @@ -106,7 +105,6 @@ def test_process_sends_message(fake_response_sqs_queue, mock_gitc_success, cnm_v sub_event = event.copy() del sub_event['cma']['event']['payload']['pobit'] sub_event['cma']['event']['payload'] = imageset - sub_event['cma']['task_config']['token'] = str(uuid.uuid4()) bignbit.send_to_gitc.lambda_handler(sub_event, {}) sent_messages = mock_gitc_success.wait_for_messages(count=1)