"""Defines the views for the ``jwql`` REST API.
The functions within serve as views for the ``jwql`` REST API.
Currently, the following services are available:
- Return a list of all proposals (``api/proposals/``)
- Return a list of proposals for a given instrument (``/api/<instrument>/proposals/``)
- Return a list of filenames for a given proposal (``/api/<proposal>/filenames/``)
- Return a list of filenames for a given rootname (``/api/<rootname>/filenames/``)
- Return a list of preview images for a given instrument (``/api/<instrument>/preview_images/``)
- Return a list of preview images for a given proposal (``/api/<proposal>/preview_images/``)
- Return a list of preview images for a given rootname (``/api/<rootname>/preview_images/``)
- Return a list of thumbnails for a given instrument (``/api/<instrument>/thumbnails/``)
- Return a list of thumbnails for a given proposal (``/api/<proposal>/thumbnails/``)
- Return a list of thumbnails for a given rootname (``/api/<rootname>/thumbnails/``)
Where ``<instrument>`` is the instrument of interest (e.g. ``NIRCam``),
``<proposal>`` is the five-digit proposal number of interest (e.g.
``86600``), and ``<rootname>`` is the rootname of interest (e.g.
``jw86600008001_02101_00007_guider2``). Note that ``<rootname>`` need
not be the full rootname, but can be any shortened version, (e.g.
``jw8660000801_02101``, or ``jw8660``); using an abbreviated version
will return all filenames associated with the rootname up to that point.
Authors
-------
- Matthew Bourque
- Teagan King
Use
---
This module is called in ``urls.py`` as such:
::
from django.urls import path
from . import api_views
urlpatterns = [path('web/path/to/view/', api_views.view_name, name='view_name')]
References
----------
For more information please see:
``https://docs.djangoproject.com/en/2.0/topics/http/views/``
"""
from django.http import JsonResponse
from .data_containers import get_all_proposals
from .data_containers import get_filenames_by_proposal
from .data_containers import get_filenames_by_rootname
from .data_containers import get_instrument_proposals
from .data_containers import get_preview_images_by_instrument
from .data_containers import get_preview_images_by_proposal
from .data_containers import get_preview_images_by_rootname
from .data_containers import get_thumbnails_by_instrument
from .data_containers import get_thumbnails_by_proposal
from .data_containers import get_thumbnails_by_rootname
[docs]def all_proposals(request):
"""Return a list of proposals for the mission
Parameters
----------
request : HttpRequest object
Incoming request from the webpage
Returns
-------
JsonResponse object
Outgoing response sent to the webpage
"""
proposals = get_all_proposals()
return JsonResponse({'proposals': proposals}, json_dumps_params={'indent': 2})
[docs]def filenames_by_proposal(request, proposal):
"""Return a list of filenames for the given ``proposal``
Parameters
----------
request : HttpRequest object
Incoming request from the webpage
proposal : str
The five-digit proposal number (e.g. ``88600``)
Returns
-------
JsonResponse object
Outgoing response sent to the webpage
"""
filenames = get_filenames_by_proposal(proposal)
return JsonResponse({'filenames': filenames}, json_dumps_params={'indent': 2})
[docs]def filenames_by_rootname(request, rootname):
"""Return a list of filenames for the given ``rootname``
Parameters
----------
request : HttpRequest object
Incoming request from the webpage
rootname : str
The rootname of interest (e.g. ``jw86600008001_02101_00007_guider2``).
Returns
-------
JsonResponse object
Outgoing response sent to the webpage
"""
filenames = get_filenames_by_rootname(rootname)
return JsonResponse({'filenames': filenames}, json_dumps_params={'indent': 2})
[docs]def instrument_proposals(request, inst):
"""Return a list of proposals for the given instrument
Parameters
----------
request : HttpRequest object
Incoming request from the webpage
inst : str
The instrument of interest. The name of the instrument must
mach one of the following: (``nircam``, ``NIRCam``, ``niriss``,
``NIRISS``, ``nirspec``, ``NIRSpec``, ``miri``, ``MIRI``,
``fgs``, ``FGS``).
Returns
-------
JsonResponse object
Outgoing response sent to the webpage
"""
proposals = get_instrument_proposals(inst)
return JsonResponse({'proposals': proposals}, json_dumps_params={'indent': 2})
[docs]def preview_images_by_instrument(request, inst):
"""Return a list of available preview images in the filesystem for
the given instrument.
Parameters
----------
request : HttpRequest object
Incoming request from the webpage
inst : str
The instrument of interest. The name of the instrument must
mach one of the following: (``nircam``, ``NIRCam``, ``niriss``,
``NIRISS``, ``nirspec``, ``NIRSpec``, ``miri``, ``MIRI``,
``fgs``, ``FGS``).
Returns
-------
JsonResponse object
Outgoing response sent to the webpage
"""
preview_images = get_preview_images_by_instrument(inst)
return JsonResponse({'preview_images': preview_images}, json_dumps_params={'indent': 2})
[docs]def preview_images_by_proposal(request, proposal):
"""Return a list of available preview images in the filesystem for
the given ``proposal``.
Parameters
----------
request : HttpRequest object
Incoming request from the webpage
proposal : str
The five-digit proposal number (e.g. ``88600``)
Returns
-------
JsonResponse object
Outgoing response sent to the webpage
"""
preview_images = get_preview_images_by_proposal(proposal)
return JsonResponse({'preview_images': preview_images}, json_dumps_params={'indent': 2})
[docs]def preview_images_by_rootname(request, rootname):
"""Return a list of available preview images in the filesystem for
the given ``rootname``.
Parameters
----------
request : HttpRequest object
Incoming request from the webpage
rootname : str
The rootname of interest (e.g. ``jw86600008001_02101_00007_guider2``).
Returns
-------
JsonResponse object
Outgoing response sent to the webpage
"""
preview_images = get_preview_images_by_rootname(rootname)
return JsonResponse({'preview_images': preview_images}, json_dumps_params={'indent': 2})
[docs]def thumbnails_by_instrument(request, inst):
"""Return a list of available thumbnails in the filesystem for the
given instrument.
Parameters
----------
request : HttpRequest object
Incoming request from the webpage
inst : str
The instrument of interest. The name of the instrument must
match one of the following: (``nircam``, ``NIRCam``, ``niriss``,
``NIRISS``, ``nirspec``, ``NIRSpec``, ``miri``, ``MIRI``,
``fgs``, ``FGS``).
Returns
-------
JsonResponse object
Outgoing response sent to the webpage
"""
thumbnails = get_thumbnails_by_instrument(inst)
return JsonResponse({'thumbnails': thumbnails}, json_dumps_params={'indent': 2})
[docs]def thumbnails_by_proposal(request, proposal):
"""Return a list of available thumbnails in the filesystem for the
given ``proposal``.
Parameters
----------
request : HttpRequest object
Incoming request from the webpage
proposal : str
The five-digit proposal number (e.g. ``88600``)
Returns
-------
JsonResponse object
Outgoing response sent to the webpage
"""
thumbnails = get_thumbnails_by_proposal(proposal)
return JsonResponse({'thumbnails': thumbnails}, json_dumps_params={'indent': 2})
[docs]def thumbnails_by_rootname(request, rootname):
"""Return a list of available thumbnails in the filesystem for the
given ``rootname``.
Parameters
----------
request : HttpRequest object
Incoming request from the webpage
rootname : str
The rootname of interest (e.g. ``jw86600008001_02101_00007_guider2``).
Returns
-------
JsonResponse object
Outgoing response sent to the webpage
"""
thumbnails = get_thumbnails_by_rootname(rootname)
return JsonResponse({'thumbnails': thumbnails}, json_dumps_params={'indent': 2})