labstep 3.35.0__tar.gz → 3.36.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (181) hide show
  1. {labstep-3.35.0 → labstep-3.36.0}/PKG-INFO +1 -1
  2. labstep-3.36.0/labstep/constants/version.py +1 -0
  3. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/experiment/model.py +41 -0
  4. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/experimentCondition/repository.py +8 -6
  5. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/experimentDataField/repository.py +79 -79
  6. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/experimentInventoryField/repository.py +51 -22
  7. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/experimentProtocol/model.py +110 -27
  8. labstep-3.36.0/labstep/entities/experimentSmartTable/model.py +29 -0
  9. labstep-3.36.0/labstep/entities/experimentSmartTable/repository.py +23 -0
  10. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/protocol/model.py +41 -0
  11. labstep-3.36.0/labstep/entities/protocolSmartTable/model.py +31 -0
  12. labstep-3.36.0/labstep/entities/protocolSmartTable/repository.py +19 -0
  13. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/protocolVersion/model.py +52 -11
  14. {labstep-3.35.0 → labstep-3.36.0}/labstep.egg-info/PKG-INFO +1 -1
  15. {labstep-3.35.0 → labstep-3.36.0}/labstep.egg-info/SOURCES.txt +4 -0
  16. labstep-3.35.0/labstep/constants/version.py +0 -1
  17. {labstep-3.35.0 → labstep-3.36.0}/README.rst +0 -0
  18. {labstep-3.35.0 → labstep-3.36.0}/labstep/__init__.py +0 -0
  19. {labstep-3.35.0 → labstep-3.36.0}/labstep/config/export.py +0 -0
  20. {labstep-3.35.0 → labstep-3.36.0}/labstep/constants/__init__.py +0 -0
  21. {labstep-3.35.0 → labstep-3.36.0}/labstep/constants/unspecified.py +0 -0
  22. {labstep-3.35.0 → labstep-3.36.0}/labstep/converter/__init__.py +0 -0
  23. {labstep-3.35.0 → labstep-3.36.0}/labstep/converter/htmlToProseMirror.py +0 -0
  24. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/apiKey/model.py +0 -0
  25. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/apiKey/repository.py +0 -0
  26. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/autoshare/model.py +0 -0
  27. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/autoshare/repository.py +0 -0
  28. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/chemical/model.py +0 -0
  29. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/chemical/repository.py +0 -0
  30. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/chemicalReaction/model.py +0 -0
  31. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/chemicalReaction/repository.py +0 -0
  32. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/collaborator/model.py +0 -0
  33. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/collaborator/repository.py +0 -0
  34. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/collaboratorRole/model.py +0 -0
  35. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/collaboratorRole/repository.py +0 -0
  36. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/collaboratorRoleRequirement/model.py +0 -0
  37. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/collaboratorRoleRequirement/repository.py +0 -0
  38. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/collection/model.py +0 -0
  39. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/collection/repository.py +0 -0
  40. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/comment/model.py +0 -0
  41. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/comment/repository.py +0 -0
  42. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/customIdentifierSet/model.py +0 -0
  43. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/customIdentifierSet/repository.py +0 -0
  44. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/device/model.py +0 -0
  45. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/device/repository.py +0 -0
  46. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/deviceBooking/model.py +0 -0
  47. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/deviceBooking/repository.py +0 -0
  48. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/deviceCategory/model.py +0 -0
  49. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/deviceCategory/repository.py +0 -0
  50. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/deviceData/model.py +0 -0
  51. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/deviceData/repository.py +0 -0
  52. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/deviceTemplate/model.py +0 -0
  53. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/deviceTemplate/repository.py +0 -0
  54. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/entityImport/model.py +0 -0
  55. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/entityImport/repository.py +0 -0
  56. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/entityState/model.py +0 -0
  57. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/entityState/repository.py +0 -0
  58. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/entityStateWorkflow/model.py +0 -0
  59. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/entityStateWorkflow/repository.py +0 -0
  60. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/experiment/repository.py +0 -0
  61. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/experimentCondition/model.py +0 -0
  62. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/experimentDataField/model.py +0 -0
  63. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/experimentInventoryField/model.py +0 -0
  64. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/experimentLink/model.py +0 -0
  65. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/experimentLink/repository.py +0 -0
  66. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/experimentProtocol/repository.py +0 -0
  67. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/experimentSignature/model.py +0 -0
  68. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/experimentSignature/repository.py +0 -0
  69. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/experimentSignatureRequest/model.py +0 -0
  70. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/experimentSignatureRequest/repository.py +0 -0
  71. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/experimentStep/model.py +0 -0
  72. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/experimentStep/repository.py +0 -0
  73. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/experimentTable/model.py +0 -0
  74. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/experimentTable/repository.py +0 -0
  75. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/experimentTemplate/model.py +0 -0
  76. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/experimentTemplate/repository.py +0 -0
  77. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/experimentTimer/model.py +0 -0
  78. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/experimentTimer/repository.py +0 -0
  79. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/export/model.py +0 -0
  80. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/export/repository.py +0 -0
  81. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/file/model.py +0 -0
  82. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/file/repository.py +0 -0
  83. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/invitation/model.py +0 -0
  84. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/invitation/repository.py +0 -0
  85. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/jupyterInstance/model.py +0 -0
  86. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/jupyterInstance/repository.py +0 -0
  87. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/jupyterNotebook/model.py +0 -0
  88. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/jupyterNotebook/repository.py +0 -0
  89. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/jupyterSchedule/model.py +0 -0
  90. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/jupyterSchedule/repository.py +0 -0
  91. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/metadata/model.py +0 -0
  92. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/metadata/repository.py +0 -0
  93. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/molecule/model.py +0 -0
  94. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/molecule/repository.py +0 -0
  95. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/notification/model.py +0 -0
  96. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/notification/repository.py +0 -0
  97. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/notificationAlert/model.py +0 -0
  98. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/notificationAlert/repository.py +0 -0
  99. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/orderRequest/model.py +0 -0
  100. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/orderRequest/repository.py +0 -0
  101. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/organization/model.py +0 -0
  102. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/organization/repository.py +0 -0
  103. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/organizationUser/model.py +0 -0
  104. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/organizationUser/repository.py +0 -0
  105. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/permission/model.py +0 -0
  106. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/permission/repository.py +0 -0
  107. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/protocol/repository.py +0 -0
  108. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/protocolCondition/model.py +0 -0
  109. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/protocolCondition/repository.py +0 -0
  110. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/protocolDataField/model.py +0 -0
  111. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/protocolDataField/repository.py +0 -0
  112. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/protocolDevice/model.py +0 -0
  113. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/protocolDevice/repository.py +0 -0
  114. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/protocolInventoryField/model.py +0 -0
  115. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/protocolInventoryField/repository.py +0 -0
  116. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/protocolStep/model.py +0 -0
  117. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/protocolStep/repository.py +0 -0
  118. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/protocolTable/model.py +0 -0
  119. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/protocolTable/repository.py +0 -0
  120. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/protocolTemplate/model.py +0 -0
  121. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/protocolTemplate/repository.py +0 -0
  122. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/protocolTimer/model.py +0 -0
  123. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/protocolTimer/repository.py +0 -0
  124. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/protocolVersion/repository.py +0 -0
  125. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/purchaseOrder/model.py +0 -0
  126. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/purchaseOrder/repository.py +0 -0
  127. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/resource/model.py +0 -0
  128. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/resource/repository.py +0 -0
  129. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/resourceCategory/model.py +0 -0
  130. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/resourceCategory/repository.py +0 -0
  131. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/resourceItem/model.py +0 -0
  132. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/resourceItem/repository.py +0 -0
  133. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/resourceLocation/model.py +0 -0
  134. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/resourceLocation/repository.py +0 -0
  135. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/resourceTemplate/model.py +0 -0
  136. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/resourceTemplate/repository.py +0 -0
  137. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/sequence/model.py +0 -0
  138. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/sequence/repository.py +0 -0
  139. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/sharelink/model.py +0 -0
  140. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/sharelink/repository.py +0 -0
  141. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/signatureRequirement/model.py +0 -0
  142. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/signatureRequirement/repository.py +0 -0
  143. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/tag/model.py +0 -0
  144. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/tag/repository.py +0 -0
  145. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/user/facade.py +0 -0
  146. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/user/model.py +0 -0
  147. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/user/repository.py +0 -0
  148. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/workspace/model.py +0 -0
  149. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/workspace/repository.py +0 -0
  150. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/workspaceMember/model.py +0 -0
  151. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/workspaceMember/repository.py +0 -0
  152. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/workspaceRole/model.py +0 -0
  153. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/workspaceRole/repository.py +0 -0
  154. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/workspaceRolePermission/model.py +0 -0
  155. {labstep-3.35.0 → labstep-3.36.0}/labstep/entities/workspaceRolePermission/repository.py +0 -0
  156. {labstep-3.35.0 → labstep-3.36.0}/labstep/generic/entity/model.py +0 -0
  157. {labstep-3.35.0 → labstep-3.36.0}/labstep/generic/entity/repository.py +0 -0
  158. {labstep-3.35.0 → labstep-3.36.0}/labstep/generic/entityList/model.py +0 -0
  159. {labstep-3.35.0 → labstep-3.36.0}/labstep/generic/entityPrimary/model.py +0 -0
  160. {labstep-3.35.0 → labstep-3.36.0}/labstep/generic/entityWithAssign/model.py +0 -0
  161. {labstep-3.35.0 → labstep-3.36.0}/labstep/generic/entityWithComments/model.py +0 -0
  162. {labstep-3.35.0 → labstep-3.36.0}/labstep/generic/entityWithMetadata/model.py +0 -0
  163. {labstep-3.35.0 → labstep-3.36.0}/labstep/generic/entityWithMetadata/repository.py +0 -0
  164. {labstep-3.35.0 → labstep-3.36.0}/labstep/generic/entityWithSharing/model.py +0 -0
  165. {labstep-3.35.0 → labstep-3.36.0}/labstep/generic/entityWithTags/model.py +0 -0
  166. {labstep-3.35.0 → labstep-3.36.0}/labstep/generic/entityWithTags/repository.py +0 -0
  167. {labstep-3.35.0 → labstep-3.36.0}/labstep/service/__init__.py +0 -0
  168. {labstep-3.35.0 → labstep-3.36.0}/labstep/service/config.py +0 -0
  169. {labstep-3.35.0 → labstep-3.36.0}/labstep/service/helpers.py +0 -0
  170. {labstep-3.35.0 → labstep-3.36.0}/labstep/service/htmlExport.py +0 -0
  171. {labstep-3.35.0 → labstep-3.36.0}/labstep/service/htmlToPDF.py +0 -0
  172. {labstep-3.35.0 → labstep-3.36.0}/labstep/service/htmlToProseMirror.py +0 -0
  173. {labstep-3.35.0 → labstep-3.36.0}/labstep/service/jupyter.py +0 -0
  174. {labstep-3.35.0 → labstep-3.36.0}/labstep/service/ping.py +0 -0
  175. {labstep-3.35.0 → labstep-3.36.0}/labstep/service/request.py +0 -0
  176. {labstep-3.35.0 → labstep-3.36.0}/labstep.egg-info/dependency_links.txt +0 -0
  177. {labstep-3.35.0 → labstep-3.36.0}/labstep.egg-info/not-zip-safe +0 -0
  178. {labstep-3.35.0 → labstep-3.36.0}/labstep.egg-info/requires.txt +0 -0
  179. {labstep-3.35.0 → labstep-3.36.0}/labstep.egg-info/top_level.txt +0 -0
  180. {labstep-3.35.0 → labstep-3.36.0}/setup.cfg +0 -0
  181. {labstep-3.35.0 → labstep-3.36.0}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: labstep
