nxsconfigserver 2.20.0__tar.gz → 2.21.1__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 (109) hide show
  1. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/ChangeLog +8 -0
  2. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/NXSConfigServer.xmi +4 -4
  3. {nxsconfigserver-2.20.0/nxsconfigserver.egg-info → nxsconfigserver-2.21.1}/PKG-INFO +1 -1
  4. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/Attributes.html +2 -2
  5. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/Commands.html +2 -2
  6. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/FullDocument.html +13 -13
  7. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/nxsconfigserver/Merger.py +35 -16
  8. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/nxsconfigserver/NXSConfigServer.py +41 -8
  9. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/nxsconfigserver/Release.py +1 -1
  10. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/nxsconfigserver/XMLConfigurator.py +42 -16
  11. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1/nxsconfigserver.egg-info}/PKG-INFO +1 -1
  12. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/test/NXSConfigServer_test.py +2 -2
  13. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/test/XMLConfigurator_test.py +10 -10
  14. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/.ci/debian10_py2/Dockerfile +0 -0
  15. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/.ci/debian10_py3/Dockerfile +0 -0
  16. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/.ci/debian11_py3/Dockerfile +0 -0
  17. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/.ci/debian8_py2/Dockerfile +0 -0
  18. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/.ci/debian8_py3/Dockerfile +0 -0
  19. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/.ci/debian9_py2/Dockerfile +0 -0
  20. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/.ci/debian9_py3/Dockerfile +0 -0
  21. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/.ci/install.sh +0 -0
  22. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/.ci/run.sh +0 -0
  23. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/.ci/ubuntu16.04_py2/Dockerfile +0 -0
  24. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/.ci/ubuntu16.04_py3/Dockerfile +0 -0
  25. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/.ci/ubuntu18.04_py2/Dockerfile +0 -0
  26. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/.ci/ubuntu18.04_py3/Dockerfile +0 -0
  27. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/.ci/ubuntu20.04_py3/Dockerfile +0 -0
  28. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/.flake8 +0 -0
  29. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/.github/workflows/tests.yml +0 -0
  30. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/.gitignore +0 -0
  31. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/.oldtravis.yml +0 -0
  32. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/COPYRIGHT +0 -0
  33. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/MANIFEST.in +0 -0
  34. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/NXSConfigServer +0 -0
  35. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/README.rst +0 -0
  36. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/conf/my.cnf +0 -0
  37. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/conf/mysql_create.sql +0 -0
  38. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc/Makefile +0 -0
  39. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc/conf.py +0 -0
  40. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc/index.rst +0 -0
  41. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc/make.bat +0 -0
  42. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc/nxsconfigserver.rst +0 -0
  43. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/AttrCanFailDataSources.html +0 -0
  44. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/AttrJSONSettings.html +0 -0
  45. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/AttrLinkDataSources.html +0 -0
  46. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/AttrSTEPDataSources.html +0 -0
  47. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/AttrSelection.html +0 -0
  48. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/AttrVariables.html +0 -0
  49. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/AttrVersion.html +0 -0
  50. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/AttrXMLString.html +0 -0
  51. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/ClassDescription.html +0 -0
  52. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/CmdAvailableComponents.html +0 -0
  53. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/CmdAvailableDataSources.html +0 -0
  54. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/CmdAvailableSelections.html +0 -0
  55. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/CmdClose.html +0 -0
  56. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/CmdComponentDataSources.html +0 -0
  57. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/CmdComponentVariables.html +0 -0
  58. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/CmdComponents.html +0 -0
  59. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/CmdComponentsDataSources.html +0 -0
  60. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/CmdComponentsVariables.html +0 -0
  61. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/CmdCreateConfiguration.html +0 -0
  62. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/CmdDataSources.html +0 -0
  63. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/CmdDeleteComponent.html +0 -0
  64. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/CmdDeleteDataSource.html +0 -0
  65. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/CmdDeleteSelection.html +0 -0
  66. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/CmdDependentComponents.html +0 -0
  67. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/CmdInstantiatedComponents.html +0 -0
  68. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/CmdMandatoryComponents.html +0 -0
  69. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/CmdMerge.html +0 -0
  70. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/CmdOpen.html +0 -0
  71. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/CmdSelections.html +0 -0
  72. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/CmdSetComponentDataSources.html +0 -0
  73. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/CmdSetMandatoryComponents.html +0 -0
  74. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/CmdState.html +0 -0
  75. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/CmdStatus.html +0 -0
  76. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/CmdStoreComponent.html +0 -0
  77. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/CmdStoreDataSource.html +0 -0
  78. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/CmdStoreSelection.html +0 -0
  79. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/CmdUnsetMandatoryComponents.html +0 -0
  80. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/Properties.html +0 -0
  81. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/States.html +0 -0
  82. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/TitleBanner.html +0 -0
  83. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/doc_html/index.html +0 -0
  84. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/man/NXSConfigServer.1 +0 -0
  85. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/nxsconfigserver/ComponentParser.py +0 -0
  86. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/nxsconfigserver/Errors.py +0 -0
  87. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/nxsconfigserver/MYSQLDataBase.py +0 -0
  88. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/nxsconfigserver/StreamSet.py +0 -0
  89. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/nxsconfigserver/__init__.py +0 -0
  90. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/nxsconfigserver.egg-info/SOURCES.txt +0 -0
  91. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/nxsconfigserver.egg-info/dependency_links.txt +0 -0
  92. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/nxsconfigserver.egg-info/not-zip-safe +0 -0
  93. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/nxsconfigserver.egg-info/requires.txt +0 -0
  94. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/nxsconfigserver.egg-info/top_level.txt +0 -0
  95. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/setup.cfg +0 -0
  96. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/setup.py +0 -0
  97. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/test/ComponentHandler_test.py +0 -0
  98. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/test/Errors_test.py +0 -0
  99. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/test/MYSQLDataBase_test.py +0 -0
  100. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/test/Merger_test.py +0 -0
  101. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/test/ServerSetUp.py +0 -0
  102. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/test/StreamSet_test.py +0 -0
  103. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/test/__init__.py +0 -0
  104. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/test/__main__.py +0 -0
  105. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/test/checks.py +0 -0
  106. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/test/main.py +0 -0
  107. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/tools/ndts.sql +0 -0
  108. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/tools/setupServer.py +0 -0
  109. {nxsconfigserver-2.20.0 → nxsconfigserver-2.21.1}/tools/simpleClient.py +0 -0
