revanced-releases-api/modules/ResponseModels.py
2022-08-31 17:33:08 -03:00

62 lines
1.7 KiB
Python

import modules.ResponseFields as ResponseFields
from pydantic import BaseModel, create_model
"""Implements pydantic models and model generator for the API's responses."""
class ModelGenerator():
"""Generates a pydantic model from a dictionary."""
def __make_model(self, v, name):
# Parses a dictionary and creates a pydantic model from it.
#
# Args:
# v: key value
# name: key name
#
# Returns:
# pydantic.BaseModel: Generated pydantic model
if type(v) is dict:
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):
"""Returns a pydantic model from a dictionary.
Args:
v (Dict): JSON dictionary
name (str): Model name
Returns:
pydantic.BaseModel: Generated pydantic model
"""
return self.__make_model(v, name)[0]
class AppsResponseModel(BaseModel):
"""Implements the JSON response model for the /apps endpoint.
Args:
BaseModel (pydantic.BaseModel): BaseModel from pydantic
"""
apps: list[str]
class ToolsResponseModel(BaseModel):
"""Implements the JSON response model for the /tools endpoint.
Args:
BaseModel (pydantic.BaseModel): BaseModel from pydantic
"""
tools: list[ ResponseFields.ToolsResponseFields ]
class PatchesResponseModel(BaseModel):
"""Implements the JSON response model for the /patches endpoint.
Args:
BaseModel (pydantic.BaseModel): BaseModel from pydantic
"""
__root__: list[ ResponseFields.PatchesResponseFields ]