{ "info": { "author": "Tjelvar Olsson", "author_email": "tjelvar.olsson@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "Add S3 support to dtool\n=======================\n\n.. image:: https://badge.fury.io/py/dtool-s3.svg\n :target: http://badge.fury.io/py/dtool-s3\n :alt: PyPi package\n\n- GitHub: https://github.com/jic-dtool/dtool-S3\n- PyPI: https://pypi.python.org/pypi/dtool-S3\n- Free software: MIT License\n\nFeatures\n--------\n\n- Copy datasets to and from S3 object storage\n- List all the datasets in a S3 bucket\n- Create datasets directly in S3\n\nInstallation\n------------\n\nTo install the dtool-S3 package::\n\n pip install dtool-s3\n\n\nConfiguration\n-------------\n\nInstall the ``aws`` client, for details see\n`https://docs.aws.amazon.com/cli/latest/userguide/installing.html `_. In short::\n\n pip install awscli --upgrade --user\n\nConfigure the credentials using::\n\n aws configure\n\nThese are needed for the ``boto3`` library, for more details see\n`https://boto3.readthedocs.io/en/latest/guide/quickstart.html `_.\n\n\nConfiguring custom endpoints\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nIt is possible to configure buckets to make use of custom endpoints. This is useful if one wants to make use of S3 storage not hosted in AWS.\n\nCreate the file ``.config/dtool/dtool.json`` and add the s3 storage account details\nusing the format below::\n\n {\n \"DTOOL_S3_ENDPOINT_\": \"\",\n \"DTOOL_S3_ACCESS_KEY_\": \"\",\n \"DTOOL_S3_SECRET_ACCESS_KEY_\": \"\"\n }\n\nFor example::\n\n {\n \"DTOOL_S3_ENDPOINT_my-bucket\": \"http://blueberry.famous.uni.ac.uk\",\n \"DTOOL_S3_ACCESS_KEY_ID_my-bucket\": \"olssont\",\n \"DTOOL_S3_SECRET_ACCESS_KEY_my-bucket\": \"some-secret-token\"\n }\n\nThe configuration can also be done using your environment variables. For example on Linux/Mac::\n\n env 'DTOOL_S3_ENDPOINT_my-bucket=http://blueberry.famous.uni.ac.uk' \\\n 'DTOOL_S3_ACCESS_KEY_ID_my-bucket=olssont' \\\n 'DTOOL_S3_SECRET_ACCESS_KEY_my_bucket=some-secret-token' bash\n\nNote that hyphens in environment variable names do not adhere to the\n`POSIX standard `_\n``export`` will not allow such names, hence the above *workaround* via ``env`` may\nbe necessary to modify the environment.\n\n\nUsage\n-----\n\nTo copy a dataset from local disk (``my-dataset``) to a S3 bucket\n(``/data_raw``) one can use the command below::\n\n dtool copy ./my-dataset s3://data_raw\n\nTo list all the datasets in a S3 bucket one can use the command below::\n\n dtool ls s3://data_raw\n\nSee the `dtool documentation `_ for more detail.\n\n\nPublishing datasets\n-------------------\n\nIt is possible to make datasets stored in S3 publicly accessible using the\n`dtool publish` command. The S3 storage broker supports making datasets\naccessible to the world by setting the ACL to `public-read` (the default) as\nwell as giving limited access to datasets using presigned URLS.\n\nTo publish a dataset using a presigned URL one needs to set the\n`DTOOL_S3_PUBLISH_EXPIRY` to the number of seconds one wants to make the\ndataset accessible for. For example by adding this setting to the\n`~/.config/dtool/dtool.json` file or by exporting it as an environment\nvariable.\n\n::\n\n export DTOOL_S3_PUBLISH_EXPIRY=3600\n\n\nPath prefix and access control\n------------------------------\n\nThe S3 plugin supports an endpoint-specific configurable prefix to the path.\nThis can be used for access control to the dataset. For example::\n\n env 'DTOOL_S3_DATASET_PREFIX_my-bucket=u/olssont' bash\n\nAlternatively one can edit the ``~/.config/dtool/dtool.json`` file::\n\n {\n ...,\n \"DTOOL_S3_DATASET_PREFIX_my-bucket\": \"u/olssont\"\n }\n\n\nUse the following S3 access to policy to that allows reading all data\nin the bucket but only writing to the prefix `u/` and `dtool-`::\n\n {\n \"Statement\": [\n {\n \"Sid\": \"AllowReadonlyAccess\",\n \"Effect\": \"Allow\",\n \"Action\": [\n \"s3:ListBucket\",\n \"s3:ListBucketVersions\",\n \"s3:GetObject\",\n \"s3:GetObjectTagging\",\n \"s3:GetObjectVersion\",\n \"s3:GetObjectVersionTagging\"\n ],\n \"Resource\": [\n \"arn:aws:s3:::my-bucket\",\n \"arn:aws:s3:::my-bucket/*\"\n ]\n },\n {\n \"Sid\": \"AllowPartialWriteAccess\",\n \"Effect\": \"Allow\",\n \"Action\": [\n \"s3:DeleteObject\",\n \"s3:PutObject\",\n \"s3:PutObjectAcl\"\n ],\n \"Resource\": [\n \"arn:aws:s3:::my-bucket/dtool-*\",\n \"arn:aws:s3:::my-bucket/u/${aws:username}/*\"\n ]\n },\n {\n \"Sid\": \"AllowListAllBuckets\",\n \"Effect\": \"Allow\",\n \"Action\": [\n \"s3:ListAllMyBuckets\",\n \"s3:GetBucketLocation\"\n ],\n \"Resource\": \"arn:aws:s3:::*\"\n }\n ]\n }\n\nThe user also needs write access to toplevel objects that start with `dtool-`.\nThose are the registration keys that are not stored under the configured\nprefix. The registration keys contain the prefix where the respective dataset\nis found. They are empty if no prefix is configured.\n\nTesting\n-------\n\nLinux/Mac\n~~~~~~~~~\n\nAll tests need the S3_TEST_BASE_URI environment variable set.\n\n::\n\n export S3_TEST_BASE_URI=\"s3://your-dtool-s3-test-bucket\"\n\nFor the ``tests/test_custom_endpoint_config.py`` test one also needs to specify the S3_TEST_ACCESS_KEY_ID and S3_TEST_SECRET_ACCESS_KEY environment variables.\n\n::\n\n export S3_TEST_ACCESS_KEY_ID=YOUR_AWS_ACCESS_KEY\n export S3_TEST_SECRET_ACCESS_KEY=YOUR_AWS_SECRET_ACCESS_KEY\n\nTo run the tests.\n\n::\n\n python setup.py develop\n pytest\n\n\nWindows PowerShell\n~~~~~~~~~~~~~~~~~~\n\nAll tests need the S3_TEST_BASE_URI environment variable set.\n\n::\n\n $env:S3_TEST_BASE_URI = \"s3://your-dtool-s3-test-bucket\"\n\nFor the ``tests/test_custom_endpoint_config.py`` test one also needs to specify the S3_TEST_ACCESS_KEY_ID and S3_TEST_SECRET_ACCESS_KEY environment variables.\n\n::\n\n $env:S3_TEST_ACCESS_KEY_ID = YOUR_AWS_ACCESS_KEY\n $env:S3_TEST_SECRET_ACCESS_KEY = YOUR_AWS_SECRET_ACCESS_KEY\n\nTo run the tests.\n\n::\n\n python setup.py develop\n pytest\n\nWindows DOS\n~~~~~~~~~~~\n\nAll tests need the S3_TEST_BASE_URI environment variable set.\n\n::\n\n setx S3_TEST_BASE_URI \"s3://test-dtool-s3-bucket-to\"\n python setup.py develop\n pytest\n\nFor the ``tests/test_custom_endpoint_config.py`` test one also needs to specify the S3_TEST_ACCESS_KEY_ID and S3_TEST_SECRET_ACCESS_KEY environment variables.\n\n::\n\n setx S3_TEST_ACCESS_KEY_ID YOUR_AWS_ACCESS_KEY\n setx S3_TEST_SECRET_ACCESS_KEY YOUR_AWS_SECRET_ACCESS_KEY\n\nTo run the tests.\n\n::\n\n python setup.py develop\n pytest\n\n\nRelated packages\n----------------\n\n- `dtoolcore `_\n- `dtool-cli `_\n- `dtool-ecs `_\n- `dtool-http `_\n- `dtool-azure `_\n- `dtool-irods `_\n- `dtool-smb `_", "description_content_type": "", "docs_url": null, "download_url": "https://github.com/jic-dtool/dtool-s3/tarball/0.14.1", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/jic-dtool/dtool-s3", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "dtool-s3", "package_url": "https://pypi.org/project/dtool-s3/", "platform": null, "project_url": "https://pypi.org/project/dtool-s3/", "project_urls": { "Download": "https://github.com/jic-dtool/dtool-s3/tarball/0.14.1", "Homepage": "https://github.com/jic-dtool/dtool-s3" }, "release_url": "https://pypi.org/project/dtool-s3/0.14.1/", "requires_dist": null, "requires_python": "", "summary": "Add S3 support to dtool", "version": "0.14.1", "yanked": false, "yanked_reason": null }, "last_serial": 13229134, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "2d8bf869d52aa7c6e7d715df7644e814", "sha256": "14e5318c69164af3e9c7f1292d95ad1cb3b8cfc8a163179dd284e06481def47f" }, "downloads": -1, "filename": "dtool-s3-0.1.0.tar.gz", "has_sig": false, "md5_digest": "2d8bf869d52aa7c6e7d715df7644e814", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5968, "upload_time": "2018-01-18T16:53:46", "upload_time_iso_8601": "2018-01-18T16:53:46.145673Z", "url": "https://files.pythonhosted.org/packages/b5/2b/e69966296c19a96c41d9c1667485baeb826c0db206d2f74bf5cd3ccbd058/dtool-s3-0.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "0a5b2213aabbaff360ac93198dcde9cc", "sha256": "2a824bfe3c48364e665ed0a3510c6836f8eb38998deff38c61b32205b6c0a1ff" }, "downloads": -1, "filename": "dtool-s3-0.1.1.tar.gz", "has_sig": false, "md5_digest": "0a5b2213aabbaff360ac93198dcde9cc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6489, "upload_time": "2018-01-18T18:11:41", "upload_time_iso_8601": "2018-01-18T18:11:41.792615Z", "url": "https://files.pythonhosted.org/packages/54/f2/f6c7bdfd85847f36120671352da7e155f0c6148e3640e622099efbf0da53/dtool-s3-0.1.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.10.0": [ { "comment_text": "", "digests": { "md5": "3b6969f00338a9c383c17bec4cb48e01", "sha256": "1d3b460f7b8eff01bb40a08a4c6211096fae53483be921a0de9d674be82a94d9" }, "downloads": -1, "filename": "dtool-s3-0.10.0.tar.gz", "has_sig": false, "md5_digest": "3b6969f00338a9c383c17bec4cb48e01", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8411, "upload_time": "2020-03-19T16:32:29", "upload_time_iso_8601": "2020-03-19T16:32:29.756988Z", "url": "https://files.pythonhosted.org/packages/46/e3/738677f89e97589fd3db8b4ee50973d872e3b03d16361e24ad6fd0ea4a7d/dtool-s3-0.10.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.11.0": [ { "comment_text": "", "digests": { "md5": "3747ecf8a385113d4268bb7aa61443d6", "sha256": "00b7a46268b02aea21c30e7ba215494c1330a477338890194abfc47dafafcf34" }, "downloads": -1, "filename": "dtool-s3-0.11.0.tar.gz", "has_sig": false, "md5_digest": "3747ecf8a385113d4268bb7aa61443d6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11239, "upload_time": "2021-06-20T15:30:16", "upload_time_iso_8601": "2021-06-20T15:30:16.420860Z", "url": "https://files.pythonhosted.org/packages/d0/c6/4aae5bbd26a8ad3d33ebe9d2c998a8f6ef568663b19f0566ece7437619f0/dtool-s3-0.11.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.12.0": [ { "comment_text": "", "digests": { "md5": "933acf1cb273441e29f9d6b145b6dd6d", "sha256": "085762c6312cd6b730dda09d8ccd65605f51d9ba2a96322b37c8db4d6175419d" }, "downloads": -1, "filename": "dtool-s3-0.12.0.tar.gz", "has_sig": false, "md5_digest": "933acf1cb273441e29f9d6b145b6dd6d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12721, "upload_time": "2021-08-29T18:08:28", "upload_time_iso_8601": "2021-08-29T18:08:28.392060Z", "url": "https://files.pythonhosted.org/packages/3f/26/e253f2f45e16be6b717c11b1297d87a84fbc777854d4ff28517796e9576a/dtool-s3-0.12.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.13.0": [ { "comment_text": "", "digests": { "md5": "4d89ed6d9781ef112ac81be47a48dadf", "sha256": "7422044f40760f8ec3301e74e53582424452f2baec4527e161da0ae89016610a" }, "downloads": -1, "filename": "dtool-s3-0.13.0.tar.gz", "has_sig": false, "md5_digest": "4d89ed6d9781ef112ac81be47a48dadf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13791, "upload_time": "2022-01-13T23:04:18", "upload_time_iso_8601": "2022-01-13T23:04:18.807503Z", "url": "https://files.pythonhosted.org/packages/b3/61/c9fb4cfadc85f5047d76d102331381a928207fda7826b24063fb21f991da/dtool-s3-0.13.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.14.0": [ { "comment_text": "", "digests": { "md5": "dff859d876903766c6f89609abc39442", "sha256": "34d85582c4e5dea0510a592779d4033199d1f17761dc617c9ff5ce3a12be064c" }, "downloads": -1, "filename": "dtool-s3-0.14.0.tar.gz", "has_sig": false, "md5_digest": "dff859d876903766c6f89609abc39442", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14486, "upload_time": "2022-03-09T20:01:00", "upload_time_iso_8601": "2022-03-09T20:01:00.687777Z", "url": "https://files.pythonhosted.org/packages/3d/58/9d6794c9e21422a837c4d998570d978fbeab71cb0eb51a6144079589115f/dtool-s3-0.14.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.14.1": [ { "comment_text": "", "digests": { "md5": "62bbad581c27a51c81c179cce050023b", "sha256": "ee87f8ce07f8081bb1e9e28dd57b966f4493323497339409f31dfdf1dcf67341" }, "downloads": -1, "filename": "dtool-s3-0.14.1.tar.gz", "has_sig": false, "md5_digest": "62bbad581c27a51c81c179cce050023b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14956, "upload_time": "2022-03-20T11:00:11", "upload_time_iso_8601": "2022-03-20T11:00:11.931156Z", "url": "https://files.pythonhosted.org/packages/d0/b6/4d75ba8f2813184e2a423cbcbf9f041d283c7d6db7f9386d673bcc9a457e/dtool-s3-0.14.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "4c685e1f228e74b148202c53e9fd17ea", "sha256": "1445bccf3b4537150cbd53f72cfe83d68d63d0417fc85017016d7bd424be9ef2" }, "downloads": -1, "filename": "dtool-s3-0.2.0.tar.gz", "has_sig": false, "md5_digest": "4c685e1f228e74b148202c53e9fd17ea", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7156, "upload_time": "2018-07-05T13:06:52", "upload_time_iso_8601": "2018-07-05T13:06:52.032737Z", "url": "https://files.pythonhosted.org/packages/99/3d/f0112cfdda4281ab73200d556c9d426afeb1a870c0d032e1ed578150081a/dtool-s3-0.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "d6d8d590d05a33481d70e5c43d8adf35", "sha256": "492458a10c484e10f0a9efde6a021ce3cf7ff31fa74afba92d4c08c8890ca969" }, "downloads": -1, "filename": "dtool-s3-0.3.0.tar.gz", "has_sig": false, "md5_digest": "d6d8d590d05a33481d70e5c43d8adf35", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7196, "upload_time": "2018-07-09T14:02:05", "upload_time_iso_8601": "2018-07-09T14:02:05.107810Z", "url": "https://files.pythonhosted.org/packages/3d/72/e602322725cf882774ac604ad05ec2fe96a9d1fa754d88818e5e291eb2e9/dtool-s3-0.3.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "660f64886cbe76dc4aa40606540c1074", "sha256": "6ec142acdcc3d03601dcc148830be1efa3f23851b1c314085e8b58a9d2d93769" }, "downloads": -1, "filename": "dtool-s3-0.4.0.tar.gz", "has_sig": false, "md5_digest": "660f64886cbe76dc4aa40606540c1074", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7100, "upload_time": "2018-07-24T16:09:55", "upload_time_iso_8601": "2018-07-24T16:09:55.667641Z", "url": "https://files.pythonhosted.org/packages/e6/2e/ce00f7dd7b88b4a7f8733a3ce19d1a9249dfa5be5e8aaaed6bedee117cfd/dtool-s3-0.4.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "63ebe013d2b1b4b9eea827d593914c93", "sha256": "7cbb7398ff4e255979c9c82b726e6009703baa34739e87518052695f120639cc" }, "downloads": -1, "filename": "dtool-s3-0.4.1.tar.gz", "has_sig": false, "md5_digest": "63ebe013d2b1b4b9eea827d593914c93", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7255, "upload_time": "2018-09-11T19:48:05", "upload_time_iso_8601": "2018-09-11T19:48:05.121210Z", "url": "https://files.pythonhosted.org/packages/b2/0b/23aace0edc2c96b7dfe36f3ce535aa06f364aae7f80b47a1d65aef17adf0/dtool-s3-0.4.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "a0facdca1debb1c3fbd400070ee78378", "sha256": "8297ab6c92596675add6e8251378b5e790507ce66fae8c7923c45f3f1ed8264e" }, "downloads": -1, "filename": "dtool-s3-0.5.0.tar.gz", "has_sig": false, "md5_digest": "a0facdca1debb1c3fbd400070ee78378", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7607, "upload_time": "2019-04-25T17:06:02", "upload_time_iso_8601": "2019-04-25T17:06:02.330160Z", "url": "https://files.pythonhosted.org/packages/20/65/cd8790d093a51a413a49f9903a114cdf498a9a8b88d8933168ff528afc23/dtool-s3-0.5.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "8ba2103030e90378aa7f87081a506908", "sha256": "c4d59c6c3836cdd11bb54fa84bcec2100083037c0f40cd3a0a7d627b520b26dc" }, "downloads": -1, "filename": "dtool-s3-0.6.0.tar.gz", "has_sig": false, "md5_digest": "8ba2103030e90378aa7f87081a506908", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6958, "upload_time": "2019-07-12T10:18:33", "upload_time_iso_8601": "2019-07-12T10:18:33.946383Z", "url": "https://files.pythonhosted.org/packages/ff/cb/f9d8dfdd191874bd62a0fa8cd217c45c1ff5f29dcca7fd5deac34d5f3954/dtool-s3-0.6.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "66333676af5aaa64c70c5ac3ddf91f2e", "sha256": "07a21116429820d515259452da2cb49c73a41727f8ca0cfb8a0ea4e398ed8ce1" }, "downloads": -1, "filename": "dtool-s3-0.7.0.tar.gz", "has_sig": false, "md5_digest": "66333676af5aaa64c70c5ac3ddf91f2e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7577, "upload_time": "2019-10-31T08:58:06", "upload_time_iso_8601": "2019-10-31T08:58:06.390070Z", "url": "https://files.pythonhosted.org/packages/5f/d1/d4600bfa2da279de97d5c13ed30f1b6398a9d44055ab6b284cabbbd7c2d7/dtool-s3-0.7.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.8.0": [ { "comment_text": "", "digests": { "md5": "0ff412e22c20d865907f100b3f87d33b", "sha256": "6a18d56aa0b52d16ff3aa88fdb84dd0eac3f29da39d6adb0d1ab6d8e1047e6fb" }, "downloads": -1, "filename": "dtool-s3-0.8.0.tar.gz", "has_sig": false, "md5_digest": "0ff412e22c20d865907f100b3f87d33b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8478, "upload_time": "2019-11-06T13:06:56", "upload_time_iso_8601": "2019-11-06T13:06:56.026851Z", "url": "https://files.pythonhosted.org/packages/31/ee/632f1a472b6b7cb9c8b277027d4679f5c3831687e77ed19d9a386611d247/dtool-s3-0.8.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.9.0": [ { "comment_text": "", "digests": { "md5": "650a68f8a62072931b80876b95918fa3", "sha256": "2ef72f205dedd9ef3cdc7e0a80db30877b80955224f93eb891737cce4f2480d8" }, "downloads": -1, "filename": "dtool-s3-0.9.0.tar.gz", "has_sig": false, "md5_digest": "650a68f8a62072931b80876b95918fa3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8503, "upload_time": "2019-11-08T15:24:05", "upload_time_iso_8601": "2019-11-08T15:24:05.495854Z", "url": "https://files.pythonhosted.org/packages/d3/d1/47ee2c9fb36e59e0cdd55c086ee9d9321c1827a062d0873b7755f5541b60/dtool-s3-0.9.0.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "62bbad581c27a51c81c179cce050023b", "sha256": "ee87f8ce07f8081bb1e9e28dd57b966f4493323497339409f31dfdf1dcf67341" }, "downloads": -1, "filename": "dtool-s3-0.14.1.tar.gz", "has_sig": false, "md5_digest": "62bbad581c27a51c81c179cce050023b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14956, "upload_time": "2022-03-20T11:00:11", "upload_time_iso_8601": "2022-03-20T11:00:11.931156Z", "url": "https://files.pythonhosted.org/packages/d0/b6/4d75ba8f2813184e2a423cbcbf9f041d283c7d6db7f9386d673bcc9a457e/dtool-s3-0.14.1.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }