Coverage for src/couchers/server.py: 100%

64 statements  

« prev     ^ index     » next       coverage.py v7.6.10, created at 2025-06-01 15:07 +0000

1from concurrent import futures 

2 

3import grpc 

4 

5from couchers.config import config 

6from couchers.constants import SERVER_THREADS 

7from couchers.interceptors import ( 

8 AuthValidatorInterceptor, 

9 CookieInterceptor, 

10 ErrorSanitizationInterceptor, 

11 OTelInterceptor, 

12 SessionInterceptor, 

13 TracingInterceptor, 

14) 

15from couchers.servicers.account import Account, Iris 

16from couchers.servicers.admin import Admin 

17from couchers.servicers.api import API 

18from couchers.servicers.auth import Auth 

19from couchers.servicers.blocking import Blocking 

20from couchers.servicers.bugs import Bugs 

21from couchers.servicers.communities import Communities 

22from couchers.servicers.conversations import Conversations 

23from couchers.servicers.discussions import Discussions 

24from couchers.servicers.donations import Donations, Stripe 

25from couchers.servicers.events import Events 

26from couchers.servicers.gis import GIS 

27from couchers.servicers.groups import Groups 

28from couchers.servicers.jail import Jail 

29from couchers.servicers.media import Media, get_media_auth_interceptor 

30from couchers.servicers.notifications import Notifications 

31from couchers.servicers.pages import Pages 

32from couchers.servicers.public import Public 

33from couchers.servicers.references import References 

34from couchers.servicers.reporting import Reporting 

35from couchers.servicers.requests import Requests 

36from couchers.servicers.resources import Resources 

37from couchers.servicers.search import Search 

38from couchers.servicers.threads import Threads 

39from proto import ( 

40 account_pb2_grpc, 

41 admin_pb2_grpc, 

42 api_pb2_grpc, 

43 auth_pb2_grpc, 

44 blocking_pb2_grpc, 

45 bugs_pb2_grpc, 

46 communities_pb2_grpc, 

47 conversations_pb2_grpc, 

48 discussions_pb2_grpc, 

49 donations_pb2_grpc, 

50 events_pb2_grpc, 

51 gis_pb2_grpc, 

52 groups_pb2_grpc, 

53 iris_pb2_grpc, 

54 jail_pb2_grpc, 

55 media_pb2_grpc, 

56 notifications_pb2_grpc, 

57 pages_pb2_grpc, 

58 public_pb2_grpc, 

59 references_pb2_grpc, 

60 reporting_pb2_grpc, 

61 requests_pb2_grpc, 

62 resources_pb2_grpc, 

63 search_pb2_grpc, 

64 stripe_pb2_grpc, 

65 threads_pb2_grpc, 

66) 

67 

68 

69def create_main_server(port): 

70 server = grpc.server( 

71 futures.ThreadPoolExecutor(SERVER_THREADS), 

72 interceptors=[ 

73 ErrorSanitizationInterceptor(), 

74 OTelInterceptor(), 

75 TracingInterceptor(), 

76 AuthValidatorInterceptor(), 

77 CookieInterceptor(), 

78 SessionInterceptor(), 

79 ], 

80 ) 

81 server.add_insecure_port(f"[::]:{port}") 

82 

83 account_pb2_grpc.add_AccountServicer_to_server(Account(), server) 

84 admin_pb2_grpc.add_AdminServicer_to_server(Admin(), server) 

85 api_pb2_grpc.add_APIServicer_to_server(API(), server) 

86 auth_pb2_grpc.add_AuthServicer_to_server(Auth(), server) 

87 blocking_pb2_grpc.add_BlockingServicer_to_server(Blocking(), server) 

88 bugs_pb2_grpc.add_BugsServicer_to_server(Bugs(), server) 

89 communities_pb2_grpc.add_CommunitiesServicer_to_server(Communities(), server) 

90 conversations_pb2_grpc.add_ConversationsServicer_to_server(Conversations(), server) 

91 discussions_pb2_grpc.add_DiscussionsServicer_to_server(Discussions(), server) 

92 donations_pb2_grpc.add_DonationsServicer_to_server(Donations(), server) 

93 events_pb2_grpc.add_EventsServicer_to_server(Events(), server) 

94 gis_pb2_grpc.add_GISServicer_to_server(GIS(), server) 

95 groups_pb2_grpc.add_GroupsServicer_to_server(Groups(), server) 

96 iris_pb2_grpc.add_IrisServicer_to_server(Iris(), server) 

97 jail_pb2_grpc.add_JailServicer_to_server(Jail(), server) 

98 notifications_pb2_grpc.add_NotificationsServicer_to_server(Notifications(), server) 

99 pages_pb2_grpc.add_PagesServicer_to_server(Pages(), server) 

100 public_pb2_grpc.add_PublicServicer_to_server(Public(), server) 

101 references_pb2_grpc.add_ReferencesServicer_to_server(References(), server) 

102 reporting_pb2_grpc.add_ReportingServicer_to_server(Reporting(), server) 

103 requests_pb2_grpc.add_RequestsServicer_to_server(Requests(), server) 

104 resources_pb2_grpc.add_ResourcesServicer_to_server(Resources(), server) 

105 search_pb2_grpc.add_SearchServicer_to_server(Search(), server) 

106 stripe_pb2_grpc.add_StripeServicer_to_server(Stripe(), server) 

107 threads_pb2_grpc.add_ThreadsServicer_to_server(Threads(), server) 

108 return server 

109 

110 

111def create_media_server(port, threads=8): 

112 media_server = grpc.server( 

113 futures.ThreadPoolExecutor(threads), 

114 interceptors=[ 

115 TracingInterceptor(), 

116 get_media_auth_interceptor(config["MEDIA_SERVER_BEARER_TOKEN"]), 

117 SessionInterceptor(), 

118 ], 

119 ) 

120 media_server.add_insecure_port(f"[::]:{port}") 

121 media_pb2_grpc.add_MediaServicer_to_server(Media(), media_server) 

122 return media_server