From de00af2c96b3cb3fa03f330814c947036135b30f Mon Sep 17 00:00:00 2001 From: tcezard Date: Tue, 12 Mar 2019 12:43:28 +0000 Subject: [PATCH 1/2] change rework-step value's type to match the API requirement --- pyclarity_lims/descriptors.py | 12 ++++++++---- tests/test_descriptors.py | 7 +++++-- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/pyclarity_lims/descriptors.py b/pyclarity_lims/descriptors.py index 91e2a4d5..c29c8a21 100644 --- a/pyclarity_lims/descriptors.py +++ b/pyclarity_lims/descriptors.py @@ -278,7 +278,7 @@ class XmlAction(XmlElementAttributeDict): action: The type of action to perform. (leave, repeat, remove, review, complete, store, nextstep, rework, completerepeat, unknown) """ def _parse_element(self, element, **kwargs): - from pyclarity_lims.entities import Artifact, ProtocolStep + from pyclarity_lims.entities import Artifact, ProtocolStep, Step for k, v in element.attrib.items(): if k == 'artifact-uri': @@ -287,12 +287,16 @@ def _parse_element(self, element, **kwargs): elif k in ('step-uri', 'rework-step-uri'): k = k[:-(len('-uri'))] v = ProtocolStep(self.instance.lims, uri=v) + elif k == 'rework-step-uri': + k = k[:-(len('-uri'))] + v = Step(self.instance.lims, uri=v) dict.__setitem__(self, k, v) def _setitem(self, key, value): - from pyclarity_lims.entities import Artifact, ProtocolStep - if (key in ['artifact'] and isinstance(value, Artifact)) or \ - (key in ['step', 'rework-step'] and isinstance(value, ProtocolStep)): + from pyclarity_lims.entities import Artifact, ProtocolStep, Step + if key == 'artifact' and isinstance(value, Artifact) or \ + key == 'step' and isinstance(value, ProtocolStep) or \ + key == 'rework-step' and isinstance(value, Step): key += '-uri' value = value.uri elif key in ['action']: diff --git a/tests/test_descriptors.py b/tests/test_descriptors.py index 2523475c..407b430e 100644 --- a/tests/test_descriptors.py +++ b/tests/test_descriptors.py @@ -11,7 +11,7 @@ StringDictionaryDescriptor, IntegerDescriptor, BooleanDescriptor, UdfDictionary, EntityDescriptor, \ InputOutputMapList, EntityListDescriptor, PlacementDictionary, EntityList, SubTagDictionary, ExternalidList,\ XmlElementAttributeDict, XmlAttributeList, XmlReagentLabelList, XmlPooledInputDict, XmlAction, QueuedArtifactList -from pyclarity_lims.entities import Artifact, ProtocolStep, Container, Process +from pyclarity_lims.entities import Artifact, ProtocolStep, Container, Process, Step from pyclarity_lims.lims import Lims from tests import elements_equal @@ -780,7 +780,7 @@ class TestXmlAction(TestCase): def setUp(self): et = ElementTree.fromstring(''' - + '''.format(url='http://testgenologics.com:4040')) et1 = ElementTree.fromstring(''' @@ -797,6 +797,7 @@ def test_parse(self): assert action['action'] == 'nextstep' assert action['step'] == ProtocolStep(self.lims, uri='http://testgenologics.com:4040/prt/1/stp/1') assert action['artifact'] == Artifact(self.lims, uri='http://testgenologics.com:4040/arts/a1') + assert action['rework-step'] == Step(self.lims, uri='http://testgenologics.com:4040/steps/1') def test_set(self): action = XmlAction(self.instance_empty, tag='next-action') @@ -804,6 +805,8 @@ def test_set(self): assert action.instance.root.find('next-action').attrib['step-uri'] == 'http://testgenologics.com:4040/prt/1/stp/1' action['action'] = 'nextstep' assert action.instance.root.find('next-action').attrib['action'] == 'nextstep' + action['rework-step'] = Step(self.lims, uri='http://testgenologics.com:4040/steps/1') + assert action.instance.root.find('next-action').attrib['rework-step-uri'] == 'http://testgenologics.com:4040/steps/1' with pytest.raises(KeyError): action['whatever'] = 'youwant' From 0bdeaacbc9ade637d3544521cb1c7dd4b9c9e1a5 Mon Sep 17 00:00:00 2001 From: tcezard Date: Wed, 13 Mar 2019 15:49:08 +0000 Subject: [PATCH 2/2] ensure the rework_step-uri is actually set to Step in rework --- pyclarity_lims/descriptors.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyclarity_lims/descriptors.py b/pyclarity_lims/descriptors.py index c29c8a21..6ac85650 100644 --- a/pyclarity_lims/descriptors.py +++ b/pyclarity_lims/descriptors.py @@ -284,7 +284,7 @@ def _parse_element(self, element, **kwargs): if k == 'artifact-uri': k = 'artifact' v = Artifact(self.instance.lims, uri=v) - elif k in ('step-uri', 'rework-step-uri'): + elif k == 'step-uri': k = k[:-(len('-uri'))] v = ProtocolStep(self.instance.lims, uri=v) elif k == 'rework-step-uri':