Skip to content

Commit

Permalink
Try to fix import error when sensitivity module is deactivated
Browse files Browse the repository at this point in the history
  • Loading branch information
justinefricou committed Feb 11, 2025
1 parent 2967035 commit b670488
Show file tree
Hide file tree
Showing 2 changed files with 135 additions and 124 deletions.
235 changes: 121 additions & 114 deletions geotrek/api/mobile/views/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@
from geotrek.tourism.models import (InformationDesk, InformationDeskType, TouristicContentType, TouristicEventType,
TouristicContentCategory)
from geotrek.zoning.models import City, District
from geotrek.sensitivity.models import SportPractice

if 'geotrek.sensitivity' in settings.INSTALLED_APPS:
from geotrek.sensitivity.models import SportPractice


class SettingsView(APIView):
Expand Down Expand Up @@ -93,121 +95,126 @@ def get(self, request, *args, **kwargs):
"showAllLabel": _("Show all routes"),
"hideAllLabel": _("Hide all routes")
})

data = [
{
'id': 'length',
'name': _('Length'),
'values': settings.MOBILE_LENGTH_INTERVALS,
},
{
'id': 'ascent',
'name': _('Ascent'),
'values': settings.MOBILE_ASCENT_INTERVALS,
},
{
'id': 'duration',
'name': _('Duration'),
'values': settings.MOBILE_DURATION_INTERVALS,

},
{
'id': 'difficulty',
'name': _('Difficulty'),
'values': api_serializers.DifficultySerializer(DifficultyLevel.objects.filter(
pk__in=Trek.objects.existing().filter(published=True).values_list('difficulty_id', flat=True)
).order_by('pk'), many=True, context={'request': request}).data
},
{
'id': 'practice',
'name': _('Practice'),
'values': api_serializers.PracticeSerializer(Practice.objects.filter(
pk__in=Trek.objects.existing().filter(published=True).values_list('practice_id', flat=True)
).order_by('order', 'name'), many=True, context={'request': request}).data,
},
{
'id': 'accessibilities',
'name': _('Accessibilities'),
'values': api_serializers.AccessibilitySerializer(Accessibility.objects.filter(
pk__in=Trek.objects.existing().filter(published=True).values_list('accessibilities', flat=True)
).order_by('name'), many=True, context={'request': request}).data,
},
{
'id': 'route',
'name': _('Route'),
'values': api_serializers.RouteSerializer(Route.objects.filter(
pk__in=Trek.objects.existing().filter(published=True).values_list('route_id', flat=True)
).order_by('route'), many=True, context={'request': request}).data,
},
{
'id': 'themes',
'name': _('Themes'),
'values': api_serializers.ThemeSerializer(Theme.objects.filter(
pk__in=Trek.objects.existing().filter(published=True).values_list('themes', flat=True)
).order_by('label'), many=True, context={'request': request}).data,
},
{
'id': 'networks',
'name': _('Networks'),
'values': api_serializers.NetworkSerializer(TrekNetwork.objects.filter(
pk__in=Trek.objects.existing().filter(published=True).values_list('networks', flat=True)
).order_by('network'), many=True, context={'request': request}).data,
},
{
'id': 'information_desk_types',
'name': _('Information Desks Types'),
'values': api_serializers.InformationDeskTypeSerializer(InformationDeskType.objects.filter(
pk__in=InformationDesk.objects.all().values_list('type_id', flat=True)
).order_by('label'), many=True, context={'request': request}).data,
},
{
'id': 'districts',
'name': _('Districts'),
'values': api_serializers.DistrictSerializer(District.objects.filter(published=True).order_by('name'),
many=True, context={'request': request}).data
},
{
'id': 'cities',
'name': _('Cities'),
'values': api_serializers.CitySerializer(City.objects.filter(published=True).order_by('name'),
many=True, context={'request': request}).data
},
{
'id': 'poi_types',
'name': _('POI types'),
'values': api_serializers.POITypeSerializer(POIType.objects.all().order_by('label'), many=True,
context={'request': request}).data,
},
{
'id': 'touristiccontent_types',
'name': _('Touristic content types'),
'values': api_serializers.TouristicContentTypeSerializer(
TouristicContentType.objects.all().order_by('label'),
many=True, context={'request': request}).data,
},
{
'id': 'touristicevent_types',
'name': _('Touristic event types'),
'values': api_serializers.TouristicEventTypeSerializer(
TouristicEventType.objects.all().order_by('type'),
many=True, context={'request': request}).data,
},
{
'id': 'touristiccontent_categories',
'name': _('Touristic event types'),
'values': api_serializers.TouristicContentCategorySerializer(
TouristicContentCategory.objects.all().order_by('order'),
many=True, context={'request': request}).data,
},
]

if 'geotrek.sensitivity' in settings.INSTALLED_APPS:
data.append({
'id': 'sensitive_area_practices',
'name': _('Sensitive area practices'),
'values': api_serializers.SportPracticeSerializer(
SportPractice.objects.all().order_by('name'),
many=True, context={'request': request}).data,
})

