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.
- DIRAC/AccountingSystem/Client/AccountingCLI.py +0 -140
- DIRAC/AccountingSystem/Client/DataStoreClient.py +0 -13
- DIRAC/AccountingSystem/Client/Types/BaseAccountingType.py +0 -7
- DIRAC/AccountingSystem/ConfigTemplate.cfg +0 -5
- DIRAC/AccountingSystem/Service/DataStoreHandler.py +0 -72
- DIRAC/ConfigurationSystem/Client/Helpers/CSGlobals.py +0 -9
- DIRAC/ConfigurationSystem/Client/Helpers/Registry.py +38 -26
- DIRAC/ConfigurationSystem/Client/Helpers/Resources.py +11 -43
- DIRAC/ConfigurationSystem/Client/Helpers/test/Test_Helpers.py +0 -16
- DIRAC/ConfigurationSystem/Client/LocalConfiguration.py +14 -8
- DIRAC/ConfigurationSystem/Client/PathFinder.py +47 -8
- DIRAC/ConfigurationSystem/Client/SyncPlugins/CERNLDAPSyncPlugin.py +4 -1
- DIRAC/ConfigurationSystem/Client/VOMS2CSSynchronizer.py +32 -19
- DIRAC/ConfigurationSystem/Client/test/Test_PathFinder.py +41 -1
- DIRAC/ConfigurationSystem/private/RefresherBase.py +4 -2
- DIRAC/Core/Base/API.py +4 -7
- DIRAC/Core/Base/SQLAlchemyDB.py +1 -0
- DIRAC/Core/DISET/ServiceReactor.py +11 -3
- DIRAC/Core/DISET/private/BaseClient.py +1 -2
- DIRAC/Core/DISET/private/Transports/M2SSLTransport.py +9 -7
- DIRAC/Core/DISET/private/Transports/SSL/M2Utils.py +3 -1
- DIRAC/Core/LCG/GOCDBClient.py +5 -7
- DIRAC/Core/Security/DiracX.py +31 -17
- DIRAC/Core/Security/IAMService.py +5 -10
- DIRAC/Core/Security/Locations.py +27 -18
- DIRAC/Core/Security/ProxyInfo.py +9 -5
- DIRAC/Core/Security/VOMSService.py +2 -4
- DIRAC/Core/Security/m2crypto/X509Certificate.py +4 -6
- DIRAC/Core/Security/m2crypto/asn1_utils.py +17 -5
- DIRAC/Core/Security/test/test_diracx_token_from_pem.py +161 -0
- DIRAC/Core/Tornado/Client/ClientSelector.py +4 -1
- DIRAC/Core/Tornado/Server/TornadoService.py +1 -1
- DIRAC/Core/Utilities/CGroups2.py +328 -0
- DIRAC/Core/Utilities/ClassAd/ClassAdLight.py +4 -290
- DIRAC/Core/Utilities/DErrno.py +5 -309
- DIRAC/Core/Utilities/Extensions.py +10 -1
- DIRAC/Core/Utilities/File.py +1 -1
- DIRAC/Core/Utilities/Graphs/GraphData.py +1 -1
- DIRAC/Core/Utilities/Graphs/GraphUtilities.py +6 -1
- DIRAC/Core/Utilities/JDL.py +1 -195
- DIRAC/Core/Utilities/List.py +1 -124
- DIRAC/Core/Utilities/MySQL.py +103 -99
- DIRAC/Core/Utilities/Os.py +32 -1
- DIRAC/Core/Utilities/Platform.py +2 -107
- DIRAC/Core/Utilities/Proxy.py +0 -4
- DIRAC/Core/Utilities/ReturnValues.py +7 -252
- DIRAC/Core/Utilities/StateMachine.py +12 -178
- DIRAC/Core/Utilities/Subprocess.py +35 -14
- DIRAC/Core/Utilities/TimeUtilities.py +10 -253
- DIRAC/Core/Utilities/test/Test_JDL.py +0 -3
- DIRAC/Core/Utilities/test/Test_Profiler.py +20 -20
- DIRAC/Core/scripts/dirac_agent.py +1 -1
- DIRAC/Core/scripts/dirac_apptainer_exec.py +72 -46
- DIRAC/Core/scripts/dirac_configure.py +1 -3
- DIRAC/Core/scripts/dirac_install_db.py +24 -6
- DIRAC/Core/scripts/dirac_platform.py +1 -92
- DIRAC/DataManagementSystem/Agent/FTS3Agent.py +8 -7
- DIRAC/DataManagementSystem/Agent/RequestOperations/RemoveFile.py +7 -6
- DIRAC/DataManagementSystem/Client/FTS3Job.py +71 -34
- DIRAC/DataManagementSystem/DB/FTS3DB.py +7 -3
- DIRAC/DataManagementSystem/DB/FileCatalogComponents/DatasetManager/DatasetManager.py +1 -1
- DIRAC/DataManagementSystem/DB/FileCatalogDB.sql +9 -9
- DIRAC/DataManagementSystem/DB/FileCatalogWithFkAndPsDB.sql +9 -9
- DIRAC/DataManagementSystem/Utilities/DMSHelpers.py +6 -2
- DIRAC/DataManagementSystem/scripts/dirac_admin_allow_se.py +13 -8
- DIRAC/DataManagementSystem/scripts/dirac_admin_ban_se.py +13 -8
- DIRAC/DataManagementSystem/scripts/dirac_dms_create_moving_request.py +2 -0
- DIRAC/DataManagementSystem/scripts/dirac_dms_protocol_matrix.py +0 -1
- DIRAC/FrameworkSystem/Client/BundleDeliveryClient.py +2 -7
- DIRAC/FrameworkSystem/Client/ComponentInstaller.py +9 -4
- DIRAC/FrameworkSystem/Client/ProxyManagerClient.py +5 -2
- DIRAC/FrameworkSystem/Client/SystemAdministratorClientCLI.py +11 -6
- DIRAC/FrameworkSystem/ConfigTemplate.cfg +2 -0
- DIRAC/FrameworkSystem/DB/AuthDB.py +3 -3
- DIRAC/FrameworkSystem/DB/InstalledComponentsDB.py +4 -4
- DIRAC/FrameworkSystem/DB/ProxyDB.py +11 -3
- DIRAC/FrameworkSystem/DB/TokenDB.py +1 -1
- DIRAC/FrameworkSystem/Service/ProxyManagerHandler.py +8 -6
- DIRAC/FrameworkSystem/Utilities/MonitoringUtilities.py +2 -19
- DIRAC/FrameworkSystem/Utilities/TokenManagementUtilities.py +3 -2
- DIRAC/FrameworkSystem/Utilities/diracx.py +36 -14
- DIRAC/FrameworkSystem/private/authorization/AuthServer.py +2 -2
- DIRAC/FrameworkSystem/scripts/dirac_admin_update_pilot.py +18 -11
- DIRAC/FrameworkSystem/scripts/dirac_login.py +2 -2
- DIRAC/FrameworkSystem/scripts/dirac_proxy_init.py +7 -8
- DIRAC/Interfaces/API/Dirac.py +27 -15
- DIRAC/Interfaces/API/DiracAdmin.py +45 -17
- DIRAC/Interfaces/API/Job.py +9 -13
- DIRAC/Interfaces/scripts/dirac_admin_allow_site.py +12 -18
- DIRAC/Interfaces/scripts/dirac_admin_ban_site.py +12 -10
- DIRAC/Interfaces/scripts/dirac_admin_get_site_mask.py +4 -13
- DIRAC/Interfaces/scripts/dirac_admin_reset_job.py +3 -6
- DIRAC/Interfaces/scripts/dirac_wms_job_parameters.py +0 -1
- DIRAC/MonitoringSystem/Client/Types/WMSHistory.py +4 -0
- DIRAC/MonitoringSystem/Client/WebAppClient.py +26 -0
- DIRAC/MonitoringSystem/ConfigTemplate.cfg +9 -0
- DIRAC/MonitoringSystem/DB/MonitoringDB.py +6 -25
- DIRAC/MonitoringSystem/Service/MonitoringHandler.py +0 -33
- DIRAC/MonitoringSystem/Service/WebAppHandler.py +599 -0
- DIRAC/MonitoringSystem/private/MainReporter.py +0 -3
- DIRAC/ProductionSystem/DB/ProductionDB.sql +4 -4
- DIRAC/ProductionSystem/scripts/dirac_prod_get.py +2 -2
- DIRAC/ProductionSystem/scripts/dirac_prod_get_all.py +2 -2
- DIRAC/ProductionSystem/scripts/dirac_prod_get_trans.py +2 -3
- DIRAC/RequestManagementSystem/Agent/RequestExecutingAgent.py +8 -6
- DIRAC/RequestManagementSystem/Agent/RequestOperations/ForwardDISET.py +2 -14
- DIRAC/RequestManagementSystem/Client/ReqClient.py +66 -13
- DIRAC/RequestManagementSystem/ConfigTemplate.cfg +6 -6
- DIRAC/RequestManagementSystem/DB/RequestDB.py +10 -5
- DIRAC/RequestManagementSystem/DB/test/RMSTestScenari.py +2 -0
- DIRAC/RequestManagementSystem/private/RequestValidator.py +40 -46
- DIRAC/ResourceStatusSystem/Client/SiteStatus.py +4 -2
- DIRAC/ResourceStatusSystem/Command/FreeDiskSpaceCommand.py +3 -1
- DIRAC/ResourceStatusSystem/DB/ResourceManagementDB.py +8 -8
- DIRAC/ResourceStatusSystem/DB/ResourceStatusDB.py +2 -2
- DIRAC/ResourceStatusSystem/Utilities/CSHelpers.py +2 -31
- DIRAC/ResourceStatusSystem/scripts/dirac_rss_set_status.py +30 -12
- DIRAC/Resources/Catalog/RucioFileCatalogClient.py +195 -1
- DIRAC/Resources/Catalog/test/Test_RucioFileCatalogClient.py +181 -0
- DIRAC/Resources/Computing/AREXComputingElement.py +25 -8
- DIRAC/Resources/Computing/BatchSystems/Condor.py +126 -108
- DIRAC/Resources/Computing/BatchSystems/SLURM.py +5 -1
- DIRAC/Resources/Computing/BatchSystems/test/Test_SLURM.py +46 -0
- DIRAC/Resources/Computing/ComputingElement.py +1 -1
- DIRAC/Resources/Computing/HTCondorCEComputingElement.py +44 -44
- DIRAC/Resources/Computing/InProcessComputingElement.py +4 -2
- DIRAC/Resources/Computing/LocalComputingElement.py +1 -18
- DIRAC/Resources/Computing/SSHBatchComputingElement.py +1 -17
- DIRAC/Resources/Computing/SSHComputingElement.py +1 -18
- DIRAC/Resources/Computing/SingularityComputingElement.py +19 -5
- DIRAC/Resources/Computing/test/Test_HTCondorCEComputingElement.py +67 -49
- DIRAC/Resources/Computing/test/Test_PoolComputingElement.py +2 -1
- DIRAC/Resources/IdProvider/CheckInIdProvider.py +13 -0
- DIRAC/Resources/IdProvider/IdProviderFactory.py +11 -3
- DIRAC/Resources/MessageQueue/StompMQConnector.py +1 -1
- DIRAC/Resources/Storage/GFAL2_StorageBase.py +24 -15
- DIRAC/Resources/Storage/OccupancyPlugins/WLCGAccountingHTTPJson.py +1 -3
- DIRAC/Resources/Storage/StorageBase.py +4 -2
- DIRAC/Resources/Storage/StorageElement.py +6 -7
- DIRAC/StorageManagementSystem/DB/StorageManagementDB.sql +2 -2
- DIRAC/TransformationSystem/Agent/TaskManagerAgentBase.py +10 -16
- DIRAC/TransformationSystem/Agent/TransformationAgent.py +22 -1
- DIRAC/TransformationSystem/Agent/TransformationCleaningAgent.py +16 -16
- DIRAC/TransformationSystem/Client/TaskManager.py +2 -4
- DIRAC/TransformationSystem/Client/Transformation.py +6 -7
- DIRAC/TransformationSystem/Client/TransformationClient.py +21 -11
- DIRAC/TransformationSystem/Client/Utilities.py +9 -0
- DIRAC/TransformationSystem/DB/TransformationDB.py +11 -14
- DIRAC/TransformationSystem/DB/TransformationDB.sql +9 -9
- DIRAC/TransformationSystem/Service/TransformationManagerHandler.py +0 -333
- DIRAC/TransformationSystem/Utilities/ReplicationCLIParameters.py +3 -3
- DIRAC/TransformationSystem/Utilities/TransformationInfo.py +7 -5
- DIRAC/TransformationSystem/scripts/dirac_production_runjoblocal.py +2 -4
- DIRAC/TransformationSystem/test/Test_TransformationInfo.py +22 -15
- DIRAC/TransformationSystem/test/Test_replicationTransformation.py +5 -6
- DIRAC/Workflow/Modules/test/Test_Modules.py +5 -0
- DIRAC/WorkloadManagementSystem/Agent/JobAgent.py +38 -26
- DIRAC/WorkloadManagementSystem/Agent/JobCleaningAgent.py +12 -8
- DIRAC/WorkloadManagementSystem/Agent/PilotSyncAgent.py +4 -3
- DIRAC/WorkloadManagementSystem/Agent/PushJobAgent.py +13 -13
- DIRAC/WorkloadManagementSystem/Agent/SiteDirector.py +18 -14
- DIRAC/WorkloadManagementSystem/Agent/StalledJobAgent.py +18 -51
- DIRAC/WorkloadManagementSystem/Agent/StatesAccountingAgent.py +41 -1
- DIRAC/WorkloadManagementSystem/Agent/test/Test_Agent_JobAgent.py +45 -4
- DIRAC/WorkloadManagementSystem/Agent/test/Test_Agent_JobCleaningAgent.py +7 -9
- DIRAC/WorkloadManagementSystem/Agent/test/Test_Agent_PushJobAgent.py +1 -0
- DIRAC/WorkloadManagementSystem/Agent/test/Test_Agent_SiteDirector.py +9 -2
- DIRAC/WorkloadManagementSystem/Agent/test/Test_Agent_StalledJobAgent.py +4 -5
- DIRAC/WorkloadManagementSystem/Client/DownloadInputData.py +9 -9
- DIRAC/WorkloadManagementSystem/Client/InputDataResolution.py +6 -6
- DIRAC/WorkloadManagementSystem/Client/JobMonitoringClient.py +10 -11
- DIRAC/WorkloadManagementSystem/Client/JobReport.py +1 -1
- DIRAC/WorkloadManagementSystem/Client/JobState/CachedJobState.py +3 -0
- DIRAC/WorkloadManagementSystem/Client/JobState/JobManifest.py +32 -261
- DIRAC/WorkloadManagementSystem/Client/JobState/JobState.py +6 -0
- DIRAC/WorkloadManagementSystem/Client/JobStateUpdateClient.py +3 -0
- DIRAC/WorkloadManagementSystem/Client/JobStatus.py +8 -152
- DIRAC/WorkloadManagementSystem/Client/PoolXMLSlice.py +12 -19
- DIRAC/WorkloadManagementSystem/Client/SandboxStoreClient.py +25 -38
- DIRAC/WorkloadManagementSystem/Client/WMSClient.py +2 -3
- DIRAC/WorkloadManagementSystem/Client/test/Test_Client_DownloadInputData.py +29 -0
- DIRAC/WorkloadManagementSystem/ConfigTemplate.cfg +4 -8
- DIRAC/WorkloadManagementSystem/DB/JobDB.py +89 -132
- DIRAC/WorkloadManagementSystem/DB/JobDB.sql +8 -8
- DIRAC/WorkloadManagementSystem/DB/JobDBUtils.py +18 -147
- DIRAC/WorkloadManagementSystem/DB/JobLoggingDB.py +19 -6
- DIRAC/WorkloadManagementSystem/DB/JobParametersDB.py +9 -9
- DIRAC/WorkloadManagementSystem/DB/PilotAgentsDB.py +16 -5
- DIRAC/WorkloadManagementSystem/DB/PilotAgentsDB.sql +3 -3
- DIRAC/WorkloadManagementSystem/DB/SandboxMetadataDB.py +44 -82
- DIRAC/WorkloadManagementSystem/DB/StatusUtils.py +125 -0
- DIRAC/WorkloadManagementSystem/DB/tests/Test_JobDB.py +1 -1
- DIRAC/WorkloadManagementSystem/DB/tests/Test_StatusUtils.py +28 -0
- DIRAC/WorkloadManagementSystem/Executor/JobSanity.py +5 -4
- DIRAC/WorkloadManagementSystem/Executor/JobScheduling.py +4 -0
- DIRAC/WorkloadManagementSystem/FutureClient/JobStateUpdateClient.py +75 -33
- DIRAC/WorkloadManagementSystem/JobWrapper/JobWrapper.py +22 -11
- DIRAC/WorkloadManagementSystem/JobWrapper/JobWrapperTemplate.py +9 -10
- DIRAC/WorkloadManagementSystem/JobWrapper/test/Test_JobWrapper.py +60 -10
- DIRAC/WorkloadManagementSystem/JobWrapper/test/Test_JobWrapperTemplate.py +4 -0
- DIRAC/WorkloadManagementSystem/Service/JobManagerHandler.py +33 -154
- DIRAC/WorkloadManagementSystem/Service/JobMonitoringHandler.py +5 -323
- DIRAC/WorkloadManagementSystem/Service/JobStateUpdateHandler.py +0 -16
- DIRAC/WorkloadManagementSystem/Service/PilotManagerHandler.py +6 -103
- DIRAC/WorkloadManagementSystem/Service/SandboxStoreHandler.py +7 -53
- DIRAC/WorkloadManagementSystem/Service/WMSAdministratorHandler.py +16 -79
- DIRAC/WorkloadManagementSystem/Service/WMSUtilities.py +4 -18
- DIRAC/WorkloadManagementSystem/Utilities/JobModel.py +28 -209
- DIRAC/WorkloadManagementSystem/Utilities/JobParameters.py +65 -3
- DIRAC/WorkloadManagementSystem/Utilities/JobStatusUtility.py +2 -64
- DIRAC/WorkloadManagementSystem/Utilities/ParametricJob.py +7 -171
- DIRAC/WorkloadManagementSystem/Utilities/PilotCStoJSONSynchronizer.py +73 -7
- DIRAC/WorkloadManagementSystem/Utilities/PilotWrapper.py +41 -11
- DIRAC/WorkloadManagementSystem/Utilities/RemoteRunner.py +16 -0
- DIRAC/WorkloadManagementSystem/Utilities/Utils.py +36 -1
- DIRAC/WorkloadManagementSystem/Utilities/jobAdministration.py +15 -0
- DIRAC/WorkloadManagementSystem/Utilities/test/Test_JobModel.py +1 -15
- DIRAC/WorkloadManagementSystem/Utilities/test/Test_ParametricJob.py +45 -128
- DIRAC/WorkloadManagementSystem/Utilities/test/Test_PilotWrapper.py +16 -0
- DIRAC/WorkloadManagementSystem/scripts/dirac_jobexec.py +7 -2
- DIRAC/WorkloadManagementSystem/scripts/dirac_wms_pilot_job_info.py +1 -1
- DIRAC/__init__.py +62 -60
- DIRAC/tests/Utilities/testJobDefinitions.py +22 -28
- {DIRAC-9.0.0a42.dist-info → dirac-9.0.7.dist-info}/METADATA +8 -5
- {DIRAC-9.0.0a42.dist-info → dirac-9.0.7.dist-info}/RECORD +229 -228
- {DIRAC-9.0.0a42.dist-info → dirac-9.0.7.dist-info}/WHEEL +1 -1
- {DIRAC-9.0.0a42.dist-info → dirac-9.0.7.dist-info}/entry_points.txt +0 -3
- DIRAC/Core/Utilities/test/Test_List.py +0 -150
- DIRAC/Core/Utilities/test/Test_Time.py +0 -88
- DIRAC/Resources/Computing/PilotBundle.py +0 -70
- DIRAC/TransformationSystem/scripts/dirac_transformation_archive.py +0 -30
- DIRAC/TransformationSystem/scripts/dirac_transformation_clean.py +0 -30
- DIRAC/TransformationSystem/scripts/dirac_transformation_remove_output.py +0 -30
- DIRAC/WorkloadManagementSystem/Utilities/test/Test_JobManager.py +0 -58
- {DIRAC-9.0.0a42.dist-info → dirac-9.0.7.dist-info/licenses}/LICENSE +0 -0
- {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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
]
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
#
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
assert
|
|
131
|
-
assert
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
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
|
-
|
|
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.
|
|
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 = ["
|
|
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
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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
|
-
|
|
57
|
+
|
|
58
58
|
import importlib.metadata
|
|
59
|
+
import os
|
|
59
60
|
import re
|
|
60
61
|
import sys
|
|
61
|
-
import
|
|
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[
|
|
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
|
-
|
|
231
|
-
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: DIRAC
|
|
3
|
-
Version: 9.0.
|
|
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:
|
|
23
|
-
Requires-Dist: diracx-
|
|
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
|
|