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.
- Utils/CPMetrics.py +270 -0
- Utils/CertTools.py +100 -0
- Utils/EmailAlert.py +50 -0
- Utils/ExtendedUnitTestCase.py +62 -0
- Utils/FileTools.py +182 -0
- Utils/IteratorTools.py +80 -0
- Utils/MathUtils.py +31 -0
- Utils/MemoryCache.py +119 -0
- Utils/Patterns.py +24 -0
- Utils/Pipeline.py +137 -0
- Utils/PortForward.py +97 -0
- Utils/ProcFS.py +112 -0
- Utils/ProcessStats.py +194 -0
- Utils/PythonVersion.py +17 -0
- Utils/Signals.py +36 -0
- Utils/TemporaryEnvironment.py +27 -0
- Utils/Throttled.py +227 -0
- Utils/Timers.py +130 -0
- Utils/Timestamps.py +86 -0
- Utils/TokenManager.py +143 -0
- Utils/Tracing.py +60 -0
- Utils/TwPrint.py +98 -0
- Utils/Utilities.py +318 -0
- Utils/__init__.py +11 -0
- Utils/wmcoreDTools.py +707 -0
- WMCore/ACDC/Collection.py +57 -0
- WMCore/ACDC/CollectionTypes.py +12 -0
- WMCore/ACDC/CouchCollection.py +67 -0
- WMCore/ACDC/CouchFileset.py +238 -0
- WMCore/ACDC/CouchService.py +73 -0
- WMCore/ACDC/DataCollectionService.py +485 -0
- WMCore/ACDC/Fileset.py +94 -0
- WMCore/ACDC/__init__.py +11 -0
- WMCore/Algorithms/Alarm.py +39 -0
- WMCore/Algorithms/MathAlgos.py +274 -0
- WMCore/Algorithms/MiscAlgos.py +67 -0
- WMCore/Algorithms/ParseXMLFile.py +115 -0
- WMCore/Algorithms/Permissions.py +27 -0
- WMCore/Algorithms/Singleton.py +58 -0
- WMCore/Algorithms/SubprocessAlgos.py +129 -0
- WMCore/Algorithms/__init__.py +7 -0
- WMCore/Cache/GenericDataCache.py +98 -0
- WMCore/Cache/WMConfigCache.py +572 -0
- WMCore/Cache/__init__.py +0 -0
- WMCore/Configuration.py +659 -0
- WMCore/DAOFactory.py +47 -0
- WMCore/DataStructs/File.py +177 -0
- WMCore/DataStructs/Fileset.py +140 -0
- WMCore/DataStructs/Job.py +182 -0
- WMCore/DataStructs/JobGroup.py +142 -0
- WMCore/DataStructs/JobPackage.py +49 -0
- WMCore/DataStructs/LumiList.py +734 -0
- WMCore/DataStructs/Mask.py +219 -0
- WMCore/DataStructs/MathStructs/ContinuousSummaryHistogram.py +197 -0
- WMCore/DataStructs/MathStructs/DiscreteSummaryHistogram.py +92 -0
- WMCore/DataStructs/MathStructs/SummaryHistogram.py +117 -0
- WMCore/DataStructs/MathStructs/__init__.py +0 -0
- WMCore/DataStructs/Pickleable.py +24 -0
- WMCore/DataStructs/Run.py +256 -0
- WMCore/DataStructs/Subscription.py +175 -0
- WMCore/DataStructs/WMObject.py +47 -0
- WMCore/DataStructs/WorkUnit.py +112 -0
- WMCore/DataStructs/Workflow.py +60 -0
- WMCore/DataStructs/__init__.py +8 -0
- WMCore/Database/CMSCouch.py +1430 -0
- WMCore/Database/ConfigDBMap.py +29 -0
- WMCore/Database/CouchMonitoring.py +450 -0
- WMCore/Database/CouchUtils.py +118 -0
- WMCore/Database/DBCore.py +198 -0
- WMCore/Database/DBCreator.py +113 -0
- WMCore/Database/DBExceptionHandler.py +59 -0
- WMCore/Database/DBFactory.py +117 -0
- WMCore/Database/DBFormatter.py +177 -0
- WMCore/Database/Dialects.py +13 -0
- WMCore/Database/ExecuteDAO.py +327 -0
- WMCore/Database/MongoDB.py +241 -0
- WMCore/Database/MySQL/Destroy.py +42 -0
- WMCore/Database/MySQL/ListUserContent.py +20 -0
- WMCore/Database/MySQL/__init__.py +9 -0
- WMCore/Database/MySQLCore.py +132 -0
- WMCore/Database/Oracle/Destroy.py +56 -0
- WMCore/Database/Oracle/ListUserContent.py +19 -0
- WMCore/Database/Oracle/__init__.py +9 -0
- WMCore/Database/ResultSet.py +44 -0
- WMCore/Database/Transaction.py +91 -0
- WMCore/Database/__init__.py +9 -0
- WMCore/Database/ipy_profile_couch.py +438 -0
- WMCore/GlobalWorkQueue/CherryPyThreads/CleanUpTask.py +29 -0
- WMCore/GlobalWorkQueue/CherryPyThreads/HeartbeatMonitor.py +105 -0
- WMCore/GlobalWorkQueue/CherryPyThreads/LocationUpdateTask.py +28 -0
- WMCore/GlobalWorkQueue/CherryPyThreads/ReqMgrInteractionTask.py +35 -0
- WMCore/GlobalWorkQueue/CherryPyThreads/__init__.py +0 -0
- WMCore/GlobalWorkQueue/__init__.py +0 -0
- WMCore/GroupUser/CouchObject.py +127 -0
- WMCore/GroupUser/Decorators.py +51 -0
- WMCore/GroupUser/Group.py +33 -0
- WMCore/GroupUser/Interface.py +73 -0
- WMCore/GroupUser/User.py +96 -0
- WMCore/GroupUser/__init__.py +11 -0
- WMCore/Lexicon.py +836 -0
- WMCore/REST/Auth.py +202 -0
- WMCore/REST/CherryPyPeriodicTask.py +166 -0
- WMCore/REST/Error.py +333 -0
- WMCore/REST/Format.py +642 -0
- WMCore/REST/HeartbeatMonitorBase.py +90 -0
- WMCore/REST/Main.py +636 -0
- WMCore/REST/Server.py +2435 -0
- WMCore/REST/Services.py +24 -0
- WMCore/REST/Test.py +120 -0
- WMCore/REST/Tools.py +38 -0
- WMCore/REST/Validation.py +250 -0
- WMCore/REST/__init__.py +1 -0
- WMCore/ReqMgr/DataStructs/RequestStatus.py +209 -0
- WMCore/ReqMgr/DataStructs/RequestType.py +13 -0
- WMCore/ReqMgr/DataStructs/__init__.py +0 -0
- WMCore/ReqMgr/__init__.py +1 -0
- WMCore/Services/AlertManager/AlertManagerAPI.py +111 -0
- WMCore/Services/AlertManager/__init__.py +0 -0
- WMCore/Services/CRIC/CRIC.py +238 -0
- WMCore/Services/CRIC/__init__.py +0 -0
- WMCore/Services/DBS/DBS3Reader.py +1044 -0
- WMCore/Services/DBS/DBSConcurrency.py +44 -0
- WMCore/Services/DBS/DBSErrors.py +112 -0
- WMCore/Services/DBS/DBSReader.py +23 -0
- WMCore/Services/DBS/DBSUtils.py +166 -0
- WMCore/Services/DBS/DBSWriterObjects.py +381 -0
- WMCore/Services/DBS/ProdException.py +133 -0
- WMCore/Services/DBS/__init__.py +8 -0
- WMCore/Services/FWJRDB/FWJRDBAPI.py +118 -0
- WMCore/Services/FWJRDB/__init__.py +0 -0
- WMCore/Services/HTTPS/HTTPSAuthHandler.py +66 -0
- WMCore/Services/HTTPS/__init__.py +0 -0
- WMCore/Services/LogDB/LogDB.py +201 -0
- WMCore/Services/LogDB/LogDBBackend.py +191 -0
- WMCore/Services/LogDB/LogDBExceptions.py +11 -0
- WMCore/Services/LogDB/LogDBReport.py +85 -0
- WMCore/Services/LogDB/__init__.py +0 -0
- WMCore/Services/MSPileup/__init__.py +0 -0
- WMCore/Services/MSUtils/MSUtils.py +54 -0
- WMCore/Services/MSUtils/__init__.py +0 -0
- WMCore/Services/McM/McM.py +173 -0
- WMCore/Services/McM/__init__.py +8 -0
- WMCore/Services/MonIT/Grafana.py +133 -0
- WMCore/Services/MonIT/__init__.py +0 -0
- WMCore/Services/PyCondor/PyCondorAPI.py +154 -0
- WMCore/Services/PyCondor/__init__.py +0 -0
- WMCore/Services/ReqMgr/ReqMgr.py +261 -0
- WMCore/Services/ReqMgr/__init__.py +0 -0
- WMCore/Services/ReqMgrAux/ReqMgrAux.py +419 -0
- WMCore/Services/ReqMgrAux/__init__.py +0 -0
- WMCore/Services/RequestDB/RequestDBReader.py +267 -0
- WMCore/Services/RequestDB/RequestDBWriter.py +39 -0
- WMCore/Services/RequestDB/__init__.py +0 -0
- WMCore/Services/Requests.py +624 -0
- WMCore/Services/Rucio/Rucio.py +1290 -0
- WMCore/Services/Rucio/RucioUtils.py +74 -0
- WMCore/Services/Rucio/__init__.py +0 -0
- WMCore/Services/RucioConMon/RucioConMon.py +121 -0
- WMCore/Services/RucioConMon/__init__.py +0 -0
- WMCore/Services/Service.py +400 -0
- WMCore/Services/StompAMQ/__init__.py +0 -0
- WMCore/Services/TagCollector/TagCollector.py +155 -0
- WMCore/Services/TagCollector/XMLUtils.py +98 -0
- WMCore/Services/TagCollector/__init__.py +0 -0
- WMCore/Services/UUIDLib.py +13 -0
- WMCore/Services/UserFileCache/UserFileCache.py +160 -0
- WMCore/Services/UserFileCache/__init__.py +8 -0
- WMCore/Services/WMAgent/WMAgent.py +63 -0
- WMCore/Services/WMAgent/__init__.py +0 -0
- WMCore/Services/WMArchive/CMSSWMetrics.py +526 -0
- WMCore/Services/WMArchive/DataMap.py +463 -0
- WMCore/Services/WMArchive/WMArchive.py +33 -0
- WMCore/Services/WMArchive/__init__.py +0 -0
- WMCore/Services/WMBS/WMBS.py +97 -0
- WMCore/Services/WMBS/__init__.py +0 -0
- WMCore/Services/WMStats/DataStruct/RequestInfoCollection.py +300 -0
- WMCore/Services/WMStats/DataStruct/__init__.py +0 -0
- WMCore/Services/WMStats/WMStatsPycurl.py +145 -0
- WMCore/Services/WMStats/WMStatsReader.py +445 -0
- WMCore/Services/WMStats/WMStatsWriter.py +273 -0
- WMCore/Services/WMStats/__init__.py +0 -0
- WMCore/Services/WMStatsServer/WMStatsServer.py +134 -0
- WMCore/Services/WMStatsServer/__init__.py +0 -0
- WMCore/Services/WorkQueue/WorkQueue.py +492 -0
- WMCore/Services/WorkQueue/__init__.py +0 -0
- WMCore/Services/__init__.py +8 -0
- WMCore/Services/pycurl_manager.py +574 -0
- WMCore/WMBase.py +50 -0
- WMCore/WMConnectionBase.py +164 -0
- WMCore/WMException.py +183 -0
- WMCore/WMExceptions.py +269 -0
- WMCore/WMFactory.py +76 -0
- WMCore/WMInit.py +377 -0
- WMCore/WMLogging.py +104 -0
- WMCore/WMSpec/ConfigSectionTree.py +442 -0
- WMCore/WMSpec/Persistency.py +135 -0
- WMCore/WMSpec/Steps/BuildMaster.py +87 -0
- WMCore/WMSpec/Steps/BuildTools.py +201 -0
- WMCore/WMSpec/Steps/Builder.py +97 -0
- WMCore/WMSpec/Steps/Diagnostic.py +89 -0
- WMCore/WMSpec/Steps/Emulator.py +62 -0
- WMCore/WMSpec/Steps/ExecuteMaster.py +208 -0
- WMCore/WMSpec/Steps/Executor.py +210 -0
- WMCore/WMSpec/Steps/StepFactory.py +213 -0
- WMCore/WMSpec/Steps/TaskEmulator.py +75 -0
- WMCore/WMSpec/Steps/Template.py +204 -0
- WMCore/WMSpec/Steps/Templates/AlcaHarvest.py +76 -0
- WMCore/WMSpec/Steps/Templates/CMSSW.py +613 -0
- WMCore/WMSpec/Steps/Templates/DQMUpload.py +59 -0
- WMCore/WMSpec/Steps/Templates/DeleteFiles.py +70 -0
- WMCore/WMSpec/Steps/Templates/LogArchive.py +84 -0
- WMCore/WMSpec/Steps/Templates/LogCollect.py +105 -0
- WMCore/WMSpec/Steps/Templates/StageOut.py +105 -0
- WMCore/WMSpec/Steps/Templates/__init__.py +10 -0
- WMCore/WMSpec/Steps/WMExecutionFailure.py +21 -0
- WMCore/WMSpec/Steps/__init__.py +8 -0
- WMCore/WMSpec/Utilities.py +63 -0
- WMCore/WMSpec/WMSpecErrors.py +12 -0
- WMCore/WMSpec/WMStep.py +347 -0
- WMCore/WMSpec/WMTask.py +1997 -0
- WMCore/WMSpec/WMWorkload.py +2288 -0
- WMCore/WMSpec/WMWorkloadTools.py +382 -0
- WMCore/WMSpec/__init__.py +9 -0
- WMCore/WorkQueue/DataLocationMapper.py +273 -0
- WMCore/WorkQueue/DataStructs/ACDCBlock.py +47 -0
- WMCore/WorkQueue/DataStructs/Block.py +48 -0
- WMCore/WorkQueue/DataStructs/CouchWorkQueueElement.py +148 -0
- WMCore/WorkQueue/DataStructs/WorkQueueElement.py +274 -0
- WMCore/WorkQueue/DataStructs/WorkQueueElementResult.py +152 -0
- WMCore/WorkQueue/DataStructs/WorkQueueElementsSummary.py +185 -0
- WMCore/WorkQueue/DataStructs/__init__.py +0 -0
- WMCore/WorkQueue/Policy/End/EndPolicyInterface.py +44 -0
- WMCore/WorkQueue/Policy/End/SingleShot.py +22 -0
- WMCore/WorkQueue/Policy/End/__init__.py +32 -0
- WMCore/WorkQueue/Policy/PolicyInterface.py +17 -0
- WMCore/WorkQueue/Policy/Start/Block.py +258 -0
- WMCore/WorkQueue/Policy/Start/Dataset.py +180 -0
- WMCore/WorkQueue/Policy/Start/MonteCarlo.py +131 -0
- WMCore/WorkQueue/Policy/Start/ResubmitBlock.py +171 -0
- WMCore/WorkQueue/Policy/Start/StartPolicyInterface.py +316 -0
- WMCore/WorkQueue/Policy/Start/__init__.py +34 -0
- WMCore/WorkQueue/Policy/__init__.py +57 -0
- WMCore/WorkQueue/WMBSHelper.py +772 -0
- WMCore/WorkQueue/WorkQueue.py +1237 -0
- WMCore/WorkQueue/WorkQueueBackend.py +750 -0
- WMCore/WorkQueue/WorkQueueBase.py +39 -0
- WMCore/WorkQueue/WorkQueueExceptions.py +44 -0
- WMCore/WorkQueue/WorkQueueReqMgrInterface.py +278 -0
- WMCore/WorkQueue/WorkQueueUtils.py +130 -0
- WMCore/WorkQueue/__init__.py +13 -0
- WMCore/Wrappers/JsonWrapper/JSONThunker.py +342 -0
- WMCore/Wrappers/JsonWrapper/__init__.py +7 -0
- WMCore/Wrappers/__init__.py +6 -0
- WMCore/__init__.py +10 -0
- wmglobalqueue-2.4.5.1.data/data/bin/wmc-dist-patch +15 -0
- wmglobalqueue-2.4.5.1.data/data/bin/wmc-dist-unpatch +8 -0
- wmglobalqueue-2.4.5.1.data/data/bin/wmc-httpd +3 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/.couchapprc +1 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/README.md +40 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/_attachments/index.html +264 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/_attachments/js/ElementInfoByWorkflow.js +96 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/_attachments/js/StuckElementInfo.js +57 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/_attachments/js/WorkloadInfoTable.js +80 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/_attachments/js/dataTable.js +70 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/_attachments/js/namespace.js +23 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/_attachments/style/main.css +75 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/couchapp.json +4 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/filters/childQueueFilter.js +13 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/filters/filterDeletedDocs.js +3 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/filters/queueFilter.js +11 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/language +1 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/lib/mustache.js +333 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/lib/validate.js +27 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/lib/workqueue_utils.js +61 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/lists/elementsDetail.js +28 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/lists/filter.js +86 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/lists/stuckElements.js +38 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/lists/workRestrictions.js +153 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/lists/workflowSummary.js +28 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/rewrites.json +73 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/shows/redirect.js +23 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/shows/status.js +40 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/templates/ElementSummaryByWorkflow.html +27 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/templates/StuckElementSummary.html +26 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/templates/TaskStatus.html +23 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/templates/WorkflowSummary.html +27 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/templates/partials/workqueue-common-lib.html +2 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/templates/partials/yui-lib-remote.html +16 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/templates/partials/yui-lib.html +18 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/updates/in-place.js +50 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/validate_doc_update.js +8 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/vendor/couchapp/_attachments/jquery.couch.app.js +235 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/vendor/couchapp/_attachments/jquery.pathbinder.js +173 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/activeData/map.js +8 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/activeData/reduce.js +2 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/activeParentData/map.js +8 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/activeParentData/reduce.js +2 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/activePileupData/map.js +8 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/activePileupData/reduce.js +2 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/analyticsData/map.js +11 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/analyticsData/reduce.js +1 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/availableByPriority/map.js +6 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/conflicts/map.js +5 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/elements/map.js +5 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/elementsByData/map.js +8 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/elementsByParent/map.js +8 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/elementsByParentData/map.js +8 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/elementsByPileupData/map.js +8 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/elementsByStatus/map.js +8 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/elementsBySubscription/map.js +6 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/elementsByWorkflow/map.js +8 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/elementsByWorkflow/reduce.js +3 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/elementsDetailByWorkflowAndStatus/map.js +26 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobInjectStatusByRequest/map.js +10 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobInjectStatusByRequest/reduce.js +1 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobStatusByRequest/map.js +6 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobStatusByRequest/reduce.js +1 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobsByChildQueueAndPriority/map.js +6 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobsByChildQueueAndPriority/reduce.js +1 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobsByChildQueueAndStatus/map.js +6 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobsByChildQueueAndStatus/reduce.js +1 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobsByRequest/map.js +6 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobsByRequest/reduce.js +1 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobsByStatus/map.js +6 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobsByStatus/reduce.js +1 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobsByStatusAndPriority/map.js +6 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/jobsByStatusAndPriority/reduce.js +1 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/openRequests/map.js +6 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/recent-items/map.js +5 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/siteWhitelistByRequest/map.js +6 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/siteWhitelistByRequest/reduce.js +1 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/specsByWorkflow/map.js +5 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/stuckElements/map.js +38 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/wmbsInjectStatusByRequest/map.js +12 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/wmbsInjectStatusByRequest/reduce.js +3 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/wmbsUrl/map.js +6 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/wmbsUrl/reduce.js +2 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/wmbsUrlByRequest/map.js +6 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/wmbsUrlByRequest/reduce.js +2 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/workflowSummary/map.js +9 -0
- wmglobalqueue-2.4.5.1.data/data/data/couchapps/WorkQueue/views/workflowSummary/reduce.js +10 -0
- wmglobalqueue-2.4.5.1.dist-info/METADATA +26 -0
- wmglobalqueue-2.4.5.1.dist-info/RECORD +347 -0
- wmglobalqueue-2.4.5.1.dist-info/WHEEL +5 -0
- wmglobalqueue-2.4.5.1.dist-info/licenses/LICENSE +202 -0
- wmglobalqueue-2.4.5.1.dist-info/licenses/NOTICE +16 -0
- wmglobalqueue-2.4.5.1.dist-info/top_level.txt +2 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# encoding: utf-8
|
|
3
|
+
"""
|
|
4
|
+
Collection.py
|
|
5
|
+
|
|
6
|
+
Created by Dave Evans on 2010-03-11.
|
|
7
|
+
Copyright (c) 2010 Fermilab. All rights reserved.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from WMCore.DataStructs.WMObject import WMObject
|
|
11
|
+
import WMCore.ACDC.CollectionTypes as CollectionTypes
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class Collection(dict, WMObject):
|
|
15
|
+
def __init__(self, **options):
|
|
16
|
+
dict.__init__(self)
|
|
17
|
+
WMObject.__init__(self)
|
|
18
|
+
self.setdefault("name", None)
|
|
19
|
+
self.setdefault("type", CollectionTypes.GenericCollection)
|
|
20
|
+
self.setdefault("filesets", [])
|
|
21
|
+
self.update(options)
|
|
22
|
+
|
|
23
|
+
def create(self, unique=False):
|
|
24
|
+
"""
|
|
25
|
+
_create_
|
|
26
|
+
|
|
27
|
+
Create this Collection in the back end
|
|
28
|
+
|
|
29
|
+
"""
|
|
30
|
+
pass
|
|
31
|
+
|
|
32
|
+
def populate(self):
|
|
33
|
+
"""
|
|
34
|
+
_populate_
|
|
35
|
+
|
|
36
|
+
Pull in all filesets & file entries
|
|
37
|
+
|
|
38
|
+
"""
|
|
39
|
+
pass
|
|
40
|
+
|
|
41
|
+
def drop(self):
|
|
42
|
+
"""
|
|
43
|
+
_drop_
|
|
44
|
+
|
|
45
|
+
Remove this collection.
|
|
46
|
+
"""
|
|
47
|
+
pass
|
|
48
|
+
|
|
49
|
+
def addFileset(self, fileset):
|
|
50
|
+
"""
|
|
51
|
+
_addFiles_
|
|
52
|
+
|
|
53
|
+
Add a fileset to the collection.
|
|
54
|
+
"""
|
|
55
|
+
fileset.setCollection(self)
|
|
56
|
+
self["filesets"].append(fileset)
|
|
57
|
+
return
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# encoding: utf-8
|
|
3
|
+
"""
|
|
4
|
+
CollectionTypes.py
|
|
5
|
+
|
|
6
|
+
Created by Dave Evans on 2010-03-05.
|
|
7
|
+
Copyright (c) 2010 Fermilab. All rights reserved.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
GenericCollection = "ACDC.CollectionTypes.GenericCollection"
|
|
12
|
+
DataCollection = "ACDC.CollectionTypes.DataCollection"
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
"""
|
|
3
|
+
CouchCollection.py
|
|
4
|
+
|
|
5
|
+
Created by Dave Evans on 2010-03-14.
|
|
6
|
+
Copyright (c) 2010 Fermilab. All rights reserved.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from WMCore.ACDC.Collection import Collection
|
|
10
|
+
from WMCore.ACDC.CouchFileset import CouchFileset
|
|
11
|
+
from WMCore.Database.CouchUtils import connectToCouch
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class CouchCollection(Collection):
|
|
15
|
+
"""
|
|
16
|
+
Collection that can be stored in CouchDB.
|
|
17
|
+
|
|
18
|
+
Required Args:
|
|
19
|
+
database - CouchDB database instance name
|
|
20
|
+
url - CouchDB Server URL
|
|
21
|
+
name - name of the collection
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
def __init__(self, **options):
|
|
25
|
+
Collection.__init__(self, **options)
|
|
26
|
+
self.url = options.get("url")
|
|
27
|
+
self.database = options.get("database")
|
|
28
|
+
self.name = options.get("name")
|
|
29
|
+
self.server = None
|
|
30
|
+
self.couchdb = None
|
|
31
|
+
|
|
32
|
+
@connectToCouch
|
|
33
|
+
def drop(self):
|
|
34
|
+
"""
|
|
35
|
+
_drop_
|
|
36
|
+
|
|
37
|
+
Drop this collection and all files and filesets within it.
|
|
38
|
+
"""
|
|
39
|
+
params = {"startkey": [self.name],
|
|
40
|
+
"endkey": [self.name, {}],
|
|
41
|
+
"reduce": False}
|
|
42
|
+
result = self.couchdb.loadView("ACDC", "coll_fileset_docs",
|
|
43
|
+
params)
|
|
44
|
+
|
|
45
|
+
for row in result["rows"]:
|
|
46
|
+
self.couchdb.delete_doc(row["id"])
|
|
47
|
+
return
|
|
48
|
+
|
|
49
|
+
@connectToCouch
|
|
50
|
+
def populate(self):
|
|
51
|
+
"""
|
|
52
|
+
_populate_
|
|
53
|
+
|
|
54
|
+
The load the collection and all filesets and files out of couch.
|
|
55
|
+
"""
|
|
56
|
+
params = {"startkey": [self.name],
|
|
57
|
+
"endkey": [self.name, {}],
|
|
58
|
+
"reduce": True, "group_level": 2}
|
|
59
|
+
result = self.couchdb.loadView("ACDC", "coll_fileset_docs",
|
|
60
|
+
params)
|
|
61
|
+
self["filesets"] = []
|
|
62
|
+
for row in result["rows"]:
|
|
63
|
+
fileset = CouchFileset(database=self.database, url=self.url,
|
|
64
|
+
name=row["key"][1])
|
|
65
|
+
self.addFileset(fileset)
|
|
66
|
+
fileset.populate()
|
|
67
|
+
return
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# encoding: utf-8
|
|
3
|
+
"""
|
|
4
|
+
CouchFileset.py
|
|
5
|
+
|
|
6
|
+
Created by Dave Evans on 2010-03-19.
|
|
7
|
+
Copyright (c) 2010 Fermilab. All rights reserved.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from future.utils import viewvalues
|
|
11
|
+
|
|
12
|
+
import time
|
|
13
|
+
|
|
14
|
+
import WMCore.Database.CMSCouch as CMSCouch
|
|
15
|
+
from WMCore.ACDC.Fileset import Fileset
|
|
16
|
+
from WMCore.Algorithms.ParseXMLFile import coroutine
|
|
17
|
+
from WMCore.DataStructs.File import File
|
|
18
|
+
from WMCore.DataStructs.Fileset import Fileset as DataStructsFileset
|
|
19
|
+
from WMCore.DataStructs.Run import Run
|
|
20
|
+
from WMCore.Database.CouchUtils import connectToCouch, requireFilesetName
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
@coroutine
|
|
24
|
+
def makeRun(targets):
|
|
25
|
+
"""
|
|
26
|
+
_makeRun_
|
|
27
|
+
|
|
28
|
+
create a DataStruct Run instance form the Couch JSON dict
|
|
29
|
+
"""
|
|
30
|
+
while True:
|
|
31
|
+
fileRef, runs = (yield)
|
|
32
|
+
for run in runs:
|
|
33
|
+
newRun = Run(run[u'Run'], *run[u'Lumis'])
|
|
34
|
+
fileRef.addRun(newRun)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
@coroutine
|
|
38
|
+
def filePipeline(targets):
|
|
39
|
+
"""
|
|
40
|
+
_conversionPipeline_
|
|
41
|
+
|
|
42
|
+
"""
|
|
43
|
+
while True:
|
|
44
|
+
inputDict = (yield)
|
|
45
|
+
newFile = File(
|
|
46
|
+
lfn=str(inputDict[u'lfn']),
|
|
47
|
+
size=int(inputDict[u'size']),
|
|
48
|
+
events=int(inputDict[u'events'])
|
|
49
|
+
)
|
|
50
|
+
targets['run'].send((newFile, inputDict[u'runs']))
|
|
51
|
+
targets['fileset'].addFile(newFile)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
class CouchFileset(Fileset):
|
|
55
|
+
def __init__(self, **options):
|
|
56
|
+
Fileset.__init__(self, **options)
|
|
57
|
+
self.url = options.get('url')
|
|
58
|
+
self.database = options.get('database')
|
|
59
|
+
self['name'] = options.get('name')
|
|
60
|
+
self.server = None
|
|
61
|
+
self.couchdb = None
|
|
62
|
+
|
|
63
|
+
@connectToCouch
|
|
64
|
+
def drop(self):
|
|
65
|
+
"""
|
|
66
|
+
_drop_
|
|
67
|
+
|
|
68
|
+
Remove this fileset
|
|
69
|
+
|
|
70
|
+
This is racy. someone can add to the fileset before we get done
|
|
71
|
+
deleting it. Actually, they can delete after we get done deleting
|
|
72
|
+
it too. Oh well.
|
|
73
|
+
"""
|
|
74
|
+
for d in self.filelistDocuments():
|
|
75
|
+
self.couchdb.delete_doc(d)
|
|
76
|
+
|
|
77
|
+
@connectToCouch
|
|
78
|
+
@requireFilesetName
|
|
79
|
+
def filelistDocuments(self):
|
|
80
|
+
"""
|
|
81
|
+
_filelistDocuments_
|
|
82
|
+
|
|
83
|
+
Get a list of document ids corresponding to filelists in this fileset
|
|
84
|
+
"""
|
|
85
|
+
params = {"startkey": [self.collectionName, self["name"]],
|
|
86
|
+
"endkey": [self.collectionName, self["name"]],
|
|
87
|
+
"reduce": False}
|
|
88
|
+
result = self.couchdb.loadView("ACDC", "coll_fileset_docs",
|
|
89
|
+
params)
|
|
90
|
+
|
|
91
|
+
docs = [row["id"] for row in result["rows"]]
|
|
92
|
+
return docs
|
|
93
|
+
|
|
94
|
+
@connectToCouch
|
|
95
|
+
@requireFilesetName
|
|
96
|
+
def add(self, files, mask=None):
|
|
97
|
+
"""
|
|
98
|
+
_add_
|
|
99
|
+
|
|
100
|
+
Add files to this fileset
|
|
101
|
+
|
|
102
|
+
Note: if job was lumi based splitted, then we do not have
|
|
103
|
+
reliable events information. If job was event based splitted,
|
|
104
|
+
then we do not have reliable lumi information.
|
|
105
|
+
"""
|
|
106
|
+
filteredFiles = []
|
|
107
|
+
if mask:
|
|
108
|
+
for f in files:
|
|
109
|
+
# There might be no LastEvent for last job of a file
|
|
110
|
+
if mask['LastEvent'] and mask['FirstEvent']:
|
|
111
|
+
f['events'] = mask['LastEvent'] - mask['FirstEvent'] + 1
|
|
112
|
+
f['first_event'] = mask['FirstEvent']
|
|
113
|
+
elif mask['FirstEvent']:
|
|
114
|
+
f['events'] = f['events'] - mask['FirstEvent'] + 1
|
|
115
|
+
f['first_event'] = mask['FirstEvent']
|
|
116
|
+
|
|
117
|
+
maskLumis = mask.getRunAndLumis()
|
|
118
|
+
if maskLumis != {}:
|
|
119
|
+
# Then we actually have to do something
|
|
120
|
+
for f in files:
|
|
121
|
+
newRuns = mask.filterRunLumisByMask(runs=f['runs'])
|
|
122
|
+
if newRuns != set([]):
|
|
123
|
+
f['runs'] = newRuns
|
|
124
|
+
filteredFiles.append(f)
|
|
125
|
+
else:
|
|
126
|
+
# Likely real data with EventBased splitting
|
|
127
|
+
filteredFiles = files
|
|
128
|
+
else:
|
|
129
|
+
filteredFiles = files
|
|
130
|
+
|
|
131
|
+
jsonFiles = {}
|
|
132
|
+
for f in filteredFiles:
|
|
133
|
+
jsonFiles.__setitem__(f['lfn'], f.__to_json__(None))
|
|
134
|
+
fileList = self.makeFilelist(jsonFiles)
|
|
135
|
+
return fileList
|
|
136
|
+
|
|
137
|
+
@connectToCouch
|
|
138
|
+
@requireFilesetName
|
|
139
|
+
def makeFilelist(self, files=None):
|
|
140
|
+
"""
|
|
141
|
+
_makeFilelist_
|
|
142
|
+
|
|
143
|
+
Create a new filelist document containing the id
|
|
144
|
+
"""
|
|
145
|
+
files = files or {}
|
|
146
|
+
# add a version to each of these ACDC docs such that we can properly
|
|
147
|
+
# parse them and avoid issues between ACDC docs and agent base code
|
|
148
|
+
input = {"collection_name": self.collectionName,
|
|
149
|
+
"collection_type": self.collectionType,
|
|
150
|
+
"fileset_name": self["name"],
|
|
151
|
+
"files": files,
|
|
152
|
+
"acdc_version": 2,
|
|
153
|
+
"timestamp": time.time()}
|
|
154
|
+
|
|
155
|
+
document = CMSCouch.Document(None, input)
|
|
156
|
+
|
|
157
|
+
commitInfo = self.couchdb.commitOne(document)
|
|
158
|
+
document['_id'] = commitInfo[0]['id']
|
|
159
|
+
if 'rev' in commitInfo[0]:
|
|
160
|
+
document['_rev'] = commitInfo[0]['rev']
|
|
161
|
+
else:
|
|
162
|
+
if commitInfo[0]['reason'].find('{exit_status,0}') != -1:
|
|
163
|
+
# TODO: in this case actually insert succeeded but return error
|
|
164
|
+
# due to the bug
|
|
165
|
+
# https://issues.apache.org/jira/browse/COUCHDB-893
|
|
166
|
+
# if rev is needed to proceed need to get by
|
|
167
|
+
# self.couchdb.documentExist(document['_id'])
|
|
168
|
+
# but that function need to be changed to return _rev
|
|
169
|
+
document['_rev'] = "NeedToGet"
|
|
170
|
+
else:
|
|
171
|
+
msg = "Unable to insert document: check acdc server doc id: %s" % document['_id']
|
|
172
|
+
raise RuntimeError(msg)
|
|
173
|
+
return document
|
|
174
|
+
|
|
175
|
+
@connectToCouch
|
|
176
|
+
def listFiles(self):
|
|
177
|
+
"""
|
|
178
|
+
_listFiles_
|
|
179
|
+
|
|
180
|
+
return an iterator over the files contained in this fileset
|
|
181
|
+
"""
|
|
182
|
+
for filelist in self.filelistDocuments():
|
|
183
|
+
try:
|
|
184
|
+
doc = self.couchdb.document(filelist)
|
|
185
|
+
except CMSCouch.CouchNotFoundError as ex:
|
|
186
|
+
msg = "Unable to retrieve Couch Document for fileset"
|
|
187
|
+
msg += str(msg)
|
|
188
|
+
raise RuntimeError(msg)
|
|
189
|
+
|
|
190
|
+
files = doc["files"]
|
|
191
|
+
for d in viewvalues(files):
|
|
192
|
+
yield d
|
|
193
|
+
|
|
194
|
+
@connectToCouch
|
|
195
|
+
def fileset(self):
|
|
196
|
+
"""
|
|
197
|
+
_fileset_
|
|
198
|
+
|
|
199
|
+
Make a WMCore.DataStruct.Fileset instance containing the files in this fileset
|
|
200
|
+
|
|
201
|
+
"""
|
|
202
|
+
result = DataStructsFileset(self['name'])
|
|
203
|
+
pipeline = filePipeline({'fileset': result, 'run': makeRun({})})
|
|
204
|
+
for f in self.listFiles():
|
|
205
|
+
pipeline.send(f)
|
|
206
|
+
return result
|
|
207
|
+
|
|
208
|
+
@connectToCouch
|
|
209
|
+
@requireFilesetName
|
|
210
|
+
def populate(self):
|
|
211
|
+
"""
|
|
212
|
+
_populate_
|
|
213
|
+
|
|
214
|
+
Load all files out of couch.
|
|
215
|
+
"""
|
|
216
|
+
params = {"startkey": [self.collectionName, self["name"]],
|
|
217
|
+
"endkey": [self.collectionName, self["name"]],
|
|
218
|
+
"include_docs": True, "reduce": False}
|
|
219
|
+
result = self.couchdb.loadView("ACDC", "coll_fileset_docs",
|
|
220
|
+
params)
|
|
221
|
+
self.files = {}
|
|
222
|
+
for row in result["rows"]:
|
|
223
|
+
self.files.update(row["doc"]["files"])
|
|
224
|
+
self["files"] = self.files
|
|
225
|
+
return
|
|
226
|
+
|
|
227
|
+
def fileCount(self):
|
|
228
|
+
"""
|
|
229
|
+
_fileCount_
|
|
230
|
+
|
|
231
|
+
Determine how many files are in the fileset.
|
|
232
|
+
"""
|
|
233
|
+
params = {"startkey": [self.collectionName, self["name"]],
|
|
234
|
+
"endkey": [self.collectionName, self["name"]],
|
|
235
|
+
"reduce": True, "group_level": 2}
|
|
236
|
+
result = self.couchdb.loadView("ACDC", "coll_fileset_count",
|
|
237
|
+
params)
|
|
238
|
+
return result["rows"][0]["value"]
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# encoding: utf-8
|
|
3
|
+
"""
|
|
4
|
+
CouchService.py
|
|
5
|
+
|
|
6
|
+
Created by Dave Evans on 2010-04-20.
|
|
7
|
+
Copyright (c) 2010 Fermilab. All rights reserved.
|
|
8
|
+
"""
|
|
9
|
+
from builtins import object
|
|
10
|
+
from time import time
|
|
11
|
+
|
|
12
|
+
import WMCore.Database.CouchUtils as CouchUtils
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class CouchService(object):
|
|
16
|
+
def __init__(self, **options):
|
|
17
|
+
super(CouchService, self).__init__()
|
|
18
|
+
self.options = {}
|
|
19
|
+
self.options.update(options)
|
|
20
|
+
self.url = options.get('url', None)
|
|
21
|
+
self.database = options.get('database', None)
|
|
22
|
+
self.server = None
|
|
23
|
+
self.couchdb = None
|
|
24
|
+
|
|
25
|
+
def listFilesets(self, collectionInstance):
|
|
26
|
+
"""
|
|
27
|
+
_listFilesets_
|
|
28
|
+
|
|
29
|
+
List filesets for the collection instance provided.
|
|
30
|
+
"""
|
|
31
|
+
collectionInstance.populate()
|
|
32
|
+
|
|
33
|
+
for fileset in collectionInstance["filesets"]:
|
|
34
|
+
yield fileset
|
|
35
|
+
|
|
36
|
+
@CouchUtils.connectToCouch
|
|
37
|
+
def removeFilesetsByCollectionName(self, collectionName):
|
|
38
|
+
"""
|
|
39
|
+
_removeFilesetsByCollectionName_
|
|
40
|
+
|
|
41
|
+
Remove all the collections matching certain collection
|
|
42
|
+
name.
|
|
43
|
+
"""
|
|
44
|
+
result = self.couchdb.loadView("ACDC", "byCollectionName", options={"reduce": False}, keys=[collectionName])
|
|
45
|
+
for entry in result["rows"]:
|
|
46
|
+
self.couchdb.queueDelete(entry["value"])
|
|
47
|
+
return self.couchdb.commit()
|
|
48
|
+
|
|
49
|
+
@CouchUtils.connectToCouch
|
|
50
|
+
def removeOldFilesets(self, expirationDays):
|
|
51
|
+
"""
|
|
52
|
+
_removeOldFilesets_
|
|
53
|
+
|
|
54
|
+
Remove filesets older than certain date defined
|
|
55
|
+
in expirationDays (in days).
|
|
56
|
+
"""
|
|
57
|
+
cutoutPoint = time() - (expirationDays * 3600 * 24)
|
|
58
|
+
result = self.couchdb.loadView("ACDC", "byTimestamp", {"endkey": cutoutPoint})
|
|
59
|
+
count = 0
|
|
60
|
+
for entry in result["rows"]:
|
|
61
|
+
self.couchdb.queueDelete(entry["value"])
|
|
62
|
+
count += 1
|
|
63
|
+
self.couchdb.commit()
|
|
64
|
+
return count
|
|
65
|
+
|
|
66
|
+
@CouchUtils.connectToCouch
|
|
67
|
+
def listCollectionNames(self):
|
|
68
|
+
options = {'reduce': True, 'group_level': 1, 'stale': "update_after"}
|
|
69
|
+
result = self.couchdb.loadView("ACDC", "byCollectionName", options)
|
|
70
|
+
collectionNames = []
|
|
71
|
+
for row in result["rows"]:
|
|
72
|
+
collectionNames.append(row["key"])
|
|
73
|
+
return collectionNames
|