Coverage for seedboxsync/front/apis/__init__.py: 92%
25 statements
« prev ^ index » next coverage.py v7.16.1, created at 2026-09-26 17:14 +0000
« prev ^ index » next coverage.py v7.16.1, created at 2026-09-26 17:14 +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_period, DateTimeOrZero, Resource # isort: skip
18from seedboxsync.front.apis.downloads import api as nsDownloads
19from seedboxsync.front.apis.tasks import api as nsTasks
20from seedboxsync.front.apis.taskstatus import api as nsTaskStatus
21from seedboxsync.front.apis.uploads import api as nsUploads
22from seedboxsync.front.apis.users import api as nsUsers
24bp = Blueprint("api", __name__, url_prefix=f"/api/{api_path_version}")
26api = Api(
27 title="SeedboxSync API",
28 version=api_version,
29 description="REST API providing access to the SeedboxSync database and its resources.",
30 validate=True,
31)
33# Add namespaces
34api.add_namespace(nsDownloads)
35api.add_namespace(nsUploads)
36api.add_namespace(nsTasks)
37api.add_namespace(nsTaskStatus)
38api.add_namespace(nsUsers)
40__all__ = ["DateTimeOrZero", "Resource", "parser_period"]
43def register_api_blueprint(app: Flask) -> None:
44 """
45 Configure OpenAPI/Swagger security definitions for Flask-RESTX and register Blueprint.
47 Registers HTTP Basic Authentication schemes in the Swagger UI
48 documentation unless authentication is globally disabled.
50 Args:
51 app (Flask): The Flask application instance containing configuration flags.
52 """
53 if not app.config.get("LOGIN_DISABLED", False):
54 api.authorizations = {
55 "basicAuth": {
56 "type": "basic",
57 "description": "Basic authentication with username and password",
58 },
59 "apiKey": {
60 "type": "apiKey",
61 "in": "header",
62 "name": "X-API-Key",
63 "description": "API key authentication (e.g. 'X-API-Key: sbx_...')",
64 },
65 }
66 api.security = ["basicAuth", "apiKey"]
68 if api.blueprint is None:
69 api.init_app(bp)
70 app.register_blueprint(bp)