InsulaWorkflowClient


NameInsulaWorkflowClient JSON
Version 0.7.7 PyPI version JSON
download
home_pageNone
SummaryInsula Workflow CLient
upload_time2025-02-21 08:13:20
maintainerNone
docs_urlNone
authorNone
requires_python>=3.9
licenseNone
keywords italia cgi client insula
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Insula Workflow Client

## Example

```python
from InsulaWorkflowClient import InsulaOpenIDConnect
from InsulaWorkflowClient.InsulaApiConfig import InsulaApiConfig
from InsulaWorkflowClient.InsulaClient import InsulaClient

insula_auth: InsulaOpenIDConnect = InsulaOpenIDConnect(
    authorization_endpoint='https://identity.ope.insula.earth//realms/iride-lot3/protocol/openid-connect/auth',
    token_endpoint='https://identity.ope.insula.earth//realms/iride-lot3/protocol/openid-connect/token',
    redirect_uri='http://localhost:9207/auth',
    client_id="api-client"
)
insula_auth.set_user_credentials(username="<USER>", password="<PASSWORD>")

ic = InsulaClient(InsulaApiConfig(
    'https://iride-lot3.ope.insula.earth',
    insula_auth,
    status_polling_interval=30,    # Seconds
    interval_between_requests=5,   # Seconds
    max_processor_attempts=3
))

ic.run_from_file('<THE TEMPLATE PATH>',
                 {
                     'access_key': '<access_key>',
                     'secret_key': '<secret_key>',
                     'elaboration_date': '2023_2024',
                     'region_name': 'Molise'
                 }, '<optional log name>')
```