return response.Response({
'filters': filters,
'data': [
{
'id': 'length',
'name': _('Length'),
'values': settings.MOBILE_LENGTH_INTERVALS,
},
{
'id': 'ascent',
'name': _('Ascent'),
'values': settings.MOBILE_ASCENT_INTERVALS,
},
{
'id': 'duration',
'name': _('Duration'),
'values': settings.MOBILE_DURATION_INTERVALS,

},
{
'id': 'difficulty',
'name': _('Difficulty'),
'values': api_serializers.DifficultySerializer(DifficultyLevel.objects.filter(
pk__in=Trek.objects.existing().filter(published=True).values_list('difficulty_id', flat=True)
).order_by('pk'), many=True, context={'request': request}).data
},
{
'id': 'practice',
'name': _('Practice'),
'values': api_serializers.PracticeSerializer(Practice.objects.filter(
pk__in=Trek.objects.existing().filter(published=True).values_list('practice_id', flat=True)
).order_by('order', 'name'), many=True, context={'request': request}).data,
},
{
'id': 'accessibilities',
'name': _('Accessibilities'),
'values': api_serializers.AccessibilitySerializer(Accessibility.objects.filter(
pk__in=Trek.objects.existing().filter(published=True).values_list('accessibilities', flat=True)
).order_by('name'), many=True, context={'request': request}).data,
},
{
'id': 'route',
'name': _('Route'),
'values': api_serializers.RouteSerializer(Route.objects.filter(
pk__in=Trek.objects.existing().filter(published=True).values_list('route_id', flat=True)
).order_by('route'), many=True, context={'request': request}).data,
},
{
'id': 'themes',
'name': _('Themes'),
'values': api_serializers.ThemeSerializer(Theme.objects.filter(
pk__in=Trek.objects.existing().filter(published=True).values_list('themes', flat=True)
).order_by('label'), many=True, context={'request': request}).data,
},
{
'id': 'networks',
'name': _('Networks'),
'values': api_serializers.NetworkSerializer(TrekNetwork.objects.filter(
pk__in=Trek.objects.existing().filter(published=True).values_list('networks', flat=True)
).order_by('network'), many=True, context={'request': request}).data,
},
{
'id': 'information_desk_types',
'name': _('Information Desks Types'),
'values': api_serializers.InformationDeskTypeSerializer(InformationDeskType.objects.filter(
pk__in=InformationDesk.objects.all().values_list('type_id', flat=True)
).order_by('label'), many=True, context={'request': request}).data,
},
{
'id': 'districts',
'name': _('Districts'),
'values': api_serializers.DistrictSerializer(District.objects.filter(published=True).order_by('name'),
many=True, context={'request': request}).data
},
{
'id': 'cities',
'name': _('Cities'),
'values': api_serializers.CitySerializer(City.objects.filter(published=True).order_by('name'),
many=True, context={'request': request}).data
},
{
'id': 'poi_types',
'name': _('POI types'),
'values': api_serializers.POITypeSerializer(POIType.objects.all().order_by('label'), many=True,
context={'request': request}).data,
},
{
'id': 'touristiccontent_types',
'name': _('Touristic content types'),
'values': api_serializers.TouristicContentTypeSerializer(
TouristicContentType.objects.all().order_by('label'),
many=True, context={'request': request}).data,
},
{
'id': 'touristicevent_types',
'name': _('Touristic event types'),
'values': api_serializers.TouristicEventTypeSerializer(
TouristicEventType.objects.all().order_by('type'),
many=True, context={'request': request}).data,
},
{
'id': 'touristiccontent_categories',
'name': _('Touristic event types'),
'values': api_serializers.TouristicContentCategorySerializer(
TouristicContentCategory.objects.all().order_by('order'),
many=True, context={'request': request}).data,
},
{
'id': 'sensitive_area_practices',
'name': _('Sensitive area practices'),
'values': api_serializers.SportPracticeSerializer(
SportPractice.objects.all().order_by('name'),
many=True, context={'request': request}).data,
}
]
'data': data
})


Expand Down
24 changes: 14 additions & 10 deletions geotrek/api/mobile/views/trekking.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,13 @@
from rest_framework.permissions import AllowAny
from rest_framework_extensions.mixins import DetailSerializerMixin

from geotrek.api.mobile.serializers import trekking as api_serializers_trekking, tourism as api_serializers_tourism, sensitivity as api_serializers_sensitivity
from geotrek.api.mobile.serializers import trekking as api_serializers_trekking, tourism as api_serializers_tourism
from geotrek.common.functions import StartPoint, EndPoint
from geotrek.trekking import models as trekking_models

if 'geotrek.sensitivity' in settings.INSTALLED_APPS:
from geotrek.api.mobile.serializers import sensitivity as api_serializers_sensitivity


class TrekViewSet(DetailSerializerMixin, viewsets.ReadOnlyModelViewSet):
filter_backends = (DjangoFilterBackend,)
Expand Down Expand Up @@ -72,12 +75,13 @@ def touristic_events(self, request, *args, **kwargs):
data = api_serializers_tourism.TouristicEventListSerializer(qs, many=True, context={'root_pk': root_pk}).data
return response.Response(data)

@decorators.action(detail=True, methods=['get'])
def sensitive_areas(self, request, *args, **kwargs):
trek = self.get_object()
root_pk = self.request.GET.get('root_pk') or trek.pk
qs = trek.sensitive_areas.filter(published=True) \
.prefetch_related('species') \
.annotate(geom2d_transformed=Transform(F('geom'), settings.API_SRID)).order_by('pk')
data = api_serializers_sensitivity.SensitiveAreaListSerializer(qs, many=True, context={'root_pk': root_pk}).data
return response.Response(data)
if 'geotrek.sensitivity' in settings.INSTALLED_APPS:
@decorators.action(detail=True, methods=['get'])
def sensitive_areas(self, request, *args, **kwargs):
trek = self.get_object()
root_pk = self.request.GET.get('root_pk') or trek.pk
qs = trek.sensitive_areas.filter(published=True) \
.prefetch_related('species') \
.annotate(geom2d_transformed=Transform(F('geom'), settings.API_SRID)).order_by('pk')
data = api_serializers_sensitivity.SensitiveAreaListSerializer(qs, many=True, context={'root_pk': root_pk}).data
return response.Response(data)

0 comments on commit b670488

Please sign in to comment.