{ "info": { "author": "Thierry Schellenbach", "author_email": "thierryschellenbach@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", "Topic :: Scientific/Engineering :: Mathematics", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "Snaptastic by Mike Ryan & Thierry Schellenbach ([mellowmorning.com](http://www.mellowmorning.com/))\n-------------------------------------------------------------------------------------------------\n\nSnaptastic allows you to automate the snapshotting (backup) and mounting of volumes\non your EC2 instances.\n\nIt uses tagging of snapshots to figure out which snapshot should be used to populate a volume upon boot.\n\nAbout the Author\n----------------\n\n - Thierry Schellenbach, Founder & CTO at Fashiolista\n - Mike Ryan, Syadmin at Fashiolista\n - Peter van Kampen, Developer at Fashiolista\n\n![Travis CI](https://secure.travis-ci.org/tschellenbach/Snaptastic.png?branch=master \"Travis CI\")\n\nInstall\n-------\n\n**pip**\n\n```python\npip install snaptastic\n```\n\n**settings file**\n\nCreate a settings file\n**/etc/snaptastic/snaptastic_settings.py**\n```python\nAWS_ACCESS_KEY_ID = 'key'\nAWS_SECRET_ACCESS_KEY = 'secret'\nREGION = 'eu-west-1'\n\nfrom snaptastic import Snapshotter, EBSVolume\n\n\nclass SolrSnapshotter(Snapshotter):\n name = 'solr'\n \n def get_volumes(self):\n volume = EBSVolume('/dev/sdf', '/mnt/solr', size=20)\n volumes = [volume]\n return volumes\n```\n\n**verifying**\n\n```python\nsudo snaptastic test\nsudo snaptastic list-volumes solr\n```\n\nThat's it, you're now ready to use snaptastic.\n\nTutorial\n--------\n\n**mount**\n\n```python\nsnaptastic mount-snapshots solr\n```\nyou should now have a mounted volume on /mnt/solr/\n\n```bash\nlets add a file to it\nsudo touch /mnt/solr/helloworld\n```\n\n**make snapshots**\n\ntime to make a snapshot of this important change\n```python\nsnaptastic make-snapshots solr\n```\n\n**destroying our work**\n```python\nsnaptastic unmount-snapshots solr\n```\ncheck to see if /mnt/solr/ is actually gone\n\n**restoring from backups**\n```python\nsnaptastic mount-snapshots solr\n```\n\n**changing the loglevel for a cronjob**\n```python\nsnaptastic mount-snapshots solr --loglevel=WARNING\n```\n\n\n\ncustomizing the tagging\n-----------------------\n\nWhen mounting volumes, snaptastic will search for snapshots with the correct tags.\nBy default it will look for:\n\n * role\n * cluster\n * environment\n * mount point (you're advised not to change this)\n\nTo uniquely identify snapshots to application logic.\nChanging the tags which are used to fit with your application setup is trivial.\nSimply subclass the snapshotter class and change the get_filter_tags function.\nHave a look at the example below:\n\n```python\nclass CustomFilterSnapshotter(Snapshotter):\n name = 'filter_example'\n \n def get_filter_tags(self):\n '''\n The tags which are used for finding the correct snapshot to load from.\n In addition to these tags, mount point is also always added.\n \n Use these to unique identify different parts of your infrastructure\n '''\n tags = {\n 'group': self.userdata['group'],\n }\n return tags\n```\n\n\nsettings file\n-------------\n\nFor more examples see examples.py\n\nSnaptastic searches for its setting file at:\n* snaptastic_settings on sys.path\n* /etc/snaptastic_settings.py\n* /etc/snaptastic/snaptastic_settings.py\n\nhooks\n-----\n\nSnaptastic defines several hooks to allow custom snapshotting behaviour.\n\nThe following hooks are available:\n\n * pre_mounts(self, volumes):\n * post_mounts(self, volumes):\n * pre_mount(self, vol):\n * post_mount(self, vol):\n * pre_unmounts(self, volumes):\n * post_unmounts(self, volumes):\n * pre_unmount(self, vol):\n * post_unmount(self, vol):\n * pre_snapshots(self, volumes):\n * post_snapshots(self, volumes):\n * pre_snapshot(self, vol):\n * post_snapshot(self, vol):\n\nexamples\n--------\n\nBasic volume customization\n\n```python\nclass MySnapshotter(Snapshotter):\n name = 'simple_example'\n\n def get_volumes(self):\n volumes = [EBSVolume('/dev/sdf1', '/mnt/index', size=200)]\n return volumes\n```\n\nCustomizing filter tags\n```python\nclass CustomFilterSnapshotter(Snapshotter):\n name = 'filter_example'\n \n def get_filter_tags(self):\n '''\n The tags which are used for finding the correct snapshot to load from.\n In addition to these tags, mount point is also always added.\n \n Use these to unique identify different parts of your infrastructure\n '''\n tags = {\n 'group': self.userdata['group'],\n }\n return tags\n```\n\nReading volumes from the userdata\n```python\nclass UserdataSnapshotter(Snapshotter):\n '''\n Looks for a list of volumes in the instance's userdata\n [{\n \"device\": \"/dev/sdf1\",\n \"mount_point\": \"/var/lib/postgresql/9.1/main\",\n \"size\": 200\n }]\n '''\n name = 'userdata_example'\n\n def get_volumes(self):\n volume_dicts = self.userdata['volumes']\n volumes = []\n for volume_dict in volume_dicts:\n volume = EBSVolume(**volume_dict)\n volumes.append(volume)\n return volumes\n```\n\nUsing the hooks\n\n\n```python\nclass PostgreSQLSnapshotter(Snapshotter):\n '''\n Customized mounting hooks for postgres\n '''\n name = 'postgres_example'\n\n def pre_mounts(self):\n import subprocess\n subprocess.check_output(['/etc/init.d/postgresql', 'stop'])\n\n def post_mounts(self):\n import subprocess\n # fix permissions on postgresql dirs\n subprocess.check_output(['chmod', '-R', '0700', '/var/lib/postgresql'])\n subprocess.check_output(\n ['chown', '-R', 'postgres:postgres', '/var/lib/postgresql'])\n\n```\n\n\n\n\nFeatures\n--------\n\n* Graceful failure handling\n* Freezes for the absolute minimal required duration\n* Batches boto API calls for faster batch volume mounting/snapshotting\n* Tested codebase\n\nPorting old systems\n-------------------\n\nYou will often need to fake userdata for porting old systems.\nDoing so is quite easy:\n\nsudo snaptastic make-snapshots solr --userdata='{\"role\": \"solr\", \"cluster\": \"solr\", \"environment\": \"aws\"}'\n\n\nCronjobs and logging\n--------------------\n\nChanging the loglevel is really easy. Simply call any of the commands with the --loglevel option.\nInternally this uses the python logging module. So valid options are:\nDEBUG,INFO,WARNING,ERROR,CRITICAL\nFor cronjobs I recommend settings it to WARNING\n\n**changing the loglevel**\n```python\nsnaptastic mount-snapshots solr --loglevel=WARNING\n```\n\nIf you need more detailed control over logging you can change the LOGGING_CONFIG\ndictionary in snaptastic_settings.py used by the python logging module.\n\nThe volume object\n-----------------\n\n**basic 200GB volume**\n```python\nEBSVolume('/dev/sdf1', '/var/lib/postgresql/9.1/main', 200),\n```\n\n**now with IOPS**\n```python\nEBSVolume('/dev/sdf1', '/var/lib/postgresql/9.1/main', 200, iops=1600),\n```\n\n**now for EXT4**\n```python\nEBSVolume('/dev/sdf1', '/var/lib/postgresql/9.1/main', 200, file_system=FILESYSTEMS.EXT4),\n```\n\n\nTodo\n----\n\n* Integrated cleanup scripts\n* Auto terminate volumes after instance termination\n* Auto detect region for cross region usage\n\nContributing & Project Workflow\n-------------------------------\n\nContributions are more than welcome. Have a look at the Todo to get an idea of what's still missing. Please always add unittests (where possible) for your feature/bug.\n\n * fab validate (checks pep8 and unittests)\n * fab publish (if tests are ok, publishes the new version, tag, pypi)\n * fab clean (attempt to auto cleanup pep8 mistakes)\n\nRunning tests\n-------------\n\n* python -m unittest snaptastic.tests\n\n\nDjango Jobs\n-----------\nDo you also see the beauty in clean code? Are you experienced with high scalability web apps?\nCurrently we're looking for additional talent over at our Amsterdam office.\nFeel free to drop me a line at my personal email for more information: thierryschellenbach[at]gmail.com", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/tschellenbach/Snaptastic", "keywords": null, "license": "Copyright (c) Thierry Schellenbach\n\n (http://www.mellowmorning.com)\nAll rights reserved.\n\nRedistribution and use of this software in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n- Neither the name of Thierry Schellenbach. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission of Thierry Schellenbach.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.", "maintainer": null, "maintainer_email": null, "name": "snaptastic", "package_url": "https://pypi.org/project/snaptastic/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/snaptastic/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://github.com/tschellenbach/Snaptastic" }, "release_url": "https://pypi.org/project/snaptastic/0.2.12/", "requires_dist": null, "requires_python": null, "summary": "Snaptastic is a python tool to enable easy snapshotting\nand mounting of snapshots on AWS/EC2 EBS volumes.", "version": "0.2.12" }, "last_serial": 849289, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "86b36f5eaceb48209ebd75b0197e0a2a", "sha256": "1dbfc39d8524887fd4f242a4df9650d22385a4cd017629018d611cb4ff0fcd1a" }, "downloads": -1, "filename": "snaptastic-0.0.1.zip", "has_sig": false, "md5_digest": "86b36f5eaceb48209ebd75b0197e0a2a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17719, "upload_time": "2012-10-09T11:32:12", "url": "https://files.pythonhosted.org/packages/7c/9d/cbad6a8bd56ad0ff494c35dc9dab15355461d8cacc49d05111344145c9f3/snaptastic-0.0.1.zip" } ], "0.0.10": [ { "comment_text": "", "digests": { "md5": "41b161215b10c84183d5566680713c01", "sha256": "1144063ddbd620c6ba885de884d6769b9b8556f7382f20c2912382f6ecb42945" }, "downloads": -1, "filename": "snaptastic-0.0.10.zip", "has_sig": false, "md5_digest": "41b161215b10c84183d5566680713c01", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28506, "upload_time": "2012-10-15T16:28:33", "url": "https://files.pythonhosted.org/packages/50/70/5f07a5b8714932d3640aba7d442dbb9764a0fc1a8fb5d2dfa0ecc8934c12/snaptastic-0.0.10.zip" } ], "0.0.11": [ { "comment_text": "", "digests": { "md5": "52b9f5ac3daad75c5df052def3ae9470", "sha256": "a22a184649ab0f9250ebbcdfe2fe838b95de96681eb2af87ef2b94f553ec9be0" }, "downloads": -1, "filename": "snaptastic-0.0.11.zip", "has_sig": false, "md5_digest": "52b9f5ac3daad75c5df052def3ae9470", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28498, "upload_time": "2012-10-15T16:35:52", "url": "https://files.pythonhosted.org/packages/da/c9/cfc0b1fe6365f53168b1cc999b33d07c29b2dddc0a0a4ce438ecd0c0d57a/snaptastic-0.0.11.zip" } ], "0.0.14": [ { "comment_text": "", "digests": { "md5": "4504b802a24f1bf760796439f04d44b0", "sha256": "96b5a57f78dd80d083c53d9b117219132f364421da851c3d24676c018d18baeb" }, "downloads": -1, "filename": "snaptastic-0.0.14.zip", "has_sig": false, "md5_digest": "4504b802a24f1bf760796439f04d44b0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28885, "upload_time": "2012-10-16T12:28:03", "url": "https://files.pythonhosted.org/packages/81/fe/b3a0b9e9c3907d7f9d113030812585b3e1add108c3d652ef064694049b8d/snaptastic-0.0.14.zip" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "5cc897dec7a2d72a91de52b087a9cdb7", "sha256": "6dd132a2454c4cf9fffe5de77d45f80ca6ae8520a6373544285c934938fea96c" }, "downloads": -1, "filename": "snaptastic-0.0.2.zip", "has_sig": false, "md5_digest": "5cc897dec7a2d72a91de52b087a9cdb7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18741, "upload_time": "2012-10-10T15:34:36", "url": "https://files.pythonhosted.org/packages/be/57/2cd458ed17de52bfefd771c0f6c2e84cfac5f11ef57c1f9588832816c247/snaptastic-0.0.2.zip" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "f326bbd3988a788deb48f03b1f806b95", "sha256": "1505ba0dd30dc9fd4c85a195c487df32ab778e94f2d10cc73a4c7bd20c57b82f" }, "downloads": -1, "filename": "snaptastic-0.0.3.zip", "has_sig": false, "md5_digest": "f326bbd3988a788deb48f03b1f806b95", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19290, "upload_time": "2012-10-10T16:16:05", "url": "https://files.pythonhosted.org/packages/cf/56/26e24783429e1d479da5d21b5a31f4f34e6503e3d3fb81d56fcbde3da74e/snaptastic-0.0.3.zip" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "4f364e0496edfde7281570d9a1ea0b2e", "sha256": "f19a3d36358b8c9973c6fc93c1afe4d4ebad2ad7c60feb4e96b7d06d139e7d1c" }, "downloads": -1, "filename": "snaptastic-0.0.4.zip", "has_sig": false, "md5_digest": "4f364e0496edfde7281570d9a1ea0b2e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19570, "upload_time": "2012-10-11T10:57:09", "url": "https://files.pythonhosted.org/packages/e8/86/12b22c7f1d16e71099fc22861acaebc50e4726dded77287a8bee1ccf4260/snaptastic-0.0.4.zip" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "9494b521ff4e82a48cf4852d56e81942", "sha256": "11c39f818a39fbeb2fd759ff36acd9dee4f923960d2519a63d6e91ecaa2cb97c" }, "downloads": -1, "filename": "snaptastic-0.0.5.zip", "has_sig": false, "md5_digest": "9494b521ff4e82a48cf4852d56e81942", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27148, "upload_time": "2012-10-12T10:08:04", "url": "https://files.pythonhosted.org/packages/e5/5a/4334108a6d157427a7ad8f1a533ba98af7a87cab7c24a0e91121557d36e7/snaptastic-0.0.5.zip" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "6406a09e59b88a2b146e0d8b8db2c594", "sha256": "254807a84fa425ba171617d918e17603b1cda435532a4cb8d3db3708a93a82f7" }, "downloads": -1, "filename": "snaptastic-0.0.6.zip", "has_sig": false, "md5_digest": "6406a09e59b88a2b146e0d8b8db2c594", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27177, "upload_time": "2012-10-12T11:54:00", "url": "https://files.pythonhosted.org/packages/f3/31/cfc11f61fd91d33567cbdb97bee4f9eda2401eff1615eb3b3a1ecea71e70/snaptastic-0.0.6.zip" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "8b19a6f23aad606d16aa8e26133986d1", "sha256": "9d8fbd345c207da868b1362bf078768bbdbd61d6f606320b130709204210fd11" }, "downloads": -1, "filename": "snaptastic-0.0.7.zip", "has_sig": false, "md5_digest": "8b19a6f23aad606d16aa8e26133986d1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27177, "upload_time": "2012-10-12T11:58:54", "url": "https://files.pythonhosted.org/packages/6a/55/630ba0e66f85ffe4dc5bbfa1e9c29e12d929b6a7f927c73f549ec4cff865/snaptastic-0.0.7.zip" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "466507a25ff93fc01c4384760c3eee9f", "sha256": "1ab3183ddf67723a79d2634782ea425d7c56af0319aaf08924ecb145415b6018" }, "downloads": -1, "filename": "snaptastic-0.0.8.zip", "has_sig": false, "md5_digest": "466507a25ff93fc01c4384760c3eee9f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28681, "upload_time": "2012-10-12T12:01:00", "url": "https://files.pythonhosted.org/packages/13/db/f1b680a81eeba2abb699f67a94a7bff9e5c0f42007742c7403612bc0db1c/snaptastic-0.0.8.zip" } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "91657ff1dcc1b30b2728bea7ed447987", "sha256": "033dde2894a4f4f99c2e3372ee4ad0520c90d0d9f3cfa8e87b104dce989add8e" }, "downloads": -1, "filename": "snaptastic-0.0.9.zip", "has_sig": false, "md5_digest": "91657ff1dcc1b30b2728bea7ed447987", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28687, "upload_time": "2012-10-12T12:02:16", "url": "https://files.pythonhosted.org/packages/67/be/ad3ede82049c36a01088250ecde91879435e9d6a746c5a2e3a4251fedb43/snaptastic-0.0.9.zip" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "79cdb0eaa937d91e1772ab83bb74ef9e", "sha256": "cd4c527544cb6df75572bdab5b62caa06dcea1e2cc6ebeffc88b6433947bb1f9" }, "downloads": -1, "filename": "snaptastic-0.1.0.zip", "has_sig": false, "md5_digest": "79cdb0eaa937d91e1772ab83bb74ef9e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31496, "upload_time": "2012-10-17T07:47:02", "url": "https://files.pythonhosted.org/packages/46/a6/bb0c563f293971e4ca8c4d8a6a47b3780c52cf88662208f5b977825c3e42/snaptastic-0.1.0.zip" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "7ac02b53eedc997642f8a9cd4b0666e5", "sha256": "e19beda4e2eb0d45105c1580c4b039167f9688a3f2c17aefdd765e222f830449" }, "downloads": -1, "filename": "snaptastic-0.1.1.zip", "has_sig": false, "md5_digest": "7ac02b53eedc997642f8a9cd4b0666e5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33102, "upload_time": "2012-10-18T10:25:37", "url": "https://files.pythonhosted.org/packages/7d/4c/1cb90a06d495afc3f8b2375540238f77083a6ecdcb1bcdac5abab0d6eda6/snaptastic-0.1.1.zip" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "6898dce25213abc194b9355da637d30b", "sha256": "b392f7c07da34d053062655d0baadcb07b3d94332f577f031299a0062908eac3" }, "downloads": -1, "filename": "snaptastic-0.1.2.zip", "has_sig": false, "md5_digest": "6898dce25213abc194b9355da637d30b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33143, "upload_time": "2012-10-19T11:31:04", "url": "https://files.pythonhosted.org/packages/d2/d0/13b7d6428d7ddd48a2ff9e60ab5d6ce9f7b87f5879df470cc5e1768b16cf/snaptastic-0.1.2.zip" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "16f5d4c0d7a3a219e70742a7f626464b", "sha256": "73ca466026adc155e81ddfd856a55664aad80c8ce75a4f51825de72577790fd5" }, "downloads": -1, "filename": "snaptastic-0.1.3.zip", "has_sig": false, "md5_digest": "16f5d4c0d7a3a219e70742a7f626464b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33376, "upload_time": "2012-10-22T10:46:10", "url": "https://files.pythonhosted.org/packages/45/0a/a74a03a88c8fbd1cd9a7a77e754fddee03d58f18ce98167bbe9424b9f6e3/snaptastic-0.1.3.zip" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "9dbd785830493da8c0b6ed5506ffa182", "sha256": "68d1fdbd159b9a2ae8d02a6db8eb8ae85a79e4c8bac635e7bb67cf96f4344fa6" }, "downloads": -1, "filename": "snaptastic-0.1.4.zip", "has_sig": false, "md5_digest": "9dbd785830493da8c0b6ed5506ffa182", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33332, "upload_time": "2012-10-22T12:15:22", "url": "https://files.pythonhosted.org/packages/f2/0a/a16274b64e6a8832998c3ad1625a0dcd2e22060cc505f59d19ddf9b8126a/snaptastic-0.1.4.zip" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "e53ac32a2ab1e17700b3bac6fa3a2de0", "sha256": "2c0d6d7535434a0d8a4139a92563a45007b2b9a5954f460f6bf8291151059f76" }, "downloads": -1, "filename": "snaptastic-0.1.5.zip", "has_sig": false, "md5_digest": "e53ac32a2ab1e17700b3bac6fa3a2de0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33326, "upload_time": "2012-10-22T12:16:27", "url": "https://files.pythonhosted.org/packages/d9/ba/d14e3b5b31664d4294e034ec4a89a49bf2d72dea70226cebb0f0ffeca047/snaptastic-0.1.5.zip" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "783615891b6aaa85725b3dbd775a9fe9", "sha256": "14092015873391ec66f4c985e62dde2c779c65dfc6ea44160dd7583365a6a352" }, "downloads": -1, "filename": "snaptastic-0.1.6.zip", "has_sig": false, "md5_digest": "783615891b6aaa85725b3dbd775a9fe9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34924, "upload_time": "2012-11-23T14:54:34", "url": "https://files.pythonhosted.org/packages/32/7b/9c79d2b35aed1a7069835c43c04782a95f8d14530e2a72255599265066bf/snaptastic-0.1.6.zip" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "167051cb3b32c318c3dd017946f85e7a", "sha256": "53569d59bad7e2e401da1036aafdddb14a9d7ff38ec0fe170998eda4426ffe72" }, "downloads": -1, "filename": "snaptastic-0.2.zip", "has_sig": false, "md5_digest": "167051cb3b32c318c3dd017946f85e7a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35239, "upload_time": "2012-12-12T15:27:24", "url": "https://files.pythonhosted.org/packages/cb/50/1f8160fdc6e99fd4deb0a9d333cee662e917ed87e41f577f7b8922628709/snaptastic-0.2.zip" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "b6b377b6810b7f42bb85227d3e729379", "sha256": "2092ca474e7339d0cf06a388c48f9a725fe145ae42fb175edf4f82295b9ca760" }, "downloads": -1, "filename": "snaptastic-0.2.1.zip", "has_sig": false, "md5_digest": "b6b377b6810b7f42bb85227d3e729379", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35594, "upload_time": "2012-12-12T17:08:54", "url": "https://files.pythonhosted.org/packages/87/f5/96d4f7fb246bc89af96d793f371f696f59652adfdb55afe2901ded8ff269/snaptastic-0.2.1.zip" } ], "0.2.10": [ { "comment_text": "", "digests": { "md5": "c8dd7f95610655f54a619daa164cd053", "sha256": "8c64f30f3c92d0a91dced6e4dfd10a7f6c49116429238e6c5b3055d921aff8f4" }, "downloads": -1, "filename": "snaptastic-0.2.10.zip", "has_sig": false, "md5_digest": "c8dd7f95610655f54a619daa164cd053", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39821, "upload_time": "2013-08-26T13:42:45", "url": "https://files.pythonhosted.org/packages/40/71/ea58e842e302b3f01f964d9b46c45332310cdbf6f98ac2ba9dc2bbf273ff/snaptastic-0.2.10.zip" } ], "0.2.11": [ { "comment_text": "", "digests": { "md5": "b3a9405d6e52aa4de4a62816e4ecb361", "sha256": "787558f22292b87992fb6f48886713a324dd67a4fe8b9153c3fef38e926e916d" }, "downloads": -1, "filename": "snaptastic-0.2.11.zip", "has_sig": false, "md5_digest": "b3a9405d6e52aa4de4a62816e4ecb361", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39881, "upload_time": "2013-08-26T14:15:31", "url": "https://files.pythonhosted.org/packages/cd/b9/8513dc19128a83d2735f772b4e18e1ead99f415dd389fb5077739345283b/snaptastic-0.2.11.zip" } ], "0.2.12": [ { "comment_text": "", "digests": { "md5": "d2043559e5d79b7e2685f962c033763a", "sha256": "e19550bd2f04f61c7fd1ab764ed5d0a730fc464e8324f74260dd50ed65ed744c" }, "downloads": -1, "filename": "snaptastic-0.2.12.zip", "has_sig": false, "md5_digest": "d2043559e5d79b7e2685f962c033763a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39886, "upload_time": "2013-08-26T14:22:02", "url": "https://files.pythonhosted.org/packages/f3/29/690b45783e38375b96657a8a528c637911742012c0e021f51cd9f4483b1b/snaptastic-0.2.12.zip" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "9e752095cf729620db15a23b92ec91ba", "sha256": "7a4a907ee1f2caa91dbe7c1b253ad2e1391164d1385128aa66141e7f0291d6df" }, "downloads": -1, "filename": "snaptastic-0.2.2.zip", "has_sig": false, "md5_digest": "9e752095cf729620db15a23b92ec91ba", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35577, "upload_time": "2013-01-17T13:20:19", "url": "https://files.pythonhosted.org/packages/f4/a6/f1b66f598d515aee3e4a532f53160b20e593e7dd44197f422a4628c5b03b/snaptastic-0.2.2.zip" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "dbef65ff0da20410675d3db975f06348", "sha256": "025b878973a1a2a72b7c8f4fdc78bcd60ae08c62625f787268836619262e4a64" }, "downloads": -1, "filename": "snaptastic-0.2.3.zip", "has_sig": false, "md5_digest": "dbef65ff0da20410675d3db975f06348", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37793, "upload_time": "2013-04-10T10:01:43", "url": "https://files.pythonhosted.org/packages/82/6e/3f34fa46effdb36f4c0967cc3bc3ca23f700b2a4b373fa6de115da264633/snaptastic-0.2.3.zip" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "e897bcb9936bb6090d1c00226d2f8a4b", "sha256": "fede0e9274af38a95c3fd7b477fcc20524bb989776c8675c04b1c192adfe8b09" }, "downloads": -1, "filename": "snaptastic-0.2.4.zip", "has_sig": false, "md5_digest": "e897bcb9936bb6090d1c00226d2f8a4b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37860, "upload_time": "2013-04-10T10:12:32", "url": "https://files.pythonhosted.org/packages/f1/11/c8a91299a9cdfea09a70fd94e7d1f132ba12d44ab3e568632d787c4a514b/snaptastic-0.2.4.zip" } ], "0.2.6": [ { "comment_text": "", "digests": { "md5": "d8a0e023932dcbb3ce3f2aa28cc5519f", "sha256": "fd9ebe8057ac7d4a752d392531a27f82eae5ff4017a02ebd7fcc483703c7f511" }, "downloads": -1, "filename": "snaptastic-0.2.6.zip", "has_sig": false, "md5_digest": "d8a0e023932dcbb3ce3f2aa28cc5519f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39415, "upload_time": "2013-07-05T09:50:47", "url": "https://files.pythonhosted.org/packages/93/3f/72c327b259386b76d4da13eb37a23587bdedb610d6950067e124f87a2909/snaptastic-0.2.6.zip" } ], "0.2.7": [ { "comment_text": "", "digests": { "md5": "cfba27f688537d77564f3cf548a11d50", "sha256": "6bf265237ab9929be03033274d20a41b61bcb4565890451e6b10375bf6754bf5" }, "downloads": -1, "filename": "snaptastic-0.2.7.zip", "has_sig": false, "md5_digest": "cfba27f688537d77564f3cf548a11d50", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39397, "upload_time": "2013-08-26T10:46:18", "url": "https://files.pythonhosted.org/packages/07/8a/51130acf237d257aa6598f52d5c9caab1d0116340fe9b0f38e682c0526ce/snaptastic-0.2.7.zip" } ], "0.2.8": [ { "comment_text": "", "digests": { "md5": "5007fadafb19e03033bf08f1d476f65f", "sha256": "6b5d3e61b92c063c3c4fd9b584567fd48825b329ce4a49fd27d600b5ffbdfd6a" }, "downloads": -1, "filename": "snaptastic-0.2.8.zip", "has_sig": false, "md5_digest": "5007fadafb19e03033bf08f1d476f65f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39397, "upload_time": "2013-08-26T12:55:07", "url": "https://files.pythonhosted.org/packages/47/ed/29142410c609c5d9cb90aaeba5bad7ee64c68c83c23faf9cf2d6e64941a3/snaptastic-0.2.8.zip" } ], "0.2.9": [ { "comment_text": "", "digests": { "md5": "3985ba80da237d4fccb782b212d3e539", "sha256": "fd63d2f00c614eed2bd1c83f2763ec24e1a2e372d2ae32cdc8a6ef5df8f3e924" }, "downloads": -1, "filename": "snaptastic-0.2.9.zip", "has_sig": false, "md5_digest": "3985ba80da237d4fccb782b212d3e539", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39829, "upload_time": "2013-08-26T13:18:52", "url": "https://files.pythonhosted.org/packages/c5/d2/ec8cadf8344c642163a33fe0484f2add22ce4ae45f73e41a27f4c31ba053/snaptastic-0.2.9.zip" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "d2043559e5d79b7e2685f962c033763a", "sha256": "e19550bd2f04f61c7fd1ab764ed5d0a730fc464e8324f74260dd50ed65ed744c" }, "downloads": -1, "filename": "snaptastic-0.2.12.zip", "has_sig": false, "md5_digest": "d2043559e5d79b7e2685f962c033763a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39886, "upload_time": "2013-08-26T14:22:02", "url": "https://files.pythonhosted.org/packages/f3/29/690b45783e38375b96657a8a528c637911742012c0e021f51cd9f4483b1b/snaptastic-0.2.12.zip" } ] }