3
- Version: 3.35.0
3
+ Version: 3.36.0
4
4
  Summary: Python SDK for working with the Labstep API
5
5
  Home-page: http://github.com/Labstep/labstepPy
6
6
  Author: Labstep
@@ -0,0 +1 @@
1
+ VERSION = "3.36.0"
@@ -717,6 +717,47 @@ class Experiment(EntityPrimary):
717
717
 
718
718
  return self.root_experiment.addJupyterNotebook(name, data)
719
719
 
720
+ def addSmartTable(self, name=UNSPECIFIED, extraParams={}):
721
+ """
722
+ Add a new smart table to an Experiment.
723
+
724
+ Parameters
725
+ ----------
726
+ name (str)
727
+ The name of the smart table.
728
+
729
+ Returns
730
+ -------
731
+ :class:`~labstep.entities.experimentSmartTable.model.ExperimentSmartTable`
732
+ The newly added smart table entity.
733
+
734
+ Example
735
+ -------
736
+ ::
737
+
738
+ experiment = user.getExperiment(17000)
739
+ experiment.addSmartTable(name='My Smart Table')
740
+ """
741
+ return self.root_experiment.addSmartTable(name=name, extraParams=extraParams)
742
+
743
+ def getSmartTables(self):
744
+ """
745
+ Returns a list of the smart tables in an Experiment.
746
+
747
+ Returns
748
+ -------
749
+ List[:class:`~labstep.entities.experimentSmartTable.model.ExperimentSmartTable`]
750
+ List of the smart tables in an Experiment.
751
+
752
+ Example
753
+ -------
754
+ ::
755
+
756
+ experiment = user.getExperiment(17000)
757
+ smart_tables = experiment.getSmartTables()
758
+ """
759
+ return self.root_experiment.getSmartTables()
760
+
720
761
  def addConditions(self, number_of_conditions):
