"""The API, which is nine endpoints and no framework. The shape is RFC 7232 over addressed resources: a leaf is a resource, its version is an entity tag, and a conditional write answers 409. docs/architecture.md is explicit that this part is not a bespoke invention — "optimistic concurrency control over addressed resources with an entity tag" is what HTTP has done for thirty years — so the plumbing here is deliberately boring. WRITES ARE ON HTTP AND STAY THERE. When the websocket arrives it carries presence and broadcasts, and not writes: auth, idempotency, status codes, retries and conditional requests all come for free here, and a dropped socket cannot lose a write. """ from django.urls import path from . import views urlpatterns = [ path("me", views.me), path("login", views.login), path("signup", views.signup), path("logout", views.logout), path("detector", views.detector), path("sources", views.sources), path("sounds", views.sounds), path("sounds/", views.sound_detail), path("images", views.images), path("images/", views.image_detail), path("extractions", views.extractions), path("extractions/", views.extraction_detail), path("footage", views.footage_list), path("footage/", views.footage_detail), path("projects", views.projects), path("symbols", views.symbols), path("projects/", views.project_detail), path("projects//leaves/", views.leaf_detail), path("projects//revisions", views.revisions), path("projects//revisions//restore", views.restore), path("projects//editors", views.editors), path("projects//editors/", views.editors), path("analyses", views.analyses), path("analyses/", views.analysis_detail), path("blocks", views.blocks), path("blocks/missing", views.blocks_missing), path("blocks/", views.block_detail), ]