{ "info": { "author": "Canonical webteam", "author_email": "webteam@canonical.com", "bugtrack_url": null, "classifiers": [ "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "# Canonical Webteam Flask-Base\n\nFlask extension that applies common configurations to all of webteam's flask apps.\n\n## Usage\n\n``` python3\nfrom canonicalwebteam.flask_base.app import FlaskBase\n\napp = FlaskBase(__name__, \"app.name\")\n```\n\nOr:\n\n``` python3\nfrom canonicalwebteam.flask_base.app import FlaskBase\n\napp = FlaskBase(\n __name__,\n \"app.name\",\n template_404=\"404.html\",\n template_500=\"500.html\",\n favicon_url=\"/static/favicon.ico\",\n)\n```\n\n## Features\n\n### Redirects and deleted paths\n\nFlaskBase uses [yaml-responses](https://github.com/canonical-web-and-design/canonicalwebteam.yaml-responses) to allow easy configuration of redirects and return of deleted responses, by creating `redirects.yaml`, `permanent-redirects.yaml` and `deleted.yaml` in the site root directory.\n\n### Error templates\n\n`FlaskBase` can optionally use templates to generate the `404` and `500` error responses:\n\n``` python3\napp = FlaskBase(\n __name__,\n \"app.name\",\n template_404=\"404.html\",\n template_500=\"500.html\",\n)\n```\n\nThis will lead to e.g. `http://localhost/non-existent-path` returning a `404` status with the contents of `templates/404.html`.\n\n### Redirect /favicon.ico\n\n`FlaskBase` can optionally provide redirects for the commonly queried paths `/favicon.ico`, `/robots.txt` and `/humans.txt` to sensible locations:\n\n``` python3\nfrom canonicalwebteam.flask_base.app import FlaskBase\n\napp = FlaskBase(\n __name__,\n \"app.name\",\n template_404=\"404.html\",\n template_500=\"500.html\",\n favicon_url=\"/static/favicon.ico\",\n robots_url=\"/static/robots.txt\",\n humans_url=\"/static/humans.txt\"\n)\n```\n\nThis will lead to e.g. `http://localhost/favicon.ico` returning a `302` redirect to `http://localhost/static/favicon.ico`.\n\n### `robots.txt` and `humans.txt`\n\nIf you create a `robots.txt` or `humans.txt` in the root of your project, these will be served at `/robots.txt` and `/humans.txt` respectively.\n\n## Generating setup.py\n\nIn this project, for the time being, we maintain both a `pyproject.toml` for Poetry and a `setup.py` for traditional Python tooling. If you are developing on the module, you should update `pyproject.toml` first and then regenerate the `setup.py` using:\n\n``` bash\npoetry install\npoetry run poetry-setup\n```\n\n## Tests\n\nTo run the tests execute `poetry run python -m unittest discover tests`.\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "", "keywords": "", "license": "", "maintainer": "Canonical webteam", "maintainer_email": "webteam@canonical.com", "name": "canonicalwebteam.flask-base", "package_url": "https://pypi.org/project/canonicalwebteam.flask-base/", "platform": "", "project_url": "https://pypi.org/project/canonicalwebteam.flask-base/", "project_urls": null, "release_url": "https://pypi.org/project/canonicalwebteam.flask-base/0.3.3/", "requires_dist": [ "canonicalwebteam.yaml-responses[flask] (>=1,<2)", "flask (>=1,<2)", "talisker[gunicorn,flask,prometheus,raven] (>=0.15,<0.16)" ], "requires_python": ">=3.6,<4.0", "summary": "", "version": "0.3.3" }, "last_serial": 5803095, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "29b7202f527a24662d7dc39746d45520", "sha256": "312e1903e70b4d17de349744c87a4e14c1028ab4873da98bcb6150d21eb364b5" }, "downloads": -1, "filename": "canonicalwebteam.flask_base-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "29b7202f527a24662d7dc39746d45520", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3,<4", "size": 2732, "upload_time": "2019-06-05T08:17:50", "url": "https://files.pythonhosted.org/packages/09/9a/b87961efc2b5e6279a15ba185925f4283abc101071e9590b88adc3f84b1f/canonicalwebteam.flask_base-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b05b8f7b8181389ed52e0d1bb8157e2b", "sha256": "a68912e69e7362d9406e7fceb67f1c3c072f7588d828cc1a78fb7418f3ed1dec" }, "downloads": -1, "filename": "canonicalwebteam.flask_base-0.1.0.tar.gz", "has_sig": false, "md5_digest": "b05b8f7b8181389ed52e0d1bb8157e2b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3,<4", "size": 1670, "upload_time": "2019-06-05T08:17:52", "url": "https://files.pythonhosted.org/packages/6e/2b/879caac4e5140ef777c26d3bd5190c2419f12c362b2d82c69fbe05d82be6/canonicalwebteam.flask_base-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "1c09673d43c3b7354a8697bb025b0ad2", "sha256": "4a0fccad6070ffa481ea778dc18558c05599c3e014df40bec5447e367f1fc0d4" }, "downloads": -1, "filename": "canonicalwebteam.flask_base-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "1c09673d43c3b7354a8697bb025b0ad2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3,<4", "size": 3454, "upload_time": "2019-06-10T10:22:31", "url": "https://files.pythonhosted.org/packages/d4/75/768765767dd3a6869f6f517543ead6786491c8304e8882c0a9c01fac9a39/canonicalwebteam.flask_base-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0d4d701627914660619da931504c94de", "sha256": "8ad13757601be8f45ad1ec2a346b2882cde8efaa565f8fc32c1018b8fcf75d9a" }, "downloads": -1, "filename": "canonicalwebteam.flask_base-0.2.0.tar.gz", "has_sig": false, "md5_digest": "0d4d701627914660619da931504c94de", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3,<4", "size": 2180, "upload_time": "2019-06-10T10:22:32", "url": "https://files.pythonhosted.org/packages/80/30/cb018e210d2fa4d94b42fe97ea1e1e8ee8a72a0f04c38a086cdcd484ecc2/canonicalwebteam.flask_base-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "d7396b72b962c82b52c3e46e2fbeed31", "sha256": "e344904ed556b6b5e0247ebcdbcef1e9b3c8c8ee6290fd1e24a49df396d7f0fc" }, "downloads": -1, "filename": "canonicalwebteam.flask_base-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "d7396b72b962c82b52c3e46e2fbeed31", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 4356, "upload_time": "2019-06-25T15:36:35", "url": "https://files.pythonhosted.org/packages/d1/e7/e16ded992682eb44c7350db58a48ac7d37d84877a9324dc4beb84d1e967e/canonicalwebteam.flask_base-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "85c5d5173ee358466452e107b22166d8", "sha256": "6ca5316052a4bc3624d316401babefca1d20b25699f73b2cc18c03454819b635" }, "downloads": -1, "filename": "canonicalwebteam.flask_base-0.3.0.tar.gz", "has_sig": false, "md5_digest": "85c5d5173ee358466452e107b22166d8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 3553, "upload_time": "2019-06-25T15:36:36", "url": "https://files.pythonhosted.org/packages/da/14/ef9767bcb2604aab20d16b0e69aa750dcab3879c525df40897007ced855e/canonicalwebteam.flask_base-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "c2780af2a40fe6668b172b1b3a9df6e2", "sha256": "2e34cb2027a5b8ec1106fa0c5841952a5bcec2e79fa2d6facd2e25bb821a85a8" }, "downloads": -1, "filename": "canonicalwebteam.flask_base-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "c2780af2a40fe6668b172b1b3a9df6e2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 4561, "upload_time": "2019-06-26T08:15:09", "url": "https://files.pythonhosted.org/packages/2a/be/2d9e33df6dc34d2159830e0e31543a6b1fb9f0d236b2699bd7c452ed0a66/canonicalwebteam.flask_base-0.3.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1bae83e2b56f9d30e70fb8f679712786", "sha256": "d3c598a40fb01fcbab04250c863f772e2918ca2b7cad87117d60b285f545dfbe" }, "downloads": -1, "filename": "canonicalwebteam.flask_base-0.3.1.tar.gz", "has_sig": false, "md5_digest": "1bae83e2b56f9d30e70fb8f679712786", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 3749, "upload_time": "2019-06-26T08:15:10", "url": "https://files.pythonhosted.org/packages/87/f4/59f985061b4f00042013c9c0fea4a9b8a58a4d4573bd03f5885a7840d416/canonicalwebteam.flask_base-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "0c27e69df6c02379aec1863d1c7caa5a", "sha256": "1fafb8d57b35591b899a31f7fc3518dd0b82a4afeb858ab53cf92e25920091a8" }, "downloads": -1, "filename": "canonicalwebteam.flask_base-0.3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "0c27e69df6c02379aec1863d1c7caa5a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 4565, "upload_time": "2019-09-05T22:23:41", "url": "https://files.pythonhosted.org/packages/ef/85/afeb0a6a126a8d761d5ca4c51cdd1d21f9af216289784888d08bbcbce3d4/canonicalwebteam.flask_base-0.3.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3a7c9d919e568c32fd2f8b982b9e3115", "sha256": "60dfedd00b7b6a35e6ae31d769b51b298594acfcee29b41531460483cab9124d" }, "downloads": -1, "filename": "canonicalwebteam.flask_base-0.3.2.tar.gz", "has_sig": false, "md5_digest": "3a7c9d919e568c32fd2f8b982b9e3115", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 3783, "upload_time": "2019-09-05T22:23:43", "url": "https://files.pythonhosted.org/packages/33/c0/c3a0138326fc0ccb83aeed7f0e222198ed1958cecb64d262b64e3156918d/canonicalwebteam.flask_base-0.3.2.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "3521ef73af57e7dce5470872f2c1381c", "sha256": "7eb77e3caeb6519f94ae45e4dcbb89a8a3e62bd334425bedcbaf25c93d3b4945" }, "downloads": -1, "filename": "canonicalwebteam.flask_base-0.3.3-py3-none-any.whl", "has_sig": false, "md5_digest": "3521ef73af57e7dce5470872f2c1381c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 4570, "upload_time": "2019-09-09T11:06:04", "url": "https://files.pythonhosted.org/packages/18/07/93103876d33030e9b85cca34f2862a499b2ef2c635875d500416e091ddc7/canonicalwebteam.flask_base-0.3.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ce80087a37faa9f47be263f45f724978", "sha256": "5b250e3ffd0045b01c7b6265ae80768df216f00797b3d6fd566bc483fd31879e" }, "downloads": -1, "filename": "canonicalwebteam.flask_base-0.3.3.tar.gz", "has_sig": false, "md5_digest": "ce80087a37faa9f47be263f45f724978", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 3785, "upload_time": "2019-09-09T11:06:06", "url": "https://files.pythonhosted.org/packages/72/5a/10f2db60e35fd14b142fb5ad1507cf774ac9398ed92ed5908c1fb754f5c1/canonicalwebteam.flask_base-0.3.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "3521ef73af57e7dce5470872f2c1381c", "sha256": "7eb77e3caeb6519f94ae45e4dcbb89a8a3e62bd334425bedcbaf25c93d3b4945" }, "downloads": -1, "filename": "canonicalwebteam.flask_base-0.3.3-py3-none-any.whl", "has_sig": false, "md5_digest": "3521ef73af57e7dce5470872f2c1381c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 4570, "upload_time": "2019-09-09T11:06:04", "url": "https://files.pythonhosted.org/packages/18/07/93103876d33030e9b85cca34f2862a499b2ef2c635875d500416e091ddc7/canonicalwebteam.flask_base-0.3.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ce80087a37faa9f47be263f45f724978", "sha256": "5b250e3ffd0045b01c7b6265ae80768df216f00797b3d6fd566bc483fd31879e" }, "downloads": -1, "filename": "canonicalwebteam.flask_base-0.3.3.tar.gz", "has_sig": false, "md5_digest": "ce80087a37faa9f47be263f45f724978", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 3785, "upload_time": "2019-09-09T11:06:06", "url": "https://files.pythonhosted.org/packages/72/5a/10f2db60e35fd14b142fb5ad1507cf774ac9398ed92ed5908c1fb754f5c1/canonicalwebteam.flask_base-0.3.3.tar.gz" } ] }