Skip to content

Commit

Permalink
try sys.path
Browse files Browse the repository at this point in the history
  • Loading branch information
jrycw committed Feb 29, 2024
1 parent b9d358c commit 05e90d2
Show file tree
Hide file tree
Showing 6 changed files with 76 additions and 34 deletions.
7 changes: 4 additions & 3 deletions app/common.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
from fastapi import APIRouter
from fastapi import APIRouter, Request

router = APIRouter(include_in_schema=False)


@router.get("/")
async def home():
return {"message": "Hello World from FastAPI"}
async def home(request: Request):
client_host = request.client.host
return {"message": "Hello World from FastAPI", "client_host": client_host}
24 changes: 24 additions & 0 deletions app/config.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
from pydantic_settings import BaseSettings, SettingsConfigDict

# from typing import Annotated
# from pydantic import AfterValidator, HttpUrl
# HttpUrlString = Annotated[HttpUrl, AfterValidator(str)]


class Settings(BaseSettings):
frontendschema: str = "http"
frontendhost: str = "localhost"
frontendport: int = 7000
frontendreload: bool = False

backendschema: str = "http"
backendhost: str = "localhost"
backendport: int = 8000
backendreload: bool = False

tz: str = "UTC"

model_config = SettingsConfigDict(env_file=".env", env_file_encoding="utf-8")


settings = Settings()
23 changes: 19 additions & 4 deletions app/main.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,24 @@
import os
import sys

import uvicorn
from fastapi import FastAPI
from starlette.middleware.cors import CORSMiddleware

sys.path.append(os.getcwd())
from app import common, events, health, users

from .lifespan import lifespan
from app.config import settings
from app.lifespan import lifespan


def make_app(lifespan):
app = FastAPI(lifespan=lifespan)

# Set all CORS enabled origins
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_origins=[
f"{settings.frontendschema}://{settings.frontendhost}:{settings.frontendport}"
],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
Expand All @@ -27,3 +33,12 @@ def make_app(lifespan):


app = make_app(lifespan)

if __name__ == "__main__":
print(f"Backend: {settings=}")
uvicorn.run(
"main:app",
host=settings.backendhost,
port=settings.backendport,
reload=settings.backendreload,
)
22 changes: 3 additions & 19 deletions fastui_app/_lifespan.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
import edgedb
import svcs
from edgedb.asyncio_client import AsyncIOClient
from fastapi import FastAPI
from httpx import AsyncClient

Expand All @@ -9,8 +7,9 @@

async def _lifespan(app: FastAPI, registry: svcs.Registry):
# Web client(connect to backend)
host = str(settings.backendhost).rstrip("/") # any better ways?
base_url = f"{host}:{settings.backendport}"
base_url = (
f"{settings.backendschema}://{settings.backendhost}:{settings.backendport}"
)
client = AsyncClient(base_url=base_url)

async def setup_httpx_client():
Expand All @@ -20,21 +19,6 @@ async def setup_httpx_client():
AsyncClient,
setup_httpx_client,
)
if settings.frontenddebug:
# EdgeDB client
db_client = edgedb.create_async_client()

async def setup_db_client():
yield db_client

async def ping_db_callable(_db_client):
return await _db_client.query("select 1;")

registry.register_factory(
AsyncIOClient,
setup_db_client,
ping=ping_db_callable,
)

yield

Expand Down
15 changes: 10 additions & 5 deletions fastui_app/config.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,24 @@
from pydantic import HttpUrl
from pydantic_settings import BaseSettings, SettingsConfigDict

# from typing import Annotated
# from pydantic import AfterValidator, HttpUrl
# HttpUrlString = Annotated[HttpUrl, AfterValidator(str)]


class Settings(BaseSettings):
frontendhost: HttpUrl = "http://localhost"
frontendschema: str = "http"
frontendhost: str = "localhost"
frontendport: int = 7000
frontenddebug: bool = False
frontendreload: bool = False

backendhost: HttpUrl = "http://localhost"
backendschema: str = "http"
backendhost: str = "localhost"
backendport: int = 8000
backendreload: bool = False

tz: str = "UTC"

model_config = SettingsConfigDict(env_file=".env", env_file_encoding="utf-8")


settings = Settings()
# print(f"{settings=} from frontend")
19 changes: 16 additions & 3 deletions fastui_app/main.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,19 @@
import os
import sys

import uvicorn
from fastapi import FastAPI
from starlette.middleware.cors import CORSMiddleware

sys.path.append(os.getcwd())
from fastui_app import common, events, users

from .lifespan import lifespan
from fastui_app.config import settings
from fastui_app.lifespan import lifespan


def make_app(lifespan):
app = FastAPI(lifespan=lifespan)

# Set all CORS enabled origins
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
Expand All @@ -27,3 +31,12 @@ def make_app(lifespan):


app = make_app(lifespan)

if __name__ == "__main__":
print(f"Frontend: {settings=}")
uvicorn.run(
"main:app",
host=settings.frontendhost,
port=settings.frontendport,
reload=settings.frontendreload,
)

0 comments on commit 05e90d2

Please sign in to comment.