← Back to team overview

oship-dev team mailing list archive

[Branch ~oship-dev/oship/devel] Rev 514: Enforced invariants in the Version class and created represetation method for it

 

------------------------------------------------------------
revno: 514
fixes bug(s): https://launchpad.net/bugs/625975
committer: Wagner Francisco Mezaroba <wagner@wagner-laptop>
branch nick: oship
timestamp: Sun 2010-11-21 01:20:28 -0200
message:
  Enforced invariants in the Version class and created represetation method for it
modified:
  src/oship/openehr/rm/common/change_control/__init__.py
  src/oship/openehr/rm/common/change_control/tests/originalversion.py


--
lp:oship
https://code.launchpad.net/~oship-dev/oship/devel

Your team OSHIP Development Team is subscribed to branch lp:oship.
To unsubscribe from this branch go to https://code.launchpad.net/~oship-dev/oship/devel/+edit-subscription
=== modified file 'src/oship/openehr/rm/common/change_control/__init__.py'
--- src/oship/openehr/rm/common/change_control/__init__.py	2010-09-29 00:55:16 +0000
+++ src/oship/openehr/rm/common/change_control/__init__.py	2010-11-21 03:20:28 +0000
@@ -5,6 +5,7 @@
 
 from oship.openehr.rm.support.identification import HierObjectId
 from interfaces import *
+from oship.openehr.rm.support.terminology import TerminologyService
 
 class Contribution(grok.Container):
     u"""
@@ -36,11 +37,18 @@
 
     grok.implements(IVersion)
 
-    def __init__(self, uid, preVid, data, lcstate, caudit, contribution, sig):
+    def __init__(self, uid, preVid, data, lcstate, caudit, contribution, sig, terminologyService=None):
         if uid.versionTreeId().isFirst() == (preVid!=None):
             raise ValueError(u"If this is the first version it's not possible to have a preceding version uid and vice-versa.")
         if contribution == None or contribution.type != 'CONTRIBUTION':
             raise ValueError(u'Contribution must not be None and its type must be CONTRIBUTION')
+        if lcstate is None:
+            raise AttributeError(u'lcstate must not be None')
+
+        #TODO remove this consistence when we finish implementing the terminologyService
+        if terminologyService is not None:
+            if not terminologyService.terminology(TerminologyService.OPENEHR).hasCodeForGroupId('group_id_version_lifecycle_state', lcstate.definingCode):
+                raise AttributeError(u'lifecycle state must be in terminology service')
         self.uid=uid
         self.precedingVersionId=preVid
         self.data=data
@@ -58,6 +66,9 @@
     def canonicalForm(self):
         raise NotImplementedError
 
+    def __repr__(self):
+        return 'OriginalVersion(uid: %s, precedingVersionId: %s, data: %s, lifecycleState: %s, commitAudit: %s, contribution: %s, signature: %s)' % (self.uid, self.precedingVersionId, self.data, self.lifecycleState, self.commitAudit, self.contribution, self.signature)
+
 
 
 class OriginalVersion(Version):
@@ -67,8 +78,8 @@
 
     grok.implements(IOriginalVersion)
 
-    def __init__(self, uid, previd,otherInputVersionUids,data,attestations,lifecycleState,caudit,contribution,sig):
-        Version.__init__(self,uid,previd,data,lifecycleState,caudit,contribution,sig)
+    def __init__(self, uid, previd,otherInputVersionUids,data,attestations,lifecycleState,caudit,contribution,sig, terminologyService=None):
+        Version.__init__(self,uid,previd,data,lifecycleState,caudit,contribution,sig, terminologyService)
         if attestations is not None and (len(attestations) == 0):
             raise ValueError(u'Attestations must not be empty')
         if otherInputVersionUids is not None and (len(otherInputVersionUids) == 0):

=== modified file 'src/oship/openehr/rm/common/change_control/tests/originalversion.py'
--- src/oship/openehr/rm/common/change_control/tests/originalversion.py	2010-09-29 00:55:16 +0000
+++ src/oship/openehr/rm/common/change_control/tests/originalversion.py	2010-11-21 03:20:28 +0000
@@ -58,3 +58,32 @@
         emptyList = []
         self.assertRaises(ValueError, OriginalVersion, self.initialVersionId, None, emptyList, self.data, None, self.lifecycleState,self.caudit,self.contribution,None) 
 
+    def testShouldNotInitializeWithNoneLcstate(self):
+        self.assertRaises(AttributeError, OriginalVersion, self.initialVersionId, None, None, self.data, None, None, self.caudit, self.contribution, None)
+
+    def testShouldNotInitializeWithInvalidLcstate(self):
+        self.assertRaises(AttributeError, OriginalVersion, self.initialVersionId, None, None, self.data, None, lcstate(), self.caudit, self.contribution, None, DummyTerminologyService(False))
+
+    def testShouldInitializeWithValidLcstate(self):
+        version = OriginalVersion(self.initialVersionId, None, None, self.data, None, lcstate(), self.caudit, self.contribution, None, DummyTerminologyService(True))
+
+
+class DummyTerminologyService(object):
+    def __init__(self, returnValue):
+        self.returnValue = returnValue
+
+    def terminology(self, code):
+        return DummyTerminologyAccess(self.returnValue)
+
+class DummyTerminologyAccess(object):
+    def __init__(self, returnValue):
+        self.returnValue = returnValue
+
+    def hasCodeForGroupId(self, groupId,code):
+        return self.returnValue
+
+
+def lcstate():
+    terminologyId = TerminologyId(u'terminology(1)')
+    codeString = u'lifecycle state'
+    return DvCodedText(CodePhrase(terminologyId, codeString), u'value')