Coverage for src/lexigram/graphql/security/__init__.py: 69%

13 statements  

« prev     ^ index     » next       coverage.py v7.15.4, created at 2026-08-25 04:37 +0800

1"""Security module. 

2 

3This module provides security features for GraphQL APIs, 

4including depth limiting, alias limiting, rate limiting, and permissions. 

5 

6Note: Advanced features like weighted cost analysis and 

7APQ are in lexigram-ent-graphql. 

8""" 

9 

10from __future__ import annotations 

11 

12from typing import Any 

13 

14from lexigram.graphql.security.alias import ( 

15 AliasLimitExtension, 

16 AliasLimitValidator, 

17) 

18from lexigram.graphql.security.depth import ( 

19 DepthLimitExtension, 

20 DepthLimitValidator, 

21 create_depth_limit, 

22) 

23from lexigram.graphql.security.extensions import RateLimitExtension 

24from lexigram.graphql.security.permissions import ( 

25 AbstractPermission, 

26 AllowAny, 

27 DenyAll, 

28 IsAdmin, 

29 IsAuthenticated, 

30 IsOwner, 

31 IsOwnerOrAdmin, 

32 allow_any, 

33 deny_all, 

34 is_admin, 

35 is_authenticated, 

36 is_owner, 

37 is_owner_or_admin, 

38) 

39 

40try: 

41 from lexigram.graphql.security.rate_limit import ( 

42 RateLimitConfig, 

43 RateLimiter, 

44 UnifiedRateLimiter, 

45 ) 

46except ImportError: 

47 RateLimiter: Any = None # type: ignore[no-redef] 

48 UnifiedRateLimiter: Any = None # type: ignore[no-redef] 

49 RateLimitConfig: Any = None # type: ignore[no-redef] 

50 

51__all__ = [ 

52 # Permissions 

53 "AbstractPermission", 

54 # Alias 

55 "AliasLimitExtension", 

56 "AliasLimitValidator", 

57 "AllowAny", 

58 "DenyAll", 

59 # Depth 

60 "DepthLimitExtension", 

61 "DepthLimitValidator", 

62 "IsAdmin", 

63 "IsAuthenticated", 

64 "IsOwner", 

65 "IsOwnerOrAdmin", 

66 "RateLimitConfig", 

67 # Rate limit 

68 "RateLimitExtension", 

69 "RateLimiter", 

70 "UnifiedRateLimiter", 

71 "allow_any", 

72 "create_depth_limit", 

73 "deny_all", 

74 "is_admin", 

75 "is_authenticated", 

76 "is_owner", 

77 "is_owner_or_admin", 

78]