Source code for asdf_astropy.converters.coordinates.frame
from asdf.extension import Converter
from asdf_astropy.converters.utils import import_type
[docs]
class FrameConverter(Converter):
def __init__(self, tags, frame_type_name):
self._frame_type_name = frame_type_name
self._frame_type = None
if isinstance(tags, str):
tags = [tags]
self._tags = tags
@property
def tags(self):
return self._tags
@property
def types(self):
return [self._frame_type_name]
@property
def frame_type(self):
# Delay import until the frame class is needed to improve speed
# of loading the extension.
if self._frame_type is None:
self._frame_type = import_type(self._frame_type_name)
return self._frame_type
[docs]
def to_yaml_tree(self, obj, tag, ctx):
node = {}
if obj.has_data:
node["data"] = obj.data
# TODO: Figure out why we can't use the frame_attributes
# values and document.
frame_attributes = {}
for attr in obj.frame_attributes:
value = getattr(obj, attr, None)
if value is not None:
frame_attributes[attr] = value
node["frame_attributes"] = frame_attributes
return node
[docs]
def from_yaml_tree(self, node, tag, ctx):
data = node.get("data", None)
if data is not None:
return self.frame_type(node["data"], **node["frame_attributes"])
return self.frame_type(**node["frame_attributes"])
[docs]
class LegacyICRSConverter(Converter):
tags = ("tag:astropy.org:astropy/coordinates/frames/icrs-1.0.0",)
# Leave the types list empty so that the 1.1.0 ICRS converter
# is used on write.
types = ()
[docs]
def to_yaml_tree(self, obj, tag, ctx):
from astropy.units import Quantity
return {
"ra": {
"value": obj.ra.value,
"unit": obj.ra.unit.to_string(),
"wrap_angle": Quantity(obj.ra.wrap_angle),
},
"dec": {
"value": obj.dec.value,
"unit": obj.dec.unit.to_string(),
},
}
[docs]
def from_yaml_tree(self, node, tag, ctx):
from astropy.coordinates import ICRS, Angle, Latitude, Longitude
ra = Longitude(node["ra"]["value"], unit=node["ra"]["unit"], wrap_angle=Angle(node["ra"]["wrap_angle"]))
dec = Latitude(node["dec"]["value"], unit=node["dec"]["unit"])
return ICRS(ra=ra, dec=dec)