{ "info": { "author": "Michael Aquilina", "author_email": "michaelaquilina@gmail.com", "bugtrack_url": null, "classifiers": [ "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", "Natural Language :: English", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: Implementation :: CPython" ], "description": "==============\nS4 = S3 Syncer\n==============\n\n|CircleCI| |CodeCov| |Black| |PyPi| |GPLv3|\n\nFast and cheap synchronisation of files using `Amazon\nS3 `__.\n\nS4 stands for \"Simple Storage Solution (S3) Syncer\".\n\nThe intention of this project is to be an open source alternative to\ntypical proprietary sync solutions like Dropbox. Because S4 interacts\nwith S3 directly, you can expect *very* fast upload and download speeds\nas well as *very* cheap costs (See `Amazon S3\nPricing `__ for an idea of how much\nthis would cost you). See `Why?`_ for further motivation for this project.\n\nYou can also take advantage of other cool features that S3 provides like\n`versioning `__.\nEverytime you sync a version of a new file, you will now have the\nability to easily rollback to any previous version.\n\n* Requirements_\n* Installation_\n* Setup_\n* Synchronising_\n* `Handling Conflicts`_\n* `Other Subcommands`_\n* `How S4 Works`_\n* `Ignoring Files`_\n* `Why?`_\n* Contributing_\n\nSee it in action here:\n\n|ASCIINEMA|\n\nRequirements\n------------\n\nS4 requires python 3.5+ to work\n\nInstallation\n------------\n\nThe easiest way to install S4 is through pip:\n\n::\n\n $ pip install s4\n\nYou will need ``libmagic`` installed.\nThis is installed by default on most linux distributions but on MacOSX you need to install it with brew as follows:\n\n::\n\n brew install libmagic\n\nSetup\n-----\n\nRun ``s4 add`` to add a new sync local folder and target S3 uri:\n\n::\n\n $ s4 add\n local folder: /home/username/myfolder1\n s3 uri: s3://mybucket/folder1\n AWS Access Key ID: AKIAJD53D9GCGKCD\n AWS Secret Access Key:\n region name: eu-west-2\n Provide a name for this entry [myfolder1]:\n\nSynchronising\n-------------\n\nRun ``s4 sync`` in the project directory to synchronise the local\nfolders you specified with the folders in the bucket.\n\n::\n\n $ s4 sync\n Syncing myfolder1 [/home/username/myfolder1/ <=> s3://mybucket/folder1/]\n Creating foobar.jpg (/home/username/myfolder1/ => s3://mybucket/folder1/)\n Creating boarding-pass.pdf (/home/username/myfolder1/ => s3://mybucket/folder1/)\n Flushing Index to Storage\n\nAll files will be automatically synced between the source and target\ndestinations where possible.\n\nYou may specify a specific folder to synchronise by the name you\nprovided during ``add``.\n\n::\n\n $ s4 sync myfolder1\n\n\nIf you wish to synchronise your targets continuously, use the ``daemon`` command:\n\n::\n\n $ s4 daemon myfolder1\n\nNOTE: This command is only supported on machines that can run INotify. This typically means\nLinux based operating systems.\n\n\nHandling Conflicts\n------------------\n\nIn the case where S4 cannot decide on a reasonable action by itself, it\nwill ask you to intervene:\n\n::\n\n Syncing /home/username/myfolder1/ with s3://mybucket/folder1/\n\n Conflict for \"test.txt\". Which version would you like to keep?\n (1) /home/username/myfolder1/test.txt updated at 2017-01-23 12:26:24 (CREATED)\n (2) s3://mybucket/folder1/test.txt updated at 2017-01-23 12:26:30 (CREATED)\n (d) View difference (requires diff command)\n (X) Skip this file\n\n Choice (default=skip):\n\nIf you do not wish to fix the issue, you can simply skip the file for\nnow.\n\nOther Subcommands\n-----------------\n\nSome other subcommands that you could find useful:\n\n- ``s4 targets`` - print existing targets\n- ``s4 edit`` - edit the settings of a targets\n- ``s4 rm`` - remove a target\n- ``s4 ls`` - print tracked files and metadata of a target\n\nUse the ``--help`` parameter on each subcommand to get more details.\n\nHow S4 Works\n------------\n\nS4 keeps track of changes between files with a ``.index`` file at\nthe root of each folder you are syncing. This contains the keys of each\nfile being synchronised along with the timestamps found locally and\nremotely in JSON format.\n\nThis is compressed (currently using gzip) to save space and increase\nperformance when loading.\n\nIf you are curious, you can view the contents of an index file using the\n``s4 ls`` subcommand or you can view the file directly using a command\nlike ``zcat``.\n\n NOTE: Deleting this file will result in that folder being treated as if\n it was never synced before so make sure you *do not* delete it unless\n you know what you are doing.\n\nAll information about your configuration (such as targets, your keys etc..) are\nstored in a JSON formatted file under ``~/.config/s4/sync.conf``.\n\nIgnoring Files\n--------------\n\nCreate a ``.syncignore`` file in the root of the directory being synced\nto list patterns of subdirectories and files you wish to ignore. The\n``.syncignore`` file uses the exact same pattern that you would expect\nin ``.gitignore``. Each line specifies a `GLOB\npattern `__ to\nignore during sync.\n\nNote that if you add a pattern which matches an item that was previously\nsynced, that item will be deleted from the target you are syncing with\nnext time you run S4.\n\nWhy?\n----\n\nThere are a number of open source S3 backup tools out there - but none of them really satisfied the\nrequirements that this project tries to solve.\n\nHere are is a list of open source solutions that I have tried in the past.\n\n* ``s3cmd``: Provides a sync function that works very well for backing up - but stops working correctly\n as soon as there is second machine you want to sync to S3.\n\n* ``owncloud/nextcloud``: Requires you to setup a server to perform your syncing. In terms of costs on AWS,\n this quickly becomes costly compared with just using S3. The speed of your uploads and downloads are also\n heavily bottlenectked by the network and hardware performance of your ec2 instance.\n\n* ``seafile``: suffers from the same problem as owncloud/nextcloud.\n\n* ``duplicity``: great backup tool, but does not provide a sync solution of any kind.\n\nContributing\n------------\n\nPull requests are welcome! Make sure you pass all the tests, CircleCI will tell you if you don't ;)\n\nWhen opening a pull request, please make sure it is from a separate branch in your fork.\n\n.. |CircleCI| image:: https://circleci.com/gh/MichaelAquilina/S4.svg?style=svg\n :target: https://circleci.com/gh/MichaelAquilina/S4\n\n.. |PyPi| image:: https://badge.fury.io/py/s4.svg\n :target: https://badge.fury.io/py/s4\n\n.. |CodeCov| image:: https://codecov.io/gh/MichaelAquilina/s4/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/MichaelAquilina/s4\n\n.. |GPLv3| image:: https://img.shields.io/badge/License-GPL%20v3-blue.svg\n :target: https://www.gnu.org/licenses/gpl-3.0\n\n.. |ASCIINEMA| image:: https://asciinema.org/a/0GiXLN7YT4ki8qouedF0w8Wbk.png\n :target: https://asciinema.org/a/0GiXLN7YT4ki8qouedF0w8Wbk?autoplay=1\n\n.. |Black| image:: https://img.shields.io/badge/code%20style-black-000000.svg\n :target: https://github.com/ambv/black\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/MichaelAquilina/S4", "keywords": "aws s3 backup sync", "license": "GPLv3", "maintainer": "", "maintainer_email": "", "name": "S4", "package_url": "https://pypi.org/project/S4/", "platform": "", "project_url": "https://pypi.org/project/S4/", "project_urls": { "Homepage": "https://github.com/MichaelAquilina/S4" }, "release_url": "https://pypi.org/project/S4/0.4.4/", "requires_dist": null, "requires_python": "", "summary": "Fast and cheap synchronisation of files using Amazon S3", "version": "0.4.4" }, "last_serial": 5319513, "releases": { "0.1.14": [ { "comment_text": "", "digests": { "md5": "c0acdc5edeb33cf52d126231d305671c", "sha256": "41af14c4a4d89f061ff84106592cb43842abebccb4fdb6ca0da1b27954f5b772" }, "downloads": -1, "filename": "s4-0.1.14.tar.gz", "has_sig": false, "md5_digest": "c0acdc5edeb33cf52d126231d305671c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23916, "upload_time": "2017-07-20T22:58:29", "url": "https://files.pythonhosted.org/packages/3c/af/1a3a5f959e74c158a30054c6380726748d4c5a525e16f2e400794455c20a/s4-0.1.14.tar.gz" } ], "0.1.15": [ { "comment_text": "", "digests": { "md5": "d602b496d4a4e48a6ae66dae5708f889", "sha256": "9dae8ad332a68c2f6668347f9e2223737bd1ddf077d72ee53fae877cc7f7f6ff" }, "downloads": -1, "filename": "s4-0.1.15.tar.gz", "has_sig": false, "md5_digest": "d602b496d4a4e48a6ae66dae5708f889", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21838, "upload_time": "2017-07-21T12:55:20", "url": "https://files.pythonhosted.org/packages/df/1a/59455719bef39c87805586dc8ca5b156d6fc4bc7d7a50a223be594ad0511/s4-0.1.15.tar.gz" } ], "0.1.16": [ { "comment_text": "", "digests": { "md5": "84cfc2781f90364ec9b226fef6e165d3", "sha256": "1b16247e28e174fe9293ce68b4db11aa78053b97cdf3a2ead79a77e88f8b3fff" }, "downloads": -1, "filename": "s4-0.1.16.tar.gz", "has_sig": false, "md5_digest": "84cfc2781f90364ec9b226fef6e165d3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26082, "upload_time": "2017-07-23T13:47:58", "url": "https://files.pythonhosted.org/packages/79/63/16db50cbf7012f4a565e905a261d99af43d34bd0bd6f28cfb9d26a01ee85/s4-0.1.16.tar.gz" } ], "0.1.17": [ { "comment_text": "", "digests": { "md5": "afab060e1b44131d6dd558170d6ae9af", "sha256": "c9f733df3223edf4bb0466dbe9eb6cc539a81af51aca9f1ecb31238c22a87fa2" }, "downloads": -1, "filename": "s4-0.1.17.tar.gz", "has_sig": false, "md5_digest": "afab060e1b44131d6dd558170d6ae9af", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37971, "upload_time": "2017-07-23T18:57:50", "url": "https://files.pythonhosted.org/packages/c4/4e/59e9423cbb03cfb96d53dc85242f2021db2e8885cf9e313f95877ed7f3c2/s4-0.1.17.tar.gz" } ], "0.1.18": [ { "comment_text": "", "digests": { "md5": "202e4366ed5962c8edce4034ecf84c8d", "sha256": "b6f0a9bc80f7f0643328695b0155f8c6574cd3c6f795d9f452a0b08d68a21a36" }, "downloads": -1, "filename": "s4-0.1.18.tar.gz", "has_sig": false, "md5_digest": "202e4366ed5962c8edce4034ecf84c8d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37982, "upload_time": "2017-07-23T19:01:18", "url": "https://files.pythonhosted.org/packages/7a/8c/93231d61f1751a7076e4acd2cec8adb586783fd6c381e5e1a3044ac55375/s4-0.1.18.tar.gz" } ], "0.1.19": [ { "comment_text": "", "digests": { "md5": "9c9ffca1aa8f9c6bd1cb729c314feefe", "sha256": "1143572a943565d4d7216bf98438515639ceeca193874b94ccab7420a894ea5a" }, "downloads": -1, "filename": "s4-0.1.19.tar.gz", "has_sig": false, "md5_digest": "9c9ffca1aa8f9c6bd1cb729c314feefe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37965, "upload_time": "2017-07-23T19:03:07", "url": "https://files.pythonhosted.org/packages/98/ba/35253c1e6056a4459defbe6b64513f47caa249d8795853fce4c6291ffd6c/s4-0.1.19.tar.gz" } ], "0.1.20": [ { "comment_text": "", "digests": { "md5": "6af89d78cd554864d64f38606717d125", "sha256": "04dd999abcd78d5389e5fd71043e643b298f474fc2afb45b3ef91dfed3299f0c" }, "downloads": -1, "filename": "s4-0.1.20.tar.gz", "has_sig": false, "md5_digest": "6af89d78cd554864d64f38606717d125", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37977, "upload_time": "2017-07-24T22:16:52", "url": "https://files.pythonhosted.org/packages/77/73/2dd6ac814cabe4c0cd7fa4009191ef4e8dcd0da9414e026ea14b42fbbe21/s4-0.1.20.tar.gz" } ], "0.1.21": [ { "comment_text": "", "digests": { "md5": "e1254fdff8e2b49b699759aaa6795476", "sha256": "541a583331de5c9e09041b135703fad2a2e638d0593c0e587b1568294635ec8c" }, "downloads": -1, "filename": "s4-0.1.21.tar.gz", "has_sig": false, "md5_digest": "e1254fdff8e2b49b699759aaa6795476", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38062, "upload_time": "2017-07-24T22:25:45", "url": "https://files.pythonhosted.org/packages/42/7c/c0507b9c60f0cf37d3cf44122c6f4bd4ab37733849605b936cb92c3be98f/s4-0.1.21.tar.gz" } ], "0.1.22": [ { "comment_text": "", "digests": { "md5": "375f8dceceaed4288180e68f839e2d22", "sha256": "60c6c288b79601b7685a292ee19494c148c02df8d86bcc4a979805f497d05f11" }, "downloads": -1, "filename": "s4-0.1.22.tar.gz", "has_sig": false, "md5_digest": "375f8dceceaed4288180e68f839e2d22", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38081, "upload_time": "2017-07-24T22:29:14", "url": "https://files.pythonhosted.org/packages/1a/ad/c1c9e53b6bff6986c0b39f41310816846bc566b744cf1751f0f798dd4196/s4-0.1.22.tar.gz" } ], "0.1.23": [ { "comment_text": "", "digests": { "md5": "e057d75a1059bf474d6eec29cd385268", "sha256": "a6e82af04b049867f7f7be5e574ef108fea8bf33b018e911b61ec5ce06bb9617" }, "downloads": -1, "filename": "s4-0.1.23.tar.gz", "has_sig": false, "md5_digest": "e057d75a1059bf474d6eec29cd385268", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38153, "upload_time": "2017-07-24T22:35:49", "url": "https://files.pythonhosted.org/packages/30/85/8b89fc36db80a5f07e8e8d93882d4fd438fa34939f0fdfd9fa21f3bb5a49/s4-0.1.23.tar.gz" } ], "0.1.24": [ { "comment_text": "", "digests": { "md5": "007d7f495b34624c51d3a29e03aa9164", "sha256": "e30ddf3b3c4c0cb12a437f94442a4ed66ab5eb705f124f6d6b9e18deb4161ba7" }, "downloads": -1, "filename": "s4-0.1.24.tar.gz", "has_sig": false, "md5_digest": "007d7f495b34624c51d3a29e03aa9164", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38253, "upload_time": "2017-07-25T21:29:36", "url": "https://files.pythonhosted.org/packages/43/3f/aace4ee88567cd969a57849d18eee584fcb10ced4d88900d8fc0b1e129e1/s4-0.1.24.tar.gz" } ], "0.1.25": [ { "comment_text": "", "digests": { "md5": "598cecada0dcb2d95aac4dacd1d3e508", "sha256": "60fae18b337b00bd6696a769b08a7e71698e39cb43b3b46799cf102f218b7cc1" }, "downloads": -1, "filename": "s4-0.1.25.tar.gz", "has_sig": false, "md5_digest": "598cecada0dcb2d95aac4dacd1d3e508", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40658, "upload_time": "2017-07-25T22:10:35", "url": "https://files.pythonhosted.org/packages/e2/6d/f6eab3bf3fd64996114d4655099b7bd4c5deb6c0f0a3edc1354964d708cf/s4-0.1.25.tar.gz" } ], "0.1.26": [ { "comment_text": "", "digests": { "md5": "cba1fd1e3496f97265bca0cd07273bc8", "sha256": "3daccaddc6277ebbcbf49315f24dc512129d0a36b8a0d46b4b4856d28028aa76" }, "downloads": -1, "filename": "s4-0.1.26.tar.gz", "has_sig": false, "md5_digest": "cba1fd1e3496f97265bca0cd07273bc8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37628, "upload_time": "2017-07-27T12:52:00", "url": "https://files.pythonhosted.org/packages/fd/19/dd814d97d56cb355ee288d532845e7825774e127d32d185c4605307b97c6/s4-0.1.26.tar.gz" } ], "0.1.27": [ { "comment_text": "", "digests": { "md5": "0d152b2d0596620a28690ba667856692", "sha256": "0c7bfc95194cd0239c369c569940263c7c2efb5d93a45ea3611346712f5bced5" }, "downloads": -1, "filename": "s4-0.1.27.tar.gz", "has_sig": false, "md5_digest": "0d152b2d0596620a28690ba667856692", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40789, "upload_time": "2017-07-30T14:38:56", "url": "https://files.pythonhosted.org/packages/37/6a/a774d057f65e89732b40d99734a4590fd08ccc99236b72206478d4ddf492/s4-0.1.27.tar.gz" } ], "0.1.28": [ { "comment_text": "", "digests": { "md5": "9479b7a13b34972aef7376d79a6f3417", "sha256": "eae206c647f272fa537b6f804c769562f4a6dd06fc931846c9b0c9e12271a46a" }, "downloads": -1, "filename": "s4-0.1.28.tar.gz", "has_sig": false, "md5_digest": "9479b7a13b34972aef7376d79a6f3417", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40929, "upload_time": "2017-07-30T15:27:02", "url": "https://files.pythonhosted.org/packages/99/46/8267bbb9f23cb6534a969b78a639f3aeabcb78d9ca61f3e60b60e179031e/s4-0.1.28.tar.gz" } ], "0.1.29": [ { "comment_text": "", "digests": { "md5": "e0d88508025e126ad26557a8a4260c5f", "sha256": "cd067a8a96140edef7e7bfd6bd9b820c3ddc49a3a15367dcd9a3ad686301fca8" }, "downloads": -1, "filename": "s4-0.1.29.tar.gz", "has_sig": false, "md5_digest": "e0d88508025e126ad26557a8a4260c5f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 41006, "upload_time": "2017-07-30T15:52:00", "url": "https://files.pythonhosted.org/packages/5d/0e/f9af9c246ef877d01b9002bbabdcaef4442be5eca28acb71035e17be0bf2/s4-0.1.29.tar.gz" } ], "0.1.30": [ { "comment_text": "", "digests": { "md5": "0620794ca3031cd1f366705a52bdb681", "sha256": "cbc138e26bd3a5f0d68fdcbbb41afe4c772fd76bd7fef3df11733d5ad174c951" }, "downloads": -1, "filename": "s4-0.1.30.tar.gz", "has_sig": false, "md5_digest": "0620794ca3031cd1f366705a52bdb681", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 41043, "upload_time": "2017-07-30T16:21:37", "url": "https://files.pythonhosted.org/packages/1c/92/2066b65625e8fe0038904e19d7ddde81be7b566992f0551c80ea9687771c/s4-0.1.30.tar.gz" } ], "0.1.31": [ { "comment_text": "", "digests": { "md5": "70f532df783687d22388ad565403b92e", "sha256": "7b70fdaccc7742a96b2342551e16503ecfac0b910faf42e11c04769dc5e1e34f" }, "downloads": -1, "filename": "s4-0.1.31.tar.gz", "has_sig": false, "md5_digest": "70f532df783687d22388ad565403b92e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37950, "upload_time": "2017-08-02T15:34:20", "url": "https://files.pythonhosted.org/packages/14/0f/e7f1e1e7faa9dae8df9e3b9cccd17c153f31a2a9a16267a6f07ce04754a3/s4-0.1.31.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "4ac823775adbb4f24c5683f634047c51", "sha256": "3c4c5cdfb0dc79bb97f1561867aff0145cf4725d8bc2670c77abd2cf2f235fc1" }, "downloads": -1, "filename": "s4-0.2.0.tar.gz", "has_sig": false, "md5_digest": "4ac823775adbb4f24c5683f634047c51", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 41083, "upload_time": "2017-08-10T17:25:15", "url": "https://files.pythonhosted.org/packages/06/00/cd8d509466d150b51565d8c4bc682d83a201d19b49339a77d8ddb8553c68/s4-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "225b19da2b0601697a4536a93ecd66a8", "sha256": "d49af865b9b1ccaccfde0c82d1a4cc718dae4c479278732e38d491b62e48d9a1" }, "downloads": -1, "filename": "s4-0.2.1.tar.gz", "has_sig": false, "md5_digest": "225b19da2b0601697a4536a93ecd66a8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 43055, "upload_time": "2017-08-10T17:29:41", "url": "https://files.pythonhosted.org/packages/39/3e/63e75a62b5a4a3b7bc8154e141eb17ed0be9ac10e3ae14f84c845aac770c/s4-0.2.1.tar.gz" } ], "0.2.10": [ { "comment_text": "", "digests": { "md5": "6c38a60f6d1ceb830438d5b5901ff17a", "sha256": "74187cbef8d4690c786ee70fc5b6a58312951f95b5ebb2b98724212cad5a6d0d" }, "downloads": -1, "filename": "s4-0.2.10.tar.gz", "has_sig": false, "md5_digest": "6c38a60f6d1ceb830438d5b5901ff17a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48063, "upload_time": "2018-04-03T11:14:05", "url": "https://files.pythonhosted.org/packages/ab/ae/b9358b2412a6ed9f169ed5902b5a2742f05932d6db2f4edeceab6591fcd3/s4-0.2.10.tar.gz" } ], "0.2.11": [ { "comment_text": "", "digests": { "md5": "6b6b502f53c30849697f59e8dc6cb274", "sha256": "926f21f8b2c67461a7c88728f2a84ccc0e709e244a7c44cbbed3b5fe6ae2cff2" }, "downloads": -1, "filename": "s4-0.2.11.tar.gz", "has_sig": false, "md5_digest": "6b6b502f53c30849697f59e8dc6cb274", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48071, "upload_time": "2018-04-03T11:25:16", "url": "https://files.pythonhosted.org/packages/d4/9c/7daf1a0dbbd89b71a072c70dc5ee45754fba1af4d29a4aa6191e43440263/s4-0.2.11.tar.gz" } ], "0.2.12": [ { "comment_text": "", "digests": { "md5": "168e00adb116f18a85f8dd4a38dacc74", "sha256": "a4fbd3f8b57a8b95acba52a4518588bd8635ae2704e483ba0360a68947a4cc03" }, "downloads": -1, "filename": "s4-0.2.12.tar.gz", "has_sig": false, "md5_digest": "168e00adb116f18a85f8dd4a38dacc74", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48392, "upload_time": "2018-04-13T14:29:28", "url": "https://files.pythonhosted.org/packages/3d/73/d2042ccd5d2b3203f008bab52b8e2008b9f6a42b5acabebbb69d0541787f/s4-0.2.12.tar.gz" } ], "0.2.13": [ { "comment_text": "", "digests": { "md5": "e99048ba3618d7094430ca19f34f2fb9", "sha256": "4797cbcc2a3d73b3b2b1caddb714bacd2d3b455d922544ff743e70648d73fb59" }, "downloads": -1, "filename": "s4-0.2.13.tar.gz", "has_sig": false, "md5_digest": "e99048ba3618d7094430ca19f34f2fb9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48453, "upload_time": "2018-05-08T16:43:29", "url": "https://files.pythonhosted.org/packages/1c/21/bd0b1532aa522c1e82ca146ef58070ac7101ca5501c98a5e6eb79092b501/s4-0.2.13.tar.gz" } ], "0.2.14": [ { "comment_text": "", "digests": { "md5": "c27e9ab0f4367cc5cc54d19676ef80f8", "sha256": "af5b1dd42f934bb63773d012a84741b91f7dbd18b1788b642d71c288a4c1123b" }, "downloads": -1, "filename": "s4-0.2.14.tar.gz", "has_sig": false, "md5_digest": "c27e9ab0f4367cc5cc54d19676ef80f8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48597, "upload_time": "2018-05-08T16:54:24", "url": "https://files.pythonhosted.org/packages/4b/b2/39cee0dfdb438b505e76922af7facea96ad5ebbb5c53320e11fd78142caa/s4-0.2.14.tar.gz" } ], "0.2.15": [ { "comment_text": "", "digests": { "md5": "6fdcbb3a2bf4fff5b7bcbf27039b9b20", "sha256": "79388c41963d5937fe243b4ca17c66a3b3e5fd881942e848b49de2b465b04e16" }, "downloads": -1, "filename": "S4-0.2.15.tar.gz", "has_sig": false, "md5_digest": "6fdcbb3a2bf4fff5b7bcbf27039b9b20", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 45532, "upload_time": "2018-05-20T19:03:34", "url": "https://files.pythonhosted.org/packages/f6/ea/2f81b917359aee7842233f0d601f6f3452fa8ebaac0df3b984dbe3e4616a/S4-0.2.15.tar.gz" } ], "0.2.16": [ { "comment_text": "", "digests": { "md5": "2267963e8ff62753f6d6e62c48c291b9", "sha256": "36c88de6908cfa21b9e9a4e85a399907d5f4bf047c0e5aad9f85632d53271667" }, "downloads": -1, "filename": "S4-0.2.16.tar.gz", "has_sig": true, "md5_digest": "2267963e8ff62753f6d6e62c48c291b9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 45474, "upload_time": "2018-06-18T13:17:57", "url": "https://files.pythonhosted.org/packages/c7/c6/a26e3e904242db9d15755f7949762e8e673221f778d9bca1de899745d676/S4-0.2.16.tar.gz" } ], "0.2.18": [ { "comment_text": "", "digests": { "md5": "2aef849e26ac76152f5e122897662bae", "sha256": "c77fa88bbcd740fb9b3196412677a67a260342331c604428ee35322b423544a5" }, "downloads": -1, "filename": "S4-0.2.18.tar.gz", "has_sig": true, "md5_digest": "2aef849e26ac76152f5e122897662bae", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 46222, "upload_time": "2018-07-01T22:17:58", "url": "https://files.pythonhosted.org/packages/18/ed/e4bd6aa897f8e062cbb0b00078ccebbb8bbc86c182125dd2832c65df809f/S4-0.2.18.tar.gz" } ], "0.2.19": [ { "comment_text": "", "digests": { "md5": "770250ce40dfa211b512acb0c5bd6344", "sha256": "27c85b5e02a186c1e3b1bf69ce17ba9a1263e551b90a7ed725c3c188418b3172" }, "downloads": -1, "filename": "s4-0.2.19-py3-none-any.whl", "has_sig": false, "md5_digest": "770250ce40dfa211b512acb0c5bd6344", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 99519, "upload_time": "2018-07-25T22:55:44", "url": "https://files.pythonhosted.org/packages/bb/3c/8fdb3a20e05c00a06abb57789b0dd6cad00f9b8213c76baf41844e0662d1/s4-0.2.19-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d60555333ac0fc8747ed9c6b08b00d23", "sha256": "a1b1889d0be635c54325912e4d437789696d1caa6fb084500f996ca7b33c65c4" }, "downloads": -1, "filename": "s4-0.2.19.tar.gz", "has_sig": false, "md5_digest": "d60555333ac0fc8747ed9c6b08b00d23", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 26046, "upload_time": "2018-07-25T22:55:45", "url": "https://files.pythonhosted.org/packages/68/fa/594b37c3500a954ebf9f8626989d3b482f24a63ee3740b9b31a5faa02068/s4-0.2.19.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "ccc8c82202b527abe8a094ca221d495b", "sha256": "a996d08d363587aea8738cac1e16a7ff1afbe9f6391ce2026f915f26bbd13998" }, "downloads": -1, "filename": "s4-0.2.2.tar.gz", "has_sig": false, "md5_digest": "ccc8c82202b527abe8a094ca221d495b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 43394, "upload_time": "2017-09-26T21:09:39", "url": "https://files.pythonhosted.org/packages/aa/0e/ad0c1232e2bc992381495886631d2a93890fe8426d42730d9e608939cf74/s4-0.2.2.tar.gz" } ], "0.2.20": [ { "comment_text": "", "digests": { "md5": "5e1ead3b0576cfd952c5b874af2cef3f", "sha256": "e0b3340b7359be2066ecf6725eeca666eaf579744bf9851dafc29e350d27826c" }, "downloads": -1, "filename": "s4-0.2.20-py3-none-any.whl", "has_sig": false, "md5_digest": "5e1ead3b0576cfd952c5b874af2cef3f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 102405, "upload_time": "2018-07-26T16:22:48", "url": "https://files.pythonhosted.org/packages/a0/1d/fcad7c34371e1a3be169bd36ab2060efe3dab57649080a2a53c6d97655c9/s4-0.2.20-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "97b8d750238364d5cabade41e8ee58ae", "sha256": "7f1580d4722b330b96ebe9797cb8b95182d681d49b46f94e10de6b8c23abc8ff" }, "downloads": -1, "filename": "s4-0.2.20.tar.gz", "has_sig": false, "md5_digest": "97b8d750238364d5cabade41e8ee58ae", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 31426, "upload_time": "2018-07-26T16:22:49", "url": "https://files.pythonhosted.org/packages/4b/e4/f765efca543fb9315c7807eb112ef2872de108637b222844d28a941a7f2d/s4-0.2.20.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "b8898efe7f2fdfc431d7554f670eb1d1", "sha256": "768516ec15373779f1d9f724dcbc27b8ba85a21273cd591bf85e5fb904b507d9" }, "downloads": -1, "filename": "s4-0.2.3.tar.gz", "has_sig": false, "md5_digest": "b8898efe7f2fdfc431d7554f670eb1d1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 43400, "upload_time": "2017-09-26T22:04:36", "url": "https://files.pythonhosted.org/packages/93/60/3ee2f72ffb241a9ddd7d4181f854024030e4ab9f097b7be95cd4d363ba2d/s4-0.2.3.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "fa9e94ffc05c46287d9331a7223b9f94", "sha256": "59ab0b21eefe23a57a9836ffd4e365dce5a1dae16194a2abfbdfdc45a7fd5599" }, "downloads": -1, "filename": "s4-0.2.4.tar.gz", "has_sig": false, "md5_digest": "fa9e94ffc05c46287d9331a7223b9f94", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40487, "upload_time": "2017-09-27T10:39:30", "url": "https://files.pythonhosted.org/packages/df/3b/0d100bd403189ee0d453face41fb2b1a4b2e807ce57e081d37f25ba1904a/s4-0.2.4.tar.gz" } ], "0.2.6": [ { "comment_text": "", "digests": { "md5": "03bbd32508059b05f8f049cee37a6c86", "sha256": "46b343f1669a6f94eb6e8f3fbe8839d5b56d818bf93f50e46daf5d0e6b9a433b" }, "downloads": -1, "filename": "s4-0.2.6.tar.gz", "has_sig": false, "md5_digest": "03bbd32508059b05f8f049cee37a6c86", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48072, "upload_time": "2017-12-23T18:17:28", "url": "https://files.pythonhosted.org/packages/12/44/6a54ab69fddbdcdbc0fdabd666d51c7e3108c0c902f5eab2b198e4b11508/s4-0.2.6.tar.gz" } ], "0.2.7": [ { "comment_text": "", "digests": { "md5": "cb294d41e3bb55a91cf4fa98a50afac2", "sha256": "fdaac3c3a0fcfab99feb1e488ce5764c5ac42c83153551a457b5a66e767b7b48" }, "downloads": -1, "filename": "s4-0.2.7.tar.gz", "has_sig": false, "md5_digest": "cb294d41e3bb55a91cf4fa98a50afac2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48106, "upload_time": "2018-01-24T21:56:34", "url": "https://files.pythonhosted.org/packages/95/b2/a6a242c4a87b51dc43f2a0f988d91b11d9d49219f91bed3ed121262b9a4e/s4-0.2.7.tar.gz" } ], "0.2.8": [ { "comment_text": "", "digests": { "md5": "1e8f1dbf75d6fa303c06897c4f4f9fac", "sha256": "bf59e5a8c8433d03dc1eb7972f03a9324569e856bd9cedc60ec6efa45b05c388" }, "downloads": -1, "filename": "s4-0.2.8.tar.gz", "has_sig": false, "md5_digest": "1e8f1dbf75d6fa303c06897c4f4f9fac", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48438, "upload_time": "2018-02-24T15:31:13", "url": "https://files.pythonhosted.org/packages/e8/15/84f16da8f526a644445ed6f12960096deae91ea4b528c32bfa362895d1d5/s4-0.2.8.tar.gz" } ], "0.2.9": [ { "comment_text": "", "digests": { "md5": "44fd9b8ef5d25ae37896b7a4dd50a9de", "sha256": "12f3fb9cd16c8fe10dc7411c78108ec21370a3d62e3a512122c004808771b8e3" }, "downloads": -1, "filename": "s4-0.2.9.tar.gz", "has_sig": false, "md5_digest": "44fd9b8ef5d25ae37896b7a4dd50a9de", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48147, "upload_time": "2018-03-21T23:10:00", "url": "https://files.pythonhosted.org/packages/cb/35/4fee458b16db69cac13056bc04c7f9f461989fc5c115a2878357878b9d3b/s4-0.2.9.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "424056eb28a9b6749b7b46839c020541", "sha256": "1f1069ac8962a113e757921742e6ff213514ae012efcf89e6bbf681b7c8c3f4f" }, "downloads": -1, "filename": "s4-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "424056eb28a9b6749b7b46839c020541", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 102940, "upload_time": "2018-10-29T13:59:53", "url": "https://files.pythonhosted.org/packages/41/e5/a98eb971fe74bd54343705a8a74feed4fc271576e70cd997dd474141cb20/s4-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1a404e2e734ae03b9c0fec5e4586af13", "sha256": "408d7c401bf9c58c173748947dc80b28e33b9b82be9387126fcc0c3461b95876" }, "downloads": -1, "filename": "s4-0.3.0.tar.gz", "has_sig": false, "md5_digest": "1a404e2e734ae03b9c0fec5e4586af13", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 31659, "upload_time": "2018-10-29T13:59:55", "url": "https://files.pythonhosted.org/packages/05/1a/06c90a7ad2ffcb59b2ad7dcfa518f5f0905a8398245ea5240ae32479bd47/s4-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "89d18fad58af3cd9b7c73afc81a45865", "sha256": "74860e7588fd844f654c982493d1cab0516b27e99f194658561cc03287c58598" }, "downloads": -1, "filename": "s4-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "89d18fad58af3cd9b7c73afc81a45865", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 104260, "upload_time": "2018-10-30T23:22:41", "url": "https://files.pythonhosted.org/packages/4d/43/6e7dcb034af42f88d8fd8e515465fc00590a2c2c2df941f710efadb0a66b/s4-0.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "abc2136e986f5f07970697a5da28a9da", "sha256": "ef3d855f609a9e5a33d8c75af0b51684907be03a42172e1393a3930b933d6089" }, "downloads": -1, "filename": "s4-0.4.0.tar.gz", "has_sig": false, "md5_digest": "abc2136e986f5f07970697a5da28a9da", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 32455, "upload_time": "2018-10-30T23:22:43", "url": "https://files.pythonhosted.org/packages/00/16/e2cce172ca42ec811bff47a305d206f02438a5d4834ae6a0b450349cb22d/s4-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "33024dff861112c755593a7103e5eb26", "sha256": "f3ca26c5b6a035bd31f7debc44a67f975f4cf4b9c8720207ca0a5c498c81f1ad" }, "downloads": -1, "filename": "s4-0.4.1-py3-none-any.whl", "has_sig": false, "md5_digest": "33024dff861112c755593a7103e5eb26", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 104313, "upload_time": "2018-11-15T17:26:09", "url": "https://files.pythonhosted.org/packages/99/6d/c36ed3b28cde360a9c6d9882d87200e641d91ac71ef4bc48fc45bcbfd3df/s4-0.4.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e0c2fba0a2049ca34dc5db7bf4a38503", "sha256": "e19de2eb13cd3794abe20ff06ac960a0aba985ed07402f2b6e2666d8c391fe8a" }, "downloads": -1, "filename": "s4-0.4.1.tar.gz", "has_sig": false, "md5_digest": "e0c2fba0a2049ca34dc5db7bf4a38503", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 32473, "upload_time": "2018-11-15T17:26:11", "url": "https://files.pythonhosted.org/packages/0a/0c/85b6723e0f7411d8b8a708e47013981d204b6a5b37464d71f33ef5e9c8e0/s4-0.4.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "a0ae340263c8b6e4a34d1f166b4e1f68", "sha256": "e953275b3f82e7e6378415a552b30d210f3b918a06277b024be75e065fc87a5a" }, "downloads": -1, "filename": "S4-0.4.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a0ae340263c8b6e4a34d1f166b4e1f68", "packagetype": "bdist_wheel", "python_version": "3.7", "requires_python": null, "size": 35904, "upload_time": "2019-05-06T14:12:07", "url": "https://files.pythonhosted.org/packages/3d/0b/54e5338e0ffc62b172563b2438bb3990efb40efda4f5d68c5ab82b1a8266/S4-0.4.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "330ab4784efc87ab6947dbe568bee3e8", "sha256": "6630db52d66eec664a8b496f30342cda525abc84298aecb9b992dcf659343fca" }, "downloads": -1, "filename": "S4-0.4.2.tar.gz", "has_sig": false, "md5_digest": "330ab4784efc87ab6947dbe568bee3e8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 46694, "upload_time": "2019-05-06T14:12:03", "url": "https://files.pythonhosted.org/packages/e9/68/7a44a2892790ba2f778dedd4856f88d52bfc1c36494630efac0dd0ae42d0/S4-0.4.2.tar.gz" } ], "0.4.4": [ { "comment_text": "", "digests": { "md5": "07b3b333ff00c5136bd9138059d69dc3", "sha256": "33419350cba6b946be4b275b96920b96812d261408bcc6b24fa95d04bd722ab6" }, "downloads": -1, "filename": "S4-0.4.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "07b3b333ff00c5136bd9138059d69dc3", "packagetype": "bdist_wheel", "python_version": "3.7", "requires_python": null, "size": 36076, "upload_time": "2019-05-26T18:25:48", "url": "https://files.pythonhosted.org/packages/63/a4/316409c489e6c7100b0e29e69ea0b75b3e9486e78169f4c3011ee7b84f2b/S4-0.4.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "54f95f2e520c48cf634421e68fb21523", "sha256": "c0ac4dbc2cfb90d63d296ca83547a7f856b0e166e8e22f8f659ead9f8c2b8f6f" }, "downloads": -1, "filename": "S4-0.4.4.tar.gz", "has_sig": false, "md5_digest": "54f95f2e520c48cf634421e68fb21523", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 47097, "upload_time": "2019-05-26T18:25:46", "url": "https://files.pythonhosted.org/packages/70/a1/c2202c7de3588d97095402d03450366045cace89c6272faaac8cb479d143/S4-0.4.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "07b3b333ff00c5136bd9138059d69dc3", "sha256": "33419350cba6b946be4b275b96920b96812d261408bcc6b24fa95d04bd722ab6" }, "downloads": -1, "filename": "S4-0.4.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "07b3b333ff00c5136bd9138059d69dc3", "packagetype": "bdist_wheel", "python_version": "3.7", "requires_python": null, "size": 36076, "upload_time": "2019-05-26T18:25:48", "url": "https://files.pythonhosted.org/packages/63/a4/316409c489e6c7100b0e29e69ea0b75b3e9486e78169f4c3011ee7b84f2b/S4-0.4.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "54f95f2e520c48cf634421e68fb21523", "sha256": "c0ac4dbc2cfb90d63d296ca83547a7f856b0e166e8e22f8f659ead9f8c2b8f6f" }, "downloads": -1, "filename": "S4-0.4.4.tar.gz", "has_sig": false, "md5_digest": "54f95f2e520c48cf634421e68fb21523", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 47097, "upload_time": "2019-05-26T18:25:46", "url": "https://files.pythonhosted.org/packages/70/a1/c2202c7de3588d97095402d03450366045cace89c6272faaac8cb479d143/S4-0.4.4.tar.gz" } ] }