nxswriter 3.15.0__tar.gz → 3.17.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 (217) hide show
  1. {nxswriter-3.15.0 → nxswriter-3.17.0}/.ci/debian10_py2/Dockerfile +5 -2
  2. {nxswriter-3.15.0 → nxswriter-3.17.0}/.ci/debian10_py3/Dockerfile +5 -2
  3. {nxswriter-3.15.0 → nxswriter-3.17.0}/.ci/debian11_py3/Dockerfile +1 -1
  4. {nxswriter-3.15.0 → nxswriter-3.17.0}/.ci/install.sh +2 -2
  5. {nxswriter-3.15.0 → nxswriter-3.17.0}/.github/workflows/tests.yml +1 -29
  6. {nxswriter-3.15.0 → nxswriter-3.17.0}/ChangeLog +9 -0
  7. {nxswriter-3.15.0/nxswriter.egg-info → nxswriter-3.17.0}/PKG-INFO +3 -3
  8. {nxswriter-3.15.0 → nxswriter-3.17.0}/README.rst +2 -2
  9. {nxswriter-3.15.0 → nxswriter-3.17.0}/man/nxswriter.1 +164 -1
  10. {nxswriter-3.15.0 → nxswriter-3.17.0}/nxswriter/DecoderPool.py +20 -5
  11. {nxswriter-3.15.0 → nxswriter-3.17.0}/nxswriter/EVirtualField.py +31 -122
  12. {nxswriter-3.15.0 → nxswriter-3.17.0}/nxswriter/Release.py +1 -1
  13. {nxswriter-3.15.0 → nxswriter-3.17.0/nxswriter.egg-info}/PKG-INFO +3 -3
  14. {nxswriter-3.15.0 → nxswriter-3.17.0}/nxswriter.egg-info/requires.txt +1 -1
  15. {nxswriter-3.15.0 → nxswriter-3.17.0}/setup.py +1 -1
  16. {nxswriter-3.15.0 → nxswriter-3.17.0}/.ci/debian8_py2/Dockerfile +0 -0
  17. {nxswriter-3.15.0 → nxswriter-3.17.0}/.ci/debian8_py3/Dockerfile +0 -0
  18. {nxswriter-3.15.0 → nxswriter-3.17.0}/.ci/debian9_py2/Dockerfile +0 -0
  19. {nxswriter-3.15.0 → nxswriter-3.17.0}/.ci/debian9_py3/Dockerfile +0 -0
  20. {nxswriter-3.15.0 → nxswriter-3.17.0}/.ci/run.sh +0 -0
  21. {nxswriter-3.15.0 → nxswriter-3.17.0}/.ci/ubuntu16.04_py2/Dockerfile +0 -0
  22. {nxswriter-3.15.0 → nxswriter-3.17.0}/.ci/ubuntu16.04_py3/Dockerfile +0 -0
  23. {nxswriter-3.15.0 → nxswriter-3.17.0}/.ci/ubuntu18.04_py2/Dockerfile +0 -0
  24. {nxswriter-3.15.0 → nxswriter-3.17.0}/.ci/ubuntu18.04_py3/Dockerfile +0 -0
  25. {nxswriter-3.15.0 → nxswriter-3.17.0}/.ci/ubuntu20.04_py3/Dockerfile +0 -0
  26. {nxswriter-3.15.0 → nxswriter-3.17.0}/.flake8 +0 -0
  27. {nxswriter-3.15.0 → nxswriter-3.17.0}/.gitignore +0 -0
  28. {nxswriter-3.15.0 → nxswriter-3.17.0}/COPYRIGHT +0 -0
  29. {nxswriter-3.15.0 → nxswriter-3.17.0}/MANIFEST.in +0 -0
  30. {nxswriter-3.15.0 → nxswriter-3.17.0}/NXSDataWriter +0 -0
  31. {nxswriter-3.15.0 → nxswriter-3.17.0}/NXSDataWriter.xmi +0 -0
  32. {nxswriter-3.15.0 → nxswriter-3.17.0}/XMLExamples/MNI.xml +0 -0
  33. {nxswriter-3.15.0 → nxswriter-3.17.0}/XMLExamples/encodedImage.xml +0 -0
  34. {nxswriter-3.15.0 → nxswriter-3.17.0}/XMLExamples/encodedImage4.xml +0 -0
  35. {nxswriter-3.15.0 → nxswriter-3.17.0}/XMLExamples/scan.xml +0 -0
  36. {nxswriter-3.15.0 → nxswriter-3.17.0}/XMLExamples/scan2.xml +0 -0
  37. {nxswriter-3.15.0 → nxswriter-3.17.0}/XMLExamples/scan3.xml +0 -0
  38. {nxswriter-3.15.0 → nxswriter-3.17.0}/XMLExamples/test.xml +0 -0
  39. {nxswriter-3.15.0 → nxswriter-3.17.0}/XMLExamples/trigger.xml +0 -0
  40. {nxswriter-3.15.0 → nxswriter-3.17.0}/doc/Makefile +0 -0
  41. {nxswriter-3.15.0 → nxswriter-3.17.0}/doc/conf.py +0 -0
  42. {nxswriter-3.15.0 → nxswriter-3.17.0}/doc/index.rst +0 -0
  43. {nxswriter-3.15.0 → nxswriter-3.17.0}/doc/make.bat +0 -0
  44. {nxswriter-3.15.0 → nxswriter-3.17.0}/doc/nxswriter.rst +0 -0
  45. {nxswriter-3.15.0 → nxswriter-3.17.0}/doc_html/AttrCanFail.html +0 -0
  46. {nxswriter-3.15.0 → nxswriter-3.17.0}/doc_html/AttrCurrentFileId.html +0 -0
  47. {nxswriter-3.15.0 → nxswriter-3.17.0}/doc_html/AttrErrors.html +0 -0
  48. {nxswriter-3.15.0 → nxswriter-3.17.0}/doc_html/AttrFileName.html +0 -0
  49. {nxswriter-3.15.0 → nxswriter-3.17.0}/doc_html/AttrJSONRecord.html +0 -0
  50. {nxswriter-3.15.0 → nxswriter-3.17.0}/doc_html/AttrSkipAcquisition.html +0 -0
  51. {nxswriter-3.15.0 → nxswriter-3.17.0}/doc_html/AttrStepsPerFile.html +0 -0
  52. {nxswriter-3.15.0 → nxswriter-3.17.0}/doc_html/AttrXMLSettings.html +0 -0
  53. {nxswriter-3.15.0 → nxswriter-3.17.0}/doc_html/Attributes.html +0 -0
  54. {nxswriter-3.15.0 → nxswriter-3.17.0}/doc_html/ClassDescription.html +0 -0
  55. {nxswriter-3.15.0 → nxswriter-3.17.0}/doc_html/CmdCloseEntry.html +0 -0
  56. {nxswriter-3.15.0 → nxswriter-3.17.0}/doc_html/CmdCloseEntryAsynch.html +0 -0
  57. {nxswriter-3.15.0 → nxswriter-3.17.0}/doc_html/CmdCloseFile.html +0 -0
  58. {nxswriter-3.15.0 → nxswriter-3.17.0}/doc_html/CmdOpenEntry.html +0 -0
  59. {nxswriter-3.15.0 → nxswriter-3.17.0}/doc_html/CmdOpenEntryAsynch.html +0 -0
  60. {nxswriter-3.15.0 → nxswriter-3.17.0}/doc_html/CmdOpenFile.html +0 -0
  61. {nxswriter-3.15.0 → nxswriter-3.17.0}/doc_html/CmdRecord.html +0 -0
  62. {nxswriter-3.15.0 → nxswriter-3.17.0}/doc_html/CmdRecordAsynch.html +0 -0
  63. {nxswriter-3.15.0 → nxswriter-3.17.0}/doc_html/CmdState.html +0 -0
  64. {nxswriter-3.15.0 → nxswriter-3.17.0}/doc_html/CmdStatus.html +0 -0
  65. {nxswriter-3.15.0 → nxswriter-3.17.0}/doc_html/Commands.html +0 -0
  66. {nxswriter-3.15.0 → nxswriter-3.17.0}/doc_html/FullDocument.html +0 -0
  67. {nxswriter-3.15.0 → nxswriter-3.17.0}/doc_html/Properties.html +0 -0
  68. {nxswriter-3.15.0 → nxswriter-3.17.0}/doc_html/States.html +0 -0
  69. {nxswriter-3.15.0 → nxswriter-3.17.0}/doc_html/TitleBanner.html +0 -0
  70. {nxswriter-3.15.0 → nxswriter-3.17.0}/doc_html/index.html +0 -0
  71. {nxswriter-3.15.0 → nxswriter-3.17.0}/man/NXSDataWriter.1 +0 -0
  72. {nxswriter-3.15.0 → nxswriter-3.17.0}/man/nxsfromxml.1 +0 -0
  73. {nxswriter-3.15.0 → nxswriter-3.17.0}/nxsfromxml +0 -0
  74. {nxswriter-3.15.0 → nxswriter-3.17.0}/nxswriter/ClientSource.py +0 -0
  75. {nxswriter-3.15.0 → nxswriter-3.17.0}/nxswriter/DBaseSource.py +0 -0
  76. {nxswriter-3.15.0 → nxswriter-3.17.0}/nxswriter/DataHolder.py +0 -0
  77. {nxswriter-3.15.0 → nxswriter-3.17.0}/nxswriter/DataSourceFactory.py +0 -0
  78. {nxswriter-3.15.0 → nxswriter-3.17.0}/nxswriter/DataSourcePool.py +0 -0
  79. {nxswriter-3.15.0 → nxswriter-3.17.0}/nxswriter/DataSources.py +0 -0
  80. {nxswriter-3.15.0 → nxswriter-3.17.0}/nxswriter/EAttribute.py +0 -0
  81. {nxswriter-3.15.0 → nxswriter-3.17.0}/nxswriter/EField.py +0 -0
  82. {nxswriter-3.15.0 → nxswriter-3.17.0}/nxswriter/EGroup.py +0 -0
  83. {nxswriter-3.15.0 → nxswriter-3.17.0}/nxswriter/ELink.py +0 -0
  84. {nxswriter-3.15.0 → nxswriter-3.17.0}/nxswriter/EStrategy.py +0 -0
  85. {nxswriter-3.15.0 → nxswriter-3.17.0}/nxswriter/Element.py +0 -0
  86. {nxswriter-3.15.0 → nxswriter-3.17.0}/nxswriter/ElementThread.py +0 -0
  87. {nxswriter-3.15.0 → nxswriter-3.17.0}/nxswriter/Errors.py +0 -0
  88. {nxswriter-3.15.0 → nxswriter-3.17.0}/nxswriter/FElement.py +0 -0
  89. {nxswriter-3.15.0 → nxswriter-3.17.0}/nxswriter/FetchNameHandler.py +0 -0
  90. {nxswriter-3.15.0 → nxswriter-3.17.0}/nxswriter/H5Elements.py +0 -0
  91. {nxswriter-3.15.0 → nxswriter-3.17.0}/nxswriter/InnerXMLParser.py +0 -0
  92. {nxswriter-3.15.0 → nxswriter-3.17.0}/nxswriter/Metadata.py +0 -0
  93. {nxswriter-3.15.0 → nxswriter-3.17.0}/nxswriter/NXSFromXML.py +0 -0
  94. {nxswriter-3.15.0 → nxswriter-3.17.0}/nxswriter/NXSWriter.py +0 -0
  95. {nxswriter-3.15.0 → nxswriter-3.17.0}/nxswriter/NexusXMLHandler.py +0 -0
  96. {nxswriter-3.15.0 → nxswriter-3.17.0}/nxswriter/PyEvalSource.py +0 -0
  97. {nxswriter-3.15.0 → nxswriter-3.17.0}/nxswriter/StreamSet.py +0 -0
  98. {nxswriter-3.15.0 → nxswriter-3.17.0}/nxswriter/TangoDataWriter.py +0 -0
  99. {nxswriter-3.15.0 → nxswriter-3.17.0}/nxswriter/TangoSource.py +0 -0
  100. {nxswriter-3.15.0 → nxswriter-3.17.0}/nxswriter/ThreadPool.py +0 -0
  101. {nxswriter-3.15.0 → nxswriter-3.17.0}/nxswriter/Types.py +0 -0
  102. {nxswriter-3.15.0 → nxswriter-3.17.0}/nxswriter/__init__.py +0 -0
  103. {nxswriter-3.15.0 → nxswriter-3.17.0}/nxswriter.egg-info/SOURCES.txt +0 -0
  104. {nxswriter-3.15.0 → nxswriter-3.17.0}/nxswriter.egg-info/dependency_links.txt +0 -0
  105. {nxswriter-3.15.0 → nxswriter-3.17.0}/nxswriter.egg-info/not-zip-safe +0 -0
  106. {nxswriter-3.15.0 → nxswriter-3.17.0}/nxswriter.egg-info/top_level.txt +0 -0
  107. {nxswriter-3.15.0 → nxswriter-3.17.0}/setup.cfg +0 -0
  108. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/Checkers.py +0 -0
  109. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/ClientFieldTagAsynchH5Cpp_test.py +0 -0
  110. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/ClientFieldTagAsynchH5PY_test.py +0 -0
  111. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/ClientFieldTagServerH5Cpp_test.py +0 -0
  112. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/ClientFieldTagServerH5PY_test.py +0 -0
  113. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/ClientFieldTagWriterH5Cpp_test.py +0 -0
  114. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/ClientFieldTagWriterH5PY_test.py +0 -0
  115. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/ClientSource_test.py +0 -0
  116. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/Converters_test.py +0 -0
  117. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/DBFieldTagAsynchH5Cpp_test.py +0 -0
  118. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/DBFieldTagAsynchH5PY_test.py +0 -0
  119. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/DBFieldTagServerH5Cpp_test.py +0 -0
  120. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/DBFieldTagServerH5PY_test.py +0 -0
  121. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/DBFieldTagWriterH5Cpp_test.py +0 -0
  122. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/DBFieldTagWriterH5PY_test.py +0 -0
  123. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/DBaseSource_test.py +0 -0
  124. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/DataHolder_test.py +0 -0
  125. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/DataSourceDecoders_test.py +0 -0
  126. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/DataSourceFactory_test.py +0 -0
  127. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/DataSourcePool_test.py +0 -0
  128. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/DataSource_test.py +0 -0
  129. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/DecoderPool_test.py +0 -0
  130. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/EAttributeH5Cpp_test.py +0 -0
  131. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/EAttributeH5PY_test.py +0 -0
  132. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/EDimH5Cpp_test.py +0 -0
  133. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/EDimH5PY_test.py +0 -0
  134. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/EDimensionsH5Cpp_test.py +0 -0
  135. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/EDimensionsH5PY_test.py +0 -0
  136. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/EDocH5Cpp_test.py +0 -0
  137. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/EDocH5PY_test.py +0 -0
  138. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/EFieldH5Cpp_test.py +0 -0
  139. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/EFieldH5PY_test.py +0 -0
  140. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/EFieldReshapeH5Cpp_test.py +0 -0
  141. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/EFieldReshapeH5PY_test.py +0 -0
  142. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/EFileH5Cpp_test.py +0 -0
  143. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/EFileH5PY_test.py +0 -0
  144. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/EGroupH5Cpp_test.py +0 -0
  145. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/EGroupH5PY_test.py +0 -0
  146. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/ELinkH5Cpp_test.py +0 -0
  147. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/ELinkH5PY_test.py +0 -0
  148. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/EStrategyH5Cpp_test.py +0 -0
  149. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/EStrategyH5PY_test.py +0 -0
  150. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/ESymbolH5Cpp_test.py +0 -0
  151. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/ESymbolH5PY_test.py +0 -0
  152. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/ElementH5Cpp_test.py +0 -0
  153. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/ElementH5PY_test.py +0 -0
  154. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/ElementThread_test.py +0 -0
  155. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/Element_test.py +0 -0
  156. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/Errors_test.py +0 -0
  157. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/FElementH5Cpp_test.py +0 -0
  158. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/FElementH5PY_test.py +0 -0
  159. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/FElementWithAttrH5Cpp_test.py +0 -0
  160. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/FElementWithAttrH5PY_test.py +0 -0
  161. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/FetchNameHandler_test.py +0 -0
  162. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/FileWriterH5CppH5PY_test.py +0 -0
  163. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/FileWriterH5Cpp_test.py +0 -0
  164. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/FileWriterH5PY_test.py +0 -0
  165. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/H5CppWriter_test.py +0 -0
  166. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/H5PYWriter_test.py +0 -0
  167. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/InnerXMLParser_test.py +0 -0
  168. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/MYSQLSource_test.py +0 -0
  169. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/NTP_test.py +0 -0
  170. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/NXSDataWriterH5Cpp_test.py +0 -0
  171. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/NXSDataWriterH5PY_test.py +0 -0
  172. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/NXSFromXMLH5Cpp_test.py +0 -0
  173. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/NXSFromXMLH5PY_test.py +0 -0
  174. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/NexusXMLHandlerH5Cpp_test.py +0 -0
  175. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/NexusXMLHandlerH5PY_test.py +0 -0
  176. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/ORACLESource_test.py +0 -0
  177. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/PGSQLSource_test.py +0 -0
  178. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/ProxyHelper.py +0 -0
  179. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/ProxyTools_test.py +0 -0
  180. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/PyEvalSource_test.py +0 -0
  181. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/PyEvalTangoSourceH5Cpp_test.py +0 -0
  182. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/PyEvalTangoSourceH5PY_test.py +0 -0
  183. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/ServerSetUp.py +0 -0
  184. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/SimpleServer.py +0 -0
  185. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/SimpleServerSetUp.py +0 -0
  186. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/StreamSet_test.py +0 -0
  187. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/TNObject_test.py +0 -0
  188. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/TangoClassID.txt +0 -0
  189. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/TangoDataWriterH5CppH5PY_test.py +0 -0
  190. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/TangoDataWriterH5Cpp_test.py +0 -0
  191. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/TangoDataWriterH5PY_test.py +0 -0
  192. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/TangoFieldTagAsynchH5Cpp_test.py +0 -0
  193. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/TangoFieldTagAsynchH5PY_test.py +0 -0
  194. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/TangoFieldTagServerH5Cpp_test.py +0 -0
  195. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/TangoFieldTagServerH5PY_test.py +0 -0
  196. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/TangoFieldTagWriterH5Cpp_test.py +0 -0
  197. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/TangoFieldTagWriterH5PY_test.py +0 -0
  198. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/TangoSource_test.py +0 -0
  199. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/TgDevice_test.py +0 -0
  200. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/TgGroup_test.py +0 -0
  201. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/TgMember_test.py +0 -0
  202. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/ThreadPool_test.py +0 -0
  203. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/TstDataSource.py +0 -0
  204. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/UINT32decoder_test.py +0 -0
  205. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/UTF8decoder_test.py +0 -0
  206. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/VDEOdecoder_test.py +0 -0
  207. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/XMLFieldTagAsynchH5Cpp_test.py +0 -0
  208. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/XMLFieldTagAsynchH5PY_test.py +0 -0
  209. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/XMLFieldTagServerH5Cpp_test.py +0 -0
  210. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/XMLFieldTagServerH5PY_test.py +0 -0
  211. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/XMLFieldTagWriterH5Cpp_test.py +0 -0
  212. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/XMLFieldTagWriterH5PY_test.py +0 -0
  213. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/__init__.py +0 -0
  214. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/__main__.py +0 -0
  215. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/main.py +0 -0
  216. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/mydb.pgsql +0 -0
  217. {nxswriter-3.15.0 → nxswriter-3.17.0}/test/sttest.py +0 -0
