Skip to content

Commit

Permalink
Refactored Database Models
Browse files Browse the repository at this point in the history
Refactored Database Models
 + Split some attributes into their own tables
 + Combined `ErrorMessages` and `TrustUpdate` tables into one (`RecipeResults`)
  + Moved pydantic models to their own file -- this seems to be required to help support using Foreign Keys in Tortoise ORM (still working on getting this to work)
  • Loading branch information
MLBZ521 committed Jul 27, 2023
1 parent f30cfa1 commit 1e5e4ba
Show file tree
Hide file tree
Showing 23 changed files with 340 additions and 211 deletions.
4 changes: 2 additions & 2 deletions PkgBot.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
config = config.load_config(cli_args=tuple(sys.argv[1:]))

from pkgbot.utilities import common as utility
from pkgbot.db import models
from pkgbot.db import schemas
from pkgbot import api, core, create_pkgbot


Expand Down Expand Up @@ -74,7 +74,7 @@ async def startup_event():
pkgbot_admins = config.PkgBot.get("Admins")

for admin in pkgbot_admins:
user_object = models.PkgBotAdmin_In(
user_object = schemas.PkgBotAdmin_In(
username = admin,
slack_id = pkgbot_admins.get(admin),
full_admin = True
Expand Down
16 changes: 8 additions & 8 deletions Settings/blocks.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from operator import itemgetter

from pkgbot import config
from pkgbot.db import models
from pkgbot.db import schemas


config = config.load_config()
Expand All @@ -11,7 +11,7 @@
PKGBOT_SERVER = f"http{SECURE}://{config.PkgBot.get('host')}:{config.PkgBot.get('port')}"


async def brick_header(pkg_object: models.Package_In):
async def brick_header(pkg_object: schemas.Package_In):

return {
"type": "header",
Expand All @@ -22,7 +22,7 @@ async def brick_header(pkg_object: models.Package_In):
}


async def brick_main(pkg_object: models.Package_In):
async def brick_main(pkg_object: schemas.Package_In):

return {
"type": "section",
Expand All @@ -38,7 +38,7 @@ async def brick_main(pkg_object: models.Package_In):
}


async def brick_footer_dev(pkg_object: models.Package_In):
async def brick_footer_dev(pkg_object: schemas.Package_In):

return {
"type": "context",
Expand All @@ -51,15 +51,15 @@ async def brick_footer_dev(pkg_object: models.Package_In):
}


async def brick_footer_promote(pkg_object: models.Package_In):
async def brick_footer_promote(pkg_object: schemas.Package_In):

return {
"type": "mrkdwn",
"text": f"*Prod*: {pkg_object.dict().get('promoted_date')}\t*Approved by*: @{pkg_object.dict().get('updated_by')}"
}


async def brick_footer_denied(pkg_object: models.Package_In):
async def brick_footer_denied(pkg_object: schemas.Package_In):

return {
"type": "mrkdwn",
Expand All @@ -80,7 +80,7 @@ async def brick_footer_denied_trust(trust_object):
}


async def brick_button(pkg_object: models.Package_In):
async def brick_button(pkg_object: schemas.Package_In):

return (
{
Expand Down Expand Up @@ -207,7 +207,7 @@ async def brick_update_trust_error_msg(trust_object, msg):
}]


async def brick_deny_pkg(pkg_object: models.Package_In):
async def brick_deny_pkg(pkg_object: schemas.Package_In):

return {
"type": "header",
Expand Down
14 changes: 7 additions & 7 deletions Settings/messages.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import json

from pkgbot.db import models
from pkgbot.db import schemas
from . import blocks as block


Expand All @@ -9,7 +9,7 @@ async def format_json(the_json, indent=4):
return json.dumps(the_json, indent=indent)


async def new_pkg(pkg_object: models.Package_In):
async def new_pkg(pkg_object: schemas.Package_In):

blocks = [
await block.brick_header(pkg_object),
Expand Down Expand Up @@ -42,7 +42,7 @@ async def trust_diff(id: int, recipe: str, diff_msg: str = None):
return await format_json(blocks)


async def deny_pkg(pkg_object: models.Package_In ):
async def deny_pkg(pkg_object: schemas.Package_In ):

brick_footer = await block.brick_footer_dev(pkg_object)
brick_footer.get("elements").append(
Expand All @@ -58,7 +58,7 @@ async def deny_pkg(pkg_object: models.Package_In ):
return await format_json(blocks)


async def deny_trust(trust_object: models.TrustUpdate_In):
async def deny_trust(trust_object: schemas.RecipeResult_In):

blocks = [
await block.brick_deny_trust(trust_object),
Expand All @@ -68,7 +68,7 @@ async def deny_trust(trust_object: models.TrustUpdate_In):
return await format_json(blocks)


async def promote(pkg_object: models.Package_In):
async def promote(pkg_object: schemas.Package_In):

brick_footer = await block.brick_footer_dev(pkg_object)
brick_footer.get("elements").append(
Expand All @@ -83,7 +83,7 @@ async def promote(pkg_object: models.Package_In):
return await format_json(blocks)


async def update_trust_success(trust_object: models.TrustUpdate_In):
async def update_trust_success(trust_object: schemas.RecipeResult_In):

blocks = [
await block.brick_update_trust_success_msg(trust_object),
Expand All @@ -93,7 +93,7 @@ async def update_trust_success(trust_object: models.TrustUpdate_In):
return await format_json(blocks)


async def update_trust_error(msg: str, trust_object: models.TrustUpdate_In):
async def update_trust_error(msg: str, trust_object: schemas.RecipeResult_In):

blocks = await block.brick_update_trust_error_msg(trust_object, msg)
blocks.append(await block.brick_trust_diff_button(trust_object.dict().get('id')))
Expand Down
3 changes: 3 additions & 0 deletions pkgbot/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from fastapi import FastAPI

from tortoise import Tortoise
from tortoise.contrib.fastapi import register_tortoise

from pkgbot import settings
Expand All @@ -17,6 +18,8 @@ def create_pkgbot() -> FastAPI:
docs_url="/api"
)

Tortoise.init_models(['pkgbot.db.models'], 'pkgbot')

# Initialize Tortoise ORM (aka, the database)
register_tortoise(
app,
Expand Down
6 changes: 3 additions & 3 deletions pkgbot/api/auth.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from fastapi_login.exceptions import InvalidCredentialsException

from pkgbot import config, core, settings
from pkgbot.db import models
from pkgbot.db import schemas
from pkgbot.utilities import common as utility


Expand Down Expand Up @@ -103,13 +103,13 @@ async def create_token(form_data: OAuth2PasswordRequestForm = Depends(OAuth2Pass

# @router.get("/test", summary="Return user's JWT",
# description="Test endpoint to return the current user's token.")
# async def test(user: models.PkgBotAdmin_In = Depends(user.get_current_user)):
# async def test(user: schemas.PkgBotAdmin_In = Depends(user.get_current_user)):

# return { "token": user.jps_token }


@router.get("/authorizations", summary="Check user permissions",
description="Returns the authenticated user's permissions (e.g. Site access).")
async def authorizations(user_object: models.PkgBotAdmin_In = Depends(core.user.get_current)):
async def authorizations(user_object: schemas.PkgBotAdmin_In = Depends(core.user.get_current)):

return { "sites": await core.user.authorizations(user_object.jps_token) }
10 changes: 5 additions & 5 deletions pkgbot/api/autopkg.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from fastapi_utils.tasks import repeat_every

from pkgbot import api, config, core, settings
from pkgbot.db import models
from pkgbot.db import models, schemas
from pkgbot.utilities import common as utility


Expand All @@ -28,11 +28,11 @@ async def results(task_id: str):
@router.post("/workflow/dev", summary="Dev Workflow",
description="The Dev workflow will create a new package and post to chat.",
dependencies=[Depends(core.user.verify_admin)])
async def workflow_dev(pkg_object: models.Package_In = Depends(models.Package_In)):
async def workflow_dev(pkg_object: schemas.Package_In = Depends(schemas.Package_In)):
"""Workflow to create a new package in the database and then post a message to chat.
Args:
pkg_object (models.Package_In): Details about a package object
pkg_object (schemas.Package_In): Details about a package object
Returns:
[JSON]: Result of the operation
Expand All @@ -45,7 +45,7 @@ async def workflow_dev(pkg_object: models.Package_In = Depends(models.Package_In
@router.post("/workflow/prod", summary="Production Workflow",
description="Workflow to move a package into production and update the Slack message.",
dependencies=[Depends(core.user.verify_admin)])
async def workflow_prod(promoted_id: int, pkg_object: models.Package_In = Depends(models.Package_In)):
async def workflow_prod(promoted_id: int, pkg_object: schemas.Package_In = Depends(schemas.Package_In)):

return await core.autopkg.workflow_prod(promoted_id, pkg_object)

Expand Down Expand Up @@ -183,7 +183,7 @@ async def receive(request: Request, task_id = Body()):
async def autopkg_update_recipe_trust(
recipe_id: str | None = None,
autopkg_cmd: models.AutoPkgCMD_UpdateTrustInfo = Depends(models.AutoPkgCMD_UpdateTrustInfo),
trust_object: models.TrustUpdate_In | None = Depends(models.TrustUpdate_In)
trust_object: schemas.RecipeResult_In | None = Depends(schemas.RecipeResult_In)
):

queued_task = await core.autopkg.update_trust(autopkg_cmd, trust_object, recipe_id)
Expand Down
14 changes: 7 additions & 7 deletions pkgbot/api/build_msg.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from fastapi import APIRouter, Depends

from pkgbot import config, core, settings
from pkgbot.db import models
from pkgbot.db import schemas


config = config.load_config()
Expand All @@ -25,7 +25,7 @@

@router.get("/new-pkg-msg", summary="Build new package message",
description="Builds a 'new package' message after a .pkg is added to the dev environment.")
async def new_pkg_msg(pkg_object: models.Package_In = Depends(models.Package_In)):
async def new_pkg_msg(pkg_object: schemas.Package_In = Depends(schemas.Package_In)):

return await core.chatbot.build.new_pkg_msg(pkg_object)

Expand All @@ -46,37 +46,37 @@ async def trust_diff_msg(id: int, recipe: str, diff_msg: str = None):

@router.get("/deny-pkg-msg", summary="Build deny package message",
description="Builds a message after a .pkg was not approved for the production environment.")
async def deny_pkg_msg(pkg_object: models.Package_In = Depends(models.Package_In)):
async def deny_pkg_msg(pkg_object: schemas.Package_In = Depends(schemas.Package_In)):

return await core.chatbot.build.deny_pkg_msg(pkg_object)

@router.get("/deny-trust-msg", summary="Build deny trust message",
description="Builds a message stating a recipe's parent trust info changes were denied.")
async def deny_trust_msg(
trust_object: models.TrustUpdate_In = Depends(models.TrustUpdate_In)):
trust_object: schemas.RecipeResult_In = Depends(schemas.RecipeResult_In)):

return await core.chatbot.build.deny_trust_msg(trust_object)


@router.get("/promote-msg", summary="Build promoted package message",
description="Builds a message after a .pkg is promoted to the production environment.")
async def promote_msg(pkg_object: models.Package_In = Depends(models.Package_In)):
async def promote_msg(pkg_object: schemas.Package_In = Depends(schemas.Package_In)):

return await core.chatbot.build.promote_msg(pkg_object)


@router.get("/update-trust-success-msg", summary="Build trust update success message",
description="Builds a message when a recipe's trust info is updated successfully.")
async def update_trust_success_msg(
trust_object: models.TrustUpdate_In = Depends(models.TrustUpdate_In)):
trust_object: schemas.RecipeResult_In = Depends(schemas.RecipeResult_In)):

return await core.chatbot.build.update_trust_success_msg(trust_object)


@router.get("/update-trust-error-msg", summary="Build trust update error message",
description="Builds a message when a recipe's trust info failed to update.")
async def update_trust_error_msg(msg: str,
trust_object: models.TrustUpdate_In = Depends(models.TrustUpdate_In)):
trust_object: schemas.RecipeResult_In = Depends(schemas.RecipeResult_In)):

return await core.chatbot.build.update_trust_error_msg(trust_object)

Expand Down
16 changes: 8 additions & 8 deletions pkgbot/api/package.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from fastapi import APIRouter, Depends, HTTPException, status

from pkgbot import core, settings
from pkgbot.db import models
from pkgbot.db import models, schemas


router = APIRouter(
Expand All @@ -15,28 +15,28 @@
dependencies=[Depends(core.user.get_current)], response_model=dict)
async def get_packages():

packages = await models.Package_Out.from_queryset(core.package.get())
packages = await schemas.Package_Out.from_queryset(core.package.get())
return { "total": len(packages), "packages": packages }


@router.get("/id/{id}", summary="Get package by id", description="Get a package by its id.",
dependencies=[Depends(core.user.get_current)], response_model=models.Package_Out)
dependencies=[Depends(core.user.get_current)], response_model=schemas.Package_Out)
async def get_package_by_id(id: int):

return await core.package.get({"id": id})


@router.post("/", summary="Create a package", description="Create a package.",
dependencies=[Depends(core.user.verify_admin)], response_model=models.Package_Out)
async def create(pkg_object: models.Package_In = Depends(models.Package_In)):
dependencies=[Depends(core.user.verify_admin)], response_model=schemas.Package_Out)
async def create(pkg_object: schemas.Package_In = Depends(schemas.Package_In)):

return await models.Package_Out.from_tortoise_orm(
return await schemas.Package_Out.from_tortoise_orm(
await core.package.create(pkg_object.dict(exclude_unset=True, exclude_none=True)))


@router.put("/id/{id}", summary="Update package by id", description="Update a package by id.",
dependencies=[Depends(core.user.verify_admin)], response_model=models.Package_Out)
async def update(id: int, pkg_object: models.Package_In = Depends(models.Package_In)):
dependencies=[Depends(core.user.verify_admin)], response_model=schemas.Package_Out)
async def update(id: int, pkg_object: schemas.Package_In = Depends(schemas.Package_In)):

await core.package.update(
{"id": id},
Expand Down
Loading

0 comments on commit 1e5e4ba

Please sign in to comment.