diff --git a/media_manager/auth/router.py b/media_manager/auth/router.py index d7ed4d3..985d2d1 100644 --- a/media_manager/auth/router.py +++ b/media_manager/auth/router.py @@ -36,9 +36,9 @@ def get_openid_router(): return get_oauth_router( oauth_client=OAuth2( client_id="mock", - client_secret="mock", + client_secret="mock", # noqa: S106 authorize_endpoint="https://example.com/authorize", - access_token_endpoint="https://example.com/token", + access_token_endpoint="https://example.com/token", # noqa: S106 ), backend=openid_cookie_auth_backend, get_user_manager=fastapi_users.get_user_manager, diff --git a/media_manager/auth/users.py b/media_manager/auth/users.py index 3e18a59..4311517 100644 --- a/media_manager/auth/users.py +++ b/media_manager/auth/users.py @@ -140,7 +140,7 @@ async def create_default_admin_user(): if config.auth.admin_emails else "admin@example.com" ) - default_password = "admin" # Simple default password + default_password = "admin" # noqa: S105 # Simple default password user_create = UserCreate( email=admin_email, diff --git a/media_manager/database/config.py b/media_manager/database/config.py index e183890..1d4f58b 100644 --- a/media_manager/database/config.py +++ b/media_manager/database/config.py @@ -5,5 +5,5 @@ class DbConfig(BaseSettings): host: str = "localhost" port: int = 5432 user: str = "MediaManager" - password: str = "MediaManager" + password: str = "MediaManager" # noqa: S105 dbname: str = "MediaManager" diff --git a/media_manager/indexer/indexers/torznab_mixin.py b/media_manager/indexer/indexers/torznab_mixin.py index 4d7820c..a43eebc 100644 --- a/media_manager/indexer/indexers/torznab_mixin.py +++ b/media_manager/indexer/indexers/torznab_mixin.py @@ -11,7 +11,7 @@ log = logging.getLogger(__name__) class TorznabMixin: def process_search_result(self, xml: str) -> list[IndexerQueryResult]: result_list: list[IndexerQueryResult] = [] - xml_tree = ET.fromstring(xml) + xml_tree = ET.fromstring(xml) # noqa: S314 # trusted source, since it is user controlled xmlns = { "torznab": "http://torznab.com/schemas/2015/feed", "atom": "http://www.w3.org/2005/Atom", diff --git a/media_manager/metadataProvider/tmdb.py b/media_manager/metadataProvider/tmdb.py index c673780..b2f0a97 100644 --- a/media_manager/metadataProvider/tmdb.py +++ b/media_manager/metadataProvider/tmdb.py @@ -43,7 +43,9 @@ class TmdbMetadataProvider(AbstractMetadataProvider): language = self.default_language try: response = requests.get( - url=f"{self.url}/tv/shows/{id}", params={"language": language} + url=f"{self.url}/tv/shows/{id}", + params={"language": language}, + timeout=60, ) response.raise_for_status() return response.json() @@ -58,7 +60,10 @@ class TmdbMetadataProvider(AbstractMetadataProvider): def __get_show_external_ids(self, id: int) -> dict: try: - response = requests.get(url=f"{self.url}/tv/shows/{id}/external_ids") + response = requests.get( + url=f"{self.url}/tv/shows/{id}/external_ids", + timeout=60, + ) response.raise_for_status() return response.json() except requests.RequestException as e: @@ -79,6 +84,7 @@ class TmdbMetadataProvider(AbstractMetadataProvider): response = requests.get( url=f"{self.url}/tv/shows/{show_id}/{season_number}", params={"language": language}, + timeout=60, ) response.raise_for_status() return response.json() @@ -101,6 +107,7 @@ class TmdbMetadataProvider(AbstractMetadataProvider): "query": query, "page": page, }, + timeout=60, ) response.raise_for_status() return response.json() @@ -118,6 +125,7 @@ class TmdbMetadataProvider(AbstractMetadataProvider): response = requests.get( url=f"{self.url}/tv/trending", params={"language": self.default_language}, + timeout=60, ) response.raise_for_status() return response.json() @@ -135,7 +143,7 @@ class TmdbMetadataProvider(AbstractMetadataProvider): language = self.default_language try: response = requests.get( - url=f"{self.url}/movies/{id}", params={"language": language} + url=f"{self.url}/movies/{id}", params={"language": language}, timeout=60 ) response.raise_for_status() return response.json() @@ -150,7 +158,9 @@ class TmdbMetadataProvider(AbstractMetadataProvider): def __get_movie_external_ids(self, id: int) -> dict: try: - response = requests.get(url=f"{self.url}/movies/{id}/external_ids") + response = requests.get( + url=f"{self.url}/movies/{id}/external_ids", timeout=60 + ) response.raise_for_status() return response.json() except requests.RequestException as e: @@ -170,6 +180,7 @@ class TmdbMetadataProvider(AbstractMetadataProvider): "query": query, "page": page, }, + timeout=60, ) response.raise_for_status() return response.json() @@ -187,6 +198,7 @@ class TmdbMetadataProvider(AbstractMetadataProvider): response = requests.get( url=f"{self.url}/movies/trending", params={"language": self.default_language}, + timeout=60, ) response.raise_for_status() return response.json() diff --git a/media_manager/metadataProvider/tvdb.py b/media_manager/metadataProvider/tvdb.py index c349d92..b61fef0 100644 --- a/media_manager/metadataProvider/tvdb.py +++ b/media_manager/metadataProvider/tvdb.py @@ -22,31 +22,29 @@ class TvdbMetadataProvider(AbstractMetadataProvider): self.url = config.tvdb_relay_url def __get_show(self, id: int) -> dict: - return requests.get(f"{self.url}/tv/shows/{id}").json() + return requests.get(url=f"{self.url}/tv/shows/{id}", timeout=60).json() def __get_season(self, id: int) -> dict: - return requests.get(f"{self.url}/tv/seasons/{id}").json() + return requests.get(url=f"{self.url}/tv/seasons/{id}", timeout=60).json() def __search_tv(self, query: str) -> dict: return requests.get( - f"{self.url}/tv/search", - params={"query": query}, + url=f"{self.url}/tv/search", params={"query": query}, timeout=60 ).json() def __get_trending_tv(self) -> dict: - return requests.get(f"{self.url}/tv/trending").json() + return requests.get(url=f"{self.url}/tv/trending", timeout=60).json() def __get_movie(self, id: int) -> dict: - return requests.get(f"{self.url}/movies/{id}").json() + return requests.get(url=f"{self.url}/movies/{id}", timeout=60).json() def __search_movie(self, query: str) -> dict: return requests.get( - f"{self.url}/movies/search", - params={"query": query}, + url=f"{self.url}/movies/search", params={"query": query}, timeout=60 ).json() def __get_trending_movies(self) -> dict: - return requests.get(f"{self.url}/movies/trending").json() + return requests.get(url=f"{self.url}/movies/trending", timeout=60).json() def download_show_poster_image(self, show: Show) -> bool: show_metadata = self.__get_show(id=show.external_id) diff --git a/media_manager/metadataProvider/utils.py b/media_manager/metadataProvider/utils.py index c408a2b..02f639d 100644 --- a/media_manager/metadataProvider/utils.py +++ b/media_manager/metadataProvider/utils.py @@ -13,7 +13,7 @@ def get_year_from_date(first_air_date: str | None) -> int | None: def download_poster_image(storage_path: Path, poster_url: str, id: UUID) -> bool: - res = requests.get(poster_url, stream=True) + res = requests.get(poster_url, stream=True, timeout=60) if res.status_code == 200: image_file_path = storage_path.joinpath(str(id)).with_suffix("jpg") diff --git a/media_manager/notification/service_providers/gotify.py b/media_manager/notification/service_providers/gotify.py index fd04807..57be238 100644 --- a/media_manager/notification/service_providers/gotify.py +++ b/media_manager/notification/service_providers/gotify.py @@ -22,6 +22,7 @@ class GotifyNotificationServiceProvider(AbstractNotificationServiceProvider): "message": message.message, "title": message.title, }, + timeout=60, ) if response.status_code not in range(200, 300): return False diff --git a/media_manager/notification/service_providers/ntfy.py b/media_manager/notification/service_providers/ntfy.py index 6de4601..bf1a4a6 100644 --- a/media_manager/notification/service_providers/ntfy.py +++ b/media_manager/notification/service_providers/ntfy.py @@ -22,6 +22,7 @@ class NtfyNotificationServiceProvider(AbstractNotificationServiceProvider): headers={ "Title": "MediaManager - " + message.title, }, + timeout=60, ) if response.status_code not in range(200, 300): return False diff --git a/media_manager/notification/service_providers/pushover.py b/media_manager/notification/service_providers/pushover.py index b3e1235..5f2305b 100644 --- a/media_manager/notification/service_providers/pushover.py +++ b/media_manager/notification/service_providers/pushover.py @@ -20,6 +20,7 @@ class PushoverNotificationServiceProvider(AbstractNotificationServiceProvider): "message": message.message, "title": "MediaManager - " + message.title, }, + timeout=60, ) if response.status_code not in range(200, 300): return False diff --git a/media_manager/torrent/config.py b/media_manager/torrent/config.py index 7f6e359..30339a0 100644 --- a/media_manager/torrent/config.py +++ b/media_manager/torrent/config.py @@ -6,7 +6,7 @@ class QbittorrentConfig(BaseSettings): host: str = "localhost" port: int = 8080 username: str = "admin" - password: str = "admin" + password: str = "admin" # noqa: S105 enabled: bool = False category_name: str = "MediaManager" diff --git a/media_manager/torrent/utils.py b/media_manager/torrent/utils.py index 9352f6b..a8954ba 100644 --- a/media_manager/torrent/utils.py +++ b/media_manager/torrent/utils.py @@ -165,7 +165,7 @@ def get_torrent_hash(torrent: IndexerQueryResult) -> str: log.debug(f"parsing torrent file: {torrent.download_url}") try: decoded_content = bencoder.decode(torrent_content) - torrent_hash = hashlib.sha1( + torrent_hash = hashlib.sha1( # noqa: S324 bencoder.encode(decoded_content[b"info"]) ).hexdigest() except Exception as e: diff --git a/ruff.toml b/ruff.toml index 5f0808c..d5a7a30 100644 --- a/ruff.toml +++ b/ruff.toml @@ -15,7 +15,7 @@ extend-select = [ "PGH", "PT", "PYI", "Q", "RUF", - "SLOT", + "S", "SLOT", "T10", "TD", "TID", "W", "YTT"