From 4e77b8217ad057e1525c0286b26d26045701093a Mon Sep 17 00:00:00 2001 From: Markbeep Date: Sat, 15 Feb 2025 16:58:23 +0100 Subject: [PATCH] base setup --- .gitignore | 6 ++++++ app/__init__.py | 0 app/db.py | 18 ++++++++++++++++ app/main.py | 6 ++++++ app/models.py | 8 +++++++ app/routers/__init__.py | 0 app/routers/root.py | 17 +++++++++++++++ flake.lock | 25 +++++++++++++++++++++ flake.nix | 25 +++++++++++++++++++++ pyproject.toml | 17 +++++++++++++++ requirements.txt | 48 +++++++++++++++++++++++++++++++++++++++++ styles/globals.css | 1 + tailwind.config.js | 12 +++++++++++ templates/root.html | 14 ++++++++++++ 14 files changed, 197 insertions(+) create mode 100644 .gitignore create mode 100644 app/__init__.py create mode 100644 app/db.py create mode 100644 app/main.py create mode 100644 app/models.py create mode 100644 app/routers/__init__.py create mode 100644 app/routers/root.py create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 pyproject.toml create mode 100644 requirements.txt create mode 100644 styles/globals.css create mode 100644 tailwind.config.js create mode 100644 templates/root.html diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2caa155 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +.direnv +.venv +.env +.envrc +__pycache__ +static diff --git a/app/__init__.py b/app/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/db.py b/app/db.py new file mode 100644 index 0000000..a793c1a --- /dev/null +++ b/app/db.py @@ -0,0 +1,18 @@ +from os import getenv +from sqlalchemy import create_engine +from sqlmodel import Session + +host = getenv("POSTGRES_HOST", "localhost") +password = getenv("POSTGRES_PASSWORD", "docker") +user = getenv("POSTGRES_USER", "docker") +database = getenv("POSTGRES_DATABASE", "docker") +port = getenv("POSTGRES_PORT", "5432") + +engine = create_engine( + f"postgresql+psycopg2://{user}:{password}@{host}:{port}/{database}" +) + + +def get_session(): + with Session(engine) as session: + yield session diff --git a/app/main.py b/app/main.py new file mode 100644 index 0000000..1ac95e9 --- /dev/null +++ b/app/main.py @@ -0,0 +1,6 @@ +from fastapi import FastAPI +from app.routers import root + +app = FastAPI() + +app.include_router(root.router) diff --git a/app/models.py b/app/models.py new file mode 100644 index 0000000..570d2af --- /dev/null +++ b/app/models.py @@ -0,0 +1,8 @@ + + +from sqlmodel import SQLModel + + +class BaseModel(SQLModel): + pass + diff --git a/app/routers/__init__.py b/app/routers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/routers/root.py b/app/routers/root.py new file mode 100644 index 0000000..d91aed2 --- /dev/null +++ b/app/routers/root.py @@ -0,0 +1,17 @@ + + +from fastapi import APIRouter, Request +from fastapi.responses import FileResponse +from jinja2_fragments.fastapi import Jinja2Blocks + +router = APIRouter() + +templates = Jinja2Blocks(directory="templates") + +@router.get("/globals.css") +def read_globals_css(): + return FileResponse("static/globals.css") + +@router.get("/") +async def read_root(request: Request): + return templates.TemplateResponse("root.html", {"request": request, "magic_number": 30}) diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..e7ea89c --- /dev/null +++ b/flake.lock @@ -0,0 +1,25 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1731676054, + "narHash": "sha256-OZiZ3m8SCMfh3B6bfGC/Bm4x3qc1m2SVEAlkV6iY7Yg=", + "rev": "5e4fbfb6b3de1aa2872b76d49fafc942626e2add", + "revCount": 708622, + "type": "tarball", + "url": "https://api.flakehub.com/f/pinned/NixOS/nixpkgs/0.1.708622%2Brev-5e4fbfb6b3de1aa2872b76d49fafc942626e2add/0193363c-ab27-7bbd-af1d-3e6093ed5e2d/source.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://flakehub.com/f/NixOS/nixpkgs/0.1.%2A.tar.gz" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..7f585d2 --- /dev/null +++ b/flake.nix @@ -0,0 +1,25 @@ +{ + description = "A Nix-flake-based Python development environment"; + + inputs.nixpkgs.url = "https://flakehub.com/f/NixOS/nixpkgs/0.1.*.tar.gz"; + + outputs = { self, nixpkgs }: + let + supportedSystems = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ]; + forEachSupportedSystem = f: nixpkgs.lib.genAttrs supportedSystems (system: f { + pkgs = import nixpkgs { inherit system; }; + }); + in + { + devShells = forEachSupportedSystem ({ pkgs }: { + default = pkgs.mkShell { + venvDir = ".venv"; + packages = with pkgs; [ python311 ] ++ + (with pkgs.python311Packages; [ + pip + venvShellHook + ]); + }; + }); + }; +} diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..ae01a25 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,17 @@ +[project] +name = "audiobookrequest" +requires-python = ">= 3.11" +dynamic = ["version"] + +[build-system] +requires = ["setuptools"] +build-backend = "setuptools.build_meta" + +[tool.pyright] +include = ["**/*.py"] +exclude = ["**/__pycache__", "**/.venv"] +ignore = [] + +typeCheckingMode = "strict" +reportUnknownParameterType = true +reportMissingParameterType = true diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..8a16d71 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,48 @@ +annotated-types==0.7.0 +anyio==4.8.0 +black==25.1.0 +certifi==2025.1.31 +click==8.1.8 +dnspython==2.7.0 +email_validator==2.2.0 +fastapi==0.115.8 +fastapi-cli==0.0.7 +greenlet==3.1.1 +h11==0.14.0 +httpcore==1.0.7 +httptools==0.6.4 +httpx==0.28.1 +idna==3.10 +Jinja2==3.1.5 +markdown-it-py==3.0.0 +MarkupSafe==3.0.2 +mdurl==0.1.2 +mypy-extensions==1.0.0 +nodeenv==1.9.1 +packaging==24.2 +pathspec==0.12.1 +platformdirs==4.3.6 +pydantic==2.10.6 +pydantic_core==2.27.2 +Pygments==2.19.1 +pyright==1.1.394 +python-dotenv==1.0.1 +python-multipart==0.0.20 +PyYAML==6.0.2 +rich==13.9.4 +rich-toolkit==0.13.2 +shellingham==1.5.4 +sniffio==1.3.1 +SQLAlchemy==2.0.38 +sqlmodel==0.0.22 +starlette==0.45.3 +typer==0.15.1 +typing_extensions==4.12.2 +uvicorn==0.34.0 +uvloop==0.21.0 +watchfiles==1.0.4 +websockets==14.2 +aiohttp==3.11.12 +alembic==1.14.1 +jinja2-fragments==1.7.0 +pytailwindcss==0.2.0 diff --git a/styles/globals.css b/styles/globals.css new file mode 100644 index 0000000..f1d8c73 --- /dev/null +++ b/styles/globals.css @@ -0,0 +1 @@ +@import "tailwindcss"; diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..bfe8ee1 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,12 @@ +module.exports = { + purge: [], + darkMode: false, // or 'media' or 'class' + theme: { + extend: {}, + }, + variants: { + extend: {}, + }, + plugins: [], + content: ["templates/**/*.html"], +}; diff --git a/templates/root.html b/templates/root.html new file mode 100644 index 0000000..8f4eb89 --- /dev/null +++ b/templates/root.html @@ -0,0 +1,14 @@ + + + + + This is the title + + + +

This is a header

+ {% block content %} +

This is the magic number: {{ magic_number }}.

+ {% endblock %} + +