wmglobalqueue 2.4.5.1__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 (347) hide show
  1. Utils/CPMetrics.py +270 -0
  2. Utils/CertTools.py +100 -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/ProcFS.py +112 -0
  13. Utils/ProcessStats.py +194 -0
  14. Utils/PythonVersion.py +17 -0
  15. Utils/Signals.py +36 -0
  16. Utils/TemporaryEnvironment.py +27 -0
  17. Utils/Throttled.py +227 -0
  18. Utils/Timers.py +130 -0
  19. Utils/Timestamps.py +86 -0
  20. Utils/TokenManager.py +143 -0
  21. Utils/Tracing.py +60 -0
  22. Utils/TwPrint.py +98 -0
  23. Utils/Utilities.py +318 -0
  24. Utils/__init__.py +11 -0
  25. Utils/wmcoreDTools.py +707 -0
  26. WMCore/ACDC/Collection.py +57 -0
  27. WMCore/ACDC/CollectionTypes.py +12 -0
  28. WMCore/ACDC/CouchCollection.py +67 -0
  29. WMCore/ACDC/CouchFileset.py +238 -0
  30. WMCore/ACDC/CouchService.py +73 -0
  31. WMCore/ACDC/DataCollectionService.py +485 -0
  32. WMCore/ACDC/Fileset.py +94 -0
  33. WMCore/ACDC/__init__.py +11 -0
  34. WMCore/Algorithms/Alarm.py +39 -0
  35. WMCore/Algorithms/MathAlgos.py +274 -0
  36. WMCore/Algorithms/MiscAlgos.py +67 -0
  37. WMCore/Algorithms/ParseXMLFile.py +115 -0
  38. WMCore/Algorithms/Permissions.py +27 -0
  39. WMCore/Algorithms/Singleton.py +58 -0
  40. WMCore/Algorithms/SubprocessAlgos.py +129 -0
  41. WMCore/Algorithms/__init__.py +7 -0
  42. WMCore/Cache/GenericDataCache.py +98 -0
  43. WMCore/Cache/WMConfigCache.py +572 -0
  44. WMCore/Cache/__init__.py +0 -0
  45. WMCore/Configuration.py +659 -0
  46. WMCore/DAOFactory.py +47 -0
  47. WMCore/DataStructs/File.py +177 -0
  48. WMCore/DataStructs/Fileset.py +140 -0
  49. WMCore/DataStructs/Job.py +182 -0
  50. WMCore/DataStructs/JobGroup.py +142 -0
  51. WMCore/DataStructs/JobPackage.py +49 -0
  52. WMCore/DataStructs/LumiList.py +734 -0
  53. WMCore/DataStructs/Mask.py +219 -0
  54. WMCore/DataStructs/MathStructs/ContinuousSummaryHistogram.py +197 -0
  55. WMCore/DataStructs/MathStructs/DiscreteSummaryHistogram.py +92 -0
  56. WMCore/DataStructs/MathStructs/SummaryHistogram.py +117 -0
  57. WMCore/DataStructs/MathStructs/__init__.py +0 -0
  58. WMCore/DataStructs/Pickleable.py +24 -0
  59. WMCore/DataStructs/Run.py +256 -0
  60. WMCore/DataStructs/Subscription.py +175 -0
  61. WMCore/DataStructs/WMObject.py +47 -0
  62. WMCore/DataStructs/WorkUnit.py +112 -0
  63. WMCore/DataStructs/Workflow.py +60 -0
  64. WMCore/DataStructs/__init__.py +8 -0
  65. WMCore/Database/CMSCouch.py +1430 -0
  66. WMCore/Database/ConfigDBMap.py +29 -0
  67. WMCore/Database/CouchMonitoring.py +450 -0
  68. WMCore/Database/CouchUtils.py +118 -0
  69. WMCore/Database/DBCore.py +198 -0
  70. WMCore/Database/DBCreator.py +113 -0
  71. WMCore/Database/DBExceptionHandler.py +59 -0
  72. WMCore/Database/DBFactory.py +117 -0
  73. WMCore/Database/DBFormatter.py +177 -0
  74. WMCore/Database/Dialects.py +13 -0
  75. WMCore/Database/ExecuteDAO.py +327 -0
  76. WMCore/Database/MongoDB.py +241 -0
  77. WMCore/Database/MySQL/Destroy.py +42 -0
  78. WMCore/Database/MySQL/ListUserContent.py +20 -0
  79. WMCore/Database/MySQL/__init__.py +9 -0
  80. WMCore/Database/MySQLCore.py +132 -0
  81. WMCore/Database/Oracle/Destroy.py +56 -0
  82. WMCore/Database/Oracle/ListUserContent.py +19 -0
  83. WMCore/Database/Oracle/__init__.py +9 -0
  84. WMCore/Database/ResultSet.py +44 -0
  85. WMCore/Database/Transaction.py +91 -0
  86. WMCore/Database/__init__.py +9 -0
  87. WMCore/Database/ipy_profile_couch.py +438 -0
  88. WMCore/GlobalWorkQueue/CherryPyThreads/CleanUpTask.py +29 -0
  89. WMCore/GlobalWorkQueue/CherryPyThreads/HeartbeatMonitor.py +105 -0
  90. WMCore/GlobalWorkQueue/CherryPyThreads/LocationUpdateTask.py +28 -0
  91. WMCore/GlobalWorkQueue/CherryPyThreads/ReqMgrInteractionTask.py +35 -0
  92. WMCore/GlobalWorkQueue/CherryPyThreads/__init__.py +0 -0
  93. WMCore/GlobalWorkQueue/__init__.py +0 -0
  94. WMCore/GroupUser/CouchObject.py +127 -0
  95. WMCore/GroupUser/Decorators.py +51 -0
  96. WMCore/GroupUser/Group.py +33 -0
  97. WMCore/GroupUser/Interface.py +73 -0
  98. WMCore/GroupUser/User.py +96 -0
  99. WMCore/GroupUser/__init__.py +11 -0
  100. WMCore/Lexicon.py +836 -0
  101. WMCore/REST/Auth.py +202 -0
  102. WMCore/REST/CherryPyPeriodicTask.py +166 -0
  103. WMCore/REST/Error.py +333 -0
  104. WMCore/REST/Format.py +642 -0
  105. WMCore/REST/HeartbeatMonitorBase.py +90 -0
  106. WMCore/REST/Main.py +636 -0
  107. WMCore/REST/Server.py +2435 -0
  108. WMCore/REST/Services.py +24 -0
  109. WMCore/REST/Test.py +120 -0
  110. WMCore/REST/Tools.py +38 -0
  111. WMCore/REST/Validation.py +250 -0
  112. WMCore/REST/__init__.py +1 -0
  113. WMCore/ReqMgr/DataStructs/RequestStatus.py +209 -0
  114. WMCore/ReqMgr/DataStructs/RequestType.py +13 -0
  115. WMCore/ReqMgr/DataStructs/__init__.py +0 -0
  116. WMCore/ReqMgr/__init__.py +1 -0
  117. WMCore/Services/AlertManager/AlertManagerAPI.py +111 -0
  118. WMCore/Services/AlertManager/__init__.py +0 -0
  119. WMCore/Services/CRIC/CRIC.py +238 -0
  120. WMCore/Services/CRIC/__init__.py +0 -0
  121. WMCore/Services/DBS/DBS3Reader.py +1044 -0
  122. WMCore/Services/DBS/DBSConcurrency.py +44 -0
  123. WMCore/Services/DBS/DBSErrors.py +112 -0
  124. WMCore/Services/DBS/DBSReader.py +23 -0
  125. WMCore/Services/DBS/DBSUtils.py +166 -0
  126. WMCore/Services/DBS/DBSWriterObjects.py +381 -0
  127. WMCore/Services/DBS/ProdException.py +133 -0
  128. WMCore/Services/DBS/__init__.py +8 -0
  129. WMCore/Services/FWJRDB/FWJRDBAPI.py +118 -0
  130. WMCore/Services/FWJRDB/__init__.py +0 -0
  131. WMCore/Services/HTTPS/HTTPSAuthHandler.py +66 -0
  132. WMCore/Services/HTTPS/__init__.py +0 -0
  133. WMCore/Services/LogDB/LogDB.py +201 -0
  134. WMCore/Services/LogDB/LogDBBackend.py +191 -0
  135. WMCore/Services/LogDB/LogDBExceptions.py +11 -0
  136. WMCore/Services/LogDB/LogDBReport.py +85 -0
  137. WMCore/Services/LogDB/__init__.py +0 -0
  138. WMCore/Services/MSPileup/__init__.py +0 -0
  139. WMCore/Services/MSUtils/MSUtils.py +54 -0
  140. WMCore/Services/MSUtils/__init__.py +0 -0
  141. WMCore/Services/McM/McM.py +173 -0
  142. WMCore/Services/McM/__init__.py +8 -0
  143. WMCore/Services/MonIT/Grafana.py +133 -0
  144. WMCore/Services/MonIT/__init__.py +0 -0
  145. WMCore/Services/PyCondor/PyCondorAPI.py +154 -0
  146. WMCore/Services/PyCondor/__init__.py +0 -0
  147. WMCore/Services/ReqMgr/ReqMgr.py +261 -0
  148. WMCore/Services/ReqMgr/__init__.py +0 -0
  149. WMCore/Services/ReqMgrAux/ReqMgrAux.py +419 -0
  150. WMCore/Services/ReqMgrAux/__init__.py +0 -0
  151. WMCore/Services/RequestDB/RequestDBReader.py +267 -0
  152. WMCore/Services/RequestDB/RequestDBWriter.py +39 -0
  153. WMCore/Services/RequestDB/__init__.py +0 -0
  154. WMCore/Services/Requests.py +624 -0
  155. WMCore/Services/Rucio/Rucio.py +1290 -0
  156. WMCore/Services/Rucio/RucioUtils.py +74 -0
  157. WMCore/Services/Rucio/__init__.py +0 -0
  158. WMCore/Services/RucioConMon/RucioConMon.py +121 -0
  159. WMCore/Services/RucioConMon/__init__.py +0 -0
  160. WMCore/Services/Service.py +400 -0
  161. WMCore/Services/StompAMQ/__init__.py +0 -0
  162. WMCore/Services/TagCollector/TagCollector.py +155 -0
  163. WMCore/Services/TagCollector/XMLUtils.py +98 -0
  164. WMCore/Services/TagCollector/__init__.py +0 -0
  165. WMCore/Services/UUIDLib.py +13 -0
  166. WMCore/Services/UserFileCache/UserFileCache.py +160 -0
  167. WMCore/Services/UserFileCache/__init__.py +8 -0
  168. WMCore/Services/WMAgent/WMAgent.py +63 -0
  169. WMCore/Services/WMAgent/__init__.py +0 -0
  170. WMCore/Services/WMArchive/CMSSWMetrics.py +526 -0
  171. WMCore/Services/WMArchive/DataMap.py +463 -0
  172. WMCore/Services/WMArchive/WMArchive.py +33 -0
  173. WMCore/Services/WMArchive/__init__.py +0 -0
  174. WMCore/Services/WMBS/WMBS.py +97 -0
  175. WMCore/Services/WMBS/__init__.py +0 -0
  176. WMCore/Services/WMStats/DataStruct/RequestInfoCollection.py +300 -0
  177. WMCore/Services/WMStats/DataStruct/__init__.py +0 -0
  178. WMCore/Services/WMStats/WMStatsPycurl.py +145 -0
  179. WMCore/Services/WMStats/WMStatsReader.py +445 -0
  180. WMCore/Services/WMStats/WMStatsWriter.py +273 -0
  181. WMCore/Services/WMStats/__init__.py +0 -0
  182. WMCore/Services/WMStatsServer/WMStatsServer.py +134 -0
  183. WMCore/Services/WMStatsServer/__init__.py +0 -0
  184. WMCore/Services/WorkQueue/WorkQueue.py +492 -0
  185. WMCore/Services/WorkQueue/__init__.py +0 -0
  186. WMCore/Services/__init__.py +8 -0
  187. WMCore/Services/pycurl_manager.py +574 -0
  188. WMCore/WMBase.py +50 -0
  189. WMCore/WMConnectionBase.py +164 -0
  190. WMCore/WMException.py +183 -0
  191. WMCore/WMExceptions.py +269 -0
  192. WMCore/WMFactory.py +76 -0
  193. WMCore/WMInit.py +377 -0
  194. WMCore/WMLogging.py +104 -0
  195. WMCore/WMSpec/ConfigSectionTree.py +442 -0
  196. WMCore/WMSpec/Persistency.py +135 -0
  197. WMCore/WMSpec/Steps/BuildMaster.py +87 -0
  198. WMCore/WMSpec/Steps/BuildTools.py +201 -0
  199. WMCore/WMSpec/Steps/Builder.py +97 -0
  200. WMCore/WMSpec/Steps/Diagnostic.py +89 -0
  201. WMCore/WMSpec/Steps/Emulator.py +62 -0
  202. WMCore/WMSpec/Steps/ExecuteMaster.py +208 -0
  203. WMCore/WMSpec/Steps/Executor.py +210 -0
  204. WMCore/WMSpec/Steps/StepFactory.py +213 -0
  205. WMCore/WMSpec/Steps/TaskEmulator.py +75 -0
  206. WMCore/WMSpec/Steps/Template.py +204 -0
  207. WMCore/WMSpec/Steps/Templates/AlcaHarvest.py +76 -0
  208. WMCore/WMSpec/Steps/Templates/CMSSW.py +613 -0
  209. WMCore/WMSpec/Steps/Templates/DQMUpload.py +59 -0
  210. WMCore/WMSpec/Steps/Templates/DeleteFiles.py +70 -0
  211. WMCore/WMSpec/Steps/Templates/LogArchive.py +84 -0
  212. WMCore/WMSpec/Steps/Templates/LogCollect.py +105 -0
  213. WMCore/WMSpec/Steps/Templates/StageOut.py +105 -0
  214. WMCore/WMSpec/Steps/Templates/__init__.py +10 -0
  215. WMCore/WMSpec/Steps/WMExecutionFailure.py +21 -0
  216. WMCore/WMSpec/Steps/__init__.py +8 -0
  217. WMCore/WMSpec/Utilities.py +63 -0
  218. WMCore/WMSpec/WMSpecErrors.py +12 -0
  219. WMCore/WMSpec/WMStep.py +347 -0
  220. WMCore/WMSpec/WMTask.py +1997 -0
  221. WMCore/WMSpec/WMWorkload.py +2288 -0
  222. WMCore/WMSpec/WMWorkloadTools.py +382 -0
  223. WMCore/WMSpec/__init__.py +9 -0
  224. WMCore/WorkQueue/DataLocationMapper.py +273 -0
  225. WMCore/WorkQueue/DataStructs/ACDCBlock.py +47 -0
  226. WMCore/WorkQueue/DataStructs/Block.py +48 -0
  227. WMCore/WorkQueue/DataStructs/CouchWorkQueueElement.py +148 -0
  228. WMCore/WorkQueue/DataStructs/WorkQueueElement.py +274 -0
  229. WMCore/WorkQueue/DataStructs/WorkQueueElementResult.py +152 -0
  230. WMCore/WorkQueue/DataStructs/WorkQueueElementsSummary.py +185 -0
  231. WMCore/WorkQueue/DataStructs/__init__.py +0 -0
  232. WMCore/WorkQueue/Policy/End/EndPolicyInterface.py +44 -0
  233. WMCore/WorkQueue/Policy/End/SingleShot.py +22 -0
  234. WMCore/WorkQueue/Policy/End/__init__.py +32 -0
  235. WMCore/WorkQueue/Policy/PolicyInterface.py +17 -0
  236. WMCore/WorkQueue/Policy/Start/Block.py +258 -0
  237. WMCore/WorkQueue/Policy/Start/Dataset.py +180 -0
  238. WMCore/WorkQueue/Policy/Start/MonteCarlo.py +131 -0
  239. WMCore/WorkQueue/Policy/Start/ResubmitBlock.py +171 -0
  240. WMCore/WorkQueue/Policy/Start/StartPolicyInterface.py +316 -0
  241. WMCore/WorkQueue/Policy/Start/__init__.py +34 -0
  242. WMCore/WorkQueue/Policy/__init__.py +57 -0
  243. WMCore/WorkQueue/WMBSHelper.py +772 -0
  244. WMCore/WorkQueue/WorkQueue.py +1237 -0
  245. WMCore/WorkQueue/WorkQueueBackend.py +750 -0
  246. WMCore/WorkQueue/WorkQueueBase.py +39 -0
  247. WMCore/WorkQueue/WorkQueueExceptions.py +44 -0
  248. WMCore/WorkQueue/WorkQueueReqMgrInterface.py +278 -0
  249. WMCore/WorkQueue/WorkQueueUtils.py +130 -0
  250. WMCore/WorkQueue/__init__.py +13 -0
  251. WMCore/Wrappers/JsonWrapper/JSONThunker.py +342 -0
  252. WMCore/Wrappers/JsonWrapper/__init__.py +7 -0
  253. WMCore/Wrappers/__init__.py +6 -0
  254. WMCore/__init__.py +10 -0
  255. wmglobalqueue-2.4.5.1.data/data/bin/wmc-dist-patch +15 -0
  256. wmglobalqueue-2.4.5.1.data/data/bin/wmc-dist-unpatch +8 -0
  257. wmglobalqueue-2.4.5.1.data/data/bin/wmc-httpd +3 -0
  258. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/.couchapprc +1 -0
  259. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/README.md +40 -0
  260. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/_attachments/index.html +264 -0
  261. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/_attachments/js/ElementInfoByWorkflow.js +96 -0
  262. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/_attachments/js/StuckElementInfo.js +57 -0
  263. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/_attachments/js/WorkloadInfoTable.js +80 -0
  264. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/_attachments/js/dataTable.js +70 -0
  265. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/_attachments/js/namespace.js +23 -0
  266. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/_attachments/style/main.css +75 -0
  267. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/couchapp.json +4 -0
  268. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/filters/childQueueFilter.js +13 -0
  269. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/filters/filterDeletedDocs.js +3 -0
  270. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/filters/queueFilter.js +11 -0
  271. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/language +1 -0
  272. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/lib/mustache.js +333 -0
  273. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/lib/validate.js +27 -0
  274. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/lib/workqueue_utils.js +61 -0
  275. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/lists/elementsDetail.js +28 -0
  276. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/lists/filter.js +86 -0
  277. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/lists/stuckElements.js +38 -0
  278. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/lists/workRestrictions.js +153 -0
  279. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/lists/workflowSummary.js +28 -0
  280. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/rewrites.json +73 -0
  281. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/shows/redirect.js +23 -0
  282. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/shows/status.js +40 -0
  283. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/templates/ElementSummaryByWorkflow.html +27 -0
  284. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/templates/StuckElementSummary.html +26 -0
  285. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/templates/TaskStatus.html +23 -0
  286. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/templates/WorkflowSummary.html +27 -0
  287. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/templates/partials/workqueue-common-lib.html +2 -0
  288. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/templates/partials/yui-lib-remote.html +16 -0
  289. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/templates/partials/yui-lib.html +18 -0
  290. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/updates/in-place.js +50 -0
  291. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/validate_doc_update.js +8 -0
  292. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/vendor/couchapp/_attachments/jquery.couch.app.js +235 -0
  293. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/vendor/couchapp/_attachments/jquery.pathbinder.js +173 -0
  294. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/activeData/map.js +8 -0
  295. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/activeData/reduce.js +2 -0
  296. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/activeParentData/map.js +8 -0
  297. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/activeParentData/reduce.js +2 -0
  298. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/activePileupData/map.js +8 -0
  299. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/activePileupData/reduce.js +2 -0
  300. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/analyticsData/map.js +11 -0
  301. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/analyticsData/reduce.js +1 -0
  302. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/availableByPriority/map.js +6 -0
  303. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/conflicts/map.js +5 -0
  304. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/elements/map.js +5 -0
  305. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/elementsByData/map.js +8 -0
  306. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/elementsByParent/map.js +8 -0
  307. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/elementsByParentData/map.js +8 -0
  308. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/elementsByPileupData/map.js +8 -0
  309. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/elementsByStatus/map.js +8 -0
  310. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/elementsBySubscription/map.js +6 -0
  311. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/elementsByWorkflow/map.js +8 -0
  312. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/elementsByWorkflow/reduce.js +3 -0
  313. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/elementsDetailByWorkflowAndStatus/map.js +26 -0
  314. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobInjectStatusByRequest/map.js +10 -0
  315. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobInjectStatusByRequest/reduce.js +1 -0
  316. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobStatusByRequest/map.js +6 -0
  317. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobStatusByRequest/reduce.js +1 -0
  318. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobsByChildQueueAndPriority/map.js +6 -0
  319. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobsByChildQueueAndPriority/reduce.js +1 -0
  320. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobsByChildQueueAndStatus/map.js +6 -0
  321. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobsByChildQueueAndStatus/reduce.js +1 -0
  322. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobsByRequest/map.js +6 -0
  323. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobsByRequest/reduce.js +1 -0
  324. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobsByStatus/map.js +6 -0
  325. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobsByStatus/reduce.js +1 -0
  326. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobsByStatusAndPriority/map.js +6 -0
  327. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobsByStatusAndPriority/reduce.js +1 -0
  328. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/openRequests/map.js +6 -0
  329. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/recent-items/map.js +5 -0
  330. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/siteWhitelistByRequest/map.js +6 -0
  331. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/siteWhitelistByRequest/reduce.js +1 -0
  332. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/specsByWorkflow/map.js +5 -0
  333. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/stuckElements/map.js +38 -0
  334. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/wmbsInjectStatusByRequest/map.js +12 -0
  335. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/wmbsInjectStatusByRequest/reduce.js +3 -0
  336. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/wmbsUrl/map.js +6 -0
  337. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/wmbsUrl/reduce.js +2 -0
  338. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/wmbsUrlByRequest/map.js +6 -0
  339. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/wmbsUrlByRequest/reduce.js +2 -0
  340. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/workflowSummary/map.js +9 -0
  341. wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/workflowSummary/reduce.js +10 -0
  342. wmglobalqueue-2.4.5.1.dist-info/METADATA +26 -0
  343. wmglobalqueue-2.4.5.1.dist-info/RECORD +347 -0
  344. wmglobalqueue-2.4.5.1.dist-info/WHEEL +5 -0
  345. wmglobalqueue-2.4.5.1.dist-info/licenses/LICENSE +202 -0
  346. wmglobalqueue-2.4.5.1.dist-info/licenses/NOTICE +16 -0
  347. wmglobalqueue-2.4.5.1.dist-info/top_level.txt +2 -0
