Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 18 additions & 1 deletion pytac/device.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ def __init__(self, cs, rb_pv=None, sp_pv=None):

Contains a control system, readback and setpoint pvs. A readback
or setpoint pv is required when creating a device otherwise a
PvException is raised.
PvException is raised. The device is enabled by default.

Args:
cs (ControlSystem): Control system object used to get and set
Expand All @@ -20,13 +20,30 @@ def __init__(self, cs, rb_pv=None, sp_pv=None):
self.rb_pv = rb_pv
self.sp_pv = sp_pv
self._cs = cs
self._enabled = True
if rb_pv is not None:
self.name = rb_pv.split(':')[0]
elif sp_pv is not None:
self.name = sp_pv.split(':')[0]
else:
raise PvException("Readback or setpoint pvs need to be given")

def is_enabled(self):
"""Check whether an device is enabled or disabled.

Returns:
boolean: Represents whether an device is enabled or disabled.
"""
return self._enabled

def set_enabled(self, enabled=True):
"""Enable or disable an device.

Args:
enabled (boolean): Set whether an device is disabled or enabled.
"""
self._enabled = enabled

def put_value(self, value):
"""Set the value of a pv.

Expand Down
17 changes: 0 additions & 17 deletions pytac/element.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ def __init__(self, name, length, element_type):
self.families = set()
self._uc = dict()
self._devices = dict()
self._enabled = True

def __repr__(self):
"""Auxiliary function to print out an element.
Expand Down Expand Up @@ -53,22 +52,6 @@ def get_length(self):

return self._length

def is_enabled(self):
"""Check whether an element is enabled or disabled.

Returns:
boolean: Represents whether an element is enabled or disabled.
"""
return self._enabled

def set_enabled(self, enabled=True):
"""Enable or disable an element.

Args:
enabled (boolean): Set whether an element is disabled or enabled.
"""
self._enabled = enabled

def add_device(self, field, device, uc):
"""Add device and unit conversion objects to a given field.

Expand Down
36 changes: 21 additions & 15 deletions test/test_device.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,33 +4,39 @@
import mock


SP_PV = 'SR01A-PC-SQUAD-01:SETI'
RB_PV = 'SR01A-PC-SQUAD-01:I'

@pytest.fixture
def create_device(readback, setpoint):
def create_device(readback=RB_PV, setpoint=SP_PV):
_rb = readback
_sp = setpoint
device = pytac.device.Device(rb_pv=_rb, sp_pv=_sp, cs=mock.MagicMock())
return device


def test_set_device_value():
rb_pv = 'SR01A-PC-SQUAD-01:I'
sp_pv = 'SR01A-PC-SQUAD-01:SETI'
def test_set_device_value(create_device):
create_device.put_value(40)
create_device._cs.put.assert_called_with(SP_PV, 40)

device1 = create_device(rb_pv, sp_pv)
device1.put_value(40)
device1._cs.put.assert_called_with(sp_pv, 40)

device2 = create_device(rb_pv, None)
def test_device_invalid_sp_raise_exception():
device2 = create_device(RB_PV, None)
with pytest.raises(PvException):
device2.put_value(40)
with pytest.raises(PvException):
create_device(None, None)


def test_get_device_value():
sp_pv = 'SR01A-PC-SQUAD-01:SETI'

device = create_device(None, sp_pv)
def test_get_device_value(create_device):
with pytest.raises(PvException):
device.get_value('non_existent')
create_device.get_value('non_existent')

with pytest.raises(PvException):
create_device(None, None)

def test_is_enabled(create_device):
assert create_device.is_enabled() == True


def test_set_enabled(create_device):
create_device.set_enabled(False)
assert create_device.is_enabled() == False
9 changes: 0 additions & 9 deletions test/test_element.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,12 +87,3 @@ def test_identity_conversion():

def test_get_fields(test_element):
assert set(test_element.get_fields()) == set(['y', 'x'])


def test_is_enabled(test_element):
assert test_element.is_enabled() == True


def test_set_enabled(test_element):
test_element.set_enabled(False)
assert test_element.is_enabled() == False