@@ -1,3 +1,11 @@
1
+ 2026-01-20 Jan Kotanski <jankotan@gmail.com>
2
+ * improve duplicated strategy and datasource tag merging (#94)
3
+ * tagged as v2.21.1
4
+
5
+ 2026-01-19 Jan Kotanski <jankotan@gmail.com>
6
+ * changed MergedXML to XMLCache attribute (#88)
7
+ * tagged as v2.21.0
8
+
1
9
  2026-01-16 Jan Kotanski <jankotan@gmail.com>
2
10
  * add MergedXML attribute (#88)
3
11
  * tagged as v2.20.0
@@ -1,7 +1,7 @@
1
1
  <?xml version="1.0" encoding="ASCII"?>
2
2
  <pogoDsl:PogoSystem xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pogoDsl="http://tango.org/pogo/PogoDsl">
3
3
  <classes name="NXSConfigServer" pogoRevision="9.9">
4
- <description description="NeXuS Configuration Server is a Tango Server with its implementation based&#xA;on a MySQL database. It allows to store XML configuration datasources&#xA;and components. It also gives possibility to select mandatory components&#xA;and perform the process of component merging.&#xA;&#xA;Source code: https://github.com/nexdatas/nxsconfigserver/&#xA;Web page: https://nexdatas.github.io/nxsconfigserver/&#xA;NexDaTaS Web page: https://nexdatas.github.io&#xA;" title="Configuration Server for Nexus Data Writer" sourcePath="/home/jkotan/ndts/nexdatas.configserver" language="Python" filestogenerate="XMI file,Code files,Protected Regions,html Pages" license="GPL" hasMandatoryProperty="false" hasConcreteProperty="true" hasAbstractCommand="false" hasAbstractAttribute="false" descriptionHtmlExists="false">
4
+ <description description="NeXuS Configuration Server is a Tango Server with its implementation based&#xA;on a MySQL database. It allows to store XML configuration datasources&#xA;and components. It also gives possibility to select mandatory components&#xA;and perform the process of component merging.&#xA;&#xA;Source code: https://github.com/nexdatas/nxsconfigserver/&#xA;Web page: https://nexdatas.github.io/nxsconfigserver/&#xA;NexDaTaS Web page: https://nexdatas.github.io&#xA;" title="Configuration Server for Nexus Data Writer" sourcePath="/home/jkotan/ndts/nxsconfigserver" language="Python" filestogenerate="XMI file,Code files,Protected Regions,html Pages" license="GPL" hasMandatoryProperty="false" hasConcreteProperty="true" hasAbstractCommand="false" hasAbstractAttribute="false" descriptionHtmlExists="false">
5
5
  <inheritances classname="Device_Impl" sourcePath=""/>
6
6
  <identification contact="at desy.de - jan.kotanski" author="jan.kotanski" emailDomain="desy.de" classFamily="Acquisition" siteSpecific="" platform="All Platforms" bus="Not Applicable" manufacturer="DESY" reference=""/>
7
7
  </description>
@@ -164,7 +164,7 @@
164
164
  <excludedStates>ON</excludedStates>
165
165
  <excludedStates>RUNNING</excludedStates>
166
166
  </commands>
167
- <commands name="CreateConfiguration" description="Creates the NDTS configuration script from the given components. The result is strored in XMLString" execMethod="create_configuration" displayLevel="OPERATOR" polledPeriod="0">
167
+ <commands name="CreateCache" description="Creates the cache configuration script from the given components. The result is strored in XMLCache" execMethod="create_cache" displayLevel="OPERATOR" polledPeriod="0" isDynamic="false">
168
168
  <argin description="list of component names">
169
169
  <type xsi:type="pogoDsl:StringArrayType"/>
170
170
  </argin>
@@ -411,13 +411,13 @@
411
411
  <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
412
412
  <properties description="JSON list of datasources to which links will be added" label="Datasources to which extra links will be added" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
413
413
  </attributes>
414
- <attributes name="MergedXML" attType="Scalar" rwType="READ" displayLevel="EXPERT" polledPeriod="0" maxX="" maxY="" allocReadMember="true" isDynamic="false">
414
+ <attributes name="XMLCache" attType="Scalar" rwType="READ" displayLevel="EXPERT" polledPeriod="0" maxX="" maxY="" allocReadMember="true" isDynamic="false">
415
415
  <dataType xsi:type="pogoDsl:StringType"/>
416
416
  <changeEvent fire="false" libCheckCriteria="false"/>
417
417
  <archiveEvent fire="false" libCheckCriteria="false"/>
418
418
  <dataReadyEvent fire="false" libCheckCriteria="true"/>
419
419
  <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
420
- <properties description="XML for merged components without applied variables " label="XML for merged components" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
420
+ <properties description="XML for merged components without applied variables" label="XML for merged components" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
421
421
  <readExcludedStates>ON</readExcludedStates>
422
422
  <readExcludedStates>RUNNING</readExcludedStates>
423
423
  <writeExcludedStates>ON</writeExcludedStates>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nxsconfigserver
3
- Version: 2.20.0
3
+ Version: 2.21.1
4
4
  Summary: Configuration Server for Nexus Data Writer
5
5
  Home-page: http://github.com/jkotan/nexdatas/nxsconfigserver
6
6
  Author: Jan Kotanski, Eugen Wintersberger , Halil Pasic
@@ -110,14 +110,14 @@
110
110
  <td> JSON list of datasources to which links will be added </td>
111
111
  </tr>
112
112
  <tr>
113
- <td> <a href="AttrMergedXML.html"> MergedXML </a> </td>
113
+ <td> <a href="AttrXMLCache.html"> XMLCache </a> </td>
114
114
  <td> false </td>
115
115
  <td> false </td>
116
116
  <td> Scalar </td>
117
117
  <td> READ </td>
118
118
  <td> Tango::DEV_STRING </td>
119
119
  <td> EXPERT </td>
120
- <td> XML for merged components without applied variables </td>
120
+ <td> XML for merged components without applied variables </td>
121
121
  </tr>
122
122
  </table>
123
123
  <br><br>
@@ -114,11 +114,11 @@
114
114
  <td> Stores the DataSource from XMLString </td>
115
115
  </tr>
116
116
  <tr>
117
- <td> <a href="CmdCreateConfiguration.html"> CreateConfiguration </a> </td>
117
+ <td> <a href="CmdCreateCache.html"> CreateCache </a> </td>
118
118
  <td> DEVVAR_STRINGARRAY </td>
119
119
  <td> DEV_VOID </td>
120
120
  <td> OPERATOR </td>
121
- <td> Creates the NDTS configuration script from the given components. The result is strored in XMLString </td>
121
+ <td> Creates the cache configuration script from the given components. The result is strored in XMLCache </td>
122
122
  </tr>
123
123
  <tr>
124
124
  <td> <a href="CmdDeleteComponent.html"> DeleteComponent </a> </td>
@@ -28,7 +28,7 @@
28
28
  <li> <a href="FullDocument.html#cmdStoreSelection"> StoreSelection </a>
29
29
  <li> <a href="FullDocument.html#cmdStoreComponent"> StoreComponent </a>
30
30
  <li> <a href="FullDocument.html#cmdStoreDataSource"> StoreDataSource </a>
31
- <li> <a href="FullDocument.html#cmdCreateConfiguration"> CreateConfiguration </a>
31
+ <li> <a href="FullDocument.html#cmdCreateCache"> CreateCache </a>
32
32
  <li> <a href="FullDocument.html#cmdDeleteComponent"> DeleteComponent </a>
33
33
  <li> <a href="FullDocument.html#cmdDeleteSelection"> DeleteSelection </a>
34
34
  <li> <a href="FullDocument.html#cmdDeleteDataSource"> DeleteDataSource </a>
@@ -55,7 +55,7 @@
55
55
  <li> <a href="FullDocument.html#attrLinkDataSources"> LinkDataSources </a>
56
56
  <li> <a href="FullDocument.html#attrCanFailDataSources"> CanFailDataSources </a>
57
57
  <li> <a href="FullDocument.html#attrExtraLinkDataSources"> ExtraLinkDataSources </a>
58
- <li> <a href="FullDocument.html#attrMergedXML"> MergedXML </a>
58
+ <li> <a href="FullDocument.html#attrXMLCache"> XMLCache </a>
59
59
  </ul>
60
60
  <li> <a href="FullDocument.html#states"> States </a>
61
61
  </ul>
@@ -265,11 +265,11 @@
265
265
  <td> Stores the DataSource from XMLString </td>
266
266
  </tr>
267
267
  <tr>
268
- <td> <a href="CmdCreateConfiguration.html"> CreateConfiguration </a> </td>
268
+ <td> <a href="CmdCreateCache.html"> CreateCache </a> </td>
269
269
  <td> DEVVAR_STRINGARRAY </td>
270
270
  <td> DEV_VOID </td>
271
271
  <td> OPERATOR </td>
272
- <td> Creates the NDTS configuration script from the given components. The result is strored in XMLString </td>
272
+ <td> Creates the cache configuration script from the given components. The result is strored in XMLCache </td>
273
273
  </tr>
274
274
  <tr>
275
275
  <td> <a href="CmdDeleteComponent.html"> DeleteComponent </a> </td>
@@ -1057,16 +1057,16 @@
1057
1057
  </tr>
1058
1058
  </table>
1059
1059
  <br><br><hr>
1060
- <a name="cmdCreateConfiguration"> </a>
1060
+ <a name="cmdCreateCache"> </a>
1061
1061
  <br><br><br>
1062
- <font size="+1"><u><b> Command CreateConfiguration : </b></u></font>
1062
+ <font size="+1"><u><b> Command CreateCache : </b></u></font>
1063
1063
  <ul>
1064
- Creates the NDTS configuration script from the given components. The result is strored in XMLString
1064
+ Creates the cache configuration script from the given components. The result is strored in XMLCache
1065
1065
  </ul>
1066
1066
  <br><br><br>
1067
1067
  <Table Border=2 Cellpadding=3 CELLSPACING=0>
1068
1068
  <tr bgcolor="#CCCCFF" class="TableHeadingColor">
1069
- <td colspan=0> <font size=+1> <center><b> CreateConfiguration Definition </b></font></center></td>
1069
+ <td colspan=0> <font size=+1> <center><b> CreateCache Definition </b></font></center></td>
1070
1070
  </tr>
1071
1071
  <tr>
1072
1072
  <td> Input Argument </td>
@@ -1900,14 +1900,14 @@
1900
1900
  <td> JSON list of datasources to which links will be added </td>
1901
1901
  </tr>
1902
1902
  <tr>
1903
- <td> <a href="AttrMergedXML.html"> MergedXML </a> </td>
1903
+ <td> <a href="AttrXMLCache.html"> XMLCache </a> </td>
1904
1904
  <td> false </td>
1905
1905
  <td> false </td>
1906
1906
  <td> Scalar </td>
1907
1907
  <td> READ </td>
1908
1908
  <td> Tango::DEV_STRING </td>
1909
1909
  <td> EXPERT </td>
1910
- <td> XML for merged components without applied variables </td>
1910
+ <td> XML for merged components without applied variables </td>
1911
1911
  </tr>
1912
1912
  </table>
1913
1913
  <br><br>
@@ -3420,11 +3420,11 @@
3420
3420
  </table>
3421
3421
  <br><br>
3422
3422
  <hr>
3423
- <a name="attrMergedXML"> </a>
3423
+ <a name="attrXMLCache"> </a>
3424
3424
  <br><br><br>
3425
- <font size="+1"><u><b> Attribute MergedXML : </b></u></font>
3425
+ <font size="+1"><u><b> Attribute XMLCache : </b></u></font>
3426
3426
  <ul>
3427
- XML for merged components without applied variables
3427
+ XML for merged components without applied variables
3428
3428
  </ul>
3429
3429
  <br><br><br>
3430
3430
  <Table Border=0 Cellpadding=0 CELLSPACING=20>
@@ -184,7 +184,7 @@ class Merger(object):
184
184
  res += ":" + name
185
185
  return res
186
186
 
187
- def __areMergeable(self, elem1, elem2, ancestors):
187
+ def __areMergeable(self, elem1, elem2, ancestors, node):
188
188
  """ checks if two elements are mergeable
189
189
 
190
190
  :param elem1: first element
@@ -216,10 +216,19 @@ class Merger(object):
216
216
  if tags:
217
217
  status = False
218
218
  if tagName in self.singles or (name1 and name1 == name2):
219
- raise IncompatibleNodeError(
220
- "Incompatible element attributes %s: %s"
221
- % (str(self.__getAncestors(elem1, ancestors)), str(tags)),
222
- [elem1, elem2])
219
+ if not self.skip:
220
+ if tags and tags[0] == ('TANGO', 'CLIENT'):
221
+ node.remove(elem2)
222
+ elif tags and tags[0] == ('CLIENT', 'TANGO'):
223
+ node.remove(elem1)
224
+ else:
225
+ raise IncompatibleNodeError(
226
+ "Incompatible element attributes %s: %s %s"
227
+ % (str(self.__getAncestors(elem1, ancestors)),
228
+ str(node.get("name")), str(tags)),
229
+ [elem1, elem2])
230
+ else:
231
+ status = False
223
232
 
224
233
  if tagName in self.uniqueText:
225
234
  text1 = unicode(self.__getText(elem1)).strip()
@@ -330,6 +339,9 @@ class Merger(object):
330
339
 
331
340
  children = list(node)
332
341
  c1 = 0
342
+ if unicode(node.tag) in self.switchable and self.switchdatasources:
343
+ # print("NODE", node.tag, node.get("name"))
344
+ self.__switch(node)
333
345
  while c1 < len(children):
334
346
  child1 = children[c1]
335
347
  c2 = c1 + 1
@@ -338,7 +350,7 @@ class Merger(object):
338
350
  if child1 != child2:
339
351
  if self.__areMergeable(
340
352
  child1, child2,
341
- ancestors):
353
+ ancestors, node):
342
354
  self.__mergeNodes(child1, child2, node)
343
355
  children.pop(c2)
344
356
  c2 -= 1
@@ -359,8 +371,9 @@ class Merger(object):
359
371
 
360
372
  self.__mergeChildren(child, newancestors, entrynode,
361
373
  datanode, linknode)
362
- if cName in self.switchable and self.switchdatasources:
363
- self.__switch(child)
374
+ # if cName in self.switchable and self.switchdatasources:
375
+ # print("CHILD", child.tag, child.get("name"))
376
+ # self.__switch(child)
364
377
  if cName in self.linkable and self.linkdatasources:
365
378
  datanode = self.__addlink(
366
379
  child, newancestors, entrynode, datanode,
@@ -431,7 +444,8 @@ class Merger(object):
431
444
  :type node: :obj:`xml.etree.ElementTree.Element`
432
445
  """
433
446
  if node is not None:
434
- stnode = None
447
+ stnodes = []
448
+ modes = []
435
449
  mode = None
436
450
  dsname = None
437
451
  dsnode = None
@@ -456,13 +470,18 @@ class Merger(object):
456
470
  elif cName == 'strategy':
457
471
  mode = child.get("mode")
458
472
  if mode in self.modesToSwitch.keys():
459
- stnode = child
460
- else:
461
- break
462
- if stnode is not None and dsnode is not None:
463
- break
464
- if stnode is not None and dsnode is not None:
465
- stnode.attrib["mode"] = self.modesToSwitch[mode]
473
+ stnodes.append(child)
474
+ modes.append(mode)
475
+ # else:
476
+ # break
477
+ # if stnode not None and dsnode is not None:
478
+ # break
479
+ if stnodes and dsnode is not None:
480
+ for si, stn in enumerate(stnodes):
481
+ mode = modes[si]
482
+ if mode in self.modesToSwitch.keys():
483
+ stn.attrib["mode"] = self.modesToSwitch[mode]
484
+ # print("SWITCH", node.get("name"), dsname, dsnode)
466
485
 
467
486
  def __canfail(self, node):
468
487
  """ switch the given node to canfail mode
@@ -135,17 +135,17 @@ class NXSConfigServer(tango.LatestDeviceImpl):
135
135
  return False
136
136
  return True
137
137
 
138
- def read_MergedXML(self, attr):
139
- """ Read MergedXML attribute
138
+ def read_XMLCache(self, attr):
139
+ """ Read XMLCache attribute
140
140
 
141
141
  :param attr: xml string attribute
142
142
  :type attr: :class:`tango.Attribute`
143
143
  """
144
- self.debug_stream("In read_MergedXML()")
145
- attr.set_value(self.xmlc.mergedxml)
144
+ self.debug_stream("In read_XMLCache()")
145
+ attr.set_value(self.xmlc.xmlcache)
146
146
 
147
- def is_MergedXML_allowed(self, _):
148
- """ MergedXML attribute State Machine
147
+ def is_XMLCache_allowed(self, _):
148
+ """ XMLCache attribute State Machine
149
149
 
150
150
  :returns: True if the operation allowed
151
151
  :rtype: :obj:`bool`
@@ -785,7 +785,7 @@ class NXSConfigServer(tango.LatestDeviceImpl):
785
785
 
786
786
  :brief: Creates the NDTS configuration script from the
787
787
  given components. The result is strored in XMLString
788
- and MergedXML
788
+ and XMLCache
789
789
 
790
790
  :param argin: DevVarStringArray list of component names
791
791
  :type argin: :obj:`list` <:obj:`str`>
@@ -810,6 +810,36 @@ class NXSConfigServer(tango.LatestDeviceImpl):
810
810
  return False
811
811
  return True
812
812
 
813
+ def CreateCache(self, argin):
814
+ """ CreateCache command
815
+
816
+ :brief: Creates the NDTS cache script from the
817
+ given components. The result is strored in XMLString
818
+ and XMLCache
819
+
820
+ :param argin: DevVarStringArray list of component names
821
+ :type argin: :obj:`list` <:obj:`str`>
822
+ """
823
+ self.debug_stream("In CreateCache()")
824
+ try:
825
+ self.set_state(tango.DevState.RUNNING)
826
+ self.xmlc.createCache(argin)
827
+ self.set_state(tango.DevState.OPEN)
828
+ finally:
829
+ if self.get_state() == tango.DevState.RUNNING:
830
+ self.set_state(tango.DevState.OPEN)
831
+
832
+ def is_CreateCache_allowed(self):
833
+ """ CreateCache command State Machine
834
+
835
+ :returns: True if the operation allowed
836
+ :rtype: :obj:`bool`
837
+ """
838
+ if self.get_state() in [tango.DevState.ON,
839
+ tango.DevState.RUNNING]:
840
+ return False
841
+ return True
842
+
813
843
  def DeleteComponent(self, argin):
814
844
  """ DeleteComponent command
815
845
 
@@ -1276,6 +1306,9 @@ class NXSConfigServerClass(tango.DeviceClass):
1276
1306
  'CreateConfiguration':
1277
1307
  [[tango.DevVarStringArray, "list of component names"],
1278
1308
  [tango.DevVoid, ""]],
1309
+ 'CreateCache':
1310
+ [[tango.DevVarStringArray, "list of component names"],
1311
+ [tango.DevVoid, ""]],
1279
1312
  'DeleteComponent':
1280
1313
  [[tango.DevString, "component name"],
1281
1314
  [tango.DevVoid, ""]],
@@ -1337,7 +1370,7 @@ class NXSConfigServerClass(tango.DeviceClass):
1337
1370
  "it contains the resulting XML configuration.",
1338
1371
  'Display level': tango.DispLevel.EXPERT,
1339
1372
  }],
1340
- 'MergedXML':
1373
+ 'XMLCache':
1341
1374
  [[tango.DevString,
1342
1375
  tango.SCALAR,
1343
1376
  tango.READ],
@@ -20,4 +20,4 @@
20
20
  """ release version module """
21
21
 
22
22
  #: version number
23
- __version__ = "2.20.0"
23
+ __version__ = "2.21.1"
@@ -87,7 +87,7 @@ class XMLConfigurator(object):
87
87
  #: (:obj:`str`) XML config string
88
88
  self.xmlstring = ""
89
89
  #: (:obj:`str`) Merged coponents in XML string without variables
90
- self.mergedxml = ""
90
+ self.xmlcache = ""
91
91
  #: (:obj:`str`) component selection
92
92
  self.selection = "{}"
93
93
  #: (:obj:`str`) JSON string with arguments to connect to database
@@ -831,9 +831,12 @@ class XMLConfigurator(object):
831
831
  name = subc.strip() if subc else ""
832
832
  if name:
833
833
  if tag and name not in keys:
834
- raise NonregisteredDBRecordError(
835
- "The %s %s of %s not registered in the DataBase" % (
836
- tag if tag else "variable", name, component))
834
+ if not onlyexisting:
835
+ raise NonregisteredDBRecordError(
836
+ "The %s %s of %s not registered in the "
837
+ "DataBase" % (
838
+ tag if tag else "variable",
839
+ name, component))
837
840
  try:
838
841
  xmlds = funValue([name], defsubc)
839
842
  except Exception:
@@ -842,7 +845,7 @@ class XMLConfigurator(object):
842
845
  raise NonregisteredDBRecordError(
843
846
  "The %s %s of %s not registered" % (
844
847
  tag if tag else "variable", name, component))
845
- if tag:
848
+ if tag and xmlds:
846
849
  if sys.version_info > (3,):
847
850
  root = et.fromstring(
848
851
  bytes(xmlds[0], "UTF-8"),
@@ -908,10 +911,12 @@ class XMLConfigurator(object):
908
911
  component, self.__varLabel,
909
912
  list(self.__parameters.keys()), self.__getVariable)
910
913
 
911
- def __attachComponents(self, component):
914
+ def __attachComponents(self, component, onlyexisting=False):
912
915
  """ attaches variables to component
913
916
 
914
917
  :param component: given component
918
+ :param onlyexisting: attachElement only if exists
919
+ :type onlyexisting: :obj:`bool`
915
920
  :type component: :obj:`str`
916
921
  :returns: component with attached variables
917
922
  :rtype: :obj:`str`
@@ -919,13 +924,16 @@ class XMLConfigurator(object):
919
924
  if not component:
920
925
  return
921
926
  return self.__attachElements(
922
- component, self.__cpLabel, [], lambda x, y: [""])
927
+ component, self.__cpLabel, [], lambda x, y: [""],
928
+ onlyexisting=onlyexisting)
923
929
 
924
- def __attachDataSources(self, component):
930
+ def __attachDataSources(self, component, onlyexisting=False):
925
931
  """ attaches datasources to component
926
932
 
927
933
  :param component: given component
928
934
  :type component: :obj:`str`
935
+ :param onlyexisting: attachElement only if exists
936
+ :type onlyexisting: :obj:`bool`
929
937
  :returns: component with attached datasources
930
938
  :rtype: :obj:`str`
931
939
  """
@@ -934,7 +942,7 @@ class XMLConfigurator(object):
934
942
  return self.__attachElements(
935
943
  component, self.__dsLabel,
936
944
  self.availableDataSources(), self.dataSources,
937
- "datasource")
945
+ "datasource", onlyexisting=onlyexisting)
938
946
 
939
947
  def merge(self, names):
940
948
  """ merges the give components
@@ -963,13 +971,15 @@ class XMLConfigurator(object):
963
971
  cpvars[str(key)] = str(value)
964
972
  return cpvars
965
973
 
966
- def __mergeVars(self, names, withVariables=False):
974
+ def __mergeVars(self, names, withVariables=False, onlyCache=False):
967
975
  """ merges the give components
968
976
 
969
977
  :param names: list of component names
970
978
  :type names: :obj:`list` <:obj:`str`>
971
979
  :param withVariables: if true variables will be substituted
972
980
  :param withVariables: :obj:`bool`
981
+ :param onlyCache: if true create only cache
982
+ :param onlyCache: :obj:`bool`
973
983
  :returns: merged components
974
984
  :rtype: :obj:`str`
975
985
  """
@@ -980,7 +990,12 @@ class XMLConfigurator(object):
980
990
  comps = self.__mydb.components(list(set(allnames)))
981
991
  xml = self.__merge(comps, skip=withVariables)
982
992
  if withVariables:
983
- self.mergedxml = xml or ""
993
+ xml = self.__attachDataSources(
994
+ self.__attachComponents(
995
+ xml, onlyexisting=True), onlyexisting=True)
996
+ self.xmlcache = xml or ""
997
+ if onlyCache:
998
+ return self.xmlcache
984
999
  if xml is not None:
985
1000
  comps = [xml]
986
1001
  cpvars = self.__variableComponentValues(comps)
@@ -998,11 +1013,12 @@ class XMLConfigurator(object):
998
1013
  :rtype: :obj:`str`
999
1014
  """
1000
1015
  mgr = Merger()
1001
- mgr.switchdatasources = json.loads(self.stepdatasources)
1002
- mgr.linkdatasources = json.loads(self.linkdatasources)
1003
- mgr.extralinkdatasources = json.loads(self.extralinkdatasources)
1004
- mgr.canfaildatasources = json.loads(self.canfaildatasources)
1005
- mgr.extralinkpath = self.__splitExtraPath(self.extraLinkPath)
1016
+ if not skip:
1017
+ mgr.switchdatasources = json.loads(self.stepdatasources)
1018
+ mgr.linkdatasources = json.loads(self.linkdatasources)
1019
+ mgr.extralinkdatasources = json.loads(self.extralinkdatasources)
1020
+ mgr.canfaildatasources = json.loads(self.canfaildatasources)
1021
+ mgr.extralinkpath = self.__splitExtraPath(self.extraLinkPath)
1006
1022
  mgr.skip = skip
1007
1023
  mgr.collect(xmls)
1008
1024
  mgr.merge()
@@ -1035,6 +1051,16 @@ class XMLConfigurator(object):
1035
1051
  epath.append([nd[0], "NX" + nd[0]])
1036
1052
  return epath
1037
1053
 
1054
+ def createCache(self, names):
1055
+ """ creates the final configuration string in the xmlstring attribute
1056
+
1057
+ :param names: list of component names
1058
+ :type names: :obj:`list` <:obj:`str`>
1059
+ """
1060
+ self.__mergeVars(names, withVariables=True, onlyCache=True)
1061
+ self._streams.info("XMLConfigurator::createConfiguration() "
1062
+ "- Create configuration")
1063
+
1038
1064
  def createConfiguration(self, names):
1039
1065
  """ creates the final configuration string in the xmlstring attribute
1040
1066
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nxsconfigserver
3
- Version: 2.20.0
3
+ Version: 2.21.1
4
4
  Summary: Configuration Server for Nexus Data Writer
5
5
  Home-page: http://github.com/jkotan/nexdatas/nxsconfigserver
6
6
  Author: Jan Kotanski, Eugen Wintersberger , Halil Pasic
@@ -137,8 +137,8 @@ class NXSConfigServerTest(XMLConfigurator_test.XMLConfiguratorTest):
137
137
  # gets xmlconfiguration
138
138
  # \param xmlc configuration instance
139
139
  # \returns xml configuration string
140
- def getMergedXML(self, xmlc):
141
- return xmlc.MergedXML
140
+ def getXMLCache(self, xmlc):
141
+ return xmlc.XMLCache
142
142
 
143
143
 
144
144
  if __name__ == '__main__':
@@ -176,8 +176,8 @@ class XMLConfiguratorTest(unittest.TestCase):
176
176
  # gets merged xmlconfiguration
177
177
  # \param xmlc configuration instance
178
178
  # \returns xml configuration string
179
- def getMergedXML(self, xmlc):
180
- return xmlc.mergedxml
179
+ def getXMLCache(self, xmlc):
180
+ return xmlc.xmlcache
181
181
 
182
182
  # sets selection configuration
183
183
  # \param selectionc configuration instance
@@ -1202,11 +1202,11 @@ class XMLConfiguratorTest(unittest.TestCase):
1202
1202
 
1203
1203
  self.getXML(el)
1204
1204
  self.assertEqual(self.getXML(el), '')
1205
- self.assertEqual(self.getMergedXML(el), '')
1205
+ self.assertEqual(self.getXMLCache(el), '')
1206
1206
  self.assertEqual(el.createConfiguration([]), None)
1207
1207
  self.getXML(el)
1208
1208
  self.assertEqual(self.getXML(el), '')
1209
- self.assertEqual(self.getMergedXML(el), '')
1209
+ self.assertEqual(self.getXMLCache(el), '')
1210
1210
  el.setMandatoryComponents(man)
1211
1211
  el.close()
1212
1212
 
@@ -1249,7 +1249,7 @@ class XMLConfiguratorTest(unittest.TestCase):
1249
1249
 
1250
1250
  self.assertEqual(el.createConfiguration([name]), None)
1251
1251
  xml = self.getXML(el)
1252
- mxml = self.getMergedXML(el)
1252
+ mxml = self.getXMLCache(el)
1253
1253
  checkxmls(
1254
1254
  self,
1255
1255
  xml,
@@ -1315,7 +1315,7 @@ class XMLConfiguratorTest(unittest.TestCase):
1315
1315
 
1316
1316
  self.assertEqual(el.createConfiguration([name]), None)
1317
1317
  xml = self.getXML(el)
1318
- mxml = self.getMergedXML(el)
1318
+ mxml = self.getXMLCache(el)
1319
1319
  checkxmls(
1320
1320
  self,
1321
1321
  xml,
@@ -1329,7 +1329,7 @@ class XMLConfiguratorTest(unittest.TestCase):
1329
1329
  self.assertEqual(el.createConfiguration([name]), None)
1330
1330
 
1331
1331
  xml = self.getXML(el)
1332
- mxml = self.getMergedXML(el)
1332
+ mxml = self.getXMLCache(el)
1333
1333
  checkxmls(
1334
1334
  self,
1335
1335
  xml,
@@ -1400,7 +1400,7 @@ class XMLConfiguratorTest(unittest.TestCase):
1400
1400
 
1401
1401
  self.assertEqual(el.createConfiguration([name]), None)
1402
1402
  xml = self.getXML(el)
1403
- mxml = self.getMergedXML(el)
1403
+ mxml = self.getXMLCache(el)
1404
1404
  checkxmls(
1405
1405
  self,
1406
1406
  xml,
@@ -1416,7 +1416,7 @@ class XMLConfiguratorTest(unittest.TestCase):
1416
1416
  self.assertEqual(el.createConfiguration([name, name2]), None)
1417
1417
 
1418
1418
  xml = self.getXML(el)
1419
- mxml = self.getMergedXML(el)
1419
+ mxml = self.getXMLCache(el)
1420
1420
  checkxmls(
1421
1421
  self,
1422
1422
  xml,
@@ -1437,7 +1437,7 @@ class XMLConfiguratorTest(unittest.TestCase):
1437
1437
  self.assertEqual(el.createConfiguration([name, name2]), None)
1438
1438
 
1439
1439
  xml = self.getXML(el)
1440
- mxml = self.getMergedXML(el)
1440
+ mxml = self.getXMLCache(el)
1441
1441
  checkxmls(
1442
1442
  self,
1443
1443
  xml,