721
762
  """
722
763
  Add conditions to the experiment
@@ -7,8 +7,7 @@ def addExperimentConditions(entity, number_of_conditions):
7
7
  from labstep.generic.entity.repository import newEntities
8
8
  from labstep.entities.experimentCondition.model import ExperimentCondition
9
9
 
10
- conditions = [{f'{entity.__entityName__}_guid': entity.guid}
11
- ] * number_of_conditions
10
+ conditions = [{f"{entity.__entityName__}_guid": entity.guid}] * number_of_conditions
12
11
 
13
12
  return newEntities(entity.__user__, ExperimentCondition, conditions)
14
13
 
@@ -18,9 +17,12 @@ def getExperimentConditions(entity):
18
17
  from labstep.entities.experimentCondition.model import ExperimentCondition
19
18
  from labstep.constants import UNSPECIFIED
20
19
 
21
-
22
20
  params = {
23
- f'{entity.__entityName__}_guid': entity.guid if hasattr(entity,'guid') else UNSPECIFIED,
21
+ f"{entity.__entityName__}_id": (
22
+ entity.guid if hasattr(entity, "guid") else UNSPECIFIED
23
+ ),
24
24
  }
25
-
26
- return getEntities(entity.__user__, ExperimentCondition, count=UNSPECIFIED,filterParams=params)
25
+
26
+ return getEntities(
27
+ entity.__user__, ExperimentCondition, count=UNSPECIFIED, filterParams=params
28
+ )
@@ -20,59 +20,59 @@ def getDataFields(entity, count=UNSPECIFIED, extraParams={}):
20
20
 
21
21
  params = {}
22
22
 
23
- if hasattr(entity, 'metadata_thread') is False:
23
+ if hasattr(entity, "metadata_thread") is False:
24
24
  entity.update()
25
25
 
26
26
  if isinstance(entity, ExperimentProtocol):
27
- params = {
28
- "metadata_thread_id": entity.metadata_thread["id"]}
27
+ params = {"metadata_thread_id": entity.metadata_thread["id"]}
29
28
 
30
29
  elif isinstance(entity, Resource):
31
- params = {
32
- "multiplexing_input_resource_id": entity.id,
33
- "has_value": True
34
- }
30
+ params = {"multiplexing_input_resource_id": entity.id, "has_value": True}
35
31
  dataWhenInput = entityRepository.getEntities(
36
- entity.__user__, ExperimentDataField, count=count, filterParams={
37
- **params, **extraParams})
32
+ entity.__user__,
33
+ ExperimentDataField,
34
+ count=count,
35
+ filterParams={**params, **extraParams},
36
+ )
38
37
 
39
- params = {
40
- "multiplexing_output_resource_id": entity.id,
41
- "has_value": True
42
- }
38
+ params = {"multiplexing_output_resource_id": entity.id, "has_value": True}
43
39
  dataWhenOutput = entityRepository.getEntities(
44
- entity.__user__, ExperimentDataField, count=count, filterParams={
45
- **params, **extraParams})
40
+ entity.__user__,
41
+ ExperimentDataField,
42
+ count=count,
43
+ filterParams={**params, **extraParams},
44
+ )
46
45
 
47
46
  return dataWhenInput + dataWhenOutput
48
47
 
49
48
  elif isinstance(entity, ResourceItem):
50
- params = {
51
- "multiplexing_input_resource_item_id": entity.id,
52
- "has_value": True
53
- }
49
+ params = {"multiplexing_input_resource_item_id": entity.id, "has_value": True}
54
50
  dataWhenInput = entityRepository.getEntities(
55
- entity.__user__, ExperimentDataField, count=count, filterParams={
56
- **params, **extraParams})
51
+ entity.__user__,
52
+ ExperimentDataField,
53
+ count=count,
54
+ filterParams={**params, **extraParams},
55
+ )
57
56
 
58
- params = {
59
- "multiplexing_output_resource_item_id": entity.id,
60
- "has_value": True
61
- }
57
+ params = {"multiplexing_output_resource_item_id": entity.id, "has_value": True}
62
58
  dataWhenOutput = entityRepository.getEntities(
63
- entity.__user__, ExperimentDataField, count=count, filterParams={
64
- **params, **extraParams})
59
+ entity.__user__,
60
+ ExperimentDataField,
61
+ count=count,
62
+ filterParams={**params, **extraParams},
63
+ )
65
64
 
66
65
  return dataWhenInput + dataWhenOutput
67
66
 
68
67
  return entityRepository.getEntities(
69
- entity.__user__, ExperimentDataField, count=count, filterParams={
70
- **params, **extraParams}
68
+ entity.__user__,
69
+ ExperimentDataField,
70
+ count=count,
71
+ filterParams={**params, **extraParams},
71
72
  )
72
73
 
73
74
 
74
75
  def addDataFieldTo(
75
-
76
76
  entity,
77
77
  fieldName,
78
78
  fieldType="default",
@@ -89,7 +89,7 @@ def addDataFieldTo(
89
89
  else:
90
90
  fileId = UNSPECIFIED
91
91
 
92
- if hasattr(entity, 'metadata_thread') is False:
92
+ if hasattr(entity, "metadata_thread") is False:
93
93
  entity.update()
94
94
 
95
95
  params = {
@@ -107,12 +107,18 @@ def addDataFieldTo(
107
107
  return entityRepository.newEntity(entity.__user__, ExperimentDataField, params)
108
108
 
109
109
 
110
- def editDataField(dataField, fieldName=UNSPECIFIED, value=UNSPECIFIED, is_variable=UNSPECIFIED, extraParams={}):
110
+ def editDataField(
111
+ dataField,
112
+ fieldName=UNSPECIFIED,
113
+ value=UNSPECIFIED,
114
+ is_variable=UNSPECIFIED,
115
+ extraParams={},
116
+ ):
111
117
  params = {
112
118
  "label": handleString(fieldName),
113
119
  "value": handleString(value),
114
120
  "is_variable": is_variable,
115
- **extraParams
121
+ **extraParams,
116
122
  }
117
123
  return entityRepository.editEntity(dataField, params)
118
124
 
@@ -122,43 +128,43 @@ def getDataFieldValue(dataField):
122
128
  if dataField.device_data is not None:
123
129
  dataField = DeviceData(dataField.device_data, dataField.__user__)
124
130
 
125
- if dataField.type == 'default':
131
+ if dataField.type == "default":
126
132
  return dataField.value
127
133
 
128
- if dataField.type == 'numeric':
134
+ if dataField.type == "numeric":
129
135
  return dataField.number
130
136
 
131
- if dataField.type == 'date':
137
+ if dataField.type == "date":
132
138
  if dataField.date is None:
133
139
  return None
134
140
  return formatDate(dataField.date, time=False)
135
141
 
136
- if dataField.type == 'datetime':
142
+ if dataField.type == "datetime":
137
143
  return formatDate(dataField.date)
138
144
 
139
- if dataField.type == 'options':
145
+ if dataField.type == "options":
140
146
  if dataField.options is None:
141
147
  return None
142
148
 
143
- keys = [k for k, v in dataField.options['values'].items() if v]
149
+ keys = [k for k, v in dataField.options["values"].items() if v]
144
150
 
145
151
  if keys == []:
146
152
  return None
147
153
 
148
- if dataField.options['is_allow_multiple']:
154
+ if dataField.options["is_allow_multiple"]:
149
155
  return keys
150
156
 
151
157
  return keys[0]
152
158
 
153
- if dataField.type == 'file':
159
+ if dataField.type == "file":
154
160
 
155
161
  if len(dataField.files) == 1:
156
162
  return File(dataField.files[0], dataField.__user__)
157
163
  else:
158
164
  return EntityList(dataField.files, File, dataField.__user__)
159
165
 
160
- if dataField.type == 'sequence':
161
- return json.loads(dataField.sequence['data'])
166
+ if dataField.type == "sequence":
167
+ return json.loads(dataField.sequence["data"])
162
168
 
163
169
  return None
164
170
 
@@ -166,13 +172,14 @@ def getDataFieldValue(dataField):
166
172
  def setDataFieldValue(dataField, value, condition_id=None):
167
173
  if condition_id is not None:
168
174
  if dataField.is_variable is False:
169
- raise Exception(
170
- 'Cannot set value for conditions on a constant data field')
175
+ raise Exception("Cannot set value for conditions on a constant data field")
171
176
 
172
177
  conditionDataField = entityRepository.getEntities(
173
- dataField.__user__, ExperimentDataField, count=UNSPECIFIED, filterParams={
174
- 'protocol_condition_id': condition_id
175
- }).get(dataField.guid, searchKey='variable_template_guid')
178
+ dataField.__user__,
179
+ ExperimentDataField,
180
+ count=UNSPECIFIED,
181
+ filterParams={"protocol_condition_id": condition_id},
182
+ ).get(dataField.guid, searchKey="variable_template_guid")
176
183
 
177
184
  if conditionDataField is None:
178
185
  params = {
@@ -181,27 +188,26 @@ def setDataFieldValue(dataField, value, condition_id=None):
181
188
  "variable_template_id": dataField.id,
182
189
  "protocol_condition_id": condition_id,
183
190
  }
184
- newField = entityRepository.newEntity(dataField.__user__, ExperimentDataField, params)
191
+ newField = entityRepository.newEntity(
192
+ dataField.__user__, ExperimentDataField, params
193
+ )
185
194
  setDataFieldValue(newField, value)
186
195
  else:
187
- return setDataFieldValue(conditionDataField,value)
188
-
196
+ return setDataFieldValue(conditionDataField, value)
189
197
 
190
- if condition_id is None and dataField.is_variable is True:
191
- raise Exception(
192
- 'Please specify a condition ID for variable data fields')
198
+ if condition_id is None and dataField.is_variable is True and dataField.variable_template_guid is None:
199
+ raise Exception("Please specify a condition ID for variable data fields")
193
200
 
201
+ if dataField.type == "default":
202
+ return dataField.edit(extraParams={"value": str(value)})
194
203
 
195
- if dataField.type == 'default':
196
- return dataField.edit(extraParams={'value': str(value)})
204
+ if dataField.type == "numeric":
205
+ return dataField.edit(extraParams={"number": float(value)})
197
206
 
198
- if dataField.type == 'numeric':
199
- return dataField.edit(extraParams={'number': float(value)})
207
+ if dataField.type == "date" or dataField.type == "datetime":
208
+ return dataField.edit(extraParams={"date": handleDate(value)})
200
209
 
201
- if dataField.type == 'date' or dataField.type == 'datetime':
202
- return dataField.edit(extraParams={'date': handleDate(value)})
203
-
204
- if dataField.type == 'options':
210
+ if dataField.type == "options":
205
211
 
206
212
  if isinstance(value, list) is False:
207
213
  value = [str(value)]
@@ -209,31 +215,25 @@ def setDataFieldValue(dataField, value, condition_id=None):
209
215
  options = dataField.options
210
216
 
211
217
  if options is None:
212
- options = {
213
- 'is_allow_multiple': False,
214
- 'is_allow_add': True,
215
- 'values': {}
216
- }
218
+ options = {"is_allow_multiple": False, "is_allow_add": True, "values": {}}
217
219
 
218
- if options['values'] is None:
219
- options['values'] = {}
220
+ if options["values"] is None:
221
+ options["values"] = {}
220
222
 
221
- options['values'] = {key: False for key in options['values'].keys()}
223
+ options["values"] = {key: False for key in options["values"].keys()}
222
224
 
223
- if options['is_allow_multiple'] is False and len(value) > 1:
224
- raise Exception(
225
- 'Specifying multiple values for this field is forbidden. ')
225
+ if options["is_allow_multiple"] is False and len(value) > 1:
226
+ raise Exception("Specifying multiple values for this field is forbidden. ")
226
227
 
227
228
  for activeKey in value:
228
- options['values'][activeKey] = True
229
+ options["values"][activeKey] = True
229
230
 
230
- return dataField.edit(extraParams={'options': options})
231
+ return dataField.edit(extraParams={"options": options})
231
232
 
232
- if dataField.type == 'file':
233
+ if dataField.type == "file":
233
234
  if isinstance(value, File) is False:
234
- raise Exception(
235
- 'Please specify a Labstep File object as the value')
235
+ raise Exception("Please specify a Labstep File object as the value")
236
236
 
237
- return dataField.edit(extraParams={'file_id': value.id})
237
+ return dataField.edit(extraParams={"file_id": value.id})
238
238
 
239
239
  return None
@@ -14,15 +14,23 @@ def getExperimentInventoryField(user, experiment_inventoryfield_id):
14
14
  )
15
15
 
16
16
 
17
- def getExperimentInventoryFields(user, experiment_id, count=UNSPECIFIED, extraParams={}):
18
- params = {
19
- 'experiment_id': experiment_id,
20
- **extraParams
21
- }
17
+ def getExperimentInventoryFields(
18
+ user, experiment_id, count=UNSPECIFIED, extraParams={}
19
+ ):
20
+ params = {"experiment_id": experiment_id, **extraParams}
22
21
  return entityRepository.getEntities(user, ExperimentInventoryField, count, params)
23
22
 
24
23
 
25
- def newExperimentInventoryField(user, experiment_id, name, resource_id=UNSPECIFIED, resource_item_id=UNSPECIFIED, amount=UNSPECIFIED, units=UNSPECIFIED, extraParams={}):
24
+ def newExperimentInventoryField(
25
+ user,
26
+ experiment_id,
27
+ name,
28
+ resource_id=UNSPECIFIED,
29
+ resource_item_id=UNSPECIFIED,
30
+ amount=UNSPECIFIED,
31
+ units=UNSPECIFIED,
32
+ extraParams={},
33
+ ):
26
34
  params = {
27
35
  "experiment_id": experiment_id,
28
36
  "name": name,
@@ -39,18 +47,27 @@ def newExperimentInventoryField(user, experiment_id, name, resource_id=UNSPECIFI
39
47
  return entityRepository.newEntity(user, ExperimentInventoryField, params)
40
48
 
41
49
 
42
- def editExperimentInventoryField(expermient_inventoryfield, name=UNSPECIFIED, amount=UNSPECIFIED, units=UNSPECIFIED, resource_id=UNSPECIFIED, resource_item_id=UNSPECIFIED, extraParams={}):
50
+ def editExperimentInventoryField(
51
+ expermient_inventoryfield,
52
+ name=UNSPECIFIED,
53
+ amount=UNSPECIFIED,
54
+ units=UNSPECIFIED,
55
+ resource_id=UNSPECIFIED,
56
+ resource_item_id=UNSPECIFIED,
57
+ extraParams={},
58
+ ):
43
59
  params = {
44
60
  "name": name,
45
- "value": amount,
61
+ "value": str(amount) if amount is not UNSPECIFIED else UNSPECIFIED,
46
62
  "units": units,
47
63
  "resource_id": resource_id,
48
64
  "resource_item_id": resource_item_id,
49
- **extraParams
65
+ **extraParams,
50
66
  }
51
67
 
52
68
  return entityRepository.editEntity(expermient_inventoryfield, params)
53
69
 
70
+
54
71
  def getValue(experiment_inventory_field, condition_id=UNSPECIFIED):
55
72
  """