@@ -1,11 +1,14 @@
1
1
  FROM debian:buster
2
2
 
3
- MAINTAINER DESY, Jan Kotanski <jankotan@gmail.com>
3
+ # MAINTAINER DESY, Jan Kotanski <jankotan@gmail.com>
4
4
 
5
5
  ENV DEBIAN_FRONTEND=noninteractive
6
6
 
7
+ # switch to the german archive mirror
8
+ RUN sed -i 's|http://deb.debian.org|http://archive.debian.org|g' /etc/apt/sources.list
9
+ RUN sed -i 's|http://security.debian.org|http://archive.debian.org|g' /etc/apt/sources.list
7
10
  # add the HDRI repository
8
- RUN /bin/bash -c 'echo "deb http://ftp.de.debian.org/debian buster main" > /etc/apt/sources.list.d/debian9de.list'
11
+ # RUN /bin/bash -c 'echo "deb http://ftp.de.debian.org/debian buster main" > /etc/apt/sources.list.d/debian9de.list'
9
12
  RUN apt-get -qq update && apt-get -qq install -y libterm-readline-gnu-perl software-properties-common coreutils gnupg2 procps apt-utils curl apt-transport-https gnupg2 ca-certificates wget
10
13
  RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections
11
14
  RUN curl -s http://repos.pni-hdri.de/debian_repo.pub.gpg | gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/debian-hdri-repo.gpg --import
