{ "info": { "author": "Eddy Hintze", "author_email": "eddy@hintze.co", "bugtrack_url": null, "classifiers": [ "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Utilities" ], "description": "# Python S3 Concat\n\n[![PyPI](https://img.shields.io/pypi/v/s3-concat.svg)](https://pypi.python.org/pypi/s3-concat)\n[![PyPI](https://img.shields.io/pypi/l/s3-concat.svg)](https://pypi.python.org/pypi/s3-concat) \n\n\nS3 Concat is used to concatenate many small files in an s3 bucket into fewer larger files.\n\n\n## Install\n`pip install s3-concat`\n\n\n## Usage\n\n### Command Line\n`$ s3-concat -h`\n\n### Import\n```python\nfrom s3_concat import S3Concat\n\nbucket = 'YOUR_BUCKET_NAME'\npath_to_concat = 'PATH_TO_FILES_TO_CONCAT'\nconcatenated_file = 'FILE_TO_SAVE_TO.json'\n# Setting this to a size will always add a part number at the end of the file name\nmin_file_size = '50MB' # ex: FILE_TO_SAVE_TO-1.json, FILE_TO_SAVE_TO-2.json, ...\n# Setting this to None will concat all files into a single file\n# min_file_size = None ex: FILE_TO_SAVE_TO.json\n\n# Init the job\njob = S3Concat(bucket, concatenated_file, min_file_size,\n content_type='application/json',\n # session=boto3.session.Session(), # For custom aws session\n # s3_client_kwargs={} # Use to pass arguments allowed by the s3 client: https://boto3.amazonaws.com/v1/documentation/api/latest/reference/core/session.html\n )\n# Add files, can call multiple times to add files from other directories\njob.add_files(path_to_concat)\n# Add a single file at a time\njob.add_file('some/file_key.json')\n# Only use small_parts_threads if you need to. See Advanced Usage section below.\njob.concat(small_parts_threads=4)\n```\n\n## Advanced Usage\n\nDepending on your use case, you may want to use `small_parts_threads`. \n\n - `small_parts_threads` is only used when the files you are trying to concat are less then 5MB. Due to the limitations of the s3 multipart_upload api (see *Limitations* below) any files less then 5MB need to be download locally, concated together, then re uploaded. By setting this thread count it will download the parts in parallel for faster creation of the concatination process. \n\nThe values set for these arguments depends on your use case and the system you are running this on.\n\n\n## Limitations\nThis uses the multipart upload of s3 and its limits are https://docs.aws.amazon.com/AmazonS3/latest/dev/qfacts.html", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/xtream1101/s3-concat", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "s3-concat", "package_url": "https://pypi.org/project/s3-concat/", "platform": "", "project_url": "https://pypi.org/project/s3-concat/", "project_urls": { "Homepage": "https://github.com/xtream1101/s3-concat" }, "release_url": "https://pypi.org/project/s3-concat/0.2.3/", "requires_dist": null, "requires_python": "", "summary": "Concat files in s3", "version": "0.2.3", "yanked": false, "yanked_reason": null }, "last_serial": 10428484, "releases": { "0.0.2": [ { "comment_text": "", "digests": { "md5": "3ab4b4dbe357675737eab10cb9348a67", "sha256": "b986d7a0ca20ac25fe30ee7e281d882bc24fa043c94d87014b23a8e06d312aeb" }, "downloads": -1, "filename": "s3-concat-0.0.2.tar.gz", "has_sig": false, "md5_digest": "3ab4b4dbe357675737eab10cb9348a67", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3567, "upload_time": "2019-03-01T18:33:36", "upload_time_iso_8601": "2019-03-01T18:33:36.813397Z", "url": "https://files.pythonhosted.org/packages/7a/81/aad8bfcd789dd98433eca0b424679a1f61b2640b1a59a5b66c6085ea1381/s3-concat-0.0.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "493c520f3e32df541541e6de78f4d5aa", "sha256": "397cdd4ddccd27f676900516202efadf35e8485352228e9784227ea74a4dcdc8" }, "downloads": -1, "filename": "s3-concat-0.0.3.tar.gz", "has_sig": false, "md5_digest": "493c520f3e32df541541e6de78f4d5aa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4061, "upload_time": "2019-03-01T19:08:04", "upload_time_iso_8601": "2019-03-01T19:08:04.602570Z", "url": "https://files.pythonhosted.org/packages/8c/85/71d5dbfd798839a8ca3a06401036a39b665bb0005e2f410872406633d850/s3-concat-0.0.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "e7f7c220d21117dc7c43406bd0713b9a", "sha256": "9d38a09e9ff84504004e472b24b8b5e90c580c4db6f6333075b7581926e4eb2c" }, "downloads": -1, "filename": "s3-concat-0.0.4.tar.gz", "has_sig": false, "md5_digest": "e7f7c220d21117dc7c43406bd0713b9a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4146, "upload_time": "2019-03-02T20:08:54", "upload_time_iso_8601": "2019-03-02T20:08:54.097796Z", "url": "https://files.pythonhosted.org/packages/6f/c6/d213e6ce134f8d5d562a96103cdf6a62cd1892fd514ed2ac4fb5d16002b9/s3-concat-0.0.4.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "01a77cc9ab71c4a58c7008f44f05ee3c", "sha256": "f4543e83f2c25e83e701870f55312d364e07825dcec1ab86d0479fd64c7206c6" }, "downloads": -1, "filename": "s3-concat-0.0.5.tar.gz", "has_sig": false, "md5_digest": "01a77cc9ab71c4a58c7008f44f05ee3c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4326, "upload_time": "2019-05-01T00:46:06", "upload_time_iso_8601": "2019-05-01T00:46:06.080458Z", "url": "https://files.pythonhosted.org/packages/7e/29/5ca59d597563cca3d40343379153cb1e6b14b24e7eaaa0535e39161f2210/s3-concat-0.0.5.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.6rc1": [ { "comment_text": "", "digests": { "md5": "de230e99ea41e85d04d7be6374b1abf7", "sha256": "b0e6f8f28f5f421b8410667336eace3f8a8d18f00d9d21bc63554e8d1a705e73" }, "downloads": -1, "filename": "s3-concat-0.0.6rc1.tar.gz", "has_sig": false, "md5_digest": "de230e99ea41e85d04d7be6374b1abf7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4310, "upload_time": "2019-05-01T19:30:04", "upload_time_iso_8601": "2019-05-01T19:30:04.786217Z", "url": "https://files.pythonhosted.org/packages/08/ab/9b02ba67f08b584fd713e421902e5a2403875df117cce3d4684e644268a2/s3-concat-0.0.6rc1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.6rc2": [ { "comment_text": "", "digests": { "md5": "71e3c9e43afa1b6fc6bde994743b3953", "sha256": "ef9c657b8b785bf75c747df4d2f96981ede683041e4f7c700a40b4727c88efc0" }, "downloads": -1, "filename": "s3-concat-0.0.6rc2.tar.gz", "has_sig": false, "md5_digest": "71e3c9e43afa1b6fc6bde994743b3953", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4389, "upload_time": "2019-05-07T21:44:42", "upload_time_iso_8601": "2019-05-07T21:44:42.160134Z", "url": "https://files.pythonhosted.org/packages/f4/8b/ea8cd1aa36e58e15d90365a83f087a933498665bd5e91f67dc9f194004ba/s3-concat-0.0.6rc2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.6rc3": [ { "comment_text": "", "digests": { "md5": "fae6391a405d071c584c6d5f3a12b313", "sha256": "42d64bb05c17985d43eec30943207b5f7810a2613fbfb00f3bc245eab72dcf00" }, "downloads": -1, "filename": "s3-concat-0.0.6rc3.tar.gz", "has_sig": false, "md5_digest": "fae6391a405d071c584c6d5f3a12b313", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4396, "upload_time": "2019-05-08T19:42:54", "upload_time_iso_8601": "2019-05-08T19:42:54.076404Z", "url": "https://files.pythonhosted.org/packages/51/6d/a7ad702410e8ce2c55a95b04fa6cd7c521f63263187f1eb11035e1025016/s3-concat-0.0.6rc3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.6rc4": [ { "comment_text": "", "digests": { "md5": "871ee5a3fe14c91ec7515e4b4542e837", "sha256": "1d7c8a1aa24f28d65a4c5308b887914ae7f08ad4073628401592a56f7984c557" }, "downloads": -1, "filename": "s3-concat-0.0.6rc4.tar.gz", "has_sig": false, "md5_digest": "871ee5a3fe14c91ec7515e4b4542e837", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4444, "upload_time": "2019-05-08T20:12:32", "upload_time_iso_8601": "2019-05-08T20:12:32.970491Z", "url": "https://files.pythonhosted.org/packages/79/49/09dd508a3c561166fb926b8695015be1324d675edb2a3b13f09292302064/s3-concat-0.0.6rc4.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.6rc5": [ { "comment_text": "", "digests": { "md5": "e599fc2c7931c3d7726e152670fcc519", "sha256": "267b98b735aec49070c598766ddf54bbdf76a3824ed816435526a3528dc5f3e1" }, "downloads": -1, "filename": "s3-concat-0.0.6rc5.tar.gz", "has_sig": false, "md5_digest": "e599fc2c7931c3d7726e152670fcc519", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4493, "upload_time": "2019-05-08T20:31:15", "upload_time_iso_8601": "2019-05-08T20:31:15.153356Z", "url": "https://files.pythonhosted.org/packages/2c/6f/97ed663de40085a5fefc06b3ef470e3499a4289d7c017fe736f772c26b21/s3-concat-0.0.6rc5.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "5c0e72d46bf10d8c3ad9546e40ca1a55", "sha256": "06c7efb9c6ba5b0fc5a0b66df36e0e49562117310eba8b37499d142f90829e7e" }, "downloads": -1, "filename": "s3-concat-0.0.7.tar.gz", "has_sig": false, "md5_digest": "5c0e72d46bf10d8c3ad9546e40ca1a55", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6130, "upload_time": "2020-01-20T05:07:57", "upload_time_iso_8601": "2020-01-20T05:07:57.830057Z", "url": "https://files.pythonhosted.org/packages/21/20/b0392e5720af3688c11b32292bddd336a379d0ec85afd1dc915c9d0a3dad/s3-concat-0.0.7.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "4a8981791f0ec37b4888f0d8c102e5e7", "sha256": "11b9f608995ff716f6c3fd064f179228cdfaf85f6e5277f68371f612ce92b45a" }, "downloads": -1, "filename": "s3-concat-0.1.0.tar.gz", "has_sig": false, "md5_digest": "4a8981791f0ec37b4888f0d8c102e5e7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4379, "upload_time": "2019-05-09T03:32:25", "upload_time_iso_8601": "2019-05-09T03:32:25.530074Z", "url": "https://files.pythonhosted.org/packages/83/86/e7c92deccf1503093563b76ddb02f896fb147b9f165a98176c30d214c28f/s3-concat-0.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "d3d0152d0f609da7d1ad0983aaa1afd0", "sha256": "885c161bdc9aba783875ace37d8e00448769076bd8c793fa9072582dabda330c" }, "downloads": -1, "filename": "s3-concat-0.1.1.tar.gz", "has_sig": false, "md5_digest": "d3d0152d0f609da7d1ad0983aaa1afd0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4413, "upload_time": "2019-05-16T00:46:40", "upload_time_iso_8601": "2019-05-16T00:46:40.857150Z", "url": "https://files.pythonhosted.org/packages/a4/63/cae22a64f8656f4aed25ae8325db372dcf8094f5c29ab1b97b72b9a9c3ff/s3-concat-0.1.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "cc5681721f611c849db543b2b39dd765", "sha256": "3e153b1d23a69e3ad2ed6b3d8e01b8e99ccaee472dc4a82c46a99e514698618d" }, "downloads": -1, "filename": "s3-concat-0.1.2.tar.gz", "has_sig": false, "md5_digest": "cc5681721f611c849db543b2b39dd765", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4431, "upload_time": "2019-05-23T01:23:31", "upload_time_iso_8601": "2019-05-23T01:23:31.480527Z", "url": "https://files.pythonhosted.org/packages/b5/ca/eaa6d56c2875caa9819b75b477dade335d61b690fa0e066102abd5b62868/s3-concat-0.1.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "5a7d2b0f8a551a47d22f4eb519d9b150", "sha256": "cd544c7c7d2f16b5884aaa55bc0c4a1526b2a48180b53547aacb718cebc13fa7" }, "downloads": -1, "filename": "s3-concat-0.1.3.tar.gz", "has_sig": false, "md5_digest": "5a7d2b0f8a551a47d22f4eb519d9b150", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4531, "upload_time": "2019-07-03T14:59:22", "upload_time_iso_8601": "2019-07-03T14:59:22.783923Z", "url": "https://files.pythonhosted.org/packages/fd/10/3205b61debf4603a838e008db38cebe5f8d898a88970549b2f68f1b13f7a/s3-concat-0.1.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "1a07b21422bdcbd2ebaae8adb381d375", "sha256": "a0b88dc90181cf6ec9e1372b85d712ac8992be6b6d55d95ec1a33c5488fa4148" }, "downloads": -1, "filename": "s3-concat-0.1.4.tar.gz", "has_sig": false, "md5_digest": "1a07b21422bdcbd2ebaae8adb381d375", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4478, "upload_time": "2019-10-24T14:39:19", "upload_time_iso_8601": "2019-10-24T14:39:19.022277Z", "url": "https://files.pythonhosted.org/packages/0f/06/1f723e040ec3b1032b06e12fe5eb7d85fbf08d978b3536baf75e81367085/s3-concat-0.1.4.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "d0b9e651747c02cf69cf7bc847ba9484", "sha256": "a8b158ac8cc494492f776d89b6c23269d84a36ea069e2adad260608f713f7bda" }, "downloads": -1, "filename": "s3-concat-0.1.5.tar.gz", "has_sig": false, "md5_digest": "d0b9e651747c02cf69cf7bc847ba9484", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4532, "upload_time": "2020-01-16T21:55:12", "upload_time_iso_8601": "2020-01-16T21:55:12.701599Z", "url": "https://files.pythonhosted.org/packages/a1/80/e17055d7ff46706f3cc7cc40fcf083c5825344009da4a839698142408df7/s3-concat-0.1.5.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "74b9f7851535cfef1d84da12d5ebc04f", "sha256": "4b75b19d15521937e7141954435ef47fb7e581af79e1a28e4129bc289c6e53b9" }, "downloads": -1, "filename": "s3-concat-0.1.6.tar.gz", "has_sig": false, "md5_digest": "74b9f7851535cfef1d84da12d5ebc04f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4558, "upload_time": "2020-01-16T22:04:14", "upload_time_iso_8601": "2020-01-16T22:04:14.615243Z", "url": "https://files.pythonhosted.org/packages/9a/9c/6e11d664192a23999e284b7547c918d1377e657cf3764d6b8144e03c46d9/s3-concat-0.1.6.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "a5e3ac0758a96462f24f174d10394a8f", "sha256": "cb2a9616cd590cdb438af167903f64b5d4f69f16c84972f6a68db7cb3fd18243" }, "downloads": -1, "filename": "s3-concat-0.1.7.tar.gz", "has_sig": false, "md5_digest": "a5e3ac0758a96462f24f174d10394a8f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6601, "upload_time": "2020-01-20T05:16:31", "upload_time_iso_8601": "2020-01-20T05:16:31.164946Z", "url": "https://files.pythonhosted.org/packages/3d/15/eb34cc96e774dfdb76d931e1d2a59b3972eb758bfa6c3bcb324d03b7efc1/s3-concat-0.1.7.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "81922f5f9c3fe4fbc46c3c2dfb66bd9a", "sha256": "06193d270a1de0eef921d45bd33b04cea68925e60ccdf39152a4d1ad5e5d87fd" }, "downloads": -1, "filename": "s3-concat-0.1.8.tar.gz", "has_sig": false, "md5_digest": "81922f5f9c3fe4fbc46c3c2dfb66bd9a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6621, "upload_time": "2020-05-10T13:04:49", "upload_time_iso_8601": "2020-05-10T13:04:49.230814Z", "url": "https://files.pythonhosted.org/packages/2c/f5/d92e28723fc00fe7b9ef6c804aad6bb264d71a9b894bb836d4b68a2cd809/s3-concat-0.1.8.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.9": [ { "comment_text": "", "digests": { "md5": "e2a4f41345b397b8f72a599b7478a2d4", "sha256": "1812eccf328aeb7b3872d508e71c076218be98f315e91dc9f3a83053926c7a7b" }, "downloads": -1, "filename": "s3-concat-0.1.9.tar.gz", "has_sig": false, "md5_digest": "e2a4f41345b397b8f72a599b7478a2d4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6709, "upload_time": "2020-05-14T14:51:19", "upload_time_iso_8601": "2020-05-14T14:51:19.666109Z", "url": "https://files.pythonhosted.org/packages/0f/8e/5498cd6bab3e198f7dd2a8d97dc5b7a10c114b8a179a2a83ec41ff0a1d84/s3-concat-0.1.9.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "3af52e3a3b91ff6c3989e2a440050d2d", "sha256": "d4dd425f81ad3bfa6adfe36d7297f8efaca67ced2b7d3ba774b9eaec8b615526" }, "downloads": -1, "filename": "s3-concat-0.2.0.tar.gz", "has_sig": false, "md5_digest": "3af52e3a3b91ff6c3989e2a440050d2d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6776, "upload_time": "2020-08-27T14:16:07", "upload_time_iso_8601": "2020-08-27T14:16:07.507094Z", "url": "https://files.pythonhosted.org/packages/25/09/403f626a21e7cf2f96a1ed401f9177fdd307bed59924033dee53a2a41b7f/s3-concat-0.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "647f4f6d4d30eeac0c1394d2baf098cb", "sha256": "a1bb1128e1915d742f8dea4ac5166e756970e70335fa91c0f4ec3557ccb8cfda" }, "downloads": -1, "filename": "s3-concat-0.2.1.tar.gz", "has_sig": false, "md5_digest": "647f4f6d4d30eeac0c1394d2baf098cb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6761, "upload_time": "2020-10-03T01:17:28", "upload_time_iso_8601": "2020-10-03T01:17:28.635444Z", "url": "https://files.pythonhosted.org/packages/22/70/786e38580117d8de6cc299f589ee0d37238636d3e7168b3b4b1b9dbd02e1/s3-concat-0.2.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "5217c683eabceca023cbcffb1c90b051", "sha256": "ce5d33924825a647e058553e02895f79d8c0acc62e45b047f2a53a49df982d96" }, "downloads": -1, "filename": "s3-concat-0.2.2.tar.gz", "has_sig": false, "md5_digest": "5217c683eabceca023cbcffb1c90b051", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6843, "upload_time": "2021-02-03T13:22:43", "upload_time_iso_8601": "2021-02-03T13:22:43.996821Z", "url": "https://files.pythonhosted.org/packages/d3/c5/33494d9afb1967f5714bf2f672a8aa1e5f20c3579a3c43f42f45a4013953/s3-concat-0.2.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "c2f9978103d0ea344f6c5246e498f5f3", "sha256": "3464265a40f4739c1495f900d7075901f371b8ad3f949e21a32e2c0a22eca86b" }, "downloads": -1, "filename": "s3-concat-0.2.3.tar.gz", "has_sig": false, "md5_digest": "c2f9978103d0ea344f6c5246e498f5f3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7541, "upload_time": "2021-05-21T13:44:14", "upload_time_iso_8601": "2021-05-21T13:44:14.322475Z", "url": "https://files.pythonhosted.org/packages/e2/83/ee700da614ed6746d985b76245d604950cad63558f76cc220fbe8b29d02f/s3-concat-0.2.3.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c2f9978103d0ea344f6c5246e498f5f3", "sha256": "3464265a40f4739c1495f900d7075901f371b8ad3f949e21a32e2c0a22eca86b" }, "downloads": -1, "filename": "s3-concat-0.2.3.tar.gz", "has_sig": false, "md5_digest": "c2f9978103d0ea344f6c5246e498f5f3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7541, "upload_time": "2021-05-21T13:44:14", "upload_time_iso_8601": "2021-05-21T13:44:14.322475Z", "url": "https://files.pythonhosted.org/packages/e2/83/ee700da614ed6746d985b76245d604950cad63558f76cc220fbe8b29d02f/s3-concat-0.2.3.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }