{ "info": { "author": "Jace Browning", "author_email": "jacebrowning@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Software Development", "Topic :: Software Development :: Testing" ], "description": "Unix: |Unix Build Status| Windows: |Windows Build Status|\\ Metrics:\n|Coverage Status| |Scrutinizer Code Quality|\\ Usage: |PyPI Version|\n|PyPI Downloads|\n\nOverview\n========\n\nSappy is a simple, single-page application (SPA) web server for\nend-to-end testing.\n\nThe Python standard library includes a web server that works great for\nserving up files:\n\n.. code:: sh\n\n $ python3 -m http.server 8080\n Serving HTTP on 0.0.0.0 port 8080 ...\n\n $ curl http://localhost:1234/index.html\n \n \n \n Example Index\n ...\n\nBut when used to serve up single-page applications, a ``404`` is\nreturned whenever any page other than the index is accessed directly:\n\n.. code:: sh\n\n $ curl http://localhost:8080/login\n \n \n Error 404 (Not Found)</title\n ...\n\nThis project builds on the existing web server code to forward all\nrequests to the index. The single-page application\u2019s client-side routing\ncan then display the page that corresponds to that request\u2019s URL.\n\nSetup\n=====\n\nRequirements\n------------\n\n- Python 3.5+\n\nInstallation\n------------\n\nInstall ``sappy`` with pip:\n\n.. code:: sh\n\n $ pip install sappy\n\nor directly from the source code:\n\n.. code:: sh\n\n $ git clone https://github.com/jacebrowning/sappy.git\n $ cd sappy\n $ python setup.py install\n\nUsage\n=====\n\nBuild your static website (e.g. an Ember application) for production:\n\n.. code:: sh\n\n $ ember build --environment=production\n Building...\n Built project successfully. Stored in \"dist/\".\n\nThen serve up the application:\n\n.. code:: sh\n\n $ sappy\n Serving /home/browning/project/dist/ on 8080\n\nCheck out the\n`documentation <http://sappy.readthedocs.io/en/latest/cli>`__ or\ncommand-line help for additional options:\n\n.. code:: sh\n\n $ sappy --help\n\n.. |Unix Build Status| image:: http://img.shields.io/travis/jacebrowning/sappy/develop.svg\n :target: https://travis-ci.org/jacebrowning/sappy\n.. |Windows Build Status| image:: https://img.shields.io/appveyor/ci/jacebrowning/sappy/develop.svg\n :target: https://ci.appveyor.com/project/jacebrowning/sappy\n.. |Coverage Status| image:: http://img.shields.io/coveralls/jacebrowning/sappy/develop.svg\n :target: https://coveralls.io/r/jacebrowning/sappy\n.. |Scrutinizer Code Quality| image:: http://img.shields.io/scrutinizer/g/jacebrowning/sappy.svg\n :target: https://scrutinizer-ci.com/g/jacebrowning/sappy/?branch=develop\n.. |PyPI Version| image:: http://img.shields.io/pypi/v/sappy.svg\n :target: https://pypi.python.org/pypi/sappy\n.. |PyPI Downloads| image:: http://img.shields.io/pypi/dm/sappy.svg\n :target: https://pypi.python.org/pypi/sappy\n\nRevision History\n================\n\n1.1 (2017/03/21)\n----------------\n\n- Added handling of HTML pages without the extension.\n\n1.0.1 (2017/03/21)\n------------------\n\n- Fixed handling of relative paths in assets.\n\n1.0 (2017/01/09)\n----------------\n\n- Initial stable release.\n\n0.2 (2016/06/09)\n----------------\n\n- Added a ``--launch`` option to open the page's index.\n\n0.1 (2016/06/09)\n----------------\n\n- Initial release.\n\n\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/jacebrowning/sappy", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "sappy", "package_url": "https://pypi.org/project/sappy/", "platform": "", "project_url": "https://pypi.org/project/sappy/", "project_urls": { "Homepage": "https://github.com/jacebrowning/sappy" }, "release_url": "https://pypi.org/project/sappy/1.1/", "requires_dist": [ "click (~=6.0.0)" ], "requires_python": "", "summary": "Single-page application server for end-to-end testing.", "version": "1.1" }, "last_serial": 3231569, "releases": { "0.0.0": [], "0.1": [ { "comment_text": "", "digests": { "md5": "faa5c4717511f34a12462770b29e924a", "sha256": "692d161eea721e55ae261be237d7774ee9426ba45ee725d5b7e074bb13922249" }, "downloads": -1, "filename": "sappy-0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "faa5c4717511f34a12462770b29e924a", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 8393, "upload_time": "2016-06-09T23:41:23", "url": "https://files.pythonhosted.org/packages/1d/82/55f1f2d87e623377465c6d9e2ecebadbdb0d50b9bdc8f1322178a6619a42/sappy-0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b1fb231299ace90a336db102532c2316", "sha256": "2e6a29ecdca392c8690d8d88cc179511a6b8f86b0fd7cc05a4bdaeea87a27e36" }, "downloads": -1, "filename": "sappy-0.1.tar.gz", "has_sig": false, "md5_digest": "b1fb231299ace90a336db102532c2316", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6580, "upload_time": "2016-06-09T23:41:18", "url": "https://files.pythonhosted.org/packages/80/21/9d4e6b33d5ed0e719087a7b7c1bf81b3fda6c7ac892ef73607e6571cddab/sappy-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "468c79d33f50f37ef5aead5b56b138d8", "sha256": "f2e39384d7ff26b77846696cf7754bf22aabba92c12a8e45a1870d847b6413ef" }, "downloads": -1, "filename": "sappy-0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "468c79d33f50f37ef5aead5b56b138d8", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 9992, "upload_time": "2016-06-10T22:25:47", "url": "https://files.pythonhosted.org/packages/ee/b4/f3dada0089116d44ba6ba63d54701f5a94e7560ad897692938693b9a4716/sappy-0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f32025abb19bb5ec844f1275b3f34e01", "sha256": "583526961e06899436278b348b62da61843e6d4766015823c5741f6030b1cc22" }, "downloads": -1, "filename": "sappy-0.2.tar.gz", "has_sig": false, "md5_digest": "f32025abb19bb5ec844f1275b3f34e01", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7356, "upload_time": "2016-06-10T22:25:41", "url": "https://files.pythonhosted.org/packages/6a/03/e8f194647ede9210b0ebe780c8f36b75a0e20c4c049134c8711989d14937/sappy-0.2.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "348ac98dcc907ffa802acef1ca0b0a68", "sha256": "fe74d72f4e1b8f8fd5467fbcd4b24906c29d7aa9557d03daad9d30e059b42c05" }, "downloads": -1, "filename": "sappy-0.2.1.tar.gz", "has_sig": false, "md5_digest": "348ac98dcc907ffa802acef1ca0b0a68", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7389, "upload_time": "2016-06-14T14:04:42", "url": "https://files.pythonhosted.org/packages/7b/85/bc09cee16d5b15b4b59df2b0008d71fe3458b9531f03764b32c385c0b225/sappy-0.2.1.tar.gz" } ], "1.0": [ { "comment_text": "", "digests": { "md5": "df71438e6526310bf16a5e201744f693", "sha256": "3d4eb00e56828e03fa107908d938caaba02e2212f3f2a4dc69d8c0e21354c743" }, "downloads": -1, "filename": "sappy-1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "df71438e6526310bf16a5e201744f693", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9420, "upload_time": "2017-01-09T20:55:16", "url": "https://files.pythonhosted.org/packages/9f/85/7c88357dbf898731aedce57aac7a46a5ef64b8156f918ed18eb0df8b5552/sappy-1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f53e78eb1124540c8924d8eaefb8de96", "sha256": "7c14db8e55d738d88e2aa77b37a1d609f8e36b5f1285fc89ec49c72b6f6eaf7d" }, "downloads": -1, "filename": "sappy-1.0.tar.gz", "has_sig": false, "md5_digest": "f53e78eb1124540c8924d8eaefb8de96", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7702, "upload_time": "2017-01-09T20:55:17", "url": "https://files.pythonhosted.org/packages/7f/c9/39495a31d06d457bcb11426474a547b3ca33021af6e6d69e660494fb9fc8/sappy-1.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "8f8f36b61fac13efd17cf27ab506e8d2", "sha256": "80503db9940ea723af622bf51e5dff615625850d82f70924ce6255b9fbd62cd8" }, "downloads": -1, "filename": "sappy-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "8f8f36b61fac13efd17cf27ab506e8d2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9555, "upload_time": "2017-03-21T23:00:29", "url": "https://files.pythonhosted.org/packages/ab/ab/ddb0bfdbc4dc27d9759edafeb8e811a7b757a55f427d41961bcec710dc22/sappy-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5824b730fca8da658c17bd27540a8eab", "sha256": "677f278f79b5c3b0b0eb279c975790aca6f10c4bb6d710214893bad3e2e6659c" }, "downloads": -1, "filename": "sappy-1.0.1.tar.gz", "has_sig": false, "md5_digest": "5824b730fca8da658c17bd27540a8eab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7794, "upload_time": "2017-03-21T23:00:31", "url": "https://files.pythonhosted.org/packages/0d/11/cee29a74b6a4d2e559134f823889123894d40492de7d860c1846b923ad73/sappy-1.0.1.tar.gz" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "a38bf2a32c0b40f0af4ff6c9575b17cd", "sha256": "c35e4e21cc618d5a3b19722ff421e9c827a60d1d1752f257777338063733a29f" }, "downloads": -1, "filename": "sappy-1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "a38bf2a32c0b40f0af4ff6c9575b17cd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9599, "upload_time": "2017-03-21T23:42:47", "url": "https://files.pythonhosted.org/packages/e6/30/ab4a46accba02fdb872f412f5427cfeb3ce7de799303ed9fdbd54e283112/sappy-1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1169dd312a32b0c969d12487ae109c54", "sha256": "98211c3e538fa5c4f4a3afba6100c66c29bbd0e337c96b75c8211a3ced267c27" }, "downloads": -1, "filename": "sappy-1.1.tar.gz", "has_sig": false, "md5_digest": "1169dd312a32b0c969d12487ae109c54", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7853, "upload_time": "2017-03-21T23:42:49", "url": "https://files.pythonhosted.org/packages/d1/49/4f9d6766b2b9d24b31181be6bb3a01518afa86a5279fb89caaab0940ed9f/sappy-1.1.tar.gz" } ], "1.1b1": [ { "comment_text": "", "digests": { "md5": "6471e093c8e856c91d511be042f8bd44", "sha256": "46567339c51f91590288c7f1e8689d1b91cfb49ca9b0b1b77ee8f0bebdf358de" }, "downloads": -1, "filename": "sappy-1.1b1-py3-none-any.whl", "has_sig": false, "md5_digest": "6471e093c8e856c91d511be042f8bd44", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9863, "upload_time": "2017-10-06T22:06:24", "url": "https://files.pythonhosted.org/packages/a6/c9/5faf57ee08dd651fbc2c9d06a5c151b61bd67ca5e05a635c536d89309700/sappy-1.1b1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ede1018d07c3f2c4f52304faf9c49e7b", "sha256": "d52f3ae74b9edbe83fccca94e734f87c5520e745fe9f702c402b8c0a8130481d" }, "downloads": -1, "filename": "sappy-1.1b1.tar.gz", "has_sig": false, "md5_digest": "ede1018d07c3f2c4f52304faf9c49e7b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8875, "upload_time": "2017-10-06T22:06:26", "url": "https://files.pythonhosted.org/packages/29/42/966fe14ef1af91d16835fa5d54e3e2076079378bb66e90260c8efca8aa88/sappy-1.1b1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a38bf2a32c0b40f0af4ff6c9575b17cd", "sha256": "c35e4e21cc618d5a3b19722ff421e9c827a60d1d1752f257777338063733a29f" }, "downloads": -1, "filename": "sappy-1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "a38bf2a32c0b40f0af4ff6c9575b17cd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9599, "upload_time": "2017-03-21T23:42:47", "url": "https://files.pythonhosted.org/packages/e6/30/ab4a46accba02fdb872f412f5427cfeb3ce7de799303ed9fdbd54e283112/sappy-1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1169dd312a32b0c969d12487ae109c54", "sha256": "98211c3e538fa5c4f4a3afba6100c66c29bbd0e337c96b75c8211a3ced267c27" }, "downloads": -1, "filename": "sappy-1.1.tar.gz", "has_sig": false, "md5_digest": "1169dd312a32b0c969d12487ae109c54", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7853, "upload_time": "2017-03-21T23:42:49", "url": "https://files.pythonhosted.org/packages/d1/49/4f9d6766b2b9d24b31181be6bb3a01518afa86a5279fb89caaab0940ed9f/sappy-1.1.tar.gz" } ] }