{ "info": { "author": "Asko Soukka", "author_email": "asko.soukka@iki.fi", "bugtrack_url": null, "classifiers": [ "Framework :: Plone", "Programming Language :: Python" ], "description": ".. figure:: https://github.com/collective/sauna.reload/raw/gh-pages/saunasprint_logo.jpg\n\n*sauna.reload: so that you can finish your Plone development today and relax in\nsauna after calling it a day*\n\n.. contents:: :local:\n\n\nIntroduction\n============\n\n``sauna.reload`` is a developer tool which restarts Plone and reloads your changed source\ncode every time you save a file. The restart is optimized for speed\nand happens much faster than a normal start up process.\n\n* Edit your code\n* Save\n* Go to a browser and hit *Refresh* |->| your latest changes are active\n\nIt greatly simplifies your Plone development workflow and gives back the\nagility of Python.\n\nIt works with any code.\n\n``sauna.reload`` works on OSX and Linux with Plone 4.0 and 4.1. In theory\nworks on Windows, but no one has looked into that yet.\n\n.. |->| unicode:: U+02794 .. thick rightwards arrow\n\n\nUser comments\n-------------\n\n\"I don't want to use sauna.reload as I can knit a row while I restart ...\"\n\n\"no more do I start a 5 minute cigarette every time Plone restarts for 30\nseconds... ok wait, this kind of joy leads to poetry, I'm gonna stop here.\"\n\n\nInstallation\n============\n\nHere are brief installation instructions.\n\n\nPrerequisitements\n-----------------\n\nIn order to take the advantage of ``sauna.reload``\n\n* You know how to develop your own Plone add-ons and basics of buildout folder\n structure\n\n* You know UNIX command line basics\n\n* You know how to run buildout\n\n* You are running Linux or OSX operating system\n\nNo knowledge for warming up sauna is needed in order to use this product.\n\nInstalling buildout configuration\n---------------------------------\n\nThe recommended installation configuration is to use ZEO server + 1 client for the development.\nThis method is valid for **Plone 4.1 and higher**. You can use ``sauna.reload``\nwithout separate ZEO database server, using ``instance`` command,\nbut\n`in this case you'll risk database corruption on restarts `_.\n\nBelow is the recommended approach how to enable ``sauna.reload`` for your\ndevelopment environment. However, since this product is only for development\nuse the data loss should not be a big deal.\n\nAdd ``sauna.reload`` to your ``buildout.cfg`` file:\n\n``buildout.cfg``::\n\n [buildout]\n eggs +=\n sauna.reload\n\n # This section is either client1 / instance depending\n # on your buildout\n [instance]\n zope-conf-additional = %import sauna.reload\n\nOSX notes\n+++++++++\n\nIf you are using vim (or macvim) on OSX, you must disable vim's writebackups\nto allow WatchDog to see your modifications\n(otherwise vim will technicallyj create a new file on each save and WatchDog\ndoesn't report the modification back to ``sauna.reload``).\n\nSo, Add the following to the end of your ``.vimrc``::\n\n set noswapfile\n set nobackup\n set nowritebackup\n\nSimilar issues have been reported with some other OSX-editors.\nTips and fixes for these are welcome.\n\n\nUbuntu / Debian / Linux notes\n+++++++++++++++++++++++++++++\n\nYou might need to raise your open files *ulimit* if you are operating on the\nlarge set of files, both hard and soft limit.\n\n* http://posidev.com/blog/2009/06/04/set-ulimit-parameters-on-ubuntu/\n\n104000 is a known good value.\n\nIf your *ulimit* is too low you'll get very misleading *OSError: No space left\non device*.\n\n\nUsage: start Plone in reload enabled manner\n===========================================\n\nTo start Plone with reload functionality you need\nto give special environment variable ``RELOAD_PATH``\nfor your client1 command::\n\n # Start database server\n bin/zeoserver start\n\n # Start Plone with reload enabled\n RELOAD_PATH=src bin/client1 fg\n\nOr if you want to optimize load speed you can directly specify only some of\nyour development products::\n\n RELOAD_PATH=src/my.product:src/my.another.product bin/client1 fg\n\n.. warning:: If other products depend on your product, e.g CMFPlone\n dependencies, sauna.reload does not kick in early enough and the reload does\n not work.\n\nWhen reload is active you should see something like this in your console\nwhen Zope starts up::\n\n 2011-08-10 13:28:59 INFO sauna.reload Starting file monitor on /Users/moo/code/x/plone4/src\n 2011-08-10 13:29:02 INFO sauna.reload We saved at least 29.8229699135 seconds from boot up time\n 2011-08-10 13:29:02 INFO sauna.reload Overview available at: http://127.0.0.1:8080/@@saunareload\n 2011-08-10 13:29:02 INFO sauna.reload Fork loop starting on process 14607\n 2011-08-10 13:29:02 INFO sauna.reload Booted up new new child in 0.104816913605 seconds. Pid 14608\n\n... and when you save some file in ``src`` folder::\n\n 2011-08-10 13:29:41 INFO SignalHandler Caught signal SIGINT\n 2011-08-10 13:29:41 INFO Z2 Shutting down\n 2011-08-10 13:29:42 INFO SignalHandler Caught signal SIGCHLD\n 2011-08-10 13:29:42 INFO sauna.reload Booted up new new child in 0.123936891556 seconds. Pid 14609\n\nCTRL+C should terminate Zope normally. There might be stil some kinks and error\nmessages with shutdown.\n\n.. note:: Your reloadable eggs must be included using z3c.autoinclude\n mechanism.\n\nOnly eggs loaded through `z3c.autoinclude\n`_ can be reloaded.\nMake sure you don't use buildout.cfg ``zcml =`` directive for your eggs or\n``sauna.reload`` silently ignores changes.\n\n\nManual reload\n-------------\n\nThere is also a view on Zope2 root from which it is possible to manually reload\ncode::\n\n http://127.0.0.1:8080/@@saunareload\n\n\nDebugging with ``sauna.reload``\n===============================\n\nRegular ``import pdb; pdb.set_trace()`` will work just fine with\n``sauna.reload``\nand using ``ipdb`` as a drop-in for ``pdb`` will work fine as well.\nWhen reloads happen while in either pdb or ipdb, the debugger will get\nkilled.\nTo avoid losing your terminal echo, because of reload unexpectedly\nkilling your debugger, you may add the following to your ``~/.pdbrc``::\n\n import termios, sys\n term_fd = sys.stdin.fileno()\n term_echo = termios.tcgetattr(term_fd)\n term_echo[3] = term_echo[3] | termios.ECHO\n term_result = termios.tcsetattr(term_fd, termios.TCSADRAIN, term_echo)\n\nAs ipdb extends pdb, this configuration file will also work to restore the\nterminal echo.\n\n``sauna.reload`` also should work nicely with `PdbTextMateSupport\n`_ and `PdbSublimeTextSupport\n`_. Unfortunately, we\nhaven't seen it working with ``vimpdb`` yet.\n\n\nBackground\n==========\n\n``sauna.reload`` is an attempt to recreate ``plone.reload`` without the issues\nit has. Like being unable to reload new grokked views or portlet code. This\nproject was started on Plone Sauna Sprint 2011. There for the name,\n``sauna.reload``.\n\n``sauna.reload`` does reloading by using a fork loop. So actually it does not\nreload the code, but restarts small part of Zope2. That's why it can it reload\nstuff ``plone.reload`` cannot.\n\nIt does following on Zope2 startup:\n\n1. Defers loading of your development packages by hooking into PEP 302 loader\n and changing their ``z3c.autoinclude`` target module (and monkeypatching\n fiveconfigure/metaconfigure for legacy packages).\n\n2. Starts a watcher thread which monitors changes in your development py-files\n\n3. Stops loading of Zope2 in ``zope.processlifetime.IProcessStarting`` event by\n stepping into a infinite loop; Just before this, tries to load all\n non-developed dependencies of your development packages (resolved by\n ``z3c.autoinclude``)\n\n4. It forks a new child and lets it pass the loop\n\n5. Loads all your development packages invoking ``z3c.autoinclude`` (and\n fiveconfigure/metaconfigure for legacy packages). This is fast!\n\n6. And now every time when the watcher thread detects a change in development\n files it will signal the child to shutdown and the child will signal\n the parent to fork a new child when it is just about to close itself\n\n7. Just before dying, the child saves ``Data.fs.index`` to help the new child\n to see the changes in ZODB (by loading the saved index)\n\n8. GOTO 4\n\nInternally ``sauna.reload`` uses\n`WatchDog `_\nPython component for monitoring file-system change events.\n\nSee also `Ruby guys on fork trick `_.\n\n\nEvents\n======\n\n.. note:: The following concerns you only if your code needs to react specially\n to reloads (clear caches, etc.)\n\n``sauna.reload`` emits couple of events during reloading.\n\n**sauna.reload.events.INewChildForked**\n Emited immediately after new process is forked. No development packages have\n been yet installed. Useful if you want to do something before your code gets\n loaded. Note that you cannot listen this event on a package that is marked\n for reloading as it is not yet installed when this is fired.\n\n**sauna.reload.events.INewChildIsReady**\n Emitted when all the development packages has been installed to the new\n forked child. Useful for notifications etc.\n\n\nLimitations\n===========\n\n``sauna.reload`` supports only Plone >= 4.0 for FileStorage and Plone >= 4.1\nfor ZEO ClientStorage.\n\n.. Does not work with overrides.zcml\n.. -----------------------------------\n..\n.. If your package uses ``overrides.zcml`` configuration mechanism\n.. ``sauna.reload`` cannot handle it. This is because ``overrides.zcml``\n.. loading kicks in too early and ``sauna.reload`` cannot affect it.\n..\n.. The result is that all code imported through ``overrides.zcml``\n.. becomes non-reloadable.\n..\n.. A workaround is to arrange your code layout so that you keep\n.. overrider Python in separate modules and do not make imports\n.. from your main code base there.\n..\n.. XXX: This is not true. Sauna.reload explicitly loads overrides.zcml\n.. using includePlugins-directive of z3c.autoinclude. There must be an another\n.. reason behind this behavior.\n\nDoes not handle dependencies\n----------------------------\n\n``sauna.reload`` has a major pitfall. Because it depends on deferring loading\nof packages to be watched and reloaded, also every package depending on those\npackages should be defined to be reloaded (in ``RELOAD_PATH``). And\n``sauna.reload`` doesn't resolve those dependencies automatically!\n\nForces loading all dependencies\n-------------------------------\n\nAn another potential troublemaker is that ``sauna.reload`` performs implicit\n```` for every package in ``RELOAD_PATH``\n(to preload dependencies for those packages to speed up the reload).\n\nThis may break up some packages.\n\nDoes not work with core packages\n--------------------------------\n\nWe are sorry that ``sauna.reload`` may not work for everyone. For example,\nreloading of core Plone packages could be tricky, if not impossible, because\nmany of them are explicitly included by ``configure.zcml`` of CMFPlone and are\nnot using ``z3c.autoinclude`` at all. You would have to remove the dependency\nfrom CMFPlone for development to make it work...\n\nProduct installation order is altered\n-------------------------------------\n\nAlso because the product installation order is altered (by all the above) you\nmay find some issue if your product does something funky on installation or at\nimport time.\n\nPlease report any other issues at\n`Github issue tracker `_.\n\n\nTroubleshooting\n===============\n\nReport all issues on `GitHub `_.\n\n\nMy code does not reload properly\n--------------------------------\n\nYou'll see reload process going on in the terminal, but your code is still not\nloaded.\n\nYou should see following warnings with zcml-paths from your products::\n\n 2011-08-13 09:38:12 ERROR sauna.reload.child Cannot reload\n src/sauna.reload/sauna/reload/configure.zcml.\n\nMake sure your code is hooked into Plone through\n`z3c.autoinclude `_ and NOT\nusing explicit ``zcml = directive`` in buildout.cfg.\n\n* Retrofit your eggs with autoinclude support if needed\n* Remove zcml = lines for your eggs in buildout.cfg\n* Rerun buildout (remember bin/buildout -c development.cfg)\n* Restart Plone with sauna.reload enabled\n\n\nI want to exclude my ``meta.zcml`` from reload\n----------------------------------------------\n\nIt's possible to manually exclude configuration files from reloading by forcing\nthem to be loaded before forkloop in a custom ``site.zcml``. Be aware, that\nwhen ``site-zcml`` option is used, ``zope2instance`` ignores ``zcml`` and\n``zcml-additional`` options.\n\nDefine a custom ``site.zcml`` in your ``buildout.cfg`` with::\n\n [instance]\n recipe = plone.recipe.zope2instance\n ...\n site-zcml =\n \n \n \n \n\n \n \n\n \n \n \n \n\n\nI want to exclude ALL ``meta.zcml`` from reload\n-----------------------------------------------\n\nSure. See the tip above and use the snippet below instead::\n\n [instance]\n recipe = plone.recipe.zope2instance\n ...\n site-zcml =\n \n \n \n \n\n \n \n\n \n \n \n \n\n\nsauna.reload is not active - nothing printed on console\n-------------------------------------------------------\n\nCheck that your buildout.cfg includes\n``zope-conf-additional`` line.\n\nIf using separate ``development.cfg`` make sure you run your buildout using\nit::\n\n bin/buildout -c development.cfg\n\n\nSource\n======\n\nOn `GitHub `_.\n\n\nCredits\n=======\n\n* Esa-Matti Suuronen [esa-matti aet suuronen.org]\n* Asko Soukka [asko.soukka aet iki.fi]\n* Mikko Ohtamaa (idea, doccing)\n* Vilmos Somogyi (logo). The logo was originally the logo of Sauna Sprint 2011\n and it was created by Vilmos Somogyi.\n* Martijn Pieters for teaching us PEP 302 -loader trick at Sauna Sprint 2011.\n* `Yesudeep Mangalapilly `_ for creating\n ``WatchDog`` component and providing support for Sauna Sprint team using it\n\nThanks to all happy hackers on Sauna Sprint 2011!\n\n300 kg of beer was consumed to create this package (at least). Also several\nkilos of firewood, one axe, one chainsaw and one boat.\n\nWe still need testers and contributors. You are very welcome!\n\nChangelog\n=========\n\n0.5.5 (2016-02-24)\n------------------\n\n- Add another workaround for watchdog raising annoying KeyErrors\n [datakurre]\n\n0.5.4 (2016-02-24)\n------------------\n\n- Add workaround for watchdog raising annoying KeyErrors\n [datakurre]\n\n0.5.3 (2014-10-19)\n------------------\n\n- Fix issue where in Zope version >= 2.13.19 the storage is explicitly closed\n on shutdown. This caused an attribute error on reload, since the _rpc_mgr was\n None. Test for is_connected before closing connection and cache.\n [sunew]\n\n0.5.2 (2014-10-18)\n------------------\n\n- Log 'cannot reload' as warning instead of error to avoid triggering\n postmortem debugging\n [sunew]\n\n0.5.1 (2013-02-20)\n------------------\n\n- Fix IOError when sauna.reload is imported for a forked process\n [datakurre]\n\n0.5.0 (2012-12-28)\n------------------\n\n- Prepopulate platform.uname, before it gets lost in the stack. All calls using\n platform.uname() values would fail with an IOError(10).\n [esteele]\n- Fixed reloadings of Products-namespace eggs on Plone 4.1 and Zope 2.13\n [miohtama]\n- Log out the reason what killed the child\n [miohtama]\n\n0.4.3 (2012-04-25)\n------------------\n\n- Updated README about ZEO-client support to be limited to Plone >= 4.1.\n\n0.4.2 (2012-04-24)\n------------------\n\n- Fixed BlogStorage-support (regression from 0.3.3).\n [datakurre]\n\n0.4.0 (2012-04-22)\n------------------\n\n- Added log-messages about successfully reloaded configuration files.\n Closes https://github.com/epeli/sauna.reload/issues/11\n [datakurre]\n\n- Added support for reloading a ZEO-client on Plone >= 4.1.\n Fixes https://github.com/collective/sauna.reload/issues/1\n [datakurre]\n\n- Added support to *p.a.themingplugins* when *p.a.theming* is installed.\n Fixes https://github.com/epeli/sauna.reload/issues/15\n [datakurre]\n\n- Fixed an issue of *zope2.Public* not mapped to *zope.Public* when confiuring\n products during reload.\n Fixes https://github.com/collective/sauna.reload/issues/2\n [datakurre]\n\n- Fixed to depend on *watchdog* >= 0.6.0 to support OSX *out-of-the-box*.\n [datakurre]\n\n0.3.3 (2011-10-17)\n------------------\n\n- Fixed an issue in initializing more than one reloaded Archetype products.\n\n0.3.2 (2011-08-21)\n------------------\n\n- Fixed to work better with PdbSublimeText/TextMateSupport.\n- README-updates (mainly for exluding zcmls from reload).\n\n0.3.1 \u2013 2011-08-19\n------------------\n\n- Support for Five-initialized products (e.g. Archetypes) on Plone 4.1.\n- Licensed under ZPL.\n\n0.3.0 (2011-08-12)\n------------------\n\n- Support Plone 4.1\n- Heavily edited readme [miohtama]\n- Show nice error log message if product installation failed to defer ie. is\n not reloadable.\n\n0.2.1 (2011-08-03)\n------------------\n\n- Add INewChildIsReady event and move INewChildForked event\n- Remove overly used prints and use logging\n- Can now reload __init__.py from package root\n\n0.2.0 (2011-08-04)\n------------------\n\n- Support for Five-initialized products (e.g. Archetypes).\n- Browser View for manual reloading\n- Emit INewChildForked events\n- Many bug fixes\n\n0.1.1 (2011-08-03)\n------------------\n\n- Added missing egg description.\n- Added forgotten reload for localizations.\n- Prefixed commands in README with $.\n\n0.1.0 (2011-08-03)\n------------------\n\n- First experimental release.", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/collective/sauna.reload", "keywords": "plone reload zope2 restart developer", "license": "ZPL", "maintainer": "", "maintainer_email": "", "name": "sauna.reload", "package_url": "https://pypi.org/project/sauna.reload/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/sauna.reload/", "project_urls": { "Homepage": "http://github.com/collective/sauna.reload" }, "release_url": "https://pypi.org/project/sauna.reload/0.5.5/", "requires_dist": null, "requires_python": "", "summary": "Instant code reloading for Plone using a fork loop", "version": "0.5.5" }, "last_serial": 1973396, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "70523c5b048999e18621a1da93b3c9c5", "sha256": "4343ad8e471761749235ad8842ea46716ac79798fe4a966f971dd46c993bd3e9" }, "downloads": -1, "filename": "sauna.reload-0.1.0.zip", "has_sig": false, "md5_digest": "70523c5b048999e18621a1da93b3c9c5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29485, "upload_time": "2011-08-03T13:13:26", "url": "https://files.pythonhosted.org/packages/7f/6c/d56ab2230abdc050dd3cebe8d0ced80ae931cc841bf367c6d52aabafc65f/sauna.reload-0.1.0.zip" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "e7d4291a4f74fccf0d1c19ee3260af30", "sha256": "4c45ed2ef2c7f1779ff1e2f865a418ef453ae221cb8edd2bd58fb7d6a0260648" }, "downloads": -1, "filename": "sauna.reload-0.1.1.zip", "has_sig": false, "md5_digest": "e7d4291a4f74fccf0d1c19ee3260af30", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29765, "upload_time": "2011-08-03T14:53:38", "url": "https://files.pythonhosted.org/packages/d0/32/e51eae76435687f8a304bc4644f5aad5fa0e131c2f2890e5ffa9e4233488/sauna.reload-0.1.1.zip" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "08f63150b14b545a5400afaaf89909e0", "sha256": "eba7357796f7e7e35fbe45fcf04e41c5828cce39064e4ab81b2da8640c547d7b" }, "downloads": -1, "filename": "sauna.reload-0.2.0.zip", "has_sig": false, "md5_digest": "08f63150b14b545a5400afaaf89909e0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35696, "upload_time": "2011-08-04T17:19:33", "url": "https://files.pythonhosted.org/packages/2b/f6/2d34365663daab24898c3b030c6f394759d9150488dbf0e44ebc856b70f9/sauna.reload-0.2.0.zip" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "ece29b6ed64115ddaec0236fd45b51f8", "sha256": "fd157b3f56cd6e52fe59997a722109309e2fcbe080fd7b95c542bb5986220d8c" }, "downloads": -1, "filename": "sauna.reload-0.2.1.zip", "has_sig": false, "md5_digest": "ece29b6ed64115ddaec0236fd45b51f8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38163, "upload_time": "2011-08-05T15:53:42", "url": "https://files.pythonhosted.org/packages/b3/c8/4983bd0f5008071f3a09c38786aba541815afbe3a7adf47e70ae34376878/sauna.reload-0.2.1.zip" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "d0c312a4974a921f70b9c7c0f9aec615", "sha256": "aa5ebdf7e9dec9f256675d47f33e85eee72368dc3a5459392410f3a41b76a832" }, "downloads": -1, "filename": "sauna.reload-0.3.0.zip", "has_sig": false, "md5_digest": "d0c312a4974a921f70b9c7c0f9aec615", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 46071, "upload_time": "2011-08-12T15:27:57", "url": "https://files.pythonhosted.org/packages/e1/6c/f9896aea7b4ea3984bb459857643dc9f70d85d5f02845ae51df5743ce20c/sauna.reload-0.3.0.zip" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "13ca1990f46a68de7bdd94f65f221678", "sha256": "1a070770978fb906e13641f982e381c49ae325c510919405136d532b8878a92d" }, "downloads": -1, "filename": "sauna.reload-0.3.1.zip", "has_sig": false, "md5_digest": "13ca1990f46a68de7bdd94f65f221678", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38972, "upload_time": "2011-08-19T14:16:07", "url": "https://files.pythonhosted.org/packages/79/11/ab769866a0a8451a2ed7e54e5c4266955476e5af6fde62612f936edfa627/sauna.reload-0.3.1.zip" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "6c78575ca6fbb314efcf45cc5b9ab0b5", "sha256": "f82c2b17cbffd749a04aa356f32e07479f0c69a68d231d48f5ea465cbbc995a1" }, "downloads": -1, "filename": "sauna.reload-0.3.2.zip", "has_sig": false, "md5_digest": "6c78575ca6fbb314efcf45cc5b9ab0b5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 41422, "upload_time": "2011-08-21T10:11:52", "url": "https://files.pythonhosted.org/packages/b5/46/4b1f15886e634da042883c7c012b85375adefe8d883dfc16586accdae409/sauna.reload-0.3.2.zip" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "9776c4ad9a18e46f806189fcc6ced37a", "sha256": "ba102c8f6815ec06b8c6ccbeda1d1ac9f24cfad8f539cfd1bcadef6f7798f396" }, "downloads": -1, "filename": "sauna.reload-0.3.3.zip", "has_sig": false, "md5_digest": "9776c4ad9a18e46f806189fcc6ced37a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 41857, "upload_time": "2011-10-17T16:36:43", "url": "https://files.pythonhosted.org/packages/35/6d/dd54a08dba5c06f5d51e5a8c5cafba5cc0c16f4cde0d1a9159b6994c1b4b/sauna.reload-0.3.3.zip" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "11b44dd6cbf3b25e5eea7e5152e92e84", "sha256": "ee040b285c811533dfa7227db3496ec9de2748e6c705d0fe8560df920b6b09ba" }, "downloads": -1, "filename": "sauna.reload-0.4.0.zip", "has_sig": false, "md5_digest": "11b44dd6cbf3b25e5eea7e5152e92e84", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 46217, "upload_time": "2012-04-22T11:57:41", "url": "https://files.pythonhosted.org/packages/c8/ee/4ab1132cfaab5fac01efe0e62904e1dbe8ce571ceac3cddb0bf705e59861/sauna.reload-0.4.0.zip" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "9a25a5f07d4ad2353330c5321c7f1318", "sha256": "bb01206e82a5b312e4a54492ccdd58fc2b21366201230d300cfb18a2d63b2594" }, "downloads": -1, "filename": "sauna.reload-0.4.1.zip", "has_sig": false, "md5_digest": "9a25a5f07d4ad2353330c5321c7f1318", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 46379, "upload_time": "2012-04-23T16:50:53", "url": "https://files.pythonhosted.org/packages/8c/f6/8b957352510c9f979564f6d31142a1482a0eaafbb22983c891065516a324/sauna.reload-0.4.1.zip" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "5118a8b7d7307cb25b591ee0e2d99a73", "sha256": "27fe7eeb7bdf2172b36a687e5863acbacb210540cd369e353867afe1e02b52b2" }, "downloads": -1, "filename": "sauna.reload-0.4.2.zip", "has_sig": false, "md5_digest": "5118a8b7d7307cb25b591ee0e2d99a73", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 46389, "upload_time": "2012-04-24T19:46:14", "url": "https://files.pythonhosted.org/packages/df/4e/8b51bf06f26b759ae7c6afd63d7d7ec9276de643bfaeddb534f430a55325/sauna.reload-0.4.2.zip" } ], "0.4.3": [ { "comment_text": "", "digests": { "md5": "916dc866569c1f5c994d961f891ff356", "sha256": "c28910735f7c4c2655848cf63a11b1a01b14c413a64a9c7c3fa9ffbbd7a1cbea" }, "downloads": -1, "filename": "sauna.reload-0.4.3.zip", "has_sig": false, "md5_digest": "916dc866569c1f5c994d961f891ff356", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 46706, "upload_time": "2012-04-25T05:31:58", "url": "https://files.pythonhosted.org/packages/69/dd/24fa9051cf7cbc72228703602cce2b528230f02148797204d6aa401c7060/sauna.reload-0.4.3.zip" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "c99fd139024f49a5bcd7f2b49ff5867b", "sha256": "fe6c192af833870527fc246565c1e92a0dea4e88aa0a3cd75cdd76b5df4d0ad0" }, "downloads": -1, "filename": "sauna.reload-0.5.0.zip", "has_sig": false, "md5_digest": "c99fd139024f49a5bcd7f2b49ff5867b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49106, "upload_time": "2012-12-28T09:31:49", "url": "https://files.pythonhosted.org/packages/1a/01/71be6a38a03a6c97ba083112c78b7bb03d58404ba08e6bb3e8c20fc80e83/sauna.reload-0.5.0.zip" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "36b5aa5705fc7c7a4f84ffc0ecef239b", "sha256": "86f8548aa120f13631a7a67855f435ef6a4364f2a3c81a0a997b9720659bcb70" }, "downloads": -1, "filename": "sauna.reload-0.5.1.zip", "has_sig": false, "md5_digest": "36b5aa5705fc7c7a4f84ffc0ecef239b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49706, "upload_time": "2013-02-20T12:44:49", "url": "https://files.pythonhosted.org/packages/a3/ad/de59de1ab16bbf53360acab5f408d5d211756f0d297c06b03b45b705fd3c/sauna.reload-0.5.1.zip" } ], "0.5.2": [ { "comment_text": "", "digests": { "md5": "630a7a9cb5cf5fadfbbb30eff39a626d", "sha256": "5cef8895db65244f20eeffe3eb22562b798a5438e60dec61d13386d96ee99043" }, "downloads": -1, "filename": "sauna.reload-0.5.2.zip", "has_sig": false, "md5_digest": "630a7a9cb5cf5fadfbbb30eff39a626d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48525, "upload_time": "2014-10-18T18:07:17", "url": "https://files.pythonhosted.org/packages/83/f3/6d5224363101990b219be41b44528a04e704dc5551e1969d004e12658848/sauna.reload-0.5.2.zip" } ], "0.5.3": [ { "comment_text": "", "digests": { "md5": "c576b2b51a9d06138d460e27abfe4e00", "sha256": "e943e31749ec8ceeaeb5c10f08845db3b069ebe22103ed2e1b10e4e884260373" }, "downloads": -1, "filename": "sauna.reload-0.5.3.zip", "has_sig": false, "md5_digest": "c576b2b51a9d06138d460e27abfe4e00", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 50086, "upload_time": "2014-10-19T14:40:44", "url": "https://files.pythonhosted.org/packages/89/95/556b126f83ba1c82d008293f156cad1e45cf362d303771395b39758149ea/sauna.reload-0.5.3.zip" } ], "0.5.4": [ { "comment_text": "", "digests": { "md5": "4e774342400f5ce126cb89a9fc11f677", "sha256": "2c9d651c9bb9107cf3ce280f2ea186fc020b7f088ecc1503da648a0563e52e45" }, "downloads": -1, "filename": "sauna.reload-0.5.4.tar.gz", "has_sig": false, "md5_digest": "4e774342400f5ce126cb89a9fc11f677", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29294, "upload_time": "2016-02-24T04:51:19", "url": "https://files.pythonhosted.org/packages/89/ab/bb9fd91df28ced6da3bb9901f1c1436fe4cda4b2af537b786491ba374074/sauna.reload-0.5.4.tar.gz" } ], "0.5.5": [ { "comment_text": "", "digests": { "md5": "75af3018ca9482382a735fdce2793b2f", "sha256": "043f6e2658a09ba937ba432d48c5644d36177fe7b241f6a1eac92c87c4c95ecb" }, "downloads": -1, "filename": "sauna.reload-0.5.5.tar.gz", "has_sig": false, "md5_digest": "75af3018ca9482382a735fdce2793b2f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29380, "upload_time": "2016-02-24T06:42:35", "url": "https://files.pythonhosted.org/packages/a3/4a/c8c1d25678dc650237704b21a10f8ae5bb72ee43080f65a154b4f555ece6/sauna.reload-0.5.5.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "75af3018ca9482382a735fdce2793b2f", "sha256": "043f6e2658a09ba937ba432d48c5644d36177fe7b241f6a1eac92c87c4c95ecb" }, "downloads": -1, "filename": "sauna.reload-0.5.5.tar.gz", "has_sig": false, "md5_digest": "75af3018ca9482382a735fdce2793b2f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29380, "upload_time": "2016-02-24T06:42:35", "url": "https://files.pythonhosted.org/packages/a3/4a/c8c1d25678dc650237704b21a10f8ae5bb72ee43080f65a154b4f555ece6/sauna.reload-0.5.5.tar.gz" } ] }