from __future__ import annotations from urllib.parse import quote, unquote from django.urls import include, path, register_converter from hc.api import views class QuoteConverter: regex = r"[\w%~_.-]+" def to_python(self, value: str) -> str: return unquote(value) def to_url(self, value: str) -> str: return quote(value, safe="") class SHA1Converter: regex = "[A-z0-9]{40}" def to_python(self, value: str) -> str: return value def to_url(self, value: str) -> str: return value register_converter(QuoteConverter, "quoted") register_converter(SHA1Converter, "sha1") uuid_urls = [ path("", views.ping), path("fail", views.ping, {"action": "fail"}), path("start", views.ping, {"action": "start"}), path("log", views.ping, {"action": "log"}), path("", views.ping), ] slug_urls = [ path("fail", views.ping_by_slug, {"action": "fail"}), path("start", views.ping_by_slug, {"action": "start"}), path("log", views.ping_by_slug, {"action": "log"}), path("", views.ping_by_slug), ] api_urls = [ path("checks/", views.checks), path("checks/", views.single, name="hc-api-single"), path("checks/", views.get_check_by_unique_key), path("checks//pause", views.pause, name="hc-api-pause"), path("checks//resume", views.resume, name="hc-api-resume"), path( "notifications//status", views.notification_status, name="hc-api-notification-status", ), path("checks//pings/", views.pings, name="hc-api-pings"), path( "checks//pings//body", views.ping_body, name="hc-api-ping-body", ), path("checks//flips/", views.flips_by_uuid, name="hc-api-flips"), path("checks//flips/", views.flips_by_unique_key), path("channels/", views.channels), path("badges/", views.badges), path("metrics/", views.metrics), path("status/", views.status), path("bounces/", views.bounces), ] urlpatterns = [ path("ping/", views.ping), path("ping//", include(uuid_urls)), path("ping//", views.ping_by_slug), path("ping///", include(slug_urls)), path("api/v1/", include(api_urls)), path("api/v2/", include(api_urls)), path("api/v3/", include(api_urls)), path( "badge///.", views.badge, name="hc-badge", ), path( "badge//.", views.badge, {"tag": "*"}, name="hc-badge-all", ), path( "b//.", views.check_badge, name="hc-badge-check", ), ]