Source code for api.components
"""
This module contains definitions of the science payload components. Functions
that turn Blast database scheme into a flat science payload to be served through
the API.
"""
from typing import List
from host import models
from . import serializers
from .datamodel import DataModelComponent
[docs]
def transient_component(transient_name) -> List[DataModelComponent]:
"""
Transient model component defined what transient information is in the
science payload.
parameters:
transient_name (str): name of the transient.
returns:
component (List[DataModelComponent]): data model component to be added
to the Blast science payload.
"""
component = DataModelComponent(
prefix="transient_",
query={"name__exact": transient_name},
model=models.Transient,
serializer=serializers.TransientSerializer,
)
return [component]
[docs]
def host_component(transient_name) -> List[DataModelComponent]:
"""
Host model component defined what transient information is in the
science payload.
parameters:
transient_name (str): name of the transient.
returns:
component (List[DataModelComponent]): data model component to be added
to the Blast science payload.
"""
component = DataModelComponent(
prefix="host_",
query={"transient__name__exact": transient_name},
model=models.Host,
serializer=serializers.HostSerializer,
)
return [component]
[docs]
def aperture_component(transient_name) -> List[DataModelComponent]:
"""
Apeture model component defined what transient information is in the
science payload.
parameters:
transient_name (str): name of the transient.
returns:
component (List[DataModelComponent]): data model component to be added
to the Blast science payload.
"""
components = []
for aperture_type in ["local", "global"]:
components.append(
DataModelComponent(
prefix=f"{aperture_type}_aperture_",
query={
"transient__name__exact": transient_name,
"type__exact": aperture_type,
},
model=models.Aperture,
serializer=serializers.ApertureSerializer,
)
)
return components
[docs]
def photometry_component(transient_name) -> List[DataModelComponent]:
"""
Photometry model component defined what transient information is in the
science payload.
parameters:
transient_name (str): name of the transient.
returns:
component (List[DataModelComponent]): data model component to be added
to the Blast science payload.
"""
components = []
filters = models.Filter.objects.all()
for aperture_type in ["local", "global"]:
for filter in filters:
components.append(
DataModelComponent(
prefix=f"{aperture_type}_aperture_{filter.name}_",
query={
"transient__name__exact": transient_name,
"filter__name__exact": filter.name,
"aperture__type__exact": aperture_type,
},
model=models.AperturePhotometry,
serializer=serializers.AperturePhotometrySerializer,
)
)
return components
[docs]
def sed_fit_component(transient_name: str) -> List[DataModelComponent]:
"""
SED fit component which defines what is in the Blast science payload.
parameters:
transient_name (str): name of the transient.
returns:
component (List[DataModelComponent]): data model component to be added
to the Blast science payload.
"""
components = []
for aperture_type in ["local", "global"]:
components.append(
DataModelComponent(
prefix=f"{aperture_type}_aperture_host_",
query={
"transient__name__exact": transient_name,
"aperture__type__exact": aperture_type,
},
model=models.SEDFittingResult,
serializer=serializers.SEDFittingResultSerializer,
)
)
return components
data_model_components = [
transient_component,
host_component,
aperture_component,
photometry_component,
sed_fit_component,
]