diff --git a/program/views.py b/program/views.py index 876e5b609f36e45360a8dca8c0f1f8e5cb9d97a6..d99e828da318756f3927e9ab1da59c8192ffe8b9 100644 --- a/program/views.py +++ b/program/views.py @@ -437,7 +437,8 @@ class APIUserViewSet(viewsets.ModelViewSet): class APIShowViewSet(viewsets.ModelViewSet): """ /api/v1/shows/ Returns all shows (GET, POST) - /api/v1/shows/?active=true Returns all active shows (GET) + /api/v1/shows/?active=true Returns all active shows (= currently running) (GET) + /api/v1/shows/?active=false Returns all inactive shows (= past or upcoming) (GET) /api/v1/shows/?host=1 Returns shows assigned to a given host (GET) /api/v1/shows/?owner=1 Returns shows of a given owner (GET) /api/v1/shows/1 Used for retrieving a single show or update (if owned) (GET, PUT, DELETE) @@ -465,18 +466,22 @@ class APIShowViewSet(viewsets.ModelViewSet): '''Filters''' - if self.request.GET.get('active') == 'true': + if self.request.GET.get('active') == 'true' or self.request.GET.get('active') == 'false': '''Filter currently running shows''' # Get currently running schedules to filter by first # For single dates we test if there'll be one in the future (and ignore the until date) # TODO: Really consider dstart? (=currently active, not just upcoming ones) # Add limit for future? - schedules = Schedule.objects.filter( Q(rrule_id__gt=1,dstart__lte=date.today(),until__gte=date.today()) | + show_ids = Schedule.objects.filter( Q(rrule_id__gt=1,dstart__lte=date.today(),until__gte=date.today()) | Q(rrule_id=1,dstart__gte=date.today()) ).distinct().values_list('show_id', flat=True) - shows = Show.objects.filter(id__in=schedules) + shows = Show.objects.filter(id__in=show_ids) + + if self.request.GET.get('active') == 'false': + '''Return all shows except those which are running''' + shows = Show.objects.exclude(id__in=show_ids) if self.request.GET.get('owner') != None: '''Filter shows by owner''' @@ -987,9 +992,10 @@ class APINoteViewSet(viewsets.ModelViewSet): class APICategoryViewSet(viewsets.ModelViewSet): """ - /api/v1/categories/ Returns all categories (GET, POST) - /api/v1/categories/?active=true Returns all active categories (GET) - /api/v1/categories/1 Returns a category by its ID (GET, PUT, DELETE) + /api/v1/categories/ Returns all categories (GET, POST) + /api/v1/categories/?active=true Returns all active categories (GET) + /api/v1/categories/?active=false Returns all inactive categories (GET) + /api/v1/categories/1 Returns a category by its ID (GET, PUT, DELETE) """ queryset = Category.objects.all() serializer_class = CategorySerializer @@ -1002,14 +1008,18 @@ class APICategoryViewSet(viewsets.ModelViewSet): if self.request.GET.get('active') == 'true': return Category.objects.filter(is_active=True) + if self.request.GET.get('active') == 'false': + return Category.objects.filter(is_active=False) + return Category.objects.all() class APITypeViewSet(viewsets.ModelViewSet): """ - /api/v1/types/ Returns all types (GET, POST) - /api/v1/types/?active=true Returns all active types (GET) - /api/v1/types/1 Returns a type by its ID (GET, PUT, DELETE) + /api/v1/types/ Returns all types (GET, POST) + /api/v1/types/?active=true Returns all active types (GET) + /api/v1/types/?active=false Returns all active types (GET) + /api/v1/types/1 Returns a type by its ID (GET, PUT, DELETE) """ queryset = Type.objects.all() @@ -1022,6 +1032,9 @@ class APITypeViewSet(viewsets.ModelViewSet): if self.request.GET.get('active') == 'true': return Type.objects.filter(is_active=True) + if self.request.GET.get('active') == 'false': + return Type.objects.filter(is_active=False) + return Type.objects.all() @@ -1042,15 +1055,19 @@ class APITopicViewSet(viewsets.ModelViewSet): if self.request.GET.get('active') == 'true': return Topic.objects.filter(is_active=True) + if self.request.GET.get('active') == 'false': + return Topic.objects.filter(is_active=False) + return Topic.objects.all() class APIMusicFocusViewSet(viewsets.ModelViewSet): """ - /api/v1/musicfocus/ Returns all musicfocuses (GET, POST) - /api/v1/musicfocus/?active=true Returns all active musicfocuses (GET) - /api/v1/musicfocus/1 Returns a musicfocus by its ID (GET, PUT, DELETE) + /api/v1/musicfocus/ Returns all musicfocuses (GET, POST) + /api/v1/musicfocus/?active=true Returns all active musicfocuses (GET) + /api/v1/musicfocus/?active=false Returns all inactive musicfocuses (GET) + /api/v1/musicfocus/1 Returns a musicfocus by its ID (GET, PUT, DELETE) """ queryset = MusicFocus.objects.all() @@ -1063,15 +1080,19 @@ class APIMusicFocusViewSet(viewsets.ModelViewSet): if self.request.GET.get('active') == 'true': return MusicFocus.objects.filter(is_active=True) + if self.request.GET.get('active') == 'false': + return MusicFocus.objects.filter(is_active=False) + return MusicFocus.objects.all() class APIFundingCategoryViewSet(viewsets.ModelViewSet): """ - /api/v1/fundingcategories/ Returns all fundingcategories (GET, POST) - /api/v1/fundingcategories/?active=true Returns all active fundingcategories (GET) - /api/v1/fundingcategories/1 Returns a fundingcategory by its ID (GET, PUT, DELETE) + /api/v1/fundingcategories/ Returns all fundingcategories (GET, POST) + /api/v1/fundingcategories/?active=true Returns all active fundingcategories (GET) + /api/v1/fundingcategories/?active=false Returns all active fundingcategories (GET) + /api/v1/fundingcategories/1 Returns a fundingcategory by its ID (GET, PUT, DELETE) """ queryset = FundingCategory.objects.all() @@ -1084,15 +1105,19 @@ class APIFundingCategoryViewSet(viewsets.ModelViewSet): if self.request.GET.get('active') == 'true': return FundingCategory.objects.filter(is_active=True) + if self.request.GET.get('active') == 'false': + return FundingCategory.objects.filter(is_active=False) + return FundingCategory.objects.all() class APILanguageViewSet(viewsets.ModelViewSet): """ - /api/v1/languages/ Returns all languages (GET, POST) - /api/v1/languages/?active=true Returns all active languages (GET) - /api/v1/languages/1 Returns a language by its ID (GET, PUT, DELETE) + /api/v1/languages/ Returns all languages (GET, POST) + /api/v1/languages/?active=true Returns all active languages (GET) + /api/v1/languages/?active=false Returns all active languages (GET) + /api/v1/languages/1 Returns a language by its ID (GET, PUT, DELETE) """ queryset = Language.objects.all() @@ -1105,15 +1130,19 @@ class APILanguageViewSet(viewsets.ModelViewSet): if self.request.GET.get('active') == 'true': return Language.objects.filter(is_active=True) + if self.request.GET.get('active') == 'false': + return Language.objects.filter(is_active=False) + return Language.objects.all() class APIHostViewSet(viewsets.ModelViewSet): """ - /api/v1/hosts/ Returns all hosts (GET, POST) - /api/v1/hosts/?active=true Returns all active hosts (GET) - /api/v1/hosts/1 Returns a host by its ID (GET, PUT, DELETE) + /api/v1/hosts/ Returns all hosts (GET, POST) + /api/v1/hosts/?active=true Returns all active hosts (GET) + /api/v1/hosts/?active=false Returns all active hosts (GET) + /api/v1/hosts/1 Returns a host by its ID (GET, PUT, DELETE) """ queryset = Host.objects.all() @@ -1127,4 +1156,7 @@ class APIHostViewSet(viewsets.ModelViewSet): if self.request.GET.get('active') == 'true': return Host.objects.filter(is_active=True) + if self.request.GET.get('active') == 'false': + return Host.objects.filter(is_active=False) + return Host.objects.all() \ No newline at end of file