You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
8.9 KiB
119 lines
8.9 KiB
from django.urls import path, include
|
|
from rest_framework.routers import SimpleRouter
|
|
from .views.category import HadisCategorySectListView, HadisCategoryTreeView, CategoriesView, CategoriesBySectView, HadisCategorySelectBySectView, HadisCategorySelectBySectSourceView , HadisCategoryTreeNormalView ,test_deploy,debug_headers,HadisCategoryXMindView
|
|
from .views.hadis import HadisCollectionListView, HadisListView, HadisBasicView, HadisDetailView, HadisSyncView, HadisTransmittersView, HadisCorrectionsView,HadisMainListView, HadisFiltersView, HadisLayersView,PinnedHadisCollectionListView, HadisFiltersSyncAPIView
|
|
from .views.transmitter import (
|
|
TransmitterView ,TransmitterDetailView, TransmitterSyncView,TransmitterOpinionView, TransmitterOriginalTextView, TransmitterFiltersView,
|
|
NarratorArgumentsListView , NarratorRelationsView
|
|
)
|
|
from .views.reference import BookDetailView, BookReferencesView, BookReferenceSyncView, BookAttributeView
|
|
from .views.reference_v2 import BookReferenceV2DetailView, BookReferenceV2SyncView, BookReferenceV2ListView
|
|
from .views.version import ContentReleaseSyncView
|
|
from .views.info import HadisInfoView
|
|
from .views_admin import (
|
|
AdminHadisCategoryViewSet, AdminHadisViewSet, AdminHadisCorrectionViewSet, AdminHadisInterpretationViewSet, AdminHadisStatusViewSet, AdminHadisTagViewSet, AdminHadisCollectionViewSet,
|
|
AdminBookSubjectAreaViewSet, AdminBookTypeViewSet, AdminBookAuthorViewSet, AdminBookAttributeViewSet, AdminBookReferenceImageViewSet, AdminBookReferenceDocumentViewSet, AdminBookReferenceViewSet,
|
|
AdminTransmitterViewSet, AdminTransmitterReliabilityViewSet, DovodiBookSubjectAreaViewSet, DovodiBookTypeViewSet,
|
|
DovodiNarratorLayerViewSet, DovodiTransmitterReliabilityViewSet, DovodiOpinionStatusViewSet,
|
|
DovodiHadisSectViewSet, DovodiHadisCategoryViewSet
|
|
)
|
|
from .views.reference_v2 import BookAuthorListView, BookAuthorDetailView, AuthorReferencesListView, BookAuthorSyncView
|
|
from django.views.decorators.cache import cache_page
|
|
from django.views.decorators.vary import vary_on_headers
|
|
|
|
# Helper function to avoid ugly nesting
|
|
def cached_view(view_func):
|
|
return cache_page(60*60*2,key_prefix='hadis_api')(vary_on_headers('Accept-Language')(view_func))
|
|
|
|
admin_router = SimpleRouter()
|
|
admin_router.register(r'hadises', AdminHadisViewSet, basename='admin-hadises')
|
|
admin_router.register(r'categories', AdminHadisCategoryViewSet, basename='admin-hadis-categories')
|
|
admin_router.register(r'dovodi-sects', DovodiHadisSectViewSet, basename='dovodi-hadis-sects')
|
|
admin_router.register(r'dovodi-categories', DovodiHadisCategoryViewSet, basename='dovodi-hadis-categories')
|
|
admin_router.register(r'corrections', AdminHadisCorrectionViewSet, basename='admin-hadis-corrections')
|
|
admin_router.register(r'interpretations', AdminHadisInterpretationViewSet, basename='admin-hadis-interpretations')
|
|
admin_router.register(r'statuses', AdminHadisStatusViewSet, basename='admin-hadis-statuses')
|
|
admin_router.register(r'tags', AdminHadisTagViewSet, basename='admin-hadis-tags')
|
|
admin_router.register(r'collections', AdminHadisCollectionViewSet, basename='admin-hadis-collections')
|
|
admin_router.register(r'references', AdminBookReferenceViewSet, basename='admin-book-references')
|
|
admin_router.register(r'subject-areas', AdminBookSubjectAreaViewSet, basename='admin-book-subject-areas')
|
|
admin_router.register(r'book-types', AdminBookTypeViewSet, basename='admin-book-types')
|
|
admin_router.register(r'dovodi-subject-areas', DovodiBookSubjectAreaViewSet, basename='dovodi-book-subject-areas')
|
|
admin_router.register(r'dovodi-book-types', DovodiBookTypeViewSet, basename='dovodi-book-types')
|
|
admin_router.register(r'book-authors', AdminBookAuthorViewSet, basename='admin-book-authors')
|
|
admin_router.register(r'book-attributes', AdminBookAttributeViewSet, basename='admin-book-attributes')
|
|
admin_router.register(r'book-images', AdminBookReferenceImageViewSet, basename='admin-book-images')
|
|
admin_router.register(r'book-documents', AdminBookReferenceDocumentViewSet, basename='admin-book-documents')
|
|
admin_router.register(r'transmitters', AdminTransmitterViewSet, basename='admin-transmitters')
|
|
admin_router.register(r'transmitter-reliabilities', AdminTransmitterReliabilityViewSet, basename='admin-transmitter-reliabilities')
|
|
admin_router.register(r'dovodi-narrator-layers', DovodiNarratorLayerViewSet, basename='dovodi-narrator-layers')
|
|
admin_router.register(r'dovodi-transmitter-reliabilities', DovodiTransmitterReliabilityViewSet, basename='dovodi-transmitter-reliabilities')
|
|
admin_router.register(r'dovodi-opinion-statuses', DovodiOpinionStatusViewSet, basename='dovodi-opinion-statuses')
|
|
|
|
# Hide admin viewsets from swagger
|
|
for prefix, viewset, basename in admin_router.registry:
|
|
viewset.swagger_schema = None
|
|
|
|
urlpatterns = [
|
|
|
|
path('sync/authors/', BookAuthorSyncView.as_view(), name='sync-author-list'),
|
|
path('authors/', BookAuthorListView.as_view(), name='author-list'),
|
|
path('authors/<str:author_slug>/', BookAuthorDetailView.as_view(), name='author-detail'),
|
|
path('authors/<str:author_slug>/references/', AuthorReferencesListView.as_view(), name='author-references'),
|
|
|
|
|
|
# Admin endpoints
|
|
path('admin/', include(admin_router.urls)),
|
|
|
|
# Most specific first (with parameters)
|
|
path('pinned-collections/', PinnedHadisCollectionListView.as_view(), name='pinned-hadis-collection-list'),
|
|
path('collections/', HadisCollectionListView.as_view(), name='hadis-collection-list'),
|
|
path('sync/sects/', HadisCategorySectListView.as_view(), name='hadis-sect-list'),
|
|
path('sync/categories/tree/', HadisCategoryTreeView.as_view(), name='hadis-category-tree'),
|
|
path('sync/hadis/', HadisSyncView.as_view(), name='hadis-sync'),
|
|
path('sync/narrators/', TransmitterSyncView.as_view(), name='transmitter-sync'),
|
|
path('sync/references/', BookReferenceSyncView.as_view(), name='reference-sync'),
|
|
path('v2/sync/references/', BookReferenceV2SyncView.as_view(), name='reference-sync-v2'),
|
|
path('sync/version/', ContentReleaseSyncView.as_view(), name='content-release-sync'),
|
|
path('sync/filters/', HadisFiltersSyncAPIView.as_view(), name='hadis-filters-sync'),
|
|
path('info/', HadisInfoView.as_view(), name='hadis-info'),
|
|
|
|
# Category paths (more specific first)
|
|
path('categories/tree/', HadisCategoryTreeNormalView.as_view(), name='hadis-category-tree-normal'),
|
|
path('categories/<str:sect_type>/<str:slug>/<str:source_type>/', HadisCategorySelectBySectSourceView.as_view(), name='categories-tree-by-sect-source'),
|
|
path('categories/<str:sect_type>/<str:slug>/', HadisCategorySelectBySectView.as_view(), name='categories-tree-by-sect'),
|
|
path('categories/<str:sect_type>/', CategoriesBySectView.as_view(), name='categories-by-sect'),
|
|
path('categories/', CategoriesView.as_view(), name='categories'), # ← Least specific LAST
|
|
|
|
# Hadis paths
|
|
path('category/<str:category_slug>/xmind/', HadisCategoryXMindView.as_view(), name='hadis-category-xmind'), # ← Must be before other category paths
|
|
path('category/<str:category_slug>/', HadisListView.as_view(), name='hadis-list'),
|
|
path('arguments/', HadisMainListView.as_view(), name='hadis-main-list'),
|
|
path('arguments/filters/', HadisFiltersView.as_view(), name='hadis-filters'),
|
|
|
|
# Narrator paths
|
|
path('narrators/<str:narrator_slug>/relations/', NarratorRelationsView.as_view(), name='narrator-relations'),
|
|
path('narrators/<str:narrator_slug>/arguments', NarratorArgumentsListView.as_view(), name='narrator-arguments'),
|
|
path('narrators/<str:narrator_slug>/opinions', TransmitterOpinionView.as_view(), name='narrator-opinions'),
|
|
path('narrators/<str:narrator_slug>/original_texts', TransmitterOriginalTextView.as_view(), name='narrator-original-texts'),
|
|
path('narrators/<str:narrator_slug>', TransmitterDetailView.as_view(), name='narrator-detail'),
|
|
path('narrators/filters/', TransmitterFiltersView.as_view(), name='narrator-filters'),
|
|
path('narrators/', TransmitterView.as_view(), name='narrators'),
|
|
|
|
# Reference paths
|
|
path('v2/references/<str:slug>/', BookReferenceV2DetailView.as_view(), name='reference-detail-v2'),
|
|
path('v2/references/', BookReferenceV2ListView.as_view(), name='reference-list-v2'),
|
|
path('references/<str:reference_slug>', BookDetailView.as_view(), name='reference-detail'),
|
|
path('references/', BookReferencesView.as_view(), name='references'),
|
|
|
|
# Hadis detail paths (with slug, more specific)
|
|
path('<str:hadis_slug>/detail/', HadisDetailView.as_view(), name='hadis-detail'),
|
|
path('<str:hadis_slug>/transmitters/', HadisTransmittersView.as_view(), name='hadis-transmitters'),
|
|
path('<str:hadis_slug>/transmitters/layers/', HadisLayersView.as_view(), name='hadis-layers'),
|
|
path('<str:hadis_slug>/corrections/', HadisCorrectionsView.as_view(), name='hadis-corrections'),
|
|
path('<str:hadis_slug>/', HadisBasicView.as_view(), name='hadis-basic'), # ← Least specific LAST
|
|
|
|
# path('test/test-deploy',test_deploy , name='test'),
|
|
# path('debug-headers',debug_headers , name='headers'),
|
|
|
|
]
|