{ "info": { "author": "Alena Lifar", "author_email": "alenaslifar@gmail.com", "bugtrack_url": null, "classifiers": [ "Environment :: Web Environment", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Internet :: WWW/HTTP :: Dynamic Content", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "Flask Url Discovery\n===================\n\nA Flask extension for discovering urls in a service and expose service's routes for others.\n\nInstallation\n------------\n\nInstall the extention using ``pip`` or ``easy_install``.\n\n.. code:: bash\n\n $ pip install -U Flask-UrlDiscovery\n\nUsage\n-----\n\nThis package exposes a Flask extention that allows the user to automatically collect all (by default) routes that are created by Flask application or a Blueprint. The user can provide a custom uri string for exposing routes on the system as well as restrict the access to some routes or Blueprints.\n\n\nUsage with Flask app and Blueprint\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nIn order to expose all routes on the system the user only has to register Flask application with ``url_discovery``:\n\n.. code:: python\n\n from flask import Flask, Blueprint\n from flask_url_discovery import url_discovery\n\n app = Flask(__name__)\n url_discovery(app)\n\n app_bp = Blueprint('my_bp', __name__)\n\n\n @app.route('/')\n @app.route('/health_check/')\n def hello_world():\n return 'Hello World!'\n\n @app_bp.route('/hello/')\n def hello_bp():\n return 'Hello Flask Blueprint'\n\n if __name__ == '__main__':\n app.register_blueprint(app_bp)\n app.run('0.0.0.0', 5000)\n\nBy default all of the routes are getting exposed on http://host:port/config/routes/\n\nHere is sample response for **/config/routes/** ``GET`` request:\n\n.. code:: python\n\n {\n \"flask_url_discovery.expose_routes\": {\n \"active_urls\": [\n \"/config/routes/\"\n ],\n \"methods\": [\n \"GET\",\n \"HEAD\",\n \"OPTIONS\"\n ]\n },\n \"hello_world\": {\n \"active_urls\": [\n \"/\",\n \"/health_check/\"\n ],\n \"methods\": [\n \"GET\",\n \"HEAD\",\n \"OPTIONS\"\n ]\n },\n \"my_bp.hello_bp\": {\n \"active_urls\": [\n \"/hello/\"\n ],\n \"methods\": [\n \"GET\",\n \"HEAD\",\n \"OPTIONS\"\n ]\n },\n \"static\": {\n \"active_urls\": [\n \"/static/\"\n ],\n \"methods\": [\n \"GET\",\n \"HEAD\",\n \"OPTIONS\"\n ]\n }\n }\n\nCustom routes url\n-----------------\n\nThe user can specify custom routes url for url discovery\n\n.. code:: python\n\n from flask import Flask\n from flask_url_discovery import url_discovery\n\n app = Flask(__name__)\n url_discovery(app, custom_routes_url='/your_custom_routes_url/')\n\n @app.route('/')\n def helloWorld():\n return \"Hello World!\"\n\nFlask UrlDiscovery perfectly works with ``url_prefix`` for Flask Blueprints:\n\n.. code:: python\n\n from flask import Flask, Blueprint\n from flask_url_discovery import url_discovery\n\n app = Flask(__name__)\n url_discovery(app)\n\n app_bp = Blueprint('my_bp', __name__)\n\n\n @app.route('/')\n def hello_world():\n return 'Hello World!'\n\n @app_bp.route('/hello/')\n def hello_bp():\n return 'Hello Flask Blueprint'\n\n if __name__ == \"__main__\":\n app.register_blueprint(app_bpm url_prefix='/custom_prefix')\n app.run('0.0.0.0', 5000)\n\nResponse:\n\n.. code:: python\n\n <...>\n \"my_bp.hello_bp\": {\n \"active_urls\": [\n \"/custom_prefix/hello/\"\n ],\n \"methods\": [\n \"GET\",\n \"OPTIONS\",\n \"HEAD\"\n ]\n },\n <...>\n\nPrivate routes and Blueprints\n-----------------------------\n\nThe user can private a single route of Flask application/Blueprint as well as a whole Blueprint. Flask UrlDiscovery provides a decorator function.\n\n**Usage with ```route()```:**\n\n.. code:: python\n\n from flask import Flask, Blueprint\n from flask_url_discovery import url_discovery, private\n\n app = Flask(__name__)\n url_discovery(app)\n\n app_bp = Blueprint(\"my_bp\", __name__)\n\n\n @app.route(\"/\")\n def hello_world():\n return \"Hello World!\"\n\n\n @private()\n @app.route(\"/restricted_route/\")\n def private_endpoint():\n return \"Hello Private Endpoint\"\n\n\n @app_bp.route(\"/hello/\")\n def hello_bp():\n return \"Hello Flask Blueprint\"\n\n if __name__ == \"__main__\":\n app.register_blueprint(app_bp)\n app.run('0.0.0.0', 5000)\n\n``private_endpoint()`` will not be shown in the response of ``/config/routes/`` request. Same approach is valid for privating a route of a Blueprint.\n\n**Usage with Flask Blueprints:**\n\n.. code:: python\n\n from flask import Flask, Blueprint\n from flask_url_discovery import url_discovery, private\n\n app = Flask(__name__)\n url_discovery(app)\n\n # or: app_bp = private(Blueprint(\"my_bp\", __name__))\n app_bp = Blueprint(\"my_bp\", __name__)\n private(app_bp)\n\n\n @app.route(\"/\")\n def hello_world():\n return \"Hello World!\"\n\n\n @app_bp.route(\"/private/hello/\")\n def hello_bp():\n return \"Hello Flask Blueprint\"\n\n\n @app_bp.route(\"/private/goodbye/\")\n def bye_bp():\n return \"Goodbye Moonmen\"\n\n\n if __name__ == \"__main__\":\n app.register_blueprint(app_bp)\n app.run('0.0.0.0', 5000)\n\n``app_bp`` Blueprint is fully **private** now and none of the routes belong to this Blueprint will be exposed through API by UrlDiscovery\n\nTest\n----\n\nThe Package includes a `test suite `_. To exercise tests run:\n\n.. code:: bash\n\n python setup.py tests\n\nContributing\n------------\n\nIf you have any questions, find any bugs/problems or have an idea of an improvement, please create an issue on `GitHub `_ and/or send me an e-mail.\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/UseTheApi/flask_url_discovery", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "Flask-UrlDiscovery", "package_url": "https://pypi.org/project/Flask-UrlDiscovery/", "platform": "any", "project_url": "https://pypi.org/project/Flask-UrlDiscovery/", "project_urls": { "Homepage": "https://github.com/UseTheApi/flask_url_discovery" }, "release_url": "https://pypi.org/project/Flask-UrlDiscovery/1.1.1/", "requires_dist": [ "Flask (>=0.9)", "pytest (>=3.0)", "requests (>=2.13)", "mock (>=2.0)" ], "requires_python": "", "summary": "A Flask extension for discovering urls in a service. Automatically exposes urls for a service", "version": "1.1.1" }, "last_serial": 2988047, "releases": { "1.1.1": [ { "comment_text": "", "digests": { "md5": "db01f0587d72d8f9ebd27e81e24d2947", "sha256": "cec47aff6d93e4042574509f9298eac5d7468f6917f75ea0daa576c1c445312e" }, "downloads": -1, "filename": "Flask_UrlDiscovery-1.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "db01f0587d72d8f9ebd27e81e24d2947", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8963, "upload_time": "2017-06-29T17:28:12", "url": "https://files.pythonhosted.org/packages/ad/2c/6aa163581690c862945daa8d23080bbe0e75073c6237e5dd1fc6db10ad00/Flask_UrlDiscovery-1.1.1-py2.py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "db01f0587d72d8f9ebd27e81e24d2947", "sha256": "cec47aff6d93e4042574509f9298eac5d7468f6917f75ea0daa576c1c445312e" }, "downloads": -1, "filename": "Flask_UrlDiscovery-1.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "db01f0587d72d8f9ebd27e81e24d2947", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8963, "upload_time": "2017-06-29T17:28:12", "url": "https://files.pythonhosted.org/packages/ad/2c/6aa163581690c862945daa8d23080bbe0e75073c6237e5dd1fc6db10ad00/Flask_UrlDiscovery-1.1.1-py2.py3-none-any.whl" } ] }