panda-server-source 0.8.0__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 (375) hide show
  1. panda_server_source-0.8.0.dist-info/METADATA +55 -0
  2. panda_server_source-0.8.0.dist-info/RECORD +375 -0
  3. panda_server_source-0.8.0.dist-info/WHEEL +4 -0
  4. panda_server_source-0.8.0.dist-info/licenses/LICENSE.txt +202 -0
  5. pandajedi/__init__.py +0 -0
  6. pandajedi/jedibrokerage/AtlasAnalJobBroker.py +2343 -0
  7. pandajedi/jedibrokerage/AtlasBrokerUtils.py +1292 -0
  8. pandajedi/jedibrokerage/AtlasProdJobBroker.py +2064 -0
  9. pandajedi/jedibrokerage/AtlasProdTaskBroker.py +629 -0
  10. pandajedi/jedibrokerage/GenJobBroker.py +381 -0
  11. pandajedi/jedibrokerage/JobBrokerBase.py +133 -0
  12. pandajedi/jedibrokerage/TaskBrokerBase.py +15 -0
  13. pandajedi/jedibrokerage/__init__.py +0 -0
  14. pandajedi/jediconfig/__init__.py +0 -0
  15. pandajedi/jediconfig/jedi_config.py +40 -0
  16. pandajedi/jedicore/FactoryBase.py +182 -0
  17. pandajedi/jedicore/Interaction.py +433 -0
  18. pandajedi/jedicore/JediDBProxy.py +56 -0
  19. pandajedi/jedicore/JediDBProxyPool.py +37 -0
  20. pandajedi/jedicore/JediDBSchemaInfo.py +17 -0
  21. pandajedi/jedicore/JediException.py +13 -0
  22. pandajedi/jedicore/JediTaskBuffer.py +984 -0
  23. pandajedi/jedicore/JediTaskBufferInterface.py +50 -0
  24. pandajedi/jedicore/MsgWrapper.py +124 -0
  25. pandajedi/jedicore/ProcessUtils.py +34 -0
  26. pandajedi/jedicore/SiteCandidate.py +90 -0
  27. pandajedi/jedicore/ThreadUtils.py +205 -0
  28. pandajedi/jedicore/__init__.py +0 -0
  29. pandajedi/jediddm/AtlasDDMClient.py +1708 -0
  30. pandajedi/jediddm/DDMClientBase.py +16 -0
  31. pandajedi/jediddm/DDMInterface.py +83 -0
  32. pandajedi/jediddm/GenDDMClient.py +17 -0
  33. pandajedi/jediddm/__init__.py +0 -0
  34. pandajedi/jedidog/AtlasAnalWatchDog.py +648 -0
  35. pandajedi/jedidog/AtlasDataCarouselWatchDog.py +189 -0
  36. pandajedi/jedidog/AtlasDataLocalityUpdaterWatchDog.py +215 -0
  37. pandajedi/jedidog/AtlasProdWatchDog.py +443 -0
  38. pandajedi/jedidog/AtlasQueueFillerWatchDog.py +800 -0
  39. pandajedi/jedidog/AtlasTaskWithholderWatchDog.py +245 -0
  40. pandajedi/jedidog/AtlasWorkflowManagerWatchDog.py +63 -0
  41. pandajedi/jedidog/GenWatchDog.py +21 -0
  42. pandajedi/jedidog/JumboWatchDog.py +147 -0
  43. pandajedi/jedidog/TypicalWatchDogBase.py +122 -0
  44. pandajedi/jedidog/WatchDogBase.py +53 -0
  45. pandajedi/jedidog/__init__.py +0 -0
  46. pandajedi/jediexec/reniceJEDI.py +25 -0
  47. pandajedi/jedigen/AtlasTaskGenerator.py +110 -0
  48. pandajedi/jedigen/TaskGeneratorBase.py +15 -0
  49. pandajedi/jedigen/__init__.py +0 -0
  50. pandajedi/jedimsgprocessor/__init__.py +0 -0
  51. pandajedi/jedimsgprocessor/ai_parameter_adjuster_msg_processor +71 -0
  52. pandajedi/jedimsgprocessor/atlas_idds_msg_processor.py +66 -0
  53. pandajedi/jedimsgprocessor/base_msg_processor.py +33 -0
  54. pandajedi/jedimsgprocessor/forwarding_msg_processor.py +29 -0
  55. pandajedi/jedimsgprocessor/hpo_msg_processor.py +93 -0
  56. pandajedi/jedimsgprocessor/jedi_contents_feeder_msg_processor.py +63 -0
  57. pandajedi/jedimsgprocessor/jedi_job_generator_msg_processor.py +185 -0
  58. pandajedi/jedimsgprocessor/jedi_post_processor_msg_processor.py +82 -0
  59. pandajedi/jedimsgprocessor/kafka_msg_processor.py +44 -0
  60. pandajedi/jedimsgprocessor/panda_callback_msg_processor.py +182 -0
  61. pandajedi/jedimsgprocessor/panda_to_jedi_msg_processor.py +74 -0
  62. pandajedi/jedimsgprocessor/processing_msg_processor.py +134 -0
  63. pandajedi/jedimsgprocessor/status_report_msg_processor.py +129 -0
  64. pandajedi/jedimsgprocessor/tape_carousel_msg_processor.py +118 -0
  65. pandajedi/jedimsgprocessor/workflow_manager_msg_processor.py +89 -0
  66. pandajedi/jediorder/ContentsFeeder.py +785 -0
  67. pandajedi/jediorder/JediDaemon.py +27 -0
  68. pandajedi/jediorder/JediKnight.py +55 -0
  69. pandajedi/jediorder/JediMaster.py +238 -0
  70. pandajedi/jediorder/JediMsgProcessor.py +32 -0
  71. pandajedi/jediorder/JobBroker.py +33 -0
  72. pandajedi/jediorder/JobGenerator.py +2763 -0
  73. pandajedi/jediorder/JobSplitter.py +308 -0
  74. pandajedi/jediorder/JobThrottler.py +28 -0
  75. pandajedi/jediorder/PostProcessor.py +166 -0
  76. pandajedi/jediorder/TaskBroker.py +268 -0
  77. pandajedi/jediorder/TaskCommando.py +334 -0
  78. pandajedi/jediorder/TaskGenerator.py +17 -0
  79. pandajedi/jediorder/TaskRefiner.py +611 -0
  80. pandajedi/jediorder/TaskSetupper.py +17 -0
  81. pandajedi/jediorder/WatchDog.py +79 -0
  82. pandajedi/jediorder/__init__.py +0 -0
  83. pandajedi/jedipprocess/AtlasAnalPostProcessor.py +404 -0
  84. pandajedi/jedipprocess/AtlasPostProcessorUtils.py +50 -0
  85. pandajedi/jedipprocess/AtlasProdPostProcessor.py +178 -0
  86. pandajedi/jedipprocess/GenPostProcessor.py +35 -0
  87. pandajedi/jedipprocess/MailTemplates.py +185 -0
  88. pandajedi/jedipprocess/PostProcessorBase.py +269 -0
  89. pandajedi/jedipprocess/__init__.py +0 -0
  90. pandajedi/jedirefine/AtlasAnalTaskRefiner.py +259 -0
  91. pandajedi/jedirefine/AtlasProdTaskRefiner.py +162 -0
  92. pandajedi/jedirefine/GenTaskRefiner.py +61 -0
  93. pandajedi/jedirefine/RefinerUtils.py +154 -0
  94. pandajedi/jedirefine/TaskRefinerBase.py +996 -0
  95. pandajedi/jedirefine/__init__.py +0 -0
  96. pandajedi/jedisetup/AtlasTaskSetupper.py +309 -0
  97. pandajedi/jedisetup/GenTaskSetupper.py +16 -0
  98. pandajedi/jedisetup/SimpleTaskSetupper.py +152 -0
  99. pandajedi/jedisetup/TaskSetupperBase.py +15 -0
  100. pandajedi/jedisetup/__init__.py +0 -0
  101. pandajedi/jeditest/SchemaChecker.py +41 -0
  102. pandajedi/jeditest/addContWoSoTask.py +54 -0
  103. pandajedi/jeditest/addDataCarouselRequest.py +47 -0
  104. pandajedi/jeditest/addEventServiceTask.py +101 -0
  105. pandajedi/jeditest/addHpoTask.py +81 -0
  106. pandajedi/jeditest/addIDDSStageInRequest.py +56 -0
  107. pandajedi/jeditest/addNonAtlasTask.py +71 -0
  108. pandajedi/jeditest/addNonAtlasTaskEnc.py +64 -0
  109. pandajedi/jeditest/addTestTask.py +124 -0
  110. pandajedi/jeditest/addTestTaskParamToDEFT.py +70 -0
  111. pandajedi/jeditest/addTestTaskWithMerger.py +97 -0
  112. pandajedi/jeditest/brokerTest.py +78 -0
  113. pandajedi/jeditest/cancelDataCarouselRequest.py +35 -0
  114. pandajedi/jeditest/contentsFeederTest.py +28 -0
  115. pandajedi/jeditest/contentsFeederTestWithTask.py +18 -0
  116. pandajedi/jeditest/ddmTest.py +4 -0
  117. pandajedi/jeditest/jobGenForOneTask.py +38 -0
  118. pandajedi/jeditest/jobGeneratorTest.py +43 -0
  119. pandajedi/jeditest/jobSplitterTest.py +104 -0
  120. pandajedi/jeditest/jobThrottlerTest.py +22 -0
  121. pandajedi/jeditest/msgProcessorTest.py +9 -0
  122. pandajedi/jeditest/postProcessorTest.py +18 -0
  123. pandajedi/jeditest/resubmitDataCarouselRequest.py +35 -0
  124. pandajedi/jeditest/resubmitTaskParam.py +20 -0
  125. pandajedi/jeditest/taskBrokerTest.py +22 -0
  126. pandajedi/jeditest/taskBrokerTestWithTask.py +38 -0
  127. pandajedi/jeditest/taskBufferTest.py +5 -0
  128. pandajedi/jeditest/taskCommandoTest.py +28 -0
  129. pandajedi/jeditest/taskRefinerTest.py +30 -0
  130. pandajedi/jeditest/testOneTaskToRefine.py +49 -0
  131. pandajedi/jeditest/testOneTaskToTaskBroker.py +42 -0
  132. pandajedi/jeditest/testPandaDDMMap.py +62 -0
  133. pandajedi/jeditest/updateDataCarouselRequestParams.py +50 -0
  134. pandajedi/jeditest/watchDogTest.py +25 -0
  135. pandajedi/jeditest/workQueueTest.py +22 -0
  136. pandajedi/jedithrottle/AtlasAnalJobThrottler.py +19 -0
  137. pandajedi/jedithrottle/AtlasProdJobThrottler.py +18 -0
  138. pandajedi/jedithrottle/GenJobThrottler.py +26 -0
  139. pandajedi/jedithrottle/JobThrottlerBase.py +496 -0
  140. pandajedi/jedithrottle/__init__.py +0 -0
  141. pandaserver/__init__.py +0 -0
  142. pandaserver/api/__init__.py +0 -0
  143. pandaserver/api/v1/__init__.py +0 -0
  144. pandaserver/api/v1/common.py +339 -0
  145. pandaserver/api/v1/credential_management_api.py +372 -0
  146. pandaserver/api/v1/data_carousel_api.py +264 -0
  147. pandaserver/api/v1/event_api.py +269 -0
  148. pandaserver/api/v1/file_server_api.py +942 -0
  149. pandaserver/api/v1/harvester_api.py +445 -0
  150. pandaserver/api/v1/http_client.py +166 -0
  151. pandaserver/api/v1/idds_api.py +180 -0
  152. pandaserver/api/v1/job_api.py +463 -0
  153. pandaserver/api/v1/metaconfig_api.py +122 -0
  154. pandaserver/api/v1/pilot_api.py +895 -0
  155. pandaserver/api/v1/statistics_api.py +207 -0
  156. pandaserver/api/v1/system_api.py +186 -0
  157. pandaserver/api/v1/task_api.py +1520 -0
  158. pandaserver/api/v1/tests/__init__.py +0 -0
  159. pandaserver/api/v1/tests/credential_management_api_tests.py +116 -0
  160. pandaserver/api/v1/tests/data_carousel_api_tests.py +82 -0
  161. pandaserver/api/v1/tests/harvester_api_tests.py +188 -0
  162. pandaserver/api/v1/tests/idds_api_tests.py +45 -0
  163. pandaserver/api/v1/tests/job_api_tests.py +112 -0
  164. pandaserver/api/v1/tests/pilot_api_tests.py +154 -0
  165. pandaserver/api/v1/tests/statistics_api_tests.py +104 -0
  166. pandaserver/api/v1/tests/system_api_tests.py +58 -0
  167. pandaserver/api/v1/tests/task_api_tests.py +590 -0
  168. pandaserver/api/v1/version.py +2 -0
  169. pandaserver/api/v1/workflow_api.py +136 -0
  170. pandaserver/brokerage/SiteMapper.py +406 -0
  171. pandaserver/brokerage/__init__.py +0 -0
  172. pandaserver/brokerage/broker.py +272 -0
  173. pandaserver/config/__init__.py +0 -0
  174. pandaserver/config/config_utils.py +15 -0
  175. pandaserver/config/daemon_config.py +29 -0
  176. pandaserver/config/mcp_config.py +38 -0
  177. pandaserver/config/panda_config.py +233 -0
  178. pandaserver/configurator/Carbon.py +65 -0
  179. pandaserver/configurator/Configurator.py +908 -0
  180. pandaserver/configurator/__init__.py +0 -0
  181. pandaserver/configurator/aux.py +73 -0
  182. pandaserver/daemons/__init__.py +0 -0
  183. pandaserver/daemons/master.py +110 -0
  184. pandaserver/daemons/master_systemd.py +79 -0
  185. pandaserver/daemons/scripts/__init__.py +0 -0
  186. pandaserver/daemons/scripts/add_main.py +264 -0
  187. pandaserver/daemons/scripts/add_sub.py +221 -0
  188. pandaserver/daemons/scripts/cache_pilots.py +47 -0
  189. pandaserver/daemons/scripts/cache_schedconfig.py +286 -0
  190. pandaserver/daemons/scripts/carbon.py +50 -0
  191. pandaserver/daemons/scripts/configurator.py +94 -0
  192. pandaserver/daemons/scripts/copyArchive.py +1387 -0
  193. pandaserver/daemons/scripts/datasetManager.py +1154 -0
  194. pandaserver/daemons/scripts/dummy_test.py +25 -0
  195. pandaserver/daemons/scripts/evpPD2P.py +144 -0
  196. pandaserver/daemons/scripts/hs_scrapers.py +264 -0
  197. pandaserver/daemons/scripts/metric_collector.py +927 -0
  198. pandaserver/daemons/scripts/panda_activeusers_query.py +80 -0
  199. pandaserver/daemons/scripts/pilotStreaming.py +109 -0
  200. pandaserver/daemons/scripts/process_workflow_files_daemon.py +166 -0
  201. pandaserver/daemons/scripts/recover_lost_files_daemon.py +177 -0
  202. pandaserver/daemons/scripts/task_evaluator.py +405 -0
  203. pandaserver/daemons/scripts/tmpwatch.py +70 -0
  204. pandaserver/daemons/scripts/worker_synchronization.py +97 -0
  205. pandaserver/daemons/utils.py +753 -0
  206. pandaserver/dataservice/DataServiceUtils.py +323 -0
  207. pandaserver/dataservice/ErrorCode.py +25 -0
  208. pandaserver/dataservice/RecoverLostFilesCore.py +322 -0
  209. pandaserver/dataservice/__init__.py +0 -0
  210. pandaserver/dataservice/activator.py +79 -0
  211. pandaserver/dataservice/adder_atlas_plugin.py +1106 -0
  212. pandaserver/dataservice/adder_dummy_plugin.py +31 -0
  213. pandaserver/dataservice/adder_gen.py +954 -0
  214. pandaserver/dataservice/adder_plugin_base.py +27 -0
  215. pandaserver/dataservice/adder_result.py +75 -0
  216. pandaserver/dataservice/adder_simple_plugin.py +160 -0
  217. pandaserver/dataservice/closer.py +247 -0
  218. pandaserver/dataservice/closer_atlas_plugin.py +90 -0
  219. pandaserver/dataservice/ddm.py +1381 -0
  220. pandaserver/dataservice/ddm_handler.py +95 -0
  221. pandaserver/dataservice/dyn_data_distributer.py +824 -0
  222. pandaserver/dataservice/event_lookup_client_ei.py +77 -0
  223. pandaserver/dataservice/event_picker.py +268 -0
  224. pandaserver/dataservice/finisher.py +194 -0
  225. pandaserver/dataservice/setupper.py +225 -0
  226. pandaserver/dataservice/setupper_atlas_plugin.py +1851 -0
  227. pandaserver/dataservice/setupper_dummy_plugin.py +47 -0
  228. pandaserver/dataservice/setupper_plugin_base.py +67 -0
  229. pandaserver/jobdispatcher/DispatcherUtils.py +35 -0
  230. pandaserver/jobdispatcher/ErrorCode.py +19 -0
  231. pandaserver/jobdispatcher/JobDispatcher.py +1625 -0
  232. pandaserver/jobdispatcher/Protocol.py +443 -0
  233. pandaserver/jobdispatcher/Watcher.py +186 -0
  234. pandaserver/jobdispatcher/__init__.py +0 -0
  235. pandaserver/pandamcp/__init__.py +0 -0
  236. pandaserver/pandamcp/mcp_main.py +56 -0
  237. pandaserver/pandamcp/mcp_test_client.py +95 -0
  238. pandaserver/pandamcp/mcp_utils.py +74 -0
  239. pandaserver/proxycache/__init__.py +0 -0
  240. pandaserver/proxycache/panda_proxy_cache.py +240 -0
  241. pandaserver/proxycache/token_cache.py +141 -0
  242. pandaserver/server/.gacl +6 -0
  243. pandaserver/server/panda.py +539 -0
  244. pandaserver/srvcore/CoreUtils.py +572 -0
  245. pandaserver/srvcore/MailUtils.py +106 -0
  246. pandaserver/srvcore/__init__.py +0 -0
  247. pandaserver/srvcore/allowed_methods.py +100 -0
  248. pandaserver/srvcore/oidc_utils.py +152 -0
  249. pandaserver/srvcore/panda_request.py +196 -0
  250. pandaserver/srvcore/srv_msg_utils.py +42 -0
  251. pandaserver/taskbuffer/ConBridge.py +513 -0
  252. pandaserver/taskbuffer/DBProxyPool.py +95 -0
  253. pandaserver/taskbuffer/DataCarousel.py +3053 -0
  254. pandaserver/taskbuffer/DatasetSpec.py +137 -0
  255. pandaserver/taskbuffer/DdmSpec.py +201 -0
  256. pandaserver/taskbuffer/ErrorCode.py +87 -0
  257. pandaserver/taskbuffer/EventServiceUtils.py +396 -0
  258. pandaserver/taskbuffer/FileSpec.py +290 -0
  259. pandaserver/taskbuffer/GlobalShares.py +244 -0
  260. pandaserver/taskbuffer/HarvesterMetricsSpec.py +92 -0
  261. pandaserver/taskbuffer/Initializer.py +82 -0
  262. pandaserver/taskbuffer/InputChunk.py +1080 -0
  263. pandaserver/taskbuffer/JediCacheSpec.py +57 -0
  264. pandaserver/taskbuffer/JediDatasetSpec.py +588 -0
  265. pandaserver/taskbuffer/JediFileSpec.py +242 -0
  266. pandaserver/taskbuffer/JediTaskSpec.py +1687 -0
  267. pandaserver/taskbuffer/JobSpec.py +1006 -0
  268. pandaserver/taskbuffer/JobUtils.py +232 -0
  269. pandaserver/taskbuffer/NucleusSpec.py +116 -0
  270. pandaserver/taskbuffer/OraDBProxy.py +174 -0
  271. pandaserver/taskbuffer/PanDAMsgProcessor.py +8 -0
  272. pandaserver/taskbuffer/PandaDBSchemaInfo.py +18 -0
  273. pandaserver/taskbuffer/ParseJobXML.py +350 -0
  274. pandaserver/taskbuffer/PickleFileSpec.py +18 -0
  275. pandaserver/taskbuffer/PickleJobSpec.py +25 -0
  276. pandaserver/taskbuffer/PrioUtil.py +40 -0
  277. pandaserver/taskbuffer/ProcessGroups.py +111 -0
  278. pandaserver/taskbuffer/ResourceSpec.py +175 -0
  279. pandaserver/taskbuffer/SQLDumper.py +37 -0
  280. pandaserver/taskbuffer/SQLManager.py +60 -0
  281. pandaserver/taskbuffer/SiteSpec.py +304 -0
  282. pandaserver/taskbuffer/SupErrors.py +10 -0
  283. pandaserver/taskbuffer/TaskBuffer.py +2882 -0
  284. pandaserver/taskbuffer/TaskBufferInterface.py +163 -0
  285. pandaserver/taskbuffer/Utils.py +848 -0
  286. pandaserver/taskbuffer/WorkQueue.py +227 -0
  287. pandaserver/taskbuffer/WorkQueueMapper.py +203 -0
  288. pandaserver/taskbuffer/WorkerSpec.py +143 -0
  289. pandaserver/taskbuffer/WrappedCursor.py +487 -0
  290. pandaserver/taskbuffer/WrappedPickle.py +88 -0
  291. pandaserver/taskbuffer/WrappedPostgresConn.py +24 -0
  292. pandaserver/taskbuffer/__init__.py +0 -0
  293. pandaserver/taskbuffer/db_proxy_mods/OraDBProxy_structure.png +0 -0
  294. pandaserver/taskbuffer/db_proxy_mods/__init__.py +7 -0
  295. pandaserver/taskbuffer/db_proxy_mods/base_module.py +841 -0
  296. pandaserver/taskbuffer/db_proxy_mods/data_carousel_module.py +772 -0
  297. pandaserver/taskbuffer/db_proxy_mods/entity_module.py +3804 -0
  298. pandaserver/taskbuffer/db_proxy_mods/job_complex_module.py +5661 -0
  299. pandaserver/taskbuffer/db_proxy_mods/job_standalone_module.py +2640 -0
  300. pandaserver/taskbuffer/db_proxy_mods/metrics_module.py +874 -0
  301. pandaserver/taskbuffer/db_proxy_mods/misc_standalone_module.py +4272 -0
  302. pandaserver/taskbuffer/db_proxy_mods/task_complex_module.py +6172 -0
  303. pandaserver/taskbuffer/db_proxy_mods/task_event_module.py +4953 -0
  304. pandaserver/taskbuffer/db_proxy_mods/task_standalone_module.py +4999 -0
  305. pandaserver/taskbuffer/db_proxy_mods/task_utils_module.py +2063 -0
  306. pandaserver/taskbuffer/db_proxy_mods/worker_module.py +1944 -0
  307. pandaserver/taskbuffer/db_proxy_mods/workflow_module.py +832 -0
  308. pandaserver/taskbuffer/retryModule.py +552 -0
  309. pandaserver/taskbuffer/task_split_rules.py +308 -0
  310. pandaserver/taskbuffer/workflow_processor.py +249 -0
  311. pandaserver/taskbuffer/wrapped_oracle_conn.py +18 -0
  312. pandaserver/test/SchemaChecker.py +40 -0
  313. pandaserver/test/__init__.py +0 -0
  314. pandaserver/test/banUser.py +43 -0
  315. pandaserver/test/boostPrio.py +19 -0
  316. pandaserver/test/boostUser.py +35 -0
  317. pandaserver/test/callbackDDM.py +11 -0
  318. pandaserver/test/daod_on_demand.py +95 -0
  319. pandaserver/test/finishJob.py +184 -0
  320. pandaserver/test/finishTaskJEDI.py +11 -0
  321. pandaserver/test/getJobs.py +53 -0
  322. pandaserver/test/killJob.py +79 -0
  323. pandaserver/test/killJobLowPrio.py +99 -0
  324. pandaserver/test/killJobsInTask.py +56 -0
  325. pandaserver/test/killTask.py +80 -0
  326. pandaserver/test/killTaskJEDI.py +11 -0
  327. pandaserver/test/killUser.py +83 -0
  328. pandaserver/test/lsst/README.txt +7 -0
  329. pandaserver/test/lsst/lsstSubmit.py +139 -0
  330. pandaserver/test/lsst/lsstSubmitMERGEtest.py +141 -0
  331. pandaserver/test/lsst/lsstSubmitPhosim332.py +53 -0
  332. pandaserver/test/lsst/prepare-client-tarball-from-bigpanda-server.sh +41 -0
  333. pandaserver/test/reassignJobs.py +17 -0
  334. pandaserver/test/reassignSite.py +82 -0
  335. pandaserver/test/reassignTask.py +117 -0
  336. pandaserver/test/reassignWaiting.py +39 -0
  337. pandaserver/test/recoverLostFiles.py +7 -0
  338. pandaserver/test/reloadInputDS.py +51 -0
  339. pandaserver/test/sendCommandToJob.py +26 -0
  340. pandaserver/test/setDebugMode.py +38 -0
  341. pandaserver/test/setPriority.py +28 -0
  342. pandaserver/test/testEvgen.py +60 -0
  343. pandaserver/test/testEvgen17.py +58 -0
  344. pandaserver/test/testG4sim.py +81 -0
  345. pandaserver/test/testG4sim17.py +90 -0
  346. pandaserver/test/testGlobalShares.py +131 -0
  347. pandaserver/test/testReco.py +103 -0
  348. pandaserver/test/testSimulReco14.py +98 -0
  349. pandaserver/test/testSiteMap.py +26 -0
  350. pandaserver/test/testUpdateWorkerPilotStatus.py +9 -0
  351. pandaserver/userinterface/Client.py +1686 -0
  352. pandaserver/userinterface/UserIF.py +1799 -0
  353. pandaserver/userinterface/__init__.py +0 -0
  354. pandaserver/workflow/__init__.py +0 -0
  355. pandaserver/workflow/data_handler_plugins/base_data_handler.py +48 -0
  356. pandaserver/workflow/data_handler_plugins/ddm_collection_data_handler.py +100 -0
  357. pandaserver/workflow/data_handler_plugins/panda_task_data_handler.py +140 -0
  358. pandaserver/workflow/pcwl_test.py +122 -0
  359. pandaserver/workflow/pcwl_utils.py +384 -0
  360. pandaserver/workflow/psnakemake_container.json +68 -0
  361. pandaserver/workflow/psnakemake_task.json +62 -0
  362. pandaserver/workflow/psnakemake_test.py +60 -0
  363. pandaserver/workflow/snakeparser/__init__.py +3 -0
  364. pandaserver/workflow/snakeparser/extensions.py +74 -0
  365. pandaserver/workflow/snakeparser/log.py +53 -0
  366. pandaserver/workflow/snakeparser/names.py +3 -0
  367. pandaserver/workflow/snakeparser/parser.py +332 -0
  368. pandaserver/workflow/snakeparser/utils.py +29 -0
  369. pandaserver/workflow/step_handler_plugins/base_step_handler.py +85 -0
  370. pandaserver/workflow/step_handler_plugins/panda_task_step_handler.py +280 -0
  371. pandaserver/workflow/workflow_base.py +531 -0
  372. pandaserver/workflow/workflow_core.py +1974 -0
  373. pandaserver/workflow/workflow_core_smoketest.py +388 -0
  374. pandaserver/workflow/workflow_parser.py +222 -0
  375. pandaserver/workflow/workflow_utils.py +1047 -0
