Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

split service settings #95

Merged
merged 3 commits into from
Oct 19, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion entities/api/files.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
get_settings,
get_sts_client,
)
from platformics.api.core.settings import APISettings
from platformics.settings import APISettings
from sqlalchemy.ext.asyncio import AsyncSession
from platformics.security.authorization import CerbosAction, get_resource_query
from files.format_handlers import get_validator
Expand Down
4 changes: 2 additions & 2 deletions entities/api/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from cerbos.sdk.model import Principal
from fastapi import Depends, FastAPI
from platformics.api.core.deps import get_auth_principal, get_cerbos_client, get_engine
from platformics.api.core.settings import APISettings
from platformics.settings import APISettings
from platformics.api.core.gql_loaders import (
EntityLoader,
get_base_creator,
Expand Down Expand Up @@ -111,7 +111,7 @@ def get_context(

# Make sure tests can get their own instances of the app.
def get_app() -> FastAPI:
settings = APISettings.parse_obj({}) # Workaround for https://github.com/pydantic/pydantic/issues/3753
settings = APISettings.model_validate({}) # Workaround for https://github.com/pydantic/pydantic/issues/3753

# Add a global settings object to the app that we can use as a dependency
graphql_app: GraphQLRouter = GraphQLRouter(schema, context_getter=get_context, graphiql=True)
Expand Down
6 changes: 3 additions & 3 deletions entities/database_migrations/env.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from sqlalchemy import create_engine

from database.models import meta
from platformics.api.core.settings import CLISettings
from platformics.settings import CLISettings

# this is the Alembic Config object, which provides
# access to the values within the .ini file in use.
Expand Down Expand Up @@ -33,7 +33,7 @@ def run_migrations_offline() -> None:
script output.

"""
settings = CLISettings.parse_obj({})
settings = CLISettings.model_validate({})
context.configure(
url=settings.SYNC_DB_URI,
target_metadata=target_metadata,
Expand All @@ -53,7 +53,7 @@ def run_migrations_online() -> None:
and associate a connection with the context.

"""
settings = CLISettings.parse_obj({})
settings = CLISettings.model_validate({})
connectable = create_engine(settings.SYNC_DB_URI)

with connectable.connect() as connection:
Expand Down
4 changes: 2 additions & 2 deletions entities/scripts/create_db.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
from platformics.api.core.settings import APISettings
from platformics.settings import APISettings
from sqlalchemy_utils import create_database, database_exists


def create_db() -> None:
settings = APISettings.parse_obj({})
settings = APISettings.model_validate({})
db_uri = settings.SYNC_DB_URI
if database_exists(db_uri):
print("Database already exists!")
Expand Down
4 changes: 2 additions & 2 deletions entities/scripts/seed.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
from platformics.database.connect import init_sync_db
from test_infra import factories as fa
import factory.random
from platformics.api.core.settings import CLISettings
from platformics.settings import CLISettings


def use_factoryboy() -> None:
settings = CLISettings.parse_obj({})
settings = CLISettings.model_validate({})
app_db = init_sync_db(settings.SYNC_DB_URI)
session = app_db.session()
fa.SessionStorage.set_session(session)
Expand Down
2 changes: 1 addition & 1 deletion platformics/api/core/deps.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from fastapi import Depends
from mypy_boto3_s3.client import S3Client
from mypy_boto3_sts.client import STSClient
from platformics.api.core.settings import APISettings
from platformics.settings import APISettings
from platformics.database.connect import AsyncDB, init_async_db
from platformics.security.token_auth import get_token_claims
from sqlalchemy.ext.asyncio import AsyncSession
Expand Down
6 changes: 3 additions & 3 deletions platformics/cli/generate_token.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import logging

import click
from platformics.api.core.settings import Settings
from platformics.settings import Settings
from platformics.security.token_auth import ProjectRole, create_token

@click.group()
Expand Down Expand Up @@ -47,7 +47,7 @@ def auth() -> None:

@click.pass_context
def generate_token(ctx: click.Context, userid: int, project: list[str], expiration: int) -> None:
settings = Settings.parse_obj({})
settings = Settings.model_validate({})
private_key = settings.JWK_PRIVATE_KEY

project_dict: dict[int, list[str]] = {}
Expand All @@ -62,4 +62,4 @@ def generate_token(ctx: click.Context, userid: int, project: list[str], expirati


if __name__ == "__main__":
cli()
cli()
15 changes: 0 additions & 15 deletions platformics/api/core/settings.py → platformics/settings.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,9 @@
from functools import cached_property

from jwcrypto import jwk
from pydantic import BaseModel
from pydantic_settings import BaseSettings, SettingsConfigDict


class RedisEventBusSettings(BaseModel):
REDIS_URL: str
QUEUE_NAME: str


class EventBusSettings(BaseModel):
REDIS: RedisEventBusSettings


class Settings(BaseSettings):
"""Pydantic Settings object - do not instantiate it directly,
please use get_settings() as a dependency where possible"""
Expand Down Expand Up @@ -47,11 +37,6 @@ class Settings(BaseSettings):
BOTO_ENDPOINT_URL: str
AWS_REGION: str

PLATFORMICS_WORKFLOW_RUNNER_PLUGIN: str

PLATFORMICS_EVENT_BUS_PLUGIN: str
PLATFORMICS_EVENT_BUS: EventBusSettings

############################################################################
# Computed properties

Expand Down
2 changes: 1 addition & 1 deletion workflows/api/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from config import load_event_bus, load_workflow_runners
from fastapi import APIRouter, Depends, FastAPI, Request
from platformics.api.core.deps import get_auth_principal, get_cerbos_client, get_db_session, get_engine
from platformics.api.core.settings import APISettings
from settings import APISettings
from platformics.api.core.strawberry_extensions import DependencyExtension
from platformics.database.connect import AsyncDB
from sqlalchemy.ext.asyncio import AsyncSession
Expand Down
2 changes: 1 addition & 1 deletion workflows/config.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from importlib.metadata import entry_points
from typing import Dict
from platformics.api.core.settings import APISettings
from settings import APISettings
from plugin_types import EventBus, WorkflowRunner


Expand Down
6 changes: 3 additions & 3 deletions workflows/database_migrations/env.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from alembic import context
from database.models import meta
from platformics.api.core.settings import CLISettings
from settings import CLISettings
from sqlalchemy import create_engine

# this is the Alembic Config object, which provides
Expand Down Expand Up @@ -38,7 +38,7 @@ def run_migrations_offline() -> None:
script output.

"""
settings = CLISettings.parse_obj({})
settings = CLISettings.model_validate({})
context.configure(
url=settings.SYNC_DB_URI,
target_metadata=target_metadata,
Expand All @@ -57,7 +57,7 @@ def run_migrations_online() -> None:
and associate a connection with the context.

"""
settings = CLISettings.parse_obj({})
settings = CLISettings.model_validate({})
connectable = create_engine(settings.SYNC_DB_URI)

with connectable.connect() as connection:
Expand Down
2 changes: 1 addition & 1 deletion workflows/plugins/event_bus/redis/event_bus_redis.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import json
from typing import List

from platformics.api.core.settings import RedisEventBusSettings
from settings import RedisEventBusSettings
from plugin_types import EventBus, WorkflowStatusMessage, parse_workflow_status_message

import redis.asyncio as aioredis
Expand Down
4 changes: 2 additions & 2 deletions workflows/run_loader.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@

from config import load_event_bus
from loader import LoaderDriver
from platformics.api.core.settings import APISettings
from settings import APISettings
from platformics.database.connect import init_async_db

if __name__ == "__main__":
print("Starting loader listener")
settings = APISettings.parse_obj({})
settings = APISettings.model_validate({})
app_db = init_async_db(settings.DB_URI)
session = app_db.session()

Expand Down
4 changes: 2 additions & 2 deletions workflows/scripts/create_db.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
from platformics.api.core.settings import APISettings
from settings import APISettings
from sqlalchemy_utils import create_database, database_exists


def create_db() -> None:
settings = APISettings.parse_obj({})
settings = APISettings.model_validate({})
db_uri = settings.SYNC_DB_URI
if database_exists(db_uri):
print("Database already exists!")
Expand Down
2 changes: 1 addition & 1 deletion workflows/scripts/seed.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import factory.random
from factoryboy import workflow_factory as wf
from platformics.api.core.settings import APISettings
from settings import APISettings
from platformics.database.connect import init_sync_db
from manifest import import_manifests

Expand Down
29 changes: 29 additions & 0 deletions workflows/settings.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
from pydantic import BaseModel

from platformics.settings import Settings as PlatformicsSettings
from platformics.settings import APISettings as PlatformicsAPISettings
from platformics.settings import CLISettings as PlatformicCLISettings


class RedisEventBusSettings(BaseModel):
REDIS_URL: str
QUEUE_NAME: str


class EventBusSettings(BaseModel):
REDIS: RedisEventBusSettings


class Settings(PlatformicsSettings):
PLATFORMICS_WORKFLOW_RUNNER_PLUGIN: str

PLATFORMICS_EVENT_BUS_PLUGIN: str
PLATFORMICS_EVENT_BUS: EventBusSettings


class APISettings(PlatformicsAPISettings, Settings):
...


class CLISettings(PlatformicCLISettings, Settings):
...