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
« prev ^ index » next coverage.py v7.13.5, created at 2026-05-05 09:44 +0000
1from concurrent import futures
3import grpc
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
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}")
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
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