DIRAC 9.0.0a42__py3-none-any.whl → 9.0.7__py3-none-any.whl

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 (236) hide show
  1. DIRAC/AccountingSystem/Client/AccountingCLI.py +0 -140
  2. DIRAC/AccountingSystem/Client/DataStoreClient.py +0 -13
  3. DIRAC/AccountingSystem/Client/Types/BaseAccountingType.py +0 -7
  4. DIRAC/AccountingSystem/ConfigTemplate.cfg +0 -5
  5. DIRAC/AccountingSystem/Service/DataStoreHandler.py +0 -72
  6. DIRAC/ConfigurationSystem/Client/Helpers/CSGlobals.py +0 -9
  7. DIRAC/ConfigurationSystem/Client/Helpers/Registry.py +38 -26
  8. DIRAC/ConfigurationSystem/Client/Helpers/Resources.py +11 -43
  9. DIRAC/ConfigurationSystem/Client/Helpers/test/Test_Helpers.py +0 -16
  10. DIRAC/ConfigurationSystem/Client/LocalConfiguration.py +14 -8
  11. DIRAC/ConfigurationSystem/Client/PathFinder.py +47 -8
  12. DIRAC/ConfigurationSystem/Client/SyncPlugins/CERNLDAPSyncPlugin.py +4 -1
  13. DIRAC/ConfigurationSystem/Client/VOMS2CSSynchronizer.py +32 -19
  14. DIRAC/ConfigurationSystem/Client/test/Test_PathFinder.py +41 -1
  15. DIRAC/ConfigurationSystem/private/RefresherBase.py +4 -2
  16. DIRAC/Core/Base/API.py +4 -7
  17. DIRAC/Core/Base/SQLAlchemyDB.py +1 -0
  18. DIRAC/Core/DISET/ServiceReactor.py +11 -3
  19. DIRAC/Core/DISET/private/BaseClient.py +1 -2
  20. DIRAC/Core/DISET/private/Transports/M2SSLTransport.py +9 -7
  21. DIRAC/Core/DISET/private/Transports/SSL/M2Utils.py +3 -1
  22. DIRAC/Core/LCG/GOCDBClient.py +5 -7
  23. DIRAC/Core/Security/DiracX.py +31 -17
  24. DIRAC/Core/Security/IAMService.py +5 -10
  25. DIRAC/Core/Security/Locations.py +27 -18
  26. DIRAC/Core/Security/ProxyInfo.py +9 -5
  27. DIRAC/Core/Security/VOMSService.py +2 -4
  28. DIRAC/Core/Security/m2crypto/X509Certificate.py +4 -6
  29. DIRAC/Core/Security/m2crypto/asn1_utils.py +17 -5
  30. DIRAC/Core/Security/test/test_diracx_token_from_pem.py +161 -0
  31. DIRAC/Core/Tornado/Client/ClientSelector.py +4 -1
  32. DIRAC/Core/Tornado/Server/TornadoService.py +1 -1
  33. DIRAC/Core/Utilities/CGroups2.py +328 -0
  34. DIRAC/Core/Utilities/ClassAd/ClassAdLight.py +4 -290
  35. DIRAC/Core/Utilities/DErrno.py +5 -309
  36. DIRAC/Core/Utilities/Extensions.py +10 -1
  37. DIRAC/Core/Utilities/File.py +1 -1
  38. DIRAC/Core/Utilities/Graphs/GraphData.py +1 -1
  39. DIRAC/Core/Utilities/Graphs/GraphUtilities.py +6 -1
  40. DIRAC/Core/Utilities/JDL.py +1 -195
  41. DIRAC/Core/Utilities/List.py +1 -124
  42. DIRAC/Core/Utilities/MySQL.py +103 -99
  43. DIRAC/Core/Utilities/Os.py +32 -1
  44. DIRAC/Core/Utilities/Platform.py +2 -107
  45. DIRAC/Core/Utilities/Proxy.py +0 -4
  46. DIRAC/Core/Utilities/ReturnValues.py +7 -252
  47. DIRAC/Core/Utilities/StateMachine.py +12 -178
  48. DIRAC/Core/Utilities/Subprocess.py +35 -14
  49. DIRAC/Core/Utilities/TimeUtilities.py +10 -253
  50. DIRAC/Core/Utilities/test/Test_JDL.py +0 -3
  51. DIRAC/Core/Utilities/test/Test_Profiler.py +20 -20
  52. DIRAC/Core/scripts/dirac_agent.py +1 -1
  53. DIRAC/Core/scripts/dirac_apptainer_exec.py +72 -46
  54. DIRAC/Core/scripts/dirac_configure.py +1 -3
  55. DIRAC/Core/scripts/dirac_install_db.py +24 -6
  56. DIRAC/Core/scripts/dirac_platform.py +1 -92
  57. DIRAC/DataManagementSystem/Agent/FTS3Agent.py +8 -7
  58. DIRAC/DataManagementSystem/Agent/RequestOperations/RemoveFile.py +7 -6
  59. DIRAC/DataManagementSystem/Client/FTS3Job.py +71 -34
  60. DIRAC/DataManagementSystem/DB/FTS3DB.py +7 -3
  61. DIRAC/DataManagementSystem/DB/FileCatalogComponents/DatasetManager/DatasetManager.py +1 -1
  62. DIRAC/DataManagementSystem/DB/FileCatalogDB.sql +9 -9
  63. DIRAC/DataManagementSystem/DB/FileCatalogWithFkAndPsDB.sql +9 -9
  64. DIRAC/DataManagementSystem/Utilities/DMSHelpers.py +6 -2
  65. DIRAC/DataManagementSystem/scripts/dirac_admin_allow_se.py +13 -8
  66. DIRAC/DataManagementSystem/scripts/dirac_admin_ban_se.py +13 -8
  67. DIRAC/DataManagementSystem/scripts/dirac_dms_create_moving_request.py +2 -0
  68. DIRAC/DataManagementSystem/scripts/dirac_dms_protocol_matrix.py +0 -1
  69. DIRAC/FrameworkSystem/Client/BundleDeliveryClient.py +2 -7
  70. DIRAC/FrameworkSystem/Client/ComponentInstaller.py +9 -4
  71. DIRAC/FrameworkSystem/Client/ProxyManagerClient.py +5 -2
  72. DIRAC/FrameworkSystem/Client/SystemAdministratorClientCLI.py +11 -6
  73. DIRAC/FrameworkSystem/ConfigTemplate.cfg +2 -0
  74. DIRAC/FrameworkSystem/DB/AuthDB.py +3 -3
  75. DIRAC/FrameworkSystem/DB/InstalledComponentsDB.py +4 -4
  76. DIRAC/FrameworkSystem/DB/ProxyDB.py +11 -3
  77. DIRAC/FrameworkSystem/DB/TokenDB.py +1 -1
  78. DIRAC/FrameworkSystem/Service/ProxyManagerHandler.py +8 -6
  79. DIRAC/FrameworkSystem/Utilities/MonitoringUtilities.py +2 -19
  80. DIRAC/FrameworkSystem/Utilities/TokenManagementUtilities.py +3 -2
  81. DIRAC/FrameworkSystem/Utilities/diracx.py +36 -14
  82. DIRAC/FrameworkSystem/private/authorization/AuthServer.py +2 -2
  83. DIRAC/FrameworkSystem/scripts/dirac_admin_update_pilot.py +18 -11
  84. DIRAC/FrameworkSystem/scripts/dirac_login.py +2 -2
  85. DIRAC/FrameworkSystem/scripts/dirac_proxy_init.py +7 -8
  86. DIRAC/Interfaces/API/Dirac.py +27 -15
  87. DIRAC/Interfaces/API/DiracAdmin.py +45 -17
  88. DIRAC/Interfaces/API/Job.py +9 -13
  89. DIRAC/Interfaces/scripts/dirac_admin_allow_site.py +12 -18
  90. DIRAC/Interfaces/scripts/dirac_admin_ban_site.py +12 -10
  91. DIRAC/Interfaces/scripts/dirac_admin_get_site_mask.py +4 -13
  92. DIRAC/Interfaces/scripts/dirac_admin_reset_job.py +3 -6
  93. DIRAC/Interfaces/scripts/dirac_wms_job_parameters.py +0 -1
  94. DIRAC/MonitoringSystem/Client/Types/WMSHistory.py +4 -0
  95. DIRAC/MonitoringSystem/Client/WebAppClient.py +26 -0
  96. DIRAC/MonitoringSystem/ConfigTemplate.cfg +9 -0
  97. DIRAC/MonitoringSystem/DB/MonitoringDB.py +6 -25
  98. DIRAC/MonitoringSystem/Service/MonitoringHandler.py +0 -33
  99. DIRAC/MonitoringSystem/Service/WebAppHandler.py +599 -0
  100. DIRAC/MonitoringSystem/private/MainReporter.py +0 -3
  101. DIRAC/ProductionSystem/DB/ProductionDB.sql +4 -4
  102. DIRAC/ProductionSystem/scripts/dirac_prod_get.py +2 -2
  103. DIRAC/ProductionSystem/scripts/dirac_prod_get_all.py +2 -2
  104. DIRAC/ProductionSystem/scripts/dirac_prod_get_trans.py +2 -3
  105. DIRAC/RequestManagementSystem/Agent/RequestExecutingAgent.py +8 -6
  106. DIRAC/RequestManagementSystem/Agent/RequestOperations/ForwardDISET.py +2 -14
  107. DIRAC/RequestManagementSystem/Client/ReqClient.py +66 -13
  108. DIRAC/RequestManagementSystem/ConfigTemplate.cfg +6 -6
  109. DIRAC/RequestManagementSystem/DB/RequestDB.py +10 -5
  110. DIRAC/RequestManagementSystem/DB/test/RMSTestScenari.py +2 -0
  111. DIRAC/RequestManagementSystem/private/RequestValidator.py +40 -46
  112. DIRAC/ResourceStatusSystem/Client/SiteStatus.py +4 -2
  113. DIRAC/ResourceStatusSystem/Command/FreeDiskSpaceCommand.py +3 -1
  114. DIRAC/ResourceStatusSystem/DB/ResourceManagementDB.py +8 -8
  115. DIRAC/ResourceStatusSystem/DB/ResourceStatusDB.py +2 -2
  116. DIRAC/ResourceStatusSystem/Utilities/CSHelpers.py +2 -31
  117. DIRAC/ResourceStatusSystem/scripts/dirac_rss_set_status.py +30 -12
  118. DIRAC/Resources/Catalog/RucioFileCatalogClient.py +195 -1
  119. DIRAC/Resources/Catalog/test/Test_RucioFileCatalogClient.py +181 -0
  120. DIRAC/Resources/Computing/AREXComputingElement.py +25 -8
  121. DIRAC/Resources/Computing/BatchSystems/Condor.py +126 -108
  122. DIRAC/Resources/Computing/BatchSystems/SLURM.py +5 -1
  123. DIRAC/Resources/Computing/BatchSystems/test/Test_SLURM.py +46 -0
  124. DIRAC/Resources/Computing/ComputingElement.py +1 -1
  125. DIRAC/Resources/Computing/HTCondorCEComputingElement.py +44 -44
  126. DIRAC/Resources/Computing/InProcessComputingElement.py +4 -2
  127. DIRAC/Resources/Computing/LocalComputingElement.py +1 -18
  128. DIRAC/Resources/Computing/SSHBatchComputingElement.py +1 -17
  129. DIRAC/Resources/Computing/SSHComputingElement.py +1 -18
  130. DIRAC/Resources/Computing/SingularityComputingElement.py +19 -5
  131. DIRAC/Resources/Computing/test/Test_HTCondorCEComputingElement.py +67 -49
  132. DIRAC/Resources/Computing/test/Test_PoolComputingElement.py +2 -1
  133. DIRAC/Resources/IdProvider/CheckInIdProvider.py +13 -0
  134. DIRAC/Resources/IdProvider/IdProviderFactory.py +11 -3
  135. DIRAC/Resources/MessageQueue/StompMQConnector.py +1 -1
  136. DIRAC/Resources/Storage/GFAL2_StorageBase.py +24 -15
  137. DIRAC/Resources/Storage/OccupancyPlugins/WLCGAccountingHTTPJson.py +1 -3
  138. DIRAC/Resources/Storage/StorageBase.py +4 -2
  139. DIRAC/Resources/Storage/StorageElement.py +6 -7
  140. DIRAC/StorageManagementSystem/DB/StorageManagementDB.sql +2 -2
  141. DIRAC/TransformationSystem/Agent/TaskManagerAgentBase.py +10 -16
  142. DIRAC/TransformationSystem/Agent/TransformationAgent.py +22 -1
  143. DIRAC/TransformationSystem/Agent/TransformationCleaningAgent.py +16 -16
  144. DIRAC/TransformationSystem/Client/TaskManager.py +2 -4
  145. DIRAC/TransformationSystem/Client/Transformation.py +6 -7
  146. DIRAC/TransformationSystem/Client/TransformationClient.py +21 -11
  147. DIRAC/TransformationSystem/Client/Utilities.py +9 -0
  148. DIRAC/TransformationSystem/DB/TransformationDB.py +11 -14
  149. DIRAC/TransformationSystem/DB/TransformationDB.sql +9 -9
  150. DIRAC/TransformationSystem/Service/TransformationManagerHandler.py +0 -333
  151. DIRAC/TransformationSystem/Utilities/ReplicationCLIParameters.py +3 -3
  152. DIRAC/TransformationSystem/Utilities/TransformationInfo.py +7 -5
  153. DIRAC/TransformationSystem/scripts/dirac_production_runjoblocal.py +2 -4
  154. DIRAC/TransformationSystem/test/Test_TransformationInfo.py +22 -15
  155. DIRAC/TransformationSystem/test/Test_replicationTransformation.py +5 -6
  156. DIRAC/Workflow/Modules/test/Test_Modules.py +5 -0
  157. DIRAC/WorkloadManagementSystem/Agent/JobAgent.py +38 -26
  158. DIRAC/WorkloadManagementSystem/Agent/JobCleaningAgent.py +12 -8
  159. DIRAC/WorkloadManagementSystem/Agent/PilotSyncAgent.py +4 -3
  160. DIRAC/WorkloadManagementSystem/Agent/PushJobAgent.py +13 -13
  161. DIRAC/WorkloadManagementSystem/Agent/SiteDirector.py +18 -14
  162. DIRAC/WorkloadManagementSystem/Agent/StalledJobAgent.py +18 -51
  163. DIRAC/WorkloadManagementSystem/Agent/StatesAccountingAgent.py +41 -1
  164. DIRAC/WorkloadManagementSystem/Agent/test/Test_Agent_JobAgent.py +45 -4
  165. DIRAC/WorkloadManagementSystem/Agent/test/Test_Agent_JobCleaningAgent.py +7 -9
  166. DIRAC/WorkloadManagementSystem/Agent/test/Test_Agent_PushJobAgent.py +1 -0
  167. DIRAC/WorkloadManagementSystem/Agent/test/Test_Agent_SiteDirector.py +9 -2
  168. DIRAC/WorkloadManagementSystem/Agent/test/Test_Agent_StalledJobAgent.py +4 -5
  169. DIRAC/WorkloadManagementSystem/Client/DownloadInputData.py +9 -9
  170. DIRAC/WorkloadManagementSystem/Client/InputDataResolution.py +6 -6
  171. DIRAC/WorkloadManagementSystem/Client/JobMonitoringClient.py +10 -11
  172. DIRAC/WorkloadManagementSystem/Client/JobReport.py +1 -1
  173. DIRAC/WorkloadManagementSystem/Client/JobState/CachedJobState.py +3 -0
  174. DIRAC/WorkloadManagementSystem/Client/JobState/JobManifest.py +32 -261
  175. DIRAC/WorkloadManagementSystem/Client/JobState/JobState.py +6 -0
  176. DIRAC/WorkloadManagementSystem/Client/JobStateUpdateClient.py +3 -0
  177. DIRAC/WorkloadManagementSystem/Client/JobStatus.py +8 -152
  178. DIRAC/WorkloadManagementSystem/Client/PoolXMLSlice.py +12 -19
  179. DIRAC/WorkloadManagementSystem/Client/SandboxStoreClient.py +25 -38
  180. DIRAC/WorkloadManagementSystem/Client/WMSClient.py +2 -3
  181. DIRAC/WorkloadManagementSystem/Client/test/Test_Client_DownloadInputData.py +29 -0
  182. DIRAC/WorkloadManagementSystem/ConfigTemplate.cfg +4 -8
  183. DIRAC/WorkloadManagementSystem/DB/JobDB.py +89 -132
  184. DIRAC/WorkloadManagementSystem/DB/JobDB.sql +8 -8
  185. DIRAC/WorkloadManagementSystem/DB/JobDBUtils.py +18 -147
  186. DIRAC/WorkloadManagementSystem/DB/JobLoggingDB.py +19 -6
  187. DIRAC/WorkloadManagementSystem/DB/JobParametersDB.py +9 -9
  188. DIRAC/WorkloadManagementSystem/DB/PilotAgentsDB.py +16 -5
  189. DIRAC/WorkloadManagementSystem/DB/PilotAgentsDB.sql +3 -3
  190. DIRAC/WorkloadManagementSystem/DB/SandboxMetadataDB.py +44 -82
  191. DIRAC/WorkloadManagementSystem/DB/StatusUtils.py +125 -0
  192. DIRAC/WorkloadManagementSystem/DB/tests/Test_JobDB.py +1 -1
  193. DIRAC/WorkloadManagementSystem/DB/tests/Test_StatusUtils.py +28 -0
  194. DIRAC/WorkloadManagementSystem/Executor/JobSanity.py +5 -4
  195. DIRAC/WorkloadManagementSystem/Executor/JobScheduling.py +4 -0
  196. DIRAC/WorkloadManagementSystem/FutureClient/JobStateUpdateClient.py +75 -33
  197. DIRAC/WorkloadManagementSystem/JobWrapper/JobWrapper.py +22 -11
  198. DIRAC/WorkloadManagementSystem/JobWrapper/JobWrapperTemplate.py +9 -10
  199. DIRAC/WorkloadManagementSystem/JobWrapper/test/Test_JobWrapper.py +60 -10
  200. DIRAC/WorkloadManagementSystem/JobWrapper/test/Test_JobWrapperTemplate.py +4 -0
  201. DIRAC/WorkloadManagementSystem/Service/JobManagerHandler.py +33 -154
  202. DIRAC/WorkloadManagementSystem/Service/JobMonitoringHandler.py +5 -323
  203. DIRAC/WorkloadManagementSystem/Service/JobStateUpdateHandler.py +0 -16
  204. DIRAC/WorkloadManagementSystem/Service/PilotManagerHandler.py +6 -103
  205. DIRAC/WorkloadManagementSystem/Service/SandboxStoreHandler.py +7 -53
  206. DIRAC/WorkloadManagementSystem/Service/WMSAdministratorHandler.py +16 -79
  207. DIRAC/WorkloadManagementSystem/Service/WMSUtilities.py +4 -18
  208. DIRAC/WorkloadManagementSystem/Utilities/JobModel.py +28 -209
  209. DIRAC/WorkloadManagementSystem/Utilities/JobParameters.py +65 -3
  210. DIRAC/WorkloadManagementSystem/Utilities/JobStatusUtility.py +2 -64
  211. DIRAC/WorkloadManagementSystem/Utilities/ParametricJob.py +7 -171
  212. DIRAC/WorkloadManagementSystem/Utilities/PilotCStoJSONSynchronizer.py +73 -7
  213. DIRAC/WorkloadManagementSystem/Utilities/PilotWrapper.py +41 -11
  214. DIRAC/WorkloadManagementSystem/Utilities/RemoteRunner.py +16 -0
  215. DIRAC/WorkloadManagementSystem/Utilities/Utils.py +36 -1
  216. DIRAC/WorkloadManagementSystem/Utilities/jobAdministration.py +15 -0
  217. DIRAC/WorkloadManagementSystem/Utilities/test/Test_JobModel.py +1 -15
  218. DIRAC/WorkloadManagementSystem/Utilities/test/Test_ParametricJob.py +45 -128
  219. DIRAC/WorkloadManagementSystem/Utilities/test/Test_PilotWrapper.py +16 -0
  220. DIRAC/WorkloadManagementSystem/scripts/dirac_jobexec.py +7 -2
  221. DIRAC/WorkloadManagementSystem/scripts/dirac_wms_pilot_job_info.py +1 -1
  222. DIRAC/__init__.py +62 -60
  223. DIRAC/tests/Utilities/testJobDefinitions.py +22 -28
  224. {DIRAC-9.0.0a42.dist-info → dirac-9.0.7.dist-info}/METADATA +8 -5
  225. {DIRAC-9.0.0a42.dist-info → dirac-9.0.7.dist-info}/RECORD +229 -228
  226. {DIRAC-9.0.0a42.dist-info → dirac-9.0.7.dist-info}/WHEEL +1 -1
  227. {DIRAC-9.0.0a42.dist-info → dirac-9.0.7.dist-info}/entry_points.txt +0 -3
  228. DIRAC/Core/Utilities/test/Test_List.py +0 -150
  229. DIRAC/Core/Utilities/test/Test_Time.py +0 -88
  230. DIRAC/Resources/Computing/PilotBundle.py +0 -70
  231. DIRAC/TransformationSystem/scripts/dirac_transformation_archive.py +0 -30
  232. DIRAC/TransformationSystem/scripts/dirac_transformation_clean.py +0 -30
  233. DIRAC/TransformationSystem/scripts/dirac_transformation_remove_output.py +0 -30
  234. DIRAC/WorkloadManagementSystem/Utilities/test/Test_JobManager.py +0 -58
  235. {DIRAC-9.0.0a42.dist-info → dirac-9.0.7.dist-info/licenses}/LICENSE +0 -0
  236. {DIRAC-9.0.0a42.dist-info → dirac-9.0.7.dist-info}/top_level.txt +0 -0
