Browse Source

transmitters filters url added.

master
Mohsen Taba 5 months ago
parent
commit
cb86899aa2
  1. 65
      apps/hadis/docs.py
  2. 12
      apps/hadis/migrations/0071_merge_20251223_1055.py
  3. 19
      apps/hadis/migrations/0072_transmitterreliability_slug.py
  4. 7
      apps/hadis/models/transmitter.py
  5. 2
      apps/hadis/serializers/hadis.py
  6. 3
      apps/hadis/urls.py
  7. 52
      apps/hadis/views/transmitter.py
  8. 22
      locale/fa/LC_MESSAGES/django.po
  9. 22
      locale/ru/LC_MESSAGES/django.po

65
apps/hadis/docs.py

@ -806,6 +806,71 @@ transmitter_list_swagger = swagger_auto_schema(
}
)
transmitter_filters_swagger = swagger_auto_schema(
operation_description="Get the needed data for filter lists such as madhabs,generations,reliabilities.",
operation_summary="Transmitter's List's filters",
operation_id="transmiterfilter",
tags=['Hadis'],
manual_parameters=[
openapi.Parameter(
'Accept-Language',
openapi.IN_HEADER,
description="Language code for localized content. Supported codes: 'en' (English), 'fa' (Persian), 'ar' (Arabic), 'ur' (Urdu), 'ru' (Russian). Defaults to 'en' if not specified.",
type=openapi.TYPE_STRING,
required=False,
default='en',
enum=['en', 'fa', 'ar', 'ur', 'ru']
)
],
responses={
status.HTTP_200_OK: openapi.Response(
description="list of transmitters filter data",
examples={
"application/json": {
"count": 10,
"next": "http://api.example.com/transmitters/?page=2",
"previous": None,
"results": [
{
"generations": [1,2,3,4,5],
"madhabs": [
{
"text": "Shia",
"slug": "shia"
},
{
"text": "Sunni",
"slug": "sunni"
},
{
"text": "Hanafi",
"slug": "hanafi"
}
],
"reliabilities": [
{
"text": "Very Reliable",
"slug": "very-reliable"
},
{
"text": "Reliable",
"slug": "reliable"
},
{
"text": "Acceptable",
"slug": "acceptable"
},
]
}
]
}
}
),
status.HTTP_500_INTERNAL_SERVER_ERROR: openapi.Response(
description="Internal server error"
)
}
)
# Swagger documentation for TransmitterDetailView
transmitter_detail_swagger = swagger_auto_schema(

12
apps/hadis/migrations/0071_merge_20251223_1055.py

@ -0,0 +1,12 @@
# Generated by Django 4.2.27 on 2025-12-23 10:55
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("hadis", "0070_alter_transmitters_reliability"),
("hadis", "0070_migrate_transmitter_reliability_data"),
]
operations = []

19
apps/hadis/migrations/0072_transmitterreliability_slug.py

@ -0,0 +1,19 @@
# Generated by Django 4.2.27 on 2025-12-23 10:55
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("hadis", "0071_merge_20251223_1055"),
]
operations = [
migrations.AddField(
model_name="transmitterreliability",
name="slug",
field=models.SlugField(
blank=True, max_length=255, null=True, verbose_name="slug"
),
),
]

7
apps/hadis/models/transmitter.py

@ -83,9 +83,16 @@ class TransmitterReliability(models.Model):
GRAY = 'gray', _('Gray')
title = models.JSONField(default = list , verbose_name=_('Title'))
slug = models.SlugField(max_length=255, verbose_name=_('slug'), blank=True,null=True)
color = models.CharField(max_length=20, choices=ColorChoices.choices, verbose_name=_('color'))
def save(self, *args, **kwargs):
if not self.slug:
slug = slugify(self.name[0]['text'])
self.slug = slug
super().save(*args, **kwargs)
def __str__(self):
return self.title[0]['text']

2
apps/hadis/serializers/hadis.py

@ -341,6 +341,8 @@ class TransmitterDetailSerializer(serializers.ModelSerializer):
}
return None
class TransmittersFiltersSerializer(serializers.ModelSerializer):
pass
class TransmitterSyncSerializer(serializers.ModelSerializer):
"""Serializer for syncing all transmitter data for offline mode"""

3
apps/hadis/urls.py

