Coverage for seedboxsync/front/apis/__init__.py: 94%
31 statements
« prev ^ index » next coverage.py v7.17.0, created at 2026-10-31 17:10 +0000
« prev ^ index » next coverage.py v7.17.0, created at 2026-10-31 17:10 +0000
1#
2# Copyright (C) 2015-2026 Guillaume Kulakowski <guillaume@kulakowski.fr>
3#
4# For the full copyright and license information, please view the LICENSE
5# file that was distributed with this source code.
6#
7"""SeedboxSync api package."""
9from flask import Blueprint
10from flask_restx import Api
11from seedboxsync.__version__ import (
12 __api_path_version__ as api_path_version,
13 __api_version__ as api_version,
14)
15from seedboxsync.core import Flask
17from seedboxsync.front.apis.core.resources import parser_pagination, parser_period, DateTimeOrZero, Resource # isort: skip
18from seedboxsync.front.apis.downloads import api as nsDownloads
19from seedboxsync.front.apis.downloads_stats import api as nsDownloadsStats
20from seedboxsync.front.apis.logs import api as nsLogs
21from seedboxsync.front.apis.tasks import api as nsTasks
22from seedboxsync.front.apis.taskstatus import api as nsTaskStatus
23from seedboxsync.front.apis.uploads import api as nsUploads
24from seedboxsync.front.apis.uploads_stats import api as nsUploadsStats
25from seedboxsync.front.apis.users import api as nsUsers
27bp = Blueprint("api", __name__, url_prefix=f"/api/{api_path_version}")
29api = Api(
30 title="SeedboxSync API",
31 version=api_version,
32 description="REST API providing access to the SeedboxSync database and its resources.",
33 validate=True,
34)
36# Add namespaces
37api.add_namespace(nsDownloads)
38api.add_namespace(nsDownloadsStats)
39api.add_namespace(nsLogs)
40api.add_namespace(nsTasks)
41api.add_namespace(nsTaskStatus)
42api.add_namespace(nsUploads)
43api.add_namespace(nsUploadsStats)
44api.add_namespace(nsUsers)
46__all__ = ["DateTimeOrZero", "Resource", "parser_pagination", "parser_period"]
49def register_api_blueprint(app: Flask) -> None:
50 """
51 Configure OpenAPI/Swagger security definitions for Flask-RESTX and register Blueprint.
53 Registers HTTP Basic Authentication schemes in the Swagger UI
54 documentation unless authentication is globally disabled.
56 Args:
57 app (Flask): The Flask application instance containing configuration flags.
58 """
59 if not app.config.get("LOGIN_DISABLED", False):
60 api.authorizations = {
61 "basicAuth": {
62 "type": "basic",
63 "description": "Basic authentication with username and password",
64 },
65 "apiKey": {
66 "type": "apiKey",
67 "in": "header",
68 "name": "X-API-Key",
69 "description": "API key authentication (e.g. 'X-API-Key: sbx_...')",
70 },
71 }
72 api.security = ["basicAuth", "apiKey"]
74 if api.blueprint is None:
75 api.init_app(bp)
76 app.register_blueprint(bp)