{ "info": { "author": "Rubem de Lima Savordelli", "author_email": "rsavordelli@gmail.com", "bugtrack_url": null, "classifiers": [], "description": ".. image:: https://img.shields.io/badge/License-MIT-yellow.svg\n :target: https://raw.githubusercontent.com/rsavordelli/s3bro/master/LICENSE\n\n=============================\n# s3bro! A handy s3 cli tool\n=============================\n============\nOverview\n============\nIt's your s3 friend (bro). You\u2019ll often find yourself having to run complex CLI/AWS commands in order to execute tasks against S3. Let's say you need to restore all your keys from S3 Glacier storage class, if you\u2019ve attempted this task, you\u2019ve probably come to the realization, that the AWS CLI does not allow for an easy manner to execute this in \u201cbatch\u201d.\n\nSubsequently, you would need to make use of a combination of AWS CLI commands and pipe it to additional commands in order to obtain your desired result. In addition to this complexity, it would restore key by key, very slowly.\n\nS3bro, however, offers you a solution to the above problem and others common situations where you have to run complex s3 commands, by utilizing multiprocessing/threading. This means that you can expedite tasks a lot faster than using the normal method. Oh, did I mention\u2026 in a much more elegant way. This is a python cli that will abstract a big portion of the work for you.\n\nWhy would you run the two following commands to wipe your bucket:\n\n>>>\naws s3api list-object-versions --bucket rsavordelli --output json --query\n 'Versions\\[\\].\\[Key, VersionId\\]' | jq -r '.\\[\\] | \"--key '\\\\''\" + .\\[0\\] + \"'\\\\''\n --version-id \" + .\\[1\\]' | xargs -L1 aws s3api delete-object --bucket rsavordelli\naws s3api list-object-versions --bucket rsavordelli --output json --query\n 'DeleteMarkers\\[\\].\\[Key, VersionId\\]' | jq -r '.\\[\\] | \"--key '\\\\''\" + .\\[0\\] + \"'\\\\''\n --version-id \" + .\\[1\\]' | xargs -L1 aws s3api delete-object --bucket rsavordelli\n\nif you can run this?\n\n>>>\ns3bro purge --bucket rsavordelli\n\n\nwhat if you need to restore all your keys from glacier storage class? Or just some of them?\n\n>>>\n\u279c ~ s3bro restore --bucket yourBucket --prefix glacier --days 10 --type Expedited --exclude .html --workers 10\nInitiating Expedited restore for yourBucket/glacier...\nRestoring keys for 10 days\nVersions: False\n===========================\nRestoration completed: glacier/River Flows In You - A Love Note (CM Remix).mp3 until \"Sat, 03 Mar 2018 00:00:00 GMT\"\nSubmitting restoration request: glacier/asd.js\nRestoration completed: glacier/Yiruma - River Flows In You (English Version).mp3 until \"Sat, 03 Mar 2018 00:00:00 GMT\"\nRestoration completed: glacier/River Flows In You- Lindsey Stirling.mp3 until \"Sat, 03 Mar 2018 00:00:00 GMT\"\nRestoration completed: glacier/River Flows In You - A Love Note (Ryan Wong Remix).mp3 until \"Sat, 03 Mar 2018 00:00:00 GMT\"\nRestoration completed: glacier/ until \"Sat, 03 Mar 2018 00:00:00 GMT\"\nRestoration completed: glacier/Endless Love {Piano Version} | Beautiful Piano.mp3 until \"Sat, 03 Mar 2018 00:00:00 GMT\"\nTotal keys proccessed: 7 in 5.44s\n\n============\nInstallation\n============\n ``pip install s3bro -U``\n\n***********\nFrom source\n***********\n ``git clone https://github.com/rsavordelli/s3bro ; cd s3bro``\n\n ``pip install -e .``\n\n\nNote: For python3 you may have some issues due the unicode handling that has changed in Python3. The solution to these problems is different depending on which locale your computer is running in.\nGenerally \"export LANG=en_US.utf-8\" solves (put your LANG). More infos: http://click.pocoo.org/5/python3/\n\n******************\nAvailable Commands\n******************\n- restore_\n- purge_\n- scan-bucket_\n- scan-objects_\n- scan-objects-v2_\n- tail_\n- find-unencrypted_\n\n\n============\nExamples\n============\n\n.. code::\n\n # s3bro restore --help\n # s3bro restore --bucket bucketName --prefix myglacierPrefix --days 20 --type Bulk\n # s3bro restore --bucket bucketName --prefix myglacierPrefix --days 20 --type Standard --include .css --versions\n # s3bro restore --bucket bucketName --prefix myglacierPrefix --days 20 --type Expedited --permanent-restore --storage-class ONEZONE_IA\n # s3bro restore -b bucketName -p 123 --days 2 --type Expedited --permanent-restore --restore-to-bucket DestbucketName --storage-class ONEZONE_IA\n # s3bro purge --bucket bucketName\n # s3bro scan-objects --bucket bucketName\n # s3bro scan-objects-v2 --bucket bucketName --make-private\n # s3bro scan-bucket --all\n # s3bro tail --bucket bucketName --timeout 1\n\n============\nCommands\n============\n***************\nrestore\n***************\n Restore S3 keys in Glacier Storage class\n\nRestore Options\n------------------\n>>>\nUsage: s3bro restore [OPTIONS] [RESTORE]...\n restore S3 objects from Glacier Storage Class\nOptions:\n -b, --bucket TEXT bucket name [required]\n -p, --prefix TEXT prefix\n -d, --days INTEGER Days to keep the restore [required]\n -t, --type [Standard|Expedited|Bulk]\n restore type (Tier) [required]\n -v, --versions / --no-versions [--no-versions is DEFAULT] - this option\n will make the restore to include all\n versions excluding delete markers\n -pr, --permanent-restore Move keys ALREADY restored from Glacier back\n to a storage class of your choice\n -rtb, --restore-to-bucket TEXT Copy keys ALREADY restored to a different\n bucket. It can only be used in combination\n with --permanent-restore\n --storage-class [STANDARD|STANDARD_IA|ONEZONE_IA]\n The StorageClass type to use with\n --permanent-restore [default is STANDARD]\n -urd, --update-restore-date / --do-not-update-restore-date\n If passed, it will change the restore date\n for already restored key\n -in, --include TEXT Only restore keys that matches with a given\n string, you can add multiples times by\n passing --include multiple times\n -ex, --exclude TEXT Do not restore if key name matches with a\n given pattern,you can add multiple patterns\n by inputting\n --workers INTEGER How many helpers to include in task, default\n is 10\n --log-level [INFO|ERROR|DEBUG|WARNING]\n logging type\n --help Show this message and exit.\n\nRestore Details\n^^^^^^^^^^^^^^^^^^\n\nthe option --log-level can be useful to debug errors/behaviors.\n\n>>>\nDEBUG - similar to boto3 debug level with additional information\nWARNING - will print some threading information and Keys excluded during the iteration (exclude, include, storage-class, delete-marker, etc)\n\n* the option --workers allows you to specify how many workers will consume the list. Calculate max 5 workers per core\n* the option --update-restore-date can be used to \"extend\" a key that is already restored. It will send a new \"expiry\" date to the object\n* the option --permanent-restore will copy the data from glacier back to a storage class of your Choice (combine this with --storage-class)\n\n***************\npurge\n***************\n Delete all keys in the bucket - as simple as that. It will delete versions, delete markers. Everything\n\nPurge Options\n------------------\n\n>>>\nUsage: s3bro purge [OPTIONS] [PURGE]...\n delete all the bucket content\nOptions:\n -b, --bucket TEXT Bucket name [required]\n -p, --prefix TEXT prefix name - optional\n --yes first confirmation\n --log-level [INFO|ERROR|DEBUG|WARNING]\n logging type\n --help Show this message and exit.\n\n\nPurge Details\n^^^^^^^^^^^^^^^^^^\n\n* The script has two confirmations. The first can be by-passed with --yes. The second one ask you to confirm the bucket name.\n* The second confirmation can be avoided if you create a Tag in the Bucket with Key: s3bro_delete and Value: yes . That will by pass the bucket name confirmation.\n\n***************\nscan-bucket\n***************\n scan bucket ACLs\n\nScan-Bucket Options\n---------------------\n>>>\nUsage: s3bro scan-bucket [OPTIONS] [SCAN_BUCKET]...\n scan bucket ACLs\nOptions:\n -b, --bucket TEXT Bucket name\n -A, --all Scan permissions for all your buckets (don't\n combine -b with -A)\n --log-level [INFO|ERROR|DEBUG|WARNING]\n logging type\n --help Show this message and exit.\n\n***************\nscan-objects\n***************\n scan object ACLs\n\nScan-Object Options\n---------------------\n\n>>>\nUsage: s3bro scan-objects [OPTIONS] [SCAN_OBJECTS]...\n scan object ACLs\nOptions:\n -b, --bucket TEXT Bucket name [required]\n -p, --prefix TEXT prefix name - optional\n --workers INTEGER How many helpers to include in task, default\n is 10\n --log-level [INFO|ERROR|DEBUG|WARNING]\n logging type\n --help Show this message and exit.\n\nScan-Object Details\n^^^^^^^^^^^^^^^^^^^^\n* scan-objects only scan current versions of your objects\n\n***************\nscan-objects-v2\n***************\n scan-objects-v2 is a simplified version of scan-objects and introduce new features like --make-private (make public keys, private).\n It's focused on looking only for Public Keys (Everyone's access), it will not print permission to another aws accounts.\n\nScan-Object-V2 Options\n-----------------------\n\n>>>\nUsage: s3bro scan-objects-v2 [OPTIONS] [SCAN_OBJECTS_V2]...\n scan object ACLs (V2) - The V2 only look for Everyone permissios, while\n the scan-objects will look for all ACLs - The V2 is capable to reset ACLs\n back to private (Everyone)\nOptions:\n -b, --bucket TEXT Bucket name [required]\n -p, --prefix TEXT prefix name - optional\n -mp, --make-private Make all keys with public ACL private\n -v, --versions / --no-versions [--no-versions is DEFAULT] - this option\n will make the restore to include all\n versions excluding delete markers\n --workers INTEGER How many helpers to include in task, default\n is 10\n --log-level [INFO|ERROR|DEBUG|WARNING]\n logging type\n --help Show this message and exit.\n\nScan-Object-V2 Details\n^^^^^^^^^^^^^^^^^^^^^^^\n* scan-objects support versions\n* --make-private put a private acl in the object \n\n\n***************\ntail\n***************\n s3 logs in \"real-time\" through S3 Events (for puts and deletes only)\n\nOptions\n------------------\n>>>\nUsage: s3bro tail [OPTIONS] [TAIL]...\n tail is an S3 real-time logging tool. It makes use of S3 events (for puts and deletes only)\nOptions:\n -b, --bucket TEXT Bucket name [required]\n -t, --timeout INTEGER How much time (in minutes) to run, it will destroy\n the resources created after this time [required]\n --help Show this message and exit.\n\nDetails\n^^^^^^^^^^^^^^^^^^\nBasically what it does is:\n\n1. Create an SQS\n2. Create an S3 Event notification\n3. Connect to the queue and keep retrieving the messages until the timeout time is reached.\n4. Delete the resources created\n\n>>> --timeout is in minutes\n>>> it only works for PUTs and Deletes (s3 events does not support GET requests)\n\n*****************\nfind-unencrypted\n*****************\n find unencrypted keys in a bucket\n\nFind-Unencrypted Options\n-------------------------\n\n>>>\nUsage: s3bro find-unencrypted [OPTIONS] [FIND_UNENCRYPTED]...\n find unencrypted keys in a bucket (ServerSideEncryption)\nOptions:\n -b, --bucket TEXT Bucket name [required]\n -p, --prefix TEXT prefix name - optional\n -v, --versions / --no-versions [--no-versions is DEFAULT] - this option\n will make the restore to include all\n versions excluding delete markers\n --workers INTEGER How many helpers to include in task, default\n is 10\n --log-level [INFO|ERROR|DEBUG|WARNING]\n logging type\n --help Show this message and exit.\n\nFind-Unencrypted Details\n^^^^^^^^^^^^^^^^^^^^^^^^^\n\n* it only print details for unencrypted keys. If you to check all the keys encryption status, run --log-level WARNING", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/rsavordelli/s3bro", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "s3bro", "package_url": "https://pypi.org/project/s3bro/", "platform": "", "project_url": "https://pypi.org/project/s3bro/", "project_urls": { "Homepage": "https://github.com/rsavordelli/s3bro" }, "release_url": "https://pypi.org/project/s3bro/2.8/", "requires_dist": null, "requires_python": "", "summary": "", "version": "2.8" }, "last_serial": 4135539, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "309c5164d3246812042d180fddcb009e", "sha256": "5fa1df8b1d2dfd4d4332e63ac7273ea4e933bf5ef11248710c1a924cc82e59fd" }, "downloads": -1, "filename": "s3bro-0.1.tar.gz", "has_sig": false, "md5_digest": "309c5164d3246812042d180fddcb009e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6, <3", "size": 9494, "upload_time": "2018-03-12T16:44:57", "url": "https://files.pythonhosted.org/packages/b5/2f/79148c0cb642fde83f75c105847e24348451c17deb977ca94a8685a73fcc/s3bro-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "f71fde3c2d897d022dddf5577646629f", "sha256": "56b603fceedc85d30aaa96c903fc605de9d189b86ce69cd33dbf9d506027f7cc" }, "downloads": -1, "filename": "s3bro-0.2.tar.gz", "has_sig": false, "md5_digest": "f71fde3c2d897d022dddf5577646629f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6, <3", "size": 9557, "upload_time": "2018-03-13T07:53:50", "url": "https://files.pythonhosted.org/packages/b3/db/25f5110ba973f436e76ea70751803440feda2aee487b6ca3e0075272ca69/s3bro-0.2.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "434d93162d7e59753d206403cef70d98", "sha256": "85d36f6080cbbdb108822936266695a6d05935a8d7b77898977ccfbfe2a3df1b" }, "downloads": -1, "filename": "s3bro-0.2.1.tar.gz", "has_sig": false, "md5_digest": "434d93162d7e59753d206403cef70d98", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6, <3", "size": 9564, "upload_time": "2018-03-13T07:58:14", "url": "https://files.pythonhosted.org/packages/73/92/a9a5f1533370c491f5b0513b9476df762fe02ac3eb573ad71233cecef9ed/s3bro-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "6a7333fbe93a04a6792ce04ba86916e2", "sha256": "96e1c63a8245075559e8b7a16511fb0b5d5e8a6cd50883acb68463c66518d3b7" }, "downloads": -1, "filename": "s3bro-0.2.2.tar.gz", "has_sig": false, "md5_digest": "6a7333fbe93a04a6792ce04ba86916e2", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6, <3", "size": 9855, "upload_time": "2018-03-14T08:41:26", "url": "https://files.pythonhosted.org/packages/ae/ff/f23389161c82b8d6b794a0564d2b03958e027cdf3416a11f1a07596963d2/s3bro-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "98de4b216916bada2fd367e78940ab81", "sha256": "3dd870acc4a524357e10f4af707838771279f4a79e17c7d7da34c0b01530305a" }, "downloads": -1, "filename": "s3bro-0.2.3.tar.gz", "has_sig": false, "md5_digest": "98de4b216916bada2fd367e78940ab81", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6, <3", "size": 9611, "upload_time": "2018-03-15T11:57:51", "url": "https://files.pythonhosted.org/packages/25/c8/d46d9d97d6a5822ff4d26224e814bf18b32fea4ba1f7d7b759755f0bda82/s3bro-0.2.3.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "71f1d94dab5c6bfc27af59b141dc895d", "sha256": "080a5c3cfcdf090f765a472859f56f960ebb2f4531631cc51c54bb720c5b5c7a" }, "downloads": -1, "filename": "s3bro-0.2.4.tar.gz", "has_sig": false, "md5_digest": "71f1d94dab5c6bfc27af59b141dc895d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6, <3", "size": 9622, "upload_time": "2018-03-15T12:06:25", "url": "https://files.pythonhosted.org/packages/40/31/794689290252a83376c1e9ea37ff9d9c1d91aa444d9986efe2bd028d42c4/s3bro-0.2.4.tar.gz" } ], "0.2.5": [ { "comment_text": "", "digests": { "md5": "68e3e1f1f0d2cba8f5f21e759c5cc5e5", "sha256": "0ccc6498c561195b3c13a4e8d6dba8197b8dba4a8706b130858614d7c6439c6c" }, "downloads": -1, "filename": "s3bro-0.2.5.tar.gz", "has_sig": false, "md5_digest": "68e3e1f1f0d2cba8f5f21e759c5cc5e5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6, <3", "size": 9728, "upload_time": "2018-03-15T14:10:44", "url": "https://files.pythonhosted.org/packages/59/e2/3e53a596bb5d02ba6443884a16302d62cb19ec77d370a039f7acbf5197c6/s3bro-0.2.5.tar.gz" } ], "1.0": [ { "comment_text": "", "digests": { "md5": "be8baf9fcf7bbf17b1f472b0f0455fb7", "sha256": "eebcfb68ee4a08e53dbb50c3753306574747b47d1e94f390104163dc22d4bb3a" }, "downloads": -1, "filename": "s3bro-1.0.tar.gz", "has_sig": false, "md5_digest": "be8baf9fcf7bbf17b1f472b0f0455fb7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6, <3", "size": 9974, "upload_time": "2018-03-17T13:21:25", "url": "https://files.pythonhosted.org/packages/db/22/c682a608bac0e72178d8a9a1604a0e31845697d6e3cd72f5366af991baf1/s3bro-1.0.tar.gz" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "fe4d42cae1ba75af7ea743fdb0620109", "sha256": "27c0eb0c35578635a5dc1e476c174a836ca36c5aef0d1e270dde22f45155b938" }, "downloads": -1, "filename": "s3bro-1.1.tar.gz", "has_sig": false, "md5_digest": "fe4d42cae1ba75af7ea743fdb0620109", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6, <3", "size": 9977, "upload_time": "2018-03-17T13:24:49", "url": "https://files.pythonhosted.org/packages/d3/74/d512b6ede4e47d3f3ad57693cf470d7f5b69250818842de83ed77cd9f0c3/s3bro-1.1.tar.gz" } ], "1.2": [ { "comment_text": "", "digests": { "md5": "43c814b4528bcdc677a0d167d4ae2db0", "sha256": "b9e4ff0d4bcc166e5571c4e7a6e8cfb1f2c81f0ed8d16c8ec2789aa6a673fbbd" }, "downloads": -1, "filename": "s3bro-1.2.tar.gz", "has_sig": false, "md5_digest": "43c814b4528bcdc677a0d167d4ae2db0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6, <3", "size": 9926, "upload_time": "2018-03-17T13:54:31", "url": "https://files.pythonhosted.org/packages/c2/c8/d09586c85b1c8b539db68f745ca1713b7b4ae1a1850ab61e6cf640cd3327/s3bro-1.2.tar.gz" } ], "1.3": [ { "comment_text": "", "digests": { "md5": "58e5d0226b6e6bf0fe20b99fdea4c92c", "sha256": "0e5472f473c27be90f36db1648284133353ca81836317200199f1c6d87b998eb" }, "downloads": -1, "filename": "s3bro-1.3.tar.gz", "has_sig": false, "md5_digest": "58e5d0226b6e6bf0fe20b99fdea4c92c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6, <3", "size": 10278, "upload_time": "2018-03-17T16:03:10", "url": "https://files.pythonhosted.org/packages/16/c1/16d7aaa74e154d06fac3aa9e2f5fbedeb8a30a125ec4d772dc3799b66658/s3bro-1.3.tar.gz" } ], "1.4": [ { "comment_text": "", "digests": { "md5": "9f76919b1de5779c696b17559bf7d38d", "sha256": "3cdf4f9134e96860d5a3a2cb4a3f6ddb21840edfe290da13bdad317c86ca62c1" }, "downloads": -1, "filename": "s3bro-1.4.tar.gz", "has_sig": false, "md5_digest": "9f76919b1de5779c696b17559bf7d38d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6, <3", "size": 10585, "upload_time": "2018-03-28T05:12:51", "url": "https://files.pythonhosted.org/packages/7c/90/07b095a07a0586871dd7c50366014a1da7b8dcd1057b0cb831bd86e7a638/s3bro-1.4.tar.gz" } ], "1.5": [ { "comment_text": "", "digests": { "md5": "2d8b1bb0212a93cd124d34a702546066", "sha256": "6808d8bb05f3b12aa1c5db35de3f1a700514562d39f7ca1547a579f16db9bace" }, "downloads": -1, "filename": "s3bro-1.5.tar.gz", "has_sig": false, "md5_digest": "2d8b1bb0212a93cd124d34a702546066", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6, <3", "size": 12488, "upload_time": "2018-03-30T14:11:09", "url": "https://files.pythonhosted.org/packages/1b/0b/1a0ebcc82dd7ca331b9425215d7266692a1bfbadb8331fac892ff5b67c23/s3bro-1.5.tar.gz" } ], "1.6": [ { "comment_text": "", "digests": { "md5": "7fd9441a11d3bcae691838d6399bf4b3", "sha256": "7756b6c5e0b41359d628f5af86374d2c7dba12f09a6bcd9d5a9d812b4046671a" }, "downloads": -1, "filename": "s3bro-1.6.tar.gz", "has_sig": false, "md5_digest": "7fd9441a11d3bcae691838d6399bf4b3", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6, <3", "size": 13516, "upload_time": "2018-03-30T16:41:16", "url": "https://files.pythonhosted.org/packages/b4/87/bcd8c32ade8161857d51bb8d286f13fa67caccbe6ac8d4b30d4f03382611/s3bro-1.6.tar.gz" } ], "1.7": [ { "comment_text": "", "digests": { "md5": "89cb9914f172d05215a53f03a33fe9bb", "sha256": "ca58c0364638f44bb7c0515dcda2e484bf3f3086a116b0eafb3fd965d40acf9e" }, "downloads": -1, "filename": "s3bro-1.7.tar.gz", "has_sig": false, "md5_digest": "89cb9914f172d05215a53f03a33fe9bb", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6, <3", "size": 13508, "upload_time": "2018-03-30T16:44:22", "url": "https://files.pythonhosted.org/packages/52/e2/57b34a2a3cb7ab1b58043bdd8cdfc9d2f7734f685f1e4b628d1af183b5d4/s3bro-1.7.tar.gz" } ], "1.8": [ { "comment_text": "", "digests": { "md5": "7700fafc026470dbedc207d0e492446f", "sha256": "ea7505a08be490e53714a34d9e713732d2f578d85466652e18c91719d4ec0ff5" }, "downloads": -1, "filename": "s3bro-1.8.tar.gz", "has_sig": false, "md5_digest": "7700fafc026470dbedc207d0e492446f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6, <3", "size": 13585, "upload_time": "2018-03-31T11:09:43", "url": "https://files.pythonhosted.org/packages/c5/af/c7655b03859f94391826b07b5a76312850d991c3f47de5fe03e2bf11df44/s3bro-1.8.tar.gz" } ], "2.0": [ { "comment_text": "", "digests": { "md5": "df1cd0f8c7103803ea30160ddfbaa48c", "sha256": "1abc15018b819d72e37934bae37df67a95f6263203da98fd4520e414d6ebce74" }, "downloads": -1, "filename": "s3bro-2.0.tar.gz", "has_sig": false, "md5_digest": "df1cd0f8c7103803ea30160ddfbaa48c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13944, "upload_time": "2018-04-05T14:23:20", "url": "https://files.pythonhosted.org/packages/f2/87/cf18d005c7b7c25ad48e6e172bcdb752f56a0a80f926eb7295c44c1cc586/s3bro-2.0.tar.gz" } ], "2.1": [ { "comment_text": "", "digests": { "md5": "61f1dae4fad957beace0fdabffdbf9f0", "sha256": "7c71509d55db21014ba624f5c6e2ad2e8470ac6bc3ac72c740aa79b808654dea" }, "downloads": -1, "filename": "s3bro-2.1.tar.gz", "has_sig": false, "md5_digest": "61f1dae4fad957beace0fdabffdbf9f0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15121, "upload_time": "2018-04-13T14:18:39", "url": "https://files.pythonhosted.org/packages/e6/b3/cc21ffdcdc4e509ebe4f8e0a3e9da22f62ab8274bd88d84b0e1f418adf32/s3bro-2.1.tar.gz" } ], "2.2": [ { "comment_text": "", "digests": { "md5": "72a9b313ca9b998909cca6c5b55ff4e2", "sha256": "c9387d3711b264b173a783d8306cdcbee0d2850a652507d540dcfd63a59a42c3" }, "downloads": -1, "filename": "s3bro-2.2.tar.gz", "has_sig": false, "md5_digest": "72a9b313ca9b998909cca6c5b55ff4e2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15122, "upload_time": "2018-04-18T17:24:16", "url": "https://files.pythonhosted.org/packages/be/0a/87d98c2cbf47489061a4b251a6bf1c1fb6946968da4e8dec91b34e67db6b/s3bro-2.2.tar.gz" } ], "2.3": [ { "comment_text": "", "digests": { "md5": "831ada6f7c8842e1cdf8540b8c5fe654", "sha256": "8cd28e513256ed6fc0705a4da5374b4eee788339bf6a6086ca634df94369e866" }, "downloads": -1, "filename": "s3bro-2.3.tar.gz", "has_sig": false, "md5_digest": "831ada6f7c8842e1cdf8540b8c5fe654", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15069, "upload_time": "2018-04-22T12:07:02", "url": "https://files.pythonhosted.org/packages/0a/9a/33fa93ca1f1f080ce535d49986bc889d0a331297344224c44942610fd62e/s3bro-2.3.tar.gz" } ], "2.4": [ { "comment_text": "", "digests": { "md5": "7654e06663ebe5f0c526fea1a8db45f3", "sha256": "b1c905ed7b443ef6f288616520600c637e8773ce5f45a0f58a4b440a9a38dca5" }, "downloads": -1, "filename": "s3bro-2.4.tar.gz", "has_sig": false, "md5_digest": "7654e06663ebe5f0c526fea1a8db45f3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14386, "upload_time": "2018-05-25T13:59:19", "url": "https://files.pythonhosted.org/packages/5b/78/99e4b39bf23d537efc3fb29fe4b951def40f5df1fa89173e9f9adae1f077/s3bro-2.4.tar.gz" } ], "2.5": [ { "comment_text": "", "digests": { "md5": "32df89acd901ed9d86cbdf454949674e", "sha256": "6cf8f4ee30bedb9802c534733aa30448c25f38a53a4ce536fdfba1658633a581" }, "downloads": -1, "filename": "s3bro-2.5.tar.gz", "has_sig": false, "md5_digest": "32df89acd901ed9d86cbdf454949674e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14546, "upload_time": "2018-05-26T05:26:48", "url": "https://files.pythonhosted.org/packages/4f/39/30e069d907f3058855ae8e9305b45bc9749b6154adfe0dcd097a0c4a4a4f/s3bro-2.5.tar.gz" } ], "2.6": [ { "comment_text": "", "digests": { "md5": "523d218e2677230322b5be75da5e2812", "sha256": "7643b41b38a4354b8204b0fc0929c5778b429146e42f54527302c3abf84bec59" }, "downloads": -1, "filename": "s3bro-2.6.tar.gz", "has_sig": false, "md5_digest": "523d218e2677230322b5be75da5e2812", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16535, "upload_time": "2018-06-16T13:12:08", "url": "https://files.pythonhosted.org/packages/d4/7f/5c4df414fb0785ec42a4e3ba49c07a19f475e59ab1202da493faecc05403/s3bro-2.6.tar.gz" } ], "2.7": [ { "comment_text": "", "digests": { "md5": "e2029fff08ce9eea138570027409a411", "sha256": "3927d718d2e3eab8efa51488235141a513e1dd7a5306c2d28f3d0e5c272582bf" }, "downloads": -1, "filename": "s3bro-2.7.tar.gz", "has_sig": false, "md5_digest": "e2029fff08ce9eea138570027409a411", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16724, "upload_time": "2018-07-08T09:08:53", "url": "https://files.pythonhosted.org/packages/e9/0c/a79cec1e2ef5c72a42eba5991a2f583be31445ea69acae9a48e6bec14fe5/s3bro-2.7.tar.gz" } ], "2.8": [ { "comment_text": "", "digests": { "md5": "9dfbb42340e90ab230ae7973cd21dbe7", "sha256": "f8ea9c2db5e295b63887fcd1024bd177cb5a54838fca249c380703c8f678454c" }, "downloads": -1, "filename": "s3bro-2.8.tar.gz", "has_sig": false, "md5_digest": "9dfbb42340e90ab230ae7973cd21dbe7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17551, "upload_time": "2018-08-04T14:11:28", "url": "https://files.pythonhosted.org/packages/a1/54/b3bb239baa44d983ebc07552b1fed1e18672c352b1e6e23482c5316ebdae/s3bro-2.8.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "9dfbb42340e90ab230ae7973cd21dbe7", "sha256": "f8ea9c2db5e295b63887fcd1024bd177cb5a54838fca249c380703c8f678454c" }, "downloads": -1, "filename": "s3bro-2.8.tar.gz", "has_sig": false, "md5_digest": "9dfbb42340e90ab230ae7973cd21dbe7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17551, "upload_time": "2018-08-04T14:11:28", "url": "https://files.pythonhosted.org/packages/a1/54/b3bb239baa44d983ebc07552b1fed1e18672c352b1e6e23482c5316ebdae/s3bro-2.8.tar.gz" } ] }