Source code for pyrpl.software_modules.curve_viewer
import logging
logger = logging.getLogger(name=__name__)
from ..attributes import SelectProperty, StringProperty, TextProperty, \
CurveProperty, CurveSelectProperty, CurveSelectListProperty
from ..memory import MemoryTree
from ..modules import Module
from ..widgets.module_widgets.curve_viewer_widget import CurveViewerWidget
from ..curvedb import CurveDB
MAX_CURVES = 100 # maximum number of curves to display
[docs]def all_curves(instance=None):
return CurveDB.all()[:MAX_CURVES]
[docs]class CurveViewer(Module):
"""
This Module allows to browse through curves that were taken with pyrpl
"""
_widget_class = CurveViewerWidget
_gui_attributes = ["curve_name", "pk", "curve", "params", "save_params",
"delete_curve", "refresh_curve_list"]
pk = CurveSelectListProperty(doc="the pk of the currently viewed curve",
call_setup=True)
curve = CurveProperty(default=None, show_childs=True)
params = TextProperty()
curve_name = StringProperty(doc="Name of the currently viewed curve")
# read_only=True) # TODO: implement read-only
def _setup(self):
self.m = MemoryTree()
self.curve = self.pk
if self._curve_object is None:
self.params = ""
self.curve_name = ""
else:
self.params = self.m._get_yml(self._curve_object.params)
self.curve_name = self._curve_object.params['name']
[docs] def save_params(self):
self.m = MemoryTree()
self.m._set_yml(self.params)
if self._curve_object is not None:
self._curve_object.params = self.self.m._data
self._curve_object.save()
[docs] def delete_curve(self):
if self._curve_object is not None:
self._logger.info("Curve with id %s will be deleted!",
self._curve_object.pk)
del_pk = self._curve_object.pk
del_index = self.pk_options.index(del_pk)
self._curve_object.delete()
new_options = list(self.__class__.pk.options(self).keys())
new_index = max(0, min(del_index, len(new_options)-2)) # try to select the same list item as before
new_option = new_options[new_index]
if new_option != del_pk:
self.pk = new_option
[docs] def refresh_curve_list(self):
self.__class__.pk.options(self)