diff PerfsDb/DbPopulator.py @ 156:f1a75985caa8

first Db test framework - work in progress
author am@osimis.io
date Thu, 16 Aug 2018 17:13:32 +0200
parents
children df1f9946571c
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PerfsDb/DbPopulator.py	Thu Aug 16 17:13:32 2018 +0200
@@ -0,0 +1,76 @@
+import typing
+from orthancRestApi import OrthancClient
+
+from DbSize import DbSize
+
+class DbPopulator:
+
+    def __init__(self, orthanc: OrthancClient, dbSize: DbSize):
+        self._orthanc = orthanc
+        self._dbSize = dbSize
+        self._sourceInstanceId = None
+
+    def populate(self):
+        self._sourceInstanceId = self._orthanc.uploadDicomFile("../Database/DummyCT.dcm")
+
+        if self._dbSize == DbSize.Small:
+            patientCount = 3
+            smallStudiesPerPatient = 2
+            largeStudiesPerPatient = 1
+        else:
+            patientCount = 100
+            smallStudiesPerPatient = 4
+            largeStudiesPerPatient = 8
+
+        # data that are the same in small and large DBs (and that can be used in tests for comparing the same things !!)
+
+        # used in TestFindStudyByPatientId5Results
+        self.createStudy(studyIndex=99994, patientIndex=99998, seriesCount=1, instancesPerSeries=1)
+        self.createStudy(studyIndex=99995, patientIndex=99998, seriesCount=1, instancesPerSeries=1)
+        self.createStudy(studyIndex=99996, patientIndex=99998, seriesCount=1, instancesPerSeries=1)
+        self.createStudy(studyIndex=99997, patientIndex=99998, seriesCount=1, instancesPerSeries=1)
+        self.createStudy(studyIndex=99998, patientIndex=99998, seriesCount=1, instancesPerSeries=1)
+
+        # used in TestFindStudyByStudyDescription1Result
+        # used in TestFindStudyByPatientId1Result
+        self.createStudy(studyIndex=99999, patientIndex=99999, seriesCount=1, instancesPerSeries=1)
+
+        # data to make the DB "large" or "small"
+        for patientIndex in range(0, patientCount):
+            studyIndex=0
+            print("Generating data for patient " + str(patientIndex))
+            for i in range(0, smallStudiesPerPatient):
+                print("Generating small study " + str(i))
+                self.createStudy(studyIndex=studyIndex, patientIndex=patientIndex, seriesCount=2, instancesPerSeries=2)
+                studyIndex+=1
+            for i in range(0, largeStudiesPerPatient):
+                print("Generating large study " + str(i))
+                self.createStudy(studyIndex=studyIndex, patientIndex=patientIndex, seriesCount=4, instancesPerSeries=500)
+                studyIndex+=1
+
+
+
+        print("Generation completed")    
+
+    def createStudy(self, studyIndex: int, patientIndex: int, seriesCount: int, instancesPerSeries: int):
+        for seriesIndex in range(0, seriesCount):
+            for instanceIndex in range(0, instancesPerSeries):
+                dicomFile = self.createDicomFile(patientIndex=patientIndex, studyIndex=studyIndex, seriesIndex=seriesIndex, instanceIndex=instanceIndex)
+                self._orthanc.uploadDicom(dicomFile)
+
+    def createDicomFile(self, patientIndex: int, studyIndex: int, seriesIndex: int, instanceIndex: int) -> object:
+        return self._orthanc.instances.modify(
+            instanceId=self._sourceInstanceId,
+            replaceTags={
+                "PatientName": "Patient-" + str(patientIndex),
+                "PatientID": str(patientIndex),
+                "StudyDescription": str(patientIndex) + "-" + str(studyIndex),
+                "SeriesDescription": str(patientIndex) + "-" + str(studyIndex) + "-" + str(seriesIndex),
+                "SOPInstanceUID": str(patientIndex) + "." + str(studyIndex) + "." + str(seriesIndex) + "." + str(instanceIndex),
+                "StudyInstanceUID": str(patientIndex) + "." + str(studyIndex),
+                "SeriesInstanceUID": str(patientIndex) + "." + str(studyIndex) + "." + str(seriesIndex),
+                "SeriesNumber": str(seriesIndex),
+                "InstanceNumber": str(instanceIndex)
+            },
+            deleteOriginal=False
+        )
\ No newline at end of file