@@ -1,138 +1,55 @@
1
- """ This is a test of the parametric job generation tools
2
- """
1
+ """ This is a test of the parametric job generation tools"""
3
2
  # pylint: disable= missing-docstring
4
3
 
5
4
  import pytest
6
5
 
6
+ # Test imports from DIRAC to verify backward compatibility
7
7
  from DIRAC.WorkloadManagementSystem.Utilities.ParametricJob import generateParametricJobs, getParameterVectorLength
8
8
  from DIRAC.Core.Utilities.ClassAd.ClassAdLight import ClassAd
9
9
 
10
- TEST_JDL_NO_PARAMETERS = """
11
- [
12
- Executable = "my_executable";
13
- Arguments = "%s";
14
- JobName = "Test_%n";
15
- ]
16
- """
17
10
 
18
- TEST_JDL_SIMPLE = """
19
- [
20
- Executable = "my_executable";
21
- Arguments = "%s";
22
- JobName = "Test_%n";
23
- Parameters = { "a", "b", "c" }
24
- ]
25
- """
26
-
27
- TEST_JDL_SIMPLE_BUNCH = """
28
- [
29
- Executable = "my_executable";
30
- Arguments = "%s";
31
- JobName = "Test_%n";
32
- Parameters = 3;
33
- ParameterStart = 5;
34
- ]
35
- """
36
-
37
- TEST_JDL_SIMPLE_PROGRESSION = """
38
- [
39
- Executable = "my_executable";
40
- Arguments = "%s";
41
- JobName = "Test_%n";
42
- Parameters = 3;
43
- ParameterStart = 1;
44
- ParameterStep = 1;
45
- ParameterFactor = 2;
46
- ]
47
- """
48
-
49
- TEST_JDL_MULTI = """
50
- [
51
- Executable = "my_executable";
52
- Arguments = "%(A)s %(B)s";
53
- JobName = "Test_%n";
54
- Parameters = 3;
55
- ParameterStart.A = 1;
56
- ParameterStep.A = 1;
57
- ParameterFactor.A = 2;
58
- Parameters.B = { "a","b","c" };
59
- ]
60
- """
61
-
62
- TEST_JDL_MULTI_BAD = """
63
- [
64
- Executable = "my_executable";
65
- Arguments = "%(A)s %(B)s";
66
- JobName = "Test_%n";
67
- Parameters = 3;
68
- ParameterStart.A = 1;
69
- ParameterStep.A = 1;
70
- ParameterFactor.A = 2;
71
- Parameters.B = { "a","b","c","d" };
72
- ]
73
- """
74
-
75
-
76
- @pytest.mark.parametrize(
77
- "jdl, expectedArguments",
78
- [
79
- (TEST_JDL_SIMPLE, ["a", "b", "c"]),
80
- (TEST_JDL_SIMPLE_BUNCH, ["5", "5", "5"]),
81
- (TEST_JDL_SIMPLE_PROGRESSION, ["1", "3", "7"]),
82
- (TEST_JDL_MULTI, ["1 a", "3 b", "7 c"]),
83
- (TEST_JDL_NO_PARAMETERS, []),
84
- ],
85
- )
86
- def test_getParameterVectorLength_successful(jdl: str, expectedArguments: list[str]):
11
+ def test_backward_compatibility_import():
12
+ """Test that imports from DIRAC still work (backward compatibility)"""
87
13
  # Arrange
