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