From 1ee02be65fa6874090452287d8704c580d50b11f Mon Sep 17 00:00:00 2001 From: Alexandre Teles Date: Wed, 31 Aug 2022 17:33:08 -0300 Subject: [PATCH] Upgrade to python 3.10 --- Dockerfile | 2 +- main.py | 6 ++--- modules/ResponseFields.py | 51 +++++++++++++++++++++------------------ modules/ResponseModels.py | 32 ++++++------------------ 4 files changed, 40 insertions(+), 51 deletions(-) diff --git a/Dockerfile b/Dockerfile index 24ed996..bbfc37e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3-slim +FROM python:3.10-slim ARG GITHUB_TOKEN ENV GITHUB_TOKEN $GITHUB_TOKEN diff --git a/main.py b/main.py index a860955..98a960e 100755 --- a/main.py +++ b/main.py @@ -47,7 +47,7 @@ async def root(request: Request, response: Response) -> RedirectResponse: """ return RedirectResponse(url="/docs") -@app.get('/tools', response_model=ResponseModels.LatestTools) +@app.get('/tools', response_model=ResponseModels.ToolsResponseModel) @limiter.limit(config['slowapi']['limit']) async def tools(request: Request, response: Response) -> dict: """Get patching tools' latest version. @@ -57,7 +57,7 @@ async def tools(request: Request, response: Response) -> dict: """ return await releases.get_latest_releases(config['app']['repositories']) -@app.get('/apps', response_model=ResponseModels.SupportedApps) +@app.get('/apps', response_model=ResponseModels.AppsResponseModel) @limiter.limit(config['slowapi']['limit']) async def apps(request: Request, response: Response) -> dict: """Get patchable apps. @@ -67,7 +67,7 @@ async def apps(request: Request, response: Response) -> dict: """ return await releases.get_patchable_apps() -@app.get('/patches', response_model=ResponseModels.Patches) +@app.get('/patches', response_model=ResponseModels.PatchesResponseModel) @limiter.limit(config['slowapi']['limit']) async def patches(request: Request, response: Response) -> dict: """Get latest patches. diff --git a/modules/ResponseFields.py b/modules/ResponseFields.py index dab1d57..d5e3088 100644 --- a/modules/ResponseFields.py +++ b/modules/ResponseFields.py @@ -1,28 +1,33 @@ -from enum import Enum +from pydantic import BaseModel -class LatestToolsFields(str, Enum): +class ToolsResponseFields(BaseModel): """Implements the fields for the /tools endpoint. - - Args: - str (str): String - Enum (Enum): Enum from pydantic - """ - repository = 'repository' - name = 'name' - size = 'size' - browser_download_url = 'browser_download_url' - content_type = 'content_type' - -class SimplifiedPatchesFields(str, Enum): + Args: + BaseModel (pydantic.BaseModel): BaseModel from pydantic + """ + repository: str + name: str + size: str + browser_download_url: str + content_type: str +class CompatiblePackagesResponseFields(BaseModel): + """Implements the fields for compatible packages in the PatchesResponseFields class. + + Args: + BaseModel (pydantic.BaseModel): BaseModel from pydantic + """ + name: str + verstions: list[ str ] | None +class PatchesResponseFields(BaseModel): """Implements the fields for the /patches endpoint. - - Args: - str (str): String - Enum (Enum): Enum from pydantic - """ - target_app = "target_app" - patch_name = "patch_name" - description = "description" - target_version = "target_version" \ No newline at end of file + Args: + BaseModel (pydantic.BaseModel): BaseModel from pydantic + """ + name: str + description: str + version: str + excluded: bool + dependencies: list[ str ] | None + compatiblePackages: list[ CompatiblePackagesResponseFields ] \ No newline at end of file diff --git a/modules/ResponseModels.py b/modules/ResponseModels.py index dd6ce32..9030fd7 100644 --- a/modules/ResponseModels.py +++ b/modules/ResponseModels.py @@ -1,5 +1,4 @@ import modules.ResponseFields as ResponseFields -from typing import Dict, Union, List from pydantic import BaseModel, create_model """Implements pydantic models and model generator for the API's responses.""" @@ -22,7 +21,7 @@ class ModelGenerator(): return create_model(name, **{k: self.__make_model(v, k) for k, v in v.items()}), ... return None, v - def generate(self, v: Dict, name: str): + def generate(self, v: dict, name: str): """Returns a pydantic model from a dictionary. @@ -35,44 +34,29 @@ class ModelGenerator(): """ return self.__make_model(v, name)[0] -class SupportedApps(BaseModel): +class AppsResponseModel(BaseModel): """Implements the JSON response model for the /apps endpoint. Args: BaseModel (pydantic.BaseModel): BaseModel from pydantic """ - apps: List[str] + apps: list[str] -class LatestTools(BaseModel): +class ToolsResponseModel(BaseModel): """Implements the JSON response model for the /tools endpoint. Args: BaseModel (pydantic.BaseModel): BaseModel from pydantic """ - tools: List[ Dict[ ResponseFields.LatestToolsFields, str ] ] - - class Config: - use_enum_values = True - -class SimplifiedPatches(BaseModel): + tools: list[ ResponseFields.ToolsResponseFields ] + +class PatchesResponseModel(BaseModel): """Implements the JSON response model for the /patches endpoint. Args: BaseModel (pydantic.BaseModel): BaseModel from pydantic """ - patches: List[ Dict[ ResponseFields.SimplifiedPatchesFields, str ] ] - - class Config: - use_enum_values = True - -class Patches(BaseModel): - """_summary_ - - Args: - BaseModel (pydantic.BaseModel): BaseModel from pydantic - """ - - __root__ = List[ Dict[ str, Union[str, List[str], Dict, bool] ] ] \ No newline at end of file + __root__: list[ ResponseFields.PatchesResponseFields ] \ No newline at end of file