@@ -1,11 +1,14 @@
1
1
  FROM debian:buster
2
2
 
3
- MAINTAINER DESY, Jan Kotanski <jankotan@gmail.com>
3
+ # MAINTAINER DESY, Jan Kotanski <jankotan@gmail.com>
4
4
 
5
5
  ENV DEBIAN_FRONTEND=noninteractive
6
6
 
7
+ # switch to the german archive mirror
8
+ RUN sed -i 's|http://deb.debian.org|http://archive.debian.org|g' /etc/apt/sources.list
9
+ RUN sed -i 's|http://security.debian.org|http://archive.debian.org|g' /etc/apt/sources.list
7
10
  # add the HDRI repository
8
- RUN /bin/bash -c 'echo "deb http://ftp.de.debian.org/debian buster main" > /etc/apt/sources.list.d/debian_de.list'
11
+ # RUN /bin/bash -c 'echo "deb http://ftp.de.debian.org/debian buster main" > /etc/apt/sources.list.d/debian_de.list'
9
12
  RUN apt-get -qq update && apt-get -qq install apt-utils dialog -y
10
13
  RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections
11
14
  RUN apt-get -qq update && apt-get -qq install -y libterm-readline-gnu-perl software-properties-common coreutils gnupg2 procps curl apt-transport-https gnupg2 ca-certificates wget
