Coverage for src/couchers/servicers/resources.py: 100%

19 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2025-12-28 09:56 +0000

1import logging 

2 

3from google.protobuf import empty_pb2 

4from sqlalchemy.orm import Session 

5 

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) 

15 

16logger = logging.getLogger(__name__) 

17 

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] 

24 

25 

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()) 

31 

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.get_localized_string("community_guidelines", f"{cg['key']}_title"), 

39 guideline=context.get_localized_string("community_guidelines", f"{cg['key']}_guideline"), 

40 icon_svg=get_icon(cg["icon"]), 

41 ) 

42 for cg in COMMUNITY_GUIDELINES 

43 ] 

44 ) 

45 

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(alpha3=alpha3, name=name) for alpha3, name in sorted(get_region_dict().items()) 

52 ] 

53 ) 

54 

55 def GetLanguages( 

56 self, request: empty_pb2.Empty, context: CouchersContext, session: Session 

57 ) -> resources_pb2.GetLanguagesRes: 

58 return resources_pb2.GetLanguagesRes( 

59 languages=[ 

60 resources_pb2.Language(code=code, name=name) for code, name in sorted(get_language_dict().items()) 

61 ] 

62 ) 

63 

64 def GetBadges( 

65 self, request: empty_pb2.Empty, context: CouchersContext, session: Session 

66 ) -> resources_pb2.GetBadgesRes: 

67 return resources_pb2.GetBadgesRes( 

68 badges=[ 

69 resources_pb2.Badge( 

70 id=badge["id"], 

71 name=context.get_localized_string("badges", f"{badge['id']}_name"), 

72 description=context.get_localized_string("badges", f"{badge['id']}_description"), 

73 color=badge["color"], 

74 ) 

75 for badge in get_badge_dict().values() 

76 ] 

77 )