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): return unquote(value) def to_url(self, value): return quote(value, safe="") class SHA1Converter: regex = "[A-z0-9]{40}" def to_python(self, value): return value def to_url(self, value): 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("", views.ping), ] slug_urls = [ path("fail", views.ping_by_slug, {"action": "fail"}), path("start", views.ping_by_slug, {"action": "start"}), path("", views.ping_by_slug), ] urlpatterns = [ path("ping/", views.ping), path("ping//", include(uuid_urls)), path("ping//", views.ping_by_slug), path("ping///", include(slug_urls)), path("api/v1/checks/", views.checks), path("api/v1/checks/", views.single, name="hc-api-single"), path("api/v1/checks/", views.get_check_by_unique_key), path("api/v1/checks//pause", views.pause, name="hc-api-pause"), path( "api/v1/notifications//status", views.notification_status, name="hc-api-notification-status", ), path("api/v1/checks//pings/", views.pings, name="hc-api-pings"), path("api/v1/checks//flips/", views.flips_by_uuid, name="hc-api-flips"), path("api/v1/checks//flips/", views.flips_by_unique_key), path("api/v1/channels/", views.channels), path("api/v1/badges/", views.badges), path( "badge///.", views.badge, name="hc-badge", ), path( "badge//.", views.badge, {"tag": "*"}, name="hc-badge-all", ), path("api/v1/metrics/", views.metrics), path("api/v1/status/", views.status), ]