@@ -1,6 +1,6 @@
1
1
  FROM debian:bullseye
2
2
 
3
- MAINTAINER DESY, Jan Kotanski <jankotan@gmail.com>
3
+ # MAINTAINER DESY, Jan Kotanski <jankotan@gmail.com>
4
4
 
5
5
  ENV DEBIAN_FRONTEND=noninteractive
6
6
 
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env bash
2
2
 
3
3
  # restart mysqldb
4
- if [ "$1" = "debian11" ] || [ "$1" = "debian12" ] || [ "$1" = "ubuntu24.10" ] || [ "$1" = "ubuntu25.04" ] || [ "$1" = "ubuntu24.04" ]; then
4
+ if [ "$1" = "debian11" ] || [ "$1" = "debian12" ] || [ "$1" = "debian12tg10" ] || [ "$1" = "debian13" ] || [ "$1" = "ubuntu24.10" ] || [ "$1" = "ubuntu25.04" ] || [ "$1" = "ubuntu24.04" ]; then
5
5
  docker exec --user root ndts service mariadb restart
6
6
  else
7
7
  # workaround for a bug in debian9, i.e. starting mysql hangs
@@ -54,7 +54,7 @@ if [ "$2" = "2" ]; then
54
54
  docker exec --user root ndts /bin/sh -c 'apt-get -qq update; apt-get -qq install -y python-pytango nxsconfigserver-db python-nxstools'
55
55
  else
56
56
  echo "install python3-pytango"
57
- if [ "$1" = "ubuntu20.04" ] || [ "$1" = "ubuntu20.10" ] || [ "$1" = "ubuntu21.04" ] || [ "$1" = "ubuntu24.04" ] || [ "$1" = "ubuntu24.10" ] || [ "$1" = "ubuntu25.04" ] || [ "$1" = "ubuntu23.10" ] || [ "$1" = "ubuntu22.04" ] || [ "$1" = "debian11" ] || [ "$1" = "debian12" ]; then
57
+ if [ "$1" = "ubuntu20.04" ] || [ "$1" = "ubuntu20.10" ] || [ "$1" = "ubuntu21.04" ] || [ "$1" = "ubuntu24.04" ] || [ "$1" = "ubuntu24.10" ] || [ "$1" = "ubuntu25.04" ] || [ "$1" = "ubuntu23.10" ] || [ "$1" = "ubuntu22.04" ] || [ "$1" = "debian11" ] || [ "$1" = "debian12" ] || [ "$1" = "debian12tg10" ] || [ "$1" = "debian13" ] ; then
58
58
  docker exec --user root ndts /bin/sh -c 'apt-get -qq update; apt-get -qq install -y python3-tango nxsconfigserver-db python3-nxstools'
59
59
  else
60
60
  docker exec --user root ndts /bin/sh -c 'apt-get -qq update; apt-get -qq install -y python3-pytango nxsconfigserver-db python3-nxstools'
@@ -24,7 +24,7 @@ jobs:
24
24
  runs-on: ubuntu-latest
25
25
  strategy:
26
26
  matrix:
27
- os: [debian12, debian11, debian10, ubuntu25.04, ubuntu24.04, ubuntu22.04]
27
+ os: [debian13, debian12tg10, debian12, debian11, ubuntu25.04, ubuntu24.04, ubuntu22.04]
28
28
  steps:
29
29
  - uses: actions/checkout@v2
30
30
  - uses: actions/setup-python@v2
@@ -49,31 +49,3 @@ jobs:
49
49
  - name: Stop the docker
50
50
  run: docker container stop ndts
51
51
 
