feat(custom-rulesets): support custom rulesets (#23)
* feat(custom_ruleset): add custom rulesets support * feat(custom-ruleset): add version check * feat(custom-ruleset): add LegacyIO API to get ruleset hashes * feat(pp): add check for rulesets whose pp cannot be calculated * docs(readme): update README to include support for custom rulesets * fix(custom-ruleset): make `rulesets` empty instead of throw a error when version check is disabled Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * chore(custom-ruleset): apply the latest changes of generatorc891bcd159ande25041ad3b* feat(calculator): add fallback performance calculation for unsupported modes * fix(calculator): remove debug print * fix: resolve reviews * feat(calculator): add difficulty calculation checks --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -16,6 +16,7 @@ from app.dependencies.storage import StorageService
|
||||
from app.log import log
|
||||
from app.models.playlist import PlaylistItem
|
||||
from app.models.room import MatchType, QueueMode, RoomCategory, RoomStatus
|
||||
from app.models.score import RULESETS_VERSION_HASH, GameMode, VersionEntry
|
||||
from app.utils import camel_to_snake, utcnow
|
||||
|
||||
from .notification.server import server
|
||||
@@ -150,7 +151,7 @@ def _validate_playlist_items(items: list[dict[str, Any]]) -> None:
|
||||
)
|
||||
|
||||
ruleset_id = item["ruleset_id"]
|
||||
if not isinstance(ruleset_id, int) or not (0 <= ruleset_id <= 3):
|
||||
if not isinstance(ruleset_id, int):
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_400_BAD_REQUEST,
|
||||
detail=f"Playlist item at index {idx} has invalid ruleset_id {ruleset_id}",
|
||||
@@ -679,3 +680,8 @@ async def save_replay(
|
||||
replay_data = req.mreplay
|
||||
replay_path = f"replays/{req.score_id}_{req.beatmap_id}_{req.user_id}_lazer_replay.osr"
|
||||
await storage_service.write_file(replay_path, base64.b64decode(replay_data), "application/x-osu-replay")
|
||||
|
||||
|
||||
@router.get("/ruleset-hashes", response_model=dict[GameMode, VersionEntry])
|
||||
async def get_ruleset_version():
|
||||
return RULESETS_VERSION_HASH
|
||||
|
||||
Reference in New Issue
Block a user