wmglobalqueue 2.3.10__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.

Potentially problematic release.


This version of wmglobalqueue might be problematic. Click here for more details.

Files changed (345) hide show
  1. Utils/CPMetrics.py +270 -0
  2. Utils/CertTools.py +62 -0
  3. Utils/EmailAlert.py +50 -0
  4. Utils/ExtendedUnitTestCase.py +62 -0
  5. Utils/FileTools.py +182 -0
  6. Utils/IteratorTools.py +80 -0
  7. Utils/MathUtils.py +31 -0
  8. Utils/MemoryCache.py +119 -0
  9. Utils/Patterns.py +24 -0
  10. Utils/Pipeline.py +137 -0
  11. Utils/PortForward.py +97 -0
  12. Utils/ProcessStats.py +103 -0
  13. Utils/PythonVersion.py +17 -0
  14. Utils/Signals.py +36 -0
  15. Utils/TemporaryEnvironment.py +27 -0
  16. Utils/Throttled.py +227 -0
  17. Utils/Timers.py +130 -0
  18. Utils/Timestamps.py +86 -0
  19. Utils/TokenManager.py +143 -0
  20. Utils/Tracing.py +60 -0
  21. Utils/TwPrint.py +98 -0
  22. Utils/Utilities.py +308 -0
  23. Utils/__init__.py +11 -0
  24. WMCore/ACDC/Collection.py +57 -0
  25. WMCore/ACDC/CollectionTypes.py +12 -0
  26. WMCore/ACDC/CouchCollection.py +67 -0
  27. WMCore/ACDC/CouchFileset.py +238 -0
  28. WMCore/ACDC/CouchService.py +73 -0
  29. WMCore/ACDC/DataCollectionService.py +485 -0
  30. WMCore/ACDC/Fileset.py +94 -0
  31. WMCore/ACDC/__init__.py +11 -0
  32. WMCore/Algorithms/Alarm.py +39 -0
  33. WMCore/Algorithms/MathAlgos.py +274 -0
  34. WMCore/Algorithms/MiscAlgos.py +67 -0
  35. WMCore/Algorithms/ParseXMLFile.py +115 -0
  36. WMCore/Algorithms/Permissions.py +27 -0
  37. WMCore/Algorithms/Singleton.py +58 -0
  38. WMCore/Algorithms/SubprocessAlgos.py +129 -0
  39. WMCore/Algorithms/__init__.py +7 -0
  40. WMCore/Cache/GenericDataCache.py +98 -0
  41. WMCore/Cache/WMConfigCache.py +572 -0
  42. WMCore/Cache/__init__.py +0 -0
  43. WMCore/Configuration.py +651 -0
  44. WMCore/DAOFactory.py +47 -0
  45. WMCore/DataStructs/File.py +177 -0
  46. WMCore/DataStructs/Fileset.py +140 -0
  47. WMCore/DataStructs/Job.py +182 -0
  48. WMCore/DataStructs/JobGroup.py +142 -0
  49. WMCore/DataStructs/JobPackage.py +49 -0
  50. WMCore/DataStructs/LumiList.py +734 -0
  51. WMCore/DataStructs/Mask.py +219 -0
  52. WMCore/DataStructs/MathStructs/ContinuousSummaryHistogram.py +197 -0
  53. WMCore/DataStructs/MathStructs/DiscreteSummaryHistogram.py +92 -0
  54. WMCore/DataStructs/MathStructs/SummaryHistogram.py +117 -0
  55. WMCore/DataStructs/MathStructs/__init__.py +0 -0
  56. WMCore/DataStructs/Pickleable.py +24 -0
  57. WMCore/DataStructs/Run.py +256 -0
  58. WMCore/DataStructs/Subscription.py +175 -0
  59. WMCore/DataStructs/WMObject.py +47 -0
  60. WMCore/DataStructs/WorkUnit.py +112 -0
  61. WMCore/DataStructs/Workflow.py +60 -0
  62. WMCore/DataStructs/__init__.py +8 -0
  63. WMCore/Database/CMSCouch.py +1349 -0
  64. WMCore/Database/ConfigDBMap.py +29 -0
  65. WMCore/Database/CouchUtils.py +118 -0
  66. WMCore/Database/DBCore.py +198 -0
  67. WMCore/Database/DBCreator.py +113 -0
  68. WMCore/Database/DBExceptionHandler.py +57 -0
  69. WMCore/Database/DBFactory.py +110 -0
  70. WMCore/Database/DBFormatter.py +177 -0
  71. WMCore/Database/Dialects.py +13 -0
  72. WMCore/Database/ExecuteDAO.py +327 -0
  73. WMCore/Database/MongoDB.py +241 -0
  74. WMCore/Database/MySQL/Destroy.py +42 -0
  75. WMCore/Database/MySQL/ListUserContent.py +20 -0
  76. WMCore/Database/MySQL/__init__.py +9 -0
  77. WMCore/Database/MySQLCore.py +132 -0
  78. WMCore/Database/Oracle/Destroy.py +56 -0
  79. WMCore/Database/Oracle/ListUserContent.py +19 -0
  80. WMCore/Database/Oracle/__init__.py +9 -0
  81. WMCore/Database/ResultSet.py +44 -0
  82. WMCore/Database/Transaction.py +91 -0
  83. WMCore/Database/__init__.py +9 -0
  84. WMCore/Database/ipy_profile_couch.py +438 -0
  85. WMCore/GlobalWorkQueue/CherryPyThreads/CleanUpTask.py +29 -0
  86. WMCore/GlobalWorkQueue/CherryPyThreads/HeartbeatMonitor.py +105 -0
  87. WMCore/GlobalWorkQueue/CherryPyThreads/LocationUpdateTask.py +28 -0
  88. WMCore/GlobalWorkQueue/CherryPyThreads/ReqMgrInteractionTask.py +35 -0
  89. WMCore/GlobalWorkQueue/CherryPyThreads/__init__.py +0 -0
  90. WMCore/GlobalWorkQueue/__init__.py +0 -0
  91. WMCore/GroupUser/CouchObject.py +127 -0
  92. WMCore/GroupUser/Decorators.py +51 -0
  93. WMCore/GroupUser/Group.py +33 -0
  94. WMCore/GroupUser/Interface.py +73 -0
  95. WMCore/GroupUser/User.py +96 -0
  96. WMCore/GroupUser/__init__.py +11 -0
  97. WMCore/Lexicon.py +836 -0
  98. WMCore/REST/Auth.py +202 -0
  99. WMCore/REST/CherryPyPeriodicTask.py +166 -0
  100. WMCore/REST/Error.py +333 -0
  101. WMCore/REST/Format.py +642 -0
  102. WMCore/REST/HeartbeatMonitorBase.py +90 -0
  103. WMCore/REST/Main.py +623 -0
  104. WMCore/REST/Server.py +2435 -0
  105. WMCore/REST/Services.py +24 -0
  106. WMCore/REST/Test.py +120 -0
  107. WMCore/REST/Tools.py +38 -0
  108. WMCore/REST/Validation.py +250 -0
  109. WMCore/REST/__init__.py +1 -0
  110. WMCore/ReqMgr/DataStructs/RequestStatus.py +209 -0
  111. WMCore/ReqMgr/DataStructs/RequestType.py +13 -0
  112. WMCore/ReqMgr/DataStructs/__init__.py +0 -0
  113. WMCore/ReqMgr/__init__.py +1 -0
  114. WMCore/Services/AlertManager/AlertManagerAPI.py +111 -0
  115. WMCore/Services/AlertManager/__init__.py +0 -0
  116. WMCore/Services/CRIC/CRIC.py +238 -0
  117. WMCore/Services/CRIC/__init__.py +0 -0
  118. WMCore/Services/DBS/DBS3Reader.py +1044 -0
  119. WMCore/Services/DBS/DBSConcurrency.py +44 -0
  120. WMCore/Services/DBS/DBSErrors.py +113 -0
  121. WMCore/Services/DBS/DBSReader.py +23 -0
  122. WMCore/Services/DBS/DBSUtils.py +139 -0
  123. WMCore/Services/DBS/DBSWriterObjects.py +381 -0
  124. WMCore/Services/DBS/ProdException.py +133 -0
  125. WMCore/Services/DBS/__init__.py +8 -0
  126. WMCore/Services/FWJRDB/FWJRDBAPI.py +118 -0
  127. WMCore/Services/FWJRDB/__init__.py +0 -0
  128. WMCore/Services/HTTPS/HTTPSAuthHandler.py +66 -0
  129. WMCore/Services/HTTPS/__init__.py +0 -0
  130. WMCore/Services/LogDB/LogDB.py +201 -0
  131. WMCore/Services/LogDB/LogDBBackend.py +191 -0
  132. WMCore/Services/LogDB/LogDBExceptions.py +11 -0
  133. WMCore/Services/LogDB/LogDBReport.py +85 -0
  134. WMCore/Services/LogDB/__init__.py +0 -0
  135. WMCore/Services/MSPileup/__init__.py +0 -0
  136. WMCore/Services/MSUtils/MSUtils.py +54 -0
  137. WMCore/Services/MSUtils/__init__.py +0 -0
  138. WMCore/Services/McM/McM.py +173 -0
  139. WMCore/Services/McM/__init__.py +8 -0
  140. WMCore/Services/MonIT/Grafana.py +133 -0
  141. WMCore/Services/MonIT/__init__.py +0 -0
  142. WMCore/Services/PyCondor/PyCondorAPI.py +154 -0
  143. WMCore/Services/PyCondor/PyCondorUtils.py +105 -0
  144. WMCore/Services/PyCondor/__init__.py +0 -0
  145. WMCore/Services/ReqMgr/ReqMgr.py +261 -0
  146. WMCore/Services/ReqMgr/__init__.py +0 -0
  147. WMCore/Services/ReqMgrAux/ReqMgrAux.py +419 -0
  148. WMCore/Services/ReqMgrAux/__init__.py +0 -0
  149. WMCore/Services/RequestDB/RequestDBReader.py +267 -0
  150. WMCore/Services/RequestDB/RequestDBWriter.py +39 -0
  151. WMCore/Services/RequestDB/__init__.py +0 -0
  152. WMCore/Services/Requests.py +624 -0
  153. WMCore/Services/Rucio/Rucio.py +1287 -0
  154. WMCore/Services/Rucio/RucioUtils.py +74 -0
  155. WMCore/Services/Rucio/__init__.py +0 -0
  156. WMCore/Services/RucioConMon/RucioConMon.py +128 -0
  157. WMCore/Services/RucioConMon/__init__.py +0 -0
  158. WMCore/Services/Service.py +400 -0
  159. WMCore/Services/StompAMQ/__init__.py +0 -0
  160. WMCore/Services/TagCollector/TagCollector.py +155 -0
  161. WMCore/Services/TagCollector/XMLUtils.py +98 -0
  162. WMCore/Services/TagCollector/__init__.py +0 -0
  163. WMCore/Services/UUIDLib.py +13 -0
  164. WMCore/Services/UserFileCache/UserFileCache.py +160 -0
  165. WMCore/Services/UserFileCache/__init__.py +8 -0
  166. WMCore/Services/WMAgent/WMAgent.py +63 -0
  167. WMCore/Services/WMAgent/__init__.py +0 -0
  168. WMCore/Services/WMArchive/CMSSWMetrics.py +526 -0
  169. WMCore/Services/WMArchive/DataMap.py +463 -0
  170. WMCore/Services/WMArchive/WMArchive.py +33 -0
  171. WMCore/Services/WMArchive/__init__.py +0 -0
  172. WMCore/Services/WMBS/WMBS.py +97 -0
  173. WMCore/Services/WMBS/__init__.py +0 -0
  174. WMCore/Services/WMStats/DataStruct/RequestInfoCollection.py +300 -0
  175. WMCore/Services/WMStats/DataStruct/__init__.py +0 -0
  176. WMCore/Services/WMStats/WMStatsPycurl.py +145 -0
  177. WMCore/Services/WMStats/WMStatsReader.py +445 -0
  178. WMCore/Services/WMStats/WMStatsWriter.py +273 -0
  179. WMCore/Services/WMStats/__init__.py +0 -0
  180. WMCore/Services/WMStatsServer/WMStatsServer.py +134 -0
  181. WMCore/Services/WMStatsServer/__init__.py +0 -0
  182. WMCore/Services/WorkQueue/WorkQueue.py +492 -0
  183. WMCore/Services/WorkQueue/__init__.py +0 -0
  184. WMCore/Services/__init__.py +8 -0
  185. WMCore/Services/pycurl_manager.py +574 -0
  186. WMCore/WMBase.py +50 -0
  187. WMCore/WMConnectionBase.py +164 -0
  188. WMCore/WMException.py +183 -0
  189. WMCore/WMExceptions.py +269 -0
  190. WMCore/WMFactory.py +76 -0
  191. WMCore/WMInit.py +228 -0
  192. WMCore/WMLogging.py +108 -0
  193. WMCore/WMSpec/ConfigSectionTree.py +442 -0
  194. WMCore/WMSpec/Persistency.py +135 -0
  195. WMCore/WMSpec/Steps/BuildMaster.py +87 -0
  196. WMCore/WMSpec/Steps/BuildTools.py +201 -0
  197. WMCore/WMSpec/Steps/Builder.py +97 -0
  198. WMCore/WMSpec/Steps/Diagnostic.py +89 -0
  199. WMCore/WMSpec/Steps/Emulator.py +62 -0
  200. WMCore/WMSpec/Steps/ExecuteMaster.py +208 -0
  201. WMCore/WMSpec/Steps/Executor.py +210 -0
  202. WMCore/WMSpec/Steps/StepFactory.py +213 -0
  203. WMCore/WMSpec/Steps/TaskEmulator.py +75 -0
  204. WMCore/WMSpec/Steps/Template.py +204 -0
  205. WMCore/WMSpec/Steps/Templates/AlcaHarvest.py +76 -0
  206. WMCore/WMSpec/Steps/Templates/CMSSW.py +613 -0
  207. WMCore/WMSpec/Steps/Templates/DQMUpload.py +59 -0
  208. WMCore/WMSpec/Steps/Templates/DeleteFiles.py +70 -0
  209. WMCore/WMSpec/Steps/Templates/LogArchive.py +84 -0
  210. WMCore/WMSpec/Steps/Templates/LogCollect.py +105 -0
  211. WMCore/WMSpec/Steps/Templates/StageOut.py +105 -0
  212. WMCore/WMSpec/Steps/Templates/__init__.py +10 -0
  213. WMCore/WMSpec/Steps/WMExecutionFailure.py +21 -0
  214. WMCore/WMSpec/Steps/__init__.py +8 -0
  215. WMCore/WMSpec/Utilities.py +63 -0
  216. WMCore/WMSpec/WMSpecErrors.py +12 -0
  217. WMCore/WMSpec/WMStep.py +347 -0
  218. WMCore/WMSpec/WMTask.py +1980 -0
  219. WMCore/WMSpec/WMWorkload.py +2288 -0
  220. WMCore/WMSpec/WMWorkloadTools.py +370 -0
  221. WMCore/WMSpec/__init__.py +9 -0
  222. WMCore/WorkQueue/DataLocationMapper.py +273 -0
  223. WMCore/WorkQueue/DataStructs/ACDCBlock.py +47 -0
  224. WMCore/WorkQueue/DataStructs/Block.py +48 -0
  225. WMCore/WorkQueue/DataStructs/CouchWorkQueueElement.py +148 -0
  226. WMCore/WorkQueue/DataStructs/WorkQueueElement.py +274 -0
  227. WMCore/WorkQueue/DataStructs/WorkQueueElementResult.py +152 -0
  228. WMCore/WorkQueue/DataStructs/WorkQueueElementsSummary.py +185 -0
  229. WMCore/WorkQueue/DataStructs/__init__.py +0 -0
  230. WMCore/WorkQueue/Policy/End/EndPolicyInterface.py +44 -0
  231. WMCore/WorkQueue/Policy/End/SingleShot.py +22 -0
  232. WMCore/WorkQueue/Policy/End/__init__.py +32 -0
  233. WMCore/WorkQueue/Policy/PolicyInterface.py +17 -0
  234. WMCore/WorkQueue/Policy/Start/Block.py +258 -0
  235. WMCore/WorkQueue/Policy/Start/Dataset.py +180 -0
  236. WMCore/WorkQueue/Policy/Start/MonteCarlo.py +131 -0
  237. WMCore/WorkQueue/Policy/Start/ResubmitBlock.py +171 -0
  238. WMCore/WorkQueue/Policy/Start/StartPolicyInterface.py +316 -0
  239. WMCore/WorkQueue/Policy/Start/__init__.py +34 -0
  240. WMCore/WorkQueue/Policy/__init__.py +57 -0
  241. WMCore/WorkQueue/WMBSHelper.py +772 -0
  242. WMCore/WorkQueue/WorkQueue.py +1237 -0
  243. WMCore/WorkQueue/WorkQueueBackend.py +750 -0
  244. WMCore/WorkQueue/WorkQueueBase.py +39 -0
  245. WMCore/WorkQueue/WorkQueueExceptions.py +44 -0
  246. WMCore/WorkQueue/WorkQueueReqMgrInterface.py +278 -0
  247. WMCore/WorkQueue/WorkQueueUtils.py +130 -0
  248. WMCore/WorkQueue/__init__.py +13 -0
  249. WMCore/Wrappers/JsonWrapper/JSONThunker.py +342 -0
  250. WMCore/Wrappers/JsonWrapper/__init__.py +7 -0
  251. WMCore/Wrappers/__init__.py +6 -0
  252. WMCore/__init__.py +10 -0
  253. wmglobalqueue-2.3.10.data/data/bin/wmc-dist-patch +15 -0
  254. wmglobalqueue-2.3.10.data/data/bin/wmc-dist-unpatch +8 -0
  255. wmglobalqueue-2.3.10.data/data/bin/wmc-httpd +3 -0
  256. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/.couchapprc +1 -0
  257. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/README.md +40 -0
  258. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/_attachments/index.html +264 -0
  259. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/_attachments/js/ElementInfoByWorkflow.js +96 -0
  260. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/_attachments/js/StuckElementInfo.js +57 -0
  261. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/_attachments/js/WorkloadInfoTable.js +80 -0
  262. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/_attachments/js/dataTable.js +70 -0
  263. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/_attachments/js/namespace.js +23 -0
  264. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/_attachments/style/main.css +75 -0
  265. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/couchapp.json +4 -0
  266. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/filters/childQueueFilter.js +13 -0
  267. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/filters/filterDeletedDocs.js +3 -0
  268. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/filters/queueFilter.js +11 -0
  269. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/language +1 -0
  270. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/lib/mustache.js +333 -0
  271. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/lib/validate.js +27 -0
  272. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/lib/workqueue_utils.js +61 -0
  273. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/lists/elementsDetail.js +28 -0
  274. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/lists/filter.js +86 -0
  275. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/lists/stuckElements.js +38 -0
  276. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/lists/workRestrictions.js +153 -0
  277. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/lists/workflowSummary.js +28 -0
  278. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/rewrites.json +73 -0
  279. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/shows/redirect.js +23 -0
  280. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/shows/status.js +40 -0
  281. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/templates/ElementSummaryByWorkflow.html +27 -0
  282. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/templates/StuckElementSummary.html +26 -0
  283. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/templates/TaskStatus.html +23 -0
  284. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/templates/WorkflowSummary.html +27 -0
  285. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/templates/partials/workqueue-common-lib.html +2 -0
  286. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/templates/partials/yui-lib-remote.html +16 -0
  287. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/templates/partials/yui-lib.html +18 -0
  288. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/updates/in-place.js +50 -0
  289. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/validate_doc_update.js +8 -0
  290. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/vendor/couchapp/_attachments/jquery.couch.app.js +235 -0
  291. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/vendor/couchapp/_attachments/jquery.pathbinder.js +173 -0
  292. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/activeData/map.js +8 -0
  293. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/activeData/reduce.js +2 -0
  294. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/activeParentData/map.js +8 -0
  295. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/activeParentData/reduce.js +2 -0
  296. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/activePileupData/map.js +8 -0
  297. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/activePileupData/reduce.js +2 -0
  298. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/analyticsData/map.js +11 -0
  299. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/analyticsData/reduce.js +1 -0
  300. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/availableByPriority/map.js +6 -0
  301. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/conflicts/map.js +5 -0
  302. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/elements/map.js +5 -0
  303. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/elementsByData/map.js +8 -0
  304. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/elementsByParent/map.js +8 -0
  305. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/elementsByParentData/map.js +8 -0
  306. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/elementsByPileupData/map.js +8 -0
  307. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/elementsByStatus/map.js +8 -0
  308. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/elementsBySubscription/map.js +6 -0
  309. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/elementsByWorkflow/map.js +8 -0
  310. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/elementsByWorkflow/reduce.js +3 -0
  311. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/elementsDetailByWorkflowAndStatus/map.js +26 -0
  312. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobInjectStatusByRequest/map.js +10 -0
  313. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobInjectStatusByRequest/reduce.js +1 -0
  314. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobStatusByRequest/map.js +6 -0
  315. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobStatusByRequest/reduce.js +1 -0
  316. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobsByChildQueueAndPriority/map.js +6 -0
  317. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobsByChildQueueAndPriority/reduce.js +1 -0
  318. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobsByChildQueueAndStatus/map.js +6 -0
  319. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobsByChildQueueAndStatus/reduce.js +1 -0
  320. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobsByRequest/map.js +6 -0
  321. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobsByRequest/reduce.js +1 -0
  322. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobsByStatus/map.js +6 -0
  323. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobsByStatus/reduce.js +1 -0
  324. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobsByStatusAndPriority/map.js +6 -0
  325. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/jobsByStatusAndPriority/reduce.js +1 -0
  326. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/openRequests/map.js +6 -0
  327. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/recent-items/map.js +5 -0
  328. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/siteWhitelistByRequest/map.js +6 -0
  329. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/siteWhitelistByRequest/reduce.js +1 -0
  330. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/specsByWorkflow/map.js +5 -0
  331. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/stuckElements/map.js +38 -0
  332. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/wmbsInjectStatusByRequest/map.js +12 -0
  333. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/wmbsInjectStatusByRequest/reduce.js +3 -0
  334. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/wmbsUrl/map.js +6 -0
  335. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/wmbsUrl/reduce.js +2 -0
  336. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/wmbsUrlByRequest/map.js +6 -0
  337. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/wmbsUrlByRequest/reduce.js +2 -0
  338. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/workflowSummary/map.js +9 -0
  339. wmglobalqueue-2.3.10.data/data/data/couchapps/WorkQueue/views/workflowSummary/reduce.js +10 -0
  340. wmglobalqueue-2.3.10.dist-info/LICENSE +202 -0
  341. wmglobalqueue-2.3.10.dist-info/METADATA +24 -0
  342. wmglobalqueue-2.3.10.dist-info/NOTICE +16 -0
  343. wmglobalqueue-2.3.10.dist-info/RECORD +345 -0
  344. wmglobalqueue-2.3.10.dist-info/WHEEL +5 -0
  345. wmglobalqueue-2.3.10.dist-info/top_level.txt +2 -0
