Merge pull request 'work: use new .toml building' (#3) from work/pypi into main

Reviewed-on: https://git.crafterpika.cc/kittentm/splatnet-backend/pulls/3
This commit is contained in:
kittentm 2026-03-28 03:29:56 +01:00
commit 52dc0be279
13 changed files with 1283 additions and 2222 deletions

View file

@ -2,7 +2,7 @@ name: backend
on:
push:
branches: [ main ]
branches: ['**']
jobs:
docker:

4
.gitignore vendored
View file

@ -1,4 +1,6 @@
__pycache__
.env
boss.yaml
node_modules
node_modules
build
splatnet_backend.egg-info

1
.python-version Normal file
View file

@ -0,0 +1 @@
3.11

3
MANIFEST.in Normal file
View file

@ -0,0 +1,3 @@
recursive-include judd *
recursive-include routes *.json
recursive-include services *.js

View file

@ -1,5 +1,9 @@
from pydantic_settings import BaseSettings, SettingsConfigDict
from cryptography.fernet import Fernet
from pathlib import Path
import os
BASE_DIR = Path(__file__).resolve().parent
class Settings(BaseSettings):
port: int = 5000
@ -15,7 +19,15 @@ class Settings(BaseSettings):
twitter_client_secret: str
twitter_redirect_uri: str
model_config = SettingsConfigDict(env_file=".env", extra="ignore")
model_config = SettingsConfigDict(
env_file=[
os.path.join(os.getcwd(), ".env"),
#fallback
BASE_DIR / ".env"
],
env_file_encoding='utf-8',
extra="ignore"
)
cookie_secure: bool = True
webhook_url: str

View file

@ -1,21 +1,22 @@
FROM python:3.11-slim
RUN apt-get update && apt-get install -y curl build-essential \
&& curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \
&& apt-get install -y nodejs \
&& npm install -g npm@latest \
&& rm -rf /var/lib/apt/lists/*
&& curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \
&& apt-get install -y nodejs \
&& npm install -g npm@latest \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
WORKDIR /app/judd
RUN npm ci
RUN cd judd && npm ci
WORKDIR /app
RUN pip install --no-cache-dir . -v
CMD ["python", "main.py"]
RUN touch .env
# uses default
EXPOSE 5000
CMD ["splatnet"]

2176
judd/package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -16,7 +16,6 @@
"express-rate-limit": "^8.3.1",
"express-subdomain": "^1.0.5",
"joi": "^17.7.0",
"mongoose": "^6.7.1",
"morgan": "^1.10.0",
"multer": "^1.4.5-lts.1",
"pg": "^8.18.0",

11
main.py
View file

@ -18,6 +18,7 @@ from routes import twitter_link
from contextlib import asynccontextmanager
from datetime import datetime, timedelta
from sqlalchemy import delete
from config import BASE_DIR
import asyncio
import subprocess
import signal
@ -25,8 +26,9 @@ import sys
import httpx
import os
JUDD_CMD = ["node", "server.js"]
JUDD_CWD = "./judd"
JUDD_CWD = os.path.join(BASE_DIR, "judd")
JUDD_SERVER_JS = os.path.join(JUDD_CWD, "server.js")
JUDD_CMD = ["node", JUDD_SERVER_JS]
judd_process = None
@ -163,5 +165,8 @@ app.include_router(equipment.router, prefix="/api/v1")
app.include_router(Ranking.router, prefix="/api/v1")
app.include_router(twitter_link.router, prefix="/api/v1")
def start():
uvicorn.run("main:app", host="0.0.0.0", port=settings.port, reload=True)
if __name__ == '__main__':
uvicorn.run("main:app", host="0.0.0.0", port=settings.port, reload=True)
start()

68
pyproject.toml Normal file
View file

@ -0,0 +1,68 @@
[project]
name = "splatnet-backend"
version = "0.1.0"
description = "Backend for SplatNet"
readme = "README.md"
requires-python = ">=3.11"
dependencies = [
"annotated-doc==0.0.4",
"annotated-types==0.7.0",
"anyio==4.12.1",
"argon2-cffi==25.1.0",
"argon2-cffi-bindings==25.1.0",
"certifi==2026.2.25",
"cffi==2.0.0",
"charset-normalizer==3.4.4",
"click==8.3.1",
"colorama==0.4.6",
"cryptography==46.0.5",
"fastapi==0.134.0",
"fastapi-cache2==0.2.2",
"greenlet==3.3.2",
"h11==0.16.0",
"httpcore==1.0.9",
"httpx==0.28.1",
"idna==3.11",
"oauthlib==3.3.1",
"oead==1.2.9.post4",
"pendulum==3.2.0",
"psycopg2-binary==2.9.11",
"pycparser==3.0",
"pydantic==2.12.5",
"pydantic-core==2.41.5",
"pydantic-settings==2.13.1",
"python-dateutil==2.9.0.post0",
"python-dotenv==1.2.1",
"python-multipart==0.0.22",
"pyyaml==6.0.3",
"requests==2.32.5",
"requests-oauthlib==2.0.0",
"six==1.17.0",
"sqlalchemy==2.0.47",
"starlette==0.52.1",
"tweepy==4.16.0",
"typing-extensions==4.15.0",
"typing-inspection==0.4.2",
"tzdata==2025.3",
"urllib3==2.6.3",
"uvicorn==0.41.0",
]
[tool.setuptools]
packages = { find = {} }
include-package-data = true
py-modules = ["main", "database", "config"]
[tool.setuptools.package-data]
"*" = [
".env",
".env.example",
"judd/**/*",
"services/**/*.js",
"routes/**/*.json",
"**/*.json"
]
[project.scripts]
splatnet = "main:start"

View file

@ -1,41 +0,0 @@
annotated-doc==0.0.4
annotated-types==0.7.0
anyio==4.12.1
argon2-cffi==25.1.0
argon2-cffi-bindings==25.1.0
certifi==2026.2.25
cffi==2.0.0
charset-normalizer==3.4.4
click==8.3.1
colorama==0.4.6
cryptography==46.0.5
fastapi==0.134.0
fastapi-cache2==0.2.2
greenlet==3.3.2
h11==0.16.0
httpcore==1.0.9
httpx==0.28.1
idna==3.11
oauthlib==3.3.1
oead==1.2.9.post4
pendulum==3.2.0
psycopg2-binary==2.9.11
pycparser==3.0
pydantic==2.12.5
pydantic-settings==2.13.1
pydantic_core==2.41.5
python-dateutil==2.9.0.post0
python-dotenv==1.2.1
python-multipart==0.0.22
PyYAML==6.0.3
requests==2.32.5
requests-oauthlib==2.0.0
six==1.17.0
SQLAlchemy==2.0.47
starlette==0.52.1
tweepy==4.16.0
typing-inspection==0.4.2
typing_extensions==4.15.0
tzdata==2025.3
urllib3==2.6.3
uvicorn==0.41.0

View file

@ -3,12 +3,12 @@ import requests
import oead
import os
import xml.etree.ElementTree as ET
from config import settings
from config import settings, BASE_DIR
def process_boss_file():
temp_boss = "bosstemp.bin"
output_yaml = "boss.yaml"
decrypt_script = os.path.join("services", "decrypt.js")
decrypt_script = os.path.join(BASE_DIR, "services", "decrypt.js")
if not os.path.exists(decrypt_script):
print(f"{decrypt_script} is missing!")

1059
uv.lock generated Normal file

File diff suppressed because it is too large Load diff