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,154 @@
1
+ """
2
+ _PyCondorAPI_
3
+
4
+ Class used to interact with Condor daemons on the agent
5
+ """
6
+
7
+ from __future__ import print_function, division
8
+
9
+ from builtins import str, object
10
+ from past.builtins import basestring
11
+ import logging
12
+ try:
13
+ # This module has dependency with python binding for condor package (condor)
14
+ import htcondor
15
+ except ImportError:
16
+ pass
17
+
18
+
19
+ class PyCondorAPI(object):
20
+ """
21
+ Some APIs to interact with HTCondor via the HTCondor python bindings.
22
+ """
23
+ def __init__(self):
24
+ self.schedd = htcondor.Schedd()
25
+ self.coll = htcondor.Collector()
26
+
27
+ def recreateSchedd(self):
28
+ """
29
+ In case our current schedd object is in a "strange" state, we
30
+ better recreate it.
31
+ """
32
+ logging.warning("Recreating Schedd instance due to query error...")
33
+ self.schedd = htcondor.Schedd()
34
+
35
+ def getCondorJobsSummary(self):
36
+ """
37
+ Retrieves a job summary from the HTCondor Schedd object
38
+ :return: a list of classads representing the matching jobs, or None if failed
39
+ """
40
+ jobs = None # return None to signalize the query failed
41
+ queryOpts = htcondor.htcondor.QueryOpts.SummaryOnly
42
+ try:
43
+ return self.schedd.query(opts=queryOpts)
44
+ except Exception:
45
+ self.recreateSchedd()
46
+
47
+ try:
48
+ jobs = self.schedd.query(opts=queryOpts)
49
+ except Exception as ex:
50
+ logging.exception("Failed to fetch summary of jobs from Condor Schedd. Error: %s", str(ex))
51
+ return jobs
52
+
53
+ def getCondorJobs(self, constraint='true', attrList=None, limit=-1, opts="Default"):
54
+ """
55
+ Given a job/schedd constraint, return a list of job classad.
56
+ :param constraint: the query constraint (str or ExprTree). Defaults to 'true'
57
+ :param attrList: a list of attribute strings to be returned in the call.
58
+ It defaults to all attributes.
59
+ :param limit: a limit on the number of matches to return. Defaults to -1 (all)
60
+ :param opts: string with additional flags for the query. Defaults to Default.
61
+ https://htcondor.readthedocs.io/en/v8_9_7/apis/python-bindings/api/htcondor.html#htcondor.QueryOpts
62
+ :return: returns an iterator to the job classads
63
+ """
64
+ attrList = attrList or []
65
+ # if option parameter is invalid, default it to the standard behavior
66
+ opts = getattr(htcondor.htcondor.QueryOpts, opts, "Default")
67
+ msg = "Querying condor schedd with params: constraint=%s, attrList=%s, limit=%s, opts=%s"
68
+ logging.info(msg, constraint, attrList, limit, opts)
69
+ try:
70
+ return self.schedd.query(constraint, attrList, limit, opts=opts)
71
+ except Exception:
72
+ self.recreateSchedd()
73
+
74
+ # if we hit another exception, let it be raised up in the chain
75
+ return self.schedd.query(constraint, attrList, limit, opts=opts)
76
+
77
+ def editCondorJobs(self, job_spec, attr, value):
78
+ """
79
+ _editCondorJobs_
80
+
81
+ Edit a set of condor jobs given an attribute and value
82
+ job_spec can be a list of job IDs or a string specifying a constraint
83
+ """
84
+ success = False
85
+ try:
86
+ self.schedd.edit(job_spec, attr, value)
87
+ success = True
88
+ except Exception as ex:
89
+ # edit doesn't distinguish between an error and not matching any jobs
90
+ # check for this message and assume it just didn't match any jobs
91
+ if isinstance(ex, RuntimeError) and str(ex) == "Unable to edit jobs matching constraint":
92
+ success = True
93
+ msg = "Condor constraint did not match any jobs. "
94
+ msg += "Message from schedd: %s" % str(ex)
95
+ logging.info(msg)
96
+ else:
97
+ msg = "Condor failed to edit the jobs. "
98
+ msg += "Error message: %s" % str(ex)
99
+ logging.exception(msg)
100
+
101
+ return success
102
+
103
+ def isScheddOverloaded(self):
104
+ """
105
+ check whether job limit is reached in local schedd.
106
+ Condition is check by following logic.
107
+ ( ShadowsRunning > 9.700000000000000E-01 * MAX_RUNNING_JOBS) )
108
+ || ( RecentDaemonCoreDutyCycle > 9.800000000000000E-01 )
109
+ """
110
+ try:
111
+ scheddAd = self.coll.locate(htcondor.DaemonTypes.Schedd)
112
+ q = self.coll.query(htcondor.AdTypes.Schedd, 'Name == "%s"' % scheddAd['Name'],
113
+ projection=['CurbMatchmaking'])[0]
114
+ isOverloaded = q['CurbMatchmaking'].eval()
115
+ return isOverloaded
116
+ except Exception:
117
+ # if there is an error, try to recreate the collector instance
118
+ logging.info("Recreating Collector instance due to query error...")
119
+ self.coll = htcondor.Collector()
120
+ try:
121
+ scheddAd = self.coll.locate(htcondor.DaemonTypes.Schedd)
122
+ q = self.coll.query(htcondor.AdTypes.Schedd, 'Name == "%s"' % scheddAd['Name'],
123
+ projection=['CurbMatchmaking'])[0]
124
+ isOverloaded = q['CurbMatchmaking'].eval()
125
+ except Exception as ex:
126
+ msg = "Condor failed to fetch schedd attributes."
127
+ msg += "Error message: %s" % str(ex)
128
+ logging.exception(msg)
129
+ # since it failed, assume it's overloaded
130
+ isOverloaded = True
131
+
132
+ return isOverloaded
133
+
134
+
135
+ def getScheddParamValue(param):
136
+ """
137
+ _getScheddParamValue_
138
+
139
+ Given a schedd parameter, retrieve it's value with htcondor, e.g.:
140
+ MAX_JOBS_RUNNING, MAX_JOBS_PER_OWNER, etc
141
+ """
142
+ paramResult = None
143
+ if not isinstance(param, basestring):
144
+ logging.error("Parameter %s must be string type", param)
145
+ return paramResult
146
+
147
+ try:
148
+ paramResult = htcondor.param[param]
149
+ except Exception as ex:
150
+ msg = "Condor failed to fetch schedd parameter: %s" % param
151
+ msg += "Error message: %s" % str(ex)
152
+ logging.exception(msg)
153
+
154
+ return paramResult
@@ -0,0 +1,105 @@
1
+ from __future__ import print_function, division
2
+
3
+ from builtins import str, object
4
+
5
+ from future.utils import viewitems
6
+
7
+ import logging
8
+ import os
9
+ import pickle
10
+ import signal
11
+ import time
12
+ import traceback
13
+
14
+ import htcondor
15
+
16
+
17
+ class OutputObj(object):
18
+ """
19
+ Class used when AuthenticatedSubprocess is created with pickleOut
20
+ It stores the output message of the subprocess, any output object provided
21
+ and extra information for debugging purposes, such as the environment
22
+ """
23
+
24
+ def __init__(self, outputMessage, outputObj):
25
+ self.outputMessage = outputMessage
26
+ self.outputObj = outputObj
27
+ self.environmentStr = ""
28
+ for key, val in viewitems(os.environ):
29
+ self.environmentStr += "%s=%s\n" % (key, val)
30
+
31
+
32
+ class AuthenticatedSubprocess(object):
33
+ """
34
+ Context manager for execution of condor commands in a forked, especially useful for
35
+ those commands where a different proxy credential is needed.
36
+ """
37
+
38
+ def __init__(self, proxy=None, pickleOut=False, outputObj=None, logger=logging):
39
+ """
40
+ Basic setup of the context manager
41
+ :param proxy: optional path to the proxy file
42
+ :param pickleOut: boolean flag which enables pickled output data
43
+ :param outputObj: structure storing the actual output of the htcondor call
44
+ :param logger: logger object
45
+ """
46
+ self.proxy = proxy
47
+ self.pickleOut = pickleOut
48
+ self.outputObj = outputObj
49
+ self.timedout = False
50
+ self.logger = logger
51
+
52
+ def __enter__(self):
53
+ self.r, self.w = os.pipe()
54
+ self.rpipe = os.fdopen(self.r, 'r')
55
+ self.wpipe = os.fdopen(self.w, 'w')
56
+ self.pid = os.fork()
57
+ if self.pid == 0 and self.proxy:
58
+ # CRAB case
59
+ htcondor.SecMan().invalidateAllSessions()
60
+ htcondor.param['SEC_CLIENT_AUTHENTICATION_METHODS'] = 'FS,GSI'
61
+ htcondor.param['DELEGATE_FULL_JOB_GSI_CREDENTIALS'] = 'true'
62
+ htcondor.param['DELEGATE_JOB_GSI_CREDENTIALS_LIFETIME'] = '0'
63
+ os.environ['X509_USER_PROXY'] = self.proxy
64
+ self.rpipe.close()
65
+ elif self.pid == 0:
66
+ self.rpipe.close()
67
+ else:
68
+ self.wpipe.close()
69
+ return self.pid, self.rpipe
70
+
71
+ def __exit__(self, a, b, c):
72
+ if self.pid == 0:
73
+ if a is None and b is None and c is None:
74
+ if self.pickleOut:
75
+ oo = OutputObj("OK", self.outputObj)
76
+ self.wpipe.write(pickle.dumps(oo))
77
+ else:
78
+ self.wpipe.write("OK")
79
+ self.wpipe.close()
80
+ os._exit(0)
81
+ else:
82
+ tracebackString = str('\n'.join(traceback.format_tb(c)))
83
+ msg = "Trapped exception in AuthenticatedSubprocess.Fork: %s %s %s \n%s" % \
84
+ (a, b, c, tracebackString)
85
+ if self.pickleOut:
86
+ oo = OutputObj(msg, self.outputObj)
87
+ self.wpipe.write(pickle.dumps(oo))
88
+ else:
89
+ self.wpipe.write(msg)
90
+ self.wpipe.close()
91
+ os._exit(1)
92
+ else:
93
+ timestart = time.time()
94
+ self.timedout = True
95
+ while (time.time() - timestart) < 3600:
96
+ res = os.waitpid(self.pid, os.WNOHANG)
97
+ if res != (0, 0):
98
+ self.timedout = False
99
+ break
100
+ time.sleep(0.100)
101
+ if self.timedout:
102
+ self.logger.warning(
103
+ "Subprocess with PID %s (executed in AuthenticatedSubprocess) timed out. Killing it." % self.pid)
104
+ os.kill(self.pid, signal.SIGTERM)
105
+ # we should probably wait again and send SIGKILL if the kill does not work
File without changes
@@ -0,0 +1,261 @@
1
+ from builtins import str, bytes
2
+ from future.utils import viewitems
3
+
4
+ import json
5
+ import logging
6
+
7
+ from WMCore.Services.Service import Service
8
+ from WMCore.Cache.GenericDataCache import MemoryCacheStruct
9
+
10
+
11
+ class ReqMgr(Service):
12
+ """
13
+ API for dealing with retrieving information from RequestManager dataservice
14
+
15
+ """
16
+
17
+ def __init__(self, url, header=None, logger=None):
18
+ """
19
+ responseType will be either xml or json
20
+ """
21
+
22
+ httpDict = {}
23
+ header = header or {}
24
+ # url is end point
25
+ httpDict['endpoint'] = "%s/data" % url
26
+ httpDict['logger'] = logger if logger else logging.getLogger()
27
+
28
+ # cherrypy converts request.body to params when content type is set
29
+ # application/x-www-form-urlencodeds
30
+ httpDict.setdefault("content_type", 'application/json')
31
+ httpDict.setdefault('cacheduration', 0)
32
+ httpDict.setdefault("accept_type", "application/json")
33
+ httpDict.update(header)
34
+ self.encoder = json.dumps
35
+ Service.__init__(self, httpDict)
36
+ # This is only for the unittest: never set it true unless it is unittest
37
+ self._noStale = False
38
+
39
+ def _getResult(self, callname, clearCache=True, args=None, verb="GET",
40
+ encoder=json.loads, decoder=json.loads, contentType=None):
41
+ """
42
+ _getResult_
43
+ """
44
+ result = ''
45
+ cfile = callname.replace("/", "_")
46
+ if clearCache:
47
+ self.clearCache(cfile, args, verb)
48
+
49
+ f = self.refreshCache(cfile, callname, args, encoder=encoder,
50
+ verb=verb, contentType=contentType)
51
+ result = f.read()
52
+ f.close()
53
+
54
+ if result and decoder:
55
+ result = decoder(result)
56
+
57
+ return result['result']
58
+
59
+ def _createQuery(self, queryDict):
60
+ """
61
+ _createQuery
62
+ :param queryDict: is the format of {name: values} fair. value can be sting, int or list
63
+ :type queryDict: dict
64
+ :returns: url query string
65
+ """
66
+ if self._noStale:
67
+ args = "_nostale=true&"
68
+ else:
69
+ args = ""
70
+ for name, values in viewitems(queryDict):
71
+ if isinstance(values, (str, bytes, int)):
72
+ values = [values]
73
+ for val in values:
74
+ args += '%s=%s&' % (name, val)
75
+
76
+ return args.rstrip('&')
77
+
78
+ def getParentLocks(self):
79
+ """
80
+ _getParentLocks_
81
+
82
+ A public method to return the parent locks from ReqMgr.
83
+ :returns: A list of datasets
84
+
85
+ """
86
+ callname = 'parentlocks'
87
+ result = self._getResult(callname, clearCache=True, verb="GET")
88
+ return result[0][callname]
89
+
90
+ def getRequestByNames(self, names):
91
+
92
+ """
93
+ _getRequestByNames_
94
+
95
+ :param names: list or sting of request name(s)
96
+ :type statusList: list, str
97
+ :returns: list of dict or list of request names depending on the detail value
98
+ -- [{'test_RequestString-OVERRIDE-ME_141125_142331_4966': {'BlockBlacklist': [],
99
+ 'BlockWhitelist': [],
100
+ 'CMSSWVersion': 'CMSSW_4_4_2_patch2',
101
+ ....
102
+ '_id': 'test_RequestString-OVERRIDE-ME_141125_142331_4966',
103
+ 'inputMode': 'couchDB'}}]
104
+ TODO: need proper error handling if status is not 200 from orignal reporting.
105
+ """
106
+
107
+ query = self._createQuery({'name': names})
108
+ callname = 'request?%s' % query
109
+ return self._getResult(callname, verb="GET")
110
+
111
+ def getRequestByStatus(self, statusList, detail=True):
112
+ """
113
+ _getRequestByStatus_
114
+
115
+ :param statusList: list of status
116
+ :type statusList: list
117
+ :param detail: boolean of request list.
118
+ :type detail: boolean
119
+ :returns: list of dict or list of request names depending on the detail value
120
+ -- [{'test_RequestString-OVERRIDE-ME_141125_142331_4966': {'BlockBlacklist': [],
121
+ 'BlockWhitelist': [],
122
+ 'CMSSWVersion': 'CMSSW_4_4_2_patch2',
123
+ ....
124
+ '_id': 'test_RequestString-OVERRIDE-ME_141125_142331_4966',
125
+ 'inputMode': 'couchDB'}}]
126
+ TODO: need proper error handling if status is not 200 from orignal reporting.
127
+ """
128
+
129
+ query = self._createQuery({'status': statusList, 'detail': detail})
130
+ callname = 'request?%s' % query
131
+ return self._getResult(callname, verb="GET")
132
+
133
+ def getRequestTasks(self, name):
134
+
135
+ """
136
+ _getRequestTasks_
137
+
138
+ :param name: request name
139
+ :type string: str
140
+ :returns: list of dict or list of request names depending on the detail value
141
+ -- {result:[{requestTask}, {requestTask}]}
142
+ """
143
+
144
+ callname = 'splitting/%s' % name
145
+ return self._getResult(callname, verb="GET")
146
+
147
+ def getConfig(self, name):
148
+
149
+ """
150
+ _getConfig_
151
+
152
+ :param name: request name
153
+ :type string: str
154
+ :returns: list of dict or list of request names depending on the detail value
155
+ -- {result:[config_string]}
156
+ """
157
+
158
+ callname = 'workload_config/%s' % name
159
+ return self._getResult(callname, verb="GET")
160
+
161
+ def insertRequests(self, requestDict):
162
+ """
163
+ _insertRequests_
164
+
165
+ :param requestDict: request argument dictionary
166
+ :type requestDict: dict
167
+ :returns: list of dictionary -- [{'test_RequestString-OVERRIDE-ME_141125_142331_4966': {'BlockBlacklist': [],
168
+ 'BlockWhitelist': [],
169
+ 'CMSSWVersion': 'CMSSW_4_4_2_patch2',
170
+ ....
171
+ '_id': 'test_RequestString-OVERRIDE-ME_141125_142331_4966',
172
+ 'inputMode': 'couchDB'}}]
173
+ TODO: need proper error handling if status is not 200 from orignal reporting.
174
+ """
175
+ return self["requests"].post('request', requestDict)[0]['result']
176
+
177
+ def updateRequestStatus(self, request, status):
178
+ """
179
+ _updateRequestStatus_
180
+
181
+ :param request: request(workflow name)
182
+ :type reqeust: str
183
+ :param status: status of workflow to update (i.e. 'assigned')
184
+ :type status: str
185
+ :returns: list of dictionary -- [{'test_RequestString-OVERRIDE-ME_141125_142331_4966': {'BlockBlacklist': [],
186
+ 'BlockWhitelist': [],
187
+ 'CMSSWVersion': 'CMSSW_4_4_2_patch2',
188
+ ....
189
+ '_id': 'test_RequestString-OVERRIDE-ME_141125_142331_4966',
190
+ 'inputMode': 'couchDB'}}]
191
+ TODO: need proper error handling if status is not 200 from orignal reporting.
192
+ """
193
+
194
+ status = {"RequestStatus": status}
195
+ status["RequestName"] = request
196
+ return self["requests"].put('request', status)[0]['result']
197
+
198
+ def updateRequestStats(self, request, stats):
199
+ """
200
+ put initial stats for request
201
+ param: stats: dict of {'total_jobs': 100, 'input_lumis': 100,
202
+ 'input_events': 100, 'input_num_files': 100}
203
+ specific to ReqMgr app. not implemented for T0
204
+ """
205
+ # this stats dict will be validated on the server side
206
+ self.updateRequestProperty(request, stats)
207
+
208
+ def updateRequestProperty(self, request, propDict):
209
+ """
210
+ _updateRequestProperty_
211
+ :param request: request(workflow name)
212
+ :type reqeust: str
213
+ :param propDict: request property with key value -- {"SiteWhitelist": ["ABC"], "SiteBlacklist": ["A"], "RequestStatus": "assigned"}
214
+ :type propDict: dict
215
+ :returns: list of dictionary -- [{'test_RequestString-OVERRIDE-ME_141125_142331_4966': {'BlockBlacklist': [],
216
+ 'BlockWhitelist': [],
217
+ 'CMSSWVersion': 'CMSSW_4_4_2_patch2',
218
+ ....
219
+ '_id': 'test_RequestString-OVERRIDE-ME_141125_142331_4966',
220
+ 'inputMode': 'couchDB'}}]
221
+ """
222
+ propDict["RequestName"] = request
223
+ return self["requests"].put('request/%s' % request, propDict)[0]['result']
224
+
225
+ def getAbortedAndForceCompleteRequestsFromMemoryCache(self, expire=0):
226
+ """
227
+ _getAbortedAndForceCompleteRequestsFromMemoryCache_
228
+ """
229
+
230
+ maskStates = ["aborted", "aborted-completed", "force-complete"]
231
+ return self.getRequestByStatusFromMemoryCache(maskStates, expire)
232
+
233
+ def getRequestByStatusFromMemoryCache(self, statusList, expire=0):
234
+
235
+ return MemoryCacheStruct(expire=expire, func=self.getRequestByStatus, initCacheValue=[],
236
+ logger=self['logger'], kwargs={'statusList': statusList, "detail": False})
237
+
238
+ def cloneRequest(self, requestName, overwrittenParams=None):
239
+ """
240
+ _cloneRequest_
241
+
242
+ :param requestName: request name which need to be cloned
243
+ :type reqeust: str
244
+ :param overwrittenParams: status of workflow to update (i.e. 'assigned')
245
+ :type overwrittenParams: dict (dictionary format of parameters need to be overwritten)
246
+ :returns list of dict [{'request': cloned_request_name}]
247
+ """
248
+ params = overwrittenParams or {}
249
+ uri = 'request/clone/%s' % requestName
250
+ return self["requests"].post(uri, params)[0]['result']
251
+
252
+ def getGenericRequestInfo(self, queryDict):
253
+ """
254
+ _getGenericRequestInfo_
255
+ :param queryDict: query dictionary which will be converted to url query string.
256
+ :type queryDict: dict
257
+ :returns list of dict [{'request': { any info request by mask}]
258
+ """
259
+ query = self._createQuery(queryDict)
260
+ callname = 'request?%s' % query
261
+ return self._getResult(callname, verb="GET")
File without changes