@ -1,7 +1,7 @@
from django.urls import path
from .views.category import HadisCategorySectListView, HadisCategoryTreeView, CategoriesView, CategoriesBySectView, HadisCategorySelectBySectView, HadisCategorySelectBySectSourceView , HadisCategoryTreeNormalView
from .views.hadis import HadisCollectionListView, HadisListView, HadisBasicView, HadisDetailView, HadisSyncView, HadisTransmittersView, HadisCorrectionsView,HadisMainListView
from .views.transmitter import TransmitterView ,TransmitterDetailView, TransmitterSyncView,TransmitterOpinionView, TransmitterOriginalTextView
from .views.transmitter import TransmitterView ,TransmitterDetailView, TransmitterSyncView,TransmitterOpinionView, TransmitterOriginalTextView, TransmitterFiltersView
from .views.reference import BookDetailView, BookReferencesView, BookReferenceSyncView, BookAttributeView
from .views.info import HadisInfoView
@ -32,6 +32,7 @@ urlpatterns = [
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/', TransmitterView.as_view(), name='narrators'),
path('narrators/filters/', TransmitterFiltersView.as_view(), name='narrator-filters'),
# Reference paths
path('references/<str:reference_slug>', BookDetailView.as_view(), name='reference-detail'),

52
apps/hadis/views/transmitter.py

@ -5,8 +5,12 @@ from rest_framework.response import Response
from ..models import Transmitters , TransmitterOpinion, TransmitterOriginalText
from ..serializers import TransmitterSerializer , TransmitterDetailSerializer, TransmitterSyncSerializer,TransmitterOpinionSerializer, TransmitterOriginalTextSerializer
from ..docs import transmitter_list_swagger, transmitter_detail_swagger, transmitter_sync_swagger, transmitter_opinion_swagger, transmitter_original_text_swagger
from ..docs import transmitter_filters_swagger,transmitter_list_swagger, transmitter_detail_swagger, transmitter_sync_swagger, transmitter_opinion_swagger, transmitter_original_text_swagger
from utils.pagination import NoPagination
from .category import get_localized_text
class TransmitterFliterView(ListAPIView):
pass
class TransmitterView(ListAPIView):
queryset = Transmitters.objects.all()
@ -124,3 +128,49 @@ class TransmitterSyncView(ListAPIView):
return Response(response_data)
class TransmitterFiltersView(ListAPIView):
"""
API view to return filter data for transmitters
Returns generations, madhabs, and reliabilities for filtering
"""
@transmitter_filters_swagger
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
def get_queryset(self):
# This view doesn't need a queryset, it returns computed data
return Transmitters.objects.none()
def list(self, request, *args, **kwargs):
# Get all unique generations
generations = Transmitters.objects.exclude(generation__isnull=True).values_list('generation', flat=True).distinct().order_by('generation')
# Get madhhab choices
madhabs = []
for choice in Transmitters.MadhhabChoices:
madhabs.append({
'text': str(choice.label),
'slug': choice.value
})
# Get reliabilities from TransmitterReliability model
from ..models.transmitter import TransmitterReliability
reliabilities = []
for reliability in TransmitterReliability.objects.all().order_by('id'):
# Get the English title for the slug
if reliability.title:
reliabilities.append({
'text': get_localized_text(reliability.title,request),
'slug': reliability.slug
})
response_data = {
'generations': list(generations),
'madhabs': madhabs,
'reliabilities': reliabilities
}
return Response(response_data)

22
locale/fa/LC_MESSAGES/django.po

@ -1304,3 +1304,25 @@ msgstr ""
#: utils/keyval_field.py:162 utils/keyval_field.py:172
msgid "Description"
msgstr ""
msgid "Shia"
msgstr "شیعه"
msgid "Sunni"
msgstr "سنی"
msgid "Hanafi"
msgstr "حنفی"
msgid "Maliki"
msgstr "مالکی"
msgid "Shafi'i"
msgstr "شافعی"
msgid "Hanbali"
msgstr "حنبلی"
msgid "Other"
msgstr "سایر"

22
locale/ru/LC_MESSAGES/django.po

@ -1305,3 +1305,25 @@ msgstr ""
#: utils/keyval_field.py:162 utils/keyval_field.py:172
msgid "Description"
msgstr ""
msgid "Shia"
msgstr "Шиит"
msgid "Sunni"
msgstr "Суннит"
msgid "Hanafi"
msgstr "Ханафит"
msgid "Maliki"
msgstr "Маликит"
msgid "Shafi'i"
msgstr "Шафиит"
msgid "Hanbali"
msgstr "Ханбалит"
msgid "Other"
msgstr "Другой"
Loading…
Cancel
Save