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

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.""" 

8 

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 

16 

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 

26 

27bp = Blueprint("api", __name__, url_prefix=f"/api/{api_path_version}") 

28 

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) 

35 

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) 

45 

46__all__ = ["DateTimeOrZero", "Resource", "parser_pagination", "parser_period"] 

47 

48 

49def register_api_blueprint(app: Flask) -> None: 

50 """ 

51 Configure OpenAPI/Swagger security definitions for Flask-RESTX and register Blueprint. 

52 

53 Registers HTTP Basic Authentication schemes in the Swagger UI 

54 documentation unless authentication is globally disabled. 

55 

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"] 

73 

74 if api.blueprint is None: 

75 api.init_app(bp) 

76 app.register_blueprint(bp)