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

74 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-05-05 09:44 +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 CouchersMiddlewareInterceptor, 

9 ErrorSanitizationInterceptor, 

10 OTelInterceptor, 

11) 

12from couchers.proto import ( 

13 account_pb2_grpc, 

14 admin_pb2_grpc, 

15 api_pb2_grpc, 

16 auth_pb2_grpc, 

17 blocking_pb2_grpc, 

18 bugs_pb2_grpc, 

19 communities_pb2_grpc, 

20 conversations_pb2_grpc, 

21 discussions_pb2_grpc, 

22 donations_pb2_grpc, 

23 editor_pb2_grpc, 

24 events_pb2_grpc, 

25 galleries_pb2_grpc, 

26 gis_pb2_grpc, 

27 groups_pb2_grpc, 

28 iris_pb2_grpc, 

29 jail_pb2_grpc, 

30 media_pb2_grpc, 

31 moderation_pb2_grpc, 

32 notifications_pb2_grpc, 

33 pages_pb2_grpc, 

34 postal_verification_pb2_grpc, 

35 public_pb2_grpc, 

36 public_trips_pb2_grpc, 

37 references_pb2_grpc, 

38 reporting_pb2_grpc, 

39 requests_pb2_grpc, 

40 resources_pb2_grpc, 

41 search_pb2_grpc, 

42 stripe_pb2_grpc, 

43 threads_pb2_grpc, 

44) 

45from couchers.servicers.account import Account, Iris 

46from couchers.servicers.admin import Admin 

47from couchers.servicers.api import API 

48from couchers.servicers.auth import Auth 

49from couchers.servicers.blocking import Blocking 

50from couchers.servicers.bugs import Bugs 

51from couchers.servicers.communities import Communities 

52from couchers.servicers.conversations import Conversations 

53from couchers.servicers.discussions import Discussions 

54from couchers.servicers.donations import Donations, Stripe 

55from couchers.servicers.editor import Editor 

56from couchers.servicers.events import Events 

57from couchers.servicers.galleries import Galleries 

58from couchers.servicers.gis import GIS 

59from couchers.servicers.groups import Groups 

60from couchers.servicers.jail import Jail 

61from couchers.servicers.media import Media, get_media_auth_interceptor 

62from couchers.servicers.moderation import Moderation 

63from couchers.servicers.notifications import Notifications 

64from couchers.servicers.pages import Pages 

65from couchers.servicers.postal_verification import PostalVerification 

66from couchers.servicers.public import Public 

67from couchers.servicers.public_trips import PublicTrips 

68from couchers.servicers.references import References 

69from couchers.servicers.reporting import Reporting 

70from couchers.servicers.requests import Requests 

71from couchers.servicers.resources import Resources 

72from couchers.servicers.search import Search 

73from couchers.servicers.threads import Threads 

74 

75 

76def create_main_server(port: int) -> grpc.Server: 

77 server = grpc.server( 

78 futures.ThreadPoolExecutor(SERVER_THREADS), 

79 interceptors=[ 

80 ErrorSanitizationInterceptor(), 

81 OTelInterceptor(), 

82 CouchersMiddlewareInterceptor(), 

83 ], 

84 ) 

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

86 

87 account_pb2_grpc.add_AccountServicer_to_server(Account(), server) 

88 admin_pb2_grpc.add_AdminServicer_to_server(Admin(), server) 

89 api_pb2_grpc.add_APIServicer_to_server(API(), server) 

90 moderation_pb2_grpc.add_ModerationServicer_to_server(Moderation(), server) 

91 auth_pb2_grpc.add_AuthServicer_to_server(Auth(), server) 

92 blocking_pb2_grpc.add_BlockingServicer_to_server(Blocking(), server) 

93 bugs_pb2_grpc.add_BugsServicer_to_server(Bugs(), server) 

94 communities_pb2_grpc.add_CommunitiesServicer_to_server(Communities(), server) 

95 conversations_pb2_grpc.add_ConversationsServicer_to_server(Conversations(), server) 

96 discussions_pb2_grpc.add_DiscussionsServicer_to_server(Discussions(), server) 

97 donations_pb2_grpc.add_DonationsServicer_to_server(Donations(), server) 

98 editor_pb2_grpc.add_EditorServicer_to_server(Editor(), server) 

99 events_pb2_grpc.add_EventsServicer_to_server(Events(), server) 

100 galleries_pb2_grpc.add_GalleriesServicer_to_server(Galleries(), server) 

101 gis_pb2_grpc.add_GISServicer_to_server(GIS(), server) 

102 groups_pb2_grpc.add_GroupsServicer_to_server(Groups(), server) 

103 iris_pb2_grpc.add_IrisServicer_to_server(Iris(), server) 

104 jail_pb2_grpc.add_JailServicer_to_server(Jail(), server) 

105 notifications_pb2_grpc.add_NotificationsServicer_to_server(Notifications(), server) 

106 pages_pb2_grpc.add_PagesServicer_to_server(Pages(), server) 

107 postal_verification_pb2_grpc.add_PostalVerificationServicer_to_server(PostalVerification(), server) 

108 public_pb2_grpc.add_PublicServicer_to_server(Public(), server) 

109 public_trips_pb2_grpc.add_PublicTripsServicer_to_server(PublicTrips(), server) 

110 references_pb2_grpc.add_ReferencesServicer_to_server(References(), server) 

111 reporting_pb2_grpc.add_ReportingServicer_to_server(Reporting(), server) 

112 requests_pb2_grpc.add_RequestsServicer_to_server(Requests(), server) 

113 resources_pb2_grpc.add_ResourcesServicer_to_server(Resources(), server) 

114 search_pb2_grpc.add_SearchServicer_to_server(Search(), server) 

115 stripe_pb2_grpc.add_StripeServicer_to_server(Stripe(), server) 

116 threads_pb2_grpc.add_ThreadsServicer_to_server(Threads(), server) 

117 return server 

118 

119 

120def create_media_server(port: int, threads: int = 8) -> grpc.Server: 

121 media_server = grpc.server( 

122 futures.ThreadPoolExecutor(threads), 

123 interceptors=[ 

124 get_media_auth_interceptor(config["MEDIA_SERVER_BEARER_TOKEN"]), 

125 ], 

126 ) 

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

128 media_pb2_grpc.add_MediaServicer_to_server(Media(), media_server) 

129 return media_server