@@ -0,0 +1,137 @@
1
+ """
2
+ dataset specification
3
+
4
+ """
5
+
6
+
7
+ class DatasetSpec(object):
8
+ # attributes
9
+ _attributes = (
10
+ "vuid",
11
+ "name",
12
+ "version",
13
+ "type",
14
+ "status",
15
+ "numberfiles",
16
+ "currentfiles",
17
+ "creationdate",
18
+ "modificationdate",
19
+ "MoverID",
20
+ "transferStatus",
21
+ "subType",
22
+ )
23
+
24
+ # attributes which have 0 by default
25
+ _zeroAttrs = ("MoverID", "transferStatus")
26
+
27
+ # constructor
28
+ def __init__(self):
29
+ # install attributes
30
+ for attr in self._attributes:
31
+ setattr(self, attr, None)
32
+
33
+ # override __getattribute__ for SQL
34
+ def __getattribute__(self, name):
35
+ ret = object.__getattribute__(self, name)
36
+ if ret is None:
37
+ return "NULL"
38
+ return ret
39
+
40
+ # return a tuple of values
41
+ def values(self):
42
+ ret = []
43
+ for attr in self._attributes:
44
+ val = getattr(self, attr)
45
+ ret.append(val)
46
+ return tuple(ret)
47
+
48
+ # return map of values
49
+ def valuesMap(self):
50
+ ret = {}
51
+ for attr in self._attributes:
52
+ val = getattr(self, attr)
53
+ if val == "NULL":
54
+ if attr in self._zeroAttrs:
55
+ val = 0
56
+ else:
57
+ val = None
58
+ ret[f":{attr}"] = val
59
+ return ret
60
+
61
+ # pack tuple into DatasetSpec
62
+ def pack(self, values):
63
+ for i in range(len(self._attributes)):
64
+ attr = self._attributes[i]
65
+ val = values[i]
66
+ setattr(self, attr, val)
67
+
68
+ # return column names for INSERT
69
+ def columnNames(cls):
70
+ ret = ""
71
+ for attr in cls._attributes:
72
+ if ret != "":
73
+ ret += ","
74
+ ret += attr
75
+ return ret
76
+
77
+ columnNames = classmethod(columnNames)
78
+
79
+ # return expression of values for INSERT
80
+ def valuesExpression(cls):
81
+ ret = "VALUES("
82
+ for attr in cls._attributes:
83
+ ret += "%s"
84
+ if attr != cls._attributes[len(cls._attributes) - 1]:
85
+ ret += ","
86
+ ret += ")"
87
+ return ret
88
+
89
+ valuesExpression = classmethod(valuesExpression)
90
+
91
+ # return expression of bind values for INSERT
92
+ def bindValuesExpression(cls):
93
+ ret = "VALUES("
94
+ for attr in cls._attributes:
95
+ ret += f":{attr},"
96
+ ret = ret[:-1]
97
+ ret += ")"
98
+ return ret
99
+
100
+ bindValuesExpression = classmethod(bindValuesExpression)
101
+
102
+ # return an expression for UPDATE
103
+ def updateExpression(cls):
104
+ ret = ""
105
+ for attr in cls._attributes:
106
+ ret = ret + attr + "=%s"
107
+ if attr != cls._attributes[len(cls._attributes) - 1]:
108
+ ret += ","
109
+ return ret
110
+
111
+ updateExpression = classmethod(updateExpression)
112
+
113
+ # return an expression of bind variables for UPDATE
114
+ def bindUpdateExpression(cls):
115
+ ret = ""
116
+ for attr in cls._attributes:
117
+ ret += f"{attr}=:{attr},"
118
+ ret = ret[:-1]
119
+ return ret
120
+
121
+ bindUpdateExpression = classmethod(bindUpdateExpression)
122
+
123
+ # return state values to be pickled
124
+ def __getstate__(self):
125
+ state = []
126
+ for attr in self._attributes:
127
+ val = getattr(self, attr)
128
+ state.append(val)
129
+ return state
130
+
131
+ # restore state from the unpickled state values
132
+ def __setstate__(self, state):
133
+ for i, attr in enumerate(self._attributes):
134
+ if i < len(state):
135
+ setattr(self, attr, state[i])
136
+ else:
137
+ setattr(self, attr, None)
@@ -0,0 +1,201 @@
1
+ """
2
+ ddm endpoint specification object
3
+
4
+ """
5
+
6
+ import re
7
+
8
+
9
+ class DdmSpec(object):
10
+ # constructor
11
+ def __init__(self):
12
+ self.all = {}
13
+ self.local = set()
14
+ self.default_read = None
15
+ self.default_write = None
16
+ self.tape = set()
17
+
18
+ def add(self, relation, endpoint_dictionary):
19
+ """
20
+ Add an endpoint to the DDM specification.
21
+
22
+ This method adds an endpoint to the DDM specification by copying all properties
23
+ about the DDM endpoint and relation. It also updates local endpoints, default
24
+ read/write endpoints, and tape endpoints.
25
+
26
+ Args:
27
+ relation (dict): A dictionary containing the relation properties.
28
+ endpoint_dictionary (dict): A dictionary containing the endpoint properties.
29
+ """
30
+ name = relation["ddm_endpoint_name"]
31
+
32
+ # Protection against inconsistent dict
33
+ if name not in endpoint_dictionary:
34
+ return
35
+
36
+ # All endpoints, copy all properties about DDM endpoint and relation
37
+ self.all[name] = {}
38
+ for key in endpoint_dictionary[name]:
39
+ value = endpoint_dictionary[name][key]
40
+ self.all[name][key] = value
41
+ for key in relation:
42
+ value = relation[key]
43
+ self.all[name][key] = value
44
+
45
+ # Local endpoints
46
+ if relation["is_local"] != "N":
47
+ self.local.add(name)
48
+
49
+ # Default read and write
50
+ if relation["default_read"] == "Y":
51
+ self.default_read = name
52
+ if relation["default_write"] == "Y":
53
+ self.default_write = name
54
+
55
+ # Tape
56
+ if relation["is_tape"] == "Y":
57
+ self.tape.add(name)
58
+
59
+ def getAllEndPoints(self):
60
+ """
61
+ Get all DDM endpoints. This method returns a list of all DDM endpoints.
62
+
63
+ Returns:
64
+ list: A list of all DDM endpoints.
65
+ """
66
+ return list(self.all)
67
+
68
+ def getEndPoint(self, endpoint_name):
69
+ """
70
+ Get a specific DDM endpoint.
71
+
72
+ This method returns the properties of a specific DDM endpoint.
73
+
74
+ Args:
75
+ endpoint_name (str): The name of the DDM endpoint.
76
+ Returns:
77
+ dict or None: A dictionary containing the properties of the DDM endpoint, or None if not found.
78
+ """
79
+ if endpoint_name in self.all:
80
+ return self.all[endpoint_name]
81
+ return None
82
+
83
+ def getLocalEndPoints(self):
84
+ """
85
+ This method returns a sorted list of local DDM endpoints.
86
+
87
+ Returns:
88
+ list: A sorted list of local DDM endpoints.
89
+ """
90
+ sorted_endpoints = sorted(self.local)
91
+ return sorted_endpoints
92
+
93
+ def getDefaultWrite(self):
94
+ """
95
+ This method returns the default write DDM endpoint.
96
+
97
+ Returns:
98
+ str or None: The default write DDM endpoint, or None if not set.
99
+ """
100
+ return self.default_write
101
+
102
+ def getDefaultRead(self):
103
+ """
104
+ This method returns the default read DDM endpoint.
105
+
106
+ Returns:
107
+ str or None: The default write DDM endpoint, or None if not set.
108
+ """
109
+ return self.default_read
110
+
111
+ def getTapeEndPoints(self):
112
+ """
113
+ This method returns a tuple of tape DDM endpoints.
114
+
115
+ Returns:
116
+ tuple: A tuple of tape DDM endpoints.
117
+ """
118
+ return tuple(self.tape)
119
+
120
+ def isAssociated(self, endpoint_name):
121
+ """
122
+ This method checks if a given endpoint name is associated with any DDM endpoint.
123
+
124
+ Args:
125
+ endpoint_name (str): The name of the DDM endpoint.
126
+
127
+ Returns:
128
+ bool: True if the endpoint is associated, False otherwise.
129
+ """
130
+ return endpoint_name in self.all
131
+
132
+ def getAssociatedEndpoint(self, patt, mode="output"):
133
+ """
134
+ This method returns the DDM endpoint associated with a given pattern and of the lowest order.
135
+
136
+ Args:
137
+ patt (str): The pattern to match.
138
+ mode (str): The mode, either "input" or "output". Default is "output".
139
+ Returns:
140
+ dict or None: A dictionary containing the properties of the associated DDM endpoint, or None if not found.
141
+ """
142
+ patt = patt.split("/")[-1]
143
+ if patt in self.all:
144
+ return self.all[patt]
145
+
146
+ endpoint = None
147
+ order = 10**6 # Like infinite
148
+ for tmp_ddm_endpoint_name in self.all:
149
+ tmp_ddm_endpoint_dict = self.all[tmp_ddm_endpoint_name]
150
+ # get the order of the current loop endpoint
151
+ if mode == "input":
152
+ tmp_order = tmp_ddm_endpoint_dict["order_read"]
153
+ elif mode == "output":
154
+ tmp_order = tmp_ddm_endpoint_dict["order_write"]
155
+ # we already have a closer endpoint, so skip the looping one
156
+ if tmp_order > order:
157
+ continue
158
+
159
+ # check name
160
+ if re.search(patt, tmp_ddm_endpoint_name) is not None:
161
+ endpoint = self.all[tmp_ddm_endpoint_name]
162
+ order = tmp_order
163
+
164
+ # check type
165
+ pattern_without_vo = re.sub("ATLAS", "", patt)
166
+ if self.all[tmp_ddm_endpoint_name]["type"] == pattern_without_vo:
167
+ endpoint = self.all[tmp_ddm_endpoint_name]
168
+ order = tmp_order
169
+
170
+ return endpoint
171
+
172
+ def getTokenMap(self, mode):
173
+ """
174
+ This method returns a mapping between space tokens and endpoint names based on the mode.
175
+
176
+ Args:
177
+ mode (str): The mode, either "input" or "output".
178
+ Returns:
179
+ dict: A dictionary mapping tokens to endpoint names.
180
+ """
181
+ ret_map = {}
182
+ orders = {}
183
+ for tmp_ddm_endpoint_name in self.all:
184
+ tmp_ddm_endpoint_dict = self.all[tmp_ddm_endpoint_name]
185
+ token = tmp_ddm_endpoint_dict["ddm_spacetoken_name"]
186
+
187
+ # get the order
188
+ if mode == "input":
189
+ order = tmp_ddm_endpoint_dict["order_read"]
190
+ elif mode == "output":
191
+ order = tmp_ddm_endpoint_dict["order_write"]
192
+
193
+ # map already contains this token
194
+ if token in ret_map and orders[token] < order:
195
+ continue
196
+
197
+ # add
198
+ ret_map[token] = tmp_ddm_endpoint_name
199
+ orders[token] = order
200
+
201
+ return ret_map
@@ -0,0 +1,87 @@
1
+ # error code
2
+
3
+ # killed
4
+ EC_Kill = 100
5
+
6
+ # transfer timeout
7
+ EC_Transfer = 101
8
+
9
+ # expire
10
+ EC_Expire = 102
11
+
12
+ # aborted
13
+ EC_Aborted = 103
14
+
15
+ # reassigned by re-brokerage
16
+ EC_Reassigned = 105
17
+
18
+ # reassigned by server-side retry
19
+ EC_Retried = 106
20
+
21
+ # retried by pilot
22
+ EC_PilotRetried = 107
23
+
24
+ # retried for event service
25
+ EC_EventServiceRetried = 111
26
+
27
+ # merge for event service
28
+ EC_EventServiceMerge = 112
29
+
30
+ # merge job failed
31
+ EC_MergeFailed = 113
32
+
33
+ # max attempt reached for Event Service
34
+ EC_EventServiceMaxAttempt = 114
35
+
36
+ # do nothing since other consumers are still running
37
+ EC_EventServiceWaitOthers = 115
38
+
39
+ # killed since unused and unnecessary anymore
40
+ EC_EventServiceUnused = 116
41
+
42
+ # didn't process any events on WN
43
+ EC_EventServiceUnprocessed = 117
44
+
45
+ # didn't process any events on WN and last consumer
46
+ EC_EventServiceLastUnprocessed = 118
47
+
48
+ # all event ranges failed
49
+ EC_EventServiceAllFailed = 119
50
+
51
+ # associated consumer generated ES merge
52
+ EC_EventServiceKillOK = 120
53
+
54
+ # associated consumer failed
55
+ EC_EventServiceKillNG = 121
56
+
57
+ # killed for preemption
58
+ EC_EventServicePreemption = 122
59
+
60
+ # retried but didn't process any events on WN
61
+ EC_EventServiceNoEvent = 123
62
+
63
+ # input files inconsistent with JEDI
64
+ EC_EventServiceInconsistentIn = 124
65
+
66
+ # No event service queues available for new consumers
67
+ EC_EventServiceNoEsQueues = 125
68
+
69
+ # Closed in bad job status
70
+ EC_EventServiceBadStatus = 126
71
+
72
+ # Fast re-brokerage for overloaded
73
+ EC_FastRebrokerage = 130
74
+
75
+ # failed to lock semaphore for job cloning
76
+ EC_JobCloningUnlock = 200
77
+
78
+ # worker is done before job is done
79
+ EC_WorkerDone = 300
80
+
81
+ # http error codes
82
+
83
+ # forbidden request
84
+ EC_Forbidden = 403
85
+
86
+ # file not found
87
+ EC_NotFound = 404