@@ -0,0 +1,76 @@
1
+ #!/usr/bin/env python
2
+ """
3
+ _AlcaHarvest_
4
+
5
+ Template for a AlcaHarvest Step
6
+
7
+ """
8
+
9
+ from WMCore.WMSpec.Steps.Template import Template
10
+ from WMCore.WMSpec.Steps.Template import CoreHelper
11
+ from WMCore.WMSpec.ConfigSectionTree import nodeName
12
+
13
+
14
+ class AlcaHarvestStepHelper(CoreHelper):
15
+ """
16
+ _AlcaHarvestStepHelper_
17
+
18
+ Add API calls and helper methods to the basic WMStepHelper to specialise
19
+ for AlcaHarvest tasks
20
+
21
+ """
22
+ def setRunNumber(self, runNumber):
23
+ """
24
+ Sets the run number, used to create a
25
+ run specific subdir for the output
26
+ """
27
+ self.data.condition.runNumber = runNumber
28
+
29
+ def setConditionOutputLabel(self, outLabel):
30
+ """
31
+ Sets the output label for the fake
32
+ output model containing the sqlite files
33
+ """
34
+ self.data.condition.outLabel = outLabel
35
+
36
+ def setConditionLFNBase(self, lfnbase):
37
+ """
38
+ Sets the LFNBase for condition file copy
39
+ (within the EOSCMS CERN EOS instance)
40
+ """
41
+ self.data.condition.lfnbase = lfnbase
42
+
43
+ def setLuminosityURL(self, url):
44
+ """
45
+ Sets the ROOT URL for luminosity file copy
46
+ """
47
+ self.data.luminosity.url = url
48
+
49
+ class AlcaHarvest(Template):
50
+ """
51
+ _AlcaHarvest_
52
+
53
+ Tools for creating a template AlcaHarvest Step
54
+
55
+ """
56
+
57
+ def install(self, step):
58
+ stepname = nodeName(step)
59
+ step.stepType = "AlcaHarvest"
60
+ step.section_("condition")
61
+ step.condition.runNumber = None
62
+ step.condition.outLabel = None
63
+ step.condition.lfnbase = None
64
+ step.section_("luminosity")
65
+ step.luminosity.url = None
66
+
67
+ def helper(self, step):
68
+ """
69
+ _helper_
70
+
71
+ Wrap the WMStep provided in the CMSSW helper class that
72
+ includes the ability to add and manipulate the details
73
+ of a CMSSW workflow step
74
+
75
+ """
76
+ return AlcaHarvestStepHelper(step)
@@ -0,0 +1,613 @@
1
+ #!/usr/bin/env python
2
+ """
3
+ _CMSSW_
4
+
5
+ Template for a CMSSW Step
6
+
7
+ """
8
+
9
+ import pickle
10
+
11
+ from future.utils import viewitems
12
+
13
+ from Utils.Utilities import encodeUnicodeToBytes
14
+ from WMCore.WMSpec.ConfigSectionTree import nodeName
15
+ from WMCore.WMSpec.Steps.Template import CoreHelper, Template
16
+ from WMCore.Cache.WMConfigCache import ConfigCacheException
17
+ import shlex
18
+
19
+
20
+ class CMSSWStepHelper(CoreHelper):
21
+ """
22
+ _CMSSWStepHelper_
23
+
24
+ Add API calls and helper methods to the basic WMStepHelper to specialise
25
+ for CMSSW tasks
26
+
27
+ """
28
+ def setAcqEra(self, acqEra):
29
+ """
30
+ _setAcqEra_
31
+ Set the acquisition era attribute for this step.
32
+ """
33
+ self.data.output.acqEra = acqEra
34
+
35
+ def setProcStr(self, procStr):
36
+ """
37
+ _setProcStr_
38
+ Set the processing string attribute for this step.
39
+ """
40
+ self.data.output.procStr = procStr
41
+
42
+ def setProcVer(self, procVer):
43
+ """
44
+ _setProcVer_
45
+ Set the processing version era attribute for this step.
46
+ """
47
+ self.data.output.procVer = procVer
48
+
49
+ def getAcqEra(self):
50
+ """
51
+ _getAcqEra_
52
+ Retrieve the acquisition era for this step, or return None if non-existent.
53
+ """
54
+ return getattr(self.data.output, 'acqEra', None)
55
+
56
+ def getProcStr(self):
57
+ """
58
+ _getProcStr_
59
+ Retrieve the processing string for this step, or return None if non-existent.
60
+ """
61
+ return getattr(self.data.output, 'procStr', None)
62
+
63
+ def getProcVer(self):
64
+ """
65
+ _getProcVer_
66
+ Retrieve the processing version for this step, or return None if non-existent.
67
+ """
68
+ return getattr(self.data.output, 'procVer', None)
69
+
70
+ def setPrepId(self, prepId):
71
+ """
72
+ _setPrepId_
73
+ Set the prep_id attribute for this step.
74
+ """
75
+ self.data.output.prepId = prepId
76
+
77
+ def getPrepId(self):
78
+ """
79
+ _getPrepId_
80
+ Retrieve the prep_id for this step, or return None if non-existent.
81
+ """
82
+ return getattr(self.data.output, 'prepId', None)
83
+
84
+ def addOutputModule(self, moduleName, **details):
85
+ """
86
+ _addOutputModule_
87
+
88
+ Add in an output module settings, all default to None unless
89
+ the value is provided in details
90
+
91
+ """
92
+ modules = self.data.output.modules
93
+
94
+ if getattr(modules, moduleName, None) == None:
95
+ modules.section_(moduleName)
96
+ module = getattr(modules, moduleName)
97
+
98
+ for key, value in viewitems(details):
99
+ setattr(module, key, value)
100
+
101
+ return
102
+
103
+ def listOutputModules(self):
104
+ """
105
+ _listOutputModules_
106
+
107
+ retrieve list of output module names
108
+
109
+ """
110
+ if hasattr(self.data.output, "modules"):
111
+ return list(self.data.output.modules.dictionary_())
112
+
113
+ return []
114
+
115
+ def getOutputModule(self, name):
116
+ """
117
+ _getOutputModule_
118
+
119
+ retrieve the data structure for an output module by name
120
+ None if not found
121
+
122
+ """
123
+ return getattr(self.data.output.modules, name, None)
124
+
125
+ def setConfigCache(self, url, document, dbName="config_cache"):
126
+ """
127
+ _setConfigCache_
128
+
129
+ Set the information required to retrieve a configuration from
130
+ the config cache.
131
+
132
+ url - base URL for the config cache instance
133
+ document - GUID for the config document
134
+ dbName - optional, name of the db instance in the couch server
135
+
136
+ """
137
+ self.data.application.configuration.configCacheUrl = url
138
+ self.data.application.configuration.configId = document
139
+ self.data.application.configuration.cacheName = dbName
140
+ docUrl = "%s/%s/%s" % (url, dbName, document)
141
+ self.data.application.configuration.configUrl = docUrl
142
+ self.data.application.configuration.retrieveConfigUrl = "%s/configFile" % docUrl
143
+
144
+ def setDataProcessingConfig(self, scenarioName, functionName, **args):
145
+ """
146
+ _setDataProcessingConfig_
147
+
148
+ Set a configuration library to be used from the CMSSW Release
149
+ DataProcessing package.
150
+
151
+ """
152
+ self.data.application.configuration.scenario = scenarioName
153
+ self.data.application.configuration.function = functionName
154
+ # assume if this crashes we are dealing with complex data
155
+ # which is only supported in new agents that only look
156
+ # at pickledarguments anyways
157
+ try:
158
+ self.data.application.configuration.section_('arguments')
159
+ [setattr(self.data.application.configuration.arguments, k, v) for k, v in viewitems(args)]
160
+ except Exception:
161
+ pass
162
+ # FIXME: once both central services and WMAgent are in Py3, we can remove protocol=0
163
+ self.data.application.configuration.pickledarguments = pickle.dumps(args, protocol=0)
164
+ return
165
+
166
+ def cmsswSetup(self, cmsswVersion, **options):
167
+ """
168
+ _cmsswSetup_
169
+
170
+ Provide setup details for CMSSW.
171
+
172
+ cmsswVersion - required - version of CMSSW to use
173
+
174
+ Optional:
175
+
176
+ scramCommand - defaults to scramv1
177
+ scramProject - defaults to CMSSW
178
+ scramArch - optional scram architecture, defaults to None
179
+ buildArch - optional scram build architecture, defaults to None
180
+ softwareEnvironment - setup command to bootstrap scram,defaults to None
181
+ """
182
+ self.data.application.setup.cmsswVersion = cmsswVersion
183
+ for k, v in viewitems(options):
184
+ setattr(self.data.application.setup, k, v)
185
+ return
186
+
187
+ def getScramArch(self):
188
+ """
189
+ _getScramArch_
190
+
191
+ Retrieve the scram architecture used for this step.
192
+ """
193
+ return self.data.application.setup.scramArch
194
+
195
+ def getCMSSWVersion(self):
196
+ """
197
+ _getCMSSWVersion_
198
+
199
+ Retrieve the version of the framework used for this step.
200
+ """
201
+ return self.data.application.setup.cmsswVersion
202
+
203
+ def setGlobalTag(self, globalTag):
204
+ """
205
+ _setGlobalTag_
206
+
207
+ Set the global tag.
208
+ """
209
+ self.data.application.configuration.section_('arguments')
210
+ self.data.application.configuration.arguments.globalTag = globalTag
211
+
212
+ args = {}
213
+ if hasattr(self.data.application.configuration, "pickledarguments"):
214
+ args = pickle.loads(encodeUnicodeToBytes(self.data.application.configuration.pickledarguments))
215
+ args['globalTag'] = globalTag
216
+ # FIXME: once both central services and WMAgent are in Py3, we can remove protocol=0
217
+ self.data.application.configuration.pickledarguments = pickle.dumps(args, protocol=0)
218
+
219
+ return
220
+
221
+ def getGlobalTag(self):
222
+ """
223
+ _getGlobalTag_
224
+
225
+ Retrieve the global tag.
226
+ """
227
+ if hasattr(self.data.application.configuration, "arguments"):
228
+ if hasattr(self.data.application.configuration.arguments, "globalTag"):
229
+ return self.data.application.configuration.arguments.globalTag
230
+
231
+ pickledArgs = encodeUnicodeToBytes(self.data.application.configuration.pickledarguments)
232
+ return pickle.loads(pickledArgs)['globalTag']
233
+
234
+ def setDatasetName(self, datasetName):
235
+ """
236
+ _setDatasetName_
237
+
238
+ Set the dataset name in the pickled arguments
239
+ """
240
+ self.data.application.configuration.section_('arguments')
241
+ self.data.application.configuration.arguments.datasetName = datasetName
242
+
243
+ args = {}
244
+ if hasattr(self.data.application.configuration, "pickledarguments"):
245
+ args = pickle.loads(encodeUnicodeToBytes(self.data.application.configuration.pickledarguments))
246
+ args['datasetName'] = datasetName
247
+ # FIXME: once both central services and WMAgent are in Py3, we can remove protocol=0
248
+ self.data.application.configuration.pickledarguments = pickle.dumps(args, protocol=0)
249
+
250
+ return
251
+
252
+ def getDatasetName(self):
253
+ """
254
+ _getDatasetName_
255
+
256
+ Retrieve the dataset name from the pickled arguments
257
+ """
258
+ if hasattr(self.data.application.configuration, "arguments"):
259
+ if hasattr(self.data.application.configuration.arguments, "datasetName"):
260
+ return self.data.application.configuration.arguments.datasetName
261
+
262
+ return pickle.loads(self.data.application.configuration.pickledarguments).get('datasetName', None)
263
+
264
+ def getScenario(self):
265
+ """
266
+ _getScenario_
267
+
268
+ Retrieve the scenario from the pickled arguments, if any
269
+ """
270
+ if hasattr(self.data.application.configuration, "scenario"):
271
+ return self.data.application.configuration.scenario
272
+
273
+ return None
274
+
275
+ def setUserSandbox(self, userSandbox):
276
+ """
277
+ _setUserSandbox_
278
+
279
+ Sets the userSandbox. Eventually may have to move this to a proper
280
+ list rather than a one element list
281
+ """
282
+ if userSandbox:
283
+ self.data.user.inputSandboxes = [userSandbox]
284
+ return
285
+
286
+ def setUserFiles(self, userFiles):
287
+ """
288
+ _setUserFiles_
289
+
290
+ Sets the list of extra files the user needs
291
+ """
292
+ if userFiles:
293
+ self.data.user.userFiles = userFiles
294
+ return
295
+
296
+ def setUserLFNBase(self, lfnBase):
297
+ """
298
+ _setUserFiles_
299
+
300
+ Sets the list of extra files the user needs
301
+ """
302
+ if lfnBase:
303
+ self.data.user.lfnBase = lfnBase
304
+ return
305
+
306
+ def setupChainedProcessing(self, inputStepName, inputOutputModule):
307
+ """
308
+ _setupChainedProcessing_
309
+
310
+ Set values to support chained CMSSW running.
311
+ """
312
+ self.data.input.chainedProcessing = True
313
+ self.data.input.inputStepName = inputStepName
314
+ self.data.input.inputOutputModule = inputOutputModule
315
+
316
+ def keepOutput(self, keepOutput):
317
+ """
318
+ _keepOutput_
319
+
320
+ Mark whether or not we should keep the output from this step. We don't
321
+ want to keep the output from certain chained steps.
322
+ """
323
+ self.data.output.keep = keepOutput
324
+ return
325
+
326
+ def getPileup(self):
327
+ """
328
+ _getPileup_
329
+
330
+ Retrieve the pileup config from this step.
331
+ """
332
+ return getattr(self.data, "pileup", None)
333
+
334
+ def setupPileup(self, pileupConfig, dbsUrl):
335
+ """
336
+ include pileup input configuration into this step configuration.
337
+ pileupConfig is initially specified as input to the workload
338
+ (user input) and here is available as a dict.
339
+
340
+ """
341
+ # so, e.g. this {"cosmics": "/some/cosmics/dataset", "minbias": "/some/minbias/dataset"}
342
+ # would translate into
343
+ # self.data.pileup.comics.dataset = "/some/cosmics/dataset"
344
+ # self.data.pileup.minbias.dataset = "/some/minbias/dataset"
345
+ self.data.section_("pileup")
346
+ for pileupType, dataset in viewitems(pileupConfig):
347
+ self.data.pileup.section_(pileupType)
348
+ setattr(getattr(self.data.pileup, pileupType), "dataset", dataset)
349
+ setattr(self.data, "dbsUrl", dbsUrl)
350
+
351
+ def setEventsPerLumi(self, eventsPerLumi):
352
+ """
353
+ _setEventsPerLumi_
354
+ Add event per lumi information to the step, so it can be added later
355
+ to the process, this comes from user input
356
+ """
357
+ if eventsPerLumi != None:
358
+ setattr(self.data.application.configuration, "eventsPerLumi", eventsPerLumi)
359
+
360
+ def getSkipBadFiles(self):
361
+ """
362
+ _getSkipBadFiles_
363
+
364
+ Check if we can skip inexistent files instead of failing the job
365
+ """
366
+ return getattr(self.data.application.configuration, "skipBadFiles", False)
367
+
368
+ def setSkipBadFiles(self, skipBadFiles):
369
+ """
370
+ _setSkipBadFiles_
371
+
372
+ Add a flag to indicate the CMSSW process if we can
373
+ skip inexistent files instead of failing the job
374
+ """
375
+ setattr(self.data.application.configuration, "skipBadFiles", skipBadFiles)
376
+
377
+ def setNumberOfCores(self, ncores, nEventStreams=0):
378
+ """
379
+ _setNumberOfCores_
380
+
381
+ Set the number of cores and event streams for CMSSW to run on
382
+ """
383
+ # if None is passed for EventStreams, then set it to 0
384
+ nEventStreams = nEventStreams or 0
385
+
386
+ self.data.application.multicore.numberOfCores = ncores
387
+ self.data.application.multicore.eventStreams = nEventStreams
388
+
389
+ def getNumberOfCores(self):
390
+ """
391
+ _getNumberOfCores_
392
+
393
+ Get number of cores
394
+ """
395
+ return self.data.application.multicore.numberOfCores
396
+
397
+ def getEventStreams(self):
398
+ """
399
+ _getEventStreams_
400
+
401
+ Get number of event streams
402
+ """
403
+ return self.data.application.multicore.eventStreams
404
+
405
+ def setGPUSettings(self, requiresGPU, gpuParams):
406
+ """
407
+ Set whether this CMSSW step should require GPUs and if so, which
408
+ setup should be allowed and/or used
409
+ """
410
+ self.data.application.gpu.gpuRequired = requiresGPU
411
+ self.data.application.gpu.gpuRequirements = gpuParams
412
+
413
+ def getGPUSettings(self):
414
+ """
415
+ Return the GPU configuration for this CMSSW step
416
+ :return: a tuple with:
417
+ * string whether GPU is required or not
418
+ * dictionary with the GPU requirements (or None)
419
+ """
420
+ return (self.data.application.gpu.gpuRequired,
421
+ self.data.application.gpu.gpuRequirements)
422
+
423
+ def getPhysicsTypeFromStepsArg(self, stepsArg, hasPileup=False, hasDatamix=False):
424
+ """
425
+ Get information about the step physics type, based on the
426
+ cmsDriver command line --steps argument
427
+ Reference: https://github.com/cms-sw/cmssw/issues/42587
428
+ :param stepsArg: str with the cmsDriver step arguments
429
+ :param hasPileup: bool, cmsDriver option
430
+ :param hasDatamix: bool, cmsDriver option
431
+ :return: str with all physics types, comman separated
432
+ """
433
+ physicsTypes = {"GEN":"GEN", "SIM":"SIM", "DIGI":"DIGI", "RECO":"RECO", "PAT":"MINIAOD", "NANO":"NANOAOD", "ALL":"GEN,SIM,DIGI,RECO"}
434
+ stepTypes = []
435
+ for stepType in physicsTypes.keys():
436
+ for step in stepsArg.split(","):
437
+ # Steps like DIGI could come in the form of DIGI:pdigi_valid
438
+ step = step.split(':')[0]
439
+ if step == stepType:
440
+ physicsType = physicsTypes.get(stepType)
441
+ if step == "DIGI":
442
+ if hasPileup:
443
+ if hasDatamix:
444
+ physicsType = "DIGI_premix"
445
+ else:
446
+ physicsType = "DIGI_classicalmix"
447
+ else:
448
+ physicsType = "DIGI_nopileup"
449
+ stepTypes.append(physicsType)
450
+ if not stepTypes:
451
+ stepTypes.append("UNKNOWN")
452
+
453
+ return ",".join(stepTypes)
454
+
455
+ def getCmsDriverCommandLineArgs(self, conf):
456
+ """
457
+ Find the command line arguments in a pset config file
458
+ :param conf: config document from configCache object
459
+ :return: str with the cmsDriver command line arguments
460
+ """
461
+ # First, split all new lines
462
+ conf = conf.split('\n')
463
+ # Comment line 4 usually has the command line arguments
464
+ # but find it otherwise (from the comment lines in the conf)
465
+ cmdPattern = "# with command line options:"
466
+ cmd = None
467
+ if conf[4].startswith(cmdPattern):
468
+ cmd = conf[4]
469
+ else:
470
+ for line in conf:
471
+ if line.startswith(cmdPattern):
472
+ cmd = line
473
+ elif not line.startswith('#'):
474
+ break
475
+ # Replace "=" with spaces
476
+ # E.g.: --step=DIGI -> --step DIGI
477
+ if cmd:
478
+ cmd = cmd.replace("=", " ")
479
+
480
+ return cmd
481
+
482
+ def determinePhysicsType(self, configCache=None):
483
+ """
484
+ Get information about the step physics type
485
+ :param configCache: configCache object
486
+ :return: str with the physics types, command separated.
487
+ """
488
+ hasPileup = False
489
+ hasDatamix = False
490
+ try:
491
+ if configCache:
492
+ # command arguments are in line 4
493
+ myconf = configCache.getConfig()
494
+ if myconf == None:
495
+ return "UNKNOWN"
496
+ cmd = self.getCmsDriverCommandLineArgs(myconf)
497
+ cmd = shlex.split(cmd)
498
+ # If we are processing data,
499
+ # just return "DataProcessing"
500
+ if "--data" in cmd:
501
+ return "DataProcessing"
502
+ # The command step arg is either '--step' or '-s'
503
+ # Check for premixing and pileup parameters
504
+ if "--pileup_input" in cmd:
505
+ hasPileup = True
506
+ if "--datamix" in cmd:
507
+ hasDatamix = True
508
+ try:
509
+ stepsArg = cmd[cmd.index("--step")+1]
510
+ except ValueError:
511
+ stepsArg = cmd[cmd.index("-s")+1]
512
+ else:
513
+ stepsArg = "UNKNOWN"
514
+ except (ConfigCacheException, AttributeError, ValueError) as ex:
515
+ stepsArg = "UNKNOWN"
516
+
517
+ return self.getPhysicsTypeFromStepsArg(stepsArg, hasPileup, hasDatamix)
518
+
519
+ def getPhysicsType(self):
520
+ """
521
+ Set the physics type of the step
522
+ :return: str
523
+ """
524
+ return getattr(self.data, "stepPhysicsType", None)
525
+
526
+ def setPhysicsType(self, configCache=None):
527
+ """
528
+ Set the physics type of the step.
529
+ :param configCache: configCache object
530
+ """
531
+ self.data.stepPhysicsType = self.determinePhysicsType(configCache)
532
+
533
+
534
+ class CMSSW(Template):
535
+ """
536
+ _CMSSW_
537
+
538
+ Tools for creating a template CMSSW Step
539
+
540
+ """
541
+
542
+ def install(self, step):
543
+ """
544
+ _install_
545
+
546
+ Add the set of default fields to the step required for running
547
+ a cmssw job
548
+
549
+ """
550
+ stepname = nodeName(step)
551
+ step.stepType = "CMSSW"
552
+ step.application.section_("setup")
553
+ step.application.setup.scramCommand = "scramv1"
554
+ step.application.setup.scramProject = "CMSSW"
555
+ step.application.setup.cmsswVersion = None
556
+ step.application.setup.scramArch = None
557
+ step.application.setup.buildArch = None
558
+ step.application.setup.softwareEnvironment = None
559
+
560
+ step.application.section_("command")
561
+ step.application.command.executable = "cmsRun"
562
+ step.application.command.configuration = "PSet.py"
563
+ step.application.command.configurationPickle = "PSet.pkl"
564
+ step.application.command.configurationHash = None
565
+ step.application.command.psetTweak = None
566
+ step.application.command.arguments = ""
567
+ step.output.jobReport = "FrameworkJobReport.xml"
568
+ step.output.stdout = "%s-stdout.log" % stepname
569
+ step.output.stderr = "%s-stderr.log" % stepname
570
+ step.output.keep = True
571
+ step.output.section_("modules")
572
+
573
+ step.output.section_("analysisFiles")
574
+
575
+ step.section_("runtime")
576
+ step.runtime.preScripts = []
577
+ step.runtime.scramPreScripts = []
578
+ step.runtime.postScripts = []
579
+ step.runtime.postScramScripts = []
580
+
581
+ step.section_("debug")
582
+ step.debug.verbosity = 0
583
+ step.debug.keepLogs = False
584
+
585
+ step.section_("user")
586
+ step.user.inputSandboxes = []
587
+ step.user.script = None
588
+ step.user.outputFiles = []
589
+ step.user.userFiles = []
590
+ step.user.lfnBase = None
591
+
592
+ step.section_("monitoring")
593
+
594
+ # support for multicore cmssw running mode
595
+ step.application.section_("multicore")
596
+ step.application.multicore.numberOfCores = 1
597
+ step.application.multicore.eventStreams = 0
598
+
599
+ # support for GPU in CMSSW (using defaults from StdBase)
600
+ step.application.section_("gpu")
601
+ step.application.gpu.gpuRequired = "forbidden"
602
+ step.application.gpu.gpuRequirements = None
603
+
604
+ def helper(self, step):
605
+ """
606
+ _helper_
607
+
608
+ Wrap the WMStep provided in the CMSSW helper class that
609
+ includes the ability to add and manipulate the details
610
+ of a CMSSW workflow step
611
+
612
+ """
613
+ return CMSSWStepHelper(step)