56
73
  Get the value of an Experiment Inventory Field for a specific condition.
@@ -68,7 +85,12 @@ def getValue(experiment_inventory_field, condition_id=UNSPECIFIED):
68
85
  return experiment_inventory_field.getValue(condition_id)
69
86
 
70
87
 
71
- def setValue(experiment_inventory_field, amount, resource_item_id=UNSPECIFIED, condition_id=UNSPECIFIED):
88
+ def setValue(
89
+ experiment_inventory_field,
90
+ amount,
91
+ resource_item_id=UNSPECIFIED,
92
+ condition_id=UNSPECIFIED,
93
+ ):
72
94
  """
73
95
  Set the value of an Experiment Inventory Field for a specific condition.
74
96
 
@@ -88,26 +110,33 @@ def setValue(experiment_inventory_field, amount, resource_item_id=UNSPECIFIED, c
88
110
  """
89
111
  if condition_id is not UNSPECIFIED:
90
112
  if experiment_inventory_field.is_variable is False:
91
- raise Exception(
92
- 'Cannot set value for conditions on a constant field')
113
+ raise Exception("Cannot set value for conditions on a constant field")
93
114
 
94
115
  conditionInventoryField = entityRepository.getEntities(
95
- experiment_inventory_field.__user__, ExperimentInventoryField, count=UNSPECIFIED, filterParams={
96
- 'protocol_condition_id': condition_id
97
- }).get(experiment_inventory_field.guid, searchKey='variable_template_guid')
116
+ experiment_inventory_field.__user__,
117
+ ExperimentInventoryField,
118
+ count=UNSPECIFIED,
119
+ filterParams={"protocol_condition_id": condition_id},
120
+ ).get(experiment_inventory_field.guid, searchKey="variable_template_guid")
98
121
 
