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

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_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 

23 

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

25 

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) 

32 

33# Add namespaces 

34api.add_namespace(nsDownloads) 

35api.add_namespace(nsUploads) 

36api.add_namespace(nsTasks) 

37api.add_namespace(nsTaskStatus) 

38api.add_namespace(nsUsers) 

39 

40__all__ = ["DateTimeOrZero", "Resource", "parser_period"] 

41 

42 

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

44 """ 

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

46 

47 Registers HTTP Basic Authentication schemes in the Swagger UI 

48 documentation unless authentication is globally disabled. 

49 

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

67 

68 if api.blueprint is None: 

69 api.init_app(bp) 

70 app.register_blueprint(bp)