Source code for pywwt.windows.layer
import requests
from .misc import WWTException, handle_response, parse_kwargs, get_soup
__all__ = ['WWTLayer']
[docs]
class WWTLayer(object):
"""
A ``WWTLayer`` object corresponding to a layer in WWT's Layer Manager.
Parameters
----------
name : `str`
The name of the layer.
id : `str`
The ID of the layer.
field : `list`
The fields in the layer as a list of strings.
wwt : `~pywwt.windows.WWTWindowsClient`
The WWT client where this layer exists.
"""
def __init__(self, name, id, fields, wwt):
self.name = name
self.id = id
self.wwt = wwt
self.exists = True
self.fields = fields
def _check_exists(self):
if not self.exists:
raise WWTException("This layer has been deleted!")
[docs]
def set_property(self, property_name, property_value, **kwargs):
"""
Set a single property. For a list of properties see:
https://docs.worldwidetelescope.org/lcapi-guide/1/properties/
Parameters
----------
property_name : `str`
Name of the property to be set.
property_value : `str`
Value the property should take.
kwargs
Additional standard keyword arguments
"""
self._check_exists()
params = {}
params["cmd"] = "setprop"
params["id"] = self.id
params["propname"] = property_name
params["propvalue"] = property_value
parse_kwargs(params, kwargs)
u = requests.post(self.wwt.wwt_url, params=params)
prop_str = u.content
handle_response(prop_str)
[docs]
def set_properties(self, props_dict, **kwargs):
"""
Set the properties of the layer. For a list of properties
see:
https://docs.worldwidetelescope.org/lcapi-guide/1/properties/
Parameters
----------
props_dict : `dict`
Dictionary of property_name: property_value pairs.
kwargs
Additional standard keyword arguments
"""
self._check_exists()
props_string = "<?xml version='1.0' encoding='UTF-8'?><LayerApi><Layer "
for key, value in list(props_dict.items()):
props_string += "%s=\"%s\" " % (key, value)
props_string += " /></LayerApi>"
params = {}
params["cmd"] = "setprops"
params["id"] = self.id
parse_kwargs(params, kwargs)
u = requests.post(self.wwt.wwt_url, params=params, data=props_string)
props_str = u.content
handle_response(props_str)
[docs]
def get_property(self, property_name):
"""
Return a property. For a list of properties see:
https://docs.worldwidetelescope.org/lcapi-guide/1/properties/
Parameters
----------
property_name : `str`
The name of the property to be returned.
"""
self._check_exists()
params = {}
params["cmd"] = "getprop"
params["id"] = self.id
params["propname"] = property_name
soup, resp = get_soup(self.wwt.wwt_url, params)
handle_response(resp)
return soup.Layer.attrs[property_name]
[docs]
def get_properties(self):
"""
Return all the properties of the layer. For a list of properties
see:
https://docs.worldwidetelescope.org/lcapi-guide/1/properties/
Returns
-------
properties : `dict`
All of the properties in a dict of key: value pairs.
"""
self._check_exists()
params = {}
params["cmd"] = "getprops"
params["id"] = self.id
soup, resp = get_soup(self.wwt.wwt_url, params)
handle_response(resp)
return soup.Layer.attrs
[docs]
def update(self, data=None, name=None,
no_purge=False, purge_all=False,
show=True, **kwargs):
"""
Update the layer.
Parameters
----------
data : `dict`, optional
New data to be added to the layer as a dictionary of Numpy arrays
name : `str`, optional
A new name for the layer, if it needs to be renamed
no_purge : `bool`, optional
The sending of an update command will delete events that occur
before the start time of any events in the update and that have
already decayed. Set this flag to `True` if the event data should
not be deleted.
purge_all : `bool`, optional
Delete all data.
show : `bool`, optional
Whether to show or hide the layer.
kwargs
Additional standard keyword arguments
"""
self._check_exists()
params = {}
params["cmd"] = "update"
params["id"] = self.id
params["hasheader"] = "False"
params["name"] = name
params["purgeall"] = str(purge_all).lower()
params["nopurge"] = str(no_purge).lower()
params["show"] = str(show).lower()
parse_kwargs(params, kwargs)
data_string = ""
if data is not None:
nevents = len(data[self.fields[0]])
for i in range(nevents):
data_string += "\t".join([str(data[k][i]) for k in self.fields]) + "\n"
u = requests.post(self.wwt.wwt_url, params=params, data=data_string)
update_str = u.content
handle_response(update_str)
[docs]
def activate(self, **kwargs):
"""
Highlight this layer in the layer manager.
Parameters
----------
kwargs
Additional standard keyword arguments
"""
self._check_exists()
params = {}
params["cmd"] = "activate"
params["id"] = self.id
parse_kwargs(params, kwargs)
u = requests.get(self.wwt.wwt_url, params=params)
layer_str = u.content
handle_response(layer_str)
[docs]
def delete(self):
"""
Delete the layer.
"""
self._check_exists()
params = {}
params["cmd"] = "delete"
params["id"] = self.id
u = requests.get(self.wwt.wwt_url, params=params)
layer_str = u.content
handle_response(layer_str)
self.exists = False
def __repr__(self):
return "<WWTLayer \"%s\" with ID %s on client at %s>" % (
self.name, self.id, self.wwt.host)
def __str__(self):
return self.name