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
« prev ^ index » next coverage.py v7.6.10, created at 2025-06-01 15:07 +0000
1from concurrent import futures
3import grpc
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)
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}")
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
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