WMCore/REST/Error.py ADDED
@@ -0,0 +1,333 @@
1
+ from builtins import str as newstr
2
+ import random, cherrypy
3
+
4
+ class RESTError(Exception):
5
+ """Base class for REST errors.
6
+
7
+ .. attribute:: http_code
8
+
9
+ Integer, HTTP status code for this error. Also emitted as X-Error-HTTP
10
+ header value.
11
+
12
+ .. attribute:: app_code
13
+
14
+ Integer, application error code, to be emitted as X-REST-Status header.
15
+
16
+ .. attribute:: message
17
+
18
+ String, information about the error, to be emitted as X-Error-Detail
19
+ header. Should not contain anything sensitive, and in particular should
20
+ never include any unvalidated or unsafe data, e.g. input parameters or
21
+ data from a database. Normally a fixed label with one-to-one match with
22
+ the :obj:`app-code`. If the text exceeds 200 characters, it's truncated.
23
+ Since this is emitted as a HTTP header, it cannot contain newlines or
24
+ anything encoding-dependent.
25
+
26
+ .. attribute:: info
27
+
28
+ String, additional information beyond :obj:`message`, to be emitted as
29
+ X-Error-Info header. Like :obj:`message` should not contain anything
30
+ sensitive or unsafe, or text inappropriate for a HTTP response header,
31
+ and should be short enough to fit in 200 characters. This is normally
32
+ free form text to clarify why the error happened.
33
+
34
+ .. attribute:: errid
35
+
36
+ String, random unique identifier for this error, to be emitted as
37
+ X-Error-ID header and output into server logs when logging the error.
38
+ The purpose is that clients save this id when they receive an error,
39
+ and further error reporting or debugging can use this value to identify
40
+ the specific error, and for example to grep logs for more information.
41
+
42
+ .. attribute:: errobj
43
+
44
+ If the problem was caused by another exception being raised in the code,
45
+ reference to the original exception object. For example if the code dies
46
+ with an :class:`KeyError`, this is the original exception object. This
47
+ error is logged to the server logs when reporting the error, but no
48
+ information about it is returned to the HTTP client.
49
+
50
+ .. attribute:: trace
51
+
52
+ The origin of the exception as returned by :func:`format_exc`. The full
53
+ trace is emitted to the server logs, each line prefixed with timestamp.
54
+ This information is not returned to the HTTP client.
55
+ """
56
+
57
+ http_code = None
58
+ app_code = None
59
+ message = None
60
+ info = None
61
+ errid = None
62
+ errobj = None
63
+ trace = None
64
+
65
+ def __init__(self, info = None, errobj = None, trace = None):
66
+ self.errid = "%032x" % random.randrange(1 << 128)
67
+ self.errobj = errobj
68
+ self.info = info
69
+ self.trace = trace
70
+
71
+ def __str__(self):
72
+ return "%s %s [HTTP %d, APP %d, MSG %s, INFO %s, ERR %s]" \
73
+ % (self.__class__.__name__, self.errid, self.http_code, self.app_code,
74
+ repr(self.message).replace("\n", " ~~ "),
75
+ repr(self.info).replace("\n", " ~~ "),
76
+ repr(self.errobj).replace("\n", " ~~ "))
77
+
78
+ class NotAcceptable(RESTError):
79
+ "Client did not specify format it accepts, or no compatible format was found."
80
+ http_code = 406
81
+ app_code = 201
82
+ message = "Not acceptable"
83
+
84
+ class UnsupportedMethod(RESTError):
85
+ "Client used HTTP request method which isn't supported for any API call."
86
+ http_code = 405
87
+ app_code = 202
88
+ message = "Request method not supported"
89
+
90
+ class MethodWithoutQueryString(RESTError):
91
+ "Client provided a query string which isn't acceptable for this request method."
92
+ http_code = 405
93
+ app_code = 203
94
+ message = "Query arguments not supported for this request method"
95
+
96
+ class APIMethodMismatch(RESTError):
97
+ """Both the API and HTTP request methods are supported, but not in that
98
+ combination."""
99
+ http_code = 405
100
+ app_code = 204
101
+ message = "API not supported for this request method"
102
+
103
+ class APINotSpecified(RESTError):
104
+ "The request URL is missing API argument."
105
+ http_code = 400
106
+ app_code = 205
107
+ message = "API not specified"
108
+
109
+ class NoSuchInstance(RESTError):
110
+ """The request URL is missing instance argument or the specified instance
111
+ does not exist."""
112
+ http_code = 404
113
+ app_code = 206
114
+ message = "No such instance"
115
+
116
+ class APINotSupported(RESTError):
117
+ "The request URL provides wrong API argument."
118
+ http_code = 404
119
+ app_code = 207
120
+ message = "API not supported"
121
+
122
+ class DataCacheEmpty(RESTError):
123
+ "The wmstats data cache has not be created."
124
+ http_code = 503
125
+ app_code = 208
126
+ message = "DataCache is Empty"
127
+
128
+ class DatabaseError(RESTError):
129
+ """Parent class for database-related errors.
130
+
131
+ .. attribute: lastsql
132
+
133
+ A tuple of *(sql, binds, kwbinds),* where `sql` is the last SQL statement
134
+ executed and `binds`, `kwbinds` are the bind values used with it. Any
135
+ sensitive parts like passwords have already been censored from the `sql`
136
+ string. Note that for massive requests `binds` or `kwbinds` can get large.
137
+ These are logged out in the server logs when reporting the error, but no
138
+ information about these are returned to the HTTP client.
139
+
140
+ .. attribute: intance
141
+
142
+ String, the database instance for which the error occurred. This is
143
+ reported in the error message output to server logs, but no information
144
+ about this is returned to the HTTP client."""
145
+
146
+ lastsql = None
147
+ instance = None
148
+ def __init__(self, info = None, errobj = None, trace = None,
149
+ lastsql = None, instance = None):
150
+ RESTError.__init__(self, info, errobj, trace)
151
+ self.lastsql = lastsql
152
+ self.instance = instance
153
+
154
+ class DatabaseUnavailable(DatabaseError):
155
+ """The instance argument is correct, but cannot connect to the database.
156
+ This error will only occur at initial attempt to connect to the database,
157
+ :class:`~.DatabaseConnectionError` is raised instead if the connection
158
+ ends prematurely after the transaction has already begun successfully."""
159
+ http_code = 503
160
+ app_code = 401
161
+ message = "Database unavailable"
162
+
163
+ class DatabaseConnectionError(DatabaseError):
164
+ """Database was available when the operation started, but the connection
165
+ was lost or otherwise failed during the application operation."""
166
+ http_code = 504
167
+ app_code = 402
168
+ message = "Database connection failure"
169
+
170
+ class DatabaseExecutionError(DatabaseError):
171
+ """Database operation failed."""
172
+ http_code = 500
173
+ app_code = 403
174
+ message = "Execution error"
175
+
176
+ class MissingParameter(RESTError):
177
+ "Client did not supply a parameter which is required."
178
+ http_code = 400
179
+ app_code = 301
180
+ message = "Missing required parameter"
181
+
182
+ class InvalidParameter(RESTError):
183
+ "Client supplied invalid value for a parameter."
184
+ http_code = 400
185
+ app_code = 302
186
+ message = "Invalid input parameter"
187
+
188
+ class MissingObject(RESTError):
189
+ """An object required for the operation is missing. This might be a
190
+ pre-requisite needed to create a reference, or attempt to delete
191
+ an object which does not exist."""
192
+ http_code = 400
193
+ app_code = 303
194
+ message = "Required object is missing"
195
+
196
+ class TooManyObjects(RESTError):
197
+ """Too many objects matched specified criteria. Usually this means
198
+ more than one object was matched, deleted, or inserted, when only
199
+ exactly one should have been subject to the operation."""
200
+ http_code = 400
201
+ app_code = 304
202
+ message = "Too many objects"
203
+
204
+ class ObjectAlreadyExists(RESTError):
205
+ """An already existing object is on the way of the operation. This
206
+ is usually caused by uniqueness constraint violations when creating
207
+ new objects."""
208
+ http_code = 400
209
+ app_code = 305
210
+ message = "Object already exists"
211
+
212
+ class InvalidObject(RESTError):
213
+ "The specified object is invalid."
214
+ http_code = 400
215
+ app_code = 306
216
+ message = "Invalid object"
217
+
218
+ class ExecutionError(RESTError):
219
+ """Input was in principle correct but there was an error processing
220
+ the request. This normally means either programming error, timeout, or
221
+ an unusual and unexpected problem with the database. For security reasons
222
+ little additional information is returned. If the problem persists, client
223
+ should contact service operators. The returned error id can be used as a
224
+ reference."""
225
+ http_code = 500
226
+ app_code = 403
227
+ message = "Execution error"
228
+
229
+
230
+ class MissingBodyData(RESTError):
231
+ """Exception for requests missing body data."""
232
+ http_code = 400
233
+ app_code = 1201
234
+
235
+ def __init__(self):
236
+ RESTError.__init__(self)
237
+ self.message = "User did not pass any body data with the request"
238
+
239
+
240
+ class InvalidUnifiedSchema(RESTError):
241
+ """Exception for incorrect user data schema."""
242
+ http_code = 400
243
+ app_code = 1202
244
+
245
+ def __init__(self, message):
246
+ RESTError.__init__(self)
247
+ self.message = message
248
+
249
+
250
+ def report_error_header(header, val):
251
+ """If `val` is non-empty, set CherryPy response `header` to `val`.
252
+ Replaces all newlines with "; " characters. If the resulting value is
253
+ longer than 200 characters, truncates it to the first 197 characters
254
+ and leaves a trailing ellipsis "..."."""
255
+ if val:
256
+ val = val.replace("\n", "; ")
257
+ if len(val) > 200: val = val[:197] + "..."
258
+ cherrypy.response.headers[header] = val
259
+
260
+ def report_rest_error(err, trace, throw):
261
+ """Report a REST error: generate an appropriate log message, set the
262
+ response headers and raise an appropriate :class:`~.HTTPError`.
263
+
264
+ Normally `throw` would be True to translate the exception `err` into
265
+ a HTTP server error, but the function can also be called with `throw`
266
+ set to False if the purpose is merely to log an exception message.
267
+
268
+ :arg err: exception object.
269
+ :arg trace: stack trace to use in case `err` doesn't have one.
270
+ :arg throw: raise a :class:`~.HTTPError` if True."""
271
+ if isinstance(err, DatabaseError) and err.errobj:
272
+ offset = None
273
+ sql, binds, kwbinds = err.lastsql
274
+ if sql and err.errobj.args and hasattr(err.errobj.args[0], 'offset'):
275
+ offset = err.errobj.args[0].offset
276
+ sql = sql[:offset] + "<**>" + sql[offset:]
277
+ cherrypy.log("SERVER DATABASE ERROR %d/%d %s %s.%s %s [instance: %s] (%s);"
278
+ " last statement: %s; binds: %s, %s; offset: %s"
279
+ % (err.http_code, err.app_code, err.message,
280
+ getattr(err.errobj, "__module__", "__builtins__"),
281
+ err.errobj.__class__.__name__,
282
+ err.errid, err.instance, newstr(err.errobj).rstrip(),
283
+ sql, binds, kwbinds, offset))
284
+ for line in err.trace.rstrip().split("\n"): cherrypy.log(" " + line)
285
+ cherrypy.response.headers["X-REST-Status"] = newstr(err.app_code)
286
+ cherrypy.response.headers["X-Error-HTTP"] = newstr(err.http_code)
287
+ cherrypy.response.headers["X-Error-ID"] = err.errid
288
+ report_error_header("X-Error-Detail", err.message)
289
+ report_error_header("X-Error-Info", err.info)
290
+ if throw: raise cherrypy.HTTPError(err.http_code, err.message)
291
+ elif isinstance(err, RESTError):
292
+ if err.errobj:
293
+ cherrypy.log("SERVER REST ERROR %s.%s %s (%s); derived from %s.%s (%s)"
294
+ % (err.__module__, err.__class__.__name__,
295
+ err.errid, err.message,
296
+ getattr(err.errobj, "__module__", "__builtins__"),
297
+ err.errobj.__class__.__name__,
298
+ newstr(err.errobj).rstrip()))
299
+ trace = err.trace
300
+ else:
301
+ cherrypy.log("SERVER REST ERROR %s.%s %s (%s)"
302
+ % (err.__module__, err.__class__.__name__,
303
+ err.errid, err.message))
304
+ for line in trace.rstrip().split("\n"): cherrypy.log(" " + line)
305
+ cherrypy.response.headers["X-REST-Status"] = newstr(err.app_code)
306
+ cherrypy.response.headers["X-Error-HTTP"] = newstr(err.http_code)
307
+ cherrypy.response.headers["X-Error-ID"] = err.errid
308
+ report_error_header("X-Error-Detail", err.message)
309
+ report_error_header("X-Error-Info", err.info)
310
+ if throw: raise cherrypy.HTTPError(err.http_code, err.message)
311
+ elif isinstance(err, cherrypy.HTTPError):
312
+ errid = "%032x" % random.randrange(1 << 128)
313
+ cherrypy.log("SERVER HTTP ERROR %s.%s %s (%s)"
314
+ % (err.__module__, err.__class__.__name__,
315
+ errid, newstr(err).rstrip()))
316
+ for line in trace.rstrip().split("\n"): cherrypy.log(" " + line)
317
+ cherrypy.response.headers["X-REST-Status"] = newstr(200)
318
+ cherrypy.response.headers["X-Error-HTTP"] = newstr(err.status)
319
+ cherrypy.response.headers["X-Error-ID"] = errid
320
+ report_error_header("X-Error-Detail", err._message)
321
+ if throw: raise err
322
+ else:
323
+ errid = "%032x" % random.randrange(1 << 128)
324
+ cherrypy.log("SERVER OTHER ERROR %s.%s %s (%s)"
325
+ % (getattr(err, "__module__", "__builtins__"),
326
+ err.__class__.__name__,
327
+ errid, newstr(err).rstrip()))
328
+ for line in trace.rstrip().split("\n"): cherrypy.log(" " + line)
329
+ cherrypy.response.headers["X-REST-Status"] = 400
330
+ cherrypy.response.headers["X-Error-HTTP"] = 500
331
+ cherrypy.response.headers["X-Error-ID"] = errid
332
+ report_error_header("X-Error-Detail", "Server error")
333
+ if throw: raise cherrypy.HTTPError(500, "Server error")