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

72 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2025-12-20 11:53 +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 references_pb2_grpc, 

37 reporting_pb2_grpc, 

38 requests_pb2_grpc, 

39 resources_pb2_grpc, 

40 search_pb2_grpc, 

41 stripe_pb2_grpc, 

42 threads_pb2_grpc, 

43) 

44from couchers.servicers.account import Account, Iris 

45from couchers.servicers.admin import Admin 

46from couchers.servicers.api import API 

47from couchers.servicers.auth import Auth 

48from couchers.servicers.blocking import Blocking 

49from couchers.servicers.bugs import Bugs 

50from couchers.servicers.communities import Communities 

51from couchers.servicers.conversations import Conversations 

52from couchers.servicers.discussions import Discussions 

53from couchers.servicers.donations import Donations, Stripe 

54from couchers.servicers.editor import Editor 

55from couchers.servicers.events import Events 

56from couchers.servicers.galleries import Galleries 

57from couchers.servicers.gis import GIS 

58from couchers.servicers.groups import Groups 

59from couchers.servicers.jail import Jail 

60from couchers.servicers.media import Media, get_media_auth_interceptor 

61from couchers.servicers.moderation import Moderation 

62from couchers.servicers.notifications import Notifications 

63from couchers.servicers.pages import Pages 

64from couchers.servicers.postal_verification import PostalVerification 

65from couchers.servicers.public import Public 

66from couchers.servicers.references import References 

67from couchers.servicers.reporting import Reporting 

68from couchers.servicers.requests import Requests 

69from couchers.servicers.resources import Resources 

70from couchers.servicers.search import Search 

71from couchers.servicers.threads import Threads 

72 

73 

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

75 server = grpc.server( 

76 futures.ThreadPoolExecutor(SERVER_THREADS), 

77 interceptors=[ 

78 ErrorSanitizationInterceptor(), 

79 OTelInterceptor(), 

80 CouchersMiddlewareInterceptor(), 

81 ], 

82 ) 

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

84 

85 account_pb2_grpc.add_AccountServicer_to_server(Account(), server) 

86 admin_pb2_grpc.add_AdminServicer_to_server(Admin(), server) 

87 api_pb2_grpc.add_APIServicer_to_server(API(), server) 

88 moderation_pb2_grpc.add_ModerationServicer_to_server(Moderation(), server) 

89 auth_pb2_grpc.add_AuthServicer_to_server(Auth(), server) 

90 blocking_pb2_grpc.add_BlockingServicer_to_server(Blocking(), server) 

91 bugs_pb2_grpc.add_BugsServicer_to_server(Bugs(), server) 

92 communities_pb2_grpc.add_CommunitiesServicer_to_server(Communities(), server) 

93 conversations_pb2_grpc.add_ConversationsServicer_to_server(Conversations(), server) 

94 discussions_pb2_grpc.add_DiscussionsServicer_to_server(Discussions(), server) 

95 donations_pb2_grpc.add_DonationsServicer_to_server(Donations(), server) 

96 editor_pb2_grpc.add_EditorServicer_to_server(Editor(), server) 

97 events_pb2_grpc.add_EventsServicer_to_server(Events(), server) 

98 galleries_pb2_grpc.add_GalleriesServicer_to_server(Galleries(), server) 

99 gis_pb2_grpc.add_GISServicer_to_server(GIS(), server) 

100 groups_pb2_grpc.add_GroupsServicer_to_server(Groups(), server) 

101 iris_pb2_grpc.add_IrisServicer_to_server(Iris(), server) 

102 jail_pb2_grpc.add_JailServicer_to_server(Jail(), server) 

103 notifications_pb2_grpc.add_NotificationsServicer_to_server(Notifications(), server) 

104 pages_pb2_grpc.add_PagesServicer_to_server(Pages(), server) 

105 postal_verification_pb2_grpc.add_PostalVerificationServicer_to_server(PostalVerification(), server) 

106 public_pb2_grpc.add_PublicServicer_to_server(Public(), server) 

107 references_pb2_grpc.add_ReferencesServicer_to_server(References(), server) 

108 reporting_pb2_grpc.add_ReportingServicer_to_server(Reporting(), server) 

109 requests_pb2_grpc.add_RequestsServicer_to_server(Requests(), server) 

110 resources_pb2_grpc.add_ResourcesServicer_to_server(Resources(), server) 

111 search_pb2_grpc.add_SearchServicer_to_server(Search(), server) 

112 stripe_pb2_grpc.add_StripeServicer_to_server(Stripe(), server) 

113 threads_pb2_grpc.add_ThreadsServicer_to_server(Threads(), server) 

114 return server 

115 

116 

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

118 media_server = grpc.server( 

119 futures.ThreadPoolExecutor(threads), 

120 interceptors=[ 

121 get_media_auth_interceptor(config["MEDIA_SERVER_BEARER_TOKEN"]), 

122 ], 

123 ) 

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

125 media_pb2_grpc.add_MediaServicer_to_server(Media(), media_server) 

126 return media_server