Files
g0v0-server/pyproject.toml
MingxuanGame 0be3e903d4 feat(performance-point): switch performance calculator to performance-server (#80)
* feat(config): make `performance_server` as default calculator

* deploy(docker): use osu-performance-server

* docs(readme): add ruleset download instructions

* chore(dev): update development environment

* feat(dev): update development environment setup and service startup order

* fix(deps): move `rosu-pp-py` to `project.optional-dependencies`

* feat(beatmap): handle deleted beatmaps

* feat(performance-server): add a long timeout for calculation

* feat(recalculate): enhance CLI arguments for performance, leaderboard, and rating recalculations with CSV output support

* fix(recalculate): resolve reviews

* Apply suggestions from code review

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* fix(beatmapsync): resolve too long line

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-11-09 01:59:09 +08:00

138 lines
3.4 KiB
TOML

[project]
name = "g0v0-server"
version = "0.1.0"
description = "3rd-party osu!lazer private server which supports the latest osu!lazer."
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
"aioboto3>=15.0.0",
"aiofiles>=24.1.0",
"aiomysql>=0.2.0",
"alembic>=1.12.1",
"apscheduler>=3.11.0",
"bcrypt>=4.1.2",
"bleach>=6.1.0",
"cryptography>=41.0.7",
"fastapi>=0.104.1",
"fastapi-limiter>=0.1.6",
"httpx>=0.28.1",
"jinja2>=3.1.0",
"loguru>=0.7.3",
"mailersend>=2.0.0",
"maxminddb>=2.8.2",
"newrelic>=10.1.0",
"osupyparser>=1.0.7",
"passlib[bcrypt]>=1.7.4",
"pillow>=11.3.0",
"pydantic-settings>=2.10.1",
"pydantic[email]>=2.5.0",
"pyotp>=2.9.0",
"python-dotenv>=1.0.0",
"python-jose[cryptography]>=3.3.0",
"python-multipart>=0.0.6",
"redis>=5.0.1",
"sentry-sdk[fastapi,httpx,loguru,sqlalchemy]>=2.34.1",
"sqlalchemy>=2.0.23",
"sqlmodel>=0.0.24",
"tinycss2>=1.4.0",
"uvicorn[standard]>=0.24.0",
]
authors = [{ name = "GooGuTeam" }]
[project.optional-dependencies]
rosu = [
"rosu-pp-py>=3.1.0",
]
[tool.ruff]
line-length = 120
target-version = "py312"
[tool.ruff.format]
line-ending = "lf"
[tool.ruff.lint]
select = [
"F", # Pyflakes
"W", # pycodestyle warnings
"E", # pycodestyle errors
"I", # isort
"UP", # pyupgrade
"ASYNC", # flake8-async
"C4", # flake8-comprehensions
"T10", # flake8-debugger
"PYI", # flake8-pyi
"PT", # flake8-pytest-style
"Q", # flake8-quotes
"TID", # flake8-tidy-imports
"RUF", # Ruff-specific rules
"FAST", # FastAPI
"YTT", # flake8-2020
"S", # flake8-bandit
"INP", # flake8-no-pep420
"SIM", # flake8-simplify
"ARG", # flake8-unused-arguments
"PTH", # flake8-use-pathlib
"N", # pep8-naming
"FURB" # refurb
]
ignore = [
"E402", # module-import-not-at-top-of-file
"UP037", # quoted-annotation
"RUF001", # ambiguous-unicode-character-string
"RUF002", # ambiguous-unicode-character-docstring
"RUF003", # ambiguous-unicode-character-comment
"S101", # assert
"S311", # suspicious-non-cryptographic-random-usage
]
[tool.ruff.lint.extend-per-file-ignores]
"tools/*.py" = ["PTH", "INP001"]
"scripts/*.py" = ["PTH", "INP001"]
"migrations/**/*.py" = ["INP001"]
"app/achievements/*.py" = ["INP001", "ARG"]
"app/router/**/*.py" = ["ARG001"]
[tool.ruff.lint.isort]
force-sort-within-sections = true
force-wrap-aliases = true
combine-as-imports = true
order-by-type = true
relative-imports-order = "closest-to-furthest"
extra-standard-library = ["typing_extensions"]
section-order = ["future", "standard-library", "first-party", "local-folder", "third-party"]
[tool.ruff.lint.flake8-pytest-style]
fixture-parentheses = false
mark-parentheses = false
[tool.ruff.lint.pyupgrade]
keep-runtime-typing = true
[tool.pyright]
pythonVersion = "3.12"
pythonPlatform = "All"
typeCheckingMode = "standard"
disableBytesTypePromotions = true
reportIncompatibleMethodOverride = false
reportIncompatibleVariableOverride = false
exclude = ["migrations/", ".venv/", "venv/"]
[tool.uv.workspace]
members = [
"packages/osupyparser",
]
[tool.uv.sources]
osupyparser = { git = "https://github.com/MingxuanGame/osupyparser.git" }
[dependency-groups]
dev = [
"datamodel-code-generator>=0.35.0",
"pre-commit>=4.2.0",
"pyright>=1.1.404",
"ruff>=0.12.4",
"types-aioboto3[aioboto3,essential]>=15.0.0",
]