Coverage for app/backend/src/couchers/servicers/resources.py: 100%
19 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-07-21 21:52 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-07-21 21:52 +0000
1import logging
3from google.protobuf import empty_pb2
4from sqlalchemy.orm import Session
6from couchers.context import CouchersContext
7from couchers.proto import resources_pb2, resources_pb2_grpc
8from couchers.resources import (
9 get_badge_dict,
10 get_icon,
11 get_language_dict,
12 get_region_dict,
13 get_terms_of_service,
14)
16logger = logging.getLogger(__name__)
18COMMUNITY_GUIDELINES = [
19 {"key": "be_kind", "icon": "hand_with_heart.svg"},
20 {"key": "no_dating", "icon": "ghost.svg"},
21 {"key": "be_safe", "icon": "shield.svg"},
22 {"key": "no_money", "icon": "handshake.svg"},
23]
26class Resources(resources_pb2_grpc.ResourcesServicer):
27 def GetTermsOfService(
28 self, request: empty_pb2.Empty, context: CouchersContext, session: Session
29 ) -> resources_pb2.GetTermsOfServiceRes:
30 return resources_pb2.GetTermsOfServiceRes(terms_of_service=get_terms_of_service())
32 def GetCommunityGuidelines(
33 self, request: empty_pb2.Empty, context: CouchersContext, session: Session
34 ) -> resources_pb2.GetCommunityGuidelinesRes:
35 return resources_pb2.GetCommunityGuidelinesRes(
36 community_guidelines=[
37 resources_pb2.CommunityGuideline(
38 title=context.localization.localize_string(f"community_guidelines.{cg['key']}_title"),
39 guideline=context.localization.localize_string(f"community_guidelines.{cg['key']}_guideline"),
40 icon_svg=get_icon(cg["icon"]),
41 )
42 for cg in COMMUNITY_GUIDELINES
43 ]
44 )
46 def GetRegions(
47 self, request: empty_pb2.Empty, context: CouchersContext, session: Session
48 ) -> resources_pb2.GetRegionsRes:
49 return resources_pb2.GetRegionsRes(
50 regions=[
51 resources_pb2.Region(
52 alpha3=alpha3,
53 name=context.localization.try_localize_region_name_from_iso3166(alpha3) or english_name,
54 )
55 for alpha3, english_name in sorted(get_region_dict().items())
56 ]
57 )
59 def GetLanguages(
60 self, request: empty_pb2.Empty, context: CouchersContext, session: Session
61 ) -> resources_pb2.GetLanguagesRes:
62 return resources_pb2.GetLanguagesRes(
63 languages=[
64 resources_pb2.Language(
65 code=code,
66 name=context.localization.try_localize_language_name_from_iso639(code, standalone=True)
67 or english_name,
68 )
69 for code, english_name in sorted(get_language_dict().items())
70 ]
71 )
73 def GetBadges(
74 self, request: empty_pb2.Empty, context: CouchersContext, session: Session
75 ) -> resources_pb2.GetBadgesRes:
76 return resources_pb2.GetBadgesRes(
77 badges=[
78 resources_pb2.Badge(
79 id=badge.id,
80 name=context.localization.localize_string(f"badges.{badge.id}_name"),
81 description=context.localization.localize_string(f"badges.{badge.id}_description"),
82 color=badge.color,
83 )
84 for badge in get_badge_dict().values()
85 ]
86 )