def test_create_disaster(self): attributes = dict(name=self.disaster_type, locations=[self.district], description="Big Flood", date="2014-12-01", status="Assessment") Disaster(**attributes).save() disasters = Disaster.objects(name=self.disaster_type, date="2014-12-01", status="Assessment") self.assertEqual(1, disasters.count())
class DisasterListCreateView(ListCreateAPIView): model = Disaster serializer_class = DisasterSerializer queryset = Disaster.objects() permission_classes = [ Or(build_permission_class('dms.can_manage_disasters'), IsGetRequest) ] def get_queryset(self): query_params = Disaster.map_kwargs_to_db_params( self.request.GET.dict()) location_queried = self.request.GET.get('location', None) if not location_queried: if self.request.user.has_perm('dms.can_view_disasters'): user_profile = UserProfile.objects( user=self.request.user).first() user_group = self.request.user.group.name if user_profile and user_group in getattr( settings, 'DISTRICT_GROUPS', []): user_locations = get_user_district_locations( self.request.user) query_params.update({'locations__in': user_locations}) else: if not self.request.user.has_perm( 'dms.can_manage_disasters'): user_location = user_profile.location.id query_params.update({'locations__in': [user_location]}) return Disaster.objects(**query_params)
def _filter_disaster_type(cls, _queryset, kwargs): if kwargs.get('disaster_type', None): from dms.models.disaster import Disaster disasters = Disaster.objects(name=kwargs['disaster_type']) if disasters: return _queryset.filter(disaster__in=disasters) return _queryset.none() return _queryset
class DisasterView(MongoRetrieveUpdateView): model = Disaster serializer_class = DisasterSerializer queryset = Disaster.objects() permission_classes = [ Or(build_permission_class('dms.can_manage_disasters')) ] def post(self, request, *args, **kwargs): return self.patch(request, *args, **kwargs)
def get_queryset(self): query_params = Disaster.map_kwargs_to_db_params(self.request.GET.dict()) location_queried = self.request.GET.get("location", None) if not location_queried: if self.request.user.has_perm("dms.can_view_disasters"): user_profile = UserProfile.objects(user=self.request.user).first() user_group = self.request.user.group.name if user_profile and user_group in getattr(settings, "DISTRICT_GROUPS", []): user_locations = get_user_district_locations(self.request.user) query_params.update({"locations__in": user_locations}) else: if not self.request.user.has_perm("dms.can_manage_disasters"): user_location = user_profile.location.id query_params.update({"locations__in": [user_location]}) return Disaster.objects(**query_params)
def get_queryset(self): query_params = Disaster.map_kwargs_to_db_params( self.request.GET.dict()) location_queried = self.request.GET.get('location', None) if not location_queried: if self.request.user.has_perm('dms.can_view_disasters'): user_profile = UserProfile.objects( user=self.request.user).first() user_group = self.request.user.group.name if user_profile and user_group in getattr( settings, 'DISTRICT_GROUPS', []): user_locations = get_user_district_locations( self.request.user) query_params.update({'locations__in': user_locations}) else: if not self.request.user.has_perm( 'dms.can_manage_disasters'): user_location = user_profile.location.id query_params.update({'locations__in': [user_location]}) return Disaster.objects(**query_params)
class CSVDisasterView(ListCreateAPIView): model = Disaster serializer_class = CSVDisasterSerializer queryset = Disaster.objects() permission_classes = [ Or(build_permission_class('dms.can_manage_disasters'), IsGetRequest) ] renderer_classes = [ CSVRenderer, ] + api_settings.DEFAULT_RENDERER_CLASSES def get_queryset(self): params = self._filter_params(self.request) queryset = Disaster.objects.filter(**params) return queryset.order_by('-created_at') def _filter_params(self, req): start_date = req.GET.get('from') end_date = req.GET.get('to') status = req.GET.get('status') params = {} if start_date: if not self._undefined(start_date): params.update({'date__gte': start_date}) if end_date: if not self._undefined(end_date): params.update({'date__lte': end_date}) if status: if not self._undefined(status): params.update({'status': status}) return params def _undefined(self, strValue): return strValue == u'undefined'