```yaml
type: workflow
language: native
name: work_iride
version: beta/1
description: |
  PLEASE, DO NOT CHANGE THIS FILE 
  pre processing workflow from step 0a to Siam, push SPOT_T0, SPOT_T1

portal_ref: eopaas://refData/33/workflow_pre_processing.yaml

parameters:
  #----dynamic----
  id_tile: '552'
  elaboration_date: '2023_2024'
  time: 'SPOT_T1'
  #----static----
  reticle_definition: 'eopaas://refData/33/reticolo_20x20km_ita_epsg4326.geojson'
  collection_base: '{"out":"iridelot33c67fd6450604bfebfa541474a094a62"}'
  siam_collection_base: '{"calibration_data":"iridelot33c67fd6450604bfebfa541474a094a62","masks":"iridelot33c67fd6450604bfebfa541474a094a62","pct_full":"iridelot33c67fd6450604bfebfa541474a094a62","pct_33":"iridelot33c67fd6450604bfebfa541474a094a62"}'
  s3_platform_ref: 'eopaas://refData/33/obs.eu-de.otc.t-systems.com_bot.json'
  #for s3copy processor without https://
  s3_copy_endpoint: 'hhf.eu-dfd.otc.t-fgfd.com'
  s3_copy_bucket_map_sat: 'hhs.fs-de.ffd.t-systems.com'
  s3_bucket_map_cgi: 'csa-fdf-svc-hh-fg-soil-sealing-map-cgi'

configuration:
  max_parallel_jobs: 5
  continue_on_error: false
  delete_workflow_log: false

requirements:
  connections:
    - name: s3_soil_sealing
      type: s3
      params:
        access_key: ${workflow.param.access_key}
        secret_key: ${workflow.param.secret_key}
        endpoint: 'https://sfd.ff-fgd.otc.t-dgfd.com'
        bucket: '${workflow.param.s3_bucket_map_cgi}'

steps:
  - - name: create_buckets_name
      type: script
      continue_on_error: false
      outputs:
        - s4_03_t0_siam
        - s4_02_t1_siam
        - soil_s4_03_First_processing
        - soil_s4_02_First_processing
        - pid_path
      params:
        - name: id_tile
          values: ${workflow.param.id_tile}
        - name: elaboration_date
          values: ${workflow.param.elaboration_date}
        - name: time
          values: ${workflow.param.time}
      source: |

        s4_03_t0_siam = f'{elaboration_date}/S4_03/{id_tile}/Pre_Processing/siam'
        s4_02_t1_siam = f'{elaboration_date}/S4_02/{id_tile}/Pre_Processing/siam'  
        soil_s4_03_First_processing = f'{elaboration_date}/S4_03/{id_tile}/First_Processing'
        soil_s4_02_First_processing = f'{elaboration_date}/S4_02/{id_tile}/First_Processing'
        pid_path = f'{elaboration_date}/__processing/{id_tile}/First_Processing'

        print(f'Pre processing s4_03 siam s3 path: {s4_03_t0_siam}')    
        print(f'Pre processing s4_02 siam s3 path: {s4_02_t0_siam}')                
        print(f'soil_s4_03_First_processing s3 path: {soil_s4_03_First_processing}')
        print(f'soil_s4_02_First_processing s3 path: {soil_s4_02_First_processing}')


  - - name: IrideLot3ClippingReticle
      type: processor
      service_id: '8'
      params:
        - name: id_tile
          values: '${workflow.param.idtile}'
        - name: elaboration_date
          values: '${workflow.param.elaboration_date}'
        - name: s3_platform_ref
          values: '${workflow.param.s3_platform_ref}'
        - name: reticle_definition
          values: '${workflow.param.reticle_definition}'
        - name: collection
          values: '${workflow.param.collection_base}'

  - - name: IrideLot3Clipping
      type: processor
      service_id: '9'
      params:
        - name: id_tile
          values: '${workflow.param.id_tile}'
        - name: elaboration_date
          values: '${workflow.param.elaboration_date}'
        - name: SPOT_T0
          values: '${workflow.step.IrideLot3ClippingReticle.SPOT_T0}'
        - name: SPOT_T1
          values: '${workflow.step.IrideLot3ClippingReticle.SPOT_T1}'
        - name: collection
          values: '${workflow.param.collection_base}'

  - - name: siam_spot_t0
      template: siam
      params:
        - name: parallelInputs
          values: '${workflow.step.IrideLot3Clipping.SPOT_T0}'
    - name: siam_spot_t1
      template: siam
      params:
        - name: parallelInputs
          values: '${workflow.step.IrideLot3Clipping.SPOT_T1}'

    - name: IrideLot3SoilSealing
      type: processor
      service_id: '10'
      params:
        - name: id_tile
          values: '${workflow.param.id_tile}'
        - name: elaboration_date
          values: '${workflow.param.elaboration_date}'
        - name: reticolo
          values: ${workflow.step.IrideLot3ClippingReticle.SPOT_T0}
        - name: siam
          values: ${workflow.step.siam_spot_t0} $[(.*61SpCt.*\.tif$)|(.*VegBinaryMask.*\.dat$)|(.*VegBinaryMask.*\.hdr$)]
        - name: mapsat
          values: 'none'
        - name: collection
          values: '${workflow.param.collection_base}'

    - name: IrideLot3ChangeDetectionMergeSiam
      type: processor
      service_id: '12'
      params:
        - name: id_tile
          values: '${workflow.param.id_tile}'
        - name: elaboration_date
          values: '${workflow.param.elaboration_date}'
        - name: reticolo_t0
          values: ${workflow.step.IrideLot3ClippingReticle.SPOT_T0}
        - name: reticolo_t1
          values: ${workflow.step.IrideLot3ClippingReticle.SPOT_T1}
        - name: siam_t0
          values: ${workflow.step.siam_spot_t0} $[(.*fRatioGreennessIndex.*)|(.*fRatioCanopyChlorophyllContent.*)|(.*33SharedSpCt.*\.tif$)|(.*VegBinaryMask.*\.dat$)|(.*VegBinaryMask.*\.hdr$)]
        - name: siam_t1
          values: ${workflow.step.siam_spot_t1} $[(.*fRatioGreennessIndex.*)|(.*fRatioCanopyChlorophyllContent.*)|(.*33SharedSpCt.*\.tif$)|(.*VegBinaryMask.*\.dat$)|(.*VegBinaryMask.*\.hdr$)]
        - name: collection
          values: '${workflow.param.collection_base}'

  - - name: SiamChangeDetector
      type: processor
      service_id: '14'
      params:
        - name: T1
          values: ${workflow.step.IrideLot3ChangeDetectionMergeSiam.merge_t0} $[(.*\.dat$)|(.*\.hdr$)]
        - name: T2
          values: ${workflow.step.IrideLot3ChangeDetectionMergeSiam.merge_t1} $[(.*\.dat$)|(.*\.hdr$)]
        - name: collection
          values: '${workflow.param.collection_base}'


  - - name: siam_push_t0
      template: s3_copy
      params:
        - name: source
          values: '${workflow.step.siam_spot_t0}'
        - name: destination
          values: '${workflow.step.create_buckets_name.s4_03_t0_siam}'

    - name: siam_push_t1
      template: s3_copy
      params:
        - name: source
          values: '${workflow.step.siam_spot_t1}'
        - name: destination
          values: '${workflow.step.create_buckets_name.s4_02_t1_siam}'

    - name: IrideLot3SoilSealing_push_t0
      template: s3_copy
      params:
        - name: source
          values: '${workflow.step.IrideLot3SoilSealing}'
        - name: destination
          values: '${workflow.step.create_buckets_name.soil_s4_03_First_processing}'

    - name: SiamChangeDetector_push_t1
      template: s3_copy
      params:
        - name: source
          values: '${workflow.step.SiamChangeDetector}'
        - name: destination
          values: '${workflow.step.create_buckets_name.soil_s4_02_First_processing}'


  - - name: create_pids_file
      type: script
      continue_on_error: true
      outputs:
        - file_pid
      params:
        - name: job_reticle_id
          values: ${status.step.IrideLot3ClippingReticle.job_id}
        - name: job_siam_spot_t0_id
          values: ${status.step.siam_spot_t0.job_id}
        - name: job_siam_spot_t1_id
          values: ${status.step.siam_spot_t1.job_id}
      source: |

        content = f'{{"job_reticle_id":"{job_reticle_id}", "job_siam_spot_t0_id":"{job_siam_spot_t0_id}", "job_siam_spot_t1_id":"{job_siam_spot_t1_id}" }}'
        print(f'{content}')
        with open('jobs_file.json', 'w') as jobs_file:
          jobs_file.write(content)  
        print(f'{content}')
        file_pid = 'jobs_file.json'


  - - name: push_ids
      type: s3
      connection: s3_soil_sealing
      continue_on_error: false
      action: push
      params:
        - name: in
          values: '${workflow.step.create_pids_file.file_pid}'
          save_in: '2023_2024/S4-03/TEST'

templates:

  - name: s3_copy
    service_id: '11'
    type: processor
    params:
      - name: action
        values: upload
      - name: s3_endpoint
        values: '${workflow.param.s3_copy_endpoint}'
      - name: s3_bucket
        values: '${workflow.param.s3_bucket_map_cgi}'
      - name: s3_platform_ref
        values: '${workflow.param.s3_platform_ref}'
      - name: collection
        values: '{"output":"iridelot365b7d9dde6044c00b26abe046aed0556"}'


  - name: siam
    service_id: '3'
    type: processor
    params:
      - name: veg_mask
        values: 'binary'
      - name: cloud_mask
        values: 'binary'
      - name: urban_mask
        values: 'disabled'
      - name: collection
        values: '${workflow.param.siam_collection_base}'
      - name: shadow_mask
        values: 'enabled'
      - name: keep_calibration_data
        values: 'false'
      - name: extra_indexes
        values: 'true'
      - name: water_mask
        values: 'disabled'
      - name: bare_soil_mask
        values: 'disabled'
      - name: burned_area_mask
        values: 'disabled'
      - name: use_no_data_mask
        values: 'true'
      - name: smoke_mask
        values: 'disabled'
      - name: classification_mode
        values: 'crisp'

```
            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "InsulaWorkflowClient",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": "Roberto Di Rienzo <roberto.dirienzo@cgi.com>",
    "keywords": "Italia, cgi, client, insula",
    "author": null,
    "author_email": "Roberto Di Rienzo <roberto.dirienzo@codelithic.com>",
    "download_url": null,
    "platform": null,
    "description": "# Insula Workflow Client\n\n## Example\n\n```python\nfrom InsulaWorkflowClient import InsulaOpenIDConnect\nfrom InsulaWorkflowClient.InsulaApiConfig import InsulaApiConfig\nfrom InsulaWorkflowClient.InsulaClient import InsulaClient\n\ninsula_auth: InsulaOpenIDConnect = InsulaOpenIDConnect(\n    authorization_endpoint='https://identity.ope.insula.earth//realms/iride-lot3/protocol/openid-connect/auth',\n    token_endpoint='https://identity.ope.insula.earth//realms/iride-lot3/protocol/openid-connect/token',\n    redirect_uri='http://localhost:9207/auth',\n    client_id=\"api-client\"\n)\ninsula_auth.set_user_credentials(username=\"<USER>\", password=\"<PASSWORD>\")\n\nic = InsulaClient(InsulaApiConfig(\n    'https://iride-lot3.ope.insula.earth',\n    insula_auth,\n    status_polling_interval=30,    # Seconds\n    interval_between_requests=5,   # Seconds\n    max_processor_attempts=3\n))\n\nic.run_from_file('<THE TEMPLATE PATH>',\n                 {\n                     'access_key': '<access_key>',\n                     'secret_key': '<secret_key>',\n                     'elaboration_date': '2023_2024',\n                     'region_name': 'Molise'\n                 }, '<optional log name>')\n```\n\n```yaml\ntype: workflow\nlanguage: native\nname: work_iride\nversion: beta/1\ndescription: |\n  PLEASE, DO NOT CHANGE THIS FILE \n  pre processing workflow from step 0a to Siam, push SPOT_T0, SPOT_T1\n\nportal_ref: eopaas://refData/33/workflow_pre_processing.yaml\n\nparameters:\n  #----dynamic----\n  id_tile: '552'\n  elaboration_date: '2023_2024'\n  time: 'SPOT_T1'\n  #----static----\n  reticle_definition: 'eopaas://refData/33/reticolo_20x20km_ita_epsg4326.geojson'\n  collection_base: '{\"out\":\"iridelot33c67fd6450604bfebfa541474a094a62\"}'\n  siam_collection_base: '{\"calibration_data\":\"iridelot33c67fd6450604bfebfa541474a094a62\",\"masks\":\"iridelot33c67fd6450604bfebfa541474a094a62\",\"pct_full\":\"iridelot33c67fd6450604bfebfa541474a094a62\",\"pct_33\":\"iridelot33c67fd6450604bfebfa541474a094a62\"}'\n  s3_platform_ref: 'eopaas://refData/33/obs.eu-de.otc.t-systems.com_bot.json'\n  #for s3copy processor without https://\n  s3_copy_endpoint: 'hhf.eu-dfd.otc.t-fgfd.com'\n  s3_copy_bucket_map_sat: 'hhs.fs-de.ffd.t-systems.com'\n  s3_bucket_map_cgi: 'csa-fdf-svc-hh-fg-soil-sealing-map-cgi'\n\nconfiguration:\n  max_parallel_jobs: 5\n  continue_on_error: false\n  delete_workflow_log: false\n\nrequirements:\n  connections:\n    - name: s3_soil_sealing\n      type: s3\n      params:\n        access_key: ${workflow.param.access_key}\n        secret_key: ${workflow.param.secret_key}\n        endpoint: 'https://sfd.ff-fgd.otc.t-dgfd.com'\n        bucket: '${workflow.param.s3_bucket_map_cgi}'\n\nsteps:\n  - - name: create_buckets_name\n      type: script\n      continue_on_error: false\n      outputs:\n        - s4_03_t0_siam\n        - s4_02_t1_siam\n        - soil_s4_03_First_processing\n        - soil_s4_02_First_processing\n        - pid_path\n      params:\n        - name: id_tile\n          values: ${workflow.param.id_tile}\n        - name: elaboration_date\n          values: ${workflow.param.elaboration_date}\n        - name: time\n          values: ${workflow.param.time}\n      source: |\n\n        s4_03_t0_siam = f'{elaboration_date}/S4_03/{id_tile}/Pre_Processing/siam'\n        s4_02_t1_siam = f'{elaboration_date}/S4_02/{id_tile}/Pre_Processing/siam'  \n        soil_s4_03_First_processing = f'{elaboration_date}/S4_03/{id_tile}/First_Processing'\n        soil_s4_02_First_processing = f'{elaboration_date}/S4_02/{id_tile}/First_Processing'\n        pid_path = f'{elaboration_date}/__processing/{id_tile}/First_Processing'\n\n        print(f'Pre processing s4_03 siam s3 path: {s4_03_t0_siam}')    \n        print(f'Pre processing s4_02 siam s3 path: {s4_02_t0_siam}')                \n        print(f'soil_s4_03_First_processing s3 path: {soil_s4_03_First_processing}')\n        print(f'soil_s4_02_First_processing s3 path: {soil_s4_02_First_processing}')\n\n\n  - - name: IrideLot3ClippingReticle\n      type: processor\n      service_id: '8'\n      params:\n        - name: id_tile\n          values: '${workflow.param.idtile}'\n        - name: elaboration_date\n          values: '${workflow.param.elaboration_date}'\n        - name: s3_platform_ref\n          values: '${workflow.param.s3_platform_ref}'\n        - name: reticle_definition\n          values: '${workflow.param.reticle_definition}'\n        - name: collection\n          values: '${workflow.param.collection_base}'\n\n  - - name: IrideLot3Clipping\n      type: processor\n      service_id: '9'\n      params:\n        - name: id_tile\n          values: '${workflow.param.id_tile}'\n        - name: elaboration_date\n          values: '${workflow.param.elaboration_date}'\n        - name: SPOT_T0\n          values: '${workflow.step.IrideLot3ClippingReticle.SPOT_T0}'\n        - name: SPOT_T1\n          values: '${workflow.step.IrideLot3ClippingReticle.SPOT_T1}'\n        - name: collection\n          values: '${workflow.param.collection_base}'\n\n  - - name: siam_spot_t0\n      template: siam\n      params:\n        - name: parallelInputs\n          values: '${workflow.step.IrideLot3Clipping.SPOT_T0}'\n    - name: siam_spot_t1\n      template: siam\n      params:\n        - name: parallelInputs\n          values: '${workflow.step.IrideLot3Clipping.SPOT_T1}'\n\n    - name: IrideLot3SoilSealing\n      type: processor\n      service_id: '10'\n      params:\n        - name: id_tile\n          values: '${workflow.param.id_tile}'\n        - name: elaboration_date\n          values: '${workflow.param.elaboration_date}'\n        - name: reticolo\n          values: ${workflow.step.IrideLot3ClippingReticle.SPOT_T0}\n        - name: siam\n          values: ${workflow.step.siam_spot_t0} $[(.*61SpCt.*\\.tif$)|(.*VegBinaryMask.*\\.dat$)|(.*VegBinaryMask.*\\.hdr$)]\n        - name: mapsat\n          values: 'none'\n        - name: collection\n          values: '${workflow.param.collection_base}'\n\n    - name: IrideLot3ChangeDetectionMergeSiam\n      type: processor\n      service_id: '12'\n      params:\n        - name: id_tile\n          values: '${workflow.param.id_tile}'\n        - name: elaboration_date\n          values: '${workflow.param.elaboration_date}'\n        - name: reticolo_t0\n          values: ${workflow.step.IrideLot3ClippingReticle.SPOT_T0}\n        - name: reticolo_t1\n          values: ${workflow.step.IrideLot3ClippingReticle.SPOT_T1}\n        - name: siam_t0\n          values: ${workflow.step.siam_spot_t0} $[(.*fRatioGreennessIndex.*)|(.*fRatioCanopyChlorophyllContent.*)|(.*33SharedSpCt.*\\.tif$)|(.*VegBinaryMask.*\\.dat$)|(.*VegBinaryMask.*\\.hdr$)]\n        - name: siam_t1\n          values: ${workflow.step.siam_spot_t1} $[(.*fRatioGreennessIndex.*)|(.*fRatioCanopyChlorophyllContent.*)|(.*33SharedSpCt.*\\.tif$)|(.*VegBinaryMask.*\\.dat$)|(.*VegBinaryMask.*\\.hdr$)]\n        - name: collection\n          values: '${workflow.param.collection_base}'\n\n  - - name: SiamChangeDetector\n      type: processor\n      service_id: '14'\n      params:\n        - name: T1\n          values: ${workflow.step.IrideLot3ChangeDetectionMergeSiam.merge_t0} $[(.*\\.dat$)|(.*\\.hdr$)]\n        - name: T2\n          values: ${workflow.step.IrideLot3ChangeDetectionMergeSiam.merge_t1} $[(.*\\.dat$)|(.*\\.hdr$)]\n        - name: collection\n          values: '${workflow.param.collection_base}'\n\n\n  - - name: siam_push_t0\n      template: s3_copy\n      params:\n        - name: source\n          values: '${workflow.step.siam_spot_t0}'\n        - name: destination\n          values: '${workflow.step.create_buckets_name.s4_03_t0_siam}'\n\n    - name: siam_push_t1\n      template: s3_copy\n      params:\n        - name: source\n          values: '${workflow.step.siam_spot_t1}'\n        - name: destination\n          values: '${workflow.step.create_buckets_name.s4_02_t1_siam}'\n\n    - name: IrideLot3SoilSealing_push_t0\n      template: s3_copy\n      params:\n        - name: source\n          values: '${workflow.step.IrideLot3SoilSealing}'\n        - name: destination\n          values: '${workflow.step.create_buckets_name.soil_s4_03_First_processing}'\n\n    - name: SiamChangeDetector_push_t1\n      template: s3_copy\n      params:\n        - name: source\n          values: '${workflow.step.SiamChangeDetector}'\n        - name: destination\n          values: '${workflow.step.create_buckets_name.soil_s4_02_First_processing}'\n\n\n  - - name: create_pids_file\n      type: script\n      continue_on_error: true\n      outputs:\n        - file_pid\n      params:\n        - name: job_reticle_id\n          values: ${status.step.IrideLot3ClippingReticle.job_id}\n        - name: job_siam_spot_t0_id\n          values: ${status.step.siam_spot_t0.job_id}\n        - name: job_siam_spot_t1_id\n          values: ${status.step.siam_spot_t1.job_id}\n      source: |\n\n        content = f'{{\"job_reticle_id\":\"{job_reticle_id}\", \"job_siam_spot_t0_id\":\"{job_siam_spot_t0_id}\", \"job_siam_spot_t1_id\":\"{job_siam_spot_t1_id}\" }}'\n        print(f'{content}')\n        with open('jobs_file.json', 'w') as jobs_file:\n          jobs_file.write(content)  \n        print(f'{content}')\n        file_pid = 'jobs_file.json'\n\n\n  - - name: push_ids\n      type: s3\n      connection: s3_soil_sealing\n      continue_on_error: false\n      action: push\n      params:\n        - name: in\n          values: '${workflow.step.create_pids_file.file_pid}'\n          save_in: '2023_2024/S4-03/TEST'\n\ntemplates:\n\n  - name: s3_copy\n    service_id: '11'\n    type: processor\n    params:\n      - name: action\n        values: upload\n      - name: s3_endpoint\n        values: '${workflow.param.s3_copy_endpoint}'\n      - name: s3_bucket\n        values: '${workflow.param.s3_bucket_map_cgi}'\n      - name: s3_platform_ref\n        values: '${workflow.param.s3_platform_ref}'\n      - name: collection\n        values: '{\"output\":\"iridelot365b7d9dde6044c00b26abe046aed0556\"}'\n\n\n  - name: siam\n    service_id: '3'\n    type: processor\n    params:\n      - name: veg_mask\n        values: 'binary'\n      - name: cloud_mask\n        values: 'binary'\n      - name: urban_mask\n        values: 'disabled'\n      - name: collection\n        values: '${workflow.param.siam_collection_base}'\n      - name: shadow_mask\n        values: 'enabled'\n      - name: keep_calibration_data\n        values: 'false'\n      - name: extra_indexes\n        values: 'true'\n      - name: water_mask\n        values: 'disabled'\n      - name: bare_soil_mask\n        values: 'disabled'\n      - name: burned_area_mask\n        values: 'disabled'\n      - name: use_no_data_mask\n        values: 'true'\n      - name: smoke_mask\n        values: 'disabled'\n      - name: classification_mode\n        values: 'crisp'\n\n```",
    "bugtrack_url": null,
    "license": null,
    "summary": "Insula Workflow CLient",
    "version": "0.7.7",
    "project_urls": null,
    "split_keywords": [
        "italia",
        " cgi",
        " client",
        " insula"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "91fe0bfa9286e7ff18fc5c7a3d8f3e11aa6025c65a30a9b82badc8e5dcd8fe6f",
                "md5": "c26e578fb965dcfb7c235d52034fe31f",
                "sha256": "cb292f859c3af9a0e12f2ebd39045e86e3bc75aa773aa5f054f028c1a55dd398"
            },
            "downloads": -1,
            "filename": "insulaworkflowclient-0.7.7-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "c26e578fb965dcfb7c235d52034fe31f",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 26766,
            "upload_time": "2025-02-21T08:13:20",
            "upload_time_iso_8601": "2025-02-21T08:13:20.503228Z",
            "url": "https://files.pythonhosted.org/packages/91/fe/0bfa9286e7ff18fc5c7a3d8f3e11aa6025c65a30a9b82badc8e5dcd8fe6f/insulaworkflowclient-0.7.7-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-02-21 08:13:20",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "insulaworkflowclient"
}
        
Elapsed time: 0.78125s