feat: move endpoints into custom routers, resolves #12 (#14)

* refactor: import routers from old branch

* refactor: import InternalCache removal

* refactor: move routes into dedicated routers

* fix: fixes entrypoint

* refactor: add documentation and bump libs
This commit is contained in:
Alexandre Teles
2022-10-11 00:10:56 -03:00
committed by GitHub
parent 6133b4f776
commit 0ce5780a4e
40 changed files with 859 additions and 734 deletions

View File

@ -0,0 +1,46 @@
from pydantic import BaseModel
from typing import Literal
AnnouncementType = Literal["info", "warning", "error"]
class AnnouncementModel(BaseModel):
"""Implements the fields for the announcements.
Args:
BaseModel (pydantic.BaseModel): BaseModel from pydantic
"""
created_at: int
author: str
type: AnnouncementType
title: str
content: str
class AnnouncementCreateModel(BaseModel):
"""Implements the fields for creating an announcement.
Args:
BaseModel (pydantic.BaseModel): BaseModel from pydantic
"""
type: AnnouncementType
title: str
content: str
class AnnouncementCreatedResponse(BaseModel):
"""Implements the response fields for created announcements.
Args:
BaseModel (pydantic.BaseModel): BaseModel from pydantic
"""
created: bool
class AnnouncementDeleted(BaseModel):
"""Implements the response fields for deleted announcements.
Args:
BaseModel (pydantic.BaseModel): BaseModel from pydantic
"""
deleted: bool

View File

@ -0,0 +1,24 @@
from pydantic import BaseModel
class ClientModel(BaseModel):
"""Implements the fields for the clients.
Args:
BaseModel (pydantic.BaseModel): BaseModel from pydantic
"""
id: str
secret: str
admin: bool
active: bool
class ClientAuthModel(BaseModel):
"""Implements the fields for client authentication.
Args:
BaseModel (pydantic.BaseModel): BaseModel from pydantic
"""
id: str
secret: str

View File

@ -0,0 +1,51 @@
from pydantic import BaseModel
class InternalServerError(BaseModel):
"""Implements the response fields for when an internal server error occurs.
Args:
BaseModel (pydantic.BaseModel): BaseModel from pydantic
"""
error: str = "Internal Server Error"
message: str = "An internal server error occurred. Please try again later."
class AnnouncementNotFound(BaseModel):
"""Implements the response fields for when an item is not found.
Args:
BaseModel (pydantic.BaseModel): BaseModel from pydantic
"""
error: str = "Not Found"
message: str = "No announcement was found."
class ClientNotFound(BaseModel):
"""Implements the response fields for when a client is not found.
Args:
BaseModel (pydantic.BaseModel): BaseModel from pydantic
"""
error: str = "Not Found"
message: str = "No client matches the given ID"
class IdNotProvided(BaseModel):
"""Implements the response fields for when the id is not provided.
Args:
BaseModel (pydantic.BaseModel): BaseModel from pydantic
"""
error: str = "Bad Request"
message: str = "Missing client id"
class Unauthorized(BaseModel):
"""Implements the response fields for when the client is unauthorized.
Args:
BaseModel (pydantic.BaseModel): BaseModel from pydantic
"""
error: str = "Unauthorized"
message: str = "The client is unauthorized to access this resource"

View File

@ -0,0 +1,77 @@
from typing import Any
from pydantic import BaseModel
class ToolsResponseFields(BaseModel):
"""Implements the fields for the /tools endpoint.
Args:
BaseModel (pydantic.BaseModel): BaseModel from pydantic
"""
repository: str
version: str
timestamp: str
name: str
size: str | None = None
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
versions: list[ str ] | None
class PatchesOptionsResponseFields(BaseModel):
key: str
title: str
description: str
required: bool
choices: list[ Any ] | None
class PatchesResponseFields(BaseModel):
"""Implements the fields for the /patches endpoint.
Args:
BaseModel (pydantic.BaseModel): BaseModel from pydantic
"""
name: str
description: str
version: str
excluded: bool
deprecated: bool
dependencies: list[ str ] | None
options: list[ PatchesOptionsResponseFields ] | None
compatiblePackages: list[ CompatiblePackagesResponseFields ]
class ContributorFields(BaseModel):
"""Implements the fields for each contributor in the /contributors endpoint.
Args:
BaseModel (pydantic.BaseModel): BaseModel from pydantic
"""
login: str
avatar_url: str
html_url: str
class ContributorsResponseFields(BaseModel):
"""Implements the fields for each repository in the /contributors endpoint
Args:
BaseModel (pydantic.BaseModel): BaseModel from pydantic
"""
name: str
contributors: list[ ContributorFields ]
class ChangelogsResponseFields(BaseModel):
"""Implements the fields for the /changelogs endpoint.
Args:
BaseModel (pydantic.BaseModel): BaseModel from pydantic
"""
sha: str
author: str
message: str
html_url: str

View File

@ -0,0 +1,101 @@
from pydantic import BaseModel
import app.models.ResponseFields as ResponseFields
"""Implements pydantic models and model generator for the API's responses."""
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 ]
class ContributorsResponseModel(BaseModel):
"""Implements the JSON response model for the /contributors endpoint.
Args:
BaseModel (pydantic.BaseModel): BaseModel from pydantic
"""
repositories: list[ ResponseFields.ContributorsResponseFields ]
class PingResponseModel(BaseModel):
"""Implements the JSON response model for the /heartbeat endpoint.
Args:
BaseModel (pydantic.BaseModel): BaseModel from pydantic
"""
status: int
detail: str
class ClientDeletedResponse(BaseModel):
"""Implements the response fields for deleted clients.
Args:
BaseModel (pydantic.BaseModel): BaseModel from pydantic
"""
id: str
deleted: bool
class ClientSecretUpdatedResponse(BaseModel):
"""Implements the response fields for updated client secrets.
Args:
BaseModel (pydantic.BaseModel): BaseModel from pydantic
"""
id: str
secret: str
class ClientAuthTokenResponse(BaseModel):
"""Implements the response fields for client auth tokens.
Args:
BaseModel (pydantic.BaseModel): BaseModel from pydantic
"""
access_token: str
refresh_token: str
class ClientTokenRefreshResponse(BaseModel):
"""Implements the response fields for client token refresh.
Args:
BaseModel (pydantic.BaseModel): BaseModel from pydantic
"""
access_token: str
class ClientStatusResponse(BaseModel):
"""Implements the response fields for client status.
Args:
BaseModel (pydantic.BaseModel): BaseModel from pydantic
"""
id: str
active: bool
class ChangelogsResponseModel(BaseModel):
"""Implements the JSON response model for the /changelogs endpoint.
Args:
BaseModel (pydantic.BaseModel): BaseModel from pydantic
"""
repository: str
path: str
commits: list[ ResponseFields.ChangelogsResponseFields ]

0
app/models/__init__.py Normal file
View File