{"id":14065197,"url":"https://github.com/zero-shubham/flask-ease","last_synced_at":"2025-04-12T12:52:24.550Z","repository":{"id":51352002,"uuid":"278800821","full_name":"zero-shubham/flask-ease","owner":"zero-shubham","description":"Flask extension for creating REST APIs. You get autogenerated OpenAPI spec (with Redoc and Swagger Docs), Request parsing and validations (query, path, body, form and files). Response Validation. It uses pydantic under the hood.","archived":false,"fork":false,"pushed_at":"2022-12-26T22:38:47.000Z","size":198,"stargazers_count":4,"open_issues_count":5,"forks_count":1,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-03-21T22:02:59.463Z","etag":null,"topics":["flask","pydantic","python","rest-api"],"latest_commit_sha":null,"homepage":"https://pypi.org/project/FlaskEase/","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/zero-shubham.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-07-11T06:12:55.000Z","updated_at":"2023-05-17T23:30:00.000Z","dependencies_parsed_at":"2023-01-31T02:01:05.186Z","dependency_job_id":null,"html_url":"https://github.com/zero-shubham/flask-ease","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/zero-shubham%2Fflask-ease","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zero-shubham%2Fflask-ease/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zero-shubham%2Fflask-ease/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zero-shubham%2Fflask-ease/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zero-shubham","download_url":"https://codeload.github.com/zero-shubham/flask-ease/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248571604,"owners_count":21126519,"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","pydantic","python","rest-api"],"created_at":"2024-08-13T07:04:21.717Z","updated_at":"2025-04-12T12:52:24.521Z","avatar_url":"https://github.com/zero-shubham.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"# FlaskEase\n\n[Flask](http://flask.pocoo.org/) extension for creating REST APIs. You get autogenerated OpenAPI spec (with Redoc and Swagger Docs), Request parsing and validations (query, path, body, form and files) and Response validation.\n\nCheckout example [here](https://github.com/zero-shubham/flask-ease/tree/master/example)\n\n## Documentation\n\nDocumentation is coming soon :)\n\n## Try Example\n\n\u003cdiv class=\"termy\"\u003e\n\n```console\n$ git clone git@github.com:zero-shubham/flask-ease.git\n$ cd flask-ease\n$ poetry install\n$ source \"$( poetry env list --full-path )/bin/activate\"\n$ python example/main.py\n```\n\n\u003c/div\u003e\n\nNow go to \u003ca href=\"http://127.0.0.1:5000/docs\" class=\"external-link\" target=\"_blank\"\u003ehttp://127.0.0.1:5000/docs\u003c/a\u003e to find SwaggerUI docs for your API.\n\n## Simple Usage\n\n```python\n\n# * example/resources/pet.py\nfrom application import (\n    FlaskEaseAPI,\n    Depends,\n    HTTPException,\n    status,\n    File\n)\nfrom schemas.pet import (\n    PetCreationForm,\n    PetInResp,\n    PetInDB,\n    PetsInResp\n)\nfrom utils.dependencies import get_current_user\nfrom crud.pet import (\n    add_new_pet_to_db,\n    find_pet_by_id,\n    get_all_pets_count_in_db,\n    get_all_pets_in_db\n)\nfrom uuid import uuid4, UUID\nfrom flask import send_from_directory\n\npets_blp = FlaskEaseAPI(\n    blueprint_name=\"Pets\",\n    url_prefix=\"/pets\"\n)\n\n\n@pets_blp.post(\n    route=\"/\",\n    response_model=PetInResp,\n    tags=[\"pets\"],\n    auth_required=True\n)\ndef create_new_pet(\n    obj_in: PetCreationForm,\n    current_user=Depends(get_current_user)\n):\n    \"\"\"\n    Add a new pet to DB\n    \"\"\"\n\n    if obj_in.owner != current_user[\"id\"]:\n        raise HTTPException(\n            status.HTTP_403_FORBIDDEN,\n            \"You are not authorised for this operation.\"\n        )\n\n    new_pet = add_new_pet_to_db(PetInDB(\n        id=str(uuid4()),\n        **obj_in.dict()\n    ).dict())\n    return new_pet\n\n\n@pets_blp.get(\n    route=\"/\u003cuuid:id\u003e\",\n    response_model=PetInResp,\n    tags=[\"pets\"],\n    auth_required=True\n)\ndef get_pet_by_id(\n    id: UUID\n):\n    \"\"\"\n    Get pet by id\n    \"\"\"\n    pet = find_pet_by_id(id)\n    return pet\n\n\n@pets_blp.get(\n    route=\"/\",\n    response_model=PetsInResp,\n    tags=[\"pets\"],\n    auth_required=True\n)\ndef get_all_pets(\n    offset: int = 0,\n    limit: int = 10,\n    current_user=Depends(get_current_user)\n):\n    \"\"\"\n    Get all pets in db\n    \"\"\"\n    pets = get_all_pets_in_db(\n        offset,\n        limit\n    )\n    count = get_all_pets_count_in_db()\n    return PetsInResp(\n        pets=pets,\n        total_count=count\n    )\n\n\n@pets_blp.post(\n    route=\"/\u003cuuid:id\u003e/photo\",\n    tags=[\"pets\"],\n    auth_required=True,\n    responses={\n        '204': 'File accepted and saved.'\n    }\n)\ndef add_pet_photo(\n    id: UUID,\n    photo: File(\"image/png\"),\n    current_user=Depends(get_current_user)\n):\n    \"\"\"\n    Add pet photo.\n    \"\"\"\n    with open(f\"{id}.png\", \"wb\") as photoFile:\n        photoFile.write(photo)\n    return \"True\", 204\n\n\n```\n\n## _For a complete understanding check the example [here](https://github.com/zero-shubham/flask-ease/tree/master/example)_\n\n**~~File-uploads are not yet supported via FlaskEase - to be added soon~~**\n**Now with File-upload and Multipart-Form support.**\n\n**Abandoned project -  chose to solve better problems. Use FastAPI or flask-smorest**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzero-shubham%2Fflask-ease","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzero-shubham%2Fflask-ease","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzero-shubham%2Fflask-ease/lists"}