99
122
  if conditionInventoryField is None:
100
123
  params = {
101
- "is_input":experiment_inventory_field.is_input,
102
- "is_output":experiment_inventory_field.is_output,
103
- "experiment_id": experiment_inventory_field.experiment['id'],
124
+ "is_input": experiment_inventory_field.is_input,
125
+ "is_output": experiment_inventory_field.is_output,
126
+ "experiment_id": experiment_inventory_field.experiment["id"],
104
127
  "variable_template_id": experiment_inventory_field.id,
105
128
  "protocol_condition_id": condition_id,
106
129
  "resource_item_id": resource_item_id,
107
- "value": amount,
130
+ "value": str(amount) if amount is not UNSPECIFIED else UNSPECIFIED,
108
131
  }
109
- conditionInventoryField = entityRepository.newEntity(experiment_inventory_field.__user__, ExperimentInventoryField, params)
132
+ conditionInventoryField = entityRepository.newEntity(
133
+ experiment_inventory_field.__user__, ExperimentInventoryField, params
134
+ )
110
135
 
111
- return conditionInventoryField.edit(amount=amount, resource_item_id=resource_item_id)
136
+ return conditionInventoryField.edit(
137
+ amount=amount, resource_item_id=resource_item_id
138
+ )
112
139
 
113
- return experiment_inventory_field.edit(amount=amount, resource_item_id=resource_item_id)
140
+ return experiment_inventory_field.edit(
141
+ amount=amount, resource_item_id=resource_item_id
142
+ )