52
- python2_tests:
53
- runs-on: ubuntu-latest
54
- strategy:
55
- matrix:
56
- os: [debian10]
57
- steps:
58
- - uses: actions/checkout@v2
59
- - uses: actions/setup-python@v2
60
- - name: Update bash files
61
- run: |
62
- chmod +x .ci/run.sh
63
- chmod +x .ci/install.sh
64
- - name: Build the docker
65
- env:
66
- OSYS: ${{ matrix.os }}
67
- run: docker build -t ndts .ci/${OSYS}_py2
68
- - name: Run the docker
69
- run: docker run --name ndts -d -it -v `pwd`:/home/tango ndts
70
- - name: install tango and nxswriter
71
- env:
72
- OSYS: ${{ matrix.os }}
73
- run: .ci/install.sh ${OSYS} 2
74
- - name: run tests
75
- env:
76
- OSYS: ${{ matrix.os }}
77
- run: .ci/run.sh ${OSYS} 2
78
- - name: Stop the docker
79
- run: docker container stop ndts
@@ -1,3 +1,12 @@
1
+ 2025-10-13 Jan Kotanski <jankotan@gmail.com>
2
+ * move the virtual map list to h5rediswriter (#188)
3
+ * recommends nxstools 4.28.1
4
+ * tagged as 3.17.0
5
+
6
+ 2025-03-28 Jan Kotanski <jankotan@gmail.com>
7
+ * add support for DATA_ARRAY v4 (#182)
8
+ * tagged as 3.16.0
9
+
1
10
  2025-03-28 Jan Kotanski <jankotan@gmail.com>
2
11
  * make fixes for numpy2 (#179)
3
12
  * recommends nxstools 4.23.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nxswriter
3
- Version: 3.15.0
3
+ Version: 3.17.0
4
4
  Summary: Nexus Data writer implemented as a Tango Server
5
5
  Home-page: https://github.com/nexdatas/nxsdatawriter
6
6
  Author: Jan Kotanski, Eugen Wintersberger , Halil Pasic
@@ -91,7 +91,7 @@ Extract sources and run
91
91
  Debian packages
92
92
  """""""""""""""
93
93
 
94
- Debian `bookworm`, `bullseye`, `buster` or Ubuntu `plucky`, `noble`, `jammy` packages can be found in the HDRI repository.
94
+ Debian `trixie`, `bookworm`, `bullseye` or Ubuntu `plucky`, `noble`, `jammy` packages can be found in the HDRI repository.
95
95
 
96
96
  To install the debian packages, add the PGP repository key
97
97
 
@@ -106,7 +106,7 @@ and then download the corresponding source list
106
106
  .. code-block:: console
107
107
 
108
108
  $ cd /etc/apt/sources.list.d
109
- $ wget http://repos.pni-hdri.de/bookworm-pni-hdri.list
109
+ $ wget http://repos.pni-hdri.de/trixie-pni-hdri.list
110
110
 
111
111
  To install tango server
112
112
 
@@ -64,7 +64,7 @@ Extract sources and run
64
64
  Debian packages
65
65
  """""""""""""""
66
66
 
67
- Debian `bookworm`, `bullseye`, `buster` or Ubuntu `plucky`, `noble`, `jammy` packages can be found in the HDRI repository.
67
+ Debian `trixie`, `bookworm`, `bullseye` or Ubuntu `plucky`, `noble`, `jammy` packages can be found in the HDRI repository.
68
68
 
69
69
  To install the debian packages, add the PGP repository key
70
70
 
@@ -79,7 +79,7 @@ and then download the corresponding source list
79
79
  .. code-block:: console
80
80
 
81
81
  $ cd /etc/apt/sources.list.d
82
- $ wget http://repos.pni-hdri.de/bookworm-pni-hdri.list
82
+ $ wget http://repos.pni-hdri.de/trixie-pni-hdri.list
83
83
 
84
84
  To install tango server
85
85
 
@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
27
27
  .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
28
28
  .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
29
29
  ..
30
- .TH "NXSWRITER" "1" "Jan 13, 2025" "3.13" "NXSDataWriter"
30
+ .TH "NXSWRITER" "1" "Jun 04, 2025" "3.16" "NXSDataWriter"
31
31
  .SH NAME
32
32
  nxswriter \- nxswriter Documentation
33
33
  .sp
@@ -1250,6 +1250,31 @@ During its thread run it fetches the data from the source
1250
1250
  .UNINDENT
1251
1251
  .INDENT 7.0
1252
1252
  .TP
1253
+ .B setLength(index, value)
1254
+ sets lengths dict element
1255
+ .INDENT 7.0
1256
+ .TP
1257
+ .B Parameters
1258
+ .INDENT 7.0
1259
+ .IP \(bu 2
1260
+ \fBindex\fP (\fI\%int\fP) \-\- length index
1261
+ .IP \(bu 2
1262
+ \fBvalue\fP (\fI\%int\fP or \fI\%str\fP) \-\- length value
1263
+ .UNINDENT
1264
+ .UNINDENT
1265
+ .UNINDENT
1266
+ .INDENT 7.0
1267
+ .TP
1268
+ .B setRank(rank)
1269
+ sets dimension rank
1270
+ .INDENT 7.0
1271
+ .TP
1272
+ .B Parameters
1273
+ \fBindex\fP (\fBsrc\fP) \-\- dimension rank
1274
+ .UNINDENT
1275
+ .UNINDENT
1276
+ .INDENT 7.0
1277
+ .TP
1253
1278
  .B store(xml=None, globalJSON=None)
1254
1279
  stores the tag content
1255
1280
  .INDENT 7.0
@@ -1370,6 +1395,31 @@ During its thread run it fetches the data from the source
1370
1395
  .UNINDENT
1371
1396
  .INDENT 7.0
1372
1397
  .TP
1398
+ .B setLength(index, value)
1399
+ sets lengths dict element
1400
+ .INDENT 7.0
1401
+ .TP
1402
+ .B Parameters
1403
+ .INDENT 7.0
1404
+ .IP \(bu 2
1405
+ \fBindex\fP (\fI\%int\fP) \-\- length index
1406
+ .IP \(bu 2
1407
+ \fBvalue\fP (\fI\%int\fP or \fI\%str\fP) \-\- length value
1408
+ .UNINDENT
1409
+ .UNINDENT
1410
+ .UNINDENT
1411
+ .INDENT 7.0
1412
+ .TP
1413
+ .B setRank(rank)
1414
+ sets dimension rank
1415
+ .INDENT 7.0
1416
+ .TP
1417
+ .B Parameters
1418
+ \fBindex\fP (\fBsrc\fP) \-\- dimension rank
1419
+ .UNINDENT
1420
+ .UNINDENT
1421
+ .INDENT 7.0
1422
+ .TP
1373
1423
  .B shuffle
1374
1424
  (\fI\%bool\fP) compression shuffle
1375
1425
  .UNINDENT
@@ -2145,6 +2195,119 @@ constructor
2145
2195
  .UNINDENT
2146
2196
  .INDENT 0.0
2147
2197
  .TP
2198
+ .B class nxswriter.H5Elements.ESelection(attrs, last, streams=None)
2199
+ Bases: \fI\%Element\fP
2200
+ .sp
2201
+ selection tag element
2202
+ .sp
2203
+ constructor
2204
+ .INDENT 7.0
2205
+ .TP
2206
+ .B Parameters
2207
+ .INDENT 7.0
2208
+ .IP \(bu 2
2209
+ \fBattrs\fP (\fI\%dict\fP <\fI\%str\fP, \fI\%str\fP>) \-\- dictionary of the tag attributes
2210
+ .IP \(bu 2
2211
+ \fBlast\fP (\fI\%nxswriter.Element.Element\fP) \-\- the last element from the stack
2212
+ .IP \(bu 2
2213
+ \fBstreams\fP (\fBStreamSet\fP or \fI\%tango.LatestDeviceImpl\fP) \-\- tango\-like steamset class
2214
+ .UNINDENT
2215
+ .UNINDENT
2216
+ .UNINDENT
2217
+ .INDENT 0.0
2218
+ .TP
2219
+ .B class nxswriter.H5Elements.ESlab(attrs, last, streams=None)
2220
+ Bases: \fI\%Element\fP
2221
+ .sp
2222
+ slab tag element
2223
+ .sp
2224
+ constructor
2225
+ .INDENT 7.0
2226
+ .TP
2227
+ .B Parameters
2228
+ .INDENT 7.0
2229
+ .IP \(bu 2
2230
+ \fBattrs\fP (\fI\%dict\fP <\fI\%str\fP, \fI\%str\fP>) \-\- dictionary of the tag attributes
2231
+ .IP \(bu 2
2232
+ \fBlast\fP (\fI\%nxswriter.Element.Element\fP) \-\- the last element from the stack
2233
+ .IP \(bu 2
2234
+ \fBstreams\fP (\fBStreamSet\fP or \fI\%tango.LatestDeviceImpl\fP) \-\- tango\-like steamset class
2235
+ .UNINDENT
2236
+ .UNINDENT
2237
+ .INDENT 7.0
2238
+ .TP
2239
+ .B content
2240
+ (\fI\%list\fP <\fI\%str\fP>) tag content
2241
+ .UNINDENT
2242
+ .INDENT 7.0
2243
+ .TP
2244
+ .B source
2245
+ (\fI\%nxswriter.DataSources.DataSource\fP) data source
2246
+ .UNINDENT
2247
+ .INDENT 7.0
2248
+ .TP
2249
+ .B store(xml=None, globalJSON=None)
2250
+ stores the tag content
2251
+ .INDENT 7.0
2252
+ .TP
2253
+ .B Parameters
2254
+ .INDENT 7.0
2255
+ .IP \(bu 2
2256
+ \fBxml\fP \-\- xml setting
2257
+ .IP \(bu 2
2258
+ \fBglobalJSON\fP (: \fI\%dict\fP <\fI\%str\fP, \fI\%dict\fP <\fI\%str\fP, any>>) \-\- global JSON string
2259
+ .UNINDENT
2260
+ .UNINDENT
2261
+ .UNINDENT
2262
+ .UNINDENT
2263
+ .INDENT 0.0
2264
+ .TP
2265
+ .B class nxswriter.H5Elements.ESlice(attrs, last, streams=None)
2266
+ Bases: \fI\%Element\fP
2267
+ .sp
2268
+ slice tag element
2269
+ .sp
2270
+ constructor
2271
+ .INDENT 7.0
2272
+ .TP
2273
+ .B Parameters
2274
+ .INDENT 7.0
2275
+ .IP \(bu 2
2276
+ \fBattrs\fP (\fI\%dict\fP <\fI\%str\fP, \fI\%str\fP>) \-\- dictionary of the tag attributes
2277
+ .IP \(bu 2
2278
+ \fBlast\fP (\fI\%nxswriter.Element.Element\fP) \-\- the last element from the stack
2279
+ .IP \(bu 2
2280
+ \fBstreams\fP (\fBStreamSet\fP or \fI\%tango.LatestDeviceImpl\fP) \-\- tango\-like steamset class
2281
+ .UNINDENT
2282
+ .UNINDENT
2283
+ .INDENT 7.0
2284
+ .TP
2285
+ .B content
2286
+ (\fI\%list\fP <\fI\%str\fP>) tag content
2287
+ .UNINDENT
2288
+ .INDENT 7.0
2289
+ .TP
2290
+ .B source
2291
+ (\fI\%nxswriter.DataSources.DataSource\fP) data source
2292
+ .UNINDENT
2293
+ .INDENT 7.0
2294
+ .TP
2295
+ .B store(xml=None, globalJSON=None)
2296
+ stores the tag content
2297
+ .INDENT 7.0
2298
+ .TP
2299
+ .B Parameters
2300
+ .INDENT 7.0
2301
+ .IP \(bu 2
2302
+ \fBxml\fP \-\- xml setting
2303
+ .IP \(bu 2
2304
+ \fBglobalJSON\fP (: \fI\%dict\fP <\fI\%str\fP, \fI\%dict\fP <\fI\%str\fP, any>>) \-\- global JSON string
2305
+ .UNINDENT
2306
+ .UNINDENT
2307
+ .UNINDENT
2308
+ .UNINDENT
2309
+ .INDENT 0.0
2310
+ .TP
2148
2311
  .B class nxswriter.H5Elements.ESymbol(attrs, last, streams=None)
2149
2312
  Bases: \fI\%Element\fP
2150
2313
  .sp
@@ -175,8 +175,10 @@ class DATAARRAYdecoder(object):
175
175
  self.__value = None
176
176
  #: ([:obj:`str`, :obj:`str`]) header and image data
177
177
  self.__data = None
178
- #: (:obj:`str`) struct header format
179
- self.__headerFormat = '<IHHIIHHHHHHHHIIIIIIII'
178
+ #: (:obj:`str`) struct header format ver < 4
179
+ self.__headerFormat123 = '<IHHIIHHHHHHHHIIIIIIII'
180
+ #: (:obj:`str`) struct header format ver >=4
181
+ self.__headerFormat = '<IHHIIHHHHHHHHIIIIIIQQII'
180
182
  #: (:obj:`dict` <:obj:`str`, :obj:`any` > ) header data
181
183
  self.__header = {}
182
184
  #: (:obj:`dict` <:obj:`int`, :obj:`str` > ) format modes
@@ -200,7 +202,7 @@ class DATAARRAYdecoder(object):
200
202
  """
201
203
  self.__data = data
202
204
  self.format = data[0]
203
- self._loadHeader(data[1][:struct.calcsize(self.__headerFormat)])
205
+ self._loadHeader(data[1])
204
206
  self.__value = None
205
207
 
206
208
  def _loadHeader(self, headerData):
@@ -209,7 +211,15 @@ class DATAARRAYdecoder(object):
209
211
  :param headerData: buffer with header data
210
212
  :type headerData: :obj:`str`
211
213
  """
212
- hdr = struct.unpack(self.__headerFormat, headerData)
214
+ try:
215
+ hData = headerData[:struct.calcsize(self.__headerFormat)]
216
+ hdr = struct.unpack(self.__headerFormat, hData)
217
+ if hdr[1] < 4:
218
+ hData = headerData[:struct.calcsize(self.__headerFormat123)]
219
+ hdr = struct.unpack(self.__headerFormat123, hData)
220
+ except Exception:
221
+ hData = headerData[:struct.calcsize(self.__headerFormat123)]
222
+ hdr = struct.unpack(self.__headerFormat123, hData)
213
223
  self.__header = {}
214
224
  self.__header['magic'] = hdr[0]
215
225
  self.__header['headerVersion'] = hdr[1]
@@ -261,7 +271,12 @@ class DATAARRAYdecoder(object):
261
271
  if not self.__header or not self.__data:
262
272
  return
263
273
  if self.__value is None:
264
- image = self.__data[1][struct.calcsize(self.__headerFormat):]
274
+ if 'headerVersion' in self.__header and \
275
+ self.__header['headerVersion'] >= 4:
276
+ image = self.__data[1][struct.calcsize(self.__headerFormat):]
277
+ else:
278
+ image = self.__data[1][
279
+ struct.calcsize(self.__headerFormat123):]
265
280
  dformat = self.__formatID[self.__header['imageMode']]
266
281
  fSize = struct.calcsize(dformat)
267
282
  self.__value = numpy.array(
@@ -343,14 +343,15 @@ class EVirtualDataMap(Element):
343
343
  if dt and isinstance(dt, dict):
344
344
  dh = DataHolder(streams=self._streams, **dt)
345
345
  val = dh.cast("string")
346
- self.last.appendVmap(val, self.__vmap)
346
+ self.last.appendVmap(val, self.__vmap,
347
+ self.strategy)
347
348
 
348
349
  except Exception:
349
350
  info = sys.exc_info()
350
351
  import traceback
351
- message = self.setMessage(
352
- str(info[1].__str__()) + "\n " + (" ").join(
353
- traceback.format_tb(sys.exc_info()[2])))
352
+ message = ("Datasource not found: " +
353
+ str(info[1].__str__()) + "\n " + (" ").join(
354
+ traceback.format_tb(sys.exc_info()[2])))
354
355
  # message = self.setMessage( sys.exc_info()[1].__str__() )
355
356
  del info
356
357
  #: notification of error in the run method (defined in base class)
@@ -404,6 +405,9 @@ class EVirtualField(FElementWithAttr):
404
405
  self.__shape = []
405
406
  #: (:obj:`list` <:obj:`dict` >) vmap list
406
407
  self.__vmaps = []
408
+ #: (:class:`H5CppVirtualFieldLayout`) or
409
+ #: (:class:`H5PYVirtualFieldLayout`) virtual field layout
410
+ self.__vfl = None
407
411
 
408
412
  def setRank(self, rank):
409
413
  """ sets dimension rank
@@ -498,7 +502,10 @@ class EVirtualField(FElementWithAttr):
498
502
  lval = val.split("\n")
499
503
  for el in lval:
500
504
  if el.strip():
501
- self.__vmaps.append({"target": el.strip()})
505
+ if self.__vfl is not None:
506
+ self.__vfl.append_vmap({"target": el.strip()})
507
+ else:
508
+ self.__vmaps.append({"target": el.strip()})
502
509
  return self.strategy, self.trigger
503
510
 
504
511
  def store(self, xml=None, globalJSON=None):
@@ -517,39 +524,14 @@ class EVirtualField(FElementWithAttr):
517
524
  self.__dtype, self.__name = self.__typeAndName()
518
525
  # shape
519
526
  self.__shape = self.__getShape()
527
+ self.__vfl = FileWriter.virtual_field_layout(
528
+ self.__shape, self.__dtype)
529
+ for vmap in self.__vmaps:
530
+ self.__vfl.append_vmap(vmap)
531
+ self.__vmaps = []
520
532
  return self.__setStrategy(self.__name)
521
533
 
522
- def __cureKeys(self, key):
523
- tkey = []
524
- if isinstance(key, list):
525
- try:
526
- sk = list(set([len(ky) for ky in key]))
527
- except Exception:
528
- sk = []
529
- if len(sk) == 1 and sk[0] == 4:
530
- offset = []
531
- block = []
532
- count = []
533
- stride = []
534
- for ky in key:
535
- off, bl, cnt, std = ky
536
- offset.append(off)
537
- block.append(bl)
538
- count.append(cnt)
539
- stride.append(std)
540
- return FileWriter.FTHyperslab(offset, block, count, stride)
541
- for ky in key:
542
- if isinstance(ky, list) and len(ky) > 0 and len(ky) < 4:
543
- tkey.append(slice(*ky))
544
- else:
545
- if ky is None:
546
- ky = slice(None)
547
- tkey.append(ky)
548
-
549
- return tuple(tkey)
550
- return key
551
-
552
- def appendVmap(self, values, base=None):
534
+ def appendVmap(self, values, base=None, strategy=None):
553
535
  """ append virtual map items
554
536
 
555
537
  :param values: a list of map items to append
@@ -588,94 +570,20 @@ class EVirtualField(FElementWithAttr):
588
570
  fval.update(vl)
589
571
  else:
590
572
  fval.update({"target": vl.strip()})
591
- self.__vmaps.append(fval)
592
- return len(self.__vmaps)
593
-
594
- def __findShape(self, key, eshape=None, unlimited=True):
595
- if isinstance(key, FileWriter.FTHyperslab):
596
- if not unlimited:
597
- count = [(ct if ct != FileWriter.writer.unlimited() else 1)
598
- for ct in key.count]
599
-
600
- block = [(ct if ct != FileWriter.writer.unlimited() else 1)
601
- for ct in key.block]
573
+ if self.__vfl is not None:
574
+ self.__vfl.append_vmap(fval, strategy)
602
575
  else:
603
- count = key.count
604
- block = key.block
605
- eshape = [bl * count[hi] for hi, bl in enumerate(block)]
606
- if isinstance(key, tuple):
607
- eshape = []
608
- for ky in key:
609
- if not unlimited and ky.stop == FileWriter.writer.unlimited():
610
- eshape.append(1)
611
- elif isinstance(ky, slice) and ky.stop > 0:
612
- start = ky.start if ky.start is not None else 0
613
- step = ky.step if ky.step is not None else 1
614
- eshape.append((ky.stop - start) // step)
615
- else:
616
- eshape.append(1)
617
- return eshape
576
+ self.__vmaps.append(fval)
577
+ if self.__vfl is not None:
578
+ return len(self.__vfl)
579
+ return len(self.__vmaps)
618
580
 
619
581
  def __createVDS(self):
620
582
  """ create the virtual field object
621
583
  """
622
- vlf = FileWriter.virtual_field_layout(
623
- self.__shape, self.__dtype)
624
- counter = 0
625
- for vmap in self.__vmaps:
626
- fieldpath = ""
627
- filename = ""
628
- edtype = vmap["dtype"] \
629
- if "dtype" in vmap else self.__dtype
630
- key = vmap["key"] if "key" in vmap else counter
631
- key = self.__cureKeys(key)
632
- if "shape" in vmap:
633
- eshape = vmap["shape"]
634
- elif isinstance(key, int):
635
- eshape = list(self.__shape)
636
- eshape[0] = 1
637
- else:
638
- eshape = [0] * len(self.__shape)
639
- fieldpath = vmap["fieldpath"] \
640
- if "fieldpath" in vmap else "/data"
641
- filename = vmap["filename"] if "filename" in vmap else None
642
- if "target" in vmap:
643
- target = vmap["target"]
644
- if target.startswith("h5file:/"):
645
- target = target[8:]
646
- if "::" in target:
647
- filename, fieldpath = target.split("::")
648
- elif ":/" in target:
649
- filename, fieldpath = target.split(":/")
650
- else:
651
- fieldpath = target
652
- obj = self._lastObject()
653
- while filename is None:
654
- par = obj.parent
655
- if par is None:
656
- break
657
- if hasattr(par, "root") and hasattr(par, "name"):
658
- filename = par.name
659
- break
660
- else:
661
- obj = par
662
- sourceshape = vmap["sourceshape"] \
663
- if "sourceshape" in vmap else None
664
- sourcekey = vmap["sourcekey"] \
665
- if "sourcekey" in vmap else None
666
- sourcekey = self.__cureKeys(sourcekey)
667
- if not any(eshape):
668
- eshape = self.__findShape(key, eshape, unlimited=False)
669
- ef = FileWriter.target_field_view(
670
- filename, fieldpath, eshape, edtype)
671
- if eshape:
672
- counter += eshape[0]
673
- else:
674
- counter += 1
675
- # print("KEY", key, sourcekey, sourceshape, eshape)
676
- vlf.add(key, ef, sourcekey, sourceshape)
584
+ self.__vfl.process_target_field_views(self._lastObject())
677
585
  self.h5Object = self._lastObject().create_virtual_field(
678
- self.__name, vlf)
586
+ self.__name, self.__vfl)
679
587
 
680
588
  def run(self):
681
589
  """ runner
@@ -693,15 +601,16 @@ class EVirtualField(FElementWithAttr):
693
601
  # print("SHaPE", self.__shape)
694
602
  # print("TYPE", self.__dtype)
695
603
  # print("NAME", self.__name)
696
- if self.__vmaps and self.__shape and self.__dtype and self.__name:
604
+ if self.__vfl is not None and len(self.__vfl) and self.__shape \
605
+ and self.__dtype and self.__name:
697
606
  self.__createVDS()
698
607
  self.__setAttributes()
699
608
  except Exception:
700
609
  info = sys.exc_info()
701
610
  import traceback
702
- message = self.setMessage(
703
- str(info[1].__str__()) + "\n " + (" ").join(
704
- traceback.format_tb(sys.exc_info()[2])))
611
+ message = ("Datasource not found: " +
612
+ str(info[1].__str__()) + "\n " + (" ").join(
613
+ traceback.format_tb(sys.exc_info()[2])))
705
614
  # message = self.setMessage( sys.exc_info()[1].__str__() )
706
615
  del info
707
616
  #: notification of error in the run method (defined in base class)
@@ -21,4 +21,4 @@
21
21
 
22
22
 
23
23
  #: package version
24
- __version__ = "3.15.0"
24
+ __version__ = "3.17.0"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nxswriter
3
- Version: 3.15.0
3
+ Version: 3.17.0
4
4
  Summary: Nexus Data writer implemented as a Tango Server
5
5
  Home-page: https://github.com/nexdatas/nxsdatawriter
6
6
  Author: Jan Kotanski, Eugen Wintersberger , Halil Pasic
@@ -91,7 +91,7 @@ Extract sources and run
91
91
  Debian packages
92
92
  """""""""""""""
93
93
 
94
- Debian `bookworm`, `bullseye`, `buster` or Ubuntu `plucky`, `noble`, `jammy` packages can be found in the HDRI repository.
94
+ Debian `trixie`, `bookworm`, `bullseye` or Ubuntu `plucky`, `noble`, `jammy` packages can be found in the HDRI repository.
95
95
 
96
96
  To install the debian packages, add the PGP repository key
97
97
 
@@ -106,7 +106,7 @@ and then download the corresponding source list
106
106
  .. code-block:: console
107
107
 
108
108
  $ cd /etc/apt/sources.list.d
109
- $ wget http://repos.pni-hdri.de/bookworm-pni-hdri.list
109
+ $ wget http://repos.pni-hdri.de/trixie-pni-hdri.list
110
110
 
111
111
  To install tango server
112
112
 
@@ -1,4 +1,4 @@
1
1
  lxml
2
2
  numpy>1.6.0
3
- nxstools>=3.50.0
3
+ nxstools>=4.28.1
4
4
  pytz
@@ -78,7 +78,7 @@ install_requires = [
78
78
  'lxml',
79
79
  'numpy>1.6.0',
80
80
  # 'fabio',
81
- 'nxstools>=3.50.0',
81
+ 'nxstools>=4.28.1',
82
82
  # 'h5py',
83
83
  # 'pymysqldb',
84
84
  # 'psycopg2-binary'