Coverage for app/backend/src/couchers/urls.py: 92%
83 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
1# The source of truth for URLs is
2# //docs/urls.md
3# Please make sure this file stays in sync with that file as well as
4# //app/web/src/routes.ts
7from couchers.config import config
10def app_link() -> str:
11 return f"{config.BASE_URL}/"
14def icon_url() -> str:
15 return f"{config.BASE_URL}/logo512.png"
18def dashboard_link() -> str:
19 return f"{config.BASE_URL}/dashboard"
22def profile_link() -> str:
23 return f"{config.BASE_URL}/profile"
26def user_link(*, username: str) -> str:
27 return f"{config.BASE_URL}/user/{username}"
30def edit_profile_link() -> str:
31 return f"{config.BASE_URL}/profile/edit"
34def signup_link(*, token: str) -> str:
35 return f"{config.BASE_URL}/signup?token={token}"
38def account_settings_link() -> str:
39 return f"{config.BASE_URL}/account-settings"
42def notification_settings_link() -> str:
43 return f"{config.BASE_URL}/account-settings/notifications"
46def feature_preview_link() -> str:
47 return f"{config.BASE_URL}/preview"
50def password_reset_link(*, password_reset_token: str) -> str:
51 return f"{config.BASE_URL}/complete-password-reset?token={password_reset_token}"
54def host_request_link_host() -> str:
55 return f"{config.BASE_URL}/messages/hosting/"
58def host_request_link_guest() -> str:
59 return f"{config.BASE_URL}/messages/surfing/"
62def host_request(*, host_request_id: str) -> str:
63 return f"{config.BASE_URL}/messages/request/{host_request_id}"
66def messages_link() -> str:
67 return f"{config.BASE_URL}/messages/"
70def chat_link(*, chat_id: int) -> str:
71 return f"{config.BASE_URL}/messages/chats/{chat_id}"
74def event_link(*, occurrence_id: int, slug: str = "e") -> str:
75 return f"{config.BASE_URL}/event/{occurrence_id}/{slug}"
78def community_link(*, node_id: int, slug: str = "e") -> str:
79 return f"{config.BASE_URL}/community/{node_id}/{slug}"
82def discussion_link(*, discussion_id: str, slug: str = "e") -> str:
83 return f"{config.BASE_URL}/discussion/{discussion_id}/{slug}"
86def leave_reference_link(*, reference_type: str, to_user_id: str, host_request_id: str | None = None) -> str:
87 assert reference_type in ["friend", "surfed", "hosted"]
88 if host_request_id: 88 ↛ 91line 88 didn't jump to line 91 because the condition on line 88 was always true
89 return f"{config.BASE_URL}/leave-reference/{reference_type}/{to_user_id}/{host_request_id}"
90 else:
91 return f"{config.BASE_URL}/leave-reference/{reference_type}/{to_user_id}"
94def profile_references_link() -> str:
95 return f"{config.BASE_URL}/profile/references"
98def friend_requests_link(*, from_user_id: int | None = None) -> str:
99 url = f"{config.BASE_URL}/connections/friends/"
100 if from_user_id is not None:
101 url += f"?from={from_user_id}"
102 return url
105def media_upload_url(*, path: str) -> str:
106 return f"{config.MEDIA_SERVER_UPLOAD_BASE_URL}/{path}"
109def change_email_link(*, confirmation_token: str) -> str:
110 return f"{config.BASE_URL}/confirm-email?token={confirmation_token}"
113def donation_url() -> str:
114 return f"{config.BASE_URL}/donate"
117def donation_cancelled_url() -> str:
118 return f"{config.BASE_URL}/donate?cancelled=true"
121def donation_success_url() -> str:
122 return f"{config.BASE_URL}/donate?success=true"
125def strong_verification_url() -> str:
126 return f"{config.BASE_URL}/strong-verification"
129def complete_strong_verification_url(*, verification_attempt_token: str) -> str:
130 return f"{config.BASE_URL}/complete-strong-verification?verification_attempt_token={verification_attempt_token}"
133def delete_account_link(*, account_deletion_token: str) -> str:
134 return f"{config.BASE_URL}/delete-account?token={account_deletion_token}"
137def recover_account_link(*, account_undelete_token: str) -> str:
138 return f"{config.BASE_URL}/recover-account?token={account_undelete_token}"
141def unsubscribe_link(*, payload: str, sig: str) -> str:
142 return f"{config.BASE_URL}/quick-link?payload={payload}&sig={sig}"
145def quick_link(*, payload: str, sig: str) -> str:
146 return f"{config.BASE_URL}/quick-link?payload={payload}&sig={sig}"
149def media_url(*, filename: str, size: str) -> str:
150 return f"{config.MEDIA_SERVER_BASE_URL}/img/{size}/{filename}"
153def console_link(*, page: str) -> str:
154 return f"{config.CONSOLE_BASE_URL}/{page}"
157def invite_code_link(*, code: str) -> str:
158 return f"{config.BASE_URL}/invite?code={code}"
161def postal_verification_link(*, code: str) -> str:
162 return f"{config.BASE_URL}/verify-postal?c={code}"
165def terms_of_service_url() -> str:
166 return f"{config.BASE_URL}/terms"