88
- jobDescription = ClassAd(jdl)
89
-
90
- # Act
91
- result = getParameterVectorLength(jobDescription)
92
-
93
- # Assert
94
- assert result["OK"], result["Message"]
95
- if expectedArguments:
96
- assert result["Value"] == len(expectedArguments)
97
- else:
98
- assert result["Value"] == None
99
-
100
-
101
- @pytest.mark.parametrize("jdl", [TEST_JDL_MULTI_BAD])
102
- def test_getParameterVectorLength_unsuccessful(jdl: str):
103
- # Arrange
104
- jobDescription = ClassAd(jdl)
105
-
106
- # Act
107
- result = getParameterVectorLength(jobDescription)
108
-
109
- # Assert
110
- assert not result["OK"], result["Value"]
111
-
112
-
113
- @pytest.mark.parametrize(
114
- "jdl, expectedArguments",
14
+ jdl = """
115
15
  [
116
- (TEST_JDL_SIMPLE, ["a", "b", "c"]),
117
- (TEST_JDL_SIMPLE_BUNCH, ["5", "5", "5"]),
118
- (TEST_JDL_SIMPLE_PROGRESSION, ["1", "3", "7"]),
119
- (TEST_JDL_MULTI, ["1 a", "3 b", "7 c"]),
120
- ],
121
- )
122
- def test_generateParametricJobs(jdl: str, expectedArguments: list[str]):
123
- # Arrange
124
- parametricJobDescription = ClassAd(jdl)
125
-
126
- # Act
127
- result = generateParametricJobs(parametricJobDescription)
128
-
129
- # Assert
130
- assert result["OK"], result["Message"]
131
- assert result["Value"]
132
- jobDescList = result["Value"]
133
- assert len(jobDescList) == len(expectedArguments)
134
-
135
- for i in range(len(jobDescList)):
136
- jobDescription = ClassAd(jobDescList[i])
137
- assert jobDescription.getAttributeString("JobName") == f"Test_{i}"
138
- assert jobDescription.getAttributeString("Arguments") == expectedArguments[i]
16
+ Executable = "my_executable";
17
+ Arguments = "%s";
18
+ JobName = "Test_%n";
19
+ Parameters = { "a", "b", "c" }
20
+ ]
21
+ """
22
+
23
+ # Act - Test that we can import and use the functions from DIRAC
24
+ jobDescription = ClassAd(jdl)
25
+ vector_result = getParameterVectorLength(jobDescription)
26
+ generate_result = generateParametricJobs(jobDescription)
27
+
28
+ # Assert - Verify functions work correctly
29
+ assert vector_result["OK"]
30
+ assert vector_result["Value"] == 3
31
+ assert generate_result["OK"]
32
+ assert len(generate_result["Value"]) == 3
33
+
34
+
35
+ # Import and run the comprehensive tests from DIRACCommon to avoid duplication
36
+ # This ensures the DIRAC re-exports work with the full test suite
37
+ try:
38
+ from DIRACCommon.tests.WorkloadManagementSystem.Utilities.test_ParametricJob import (
39
+ test_getParameterVectorLength_successful,
40
+ test_getParameterVectorLength_unsuccessful,
41
+ test_generateParametricJobs,
42
+ )
43
+
44
+ # Re-export the DIRACCommon tests so they run as part of DIRAC test suite
45
+ # This validates that the backward compatibility imports work correctly
46
+ __all__ = [
47
+ "test_backward_compatibility_import",
48
+ "test_getParameterVectorLength_successful",
49
+ "test_getParameterVectorLength_unsuccessful",
50
+ "test_generateParametricJobs",
51
+ ]
52
+
53
+ except ImportError:
54
+ # If DIRACCommon tests can't be imported, just run the backward compatibility test
55
+ __all__ = ["test_backward_compatibility_import"]
@@ -136,3 +136,19 @@ def test_scriptPilot3_4():
136
136
  assert 'os.environ["someName"]="someValue"' in res
137
137
  assert "lhcb-portal.cern.ch" in res
138
138
  assert """locations += ["file:/cvmfs/dirac.egi.eu/pilot"]""" in res
139
+
140
+
141
+ def test_scriptPilot3_5():
142
+ """test script creation"""
143
+ res = pilotWrapperScript(
144
+ pilotFilesCompressedEncodedDict={"proxy": "thisIsSomeProxy"},
145
+ pilotOptions="-l LHCb --architectureScript=dirac-architecture --CVMFS_locations=/cvmfs/lhcb.cern.ch -e LHCb -N atlasce1.lnf.infn.it -Q condor -n LCG.Frascati.it --wnVO=lhcb --architectureScript=dirac-apptainer-exec dirac-architecture -o lbRunOnly",
146
+ envVariables={"someName": "someValue", "someMore": "oneMore"},
147
+ location="lhcb-portal.cern.ch",
148
+ CVMFS_locations=[],
149
+ )
150
+ assert 'os.environ["someName"]="someValue"' in res
151
+ assert "lhcb-portal.cern.ch" in res
152
+ assert """locations += ["file:/cvmfs/dirac.egi.eu/pilot"]""" in res
153
+ assert "dirac-architecture" in res
154
+ assert "dirac-apptainer-exec dirac-architecture" in res
@@ -9,6 +9,7 @@ import sys
9
9
 
10
10
  import DIRAC
11
11
  from DIRAC.Core.Base.Script import Script
12
+ from DIRAC.Core.Utilities.ReturnValues import S_ERROR
12
13
 
13
14
 
14
15
  @Script()
@@ -87,9 +88,13 @@ def main():
87
88
  parDict[name] = value
88
89
 
89
90
  gLogger.debug("PYTHONPATH:\n%s" % ("\n".join(sys.path)))
90
- jobExec = jobexec(jobXMLfile, parDict)
91
+ try:
92
+ jobExec = jobexec(jobXMLfile, parDict)
93
+ except Exception as e:
94
+ gLogger.exception("Workflow execution failed")
95
+ jobExec = S_ERROR(f"Workflow execution failed: {e}")
91
96
  if not jobExec["OK"]:
92
- gLogger.debug("Workflow execution finished with errors, exiting")
97
+ gLogger.notice("Workflow execution finished with errors, exiting")
93
98
  if jobExec["Errno"]:
94
99
  sys.exit(jobExec["Errno"])
95
100
  else:
@@ -19,7 +19,7 @@ def _stringInList(subStr, sList):
19
19
 
20
20
  @Script()
21
21
  def main():
22
- parameters = ["OwnerDN", "StartExecTime", "EndExecTime"]
22
+ parameters = ["Owner", "StartExecTime", "EndExecTime"]
23
23
  Script.registerSwitch("", "Parameters=", " List of strings to be matched by job parameters or attributes")
24
24
  # Registering arguments will automatically add their description to the help menu
25
25
  Script.registerArgument(["PilotID: Grid ID of the pilot"])
DIRAC/__init__.py CHANGED
@@ -1,68 +1,68 @@
1
1
  """
2
- DIRAC - Distributed Infrastructure with Remote Agent Control
3
-
4
- The distributed data production and analysis system of LHCb and other VOs.
5
-
6
- DIRAC is a software framework for distributed computing which
7
- allows to integrate various computing resources in a single
8
- system. At the same time it integrates all kinds of computing
9
- activities like Monte Carlo simulations, data processing, or
10
- final user analysis.
11
-
12
- It is build as number of cooperating systems:
13
- - Accounting
14
- - Configuration
15
- - Core
16
- - Base
17
- - Security
18
- - Utilities
19
- - Workflow
20
- - Framework
21
- - RequestManagement
22
- - Resources
23
- - Transformation
24
-
25
- Which are used by other system providing functionality to
26
- the end user:
27
- - DataManagement
28
- - Interfaces
29
- - ResourceStatus
30
- - StorageManagement
31
- - WorkloadManagement
32
-
33
- It defines the following data members:
34
- - version: DIRAC version string
35
-
36
- - errorMail: mail address for important errors
37
- - alarmMail: mail address for important alarms
38
-
39
- It loads Modules from :
40
- - DIRAC.Core.Utililies
41
-
42
- It loads:
43
- - S_OK: OK return structure
44
- - S_ERROR: ERROR return structure
45
- - gLogger: global Logger object
46
- - gConfig: global Config object
47
-
48
- It defines the following functions:
49
- - abort: aborts execution
50
- - exit: finish execution using callbacks
51
- - siteName: returns DIRAC name for current site
52
-
53
- - getPlatform(): DIRAC platform string for current host
54
- - getPlatformTuple(): DIRAC platform tuple for current host
2
+ DIRAC - Distributed Infrastructure with Remote Agent Control
3
+
4
+ The distributed data production and analysis system of LHCb and other VOs.
5
+
6
+ DIRAC is a software framework for distributed computing which
7
+ allows to integrate various computing resources in a single
8
+ system. At the same time it integrates all kinds of computing
9
+ activities like Monte Carlo simulations, data processing, or
10
+ final user analysis.
11
+
12
+ It is build as number of cooperating systems:
13
+ - Accounting
14
+ - Configuration
15
+ - Core
16
+ - Base
17
+ - Security
18
+ - Utilities
19
+ - Workflow
20
+ - Framework
21
+ - RequestManagement
22
+ - Resources
23
+ - Transformation
24
+
25
+ Which are used by other system providing functionality to
26
+ the end user:
27
+ - DataManagement
28
+ - Interfaces
29
+ - ResourceStatus
30
+ - StorageManagement
31
+ - WorkloadManagement
32
+
33
+ It defines the following data members:
34
+ - version: DIRAC version string
35
+
36
+ - errorMail: mail address for important errors
37
+ - alarmMail: mail address for important alarms
38
+
39
+ It loads Modules from :
40
+ - DIRAC.Core.Utililies
41
+
42
+ It loads:
43
+ - S_OK: OK return structure
44
+ - S_ERROR: ERROR return structure
45
+ - gLogger: global Logger object
46
+ - gConfig: global Config object
47
+
48
+ It defines the following functions:
49
+ - abort: aborts execution
50
+ - exit: finish execution using callbacks
51
+ - siteName: returns DIRAC name for current site
52
+
53
+ - getPlatform(): DIRAC platform string for current host
54
+ - getPlatformTuple(): DIRAC platform tuple for current host
55
55
 
56
56
  """
57
- import os
57
+
58
58
  import importlib.metadata
59
+ import os
59
60
  import re
60
61
  import sys
61
- import warnings
62
+ from collections.abc import Sequence
62
63
  from pkgutil import extend_path
63
64
  from typing import Any, Optional, Union
64
65
 
65
-
66
66
  __path__ = extend_path(__path__, __name__)
67
67
 
68
68
  # Set the environment variable such that openssl accepts proxy cert
@@ -181,7 +181,7 @@ def initialize(
181
181
  log_level: Optional[LogLevel] = None,
182
182
  extra_config_files: Optional[list[os.PathLike]] = None,
183
183
  extra_config: Optional[dict[str, Any]] = None,
184
- host_credentials: Optional[tuple[os.PathLike, os.PathLike]] = None,
184
+ host_credentials: Optional[Union[Sequence[os.PathLike], bool]] = None,
185
185
  ) -> None:
186
186
  """Prepare the global state so that DIRAC clients can be used.
187
187
 
@@ -227,8 +227,9 @@ def initialize(
227
227
 
228
228
  if host_credentials:
229
229
  gConfigurationData.setOptionInCFG("/DIRAC/Security/UseServerCertificate", "yes")
230
- gConfigurationData.setOptionInCFG("/DIRAC/Security/CertFile", str(host_credentials[0]))
231
- gConfigurationData.setOptionInCFG("/DIRAC/Security/KeyFile", str(host_credentials[1]))
230
+ if isinstance(host_credentials, Sequence) and len(host_credentials) == 2:
231
+ gConfigurationData.setOptionInCFG("/DIRAC/Security/CertFile", str(host_credentials[0]))
232
+ gConfigurationData.setOptionInCFG("/DIRAC/Security/KeyFile", str(host_credentials[1]))
232
233
 
233
234
  if log_level:
234
235
  gLogger.setLevel(log_level)
@@ -237,7 +238,7 @@ def initialize(
237
238
  log_level = getattr(LogLevel, gLogger.getLevel())
238
239
  gLogger.setLevel(LogLevel.ALWAYS)
239
240
  try:
240
- returnValueOrRaise(localCfg.initialize())
241
+ returnValueOrRaise(localCfg.initialize(requireSuccessfulSync=require_auth))
241
242
  finally:
242
243
  # Restore the pre-existing log level
243
244
  gLogger.setLevel(log_level)
@@ -317,5 +318,6 @@ def extension_metadata():
317
318
  "priority": 0,
318
319
  "setups": {
319
320
  "DIRAC-Certification": "https://lbcertifdirac70.cern.ch:9135/Configuration/Server",
321
+ "DIRAC-CI": "https://server:9135/Configuration/Server",
320
322
  },
321
323
  }
@@ -59,7 +59,7 @@ def helloWorld():
59
59
  try:
60
60
  J.setInputSandbox([find_all("exe-script.py", ".", "DIRAC/tests/Workflow")[0]])
61
61
  except IndexError: # we are in Jenkins
62
- J.setInputSandbox([find_all("exe-script.py", os.environ["WORKSPACE"], "DIRAC/tests/Workflow")[0]])
62
+ J.setInputSandbox([find_all("exe-script.py", "/home/dirac", "DIRAC/tests/Workflow")[0]])
63
63
  J.setExecutable("exe-script.py", "", "helloWorld.log")
64
64
  return endOfAllJobs(J)
65
65
 
@@ -74,7 +74,7 @@ def helloWorldJenkins():
74
74
  try:
75
75
  J.setInputSandbox([find_all("exe-script.py", ".", "DIRAC/tests/Workflow")[0]])
76
76
  except IndexError: # we are in Jenkins
77
- J.setInputSandbox([find_all("exe-script.py", os.environ["WORKSPACE"], "DIRAC/tests/Workflow")[0]])
77
+ J.setInputSandbox([find_all("exe-script.py", "/home/dirac", "DIRAC/tests/Workflow")[0]])
78
78
  J.setExecutable("exe-script.py", "", "helloWorld.log")
79
79
  J.setDestination("DIRAC.Jenkins.ch")
80
80
  return endOfAllJobs(J)
@@ -90,9 +90,7 @@ def helloWorld_input():
90
90
  try:
91
91
  J.setInputSandbox([find_all("exe-script-with-input.py", ".", "DIRAC/tests/Workflow")[0]])
92
92
  except IndexError: # we are in Jenkins
93
- J.setInputSandbox(
94
- [find_all("exe-script-with-input.py", os.environ["WORKSPACE"], "DIRAC/tests/Workflow")[0]]
95
- )
93
+ J.setInputSandbox([find_all("exe-script-with-input.py", "/home/dirac", "DIRAC/tests/Workflow")[0]])
96
94
  J.setExecutable("exe-script-with-input.py", "", "helloWorld.log")
97
95
  return endOfAllJobs(J)
98
96
 
@@ -108,11 +106,7 @@ def helloWorld_input_single():
108
106
  J.setInputSandbox([find_all("exe-script-with-input-single-location.py", ".", "DIRAC/tests/Workflow")[0]])
109
107
  except IndexError: # we are in Jenkins
110
108
  J.setInputSandbox(
111
- [
112
- find_all(
113
- "exe-script-with-input-single-location.py", os.environ["WORKSPACE"], "DIRAC/tests/Workflow"
114
- )[0]
115
- ]
109
+ [find_all("exe-script-with-input-single-location.py", "/home/dirac", "DIRAC/tests/Workflow")[0]]
116
110
  )
117
111
  J.setExecutable("exe-script-with-input-single-location.py", "", "helloWorld.log")
118
112
  return endOfAllJobs(J)
@@ -128,7 +122,7 @@ def helloWorldCERN():
128
122
  try:
129
123
  J.setInputSandbox([find_all("exe-script.py", ".", "DIRAC/tests/Workflow")[0]])
130
124
  except IndexError: # we are in Jenkins
131
- J.setInputSandbox([find_all("exe-script.py", os.environ["WORKSPACE"], "DIRAC/tests/Workflow")[0]])
125
+ J.setInputSandbox([find_all("exe-script.py", "/home/dirac", "DIRAC/tests/Workflow")[0]])
132
126
  J.setExecutable("exe-script.py", "", "helloWorld.log")
133
127
  J.setDestination("LCG.CERN.cern")
134
128
  return endOfAllJobs(J)
@@ -144,7 +138,7 @@ def helloWorldNCBJ():
144
138
  try:
145
139
  J.setInputSandbox([find_all("exe-script.py", ".", "DIRAC/tests/Workflow")[0]])
146
140
  except IndexError: # we are in Jenkins
147
- J.setInputSandbox([find_all("exe-script.py", os.environ["WORKSPACE"], "DIRAC/tests/Workflow")[0]])
141
+ J.setInputSandbox([find_all("exe-script.py", "/home/dirac", "DIRAC/tests/Workflow")[0]])
148
142
  J.setExecutable("exe-script.py", "", "helloWorld.log")
149
143
  J.setDestination("LCG.NCBJ.pl")
150
144
  return endOfAllJobs(J)
@@ -160,7 +154,7 @@ def helloWorldGRIDKA():
160
154
  try:
161
155
  J.setInputSandbox([find_all("exe-script.py", ".", "DIRAC/tests/Workflow")[0]])
162
156
  except IndexError: # we are in Jenkins
163
- J.setInputSandbox([find_all("exe-script.py", os.environ["WORKSPACE"], "DIRAC/tests/Workflow")[0]])
157
+ J.setInputSandbox([find_all("exe-script.py", "/home/dirac", "DIRAC/tests/Workflow")[0]])
164
158
  J.setExecutable("exe-script.py", "", "helloWorld.log")
165
159
  J.setDestination("LCG.GRIDKA.de")
166
160
  return endOfAllJobs(J)
@@ -176,7 +170,7 @@ def helloWorldRAL():
176
170
  try:
177
171
  J.setInputSandbox([find_all("exe-script.py", ".", "DIRAC/tests/Workflow")[0]])
178
172
  except IndexError: # we are in Jenkins
179
- J.setInputSandbox([find_all("exe-script.py", os.environ["WORKSPACE"], "DIRAC/tests/Workflow")[0]])
173
+ J.setInputSandbox([find_all("exe-script.py", "/home/dirac", "DIRAC/tests/Workflow")[0]])
180
174
  J.setExecutable("exe-script.py", "", "helloWorld.log")
181
175
  J.setDestination("LCG.RAL.uk")
182
176
  return endOfAllJobs(J)
@@ -192,7 +186,7 @@ def helloWorldPIC():
192
186
  try:
193
187
  J.setInputSandbox([find_all("exe-script.py", ".", "DIRAC/tests/Workflow")[0]])
194
188
  except IndexError: # we are in Jenkins
195
- J.setInputSandbox([find_all("exe-script.py", os.environ["WORKSPACE"], "DIRAC/tests/Workflow")[0]])
189
+ J.setInputSandbox([find_all("exe-script.py", "/home/dirac", "DIRAC/tests/Workflow")[0]])
196
190
  J.setExecutable("exe-script.py", "", "helloWorld.log")
197
191
  J.setDestination("LCG.PIC.es")
198
192
  return endOfAllJobs(J)
@@ -208,7 +202,7 @@ def helloWorldRALPP():
208
202
  try:
209
203
  J.setInputSandbox([find_all("exe-script.py", ".", "DIRAC/tests/Workflow")[0]])
210
204
  except IndexError: # we are in Jenkins
211
- J.setInputSandbox([find_all("exe-script.py", os.environ["WORKSPACE"], "DIRAC/tests/Workflow")[0]])
205
+ J.setInputSandbox([find_all("exe-script.py", "/home/dirac", "DIRAC/tests/Workflow")[0]])
212
206
  J.setExecutable("exe-script.py", "", "helloWorld.log")
213
207
  J.setDestination("LCG.UKI-SOUTHGRID-RALPP.uk")
214
208
  return endOfAllJobs(J)
@@ -224,7 +218,7 @@ def helloWorldGRIF():
224
218
  try:
225
219
  J.setInputSandbox([find_all("exe-script.py", ".", "DIRAC/tests/Workflow")[0]])
226
220
  except IndexError: # we are in Jenkins
227
- J.setInputSandbox([find_all("exe-script.py", os.environ["WORKSPACE"], "DIRAC/tests/Workflow")[0]])
221
+ J.setInputSandbox([find_all("exe-script.py", "/home/dirac", "DIRAC/tests/Workflow")[0]])
228
222
  J.setExecutable("exe-script.py", "", "helloWorld.log")
229
223
  J.setDestination("LCG.GRIF.fr")
230
224
  return endOfAllJobs(J)
@@ -240,7 +234,7 @@ def helloWorldSSHBatch():
240
234
  try:
241
235
  J.setInputSandbox([find_all("exe-script.py", ".", "DIRAC/tests/Workflow")[0]])
242
236
  except IndexError: # we are in Jenkins
243
- J.setInputSandbox([find_all("exe-script.py", os.environ["WORKSPACE"], "DIRAC/tests/Workflow")[0]])
237
+ J.setInputSandbox([find_all("exe-script.py", "/home/dirac", "DIRAC/tests/Workflow")[0]])
244
238
  J.setExecutable("exe-script.py", "", "helloWorld.log")
245
239
  J.setDestination("DIRAC.Jenkins_SSHBatch.ch")
246
240
  return endOfAllJobs(J)
@@ -256,7 +250,7 @@ def helloWorldARM():
256
250
  try:
257
251
  J.setInputSandbox([find_all("exe-script.py", ".", "DIRAC/tests/Workflow")[0]])
258
252
  except IndexError: # we are in Jenkins
259
- J.setInputSandbox([find_all("exe-script.py", os.environ["WORKSPACE"], "DIRAC/tests/Workflow")[0]])
253
+ J.setInputSandbox([find_all("exe-script.py", "/home/dirac", "DIRAC/tests/Workflow")[0]])
260
254
  J.setExecutable("exe-script.py", "", "helloWorld.log")
261
255
  J.setDestination("DIRAC.ARM.ch")
262
256
  return endOfAllJobs(J)
@@ -272,7 +266,7 @@ def helloWorldCloudCE():
272
266
  try:
273
267
  J.setInputSandbox([find_all("exe-script.py", ".", "DIRAC/tests/Workflow")[0]])
274
268
  except IndexError: # we are in Jenkins
275
- J.setInputSandbox([find_all("exe-script.py", os.environ["WORKSPACE"], "DIRAC/tests/Workflow")[0]])
269
+ J.setInputSandbox([find_all("exe-script.py", "/home/dirac", "DIRAC/tests/Workflow")[0]])
276
270
  J.setExecutable("exe-script.py", "", "helloWorldCloud.log")
277
271
  J.setDestinationCE("stealthcloud.ic.ac.uk", "LCG.UKI-LT2-IC-HEP.uk")
278
272
  return endOfAllJobs(J)
@@ -288,7 +282,7 @@ def mpJob():
288
282
  try:
289
283
  J.setInputSandbox([find_all("mpTest.py", ".", "DIRAC/tests/Utilities")[0]])
290
284
  except IndexError: # we are in Jenkins
291
- J.setInputSandbox([find_all("mpTest.py", os.environ["WORKSPACE"], "DIRAC/tests/Utilities")[0]])
285
+ J.setInputSandbox([find_all("mpTest.py", "/home/dirac", "DIRAC/tests/Utilities")[0]])
292
286
 
293
287
  J.setExecutable("mpTest.py")
294
288
  J.setTag(["4Processors", "MultiProcessor"])
@@ -305,7 +299,7 @@ def mp3Job():
305
299
  try:
306
300
  J.setInputSandbox([find_all("mpTest.py", ".", "DIRAC/tests/Utilities")[0]])
307
301
  except IndexError: # we are in Jenkins
308
- J.setInputSandbox([find_all("mpTest.py", os.environ["WORKSPACE"], "DIRAC/tests/Utilities")[0]])
302
+ J.setInputSandbox([find_all("mpTest.py", "/home/dirac", "DIRAC/tests/Utilities")[0]])
309
303
 
310
304
  J.setExecutable("mpTest.py")
311
305
  J.setNumberOfProcessors(numberOfProcessors=3)
@@ -322,7 +316,7 @@ def min2max4Job():
322
316
  try:
323
317
  J.setInputSandbox([find_all("mpTest.py", ".", "DIRAC/tests/Utilities")[0]])
324
318
  except IndexError: # we are in Jenkins
325
- J.setInputSandbox([find_all("mpTest.py", os.environ["WORKSPACE"], "DIRAC/tests/Utilities")[0]])
319
+ J.setInputSandbox([find_all("mpTest.py", "/home/dirac", "DIRAC/tests/Utilities")[0]])
326
320
 
327
321
  J.setExecutable("mpTest.py")
328
322
  J.setNumberOfProcessors(minNumberOfProcessors=2, maxNumberOfProcessors=4)
@@ -339,7 +333,7 @@ def wholeNodeJob():
339
333
  try:
340
334
  J.setInputSandbox([find_all("mpTest.py", ".", "DIRAC/tests/Utilities")[0]])
341
335
  except IndexError: # we are in Jenkins
342
- J.setInputSandbox([find_all("mpTest.py", os.environ["WORKSPACE"], "DIRAC/tests/Utilities")[0]])
336
+ J.setInputSandbox([find_all("mpTest.py", "/home/dirac", "DIRAC/tests/Utilities")[0]])
343
337
 
344
338
  J.setExecutable("mpTest.py")
345
339
  J.setTag(["WholeNode", "MultiProcessor"])
@@ -356,7 +350,7 @@ def parametricJob():
356
350
  try:
357
351
  J.setInputSandbox([find_all("exe-script.py", ".", "DIRAC/tests/Workflow")[0]])
358
352
  except IndexError: # we are in Jenkins
359
- J.setInputSandbox([find_all("exe-script.py", os.environ["WORKSPACE"], "DIRAC/tests/Workflow")[0]])
353
+ J.setInputSandbox([find_all("exe-script.py", "/home/dirac", "DIRAC/tests/Workflow")[0]])
360
354
  J.setParameterSequence("args", ["one", "two", "three"])
361
355
  J.setParameterSequence("iargs", [1, 2, 3])
362
356
  J.setExecutable("exe-script.py", arguments=": testing %(args)s %(iargs)s", logFile="helloWorld_%n.log")
@@ -373,7 +367,7 @@ def parametricJobInputData():
373
367
  try:
374
368
  J.setInputSandbox([find_all("exe-script.py", ".", "DIRAC/tests/Workflow")[0]])
375
369
  except IndexError: # we are in Jenkins
376
- J.setInputSandbox([find_all("exe-script.py", os.environ["WORKSPACE"], "DIRAC/tests/Workflow")[0]])
370
+ J.setInputSandbox([find_all("exe-script.py", "/home/dirac", "DIRAC/tests/Workflow")[0]])
377
371
  J.setParameterSequence("args", ["one", "two", "three"])
378
372
  J.setParameterSequence("iargs", [1, 2, 3])
379
373
  J.setParameterSequence(
@@ -404,7 +398,7 @@ def jobWithOutput():
404
398
  try:
405
399
  inp2 = [find_all("exe-script.py", ".", "DIRAC/tests/Workflow")[0]]
406
400
  except IndexError: # we are in Jenkins
407
- inp2 = [find_all("exe-script.py", os.environ["WORKSPACE"], "DIRAC/tests/Workflow")[0]]
401
+ inp2 = [find_all("exe-script.py", "/home/dirac", "DIRAC/tests/Workflow")[0]]
408
402
  J.setInputSandbox(inp1 + inp2)
409
403
  J.setExecutable("exe-script.py", "", "helloWorld.log")
410
404
  J.setOutputData([timenow + "testFileUpload.txt"])
@@ -434,7 +428,7 @@ def jobWithOutputs():
434
428
  try:
435
429
  inp2 = [find_all("exe-script.py", ".", "DIRAC/tests/Workflow")[0]]
436
430
  except IndexError: # we are in Jenkins
437
- inp2 = [find_all("exe-script.py", os.environ["WORKSPACE"], "DIRAC/tests/Workflow")[0]]
431
+ inp2 = [find_all("exe-script.py", "/home/dirac", "DIRAC/tests/Workflow")[0]]
438
432
  J.setInputSandbox(inp1 + inp2)
439
433
  J.setExecutable("exe-script.py", "", "helloWorld.log")
440
434
  J.setOutputData([timenow + "testFileUpload.txt"], outputSE=["RAL-SE", "IN2P3-SE"])
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: DIRAC
3
- Version: 9.0.0a42
3
+ Version: 9.0.7
4
4
  Summary: DIRAC is an interware, meaning a software framework for distributed computing.
5
5
  Home-page: https://github.com/DIRACGrid/DIRAC/
6
6
  License: GPL-3.0-only
@@ -19,8 +19,10 @@ Requires-Dist: cachetools
19
19
  Requires-Dist: certifi
20
20
  Requires-Dist: cwltool
21
21
  Requires-Dist: diraccfg
22
- Requires-Dist: diracx-client>=v0.0.1a18
23
- Requires-Dist: diracx-core>=v0.0.1a18
22
+ Requires-Dist: DIRACCommon==v9.0.7
23
+ Requires-Dist: diracx-client>=v0.0.1
24
+ Requires-Dist: diracx-core>=v0.0.1
25
+ Requires-Dist: diracx-cli>=v0.0.1
24
26
  Requires-Dist: db12
25
27
  Requires-Dist: fts3
26
28
  Requires-Dist: gfal2-python
@@ -39,12 +41,12 @@ Requires-Dist: python-dateutil
39
41
  Requires-Dist: pytz
40
42
  Requires-Dist: requests
41
43
  Requires-Dist: rucio-clients>=34.4.2
42
- Requires-Dist: setuptools
43
44
  Requires-Dist: sqlalchemy
44
45
  Requires-Dist: typing_extensions>=4.3.0
45
46
  Requires-Dist: Authlib>=1.0.0.a2
46
47
  Requires-Dist: pyjwt
47
48
  Requires-Dist: dominate
49
+ Requires-Dist: zstandard
48
50
  Provides-Extra: server
49
51
  Requires-Dist: CMRESHandler; extra == "server"
50
52
  Requires-Dist: opensearch-py; extra == "server"
@@ -71,6 +73,7 @@ Requires-Dist: pytest-cov; extra == "testing"
71
73
  Requires-Dist: pytest-mock; extra == "testing"
72
74
  Requires-Dist: pytest-rerunfailures; extra == "testing"
73
75
  Requires-Dist: pycodestyle; extra == "testing"
76
+ Dynamic: license-file
74
77
 
75
78
  .. -*- mode: rst -*-
76
79