Module pyaurorax.search.data_products.classes.data_product
Class definition for a data product
Global variables
var DATA_PRODUCT_TYPE_DATA_AVAILABILITY
-
Data product type for data availability. The AuroraX data availability system does not account for times when data was not expected to be collected, such as summer shutdowns due to inadequate night hours. This data product type for 'data availability' is meant to be used as a smarter data availability mechanism for Aurora.
var DATA_PRODUCT_TYPE_KEOGRAM
-
Data product type for keograms. Keograms are a 2-D representation of a series of images, and are one of the most popular data products that auroral science uses. More information can be found at https://docs.aurorax.space/about_the_data/standards/#keograms.
var DATA_PRODUCT_TYPE_MONTAGE
-
Data product type for montages. Like keograms, montages are another representation of a series of images. However, montages are not a 2D representation but rather a collage of thumnbail images for the period of time. An example can be found at https://data.phys.ucalgary.ca/sort_by_project/THEMIS/asi/stream2/2021/12/28/gill_themis19/20211228__gill_themis19_full-montage.pgm.jpg
var DATA_PRODUCT_TYPE_MOVIE
-
Data product type for movies. Movies are timelapse video files of auroral data, usually as MP4 or MPEG. They can consist of frames for a whole night, or an hour, and can be at any cadence that is most appropriate.
var DATA_PRODUCT_TYPE_SUMMARY_PLOT
-
Data product type for summary plots. A summary plot can be any type of plot that shows auroral data in a summary format, for example a background-subtracted meridian scanning photometer plot showing counts in Rayleighs.
Classes
class DataProductData (data_source: DataSource,
data_product_type: str,
start: datetime.datetime,
end: datetime.datetime,
url: str,
metadata: Dict | None = None)-
Expand source code
class DataProductData: """ Data product object Attributes: data_source (DataSource): Data source that the ephemeris record is associated with data_product_type (str): Data product type ("keogram", "movie", "summary_plot", etc.) start (datetime.datetime): Starting timestamp for the record (assumed it is in UTC), inclusive end (datetime.datetime): Ending timestamp for the record (assumed it is in UTC), inclusive url (str): The URL of data product metadata (Dict): Metadata for this record (arbitrary keys and values) """ def __init__(self, data_source: DataSource, data_product_type: str, start: datetime.datetime, end: datetime.datetime, url: str, metadata: Optional[Dict] = None): self.data_source = data_source self.data_product_type = data_product_type self.start = start self.end = end self.url = url self.metadata = metadata def to_json_serializable(self) -> Dict: """ Convert object to a JSON-serializable object (ie. translate datetime objects to strings) Returns: A dictionary object that is JSON-serializable """ # init d = self.__dict__ # format epoch as str if (type(d["start"]) is datetime.datetime): d["start"] = d["start"].strftime("%Y-%m-%dT%H:%M:00.000") if (type(d["end"]) is datetime.datetime): d["end"] = d["end"].strftime("%Y-%m-%dT%H:%M:00.000") # format metadata if (self.metadata is not None): for key, value in self.metadata.items(): if (isinstance(value, datetime.datetime) is True or isinstance(value, datetime.date) is True): self.metadata[key] = self.metadata[key].strftime("%Y-%m-%dT%H:%M:%S.%f") # pragma: nocover # format data source fields for query d["program"] = self.data_source.program d["platform"] = self.data_source.platform d["instrument_type"] = self.data_source.instrument_type del d["data_source"] # return return d def __str__(self) -> str: return self.__repr__() def __repr__(self) -> str: # shorten the metadata and url max_len = 20 attr_metadata = f"{self.metadata}" if (len(attr_metadata) > max_len): attr_metadata = attr_metadata[0:max_len] + "...}" attr_url = f"{self.url}" if (len(attr_url) > max_len): attr_url = attr_url[0:max_len] + "..." # return formatted representation return f"DataProductData(start={repr(self.start)}, end={repr(self.end)}, data_product_type='{self.data_product_type}', " \ f"url='{attr_url}', metadata={attr_metadata}, data_source=DataSource(...))"
Data product object
Attributes
data_source
:DataSource
- Data source that the ephemeris record is associated with
data_product_type
:str
- Data product type ("keogram", "movie", "summary_plot", etc.)
start
:datetime.datetime
- Starting timestamp for the record (assumed it is in UTC), inclusive
end
:datetime.datetime
- Ending timestamp for the record (assumed it is in UTC), inclusive
url
:str
- The URL of data product
metadata
:Dict
- Metadata for this record (arbitrary keys and values)
Methods
def to_json_serializable(self) ‑> Dict
-
Expand source code
def to_json_serializable(self) -> Dict: """ Convert object to a JSON-serializable object (ie. translate datetime objects to strings) Returns: A dictionary object that is JSON-serializable """ # init d = self.__dict__ # format epoch as str if (type(d["start"]) is datetime.datetime): d["start"] = d["start"].strftime("%Y-%m-%dT%H:%M:00.000") if (type(d["end"]) is datetime.datetime): d["end"] = d["end"].strftime("%Y-%m-%dT%H:%M:00.000") # format metadata if (self.metadata is not None): for key, value in self.metadata.items(): if (isinstance(value, datetime.datetime) is True or isinstance(value, datetime.date) is True): self.metadata[key] = self.metadata[key].strftime("%Y-%m-%dT%H:%M:%S.%f") # pragma: nocover # format data source fields for query d["program"] = self.data_source.program d["platform"] = self.data_source.platform d["instrument_type"] = self.data_source.instrument_type del d["data_source"] # return return d
Convert object to a JSON-serializable object (ie. translate datetime objects to strings)
Returns
A dictionary object that is JSON-serializable