{"id":15294040,"url":"https://github.com/usetheapi/flask_url_discovery","last_synced_at":"2025-04-13T14:11:43.075Z","repository":{"id":57430823,"uuid":"87666201","full_name":"UseTheApi/flask_url_discovery","owner":"UseTheApi","description":"Flask extension for discovering urls in a service. Automatically expose urls for a service. Manage urls exposure settings.","archived":false,"fork":false,"pushed_at":"2017-09-15T11:14:28.000Z","size":41,"stargazers_count":13,"open_issues_count":2,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-21T07:18:05.056Z","etag":null,"topics":["flask","flask-extensions","python","restful","url-discovery"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/UseTheApi.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-04-08T21:46:12.000Z","updated_at":"2020-05-24T12:08:39.000Z","dependencies_parsed_at":"2022-09-02T08:50:26.152Z","dependency_job_id":null,"html_url":"https://github.com/UseTheApi/flask_url_discovery","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/UseTheApi%2Fflask_url_discovery","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/UseTheApi%2Fflask_url_discovery/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/UseTheApi%2Fflask_url_discovery/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/UseTheApi%2Fflask_url_discovery/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/UseTheApi","download_url":"https://codeload.github.com/UseTheApi/flask_url_discovery/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248724629,"owners_count":21151561,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["flask","flask-extensions","python","restful","url-discovery"],"created_at":"2024-09-30T16:56:03.486Z","updated_at":"2025-04-13T14:11:43.053Z","avatar_url":"https://github.com/UseTheApi.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"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/\u003cpath:filename\u003e\"\n            ],\n            \"methods\": [\n                \"GET\",\n                \"HEAD\",\n                \"OPTIONS\"\n            ]\n        }\n    }\n    \nMake a use of ``enpoint`` parameter to encapsulate a function name:\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)\n    \n    @app.route('/hello_world/', endpoint='custom_endpoint')\n    def hello_world():\n        return 'Hello World!'\n        \n**/config/routes/** response:\n\n.. code:: python\n\n    \u003c...\u003e\n    \"custom_endpoint\": {\n            \"active_urls\": [\n                \"/hello_world/\"\n            ],\n            \"methods\": [\n                \"GET\",\n                \"HEAD\",\n                \"OPTIONS\"\n            ]\n        },\n    \u003c...\u003e\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 hello_world():\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\n**/config/routes/** response:\n\n.. code:: python\n\n    \u003c...\u003e\n    \"my_bp.hello_bp\": {\n            \"active_urls\": [\n                \"/custom_prefix/hello/\"\n            ],\n            \"methods\": [\n                \"GET\",\n                \"OPTIONS\",\n                \"HEAD\"\n            ]\n        },\n    \u003c...\u003e\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 \u003chttps://github.com/UseTheApi/flask_url_discovery/tree/master/tests\u003e`_. To exercise tests run:\n\n.. code:: bash\n\n    python setup.py tests\n    \nDocs\n----\n\nThe package is provided with Sphinx documentation. To create a documentation execute ``make html`` in `docs \u003chttps://github.com/UseTheApi/flask_url_discovery/tree/master/docs\u003e`_ directory.\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 \u003chttps://github.com/UseTheApi/flask_url_discovery\u003e`_ and/or send me an e-mail.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fusetheapi%2Fflask_url_discovery","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fusetheapi%2Fflask_url_discovery","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fusetheapi%2Fflask_url_discovery/lists"}