From da5d56b8bc420c8b2eeadb2d172bb27d0a294d13 Mon Sep 17 00:00:00 2001 From: Georges-Antoine Assi Date: Mon, 14 Aug 2023 15:00:19 -0400 Subject: [PATCH] Set some consts as final --- backend/config/__init__.py | 65 ++++++++++++++++----------------- backend/endpoints/oauth.py | 6 +-- backend/handler/igdb_handler.py | 16 ++++---- backend/utils/oauth.py | 16 ++++---- 4 files changed, 51 insertions(+), 52 deletions(-) diff --git a/backend/config/__init__.py b/backend/config/__init__.py index 0aed239ee..e4df5c406 100644 --- a/backend/config/__init__.py +++ b/backend/config/__init__.py @@ -1,56 +1,55 @@ import os import secrets from dotenv import load_dotenv +from typing import Final load_dotenv() # UVICORN -DEV_PORT: int = int(os.environ.get("VITE_BACKEND_DEV_PORT", "5000")) -DEV_HOST: str = "0.0.0.0" +DEV_PORT: Final = int(os.environ.get("VITE_BACKEND_DEV_PORT", "5000")) +DEV_HOST: Final = "0.0.0.0" # PATHS -ROMM_BASE_PATH: str = os.environ.get("ROMM_BASE_PATH", "/romm") -LIBRARY_BASE_PATH: str = f"{ROMM_BASE_PATH}/library" -FRONT_LIBRARY_PATH: str = "/assets/romm/library" -ROMM_USER_CONFIG_PATH: str = f"{ROMM_BASE_PATH}/config.yml" -SQLITE_DB_BASE_PATH: str = f"{ROMM_BASE_PATH}/database" -RESOURCES_BASE_PATH: str = f"{ROMM_BASE_PATH}/resources" -LOGS_BASE_PATH: str = f"{ROMM_BASE_PATH}/logs" -HIGH_PRIO_STRUCTURE_PATH: str = f"{LIBRARY_BASE_PATH}/roms" +ROMM_BASE_PATH: Final = os.environ.get("ROMM_BASE_PATH", "/romm") +LIBRARY_BASE_PATH: Final = f"{ROMM_BASE_PATH}/library" +FRONT_LIBRARY_PATH: Final = "/assets/romm/library" +ROMM_USER_CONFIG_PATH: Final = f"{ROMM_BASE_PATH}/config.yml" +SQLITE_DB_BASE_PATH: Final = f"{ROMM_BASE_PATH}/database" +RESOURCES_BASE_PATH: Final = f"{ROMM_BASE_PATH}/resources" +LOGS_BASE_PATH: Final = f"{ROMM_BASE_PATH}/logs" +HIGH_PRIO_STRUCTURE_PATH: Final = f"{LIBRARY_BASE_PATH}/roms" # DEFAULT RESOURCES -DEFAULT_URL_COVER_L: str = ( - "https://images.igdb.com/igdb/image/upload/t_cover_big/nocover.png" -) -DEFAULT_PATH_COVER_L: str = "default/default/cover/big.png" -DEFAULT_URL_COVER_S: str = ( - "https://images.igdb.com/igdb/image/upload/t_cover_small/nocover.png" -) -DEFAULT_PATH_COVER_S: str = "default/default/cover/small.png" +DEFAULT_URL_COVER_L: Final = "https://images.igdb.com/igdb/image/upload/t_cover_big/nocover.png" +DEFAULT_PATH_COVER_L: Final = "default/default/cover/big.png" +DEFAULT_URL_COVER_S: Final = "https://images.igdb.com/igdb/image/upload/t_cover_small/nocover.png" +DEFAULT_PATH_COVER_S: Final = "default/default/cover/small.png" # MARIADB -DB_HOST = os.environ.get("DB_HOST", "127.0.0.1") -DB_PORT: int = int(os.environ.get("DB_PORT", 3306)) -DB_USER = os.environ.get("DB_USER") -DB_PASSWD = os.environ.get("DB_PASSWD") -DB_NAME = os.environ.get("DB_NAME", "romm") +DB_HOST: Final = os.environ.get("DB_HOST", "127.0.0.1") +DB_PORT: Final = int(os.environ.get("DB_PORT", 3306)) +DB_USER: Final = os.environ.get("DB_USER") +DB_PASSWD: Final = os.environ.get("DB_PASSWD") +DB_NAME: Final = os.environ.get("DB_NAME", "romm") # REDIS -REDIS_HOST = os.environ.get('REDIS_HOST', 'localhost') -REDIS_PORT = os.environ.get('REDIS_PORT', '6379') +REDIS_HOST: Final = os.environ.get("REDIS_HOST", "localhost") +REDIS_PORT: Final = os.environ.get("REDIS_PORT", "6379") # IGDB -CLIENT_ID = os.environ.get("CLIENT_ID", "") -CLIENT_SECRET = os.environ.get("CLIENT_SECRET", "") +CLIENT_ID: Final = os.environ.get("CLIENT_ID", "") +CLIENT_SECRET: Final = os.environ.get("CLIENT_SECRET", "") # STEAMGRIDDB -STEAMGRIDDB_API_KEY = os.environ.get("STEAMGRIDDB_API_KEY", "") +STEAMGRIDDB_API_KEY: Final = os.environ.get("STEAMGRIDDB_API_KEY", "") # DB DRIVERS -ROMM_DB_DRIVER = os.environ.get("ROMM_DB_DRIVER", "sqlite") +ROMM_DB_DRIVER: Final = os.environ.get("ROMM_DB_DRIVER", "sqlite") # AUTH -ROMM_AUTH_ENABLED = os.environ.get("ROMM_AUTH_ENABLED", "false") == "true" -ROMM_AUTH_USERNAME = os.environ.get("ROMM_AUTH_USERNAME", "admin") -ROMM_AUTH_PASSWORD = os.environ.get("ROMM_AUTH_PASSWORD", "admin") -ROMM_AUTH_SECRET_KEY = os.environ.get("ROMM_AUTH_SECRET_KEY", secrets.token_hex(32)) +ROMM_AUTH_ENABLED: Final = os.environ.get("ROMM_AUTH_ENABLED", "false") == "true" +ROMM_AUTH_USERNAME: Final = os.environ.get("ROMM_AUTH_USERNAME", "admin") +ROMM_AUTH_PASSWORD: Final = os.environ.get("ROMM_AUTH_PASSWORD", "admin") +ROMM_AUTH_SECRET_KEY: Final = os.environ.get( + "ROMM_AUTH_SECRET_KEY", secrets.token_hex(32) +) diff --git a/backend/endpoints/oauth.py b/backend/endpoints/oauth.py index 3fffffa62..f93f4a087 100644 --- a/backend/endpoints/oauth.py +++ b/backend/endpoints/oauth.py @@ -1,4 +1,4 @@ -from typing import Annotated +from typing import Annotated, Final from datetime import timedelta from fastapi import Depends, APIRouter, HTTPException, status @@ -11,8 +11,8 @@ from utils.oauth import ( ) -ACCESS_TOKEN_EXPIRE_MINUTES = 30 -REFRESH_TOKEN_EXPIRE_DAYS = 7 +ACCESS_TOKEN_EXPIRE_MINUTES: Final = 30 +REFRESH_TOKEN_EXPIRE_DAYS : Final = 7 router = APIRouter() diff --git a/backend/handler/igdb_handler.py b/backend/handler/igdb_handler.py index b47d813ff..c5ed929e4 100644 --- a/backend/handler/igdb_handler.py +++ b/backend/handler/igdb_handler.py @@ -6,6 +6,7 @@ import re import time from unidecode import unidecode as uc from requests.exceptions import HTTPError, Timeout +from typing import Final from config import CLIENT_ID, CLIENT_SECRET from utils import get_file_name_with_no_tags as get_search_term @@ -13,12 +14,11 @@ from logger.logger import log from utils.cache import cache from .ps2_opl_index import opl_index -MAIN_GAME_CATEGORY = 0 -EXPANDED_GAME_CATEGORY = 10 -N_SCREENSHOTS = 5 -PS2_IGDB_ID = 8 - -ps2_opl_regex = r"^([A-Z]{4}_\d{3}\.\d{2})\..*$" +MAIN_GAME_CATEGORY: Final = 0 +EXPANDED_GAME_CATEGORY: Final = 10 +N_SCREENSHOTS: Final = 5 +PS2_IGDB_ID: Final = 8 +PS2_OPL_REGEX: Final = r"^([A-Z]{4}_\d{3}\.\d{2})\..*$" class IGDBHandler: @@ -119,8 +119,8 @@ class IGDBHandler: def get_rom(self, file_name: str, p_igdb_id: int): search_term = get_search_term(file_name) - # Patch support for PS2 OPL filename format - match = re.match(ps2_opl_regex, search_term) + # Patch support for PS2 OPL flename format + match = re.match(PS2_OPL_REGEX, search_term) if p_igdb_id == PS2_IGDB_ID and match: serial_code = match.group(1) index_entry = opl_index.get(serial_code, None) diff --git a/backend/utils/oauth.py b/backend/utils/oauth.py index 2876af596..84d82d443 100644 --- a/backend/utils/oauth.py +++ b/backend/utils/oauth.py @@ -1,5 +1,5 @@ from datetime import datetime, timedelta -from typing import Optional, Callable +from typing import Optional, Callable, Final from jose import JWTError, jwt from fastapi import HTTPException, status, Security from fastapi.param_functions import Form @@ -8,28 +8,28 @@ from fastapi.types import DecoratedCallable from config import ROMM_AUTH_SECRET_KEY -ALGORITHM = "HS256" +ALGORITHM: Final = "HS256" -DEFAULT_SCOPES_MAP = { +DEFAULT_SCOPES_MAP: Final = { "me.read": "View your profile", "me.write": "Modify your profile", "roms.read": "View ROMs", "platforms.read": "View platforms", } -WRITE_SCOPES_MAP = { +WRITE_SCOPES_MAP: Final = { "roms.write": "Modify ROMs", "platforms.write": "Modify platforms", } -FULL_SCOPES_MAP = { +FULL_SCOPES_MAP: Final = { "users.read": "View users", "users.write": "Modify users", } -DEFAULT_SCOPES = list(DEFAULT_SCOPES_MAP.keys()) -WRITE_SCOPES = DEFAULT_SCOPES + list(WRITE_SCOPES_MAP.keys()) -FULL_SCOPES = WRITE_SCOPES + list(FULL_SCOPES_MAP.keys()) +DEFAULT_SCOPES: Final = list(DEFAULT_SCOPES_MAP.keys()) +WRITE_SCOPES: Final = DEFAULT_SCOPES + list(WRITE_SCOPES_MAP.keys()) +FULL_SCOPES: Final = WRITE_SCOPES + list(FULL_SCOPES_MAP.keys()) credentials_exception = HTTPException( status_code=status.HTTP_401_UNAUTHORIZED,