diff --git a/docs/source/AdministratorGuide/Tutorials/dmsWithTs.rst b/docs/source/AdministratorGuide/Tutorials/dmsWithTs.rst index 55323f1cfff..c1dfb58cbc5 100644 --- a/docs/source/AdministratorGuide/Tutorials/dmsWithTs.rst +++ b/docs/source/AdministratorGuide/Tutorials/dmsWithTs.rst @@ -88,7 +88,7 @@ script that creates a removal transformation: # set up the DIRAC configuration, parse command line arguments from DIRAC import gLogger, S_OK, S_ERROR - from DIRAC.Core.Base import Script + from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script Script.parseCommandLine() from DIRAC.TransformationSystem.Client.Transformation import Transformation diff --git a/docs/source/AdministratorGuide/Tutorials/installWMS.rst b/docs/source/AdministratorGuide/Tutorials/installWMS.rst index 65ae75710de..147407d977e 100644 --- a/docs/source/AdministratorGuide/Tutorials/installWMS.rst +++ b/docs/source/AdministratorGuide/Tutorials/installWMS.rst @@ -153,7 +153,7 @@ Create a Python script to generate and submit a simple job. Copy paste the follo #!/bin/env python # Magic lines necessary to activate the DIRAC Configuration System # to discover all the required services - from DIRAC.Core.Base import Script + from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script Script.parseCommandLine(ignoreErrors=True) from DIRAC.Interfaces.API.Job import Job from DIRAC.Interfaces.API.Dirac import Dirac diff --git a/docs/source/DeveloperGuide/AddingNewComponents/DevelopingCommands/dirac_my_great_script.py b/docs/source/DeveloperGuide/AddingNewComponents/DevelopingCommands/dirac_my_great_script.py index 5c1cfce3642..1db9dc869ba 100644 --- a/docs/source/DeveloperGuide/AddingNewComponents/DevelopingCommands/dirac_my_great_script.py +++ b/docs/source/DeveloperGuide/AddingNewComponents/DevelopingCommands/dirac_my_great_script.py @@ -16,8 +16,7 @@ __RCSID__ = '$Id$' from DIRAC import S_OK, S_ERROR, gLogger, exit as DIRACExit -from DIRAC.Core.Utilities.DIRACScript import DIRACScript -from DIRAC.Core.Base import Script +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script class Params(object): @@ -29,6 +28,13 @@ def __init__(self): """ C'or """ self.raw = False self.pingsToDo = 1 + # Defined all switches that can be used while calling the script from the command line interface. + self.switches = [ + ('', 'text=', 'Text to be printed'), + ('u', 'upper', 'Print text on upper case'), + ('r', 'showRaw', 'Show raw result from the query', self.setRawResult), + ('p:', 'numPings=', 'Number of pings to do (by default 1)', self.setNumOfPingsToDo) + ] def setRawResult(self, _): """ ShowRaw option callback function, no option argument. @@ -52,26 +58,6 @@ def setNumOfPingsToDo(self, value): return S_OK() -def registerSwitches(): - """ - Registers all switches that can be used while calling the script from the command line interface. - """ - - # Some of the switches have associated a callback, defined on Params class. - cliParams = Params() - - switches = [ - ('', 'text=', 'Text to be printed'), - ('u', 'upper', 'Print text on upper case'), - ('r', 'showRaw', 'Show raw result from the query', cliParams.setRawResult), - ('p:', 'numPings=', 'Number of pings to do (by default 1)', cliParams.setNumOfPingsToDo) - ] - - # Register switches - for switch in switches: - Script.registerSwitch(*switch) - - def registerArguments(): """ Registers a positional arguments that can be used while calling the script from the command line interface. @@ -112,14 +98,15 @@ def parseSwitchesAndPositionalArguments(): # IMPORTANT: Make sure to add the console-scripts entry to setup.cfg as well! -@DIRACScript() +@Script() def main(): """ This is the script main method, which will hold all the logic. """ + params = Params() # Script initialization - registerSwitches() + Script.registerSwitches(params.switches) registerArguments() switchDict, repType, user, services = parseSwitchesAndPositionalArguments() diff --git a/docs/source/DeveloperGuide/AddingNewComponents/DevelopingCommands/dirac_ping_info.py b/docs/source/DeveloperGuide/AddingNewComponents/DevelopingCommands/dirac_ping_info.py index 999e4997121..b1b66934f3f 100644 --- a/docs/source/DeveloperGuide/AddingNewComponents/DevelopingCommands/dirac_ping_info.py +++ b/docs/source/DeveloperGuide/AddingNewComponents/DevelopingCommands/dirac_ping_info.py @@ -13,10 +13,9 @@ __RCSID__ = "$Id$" import sys -from DIRAC import exit as DIRACExit -from DIRAC import S_OK, S_ERROR, gLogger -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript + +from DIRAC import S_OK, S_ERROR, gLogger, exit as DIRACExit +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script # Define a simple class to hold the script parameters @@ -38,7 +37,7 @@ def setNumOfPingsToDo(self, value): return S_OK() -@DIRACScript() +@Script() def main(): # Instantiate the params class cliParams = Params() @@ -49,7 +48,7 @@ def main(): Script.registerArgument(['System: system names']) # Parse the command line and initialize DIRAC - Script.parseCommandLine(ignoreErrors=False) + switches, servicesList = Script.parseCommandLine(ignoreErrors=False) # Get the list of services servicesList = Script.getPositionalArgs() diff --git a/docs/source/DeveloperGuide/AddingNewComponents/DevelopingCommands/index.rst b/docs/source/DeveloperGuide/AddingNewComponents/DevelopingCommands/index.rst index 740ff6729d7..62caf8d7e26 100644 --- a/docs/source/DeveloperGuide/AddingNewComponents/DevelopingCommands/index.rst +++ b/docs/source/DeveloperGuide/AddingNewComponents/DevelopingCommands/index.rst @@ -4,7 +4,7 @@ Developing Commands .. warning:: This instructions here demonstrate how to support both the legacy (Python 2) and future (Python3) installations of DIRAC. - If only having Python 3 support is acceptable, the requirement for scripts to be in the the *scripts* directory of their parent system will be removed and the only requirement will be for the function to be decorated with the ``@DIRACScript()`` decorator. + If only having Python 3 support is acceptable, the requirement for scripts to be in the the *scripts* directory of their parent system will be removed and the only requirement will be for the function to be decorated with the ``@Script()`` decorator. Commands are one of the main interface tools for the users. Commands are also called *scripts* in DIRAC lingo. @@ -37,16 +37,16 @@ which will set the interpreter directive to the python on the environment. **2.** The next is the documentation line which is describing the command. This same documentation line will be used also the command help information available with the *-h* command switch. -**3.** The majority of the code should be contained with a function, often called ``main`` though this is not required. This function should be wrapped with the ``@DIRACScript()`` decorator to allow the DIRAC plugin mechanism to override the script with the function from the highest priority extension. +**3.** The majority of the code should be contained with a function, often called ``main`` though this is not required. This function should be wrapped with the ``@Script()`` decorator to allow the DIRAC plugin mechanism to override the script with the function from the highest priority extension. .. code-block:: python #Import the required DIRAC modules - from DIRAC.Core.Utilities.DIRACScript import DIRACScript + from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script from DIRAC.Interfaces.API.DIRAC import DIRAC from DIRAC import gLogger - @DIRACScript() + @Script() def main(): # Do stuff diff --git a/docs/source/DeveloperGuide/AddingNewComponents/YourFirstDIRACCode/index.rst b/docs/source/DeveloperGuide/AddingNewComponents/YourFirstDIRACCode/index.rst index a0120335186..92efd5eb0e7 100644 --- a/docs/source/DeveloperGuide/AddingNewComponents/YourFirstDIRACCode/index.rst +++ b/docs/source/DeveloperGuide/AddingNewComponents/YourFirstDIRACCode/index.rst @@ -94,7 +94,7 @@ Remember to start the script with: #!/usr/bin/env python """ Some doc: what does this script should do? """ - from DIRAC.Core.Base import Script + from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script Script.parseCommandLine() diff --git a/docs/source/DeveloperGuide/Systems/Framework/stableconns/client.py b/docs/source/DeveloperGuide/Systems/Framework/stableconns/client.py index fc43b6ed788..ade9ab7182a 100644 --- a/docs/source/DeveloperGuide/Systems/Framework/stableconns/client.py +++ b/docs/source/DeveloperGuide/Systems/Framework/stableconns/client.py @@ -4,7 +4,7 @@ import sys import time from DIRAC import S_OK, S_ERROR -from DIRAC.Core.Base import Script +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script from DIRAC.Core.DISET.MessageClient import MessageClient Script.parseCommandLine() diff --git a/docs/source/DeveloperGuide/Systems/Transformation/transformationplugin.rst b/docs/source/DeveloperGuide/Systems/Transformation/transformationplugin.rst index 130c5c64558..80d2f5e6e1b 100644 --- a/docs/source/DeveloperGuide/Systems/Transformation/transformationplugin.rst +++ b/docs/source/DeveloperGuide/Systems/Transformation/transformationplugin.rst @@ -121,7 +121,7 @@ with `setEvenOdd`, and then execute this function to test it. :linenos: from DIRAC import gLogger, S_OK, S_ERROR - from DIRAC.Core.Base import Script + from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script Script.parseCommandLine() from DIRAC.TransformationSystem.Client.Transformation import Transformation diff --git a/docs/source/UserGuide/GettingStarted/UserJobs/DiracAPI/index.rst b/docs/source/UserGuide/GettingStarted/UserJobs/DiracAPI/index.rst index 48c64254fbf..397d6cbf2c4 100644 --- a/docs/source/UserGuide/GettingStarted/UserJobs/DiracAPI/index.rst +++ b/docs/source/UserGuide/GettingStarted/UserJobs/DiracAPI/index.rst @@ -25,7 +25,7 @@ Creating a DIRAC Job using API The API allows creating DIRAC jobs using the Job object, specifying job requirements.:: # setup DIRAC - from DIRAC.Core.Base import Script + from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script Script.parseCommandLine(ignoreErrors=False) from DIRAC.Interfaces.API.Job import Job @@ -63,7 +63,7 @@ Job Monitoring Once you have submitted your jobs to the Grid, a little script can be used to monitor the job status:: # setup DIRAC - from DIRAC.Core.Base import Script + from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script Script.parseCommandLine(ignoreErrors=False) from DIRAC.Interfaces.API.Dirac import Dirac @@ -88,7 +88,7 @@ Job Output When the status of the job is done, the outputs can be retrieved using also a simple script:: # setup DIRAC - from DIRAC.Core.Base import Script + from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script Script.parseCommandLine(ignoreErrors=False) from DIRAC.Interfaces.API.Dirac import Dirac diff --git a/src/DIRAC/AccountingSystem/Client/ReportCLI.py b/src/DIRAC/AccountingSystem/Client/ReportCLI.py index 06447e9e397..25e6e375466 100644 --- a/src/DIRAC/AccountingSystem/Client/ReportCLI.py +++ b/src/DIRAC/AccountingSystem/Client/ReportCLI.py @@ -5,7 +5,7 @@ Once ready it could be used with a script as simple as: -from DIRAC.Core.Base import Script +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script Script.localCfg.addDefaultEntry("LogLevel", "info") Script.parseCommandLine() diff --git a/src/DIRAC/AccountingSystem/scripts/dirac_accounting_decode_fileid.py b/src/DIRAC/AccountingSystem/scripts/dirac_accounting_decode_fileid.py index 99600451996..8fa21ddab89 100755 --- a/src/DIRAC/AccountingSystem/scripts/dirac_accounting_decode_fileid.py +++ b/src/DIRAC/AccountingSystem/scripts/dirac_accounting_decode_fileid.py @@ -5,12 +5,6 @@ ######################################################################## """ Decode Accounting plot URLs - -Usage: - dirac-accounting-decode-fileid [options] ... URL ... - -Arguments: - URL: encoded URL of a DIRAC Accounting plot """ from __future__ import absolute_import from __future__ import division @@ -24,16 +18,15 @@ from six.moves.urllib import parse as urlparse from DIRAC import gLogger -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): from DIRAC.Core.Utilities.Plotting.FileCoding import extractRequestFromFileId - Script.parseCommandLine() + Script.registerArgument(["URL: encoded URL of a DIRAC Accounting plot"]) - fileIds = Script.getPositionalArgs() + _, fileIds = Script.parseCommandLine() for fileId in fileIds: # Try to find if it's a url @@ -53,4 +46,4 @@ def main(): if __name__ == "__main__": - main() + main() diff --git a/src/DIRAC/AccountingSystem/scripts/dirac_admin_accounting_cli.py b/src/DIRAC/AccountingSystem/scripts/dirac_admin_accounting_cli.py index d0a09e8301c..645c3bc1f8e 100755 --- a/src/DIRAC/AccountingSystem/scripts/dirac_admin_accounting_cli.py +++ b/src/DIRAC/AccountingSystem/scripts/dirac_admin_accounting_cli.py @@ -5,9 +5,6 @@ ######################################################################## """ Command line administrative interface to DIRAC Accounting DataStore Service - -Usage: - dirac-admin-accounting-cli [options] ... """ from __future__ import absolute_import from __future__ import division @@ -15,11 +12,10 @@ __RCSID__ = "$Id$" -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): Script.localCfg.addDefaultEntry("LogLevel", "info") Script.parseCommandLine() diff --git a/src/DIRAC/ConfigurationSystem/scripts/dirac_admin_add_resources.py b/src/DIRAC/ConfigurationSystem/scripts/dirac_admin_add_resources.py index 30b3735f686..f05af748824 100755 --- a/src/DIRAC/ConfigurationSystem/scripts/dirac_admin_add_resources.py +++ b/src/DIRAC/ConfigurationSystem/scripts/dirac_admin_add_resources.py @@ -17,8 +17,7 @@ import six -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script from DIRAC import gLogger, exit as DIRACExit from DIRAC.ConfigurationSystem.Client.Utilities import getGridCEs, getSiteUpdates from DIRAC.Core.Utilities.Subprocess import systemCall @@ -256,7 +255,7 @@ def handler(signum, frame): DIRACExit(-1) -@DIRACScript() +@Script() def main(): signal.signal(signal.SIGTERM, handler) signal.signal(signal.SIGINT, handler) diff --git a/src/DIRAC/ConfigurationSystem/scripts/dirac_admin_add_shifter.py b/src/DIRAC/ConfigurationSystem/scripts/dirac_admin_add_shifter.py index 8eb89636d1a..75e059d976e 100755 --- a/src/DIRAC/ConfigurationSystem/scripts/dirac_admin_add_shifter.py +++ b/src/DIRAC/ConfigurationSystem/scripts/dirac_admin_add_shifter.py @@ -5,40 +5,29 @@ ######################################################################## """ Adds or modify a shifter, in the operations section of the CS - -Usage: - dirac-admin-add-shifter [options] ... ShifterRole UserName DIRACGroup ... - -Arguments: - ShifterRole: Name of the shifter role, e.g. DataManager - UserName: A user name, as registered in Registry section - DIRACGroup: DIRAC Group, e.g. diracAdmin (the user has to have this role) """ from __future__ import absolute_import from __future__ import division from __future__ import print_function + __RCSID__ = "$Id$" -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script from DIRAC.ConfigurationSystem.Client.CSAPI import CSAPI from DIRAC import exit as DIRACExit, gLogger -@DIRACScript() +@Script() def main(): + # Registering arguments will automatically add their description to the help menu + Script.registerArgument("ShifterRole: Name of the shifter role, e.g. DataManager") + Script.registerArgument("UserName: A user name, as registered in Registry section") + Script.registerArgument("DIRACGroup: DIRAC Group, e.g. diracAdmin (the user has to have this role)") Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() csAPI = CSAPI() - if len(args) < 3: - Script.showHelp(exitCode=1) - - shifterRole = args[0] - userName = args[1] - diracGroup = args[2] - + shifterRole, userName, diracGroup = Script.getPositionalArgs(group=True) res = csAPI.addShifter({shifterRole: {'User': userName, 'Group': diracGroup}}) if not res['OK']: gLogger.error("Could not add shifter", ": " + res['Message']) diff --git a/src/DIRAC/ConfigurationSystem/scripts/dirac_admin_add_site.py b/src/DIRAC/ConfigurationSystem/scripts/dirac_admin_add_site.py index ff23f95fcfd..adf25849257 100755 --- a/src/DIRAC/ConfigurationSystem/scripts/dirac_admin_add_site.py +++ b/src/DIRAC/ConfigurationSystem/scripts/dirac_admin_add_site.py @@ -8,42 +8,34 @@ If site is already in the CS with another name, error message will be produced. If site is already in the CS with the right name, only new CEs will be added. -Usage: - dirac-admin-add-site [options] ... DIRACSiteName GridSiteName CE [CE] ... - -Arguments: - DIRACSiteName: Name of the site for DIRAC in the form GRID.LOCATION.COUNTRY (ie:LCG.CERN.ch) - GridSiteName: Name of the site in the Grid (ie: CERN-PROD) - CE: Name of the CE to be included in the site (ie: ce111.cern.ch) - Example: - $ dirac-admin-add-site LCG.IN2P3.fr IN2P3-Site + $ dirac-admin-add-site LCG.IN2P3.fr IN2P3-Site ce01.in2p3.fr """ from __future__ import absolute_import from __future__ import division from __future__ import print_function + __RCSID__ = "$Id$" import six -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script from DIRAC import exit as DIRACExit, gLogger from DIRAC.ConfigurationSystem.Client.Helpers.Resources import getDIRACSiteName from DIRAC.ConfigurationSystem.Client.CSAPI import CSAPI -@DIRACScript() +@Script() def main(): + # Registering arguments will automatically add their description to the help menu + Script.registerArgument("DIRACSiteName: Name of the site for DIRAC in the form GRID.LOCATION.COUNTRY " + "(ie: LCG.CERN.ch)") + Script.registerArgument("GridSiteName: Name of the site in the Grid (ie: CERN-PROD)") + Script.registerArgument(["CE: Name of the CE to be included in the site (ie: ce111.cern.ch)"]) Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() - if len(args) < 3: - Script.showHelp(exitCode=1) + diracSiteName, gridSiteName, ces = Script.getPositionalArgs(group=True) - diracSiteName = args[0] - gridSiteName = args[1] - ces = args[2:] try: diracGridType, place, country = diracSiteName.split('.') except ValueError: diff --git a/src/DIRAC/ConfigurationSystem/scripts/dirac_admin_check_config_options.py b/src/DIRAC/ConfigurationSystem/scripts/dirac_admin_check_config_options.py index 8b0676c4564..c63000db1c9 100755 --- a/src/DIRAC/ConfigurationSystem/scripts/dirac_admin_check_config_options.py +++ b/src/DIRAC/ConfigurationSystem/scripts/dirac_admin_check_config_options.py @@ -24,8 +24,7 @@ from diraccfg import CFG from DIRAC import gLogger, S_ERROR, S_OK, gConfig -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script from DIRAC.Core.Utilities.List import fromChar LOG = gLogger @@ -197,13 +196,13 @@ def _printDiff(self, entry, level=''): LOG.error("Unknown DiffType", "%s, %s, %s" % (diffType, fullPath, changes)) def run(self): - """Run configuration comparison.""" + """ Run configuration comparison.""" self._setSwitches() self._check() return S_OK() -@DIRACScript() +@Script() def main(): CheckConfig().run() diff --git a/src/DIRAC/ConfigurationSystem/scripts/dirac_admin_sort_cs_sites.py b/src/DIRAC/ConfigurationSystem/scripts/dirac_admin_sort_cs_sites.py index 6fc9bcae334..13b160cfa47 100755 --- a/src/DIRAC/ConfigurationSystem/scripts/dirac_admin_sort_cs_sites.py +++ b/src/DIRAC/ConfigurationSystem/scripts/dirac_admin_sort_cs_sites.py @@ -7,12 +7,6 @@ Sort site names at CS in "/Resources" section. Sort can be alphabetic or by country postfix in a site name. Alphabetic sort is default (i.e. LCG.IHEP.cn, LCG.IHEP.su, LCG.IN2P3.fr) -Usage: - dirac-admin-sort-cs-sites [options]
- -Arguments: - Section: Name of the subsection in '/Resources/Sites/' for sort (i.e. LCG DIRAC) - Example: $ dirac-admin-sort-cs-sites -C CLOUDS DIRAC sort site names by country postfix in '/Resources/Sites/CLOUDS' and '/Resources/Sites/DIRAC' subsection @@ -24,8 +18,7 @@ __RCSID__ = "$Id$" from DIRAC import gLogger, exit as DIRACExit -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script from DIRAC.Core.Security.ProxyInfo import getProxyInfo from DIRAC.ConfigurationSystem.Client.Helpers.Registry import getPropertiesForGroup from DIRAC.ConfigurationSystem.Client.CSAPI import CSAPI @@ -54,7 +47,7 @@ def country(arg): return cb[2] -@DIRACScript() +@Script() def main(): Script.registerSwitch( "C", @@ -62,6 +55,9 @@ def main(): "Sort site names by country postfix (i.e. LCG.IHEP.cn, LCG.IN2P3.fr, LCG.IHEP.su)", sortBy) Script.registerSwitch("R", "reverse", "Reverse the sort order", isReverse) + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["Section: Name of the subsection in '/Resources/Sites/' for sort (i.e. LCG DIRAC)"], + mandatory=False) Script.parseCommandLine(ignoreErrors=True) args = Script.getPositionalArgs() diff --git a/src/DIRAC/ConfigurationSystem/scripts/dirac_admin_voms_sync.py b/src/DIRAC/ConfigurationSystem/scripts/dirac_admin_voms_sync.py index cf54609072b..543e1d3916d 100755 --- a/src/DIRAC/ConfigurationSystem/scripts/dirac_admin_voms_sync.py +++ b/src/DIRAC/ConfigurationSystem/scripts/dirac_admin_voms_sync.py @@ -15,8 +15,7 @@ import six from DIRAC import gLogger, exit as DIRACExit, S_OK -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script from DIRAC.ConfigurationSystem.Client.VOMS2CSSynchronizer import VOMS2CSSynchronizer from DIRAC.Core.Utilities.Proxy import executeWithUserProxy from DIRAC.ConfigurationSystem.Client.Helpers.Registry import getVOOption @@ -38,7 +37,7 @@ def setVO(value): return S_OK() -@DIRACScript() +@Script() def main(): Script.registerSwitch("V:", "vo=", "VO name", setVO) Script.registerSwitch("D", "dryRun", "Dry run", setDryRun) @@ -48,12 +47,8 @@ def main(): def syncCSWithVOMS(vomsSync): return vomsSync.syncCSWithVOMS() - def getVOAdmin(voName): - voAdminUser = getVOOption(voName, "VOAdmin") - voAdminGroup = getVOOption(voName, "VOAdminGroup", getVOOption(voName, "DefaultGroup")) - return voAdminUser, voAdminGroup - - voAdminUser, voAdminGroup = getVOAdmin(voName) + voAdminUser = getVOOption(voName, "VOAdmin") + voAdminGroup = getVOOption(voName, "VOAdminGroup", getVOOption(voName, "DefaultGroup")) vomsSync = VOMS2CSSynchronizer(voName) result = syncCSWithVOMS(vomsSync, # pylint: disable=unexpected-keyword-arg diff --git a/src/DIRAC/ConfigurationSystem/scripts/dirac_configuration_cli.py b/src/DIRAC/ConfigurationSystem/scripts/dirac_configuration_cli.py index b6af569a339..7934ba1699d 100755 --- a/src/DIRAC/ConfigurationSystem/scripts/dirac_configuration_cli.py +++ b/src/DIRAC/ConfigurationSystem/scripts/dirac_configuration_cli.py @@ -12,12 +12,11 @@ __RCSID__ = "$Id$" -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script from DIRAC.ConfigurationSystem.Client.CSCLI import CSCLI -@DIRACScript() +@Script() def main(): Script.localCfg.addDefaultEntry("LogLevel", "fatal") Script.parseCommandLine() diff --git a/src/DIRAC/ConfigurationSystem/scripts/dirac_configuration_dump_local_cache.py b/src/DIRAC/ConfigurationSystem/scripts/dirac_configuration_dump_local_cache.py index 879fe8123a4..d71ba7af81c 100755 --- a/src/DIRAC/ConfigurationSystem/scripts/dirac_configuration_dump_local_cache.py +++ b/src/DIRAC/ConfigurationSystem/scripts/dirac_configuration_dump_local_cache.py @@ -14,11 +14,10 @@ import sys import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): Script.localCfg.addDefaultEntry("LogLevel", "fatal") diff --git a/src/DIRAC/ConfigurationSystem/scripts/dirac_configuration_shell.py b/src/DIRAC/ConfigurationSystem/scripts/dirac_configuration_shell.py index 25223b11b4d..bb5d0809110 100755 --- a/src/DIRAC/ConfigurationSystem/scripts/dirac_configuration_shell.py +++ b/src/DIRAC/ConfigurationSystem/scripts/dirac_configuration_shell.py @@ -6,17 +6,19 @@ from __future__ import absolute_import from __future__ import division from __future__ import print_function + +__RCSID__ = "$Id$" + import sys -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script # Invariants: # * root does not end with "/" or root is "/" # * root starts with "/" -@DIRACScript() +@Script() def main(): Script.parseCommandLine() from DIRAC.ConfigurationSystem.Client.CSShellCLI import CSShellCLI diff --git a/src/DIRAC/Core/Tornado/scripts/tornado_start_CS.py b/src/DIRAC/Core/Tornado/scripts/tornado_start_CS.py index 0dd6badf18f..61462857ce7 100644 --- a/src/DIRAC/Core/Tornado/scripts/tornado_start_CS.py +++ b/src/DIRAC/Core/Tornado/scripts/tornado_start_CS.py @@ -14,10 +14,10 @@ import os import sys -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): if os.environ.get('DIRAC_USE_TORNADO_IOLOOP', 'false').lower() not in ('yes', 'true'): @@ -29,7 +29,6 @@ def main(): from DIRAC.ConfigurationSystem.Client.PathFinder import getServiceSection from DIRAC.ConfigurationSystem.Client.ConfigurationData import gConfigurationData - from DIRAC.ConfigurationSystem.Client.LocalConfiguration import LocalConfiguration from DIRAC.ConfigurationSystem.private.Refresher import gRefresher from DIRAC.Core.Utilities.DErrno import includeExtensionErrors from DIRAC.Core.Tornado.Server.TornadoServer import TornadoServer @@ -38,7 +37,7 @@ def main(): if gConfigurationData.isMaster(): gRefresher.disable() - localCfg = LocalConfiguration() + localCfg = Script.localCfg localCfg.addMandatoryEntry("/DIRAC/Setup") localCfg.addDefaultEntry("/DIRAC/Security/UseServerCertificate", "yes") localCfg.addDefaultEntry("LogLevel", "INFO") diff --git a/src/DIRAC/Core/Tornado/scripts/tornado_start_all.py b/src/DIRAC/Core/Tornado/scripts/tornado_start_all.py index 221c06de8b0..ce608c96678 100644 --- a/src/DIRAC/Core/Tornado/scripts/tornado_start_all.py +++ b/src/DIRAC/Core/Tornado/scripts/tornado_start_all.py @@ -14,10 +14,10 @@ import os import sys -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): if os.environ.get('DIRAC_USE_TORNADO_IOLOOP', 'false').lower() not in ('yes', 'true'): @@ -30,7 +30,6 @@ def main(): from DIRAC import gConfig from DIRAC.ConfigurationSystem.Client import PathFinder from DIRAC.ConfigurationSystem.Client.ConfigurationData import gConfigurationData - from DIRAC.ConfigurationSystem.Client.LocalConfiguration import LocalConfiguration from DIRAC.Core.Tornado.Server.TornadoServer import TornadoServer from DIRAC.Core.Utilities.DErrno import includeExtensionErrors from DIRAC.FrameworkSystem.Client.Logger import gLogger @@ -43,7 +42,7 @@ def main(): gLogger.fatal("You can't run the CS and services in the same server!") sys.exit(0) - localCfg = LocalConfiguration() + localCfg = Script.localCfg localCfg.setConfigurationForServer('Tornado/Tornado') localCfg.addMandatoryEntry("/DIRAC/Setup") localCfg.addDefaultEntry("/DIRAC/Security/UseServerCertificate", "yes") diff --git a/src/DIRAC/Core/Utilities/DIRACScript.py b/src/DIRAC/Core/Utilities/DIRACScript.py index 35db01aa4c2..cb03513a586 100644 --- a/src/DIRAC/Core/Utilities/DIRACScript.py +++ b/src/DIRAC/Core/Utilities/DIRACScript.py @@ -1,14 +1,20 @@ +""" DIRAC script """ from __future__ import absolute_import from __future__ import division from __future__ import print_function __RCSID__ = "$Id$" -from collections import defaultdict import functools - +import os.path +import sys import six +from DIRAC.Core.Utilities.DErrno import includeExtensionErrors +from DIRAC.FrameworkSystem.Client.Logger import gLogger +from DIRAC.FrameworkSystem.Client.MonitoringClient import gMonitor +from DIRAC.ConfigurationSystem.Client.LocalConfiguration import LocalConfiguration + if six.PY3: from DIRAC.Core.Utilities.Extensions import entrypointToExtension, extensionsByPriority @@ -19,10 +25,9 @@ class DIRACScript(object): All console-scripts entrypoints in DIRAC and downstream extensions should be wrapped in this decorator to allow extensions to override any entry_point. """ - def __init__(self): - """ c'tor - """ - pass + scriptName = None + alreadyInitialized = False + localCfg = LocalConfiguration() def __call__(self, func=None): """Set the wrapped function or call the script @@ -35,6 +40,9 @@ def __call__(self, func=None): # If func is provided then the decorator is being applied to a function if func is not None: self._func = func + # Find the name of the command and its documentation + DIRACScript.localCfg.setUsageMessage(func.__globals__['__doc__']) + DIRACScript.scriptName = os.path.basename(func.__globals__['__file__'])[:-3].replace('_', '-') return functools.wraps(func)(self) # Setuptools based installations aren't supported with Python 2 @@ -44,34 +52,138 @@ def __call__(self, func=None): # This is only available in Python 3.8+ so it has to be here for now from importlib import metadata # pylint: disable=no-name-in-module - # Iterate through all known entry_points looking for DIRACScripts - matches = defaultdict(list) - function_name = None - for entrypoint in metadata.entry_points()['console_scripts']: - if not entrypoint.name.startswith("dirac-"): - continue - entrypointFunc = entrypoint.load() - if not isinstance(entrypointFunc, DIRACScript): - raise ImportError( - "Invalid dirac- console_scripts entry_point: " + repr(entrypoint) + "\n" + - "All dirac- console_scripts should be wrapped in the DiracScript " + - "decorator to ensure extension overlays are applied correctly." - ) - matches[entrypoint.name].append(entrypoint) - # If the function is self then we've found the currently called function - if entrypointFunc is self: - function_name = entrypoint.name - - if function_name is None: + # Iterate through all known entry_points looking for self.scriptName + matches = [ep for ep in metadata.entry_points()['console_scripts'] if ep.name == self.scriptName] + if not matches: # TODO: This should an error once the integration tests modified to use pip install return self._func() # pylint: disable=not-callable # raise NotImplementedError("Something is very wrong") # Call the entry_point from the extension with the highest priority rankedExtensions = extensionsByPriority() - entrypoint = max( - matches[function_name], - key=lambda e: rankedExtensions.index(entrypointToExtension(e)), - ) + entrypoint = max(matches, key=lambda e: rankedExtensions.index(entrypointToExtension(e)),) + entrypointFunc = entrypoint.load() + + # Check if entrypoint is DIRACScript + if not isinstance(entrypointFunc, DIRACScript): + raise ImportError( + "Invalid dirac- console_scripts entry_point: " + repr(entrypoint) + "\n" + + "All dirac- console_scripts should be wrapped in the DiracScript " + + "decorator to ensure extension overlays are applied correctly." + ) + return entrypointFunc._func() + + @classmethod + def parseCommandLine(cls, script=False, ignoreErrors=False, initializeMonitor=False): + """ Parse command line + + :param str script: script name + :param bool ignoreErrors: ignore errors when loading configuration + :param bool initializeMonitor: to use monitoring + """ + if not cls.alreadyInitialized: + gLogger.showHeaders(False) + cls.initialize(script, ignoreErrors, initializeMonitor, True) + + return (cls.localCfg.getUnprocessedSwitches(), cls.localCfg.getPositionalArguments()) + + @classmethod + def initialize(cls, script=False, ignoreErrors=False, initializeMonitor=False, enableCommandLine=False): + """ initialization + + :param str script: script name + :param bool ignoreErrors: ignore errors when loading configuration + :param bool initializeMonitor: to use monitoring + :param bool enableCommandLine: enable parse command line + """ + # Please do not call initialize in every file + if cls.alreadyInitialized: + return False + userDisabled = not cls.localCfg.isCSEnabled() + cls.alreadyInitialized = True + if not userDisabled: + cls.localCfg.disableCS() + + if not enableCommandLine: + cls.localCfg.disableParsingCommandLine() + + if script: + cls.scriptName = script + cls.localCfg.setConfigurationForScript(cls.scriptName) + + if not ignoreErrors: + cls.localCfg.addMandatoryEntry("/DIRAC/Setup") + resultDict = cls.localCfg.loadUserData() + if not ignoreErrors and not resultDict['OK']: + gLogger.error("There were errors when loading configuration", resultDict['Message']) + sys.exit(1) + if not userDisabled: + cls.localCfg.enableCS() + if initializeMonitor: + gMonitor.setComponentType(gMonitor.COMPONENT_SCRIPT) + gMonitor.setComponentName(cls.scriptName) + gMonitor.setComponentLocation("script") + gMonitor.initialize() + else: + gMonitor.disable() + includeExtensionErrors() + return True + + @classmethod + def showHelp(cls, dummy=False, exitCode=0): + """ See :func:`~DIRAC.ConfigurationSystem.Client.LocalConfiguration.LocalConfiguration.showHelp`. """ + return cls.localCfg.showHelp(dummy=dummy, exitCode=exitCode) + + @classmethod + def registerSwitches(cls, switches): + """ Register switches + + :param list switches: switches + """ + for switch in switches: + cls.registerSwitch(*switch) + + @classmethod + def registerSwitch(cls, showKey, longKey, helpString, callback=False): + """ See :func:`~DIRAC.ConfigurationSystem.Client.LocalConfiguration.LocalConfiguration.registerCmdOpt`. """ + cls.localCfg.registerCmdOpt(showKey, longKey, helpString, callback) + + @classmethod + def registerArgument(cls, description, mandatory=True, values=None, default=None): + """ See :func:`~DIRAC.ConfigurationSystem.Client.LocalConfiguration.LocalConfiguration.registerCmdArg`. """ + cls.localCfg.registerCmdArg(description, mandatory, values, default) + + @classmethod + def getPositionalArgs(cls, group=False): + """ See :func:`~DIRAC.ConfigurationSystem.Client.LocalConfiguration.LocalConfiguration.getPositionalArguments`. """ + return cls.localCfg.getPositionalArguments(group) + + @classmethod + def getExtraCLICFGFiles(cls): + """ See :func:`~DIRAC.ConfigurationSystem.Client.LocalConfiguration.LocalConfiguration.getExtraCLICFGFiles`. """ + return cls.localCfg.getExtraCLICFGFiles() + + @classmethod + def getUnprocessedSwitches(cls): + """ See :func:`~DIRAC.ConfigurationSystem.Client.LocalConfiguration.LocalConfiguration.getUnprocessedSwitches`. """ + return cls.localCfg.getUnprocessedSwitches() + + @classmethod + def addDefaultOptionValue(cls, option, value): + """ See :func:`~DIRAC.ConfigurationSystem.Client.LocalConfiguration.LocalConfiguration.addDefaultEntry`. """ + cls.localCfg.addDefaultEntry(option, value) + + @classmethod + def setUsageMessage(cls, usageMessage): + """ See :func:`~DIRAC.ConfigurationSystem.Client.LocalConfiguration.LocalConfiguration.setUsageMessage`. """ + cls.localCfg.setUsageMessage(usageMessage) + + @classmethod + def disableCS(cls): + """ See :func:`~DIRAC.ConfigurationSystem.Client.LocalConfiguration.LocalConfiguration.disableCS`. """ + cls.localCfg.disableCS() - return entrypoint.load()._func() + @classmethod + def enableCS(cls): + """ See :func:`~DIRAC.ConfigurationSystem.Client.LocalConfiguration.LocalConfiguration.enableCS`. """ + return cls.localCfg.enableCS() diff --git a/src/DIRAC/Core/scripts/dirac_agent.py b/src/DIRAC/Core/scripts/dirac_agent.py index fed8ed6f1b1..114685157f6 100755 --- a/src/DIRAC/Core/scripts/dirac_agent.py +++ b/src/DIRAC/Core/scripts/dirac_agent.py @@ -17,19 +17,14 @@ from DIRAC import gLogger from DIRAC.Core.Base.AgentReactor import AgentReactor from DIRAC.Core.Utilities.DErrno import includeExtensionErrors -from DIRAC.Core.Utilities.DIRACScript import DIRACScript -from DIRAC.ConfigurationSystem.Client.LocalConfiguration import LocalConfiguration +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - localCfg = LocalConfiguration() - localCfg.setUsageMessage(__doc__) - - positionalArgs = localCfg.getPositionalArguments() - if len(positionalArgs) == 0: - gLogger.fatal("You must specify which agent to run!") - sys.exit(1) + Script.registerArgument(["Agent: specify which agent to run"]) + positionalArgs = Script.getPositionalArgs(group=True) + localCfg = Script.localCfg agentName = positionalArgs[0] localCfg.setConfigurationForAgent(agentName) diff --git a/src/DIRAC/Core/scripts/dirac_configure.py b/src/DIRAC/Core/scripts/dirac_configure.py index fafee58858c..48bf58f5c57 100755 --- a/src/DIRAC/Core/scripts/dirac_configure.py +++ b/src/DIRAC/Core/scripts/dirac_configure.py @@ -5,38 +5,11 @@ ######################################################################## """ Main script to write dirac.cfg for a new DIRAC installation and initial download of CAs and CRLs - if necessary. + if necessary. To be used by VO specific scripts to configure new DIRAC installations - There are 2 mandatory arguments: - - -S --Setup= To define the DIRAC setup for the current installation - -C --ConfigurationServer=|-W --Gateway To define the reference Configuration Servers/Gateway - for the current installation - - others are optional - - -I --IncludeAllServers To include all Configuration Servers - (by default only those in -C option are included) - -n --SiteName= To define the DIRAC Site Name for the installation - -N --CEName= To determine the DIRAC Site Name from the CE Name - -V --VO= To define the VO for the installation - -U --UseServerCertificate To use Server Certificate for all clients - -H --SkipCAChecks To skip check of CAs for all clients - -D --SkipCADownload To skip download of CAs - -M --SkipVOMSDownload To skip download of VOMS info - -v --UseVersionsDir Use versions directory - (This option will properly define RootPath and InstancePath) - -A --Architecture= To define /LocalSite/Architecture= - -L --LocalSE= To define /LocalSite/LocalSE= - -F --ForceUpdate Forces the update of cfg file (i.e. dirac.cfg), - even if it does already exists (use with care) - -O --Output define output configuration file - - Other arguments will take proper defaults if not defined. - - Additionally all options can all be passed inside a .cfg file passed as argument. + Additionally all options can all be passed inside a .cfg file, see the `--cfg` option. The following options are recognized:: Setup @@ -54,16 +27,19 @@ LocalSE LogLevel + Setup and ConfigurationServer(Gateway) is mandatory options. + As in any other script command line option take precedence over .cfg files passed as arguments. The combination of both is written into the installed dirac.cfg. Notice: It will not overwrite exiting info in current dirac.cfg if it exists. - Example: dirac-configure -d - -S LHCb-Development - -C 'dips://lhcbprod.pic.es:9135/Configuration/Server' - -W 'dips://lhcbprod.pic.es:9135' - --SkipCAChecks + Example: + $ dirac-configure -d + -S LHCb-Development + -C 'dips://lhcbprod.pic.es:9135/Configuration/Server' + -W 'dips://lhcbprod.pic.es:9135' + --SkipCAChecks """ from __future__ import absolute_import @@ -76,8 +52,7 @@ import DIRAC from DIRAC.Core.Utilities.File import mkDir -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script from DIRAC.Core.Security.ProxyInfo import getProxyInfo from DIRAC.ConfigurationSystem.Client.Helpers import cfgInstallPath, cfgPath, Registry from DIRAC.Core.Utilities.SiteSEMapping import getSEsForSite @@ -304,7 +279,7 @@ def runConfigurationWizard(params): sys.exit(result.returncode) -@DIRACScript() +@Script() def main(): Script.disableCS() params = Params() @@ -343,12 +318,6 @@ def runDiracConfigure(params): Script.registerSwitch("O:", "output=", "output configuration file", params.setOutput) - Script.setUsageMessage('\n'.join([ - __doc__.split('\n')[1], - '\nUsage:', - ' %s [options] ...\n' % Script.scriptName - ])) - Script.parseCommandLine(ignoreErrors=True) if not params.logLevel: diff --git a/src/DIRAC/Core/scripts/dirac_executor.py b/src/DIRAC/Core/scripts/dirac_executor.py index 91a60f6f7df..79bdc0b03dc 100755 --- a/src/DIRAC/Core/scripts/dirac_executor.py +++ b/src/DIRAC/Core/scripts/dirac_executor.py @@ -17,19 +17,15 @@ from DIRAC import gLogger from DIRAC.Core.Base.ExecutorReactor import ExecutorReactor from DIRAC.Core.Utilities.DErrno import includeExtensionErrors -from DIRAC.Core.Utilities.DIRACScript import DIRACScript -from DIRAC.ConfigurationSystem.Client.LocalConfiguration import LocalConfiguration +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - localCfg = LocalConfiguration() - localCfg.setUsageMessage(__doc__) - - positionalArgs = localCfg.getPositionalArguments() - if len(positionalArgs) == 0: - gLogger.fatal("You must specify which executor to run!") - sys.exit(1) + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["executor: specify which executor to run"]) + positionalArgs = Script.getPositionalArgs() + localCfg = Script.localCfg if len(positionalArgs) == 1 and positionalArgs[0].find("/") > -1: mainName = positionalArgs[0] diff --git a/src/DIRAC/Core/scripts/dirac_externals_requirements.py b/src/DIRAC/Core/scripts/dirac_externals_requirements.py index c83658f0def..abc058650c9 100755 --- a/src/DIRAC/Core/scripts/dirac_externals_requirements.py +++ b/src/DIRAC/Core/scripts/dirac_externals_requirements.py @@ -23,8 +23,8 @@ import subprocess as commands from diraccfg import CFG -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript + +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script from DIRAC import gLogger, rootPath, S_OK __RCSID__ = "$Id$" @@ -46,7 +46,7 @@ def pipInstall(package, switches=""): return commands.getstatusoutput(cmd) -@DIRACScript() +@Script() def main(): Script.disableCS() diff --git a/src/DIRAC/Core/scripts/dirac_info.py b/src/DIRAC/Core/scripts/dirac_info.py index eb8b31cdf6b..ebb8bd8834e 100755 --- a/src/DIRAC/Core/scripts/dirac_info.py +++ b/src/DIRAC/Core/scripts/dirac_info.py @@ -1,6 +1,6 @@ #!/usr/bin/env python ######################################################################## -# File : dirac-info +# File : dirac_info.py # Author : Andrei Tsaregorodtsev ######################################################################## """ @@ -30,16 +30,15 @@ __RCSID__ = "$Id$" -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): import os import DIRAC from DIRAC import gConfig - from DIRAC.Core.Base import Script from DIRAC.Core.Security.ProxyInfo import getProxyInfo from DIRAC.ConfigurationSystem.Client.Helpers.Registry import getVOForGroup from DIRAC.Core.Utilities.PrettyPrint import printTable diff --git a/src/DIRAC/Core/scripts/dirac_install_db.py b/src/DIRAC/Core/scripts/dirac_install_db.py index 8c08f6227c8..5d4946566fb 100755 --- a/src/DIRAC/Core/scripts/dirac_install_db.py +++ b/src/DIRAC/Core/scripts/dirac_install_db.py @@ -1,12 +1,6 @@ #!/usr/bin/env python """ Create a new DB in the MySQL server - -Usage: - dirac-install-db [options] ... DB ... - -Arguments: - DB: Name of the Database (mandatory) """ # Script initialization and parseCommandLine from __future__ import print_function @@ -15,16 +9,14 @@ __RCSID__ = "$Id$" -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine() - args = Script.getPositionalArgs() - if len(args) < 1: - Script.showHelp(exitCode=1) + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["DB: Name of the Database"]) + _, args = Script.parseCommandLine() # Script imports from DIRAC import gConfig diff --git a/src/DIRAC/Core/scripts/dirac_install_web_portal.py b/src/DIRAC/Core/scripts/dirac_install_web_portal.py index 87e69a06b9e..3a207672952 100755 --- a/src/DIRAC/Core/scripts/dirac_install_web_portal.py +++ b/src/DIRAC/Core/scripts/dirac_install_web_portal.py @@ -12,11 +12,10 @@ __RCSID__ = "$Id$" -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): Script.disableCS() Script.parseCommandLine() diff --git a/src/DIRAC/Core/scripts/dirac_platform.py b/src/DIRAC/Core/scripts/dirac_platform.py index cc0e8a42526..6875593c91a 100755 --- a/src/DIRAC/Core/scripts/dirac_platform.py +++ b/src/DIRAC/Core/scripts/dirac_platform.py @@ -153,9 +153,9 @@ def getPlatformString(): def main(): print(getPlatformString()) else: - from DIRAC.Core.Utilities.DIRACScript import DIRACScript + from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script - @DIRACScript() + @Script() def main(): print(getPlatformString()) diff --git a/src/DIRAC/Core/scripts/dirac_service.py b/src/DIRAC/Core/scripts/dirac_service.py index 4bdded1ff52..7026b01489b 100755 --- a/src/DIRAC/Core/scripts/dirac_service.py +++ b/src/DIRAC/Core/scripts/dirac_service.py @@ -19,16 +19,14 @@ from DIRAC.FrameworkSystem.Client.Logger import gLogger from DIRAC.Core.DISET.ServiceReactor import ServiceReactor from DIRAC.Core.Utilities.DErrno import includeExtensionErrors -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script __RCSID__ = "$Id$" -@DIRACScript() +@Script() def main(): - localCfg = LocalConfiguration() - localCfg.setUsageMessage(__doc__) - + localCfg = Script.localCfg positionalArgs = localCfg.getPositionalArguments() if len(positionalArgs) == 0: gLogger.fatal("You must specify which server to run!") diff --git a/src/DIRAC/Core/scripts/dirac_setup_site.py b/src/DIRAC/Core/scripts/dirac_setup_site.py index 204b436c7c6..92240b72c6b 100755 --- a/src/DIRAC/Core/scripts/dirac_setup_site.py +++ b/src/DIRAC/Core/scripts/dirac_setup_site.py @@ -1,16 +1,10 @@ #!/usr/bin/env python ######################################################################## -# File : dirac-setup-site +# File : dirac_setup_site.py # Author : Ricardo Graciani ######################################################################## """ Initial installation and configuration of a new DIRAC server (DBs, Services, Agents, Web Portal,...) - -Usage: - dirac-setup-site [option] ... [cfgfile] - -Arguments: - cfgfile: DIRAC Cfg with description of the configuration (optional) """ from __future__ import print_function from __future__ import absolute_import @@ -18,8 +12,7 @@ __RCSID__ = "$Id$" from DIRAC import S_OK -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script class Params(object): @@ -32,7 +25,7 @@ def setExitOnError(self, value): return S_OK() -@DIRACScript() +@Script() def main(): cliParams = Params() diff --git a/src/DIRAC/Core/scripts/dirac_version.py b/src/DIRAC/Core/scripts/dirac_version.py index 3cb0af19cc3..c42bc0ced76 100755 --- a/src/DIRAC/Core/scripts/dirac_version.py +++ b/src/DIRAC/Core/scripts/dirac_version.py @@ -22,10 +22,10 @@ import argparse import DIRAC -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): parser = argparse.ArgumentParser( description=__doc__, diff --git a/src/DIRAC/DataManagementSystem/Utilities/lfc_dfc_copy.py b/src/DIRAC/DataManagementSystem/Utilities/lfc_dfc_copy.py index 862480694f4..8a67277e313 100644 --- a/src/DIRAC/DataManagementSystem/Utilities/lfc_dfc_copy.py +++ b/src/DIRAC/DataManagementSystem/Utilities/lfc_dfc_copy.py @@ -11,7 +11,7 @@ from __future__ import print_function from __future__ import absolute_import from __future__ import division -from DIRAC.Core.Base import Script +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script Script.parseCommandLine() import DIRAC.Resources.Catalog.LcgFileCatalogClient as LcgFileCatalogClient diff --git a/src/DIRAC/DataManagementSystem/scripts/dirac_admin_allow_se.py b/src/DIRAC/DataManagementSystem/scripts/dirac_admin_allow_se.py index 74b56d9243b..e86f231885a 100755 --- a/src/DIRAC/DataManagementSystem/scripts/dirac_admin_allow_se.py +++ b/src/DIRAC/DataManagementSystem/scripts/dirac_admin_allow_se.py @@ -2,23 +2,20 @@ """ Enable using one or more Storage Elements -Usage: - dirac-admin-allow-se SE1 [SE2 ...] - Example: $ dirac-admin-allow-se M3PEC-disk """ from __future__ import print_function from __future__ import absolute_import from __future__ import division + __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): read = False write = False @@ -34,11 +31,12 @@ def main(): Script.registerSwitch("a", "All", " Allow all access to the storage element") Script.registerSwitch("m", "Mute", " Do not send email") Script.registerSwitch("S:", "Site=", " Allow all SEs associated to site") + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["seGroupList: list of SEs or comma-separated SEs"]) - Script.parseCommandLine(ignoreErrors=True) + switches, ses = Script.parseCommandLine(ignoreErrors=True) - ses = Script.getPositionalArgs() - for switch in Script.getUnprocessedSwitches(): + for switch in switches: if switch[0].lower() in ("r", "allowread"): read = True if switch[0].lower() in ("w", "allowwrite"): diff --git a/src/DIRAC/DataManagementSystem/scripts/dirac_admin_ban_se.py b/src/DIRAC/DataManagementSystem/scripts/dirac_admin_ban_se.py index 79ebc0de761..365b108af17 100755 --- a/src/DIRAC/DataManagementSystem/scripts/dirac_admin_ban_se.py +++ b/src/DIRAC/DataManagementSystem/scripts/dirac_admin_ban_se.py @@ -3,9 +3,6 @@ """ Ban one or more Storage Elements for usage -Usage: - dirac-admin-ban-se SE1 [SE2 ...] - Example: $ dirac-admin-ban-se M3PEC-disk """ @@ -15,11 +12,10 @@ __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): read = True write = True @@ -38,10 +34,12 @@ def main(): "S:", "Site=", " Ban all SEs associate to site (note that if writing is allowed, check is always allowed)") - Script.parseCommandLine(ignoreErrors=True) + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["seGroupList: list of SEs or comma-separated SEs"]) + + switches, ses = Script.parseCommandLine(ignoreErrors=True) - ses = Script.getPositionalArgs() - for switch in Script.getUnprocessedSwitches(): + for switch in switches: if switch[0].lower() in ("r", "banread"): write = False check = False diff --git a/src/DIRAC/DataManagementSystem/scripts/dirac_admin_user_quota.py b/src/DIRAC/DataManagementSystem/scripts/dirac_admin_user_quota.py index 17cc9f30185..d7c2bfc3220 100755 --- a/src/DIRAC/DataManagementSystem/scripts/dirac_admin_user_quota.py +++ b/src/DIRAC/DataManagementSystem/scripts/dirac_admin_user_quota.py @@ -2,9 +2,6 @@ """ Show storage quotas for specified users or for all registered users if nobody is specified -Usage: - dirac-admin-user-quota [user1 ...] - Example: $ dirac-admin-user-quota ------------------------------ @@ -22,14 +19,15 @@ __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine() - users = Script.getPositionalArgs() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["User: list of SEs or comma-separated SEs"], mandatory=False) + + _, users = Script.parseCommandLine() from DIRAC import gLogger, gConfig diff --git a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_add_file.py b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_add_file.py index 68a9ec3f1bc..ce785cec672 100755 --- a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_add_file.py +++ b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_add_file.py @@ -40,8 +40,7 @@ import os from DIRAC import S_OK -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script overwrite = False @@ -67,7 +66,7 @@ def getDict(item_list): return lfn_dict -@DIRACScript() +@Script() def main(): global overwrite Script.registerSwitch("f", "force", "Force overwrite of existing file", setOverwrite) diff --git a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_catalog_metadata.py b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_catalog_metadata.py index 10a83f8dd3f..0edc8380ff0 100755 --- a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_catalog_metadata.py +++ b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_catalog_metadata.py @@ -3,9 +3,6 @@ Get metadata for the given file specified by its Logical File Name or for a list of files contained in the specifed file -Usage: - dirac-dms-catalog-metadata [Catalog] - Example: $ dirac-dms-catalog-metadata /formation/user/v/vhamar/Example.txt FileName Size GUID Status Checksum @@ -18,26 +15,22 @@ __RCSID__ = "$Id$" from DIRAC import exit as DIRACExit -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(("LocalFile: Path to local file containing LFNs", + "LFN: Logical File Names")) + Script.registerArgument(["Catalog: file catalog plug-ins"], mandatory=False) Script.parseCommandLine() from DIRAC.Resources.Catalog.FileCatalog import FileCatalog import os - args = Script.getPositionalArgs() - - if not len(args) >= 1: - Script.showHelp(exitCode=1) - else: - inputFileName = args[0] - catalogs = [] - if len(args) == 2: - catalogs = [args[1]] + # parseCommandLine show help when mandatory arguments are not specified or incorrect argument + inputFileName, catalogs = Script.getPositionalArgs(group=True) if os.path.exists(inputFileName): inputFile = open(inputFileName, 'r') diff --git a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_change_replica_status.py b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_change_replica_status.py index cb3d063a7c0..50e994fa902 100755 --- a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_change_replica_status.py +++ b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_change_replica_status.py @@ -1,9 +1,6 @@ #! /usr/bin/env python """ Change status of replica of a given file or a list of files at a given Storage Element - -Usage: - dirac-dms-change-replica-status """ from __future__ import print_function from __future__ import absolute_import @@ -12,24 +9,23 @@ __RCSID__ = "$Id$" from DIRAC import exit as DIRACExit -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(("LocalFile: Path to local file containing LFNs", + "LFN: Logical File Name")) + Script.registerArgument(" SE: Storage Element") + Script.registerArgument(" status: status") Script.parseCommandLine() from DIRAC.Resources.Catalog.FileCatalog import FileCatalog catalog = FileCatalog() import os - args = Script.getPositionalArgs() - if not len(args) == 3: - Script.showHelp(exitCode=1) - else: - inputFileName = args[0] - se = args[1] - newStatus = args[2] + # parseCommandLine show help when mandatory arguments are not specified or incorrect argument + inputFileName, se, newStatus = Script.getPositionalArgs(group=True) if os.path.exists(inputFileName): inputFile = open(inputFileName, 'r') diff --git a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_clean_directory.py b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_clean_directory.py index 5cc4e23e8f3..2825369ef15 100755 --- a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_clean_directory.py +++ b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_clean_directory.py @@ -4,9 +4,6 @@ contained files and subdirectories from the physical storage and from the file catalogs. -Usage: - dirac-dms-clean-directory - Example: $ dirac-dms-clean-directory /formation/user/v/vhamar/newDir Cleaning directory /formation/user/v/vhamar/newDir ... OK @@ -20,19 +17,19 @@ import os from DIRAC import exit as DIRACExit, gLogger -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(("LocalFile: Path to local file containing LFNs", + "LFN: Logical File Name")) - args = Script.getPositionalArgs() - if len(args) != 1: - Script.showHelp(exitCode=1) + Script.parseCommandLine() - inputFileName = args[0] + # parseCommandLine show help when mandatory arguments are not specified or incorrect argument + inputFileName = Script.getPositionalArgs(group=True) if os.path.exists(inputFileName): lfns = [lfn.strip().split()[0] for lfn in sorted(open(inputFileName, 'r').read().splitlines())] diff --git a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_create_archive_request.py b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_create_archive_request.py index 054ed4fbd88..1fba54db3f2 100644 --- a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_create_archive_request.py +++ b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_create_archive_request.py @@ -41,8 +41,7 @@ from DIRAC.ConfigurationSystem.Client.Helpers.Operations import Operations from DIRAC.Core.Utilities import DEncode from DIRAC.Core.Utilities.ReturnValues import returnSingleResult -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script from DIRAC.FrameworkSystem.private.standardLogging.LogLevels import LogLevels from DIRAC.RequestManagementSystem.Client.File import File from DIRAC.RequestManagementSystem.Client.Request import Request @@ -512,7 +511,7 @@ def _replicateSourceFiles(self, request, lfns): request.addOperation(registerSource) -@DIRACScript() +@Script() def main(): try: CAR = CreateArchiveRequest() diff --git a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_create_moving_request.py b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_create_moving_request.py index d8997eeb5c3..5a3535f2c70 100644 --- a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_create_moving_request.py +++ b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_create_moving_request.py @@ -15,8 +15,7 @@ import DIRAC from DIRAC import gLogger -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script from DIRAC.Core.Utilities.List import breakListIntoChunks from DIRAC.Core.Utilities.ReturnValues import returnSingleResult from DIRAC.FrameworkSystem.private.standardLogging.LogLevels import LogLevels @@ -283,7 +282,7 @@ def putOrRunRequests(self): return 1 -@DIRACScript() +@Script() def main(): try: CMR = CreateMovingRequest() diff --git a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_create_removal_request.py b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_create_removal_request.py index 2dc726dd575..f783956659b 100755 --- a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_create_removal_request.py +++ b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_create_removal_request.py @@ -1,13 +1,6 @@ #!/usr/bin/env python """ Create a DIRAC RemoveReplica|RemoveFile request to be executed by the RMS - -Usage: - dirac-dms-create-removal-request [options] ... SE LFN ... - -Arguments: - SE: StorageElement|All - LFN: LFN or file containing a List of LFNs """ from __future__ import print_function from __future__ import absolute_import @@ -18,27 +11,27 @@ import os from hashlib import md5 import time -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script from DIRAC.Core.Utilities.List import breakListIntoChunks -@DIRACScript() +@Script() def main(): + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(" SE: StorageElement|All") + Script.registerArgument(["LFN: LFN or file containing a List of LFNs"]) Script.parseCommandLine(ignoreErrors=False) + # parseCommandLine show help when mandatory arguments are not specified or incorrect argument args = Script.getPositionalArgs() - if len(args) < 2: - Script.showHelp() targetSE = args.pop(0) lfns = [] for inputFileName in args: if os.path.exists(inputFileName): - inputFile = open(inputFileName, 'r') - string = inputFile.read() - inputFile.close() + with open(inputFileName, 'r') as inputFile: + string = inputFile.read() lfns.extend([lfn.strip() for lfn in string.splitlines()]) else: lfns.append(inputFileName) diff --git a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_data_size.py b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_data_size.py index 0b262023c0d..7ce809fc090 100755 --- a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_data_size.py +++ b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_data_size.py @@ -2,9 +2,6 @@ """ Get the size of the given file or a list of files -Usage: - dirac-dms-data-size - Example: $ dirac-dms-data-size /formation/user/v/vhamar/Example.txt ------------------------------ @@ -22,17 +19,20 @@ import os import DIRAC from DIRAC import gLogger -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): unit = 'GB' Script.registerSwitch("u:", "Unit=", " Unit to use [default %s] (MB,GB,TB,PB)" % unit) + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(("LocalFile: Path to local file containing LFNs", + "LFN: Logical File Name")) + Script.registerArgument(["LFN: Logical File Name"], mandatory=False) + unprSwitches, args = Script.parseCommandLine(ignoreErrors=False) - Script.parseCommandLine(ignoreErrors=False) - for switch in Script.getUnprocessedSwitches(): + for switch in unprSwitches: if switch[0].lower() == "u" or switch[0].lower() == "unit": unit = switch[1] scaleDict = {'MB': 1000 * 1000.0, @@ -44,7 +44,6 @@ def main(): DIRAC.exit(2) scaleFactor = scaleDict[unit] - args = Script.getPositionalArgs() lfns = [] for inputFileName in args: if os.path.exists(inputFileName): diff --git a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_directory_sync.py b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_directory_sync.py index 27c0142370b..2c462823a0b 100755 --- a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_directory_sync.py +++ b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_directory_sync.py @@ -11,18 +11,12 @@ If option --sync is used contend that is not in the source directory but is only in the target directory will be deleted. -Usage: - dirac-dms-directory-sync Source Destination +Example: e.g.: Download dirac-dms-directory-sync LFN Path or Upload dirac-dms-directory-sync Path LFN SE - -Arguments: - LFN: Logical File Name (Path to directory) - Path: Local path to the file (Path to directory) - SE: DIRAC Storage Element """ from __future__ import absolute_import from __future__ import division @@ -30,20 +24,25 @@ import os import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script __RCSID__ = "$Id$" -@DIRACScript() +@Script() def main(): Script.registerSwitch("D", "sync", "Make target directory identical to source") Script.registerSwitch("j:", "parallel=", "Multithreaded download and upload") + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(("LFN: Logical File Name (Path to directory)", + "Path: Local path to the file (Path to directory)")) + Script.registerArgument(("Path: Local path to the file (Path to directory)", + "LFN: Logical File Name (Path to directory)")) + Script.registerArgument(" SE: DIRAC Storage Element", mandatory=False) Script.parseCommandLine(ignoreErrors=False) args = Script.getPositionalArgs() - if len(args) < 1 or len(args) > 3: + if len(args) > 3: Script.showHelp() sync = False diff --git a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_filecatalog_cli.py b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_filecatalog_cli.py index 5c4ca7bc6c9..0ba4b71a0c2 100755 --- a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_filecatalog_cli.py +++ b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_filecatalog_cli.py @@ -2,9 +2,6 @@ """ Launch the File Catalog shell -Usage: - dirac-dms-filecatalog-cli [option] - Example: $ dirac-dms-filecatalog-cli Starting DIRAC FileCatalog client @@ -29,11 +26,10 @@ import sys -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): fcType = 'FileCatalog' Script.registerSwitch("f:", "file-catalog=", " Catalog client type to use (default %s)" % fcType) diff --git a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_find_lfns.py b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_find_lfns.py index 92b51e23dd0..d3a341d0f4a 100755 --- a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_find_lfns.py +++ b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_find_lfns.py @@ -2,12 +2,6 @@ """ Find files in the FileCatalog using file metadata -Usage: - dirac-dms-find-lfns [options] metaspec [metaspec ...] - -Arguments: - metaspec: metadata index specification (of the form: "meta=value" or "meta1000" "CreationDate<2015-05-15" @@ -17,14 +11,16 @@ from __future__ import absolute_import from __future__ import division -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() -def main(): - from DIRAC.Core.Base import Script +@Script() +def main(): Script.registerSwitch('', 'Path=', ' Path to search for') Script.registerSwitch('', 'SE=', ' (comma-separated list of) SEs/SE-groups to be searched') + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(['metaspec: metadata index specification (of the form: ' + '"meta=value" or "meta - Example: $ dirac-dms-remove-catalog-files /formation/user/v/vhamar/1/1134/StdOut Successfully removed 1 catalog files. @@ -18,14 +15,16 @@ __RCSID__ = "$Id$" -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script from DIRAC import exit as dexit from DIRAC import gLogger -@DIRACScript() +@Script() def main(): + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(("LocalFile: Path to local file containing LFNs", + "LFN: Logical File Names")) Script.parseCommandLine() from DIRAC.ConfigurationSystem.Client.Helpers.Operations import Operations @@ -47,12 +46,10 @@ def main(): fc = FileCatalog() import os + # parseCommandLine show help when mandatory arguments are not specified or incorrect argument args = Script.getPositionalArgs() - if len(args) < 1: - Script.showHelp(exitCode=1) - else: - inputFileName = args[0] + inputFileName = args[0] if os.path.exists(inputFileName): inputFile = open(inputFileName, 'r') diff --git a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_remove_catalog_replicas.py b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_remove_catalog_replicas.py index 25ae349a428..fd0f144f9db 100755 --- a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_remove_catalog_replicas.py +++ b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_remove_catalog_replicas.py @@ -3,9 +3,6 @@ Remove the given file replica or a list of file replicas from the File Catalog This script should be used with great care as it may leave dark data in the storage! Use dirac-dms-remove-replicas instead - -Usage: - dirac-dms-remove-catalog-replicas """ from __future__ import print_function from __future__ import absolute_import @@ -16,13 +13,16 @@ import os from DIRAC import exit as dexit -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script from DIRAC import gLogger -@DIRACScript() +@Script() def main(): + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(("LocalFile: Path to local file containing LFNs", + "LFN: Logical File Names")) + Script.registerArgument(" SE: Storage element") Script.parseCommandLine() from DIRAC.ConfigurationSystem.Client.Helpers.Operations import Operations @@ -42,12 +42,8 @@ def main(): from DIRAC.DataManagementSystem.Client.DataManager import DataManager dm = DataManager() - args = Script.getPositionalArgs() - if len(args) < 2: - Script.showHelp(exitCode=1) - else: - inputFileName = args[0] - storageElementName = args[1] + # parseCommandLine show help when mandatory arguments are not specified or incorrect argument + inputFileName, storageElementName = Script.getPositionalArgs(group=True) if os.path.exists(inputFileName): inputFile = open(inputFileName, 'r') diff --git a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_remove_files.py b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_remove_files.py index 221a5eee8d2..2880e5a070f 100755 --- a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_remove_files.py +++ b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_remove_files.py @@ -2,9 +2,6 @@ """ Remove the given file or a list of files from the File Catalog and from the storage -Usage: - dirac-dms-remove-files - Example: $ dirac-dms-remove-files /formation/user/v/vhamar/Test.txt """ @@ -14,28 +11,28 @@ __RCSID__ = "$Id$" -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(("LocalFile: Path to local file containing LFNs", + "LFN: Logical File Names")) + Script.registerArgument(["LFN: Logical File Names"], mandatory=False) Script.parseCommandLine() import os import DIRAC from DIRAC import gLogger - args = Script.getPositionalArgs() - lfns = [] - for inputFileName in args: - if os.path.exists(inputFileName): - inputFile = open(inputFileName, 'r') + first, lfns = Script.getPositionalArgs(group=True) + if os.path.exists(first): + with open(first, 'r') as inputFile: string = inputFile.read() - inputFile.close() - lfns.extend([lfn.strip() for lfn in string.splitlines()]) - else: - lfns.append(inputFileName) + lfns.extend([lfn.strip() for lfn in string.splitlines()]) + else: + lfns.insert(0, first) from DIRAC.Core.Utilities.List import breakListIntoChunks from DIRAC.DataManagementSystem.Client.DataManager import DataManager diff --git a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_remove_replicas.py b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_remove_replicas.py index 3786fe63674..3ece140d1a7 100755 --- a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_remove_replicas.py +++ b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_remove_replicas.py @@ -3,9 +3,6 @@ Remove the given file replica or a list of file replicas from the File Catalog and from the storage. -Usage: - dirac-dms-remove-replicas SE [SE] - Example: $ dirac-dms-remove-replicas /formation/user/v/vhamar/Test.txt IBCP-disk Successfully removed DIRAC-USER replica of /formation/user/v/vhamar/Test.txt @@ -17,35 +14,34 @@ __RCSID__ = "$Id$" from DIRAC import exit as DIRACExit -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(("LocalFile: Path to local file containing LFNs", + "LFN: Logical File Names")) + Script.registerArgument(["SE: Storage element"]) + Script.parseCommandLine() from DIRAC.Core.Utilities.List import breakListIntoChunks from DIRAC.DataManagementSystem.Client.DataManager import DataManager dm = DataManager() import os - inputFileName = "" - storageElementNames = [] - args = Script.getPositionalArgs() - if len(args) < 2: - Script.showHelp(exitCode=1) - else: - inputFileName = args[0] - storageElementNames = args[1:] + # parseCommandLine show help when mandatory arguments are not specified or incorrect argument + first, storageElementNames = Script.getPositionalArgs(group=True) - if os.path.exists(inputFileName): - inputFile = open(inputFileName, 'r') - string = inputFile.read() + if os.path.exists(first): + with open(first, 'r') as inputFile: + string = inputFile.read() lfns = [lfn.strip() for lfn in string.splitlines()] inputFile.close() else: - lfns = [inputFileName] + lfns = [first] + for lfnList in breakListIntoChunks(sorted(lfns, reverse=True), 500): for storageElementName in storageElementNames: res = dm.removeReplica(storageElementName, lfnList) diff --git a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_replica_metadata.py b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_replica_metadata.py index 9fb8c1ef50a..cab3b74aeee 100755 --- a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_replica_metadata.py +++ b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_replica_metadata.py @@ -1,9 +1,6 @@ #!/usr/bin/env python """ Get the given file replica metadata from the File Catalog - -Usage: - dirac-dms-replica-metadata SE """ from __future__ import print_function from __future__ import absolute_import @@ -14,23 +11,22 @@ import os from DIRAC import exit as DIRACExit -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(("LocalFile: Path to local file containing LFNs", + "LFN: Logical File Names")) + Script.registerArgument(" SE: Storage element") Script.parseCommandLine() from DIRAC import gLogger from DIRAC.DataManagementSystem.Client.DataManager import DataManager - args = Script.getPositionalArgs() - if not len(args) == 2: - Script.showHelp(exitCode=1) - else: - inputFileName = args[0] - storageElement = args[1] + # parseCommandLine show help when mandatory arguments are not specified or incorrect argument + inputFileName, storageElement = Script.getPositionalArgs(group=True) if os.path.exists(inputFileName): inputFile = open(inputFileName, 'r') diff --git a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_replicate_and_register_request.py b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_replicate_and_register_request.py index 230f9689b92..466101c0cde 100755 --- a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_replicate_and_register_request.py +++ b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_replicate_and_register_request.py @@ -1,22 +1,13 @@ #!/bin/env python """ Create and put 'ReplicateAndRegister' request. - -Usage: - dirac-dms-replicate-and-register-request [options] requestName LFNs targetSE1 [targetSE2 ...] - -Arguments: - requestName: a request name - LFNs: single LFN or file with LFNs - targetSE: target SE """ from __future__ import absolute_import from __future__ import division from __future__ import print_function __RCSID__ = "$Id$" import os -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script from DIRAC import gLogger import DIRAC @@ -31,10 +22,14 @@ def getLFNList(arg): return list(set(lfnList)) -@DIRACScript() +@Script() def main(): catalog = None Script.registerSwitch("C:", "Catalog=", "Catalog to use") + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(" requestName: a request name") + Script.registerArgument(" LFNs: single LFN or file with LFNs") + Script.registerArgument(["targetSE: target SE"]) Script.parseCommandLine() for switch in Script.getUnprocessedSwitches(): if switch[0] == "C" or switch[0].lower() == "catalog": diff --git a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_resolve_guid.py b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_resolve_guid.py index 412e3788b94..dca18a5db3b 100755 --- a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_resolve_guid.py +++ b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_resolve_guid.py @@ -1,9 +1,6 @@ #!/usr/bin/env python """ Returns the LFN matching given GUIDs - -Usage: - dirac-dms-resolve-guid """ from __future__ import absolute_import from __future__ import division @@ -11,20 +8,20 @@ __RCSID__ = "$Id$" -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): + # Registering arguments will automatically add their description to the help menu + Script.registerArgument("GUIDs: GUIDs separated by a comma") Script.parseCommandLine() import DIRAC from DIRAC import gLogger + # parseCommandLine show help when mandatory arguments are not specified or incorrect argument args = Script.getPositionalArgs() - if len(args) != 1: - Script.showHelp() guids = args[0] try: diff --git a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_set_replica_status.py b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_set_replica_status.py index d0f55c2b6c7..559b9d942bf 100755 --- a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_set_replica_status.py +++ b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_set_replica_status.py @@ -1,15 +1,6 @@ #!/usr/bin/env python """ Set the status of the replicas of given files at the provided SE - -Usage: - dirac-dms-set-replica-status [options] ... SE Status - -Arguments: - LFN: LFN - File: File name containing a list of affected LFNs - SE: Name of Storage Element - Status: New Status for the replica """ from __future__ import absolute_import from __future__ import division @@ -17,12 +8,16 @@ __RCSID__ = "$Id$" -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(("LFN: LFN", + "File: File name containing a list of affected LFNs")) + Script.registerArgument(" SE: Name of Storage Element") + Script.registerArgument(" Status: New Status for the replica") Script.parseCommandLine(ignoreErrors=False) import DIRAC @@ -30,13 +25,8 @@ def main(): from DIRAC.Resources.Catalog.FileCatalog import FileCatalog import os - args = Script.getPositionalArgs() - if not len(args) == 3: - Script.showHelp() - - inputFileName = args[0] - storageElement = args[1] - status = args[2] + # parseCommandLine show help when mandatory arguments are not specified or incorrect argument + inputFileName, storageElement, status = Script.getPositionalArgs(group=True) if os.path.exists(inputFileName): inputFile = open(inputFileName, 'r') diff --git a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_show_se_status.py b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_show_se_status.py index e4969c6881e..2e346b4a470 100755 --- a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_show_se_status.py +++ b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_show_se_status.py @@ -20,8 +20,7 @@ from __future__ import division from DIRAC import S_OK, exit as DIRACexit -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script __RCSID__ = "$Id$" @@ -53,7 +52,7 @@ def setNoVO(arg): return S_OK() -@DIRACScript() +@Script() def main(): global vo global noVOFlag diff --git a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_user_lfns.py b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_user_lfns.py index 5957f4180ea..4ed518f2e4a 100755 --- a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_user_lfns.py +++ b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_user_lfns.py @@ -21,11 +21,10 @@ __RCSID__ = "$Id$" -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): days = 0 months = 0 diff --git a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_user_quota.py b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_user_quota.py index 8dde56d801b..ed0bec2d5cb 100755 --- a/src/DIRAC/DataManagementSystem/scripts/dirac_dms_user_quota.py +++ b/src/DIRAC/DataManagementSystem/scripts/dirac_dms_user_quota.py @@ -15,11 +15,10 @@ __RCSID__ = "$Id$" -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): Script.parseCommandLine(ignoreErrors=False) diff --git a/src/DIRAC/FrameworkSystem/Client/ProxyGeneration.py b/src/DIRAC/FrameworkSystem/Client/ProxyGeneration.py index 5717f3acfd7..5a94413b45d 100644 --- a/src/DIRAC/FrameworkSystem/Client/ProxyGeneration.py +++ b/src/DIRAC/FrameworkSystem/Client/ProxyGeneration.py @@ -9,7 +9,7 @@ import sys from prompt_toolkit import prompt from DIRAC import S_OK, S_ERROR, gLogger -from DIRAC.Core.Base import Script +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script from DIRAC.Core.Utilities.NTP import getClockDeviation __RCSID__ = "$Id$" diff --git a/src/DIRAC/FrameworkSystem/Client/ProxyUpload.py b/src/DIRAC/FrameworkSystem/Client/ProxyUpload.py index de3a7cc894b..d601c78cee2 100644 --- a/src/DIRAC/FrameworkSystem/Client/ProxyUpload.py +++ b/src/DIRAC/FrameworkSystem/Client/ProxyUpload.py @@ -11,7 +11,7 @@ import DIRAC from DIRAC import gLogger -from DIRAC.Core.Base import Script +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script __RCSID__ = "$Id$" diff --git a/src/DIRAC/FrameworkSystem/scripts/dirac_admin_get_CAs.py b/src/DIRAC/FrameworkSystem/scripts/dirac_admin_get_CAs.py index 49f1e77b967..d38f9bbd7e7 100755 --- a/src/DIRAC/FrameworkSystem/scripts/dirac_admin_get_CAs.py +++ b/src/DIRAC/FrameworkSystem/scripts/dirac_admin_get_CAs.py @@ -17,14 +17,13 @@ from __future__ import print_function import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script from DIRAC.FrameworkSystem.Client.BundleDeliveryClient import BundleDeliveryClient __RCSID__ = "$Id$" -@DIRACScript() +@Script() def main(): Script.addDefaultOptionValue('/DIRAC/Security/SkipCAChecks', 'yes') Script.parseCommandLine(ignoreErrors=True) diff --git a/src/DIRAC/FrameworkSystem/scripts/dirac_admin_get_proxy.py b/src/DIRAC/FrameworkSystem/scripts/dirac_admin_get_proxy.py index fe26f14d58a..3acf4213dcf 100755 --- a/src/DIRAC/FrameworkSystem/scripts/dirac_admin_get_proxy.py +++ b/src/DIRAC/FrameworkSystem/scripts/dirac_admin_get_proxy.py @@ -6,14 +6,6 @@ """ Retrieve a delegated proxy for the given user and group -Usage: - dirac-admin-get-proxy [options] ... group - -Arguments: - DN: DN of the user - user: DIRAC user name (will fail if there is more than 1 DN registered) - group: DIRAC group name - Example: $ dirac-admin-get-proxy vhamar dirac_user Proxy downloaded to /afs/in2p3.fr/home/h/hamar/proxy.vhamar.dirac_user @@ -28,8 +20,7 @@ import DIRAC from DIRAC import gLogger, S_OK, S_ERROR -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script from DIRAC.FrameworkSystem.Client.ProxyManagerClient import gProxyManager from DIRAC.ConfigurationSystem.Client.Helpers import Registry @@ -108,19 +99,19 @@ def registerCLISwitches(self): Script.registerSwitch("m:", "vomsAttr=", "VOMS attribute to require", self.setVOMSAttr) -@DIRACScript() +@Script() def main(): params = Params() params.registerCLISwitches() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(("DN: DN of the user", + "user: DIRAC user name (will fail if there is more than 1 DN registered)")) + Script.registerArgument(" group: DIRAC group name") Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() - - if len(args) != 2: - Script.showHelp() + # parseCommandLine show help when mandatory arguments are not specified or incorrect argument + userDN, userGroup = Script.getPositionalArgs(group=True) - userGroup = str(args[1]) - userDN = str(args[0]) userName = False if userDN.find("/") != 0: userName = userDN diff --git a/src/DIRAC/FrameworkSystem/scripts/dirac_admin_proxy_upload.py b/src/DIRAC/FrameworkSystem/scripts/dirac_admin_proxy_upload.py index b7114bdfde1..8b77f79dd00 100755 --- a/src/DIRAC/FrameworkSystem/scripts/dirac_admin_proxy_upload.py +++ b/src/DIRAC/FrameworkSystem/scripts/dirac_admin_proxy_upload.py @@ -17,12 +17,11 @@ import sys -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script from DIRAC.FrameworkSystem.Client.ProxyUpload import CLIParams, uploadProxy -@DIRACScript() +@Script() def main(): cliParams = CLIParams() cliParams.registerCLISwitches() diff --git a/src/DIRAC/FrameworkSystem/scripts/dirac_admin_sysadmin_cli.py b/src/DIRAC/FrameworkSystem/scripts/dirac_admin_sysadmin_cli.py index 764fae3ecf6..1bcd2a682a2 100755 --- a/src/DIRAC/FrameworkSystem/scripts/dirac_admin_sysadmin_cli.py +++ b/src/DIRAC/FrameworkSystem/scripts/dirac_admin_sysadmin_cli.py @@ -13,11 +13,10 @@ __RCSID__ = "$Id$" -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): host = None Script.registerSwitch("H:", "host=", " Target host") diff --git a/src/DIRAC/FrameworkSystem/scripts/dirac_admin_update_instance.py b/src/DIRAC/FrameworkSystem/scripts/dirac_admin_update_instance.py index 55463dcdd4a..5121bdad593 100755 --- a/src/DIRAC/FrameworkSystem/scripts/dirac_admin_update_instance.py +++ b/src/DIRAC/FrameworkSystem/scripts/dirac_admin_update_instance.py @@ -1,12 +1,6 @@ #!/usr/bin/env python """ Script to apply update to all or some dirac servers and restart them - -Usage: - dirac-admin-update-instance version - -Arguments: - version: version of DIRAC you want to update to """ from __future__ import absolute_import from __future__ import division @@ -17,25 +11,23 @@ from io import open import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): Script.registerSwitch("", "hosts=", "Comma separated list of hosts or file containing row wise list of hosts" " targeted for update (leave empty for all)") Script.registerSwitch("", "excludeHosts=", "Comma separated list of hosts or file containing row wise list of hosts" " excluded from update") Script.registerSwitch("", "retry=", "Number of retry attempts on hosts that have failed to update") + # Registering arguments will automatically add their description to the help menu + Script.registerArgument("version: version of DIRAC you want to update to") Script.parseCommandLine(ignoreErrors=False) - args = Script.getPositionalArgs() - if len(args) < 1 or len(args) > 3: - Script.showHelp() - - version = args[0] + # parseCommandLine show help when mandatory arguments are not specified or incorrect argument + version = Script.getPositionalArgs(group=True) retry = 0 hosts = [] excludeHosts = [] diff --git a/src/DIRAC/FrameworkSystem/scripts/dirac_admin_update_pilot.py b/src/DIRAC/FrameworkSystem/scripts/dirac_admin_update_pilot.py index 9e3b8488e4d..7ada15b1de2 100755 --- a/src/DIRAC/FrameworkSystem/scripts/dirac_admin_update_pilot.py +++ b/src/DIRAC/FrameworkSystem/scripts/dirac_admin_update_pilot.py @@ -1,12 +1,6 @@ #!/usr/bin/env python """ Script to update pilot version in CS - -Usage: - dirac-admin-update-pilot version - -Arguments: - version: pilot version you want to update to """ from __future__ import absolute_import from __future__ import division @@ -15,11 +9,10 @@ __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): Script.registerSwitch( "v:", @@ -27,14 +20,13 @@ def main(): "Location of pilot version in CS /Operations//Pilot/Version" " (default value specified in CS under /DIRAC/DefaultSetup)" ) - + # Registering arguments will automatically add their description to the help menu + Script.registerArgument("version: pilot version you want to update to") Script.parseCommandLine(ignoreErrors=False) - args = Script.getPositionalArgs() - if len(args) < 1 or len(args) > 2: - Script.showHelp() + # parseCommandLine show help when mandatory arguments are not specified or incorrect argument + version = Script.getPositionalArgs(group=True) - version = args[0] vo = None for switch in Script.getUnprocessedSwitches(): if switch[0] == "v" or switch[0] == "vo": diff --git a/src/DIRAC/FrameworkSystem/scripts/dirac_admin_users_with_proxy.py b/src/DIRAC/FrameworkSystem/scripts/dirac_admin_users_with_proxy.py index 45c1ed6f10c..ef89c02a0e1 100755 --- a/src/DIRAC/FrameworkSystem/scripts/dirac_admin_users_with_proxy.py +++ b/src/DIRAC/FrameworkSystem/scripts/dirac_admin_users_with_proxy.py @@ -25,9 +25,8 @@ from __future__ import division import DIRAC -from DIRAC.Core.Base import Script from DIRAC.Core.Utilities import Time -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script from DIRAC.FrameworkSystem.Client.ProxyManagerClient import gProxyManager __RCSID__ = "$Id$" @@ -52,12 +51,11 @@ def registerCLISwitches(self): Script.registerSwitch("v:", "valid=", "Required HH:MM for the users", self.setProxyLifeTime) -@DIRACScript() +@Script() def main(): params = Params() params.registerCLISwitches() Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() result = gProxyManager.getDBContents() if not result['OK']: print("Can't retrieve list of users: %s" % result['Message']) diff --git a/src/DIRAC/FrameworkSystem/scripts/dirac_install_component.py b/src/DIRAC/FrameworkSystem/scripts/dirac_install_component.py index deda9bcfc54..c31e910237c 100755 --- a/src/DIRAC/FrameworkSystem/scripts/dirac_install_component.py +++ b/src/DIRAC/FrameworkSystem/scripts/dirac_install_component.py @@ -1,13 +1,6 @@ #!/usr/bin/env python """ Do the initial installation and configuration of a DIRAC component - -Usage: - dirac-install-component [options] ... System Component|System/Component - -Arguments: - System: Name of the DIRAC system (ie: WorkloadManagement) - Service: Name of the DIRAC component (ie: Matcher) """ from __future__ import absolute_import @@ -16,8 +9,7 @@ from DIRAC import exit as DIRACexit from DIRAC import gConfig, gLogger, S_OK -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script from DIRAC.Core.Utilities.Extensions import extensionsByPriority from DIRAC.FrameworkSystem.Utilities import MonitoringUtilities @@ -48,7 +40,7 @@ def setSpecialOption(optVal): return S_OK() -@DIRACScript() +@Script() def main(): global overwrite global specialOptions @@ -61,6 +53,11 @@ def main(): Script.registerSwitch("w", "overwrite", "Overwrite the configuration in the global CS", setOverwrite) Script.registerSwitch("m:", "module=", "Python module name for the component code", setModule) Script.registerSwitch("p:", "parameter=", "Special component option ", setSpecialOption) + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(("System/Component: Full component name (ie: WorkloadManagement/Matcher)", + "System: Name of the DIRAC system (ie: WorkloadManagement)")) + Script.registerArgument(" Component: Name of the DIRAC service (ie: Matcher)", mandatory=False) + Script.parseCommandLine() args = Script.getPositionalArgs() diff --git a/src/DIRAC/FrameworkSystem/scripts/dirac_install_tornado_service.py b/src/DIRAC/FrameworkSystem/scripts/dirac_install_tornado_service.py index 5ca24aa9110..81becfc77ff 100755 --- a/src/DIRAC/FrameworkSystem/scripts/dirac_install_tornado_service.py +++ b/src/DIRAC/FrameworkSystem/scripts/dirac_install_tornado_service.py @@ -1,13 +1,6 @@ #!/usr/bin/env python """ Do the initial installation and configuration of a DIRAC service based on tornado - -Usage: - dirac-install-tornado-service [options] ... System Component|System/Component - -Arguments: - System: Name of the DIRAC system (ie: WorkloadManagement) - Service: Name of the DIRAC component (ie: Matcher) """ from __future__ import absolute_import @@ -18,13 +11,10 @@ from DIRAC import exit as DIRACexit from DIRAC import gConfig, gLogger, S_OK -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script from DIRAC.Core.Utilities.Extensions import extensionsByPriority from DIRAC.FrameworkSystem.Utilities import MonitoringUtilities -__RCSID__ = "$Id$" - overwrite = False @@ -53,7 +43,7 @@ def setSpecialOption(optVal): return S_OK() -@DIRACScript() +@Script() def main(): global overwrite global specialOptions @@ -66,6 +56,10 @@ def main(): Script.registerSwitch("w", "overwrite", "Overwrite the configuration in the global CS", setOverwrite) Script.registerSwitch("m:", "module=", "Python module name for the component code", setModule) Script.registerSwitch("p:", "parameter=", "Special component option ", setSpecialOption) + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(("System/Component: Full component name (ie: WorkloadManagement/Matcher)", + "System: Name of the DIRAC system (ie: WorkloadManagement)")) + Script.registerArgument(" Component: Name of the DIRAC service (ie: Matcher)", mandatory=False) Script.parseCommandLine() args = Script.getPositionalArgs() @@ -78,7 +72,7 @@ def main(): system = args[0] component = args[1] - compOrMod = module if module else component + compOrMod = module or component result = gComponentInstaller.addDefaultOptionsToCS(gConfig, 'service', system, component, extensionsByPriority(), diff --git a/src/DIRAC/FrameworkSystem/scripts/dirac_monitoring_get_components_status.py b/src/DIRAC/FrameworkSystem/scripts/dirac_monitoring_get_components_status.py index b6abd7288bd..d114be09993 100755 --- a/src/DIRAC/FrameworkSystem/scripts/dirac_monitoring_get_components_status.py +++ b/src/DIRAC/FrameworkSystem/scripts/dirac_monitoring_get_components_status.py @@ -4,16 +4,14 @@ from __future__ import division import sys -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script __RCSID__ = "$Id$" -@DIRACScript() +@Script() def main(): Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() fieldsToShow = ('ComponentName', 'Type', 'Host', 'Port', 'Status', 'Message') diff --git a/src/DIRAC/FrameworkSystem/scripts/dirac_myproxy_upload.py b/src/DIRAC/FrameworkSystem/scripts/dirac_myproxy_upload.py index 0e7882a69ea..584aab256ce 100755 --- a/src/DIRAC/FrameworkSystem/scripts/dirac_myproxy_upload.py +++ b/src/DIRAC/FrameworkSystem/scripts/dirac_myproxy_upload.py @@ -11,8 +11,7 @@ import sys import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script class Params: @@ -34,7 +33,7 @@ def showVersion(self, arg): return DIRAC.S_OK() -@DIRACScript() +@Script() def main(): params = Params() diff --git a/src/DIRAC/FrameworkSystem/scripts/dirac_populate_component_db.py b/src/DIRAC/FrameworkSystem/scripts/dirac_populate_component_db.py index f64b0b202d3..6670b1d1b5f 100755 --- a/src/DIRAC/FrameworkSystem/scripts/dirac_populate_component_db.py +++ b/src/DIRAC/FrameworkSystem/scripts/dirac_populate_component_db.py @@ -14,8 +14,7 @@ from DIRAC import exit as DIRACexit from DIRAC import S_OK, gLogger, gConfig from DIRAC.ConfigurationSystem.Client.CSAPI import CSAPI -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script from DIRAC.FrameworkSystem.Client.NotificationClient import NotificationClient from DIRAC.FrameworkSystem.Client.SystemAdministratorIntegrator \ import SystemAdministratorIntegrator @@ -38,7 +37,7 @@ def setExcludedHosts(value): return S_OK() -@DIRACScript() +@Script() def main(): global excludedHosts Script.registerSwitch( diff --git a/src/DIRAC/FrameworkSystem/scripts/dirac_proxy_destroy.py b/src/DIRAC/FrameworkSystem/scripts/dirac_proxy_destroy.py index 54e1710b354..035c83b692f 100755 --- a/src/DIRAC/FrameworkSystem/scripts/dirac_proxy_destroy.py +++ b/src/DIRAC/FrameworkSystem/scripts/dirac_proxy_destroy.py @@ -15,8 +15,7 @@ import DIRAC from DIRAC import gLogger, S_OK -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script from DIRAC.Core.Security import Locations, ProxyInfo from DIRAC.Core.DISET.RPCClient import RPCClient @@ -181,7 +180,7 @@ def run(): return 0 -@DIRACScript() +@Script() def main(): try: retval = run() diff --git a/src/DIRAC/FrameworkSystem/scripts/dirac_proxy_get_uploaded_info.py b/src/DIRAC/FrameworkSystem/scripts/dirac_proxy_get_uploaded_info.py index e035b4574ee..8ad024a92c1 100755 --- a/src/DIRAC/FrameworkSystem/scripts/dirac_proxy_get_uploaded_info.py +++ b/src/DIRAC/FrameworkSystem/scripts/dirac_proxy_get_uploaded_info.py @@ -24,8 +24,7 @@ import sys from DIRAC import gLogger, S_OK -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script from DIRAC.FrameworkSystem.Client.ProxyManagerClient import ProxyManagerClient from DIRAC.Core.Security import Properties from DIRAC.Core.Security.ProxyInfo import getProxyInfo @@ -46,7 +45,7 @@ def setUser(arg): return S_OK() -@DIRACScript() +@Script() def main(): global userName Script.registerSwitch("u:", "user=", "User to query (by default oneself)", setUser) diff --git a/src/DIRAC/FrameworkSystem/scripts/dirac_proxy_info.py b/src/DIRAC/FrameworkSystem/scripts/dirac_proxy_info.py index 701f56cd4d6..f193c284d39 100755 --- a/src/DIRAC/FrameworkSystem/scripts/dirac_proxy_info.py +++ b/src/DIRAC/FrameworkSystem/scripts/dirac_proxy_info.py @@ -26,7 +26,7 @@ import sys -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script from DIRAC.Core.Utilities.ReturnValues import S_OK @@ -75,11 +75,10 @@ def setManagerInfo(self, arg): return S_OK() -@DIRACScript() +@Script() def main(): params = Params() - from DIRAC.Core.Base import Script Script.registerSwitch("f:", "file=", "File to use as user key", params.setProxyLocation) Script.registerSwitch("i", "version", "Print version", params.showVersion) Script.registerSwitch("n", "novoms", "Disable VOMS", params.disableVOMS) diff --git a/src/DIRAC/FrameworkSystem/scripts/dirac_proxy_init.py b/src/DIRAC/FrameworkSystem/scripts/dirac_proxy_init.py index baa9bca4672..8868db2fe1a 100755 --- a/src/DIRAC/FrameworkSystem/scripts/dirac_proxy_init.py +++ b/src/DIRAC/FrameworkSystem/scripts/dirac_proxy_init.py @@ -23,8 +23,7 @@ import DIRAC from DIRAC import gLogger, S_OK, S_ERROR -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script from DIRAC.FrameworkSystem.Client import ProxyGeneration, ProxyUpload from DIRAC.Core.Security import X509Chain, ProxyInfo, Properties, VOMS from DIRAC.Core.Security.Locations import getCAsLocation @@ -250,7 +249,7 @@ def doTheMagic(self): return S_OK() -@DIRACScript() +@Script() def main(): global piParams, pI piParams = Params() diff --git a/src/DIRAC/FrameworkSystem/scripts/dirac_restart_component.py b/src/DIRAC/FrameworkSystem/scripts/dirac_restart_component.py index 9915124ecc3..e68bea4c9dd 100755 --- a/src/DIRAC/FrameworkSystem/scripts/dirac_restart_component.py +++ b/src/DIRAC/FrameworkSystem/scripts/dirac_restart_component.py @@ -1,13 +1,6 @@ #!/usr/bin/env python """ Restart DIRAC component using runsvctrl utility - -Usage: - dirac-restart-component [options] ... [System [Service|Agent]] - -Arguments: - System: Name of the system for the component (default *: all) - Service|Agent: Name of the particular component (default *: all) """ from __future__ import print_function from __future__ import absolute_import @@ -15,22 +8,24 @@ __RCSID__ = "$Id$" -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): Script.disableCS() - Script.parseCommandLine() - args = Script.getPositionalArgs() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(" System: Name of the system for the component (default *: all)", + mandatory=False, default='*') + Script.registerArgument(("Service: Name of the particular component (default *: all)", + "Agent: Name of the particular component (default *: all)"), + mandatory=False, default='*') + _, args = Script.parseCommandLine() + system, component = Script.getPositionalArgs(group=True) + if len(args) > 2: Script.showHelp(exitCode=1) - system = '*' - component = '*' - if args: - system = args[0] if system != '*': if len(args) > 1: component = args[1] diff --git a/src/DIRAC/FrameworkSystem/scripts/dirac_start_component.py b/src/DIRAC/FrameworkSystem/scripts/dirac_start_component.py index 210d2c6d51b..8209a3e29b9 100755 --- a/src/DIRAC/FrameworkSystem/scripts/dirac_start_component.py +++ b/src/DIRAC/FrameworkSystem/scripts/dirac_start_component.py @@ -1,13 +1,6 @@ #!/usr/bin/env python """ Start DIRAC component using runsvctrl utility - -Usage: - dirac-start-component [options] ... [system [service|agent]] - -Arguments: - system: Name of the system for the component (default *: all) - service|agent: Name of the particular component (default *: all) """ from __future__ import print_function from __future__ import absolute_import @@ -15,22 +8,24 @@ __RCSID__ = "$Id$" -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): Script.disableCS() - Script.parseCommandLine() - args = Script.getPositionalArgs() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(" System: Name of the system for the component (default *: all)", + mandatory=False, default='*') + Script.registerArgument(("Service: Name of the particular component (default *: all)", + "Agent: Name of the particular component (default *: all)"), + mandatory=False, default='*') + _, args = Script.parseCommandLine() + system, component = Script.getPositionalArgs(group=True) + if len(args) > 2: Script.showHelp(exitCode=1) - system = '*' - component = '*' - if len(args) > 0: - system = args[0] if system != '*': if len(args) > 1: component = args[1] diff --git a/src/DIRAC/FrameworkSystem/scripts/dirac_status_component.py b/src/DIRAC/FrameworkSystem/scripts/dirac_status_component.py index df3c04da6f9..34b7467e545 100755 --- a/src/DIRAC/FrameworkSystem/scripts/dirac_status_component.py +++ b/src/DIRAC/FrameworkSystem/scripts/dirac_status_component.py @@ -2,13 +2,6 @@ """ Status of DIRAC components using runsvstat utility -Usage: - dirac-status-component [options] ... [system [service|agent]] - -Arguments: - system: Name of the system for the component (default *: all) - service|agent: Name of the particular component (default *: all) - Example: $ dirac-status-component DIRAC Root Path = /vo/dirac/versions/Lyon-HEAD-1296215324 @@ -20,15 +13,20 @@ from __future__ import absolute_import from __future__ import division -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): Script.disableCS() - Script.parseCommandLine() - args = Script.getPositionalArgs() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(" System: Name of the system for the component (default *: all)", + mandatory=False, default='*') + Script.registerArgument(("Service: Name of the particular component (default *: all)", + "Agent: Name of the particular component (default *: all)"), + mandatory=False, default='*') + _, args = Script.parseCommandLine() + system, component = Script.getPositionalArgs(group=True) from DIRAC.FrameworkSystem.Client.ComponentInstaller import gComponentInstaller @@ -37,8 +35,6 @@ def main(): if len(args) > 2: Script.showHelp(exitCode=1) - system = '*' - component = '*' if len(args) > 0: system = args[0] if system != '*': diff --git a/src/DIRAC/FrameworkSystem/scripts/dirac_stop_component.py b/src/DIRAC/FrameworkSystem/scripts/dirac_stop_component.py index 059053a71b1..8aa1d176e80 100755 --- a/src/DIRAC/FrameworkSystem/scripts/dirac_stop_component.py +++ b/src/DIRAC/FrameworkSystem/scripts/dirac_stop_component.py @@ -1,27 +1,25 @@ #!/usr/bin/env python """ Stop DIRAC component using runsvctrl utility - -Usage: - dirac-stop-component [options] ... [system [service|agent]] - -Arguments: - system: Name of the system for the component (default *: all) - service|agent: Name of the particular component (default *: all) """ from __future__ import print_function from __future__ import absolute_import from __future__ import division -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): Script.disableCS() - Script.parseCommandLine() - args = Script.getPositionalArgs() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(" System: Name of the system for the component (default *: all)", + mandatory=False, default='*') + Script.registerArgument(("Service: Name of the particular component (default *: all)", + "Agent: Name of the particular component (default *: all)"), + mandatory=False, default='*') + _, args = Script.parseCommandLine() + system, component = Script.getPositionalArgs(group=True) from DIRAC.FrameworkSystem.Client.ComponentInstaller import gComponentInstaller @@ -30,10 +28,6 @@ def main(): if len(args) > 2: Script.showHelp(exitCode=1) - system = '*' - component = '*' - if len(args) > 0: - system = args[0] if system != '*': if len(args) > 1: component = args[1] diff --git a/src/DIRAC/FrameworkSystem/scripts/dirac_sys_sendmail.py b/src/DIRAC/FrameworkSystem/scripts/dirac_sys_sendmail.py index ec12bdc5322..74dd71f6b2d 100755 --- a/src/DIRAC/FrameworkSystem/scripts/dirac_sys_sendmail.py +++ b/src/DIRAC/FrameworkSystem/scripts/dirac_sys_sendmail.py @@ -14,9 +14,8 @@ Other keys will be ommited. Message body is an arbitrary string. -Examples:: - - dirac-sys-sendmail "From: source@email.com\\nTo: destination@email.com\\nSubject: Test\\n\\nMessage body" +Examples: + $ dirac-sys-sendmail "From: source@email.com\\nTo: destination@email.com\\nSubject: Test\\n\\nMessage body" echo "From: source@email.com\\nSubject: Test\\n\\nMessage body" | dirac-sys-sendmail destination@email.com """ @@ -30,15 +29,13 @@ import os from DIRAC import gLogger, exit as DIRACexit -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script from DIRAC.FrameworkSystem.Client.NotificationClient import NotificationClient -@DIRACScript() +@Script() def main(): - Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() + _, args = Script.parseCommandLine(ignoreErrors=True) arg = "".join(args) diff --git a/src/DIRAC/FrameworkSystem/scripts/dirac_uninstall_component.py b/src/DIRAC/FrameworkSystem/scripts/dirac_uninstall_component.py index 58da55a64c5..1bd7bac3970 100755 --- a/src/DIRAC/FrameworkSystem/scripts/dirac_uninstall_component.py +++ b/src/DIRAC/FrameworkSystem/scripts/dirac_uninstall_component.py @@ -1,13 +1,6 @@ #!/usr/bin/env python """ Uninstallation of a DIRAC component - -Usage: - dirac-uninstall-component [options] ... System Component|System/Component - -Arguments: - System: Name of the DIRAC system (ie: WorkloadManagement) - Component: Name of the DIRAC component (ie: Matcher) """ from __future__ import absolute_import from __future__ import division @@ -17,9 +10,8 @@ from DIRAC import exit as DIRACexit from DIRAC import gLogger, S_OK -from DIRAC.Core.Base import Script from DIRAC.Core.Utilities.PromptUser import promptUser -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script from DIRAC.FrameworkSystem.Utilities import MonitoringUtilities from DIRAC.FrameworkSystem.Client.ComponentMonitoringClient import ComponentMonitoringClient @@ -34,7 +26,7 @@ def setForce(opVal): return S_OK() -@DIRACScript() +@Script() def main(): global force @@ -42,8 +34,11 @@ def main(): gComponentInstaller.exitOnError = True Script.registerSwitch("f", "force", "Forces the removal of the logs", setForce) - Script.parseCommandLine() - args = Script.getPositionalArgs() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(("System/Component: Full component name (ie: WorkloadManagement/Matcher)", + "System: Name of the DIRAC system (ie: WorkloadManagement)")) + Script.registerArgument(" Component: Name of the DIRAC service (ie: Matcher)", mandatory=False) + _, args = Script.parseCommandLine() if len(args) == 1: args = args[0].split('/') diff --git a/src/DIRAC/Interfaces/scripts/dirac_admin_add_group.py b/src/DIRAC/Interfaces/scripts/dirac_admin_add_group.py index e688b6d072b..ce3b483b9de 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_admin_add_group.py +++ b/src/DIRAC/Interfaces/scripts/dirac_admin_add_group.py @@ -2,12 +2,6 @@ """ Add or Modify a Group info in DIRAC -Usage: - dirac-admin-add-group [options] ... Property= ... - -Arguments: - Property=: Other properties to be added to the Group like (VOMSRole=XXXX) - Example: $ dirac-admin-add-group -G dirac_test """ @@ -20,8 +14,8 @@ # pylint: disable=wrong-import-position import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC import gLogger +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script groupName = None groupProperties = [] @@ -51,7 +45,7 @@ def addProperty(arg): groupProperties.append(arg) -@DIRACScript() +@Script() def main(): global groupName global groupProperties @@ -67,14 +61,15 @@ def main(): 'Property:', 'Property to be added to the Group (Allow Multiple instances or None)', addProperty) + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["Property=: Other properties to be added to the Group like (VOMSRole=XXXX)"], + mandatory=False) - Script.parseCommandLine(ignoreErrors=True) + _, args = Script.parseCommandLine(ignoreErrors=True) if groupName is None: Script.showHelp(exitCode=1) - args = Script.getPositionalArgs() - from DIRAC.Interfaces.API.DiracAdmin import DiracAdmin diracAdmin = DiracAdmin() exitCode = 0 @@ -94,7 +89,7 @@ def main(): else: pName = pl[0] pValue = "=".join(pl[1:]) - Script.gLogger.info("Setting property %s to %s" % (pName, pValue)) + gLogger.info("Setting property %s to %s" % (pName, pValue)) groupProps[pName] = pValue if not diracAdmin.csModifyGroup(groupName, groupProps, createIfNonExistant=True)['OK']: @@ -107,7 +102,7 @@ def main(): exitCode = 255 for error in errorList: - Script.gLogger.error("%s: %s" % error) + gLogger.error("%s: %s" % error) DIRAC.exit(exitCode) diff --git a/src/DIRAC/Interfaces/scripts/dirac_admin_add_host.py b/src/DIRAC/Interfaces/scripts/dirac_admin_add_host.py index 02557c48804..a5201ac51df 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_admin_add_host.py +++ b/src/DIRAC/Interfaces/scripts/dirac_admin_add_host.py @@ -2,12 +2,6 @@ """ Add or Modify a Host info in DIRAC -Usage: - dirac-admin-add-host [options] ... Property= ... - -Arguments: - Property=: Other properties to be added to the Host like (Responsible=XXX) - Example: $ dirac-admin-add-host -H dirac.i2np3.fr -D /O=GRID-FR/C=FR/O=CNRS/OU=CC-IN2P3/CN=dirac.in2p3.fr """ @@ -18,8 +12,8 @@ __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC import gLogger +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script hostName = None hostDN = None @@ -48,7 +42,7 @@ def addProperty(arg): hostProperties.append(arg) -@DIRACScript() +@Script() def main(): global hostName global hostDN @@ -60,14 +54,15 @@ def main(): 'Property:', 'Property to be added to the Host (Allow Multiple instances or None)', addProperty) + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["Property=: Other properties to be added to the Host like (Responsible=XXX)"], + mandatory=False) - Script.parseCommandLine(ignoreErrors=True) + _, args = Script.parseCommandLine(ignoreErrors=True) if hostName is None or hostDN is None: Script.showHelp(exitCode=1) - args = Script.getPositionalArgs() - from DIRAC.Interfaces.API.DiracAdmin import DiracAdmin diracAdmin = DiracAdmin() exitCode = 0 @@ -85,7 +80,7 @@ def main(): else: pName = pl[0] pValue = "=".join(pl[1:]) - Script.gLogger.info("Setting property %s to %s" % (pName, pValue)) + gLogger.info("Setting property %s to %s" % (pName, pValue)) hostProps[pName] = pValue if not diracAdmin.csModifyHost(hostName, hostProps, createIfNonExistant=True)['OK']: @@ -102,16 +97,16 @@ def main(): cmc = ComponentMonitoringClient() ret = cmc.hostExists(dict(HostName=hostName)) if not ret['OK']: - Script.gLogger.error('Cannot check if host is registered in ComponentMonitoring', ret['Message']) + gLogger.error('Cannot check if host is registered in ComponentMonitoring', ret['Message']) elif ret['Value']: - Script.gLogger.info('Host already registered in ComponentMonitoring') + gLogger.info('Host already registered in ComponentMonitoring') else: ret = cmc.addHost(dict(HostName=hostName, CPU='TO_COME')) if not ret['OK']: - Script.gLogger.error('Failed to add Host to ComponentMonitoring', ret['Message']) + gLogger.error('Failed to add Host to ComponentMonitoring', ret['Message']) for error in errorList: - Script.gLogger.error("%s: %s" % error) + gLogger.error("%s: %s" % error) DIRAC.exit(exitCode) diff --git a/src/DIRAC/Interfaces/scripts/dirac_admin_add_user.py b/src/DIRAC/Interfaces/scripts/dirac_admin_add_user.py index 150763646cc..831e12da818 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_admin_add_user.py +++ b/src/DIRAC/Interfaces/scripts/dirac_admin_add_user.py @@ -2,12 +2,6 @@ """ Add or Modify a User info in DIRAC -Usage: - dirac-admin-add-user [options] ... Property= ... - -Arguments: - Property=: Properties to be added to the User like (Phone=XXXX) - Example: $ dirac-admin-add-user -N vhamar -D /O=GRID/C=FR/O=CNRS/OU=CPPM/CN=Vanessa Hamar -M hamar@cppm.in2p3.fr -G dirac_user """ @@ -18,8 +12,8 @@ __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC import gLogger +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script userName = None userDN = None @@ -46,7 +40,7 @@ def setUserMail(arg): if userMail or not arg: Script.showHelp(exitCode=1) if not arg.find('@') > 0: - Script.gLogger.error('Not a valid mail address', arg) + gLogger.error('Not a valid mail address', arg) DIRAC.exit(-1) userMail = arg @@ -59,7 +53,7 @@ def addUserGroup(arg): userGroups.append(arg) -@DIRACScript() +@Script() def main(): global userName global userDN @@ -73,7 +67,9 @@ def main(): 'UserGroup:', 'Name of the Group for the User (Allow Multiple instances or None)', addUserGroup) - + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["Property=: Properties to be added to the User like (Phone=XXXX)"], + mandatory=False) Script.parseCommandLine(ignoreErrors=True) if userName is None or userDN is None or userMail is None: @@ -97,7 +93,7 @@ def main(): else: pName = pl[0] pValue = "=".join(pl[1:]) - Script.gLogger.info("Setting property %s to %s" % (pName, pValue)) + gLogger.info("Setting property %s to %s" % (pName, pValue)) userProps[pName] = pValue if not diracAdmin.csModifyUser(userName, userProps, createIfNonExistant=True)['OK']: @@ -110,7 +106,7 @@ def main(): exitCode = 255 for error in errorList: - Script.gLogger.error("%s: %s" % error) + gLogger.error("%s: %s" % error) DIRAC.exit(exitCode) diff --git a/src/DIRAC/Interfaces/scripts/dirac_admin_allow_site.py b/src/DIRAC/Interfaces/scripts/dirac_admin_allow_site.py index 4b5b07fa195..28fe960623c 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_admin_allow_site.py +++ b/src/DIRAC/Interfaces/scripts/dirac_admin_allow_site.py @@ -6,13 +6,6 @@ """ Add Site to Active mask for current Setup -Usage: - dirac-admin-allow-site [options] ... Site Comment - -Arguments: - Site: Name of the Site - Comment: Reason of the action - Example: $ dirac-admin-allow-site LCG.IN2P3.fr "FRANCE" """ @@ -24,13 +17,15 @@ import time -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): Script.registerSwitch("E:", "email=", "Boolean True/False (True by default)") + # Registering arguments will automatically add their description to the help menu + Script.registerArgument("Site: Name of the Site") + Script.registerArgument("Comment: Reason of the action") Script.parseCommandLine(ignoreErrors=True) from DIRAC.Interfaces.API.DiracAdmin import DiracAdmin @@ -50,11 +45,6 @@ def getBoolean(value): if switch[0] == "email": email = getBoolean(switch[1]) - args = Script.getPositionalArgs() - - if len(args) < 2: - Script.showHelp() - diracAdmin = DiracAdmin() exitCode = 0 errorList = [] @@ -72,8 +62,8 @@ def getBoolean(value): # print 'Script stopped' # DIRACExit( 0 ) - site = args[0] - comment = args[1] + # parseCommandLine show help when mandatory arguments are not specified or incorrect argument + site, comment = Script.getPositionalArgs(group=True) result = diracAdmin.allowSite(site, comment, printOutput=True) if not result['OK']: errorList.append((site, result['Message'])) diff --git a/src/DIRAC/Interfaces/scripts/dirac_admin_ban_site.py b/src/DIRAC/Interfaces/scripts/dirac_admin_ban_site.py index 7d905f84a2d..624ef6133a9 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_admin_ban_site.py +++ b/src/DIRAC/Interfaces/scripts/dirac_admin_ban_site.py @@ -6,13 +6,6 @@ """ Remove Site from Active mask for current Setup -Usage: - dirac-admin-ban-site [options] ... Site Comment - -Arguments: - Site: Name of the Site - Comment: Reason of the action - Example: $ dirac-admin-ban-site LCG.IN2P3.fr "Pilot installation problems" """ @@ -24,13 +17,15 @@ import time -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): Script.registerSwitch("E:", "email=", "Boolean True/False (True by default)") + # Registering arguments will automatically add their description to the help menu + Script.registerArgument("Site: Name of the Site") + Script.registerArgument("Comment: Reason of the action") Script.parseCommandLine(ignoreErrors=True) from DIRAC import exit as DIRACExit, gConfig, gLogger @@ -51,11 +46,6 @@ def getBoolean(value): if switch[0] == "email": email = getBoolean(switch[1]) - args = Script.getPositionalArgs() - - if len(args) < 2: - Script.showHelp() - diracAdmin = DiracAdmin() exitCode = 0 errorList = [] @@ -73,8 +63,8 @@ def getBoolean(value): # print 'Script stopped' # DIRACExit( 0 ) - site = args[0] - comment = args[1] + # parseCommandLine show help when mandatory arguments are not specified or incorrect argument + site, comment = Script.getPositionalArgs(group=True) result = diracAdmin.banSite(site, comment, printOutput=True) if not result['OK']: errorList.append((site, result['Message'])) diff --git a/src/DIRAC/Interfaces/scripts/dirac_admin_ce_info.py b/src/DIRAC/Interfaces/scripts/dirac_admin_ce_info.py index 02b689f61ab..ac4b00fec42 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_admin_ce_info.py +++ b/src/DIRAC/Interfaces/scripts/dirac_admin_ce_info.py @@ -6,12 +6,6 @@ """ Retrieve Site Associated to a given CE -Usage: - dirac-admin-ce-info [options] ... CE ... - -Arguments: - CE: Name of the CE (mandatory) - Example: $ dirac-admin-ce-info LCG.IN2P3.fr """ @@ -22,28 +16,27 @@ __RCSID__ = "$Id$" from DIRAC import gConfig, gLogger, exit as Dexit -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): + # Registering arguments will automatically add their description to the help menu + Script.registerArgument("CE: Name of the CE") Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() + # parseCommandLine show help when mandatory arguments are not specified or incorrect argument + ce = Script.getPositionalArgs(group=True) from DIRAC.ConfigurationSystem.Client.Helpers import cfgPath from DIRAC.ConfigurationSystem.Client.Helpers.Resources import getCESiteMapping - if len(args) < 1: - Script.showHelp(exitCode=1) - - res = getCESiteMapping(args[0]) + res = getCESiteMapping(ce) if not res['OK']: gLogger.error(res['Message']) Dexit(1) - site = res['Value'][args[0]] + site = res['Value'][ce] - res = gConfig.getOptionsDict(cfgPath('Resources', 'Sites', site.split('.')[0], site, 'CEs', args[0])) + res = gConfig.getOptionsDict(cfgPath('Resources', 'Sites', site.split('.')[0], site, 'CEs', ce)) if not res['OK']: gLogger.error(res['Message']) Dexit(1) diff --git a/src/DIRAC/Interfaces/scripts/dirac_admin_delete_user.py b/src/DIRAC/Interfaces/scripts/dirac_admin_delete_user.py index 00d458d567e..363e3041b14 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_admin_delete_user.py +++ b/src/DIRAC/Interfaces/scripts/dirac_admin_delete_user.py @@ -6,12 +6,6 @@ """ Remove User from Configuration -Usage: - dirac-admin-delete-user [options] ... User ... - -Arguments: - User: User name - Example: $ dirac-admin-delete-user vhamar """ @@ -23,14 +17,15 @@ import six -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["User: User name"]) + # parseCommandLine show help when mandatory arguments are not specified or incorrect argument + _, args = Script.parseCommandLine(ignoreErrors=True) from DIRAC import exit as DIRACExit from DIRAC.Interfaces.API.DiracAdmin import DiracAdmin @@ -38,9 +33,6 @@ def main(): exitCode = 0 errorList = [] - if len(args) < 1: - Script.showHelp() - choice = six.moves.input("Are you sure you want to delete user/s %s? yes/no [no]: " % ", ".join(args)) choice = choice.lower() if choice not in ("yes", "y"): diff --git a/src/DIRAC/Interfaces/scripts/dirac_admin_get_banned_sites.py b/src/DIRAC/Interfaces/scripts/dirac_admin_get_banned_sites.py index c98ceee2708..a62891fed96 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_admin_get_banned_sites.py +++ b/src/DIRAC/Interfaces/scripts/dirac_admin_get_banned_sites.py @@ -4,8 +4,7 @@ # Author : Stuart Paterson ######################################################################## """ -Usage: - dirac-admin-get-banned-sites [options] ... +Get banned sites Example: $ dirac-admin-get-banned-sites @@ -17,11 +16,10 @@ __RCSID__ = "$Id$" -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): Script.parseCommandLine(ignoreErrors=True) diff --git a/src/DIRAC/Interfaces/scripts/dirac_admin_get_job_pilot_output.py b/src/DIRAC/Interfaces/scripts/dirac_admin_get_job_pilot_output.py index 25378c6f547..a9c01048e89 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_admin_get_job_pilot_output.py +++ b/src/DIRAC/Interfaces/scripts/dirac_admin_get_job_pilot_output.py @@ -6,12 +6,6 @@ """ Retrieve the output of the pilot that executed a given job -Usage: - dirac-admin-get-job-pilot-output [options] ... JobID ... - -Arguments: - JobID: DIRAC ID of the Job - Example: $ dirac-admin-get-job-pilot-output 34 """ @@ -21,17 +15,15 @@ __RCSID__ = "$Id$" -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() - - if len(args) < 1: - Script.showHelp() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["JobID: DIRAC ID of the Job"]) + # parseCommandLine show help when mandatory arguments are not specified or incorrect argument + _, args = Script.parseCommandLine(ignoreErrors=True) from DIRAC import exit as DIRACExit from DIRAC.Interfaces.API.DiracAdmin import DiracAdmin diff --git a/src/DIRAC/Interfaces/scripts/dirac_admin_get_job_pilots.py b/src/DIRAC/Interfaces/scripts/dirac_admin_get_job_pilots.py index d795b5880c8..b26a22c6095 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_admin_get_job_pilots.py +++ b/src/DIRAC/Interfaces/scripts/dirac_admin_get_job_pilots.py @@ -6,12 +6,6 @@ """ Retrieve info about pilots that have matched a given Job -Usage: - dirac-admin-get-job-pilots [options] ... JobID - -Arguments: - JobID: DIRAC ID of the Job - Example: $ dirac-admin-get-job-pilots 1848 {'https://marlb.in2p3.fr:9000/bqYViq6KrVgGfr6wwgT45Q': {'AccountingSent': 'False', @@ -40,17 +34,15 @@ __RCSID__ = "$Id$" # pylint: disable=wrong-import-position -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() - - if len(args) < 1: - Script.showHelp() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["JobID: DIRAC ID of the Job"]) + # parseCommandLine show help when mandatory arguments are not specified or incorrect argument + _, args = Script.parseCommandLine(ignoreErrors=True) from DIRAC import exit as DIRACExit from DIRAC.Interfaces.API.DiracAdmin import DiracAdmin diff --git a/src/DIRAC/Interfaces/scripts/dirac_admin_get_pilot_info.py b/src/DIRAC/Interfaces/scripts/dirac_admin_get_pilot_info.py index 14ca628bd9c..722ade423f4 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_admin_get_pilot_info.py +++ b/src/DIRAC/Interfaces/scripts/dirac_admin_get_pilot_info.py @@ -6,12 +6,6 @@ """ Retrieve available info about the given pilot -Usage: - dirac-admin-get-pilot-info [options] ... PilotID ... - -Arguments: - PilotID: Grid ID of the pilot - Example: $ dirac-admin-get-pilot-info https://marlb.in2p3.fr:9000/26KCLKBFtxXKHF4_ZrQjkw {'https://marlb.in2p3.fr:9000/26KCLKBFtxXKHF4_ZrQjkw': {'AccountingSent': 'False', @@ -39,8 +33,7 @@ __RCSID__ = "$Id$" # pylint: disable=wrong-import-position -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script extendedPrint = False @@ -50,21 +43,15 @@ def setExtendedPrint(_arg): extendedPrint = True -@DIRACScript() +@Script() def main(): - global extendedPrint Script.registerSwitch('e', 'extended', 'Get extended printout', setExtendedPrint) - Script.parseCommandLine(ignoreErrors=True) + _, args = Script.parseCommandLine(ignoreErrors=True) from DIRAC import exit as DIRACExit from DIRAC.Interfaces.API.Dirac import Dirac from DIRAC.Interfaces.API.DiracAdmin import DiracAdmin - args = Script.getPositionalArgs() - - if len(args) < 1: - Script.showHelp() - diracAdmin = DiracAdmin() dirac = Dirac() exitCode = 0 diff --git a/src/DIRAC/Interfaces/scripts/dirac_admin_get_pilot_logging_info.py b/src/DIRAC/Interfaces/scripts/dirac_admin_get_pilot_logging_info.py index 1c373499cf7..0c76811c12a 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_admin_get_pilot_logging_info.py +++ b/src/DIRAC/Interfaces/scripts/dirac_admin_get_pilot_logging_info.py @@ -6,12 +6,6 @@ """ Retrieve logging info of a Grid pilot -Usage: - dirac-admin-get-pilot-logging-info [options] ... PilotID ... - -Arguments: - PilotID: Grid ID of the pilot - Example: $ dirac-admin-get-pilot-logging-info https://marlb.in2p3.fr:9000/26KCLKBFtxXKHF4_ZrQjkw Pilot Reference: dirac-admin-get-pilot-logging-info https://marlb.in2p3.fr:9000/26KCLKBFtxXKHF4_ZrQjkw @@ -38,17 +32,15 @@ __RCSID__ = "$Id$" # pylint: disable=wrong-import-position -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() - - if len(args) < 1: - Script.showHelp() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["PilotID: Grid ID of the pilot"]) + # parseCommandLine show help when mandatory arguments are not specified or incorrect argument + _, args = Script.parseCommandLine(ignoreErrors=True) from DIRAC import exit as DIRACExit from DIRAC.Interfaces.API.DiracAdmin import DiracAdmin diff --git a/src/DIRAC/Interfaces/scripts/dirac_admin_get_pilot_output.py b/src/DIRAC/Interfaces/scripts/dirac_admin_get_pilot_output.py index d0acbbe2840..ca0aebbbc3e 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_admin_get_pilot_output.py +++ b/src/DIRAC/Interfaces/scripts/dirac_admin_get_pilot_output.py @@ -6,12 +6,6 @@ """ Retrieve output of a Grid pilot -Usage: - dirac-admin-get-pilot-output [options] ... PilotID ... - -Arguments: - PilotID: Grid ID of the pilot - Example: $ dirac-admin-get-pilot-output https://marlb.in2p3.fr:9000/26KCLKBFtxXKHF4_ZrQjkw $ ls -la @@ -23,17 +17,14 @@ __RCSID__ = "$Id$" -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() - - if len(args) < 1: - Script.showHelp() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["PilotID: Grid ID of the pilot"]) + _, args = Script.parseCommandLine(ignoreErrors=True) from DIRAC import exit as DIRACExit from DIRAC.Interfaces.API.DiracAdmin import DiracAdmin diff --git a/src/DIRAC/Interfaces/scripts/dirac_admin_get_site_mask.py b/src/DIRAC/Interfaces/scripts/dirac_admin_get_site_mask.py index 9827aef300c..888bbdb664d 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_admin_get_site_mask.py +++ b/src/DIRAC/Interfaces/scripts/dirac_admin_get_site_mask.py @@ -6,9 +6,6 @@ """ Get the list of sites enabled in the mask for job submission -Usage: - dirac-admin-get-site-mask [options] - Example: $ dirac-admin-get-site-mask LCG.CGG.fr @@ -24,11 +21,10 @@ __RCSID__ = "$Id$" -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): Script.parseCommandLine(ignoreErrors=True) diff --git a/src/DIRAC/Interfaces/scripts/dirac_admin_list_hosts.py b/src/DIRAC/Interfaces/scripts/dirac_admin_list_hosts.py index 13625e47c4c..e03b436e21c 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_admin_list_hosts.py +++ b/src/DIRAC/Interfaces/scripts/dirac_admin_list_hosts.py @@ -4,8 +4,7 @@ # Author : Adrian Casajus ######################################################################## """ -Usage: - dirac-admin-list-hosts [options] ... +List hosts Example: $ dirac-admin-list-hosts @@ -18,16 +17,14 @@ __RCSID__ = "$Id$" -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): Script.registerSwitch("e", "extended", "Show extended info") Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() from DIRAC import exit as DIRACExit from DIRAC.Interfaces.API.DiracAdmin import DiracAdmin diff --git a/src/DIRAC/Interfaces/scripts/dirac_admin_list_users.py b/src/DIRAC/Interfaces/scripts/dirac_admin_list_users.py index f8fef046db6..d817642af1d 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_admin_list_users.py +++ b/src/DIRAC/Interfaces/scripts/dirac_admin_list_users.py @@ -6,12 +6,6 @@ """ Lists the users in the Configuration. If no group is specified return all users. -Usage: - dirac-admin-list-users [options] ... [Group] ... - -Arguments: - Group: Only users from this group (default: all) - Example: $ dirac-admin-list-users All users registered: @@ -25,18 +19,17 @@ __RCSID__ = "$Id$" -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): Script.registerSwitch("e", "extended", "Show extended info") + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["Group: Only users from this group (default: all)"], + default=['all'], mandatory=False) Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() - - if len(args) == 0: - args = ['all'] + args = Script.getPositionalArgs(group=True) import DIRAC from DIRAC.Interfaces.API.DiracAdmin import DiracAdmin diff --git a/src/DIRAC/Interfaces/scripts/dirac_admin_modify_user.py b/src/DIRAC/Interfaces/scripts/dirac_admin_modify_user.py index a0bf48c0bc1..d2d07146ec4 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_admin_modify_user.py +++ b/src/DIRAC/Interfaces/scripts/dirac_admin_modify_user.py @@ -6,14 +6,6 @@ """ Modify a user in the CS. -Usage: - dirac-admin-modify-user [options] ... user DN group [group] ... - -Arguments: - user: User name (mandatory) - DN: DN of the User (mandatory) - group: Add the user to the group (mandatory) - Example: $ dirac-admin-modify-user vhamar /C=FR/O=Org/CN=User dirac_user """ @@ -24,21 +16,19 @@ __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): Script.registerSwitch("p:", "property=", "Add property to the user =") Script.registerSwitch("f", "force", "create the user if it doesn't exist") + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(" user: User name") + Script.registerArgument(" DN: DN of the User") + Script.registerArgument(["group: Add the user to the group"]) Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() - - if len(args) < 3: - Script.showHelp(exitCode=1) - from DIRAC.Interfaces.API.DiracAdmin import DiracAdmin diracAdmin = DiracAdmin() exitCode = 0 @@ -61,9 +51,7 @@ def main(): print("Setting property %s to %s" % (pName, pValue)) userProps[pName] = pValue - userName = args[0] - userProps['DN'] = args[1] - userProps['Groups'] = args[2:] + userName, userProps['DN'], userProps['Groups'] = Script.getPositionalArgs(group=True) if not diracAdmin.csModifyUser(userName, userProps, createIfNonExistant=forceCreation): errorList.append(("modify user", "Cannot modify user %s" % userName)) diff --git a/src/DIRAC/Interfaces/scripts/dirac_admin_pilot_summary.py b/src/DIRAC/Interfaces/scripts/dirac_admin_pilot_summary.py index e122ea32ba3..6d024ecf818 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_admin_pilot_summary.py +++ b/src/DIRAC/Interfaces/scripts/dirac_admin_pilot_summary.py @@ -4,8 +4,7 @@ # Author : Stuart Paterson ######################################################################## """ -Usage: - dirac-admin-pilot-summary [options] ... +Pilot summary Example: $ dirac-admin-pilot-summary @@ -33,14 +32,12 @@ # pylint: disable=wrong-import-position import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() from DIRAC.Interfaces.API.DiracAdmin import DiracAdmin diracAdmin = DiracAdmin() diff --git a/src/DIRAC/Interfaces/scripts/dirac_admin_reset_job.py b/src/DIRAC/Interfaces/scripts/dirac_admin_reset_job.py index 9153bf473be..b12f33e5233 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_admin_reset_job.py +++ b/src/DIRAC/Interfaces/scripts/dirac_admin_reset_job.py @@ -6,12 +6,6 @@ """ Reset a job or list of jobs in the WMS -Usage: - dirac-admin-reset-job [options] ... JobID ... - -Arguments: - JobID: DIRAC ID of the Job - Example: $ dirac-admin-reset-job 1848 Reset Job 1848 @@ -23,18 +17,14 @@ __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine(ignoreErrors=True) - - args = Script.getPositionalArgs() - - if len(args) < 1: - Script.showHelp() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["JobID: DIRAC Job IDs"]) + _, args = Script.parseCommandLine(ignoreErrors=True) from DIRAC.Interfaces.API.DiracAdmin import DiracAdmin diracAdmin = DiracAdmin() diff --git a/src/DIRAC/Interfaces/scripts/dirac_admin_service_ports.py b/src/DIRAC/Interfaces/scripts/dirac_admin_service_ports.py index c6d9bd30c66..e31cee051f2 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_admin_service_ports.py +++ b/src/DIRAC/Interfaces/scripts/dirac_admin_service_ports.py @@ -6,12 +6,6 @@ """ Print the service ports for the specified setup -Usage: - dirac-admin-service-ports [options] ... [Setup] - -Arguments: - Setup: Name of the setup - Example: $ dirac-admin-service-ports {'Framework/ProxyManager': 9152, @@ -30,18 +24,15 @@ __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): + # Registering arguments will automatically add their description to the help menu + Script.registerArgument("Setup: Name of the setup", default='', mandatory=False) Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() - - setup = '' - if args: - setup = args[0] + setup = Script.getPositionalArgs(group=True) from DIRAC.Interfaces.API.DiracAdmin import DiracAdmin diracAdmin = DiracAdmin() diff --git a/src/DIRAC/Interfaces/scripts/dirac_admin_set_site_protocols.py b/src/DIRAC/Interfaces/scripts/dirac_admin_set_site_protocols.py index b48ebd359c6..631400d852c 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_admin_set_site_protocols.py +++ b/src/DIRAC/Interfaces/scripts/dirac_admin_set_site_protocols.py @@ -6,12 +6,6 @@ """ Defined protocols for each SE for a given site. -Usage: - dirac-admin-set-site-protocols [options] ... Protocol ... - -Arguments: - Protocol: SE access protocol (mandatory) - Example: $ dirac-admin-set-site-protocols --Site=LCG.IN2P3.fr SRM2 """ @@ -22,22 +16,21 @@ __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): Script.registerSwitch("", "Site=", "Site for which protocols are to be set (mandatory)") - Script.parseCommandLine(ignoreErrors=True) + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["Protocol: SE access protocol"], mandatory=False) + switches, args = Script.parseCommandLine(ignoreErrors=True) site = None - for switch in Script.getUnprocessedSwitches(): + for switch in switches: if switch[0].lower() == "site": site = switch[1] - args = Script.getPositionalArgs() - if not site or not args: Script.showHelp(exitCode=1) diff --git a/src/DIRAC/Interfaces/scripts/dirac_admin_site_info.py b/src/DIRAC/Interfaces/scripts/dirac_admin_site_info.py index d1e914787c5..dca31d2d005 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_admin_site_info.py +++ b/src/DIRAC/Interfaces/scripts/dirac_admin_site_info.py @@ -6,12 +6,6 @@ """ Print Configuration information for a given Site -Usage: - dirac-admin-site-info [options] ... Site ... - -Arguments: - Site: Name of the Site - Example: $ dirac-admin-site-info LCG.IN2P3.fr {'CE': 'cclcgceli01.in2p3.fr, cclcgceli03.in2p3.fr, sbgce1.in2p3.fr', @@ -28,17 +22,14 @@ __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() - - if len(args) < 1: - Script.showHelp() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["Site: Name of the Site"]) + _, args = Script.parseCommandLine(ignoreErrors=True) from DIRAC.Interfaces.API.DiracAdmin import DiracAdmin diracAdmin = DiracAdmin() diff --git a/src/DIRAC/Interfaces/scripts/dirac_admin_site_mask_logging.py b/src/DIRAC/Interfaces/scripts/dirac_admin_site_mask_logging.py index c3923b3b5cf..7f08864b43a 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_admin_site_mask_logging.py +++ b/src/DIRAC/Interfaces/scripts/dirac_admin_site_mask_logging.py @@ -6,12 +6,6 @@ """ Retrieves site mask logging information. -Usage: - dirac-admin-site-mask-logging [options] ... Site ... - -Arguments: - Site: Name of the Site - Example: $ dirac-admin-site-mask-logging LCG.IN2P3.fr Site Mask Logging Info for LCG.IN2P3.fr @@ -24,17 +18,14 @@ __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() - - if len(args) < 1: - Script.showHelp() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["Site: Name of the Site"]) + _, args = Script.parseCommandLine(ignoreErrors=True) from DIRAC.Interfaces.API.DiracAdmin import DiracAdmin diracAdmin = DiracAdmin() diff --git a/src/DIRAC/Interfaces/scripts/dirac_admin_sync_users_from_file.py b/src/DIRAC/Interfaces/scripts/dirac_admin_sync_users_from_file.py index 63b3dd995ab..5aa2b85607b 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_admin_sync_users_from_file.py +++ b/src/DIRAC/Interfaces/scripts/dirac_admin_sync_users_from_file.py @@ -6,12 +6,6 @@ """ Sync users in Configuration with the cfg contents. -Usage: - dirac-admin-sync-users-from-file [options] ... UserCfg - -Arguments: - UserCfg: Cfg FileName with Users as sections containing DN, Groups, and other properties as options - Example: $ dirac-admin-sync-users-from-file file_users.cfg """ @@ -21,22 +15,21 @@ from diraccfg import CFG import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script __RCSID__ = "$Id$" -@DIRACScript() +@Script() def main(): Script.registerSwitch("t", "test", "Only test. Don't commit changes") + # Registering arguments will automatically add their description to the help menu + Script.registerArgument("UserCfg: Cfg FileName with Users as sections containing" + "DN, Groups, and other properties as options") Script.parseCommandLine(ignoreErrors=True) args = Script.getExtraCLICFGFiles() - if len(args) < 1: - Script.showHelp() - from DIRAC.Interfaces.API.DiracAdmin import DiracAdmin diracAdmin = DiracAdmin() exitCode = 0 diff --git a/src/DIRAC/Interfaces/scripts/dirac_dms_get_file.py b/src/DIRAC/Interfaces/scripts/dirac_dms_get_file.py index 658698562c7..c74ad4cd4bd 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_dms_get_file.py +++ b/src/DIRAC/Interfaces/scripts/dirac_dms_get_file.py @@ -6,12 +6,6 @@ """ Retrieve a single file or list of files from Grid storage to the current directory. -Usage: - dirac-dms-get-file [options] ... LFN ... - -Arguments: - LFN: Logical File Name or file containing LFNs - Example: $ dirac-dms-get-file /formation/user/v/vhamar/Example.txt {'Failed': {}, @@ -24,12 +18,13 @@ __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["LFN: Logical File Name or file containing LFNs"]) Script.parseCommandLine(ignoreErrors=True) lfns = Script.getPositionalArgs() diff --git a/src/DIRAC/Interfaces/scripts/dirac_dms_lfn_accessURL.py b/src/DIRAC/Interfaces/scripts/dirac_dms_lfn_accessURL.py index b4eec0e53a1..b769213947b 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_dms_lfn_accessURL.py +++ b/src/DIRAC/Interfaces/scripts/dirac_dms_lfn_accessURL.py @@ -6,14 +6,6 @@ """ Retrieve an access URL for an LFN replica given a valid DIRAC SE. -Usage: - dirac-dms-lfn-accessURL [options] ... LFN SE [PROTO] - -Arguments: - LFN: Logical File Name or file containing LFNs (mandatory) - SE: Valid DIRAC SE (mandatory) - PROTO: Optional protocol for accessURL - Example: $ dirac-dms-lfn-accessURL /formation/user/v/vhamar/Example.txt DIRAC-USER {'Failed': {}, @@ -27,33 +19,27 @@ __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument("LFN: Logical File Name or file containing LFNs") + Script.registerArgument("SE: Valid DIRAC SE") + Script.registerArgument("PROTO: Optional protocol for accessURL", default=False, mandatory=False) + _, args = Script.parseCommandLine(ignoreErrors=True) + lfn, seName, proto = Script.getPositionalArgs(group=True) # pylint: disable=wrong-import-position from DIRAC.Interfaces.API.Dirac import Dirac - if len(args) < 2: - Script.showHelp(exitCode=1) - if len(args) > 3: print('Only one LFN SE pair will be considered') dirac = Dirac() exitCode = 0 - lfn = args[0] - seName = args[1] - proto = False - if len(args) > 2: - proto = args[2] - try: with open(lfn, 'r') as f: lfns = f.read().splitlines() diff --git a/src/DIRAC/Interfaces/scripts/dirac_dms_lfn_metadata.py b/src/DIRAC/Interfaces/scripts/dirac_dms_lfn_metadata.py index 4d9ec9259a6..42b50c3056b 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_dms_lfn_metadata.py +++ b/src/DIRAC/Interfaces/scripts/dirac_dms_lfn_metadata.py @@ -6,12 +6,6 @@ """ Obtain replica metadata from file catalogue client. -Usage: - dirac-dms-lfn-metadata [options] ... LFN ... - -Arguments: - LFN: Logical File Name or file containing LFNs - Example: $ dirac-dms-lfn-metadata /formation/user/v/vhamar/test.txt {'Failed': {}, @@ -36,17 +30,14 @@ __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine(ignoreErrors=True) - lfns = Script.getPositionalArgs() - - if len(lfns) < 1: - Script.showHelp() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["LFN: Logical File Name or file containing LFNs"]) + _, lfns = Script.parseCommandLine(ignoreErrors=True) from DIRAC.Interfaces.API.Dirac import Dirac dirac = Dirac() diff --git a/src/DIRAC/Interfaces/scripts/dirac_dms_lfn_replicas.py b/src/DIRAC/Interfaces/scripts/dirac_dms_lfn_replicas.py index ab361d0fb8e..a6d5cacce7e 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_dms_lfn_replicas.py +++ b/src/DIRAC/Interfaces/scripts/dirac_dms_lfn_replicas.py @@ -6,12 +6,6 @@ """ Obtain replica information from file catalogue client. -Usage: - dirac-admin-lfn-replicas [options] ... LFN ... - -Arguments: - LFN: Logical File Name or file containing LFNs - Example: $ dirac-dms-lfn-replicas /formation/user/v/vhamar/Test.txt {'Failed': {}, @@ -25,24 +19,21 @@ __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): Script.registerSwitch('a', "All", " Also show inactive replicas") - Script.parseCommandLine(ignoreErrors=True) - lfns = Script.getPositionalArgs() - switches = Script.getUnprocessedSwitches() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["LFN: Logical File Name or file containing LFNs"]) + switches, lfns = Script.parseCommandLine(ignoreErrors=True) active = True for switch in switches: opt = switch[0].lower() if opt in ("a", "all"): active = False - if len(lfns) < 1: - Script.showHelp(exitCode=1) from DIRAC.Interfaces.API.Dirac import Dirac dirac = Dirac() diff --git a/src/DIRAC/Interfaces/scripts/dirac_dms_pfn_accessURL.py b/src/DIRAC/Interfaces/scripts/dirac_dms_pfn_accessURL.py index 012a12caa24..22674b3c5f7 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_dms_pfn_accessURL.py +++ b/src/DIRAC/Interfaces/scripts/dirac_dms_pfn_accessURL.py @@ -5,13 +5,6 @@ ######################################################################## """ Retrieve an access URL for a PFN given a valid DIRAC SE - -Usage: - dirac-dms-pfn-accessURL [options] ... PFN SE - -Arguments: - PFN: Physical File Name or file containing PFNs (mandatory) - SE: Valid DIRAC SE (mandatory) """ from __future__ import print_function from __future__ import absolute_import @@ -20,17 +13,15 @@ __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() - - if len(args) < 2: - Script.showHelp(exitCode=1) + # Registering arguments will automatically add their description to the help menu + Script.registerArgument("PFN: Physical File Name or file containing PFNs") + Script.registerArgument("SE: Valid DIRAC SE") + _, args = Script.parseCommandLine(ignoreErrors=True) if len(args) > 2: print('Only one PFN SE pair will be considered') diff --git a/src/DIRAC/Interfaces/scripts/dirac_dms_pfn_metadata.py b/src/DIRAC/Interfaces/scripts/dirac_dms_pfn_metadata.py index 6a66a7cdb89..5d2ca4bc4b7 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_dms_pfn_metadata.py +++ b/src/DIRAC/Interfaces/scripts/dirac_dms_pfn_metadata.py @@ -5,13 +5,6 @@ ######################################################################## """ Retrieve metadata for a PFN given a valid DIRAC SE - -Usage: - dirac-dms-pfn-metadata [options] ... PFN SE - -Arguments: - PFN: Physical File Name or file containing PFNs (mandatory) - SE: Valid DIRAC SE (mandatory) """ from __future__ import print_function from __future__ import absolute_import @@ -20,17 +13,15 @@ __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() - - if len(args) < 2: - Script.showHelp(exitCode=1) + # Registering arguments will automatically add their description to the help menu + Script.registerArgument("PFN: Physical File Name or file containing PFNs") + Script.registerArgument("SE: Valid DIRAC SE") + _, args = Script.parseCommandLine(ignoreErrors=True) if len(args) > 2: print('Only one PFN SE pair will be considered') diff --git a/src/DIRAC/Interfaces/scripts/dirac_dms_replicate_lfn.py b/src/DIRAC/Interfaces/scripts/dirac_dms_replicate_lfn.py index 97e99e0907e..1d946eb5595 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_dms_replicate_lfn.py +++ b/src/DIRAC/Interfaces/scripts/dirac_dms_replicate_lfn.py @@ -6,15 +6,6 @@ """ Replicate an existing LFN to another Storage Element -Usage: - dirac-dms-replicate-lfn [options] ... LFN Dest [Source [Cache]] - -Arguments: - LFN: Logical File Name or file containing LFNs (mandatory) - Dest: Valid DIRAC SE (mandatory) - Source: Valid DIRAC SE - Cache: Local directory to be used as cache - Example: $ dirac-dms-replicate-lfn /formation/user/v/vhamar/Test.txt DIRAC-USER {'Failed': {}, @@ -28,26 +19,22 @@ __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() - - if len(args) < 2 or len(args) > 4: + # Registering arguments will automatically add their description to the help menu + Script.registerArgument("LFN: Logical File Name or file containing LFNs") + Script.registerArgument("Dest: Valid DIRAC SE") + Script.registerArgument("Source: Valid DIRAC SE", default='', mandatory=False) + Script.registerArgument("Cache: Local directory to be used as cache", default='', mandatory=False) + _, args = Script.parseCommandLine(ignoreErrors=True) + + if len(args) > 4: Script.showHelp(exitCode=1) - lfn = args[0] - seName = args[1] - sourceSE = '' - localCache = '' - if len(args) > 2: - sourceSE = args[2] - if len(args) == 4: - localCache = args[3] + lfn, seName, sourceSE, localCache = Script.getPositionalArgs(group=True) from DIRAC.Interfaces.API.Dirac import Dirac dirac = Dirac() diff --git a/src/DIRAC/Interfaces/scripts/dirac_framework_ping_service.py b/src/DIRAC/Interfaces/scripts/dirac_framework_ping_service.py index dfdf54f5749..aa8062f1564 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_framework_ping_service.py +++ b/src/DIRAC/Interfaces/scripts/dirac_framework_ping_service.py @@ -6,14 +6,6 @@ """ Ping the given DIRAC Service -Usage: - dirac-framework-ping-service [options] ... System Service|System/Agent - -Arguments: - System: Name of the DIRAC system (ie: WorkloadManagement) - Service: Name of the DIRAC service (ie: Matcher) - url: URL of the service to ping (instead of System and Service) - Example: $ dirac-framework-ping-service WorkloadManagement PilotManager {'OK': True, @@ -45,14 +37,17 @@ __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(("URL: URL of the service to ping (instead of System and Service)", + "System/Service: Full component name (ie: WorkloadManagement/Matcher)", + "System: Name of the DIRAC system (ie: WorkloadManagement)")) + Script.registerArgument(" Service: Name of the DIRAC service (ie: Matcher)", mandatory=False) + _, args = Script.parseCommandLine(ignoreErrors=True) system = None service = None url = None diff --git a/src/DIRAC/Interfaces/scripts/dirac_framework_self_ping.py b/src/DIRAC/Interfaces/scripts/dirac_framework_self_ping.py index ea0ee9c8603..642ef4f29ea 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_framework_self_ping.py +++ b/src/DIRAC/Interfaces/scripts/dirac_framework_self_ping.py @@ -15,10 +15,10 @@ import sys import os import time -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): with open(os.devnull, 'w') as redirectStdout, open(os.devnull, 'w') as redirectStderr: from DIRAC import gLogger diff --git a/src/DIRAC/Interfaces/scripts/dirac_repo_monitor.py b/src/DIRAC/Interfaces/scripts/dirac_repo_monitor.py index 67d26767bfb..5c0a1cf9fa5 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_repo_monitor.py +++ b/src/DIRAC/Interfaces/scripts/dirac_repo_monitor.py @@ -1,12 +1,6 @@ #!/usr/bin/env python """ Monitor the jobs present in the repository - -Usage: - dirac-repo-monitor [options] ... RepoDir - -Arguments: - RepoDir: Location of Job Repository """ from __future__ import print_function from __future__ import absolute_import @@ -15,17 +9,14 @@ __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine(ignoreErrors=False) - args = Script.getPositionalArgs() - - if len(args) != 1: - Script.showHelp() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument("RepoDir: Location of Job Repository") + _, args = Script.parseCommandLine(ignoreErrors=False) repoLocation = args[0] from DIRAC.Interfaces.API.Dirac import Dirac diff --git a/src/DIRAC/Interfaces/scripts/dirac_utils_file_adler.py b/src/DIRAC/Interfaces/scripts/dirac_utils_file_adler.py index c89e80dec2e..cd247984a0b 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_utils_file_adler.py +++ b/src/DIRAC/Interfaces/scripts/dirac_utils_file_adler.py @@ -5,12 +5,6 @@ """ Calculate alder32 of the supplied file -Usage: - dirac-utils-file-adler [options] ... File ... - -Arguments: - File: File Name - Example: $ dirac-utils-file-adler Example.tgz Example.tgz 88b4ca8b @@ -21,16 +15,14 @@ __RCSID__ = "$Id$" -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine(ignoreErrors=False) - files = Script.getPositionalArgs() - if len(files) == 0: - Script.showHelp() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["File: File Name"]) + _, files = Script.parseCommandLine(ignoreErrors=False) exitCode = 0 diff --git a/src/DIRAC/Interfaces/scripts/dirac_utils_file_md5.py b/src/DIRAC/Interfaces/scripts/dirac_utils_file_md5.py index 36785a6061b..a1db76c6392 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_utils_file_md5.py +++ b/src/DIRAC/Interfaces/scripts/dirac_utils_file_md5.py @@ -6,12 +6,6 @@ """ Calculate md5 of the supplied file -Usage: - dirac-utils-file-md5 [options] ... File ... - -Arguments: - File: File Name - Example: $ dirac-utils-file-md5 Example.tgz Example.tgz 5C1A1102-EAFD-2CBA-25BD-0EFCCFC3623E @@ -22,16 +16,14 @@ __RCSID__ = "$Id$" -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine(ignoreErrors=False) - files = Script.getPositionalArgs() - if len(files) == 0: - Script.showHelp() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["File: File Name"]) + _, files = Script.parseCommandLine(ignoreErrors=False) exitCode = 0 diff --git a/src/DIRAC/Interfaces/scripts/dirac_wms_get_normalized_queue_length.py b/src/DIRAC/Interfaces/scripts/dirac_wms_get_normalized_queue_length.py index bbca4d98016..3565a9509bc 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_wms_get_normalized_queue_length.py +++ b/src/DIRAC/Interfaces/scripts/dirac_wms_get_normalized_queue_length.py @@ -9,12 +9,6 @@ This script was used by the dirac-pilot script to set the CPUTime limit for the matching but now this is no more the case. -Usage: - dirac-wms-get-normalized-queue-length [options] ... Queue ... - -Arguments: - Queue: GlueCEUniqueID of the Queue (ie, juk.nikhef.nl:8443/cream-pbs-lhcb) - Example: $ dirac-wms-get-normalized-queue-length cclcgceli03.in2p3.fr:2119/jobmanager-bqs-long cclcgceli03.in2p3.fr:2119/jobmanager-bqs-long 857400.0 @@ -26,18 +20,15 @@ __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script from DIRAC.WorkloadManagementSystem.Client.CPUNormalization import queueNormalizedCPU -from DIRAC.Core.Utilities.DIRACScript import DIRACScript -@DIRACScript() +@Script() def main(): - Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() - - if len(args) < 1: - Script.showHelp() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["Queue: GlueCEUniqueID of the Queue (ie, juk.nikhef.nl:8443/cream-pbs-lhcb)"]) + _, args = Script.parseCommandLine(ignoreErrors=True) exitCode = 0 diff --git a/src/DIRAC/Interfaces/scripts/dirac_wms_get_queue_normalization.py b/src/DIRAC/Interfaces/scripts/dirac_wms_get_queue_normalization.py index 1fb3654c447..c8d1d1de339 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_wms_get_queue_normalization.py +++ b/src/DIRAC/Interfaces/scripts/dirac_wms_get_queue_normalization.py @@ -6,12 +6,6 @@ """ Report Normalization Factor applied by Site to the given Queue -Usage: - dirac-wms-get-queue-normalization [options] ... Queue ... - -Arguments: - Queue: GlueCEUniqueID of the Queue (ie, juk.nikhef.nl:8443/cream-pbs-lhcb) - Example: $ dirac-wms-get-queue-normalization cclcgceli03.in2p3.fr:2119/jobmanager-bqs-long cclcgceli03.in2p3.fr:2119/jobmanager-bqs-long 2500.0 @@ -22,17 +16,14 @@ __RCSID__ = "$Id$" -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() - - if len(args) < 1: - Script.showHelp() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["Queue: GlueCEUniqueID of the Queue (ie, juk.nikhef.nl:8443/cream-pbs-lhcb)"]) + _, args = Script.parseCommandLine(ignoreErrors=True) exitCode = 0 diff --git a/src/DIRAC/Interfaces/scripts/dirac_wms_job_attributes.py b/src/DIRAC/Interfaces/scripts/dirac_wms_job_attributes.py index 6f7f5247c98..76579d545bf 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_wms_job_attributes.py +++ b/src/DIRAC/Interfaces/scripts/dirac_wms_job_attributes.py @@ -6,12 +6,6 @@ """ Retrieve attributes associated with the given DIRAC job -Usage: - dirac-wms-job-attributes [options] ... JobID ... - -Arguments: - JobID: DIRAC Job ID - Example: $ dirac-wms-job-attributes 1 {'AccountedFlag': 'False', @@ -56,17 +50,14 @@ __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() - - if len(args) < 1: - Script.showHelp() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["JobID: DIRAC Job ID"]) + _, args = Script.parseCommandLine(ignoreErrors=True) from DIRAC.Interfaces.API.Dirac import Dirac, parseArguments dirac = Dirac() diff --git a/src/DIRAC/Interfaces/scripts/dirac_wms_job_delete.py b/src/DIRAC/Interfaces/scripts/dirac_wms_job_delete.py index eaecd5fc11d..bc94de2f17e 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_wms_job_delete.py +++ b/src/DIRAC/Interfaces/scripts/dirac_wms_job_delete.py @@ -6,12 +6,6 @@ """ Delete DIRAC job from WMS, if running it will be killed -Usage: - dirac-wms-job-delete [options] ... JobID ... - -Arguments: - JobID: DIRAC Job ID - Example: $ dirac-wms-job-delete 12 Deleted job 12 @@ -24,17 +18,16 @@ import os.path -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): Script.registerSwitch("f:", "File=", "Get output for jobs with IDs from the file") Script.registerSwitch("g:", "JobGroup=", "Get output for jobs in the given group") - - Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["JobID: DIRAC Job ID"], mandatory=False) + sws, args = Script.parseCommandLine(ignoreErrors=True) import DIRAC from DIRAC.Interfaces.API.Dirac import Dirac, parseArguments @@ -42,7 +35,7 @@ def main(): dirac = Dirac() jobs = [] - for sw, value in Script.getUnprocessedSwitches(): + for sw, value in sws: if sw.lower() in ('f', 'file'): if os.path.exists(value): jFile = open(value) diff --git a/src/DIRAC/Interfaces/scripts/dirac_wms_job_get_input.py b/src/DIRAC/Interfaces/scripts/dirac_wms_job_get_input.py index a397dd18f0e..e8f0ebcfbfd 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_wms_job_get_input.py +++ b/src/DIRAC/Interfaces/scripts/dirac_wms_job_get_input.py @@ -6,12 +6,6 @@ """ Retrieve input sandbox for DIRAC Job -Usage: - dirac-wms-job-get-input [options] ... JobID ... - -Arguments: - JobID: DIRAC Job ID - Example: $ dirac-wms-job-get-input 13 Job input sandbox retrieved in InputSandbox13/ @@ -25,18 +19,15 @@ import os import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): Script.registerSwitch("D:", "Dir=", "Store the output in this directory") - Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() - - if len(args) < 1: - Script.showHelp(exitCode=1) + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["JobID: DIRAC Job ID"]) + sws, args = Script.parseCommandLine(ignoreErrors=True) from DIRAC.Interfaces.API.Dirac import Dirac, parseArguments dirac = Dirac() @@ -44,7 +35,7 @@ def main(): errorList = [] outputDir = None - for sw, v in Script.getUnprocessedSwitches(): + for sw, v in sws: if sw in ('D', 'Dir'): outputDir = v diff --git a/src/DIRAC/Interfaces/scripts/dirac_wms_job_get_jdl.py b/src/DIRAC/Interfaces/scripts/dirac_wms_job_get_jdl.py index 2eaf412d95f..77ee1ea7b4c 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_wms_job_get_jdl.py +++ b/src/DIRAC/Interfaces/scripts/dirac_wms_job_get_jdl.py @@ -39,28 +39,21 @@ __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): original = False Script.registerSwitch('O', 'Original', 'Gets the original JDL') - Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["JobID: DIRAC Job ID"]) + sws, args = Script.parseCommandLine(ignoreErrors=True) - for switch in Script.getUnprocessedSwitches(): + for switch in sws: if switch[0] == 'Original' or switch[0] == 'O': original = True - for switch in Script.getUnprocessedSwitches(): - if switch[0] == 'Original': - original = True - - if len(args) < 1: - Script.showHelp(exitCode=1) - from DIRAC.Interfaces.API.Dirac import Dirac, parseArguments dirac = Dirac() exitCode = 0 diff --git a/src/DIRAC/Interfaces/scripts/dirac_wms_job_get_output.py b/src/DIRAC/Interfaces/scripts/dirac_wms_job_get_output.py index eb089ab682f..e82dfc045be 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_wms_job_get_output.py +++ b/src/DIRAC/Interfaces/scripts/dirac_wms_job_get_output.py @@ -6,12 +6,6 @@ """ Retrieve output sandbox for a DIRAC job -Usage: - dirac-wms-job-get-output [options] ... JobID ... - -Arguments: - JobID: DIRAC Job ID or a name of the file with JobID per line - Example: $ dirac-wms-job-get-output 1 Job output sandbox retrieved in 1/ @@ -26,18 +20,17 @@ import shutil import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): Script.registerSwitch("D:", "Dir=", "Store the output in this directory") Script.registerSwitch("f:", "File=", "Get output for jobs with IDs from the file") Script.registerSwitch("g:", "JobGroup=", "Get output for jobs in the given group") - - Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["JobID: DIRAC Job ID or a name of the file with JobID per line"], mandatory=False) + sws, args = Script.parseCommandLine(ignoreErrors=True) from DIRAC.Interfaces.API.Dirac import Dirac, parseArguments from DIRAC.Core.Utilities.Time import toString, date, day @@ -50,7 +43,7 @@ def main(): outputDir = None group = None jobs = [] - for sw, value in Script.getUnprocessedSwitches(): + for sw, value in sws: if sw in ('D', 'Dir'): outputDir = value elif sw.lower() in ('f', 'file'): diff --git a/src/DIRAC/Interfaces/scripts/dirac_wms_job_get_output_data.py b/src/DIRAC/Interfaces/scripts/dirac_wms_job_get_output_data.py index 3535feae921..00de8dee3e6 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_wms_job_get_output_data.py +++ b/src/DIRAC/Interfaces/scripts/dirac_wms_job_get_output_data.py @@ -5,12 +5,6 @@ ######################################################################## """ Retrieve the output data files of a DIRAC job - -Usage: - dirac-wms-job-get-output-data [options] ... JobID ... - -Arguments: - JobID: DIRAC Job ID """ from __future__ import print_function from __future__ import absolute_import @@ -19,18 +13,15 @@ __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): Script.registerSwitch("D:", "Dir=", "Store the output in this directory") - Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() - - if len(args) < 1: - Script.showHelp(exitCode=1) + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["JobID: DIRAC Job ID"]) + sws, args = Script.parseCommandLine(ignoreErrors=True) from DIRAC.Interfaces.API.Dirac import Dirac, parseArguments dirac = Dirac() @@ -38,7 +29,7 @@ def main(): errorList = [] outputDir = '' - for sw, v in Script.getUnprocessedSwitches(): + for sw, v in sws: if sw in ('D', 'Dir'): outputDir = v diff --git a/src/DIRAC/Interfaces/scripts/dirac_wms_job_kill.py b/src/DIRAC/Interfaces/scripts/dirac_wms_job_kill.py index e18bbf15911..cc7707a95ec 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_wms_job_kill.py +++ b/src/DIRAC/Interfaces/scripts/dirac_wms_job_kill.py @@ -6,12 +6,6 @@ """ Issue a kill signal to a running DIRAC job -Usage: - dirac-wms-job-kill [options] ... JobID ... - -Arguments: - JobID: DIRAC Job ID - Example: $ dirac-wms-job-kill 1918 Killed job 1918 @@ -35,17 +29,14 @@ __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() - - if len(args) < 1: - Script.showHelp(exitCode=1) + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["JobID: DIRAC Job ID"]) + _, args = Script.parseCommandLine(ignoreErrors=True) from DIRAC.Interfaces.API.Dirac import Dirac, parseArguments diff --git a/src/DIRAC/Interfaces/scripts/dirac_wms_job_logging_info.py b/src/DIRAC/Interfaces/scripts/dirac_wms_job_logging_info.py index 9b3d40647ac..5a6691a87b3 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_wms_job_logging_info.py +++ b/src/DIRAC/Interfaces/scripts/dirac_wms_job_logging_info.py @@ -6,12 +6,6 @@ """ Retrieve history of transitions for a DIRAC job -Usage: - dirac-wms-job-logging-info [options] ... JobID ... - -Arguments: - JobID: DIRAC Job ID - Example: $ dirac-wms-job-logging-info 1 Status MinorStatus ApplicationStatus DateTime @@ -37,17 +31,14 @@ __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() - - if len(args) < 1: - Script.showHelp(exitCode=1) + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["JobID: DIRAC Job ID"]) + _, args = Script.parseCommandLine(ignoreErrors=True) from DIRAC.Interfaces.API.Dirac import Dirac, parseArguments dirac = Dirac() diff --git a/src/DIRAC/Interfaces/scripts/dirac_wms_job_parameters.py b/src/DIRAC/Interfaces/scripts/dirac_wms_job_parameters.py index 79c81d3369c..8d63d41b2fb 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_wms_job_parameters.py +++ b/src/DIRAC/Interfaces/scripts/dirac_wms_job_parameters.py @@ -6,12 +6,6 @@ """ Retrieve parameters associated to the given DIRAC job -Usage: - dirac-wms-job-parameters [options] ... JobID ... - -Arguments: - JobID: DIRAC Job ID - Example: $ dirac-wms-job-parameters 1 {'CPU(MHz)': '1596.479', @@ -47,17 +41,14 @@ import DIRAC from DIRAC import gLogger -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() - - if len(args) < 1: - Script.showHelp(exitCode=1) + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["JobID: DIRAC Job ID"]) + _, args = Script.parseCommandLine(ignoreErrors=True) from DIRAC.Interfaces.API.Dirac import Dirac, parseArguments dirac = Dirac() diff --git a/src/DIRAC/Interfaces/scripts/dirac_wms_job_peek.py b/src/DIRAC/Interfaces/scripts/dirac_wms_job_peek.py index 8844a8ba45b..007c9473cc2 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_wms_job_peek.py +++ b/src/DIRAC/Interfaces/scripts/dirac_wms_job_peek.py @@ -6,12 +6,6 @@ """ Peek StdOut of the given DIRAC job -Usage: - dirac-wms-job-delete [options] ... JobID ... - -Arguments: - JobID: DIRAC Job ID - Example: $ dirac-wms-job-peek 1 """ @@ -22,17 +16,14 @@ __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() - - if len(args) < 1: - Script.showHelp(exitCode=1) + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["JobID: DIRAC Job ID"]) + _, args = Script.parseCommandLine(ignoreErrors=True) from DIRAC.Interfaces.API.Dirac import Dirac, parseArguments dirac = Dirac() diff --git a/src/DIRAC/Interfaces/scripts/dirac_wms_job_reschedule.py b/src/DIRAC/Interfaces/scripts/dirac_wms_job_reschedule.py index a77b04ab16b..1c2bef7b562 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_wms_job_reschedule.py +++ b/src/DIRAC/Interfaces/scripts/dirac_wms_job_reschedule.py @@ -6,12 +6,6 @@ """ Reschedule the given DIRAC job -Usage: - dirac-wms-job-reschedule [options] ... JobID ... - -Arguments: - JobID: DIRAC Job ID - Example: $ dirac-wms-job-reschedule 1 Rescheduled job 1 @@ -23,17 +17,14 @@ __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() - - if len(args) < 1: - Script.showHelp(exitCode=1) + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["JobID: DIRAC Job ID"]) + _, args = Script.parseCommandLine(ignoreErrors=True) from DIRAC.Interfaces.API.Dirac import Dirac, parseArguments dirac = Dirac() diff --git a/src/DIRAC/Interfaces/scripts/dirac_wms_job_status.py b/src/DIRAC/Interfaces/scripts/dirac_wms_job_status.py index 043eb835802..ce89e5de3f2 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_wms_job_status.py +++ b/src/DIRAC/Interfaces/scripts/dirac_wms_job_status.py @@ -6,12 +6,6 @@ """ Retrieve status of the given DIRAC job -Usage: - dirac-wms-job-status [options] ... JobID ... - -Arguments: - JobID: DIRAC Job ID - Example: $ dirac-wms-job-status 2 JobID=2 Status=Done; MinorStatus=Execution Complete; Site=EELA.UTFSM.cl; @@ -23,17 +17,16 @@ __RCSID__ = "$Id$" import os -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): Script.registerSwitch("f:", "File=", "Get status for jobs with IDs from the file") Script.registerSwitch("g:", "JobGroup=", "Get status for jobs in the given group") - - Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["JobID: DIRAC Job ID"], mandatory=False) + sws, args = Script.parseCommandLine(ignoreErrors=True) from DIRAC import exit as DIRACExit from DIRAC.Core.Utilities.Time import toString, date, day @@ -43,7 +36,7 @@ def main(): exitCode = 0 jobs = [] - for key, value in Script.getUnprocessedSwitches(): + for key, value in sws: if key.lower() in ('f', 'file'): if os.path.exists(value): jFile = open(value) diff --git a/src/DIRAC/Interfaces/scripts/dirac_wms_job_submit.py b/src/DIRAC/Interfaces/scripts/dirac_wms_job_submit.py index 631bf600086..aa5026e08cf 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_wms_job_submit.py +++ b/src/DIRAC/Interfaces/scripts/dirac_wms_job_submit.py @@ -6,12 +6,6 @@ """ Submit jobs to DIRAC WMS -Usage: - dirac-wms-job-submit [options] ... JDL ... - -Arguments: - JDL: Path to JDL file - Example: $ dirac-wms-job-submit Simple.jdl JobID = 11 @@ -25,22 +19,19 @@ __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): Script.registerSwitch("f:", "File=", "Writes job ids to file ") Script.registerSwitch("r:", "UseJobRepo=", "Use the job repository") - Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() - - if len(args) < 1: - Script.showHelp() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["JDL: Path to JDL file"]) + sws, args = Script.parseCommandLine(ignoreErrors=True) from DIRAC.Interfaces.API.Dirac import Dirac - unprocessed_switches = Script.getUnprocessedSwitches() + unprocessed_switches = sws use_repo = False repo_name = "" for sw, value in unprocessed_switches: diff --git a/src/DIRAC/Interfaces/scripts/dirac_wms_jobs_select_output_search.py b/src/DIRAC/Interfaces/scripts/dirac_wms_jobs_select_output_search.py index 3cba594b9de..be59dcde520 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_wms_jobs_select_output_search.py +++ b/src/DIRAC/Interfaces/scripts/dirac_wms_jobs_select_output_search.py @@ -5,12 +5,6 @@ ######################################################################## """ Retrieve output sandbox for DIRAC Jobs for the given selection and search for a string in their std.out - -Usage: - dirac-wms-jobs-select-output-search [options] ... String ... - -Arguments: - String: string to search for """ from __future__ import print_function from __future__ import absolute_import @@ -22,11 +16,10 @@ from shutil import rmtree import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): Script.registerSwitch("", "Status=", "Primary status") Script.registerSwitch("", "MinorStatus=", "Secondary status") @@ -36,8 +29,9 @@ def main(): Script.registerSwitch("", "JobGroup=", "Select jobs for specified job group") Script.registerSwitch("", "Date=", "Date in YYYY-MM-DD format, if not specified default is today") Script.registerSwitch("", "File=", "File name,if not specified default is std.out ") - Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument("String: string to search for") + _, args = Script.parseCommandLine(ignoreErrors=True) # Default values status = None diff --git a/src/DIRAC/Interfaces/scripts/dirac_wms_select_jobs.py b/src/DIRAC/Interfaces/scripts/dirac_wms_select_jobs.py index 81174f533e0..d521166dfaa 100755 --- a/src/DIRAC/Interfaces/scripts/dirac_wms_select_jobs.py +++ b/src/DIRAC/Interfaces/scripts/dirac_wms_select_jobs.py @@ -5,12 +5,6 @@ ######################################################################## """ Select DIRAC jobs matching the given conditions - -Usage: - dirac-wms-job-status [options] ... JobID ... - -Arguments: - JobID: DIRAC Job ID """ from __future__ import absolute_import from __future__ import division @@ -20,11 +14,10 @@ import DIRAC from DIRAC import gLogger -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): maxJobs = 100 Script.registerSwitch("", "Status=", "Primary status") @@ -35,9 +28,7 @@ def main(): Script.registerSwitch("", "JobGroup=", "Select jobs for specified job group") Script.registerSwitch("", "Date=", "Date in YYYY-MM-DD format, if not specified default is today") Script.registerSwitch("", "Maximum=", "Maximum number of jobs shown (default %d, 0 means all)" % maxJobs) - Script.parseCommandLine(ignoreErrors=True) - - args = Script.getPositionalArgs() + switches, args = Script.parseCommandLine(ignoreErrors=True) # Default values status = None @@ -53,7 +44,7 @@ def main(): exitCode = 0 - for switch in Script.getUnprocessedSwitches(): + for switch in switches: if switch[0].lower() == "status": status = switch[1] elif switch[0].lower() == "minorstatus": diff --git a/src/DIRAC/ProductionSystem/scripts/dirac_prod_add_trans.py b/src/DIRAC/ProductionSystem/scripts/dirac_prod_add_trans.py index 8b02e2265b7..83105c33c21 100755 --- a/src/DIRAC/ProductionSystem/scripts/dirac_prod_add_trans.py +++ b/src/DIRAC/ProductionSystem/scripts/dirac_prod_add_trans.py @@ -2,14 +2,6 @@ """ Add an existing transformation to an existing production. Transformations already belonging to another production cannot be added. - -Usage: - dirac-prod-add-trans prodID transID [parentTransID] - -Arguments: - prodID: Production ID - transID: Transformation ID - parentTransID: Parent Transformation ID """ from __future__ import absolute_import from __future__ import division @@ -18,13 +10,16 @@ __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument("prodID: Production ID") + Script.registerArgument("transID: Transformation ID") + Script.registerArgument("parentTransID: Parent Transformation ID", default='', mandatory=False) + _, args = Script.parseCommandLine() from DIRAC.ProductionSystem.Client.ProductionClient import ProductionClient from DIRAC.TransformationSystem.Client.TransformationClient import TransformationClient @@ -33,17 +28,10 @@ def main(): transClient = TransformationClient() # get arguments - args = Script.getPositionalArgs() - if len(args) == 3: - parentTransID = args[2] - elif len(args) == 2: - parentTransID = '' - else: + prodID, transID, parentTransID = Script.getPositionalArgs(group=True) + if len(args) > 3: Script.showHelp(exitCode=1) - prodID = args[0] - transID = args[1] - res = transClient.getTransformation(transID) if not res['OK']: DIRAC.gLogger.error('Failed to get transformation %s: %s' % (transID, res['Message'])) diff --git a/src/DIRAC/ProductionSystem/scripts/dirac_prod_clean.py b/src/DIRAC/ProductionSystem/scripts/dirac_prod_clean.py index 4175185cfa1..8349c9d82ae 100755 --- a/src/DIRAC/ProductionSystem/scripts/dirac_prod_clean.py +++ b/src/DIRAC/ProductionSystem/scripts/dirac_prod_clean.py @@ -1,12 +1,6 @@ #!/usr/bin/env python """ Clean a given production - -Usage: - dirac-prod-clean prodID - -Arguments: - prodID: Production ID (mandatory) """ from __future__ import absolute_import from __future__ import division @@ -15,20 +9,17 @@ __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument("prodID: Production ID") + _, args = Script.parseCommandLine() from DIRAC.ProductionSystem.Client.ProductionClient import ProductionClient - args = Script.getPositionalArgs() - if len(args) < 1: - Script.showHelp(exitCode=1) - # get arguments prodID = args[0] diff --git a/src/DIRAC/ProductionSystem/scripts/dirac_prod_delete.py b/src/DIRAC/ProductionSystem/scripts/dirac_prod_delete.py index 621fbc5403d..fb72409eb2f 100755 --- a/src/DIRAC/ProductionSystem/scripts/dirac_prod_delete.py +++ b/src/DIRAC/ProductionSystem/scripts/dirac_prod_delete.py @@ -2,12 +2,6 @@ """ Delete a given production - -Usage: - dirac-prod-delete prodID - -Arguments: - prodID: Production ID (mandatory) """ from __future__ import absolute_import from __future__ import division @@ -16,20 +10,17 @@ __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument("prodID: Production ID") + _, args = Script.parseCommandLine() from DIRAC.ProductionSystem.Client.ProductionClient import ProductionClient - args = Script.getPositionalArgs() - if len(args) < 1: - Script.showHelp(exitCode=1) - # get arguments prodID = args[0] diff --git a/src/DIRAC/ProductionSystem/scripts/dirac_prod_get.py b/src/DIRAC/ProductionSystem/scripts/dirac_prod_get.py index ceea5db3424..7cf8972fc93 100755 --- a/src/DIRAC/ProductionSystem/scripts/dirac_prod_get.py +++ b/src/DIRAC/ProductionSystem/scripts/dirac_prod_get.py @@ -2,12 +2,6 @@ """ Get informations for a given production -Usage: - dirac-prod-get prodID - -Arguments: - prodID: Production ID (mandatory) - Example: $ dirac-prod-get 381 """ @@ -18,13 +12,14 @@ __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument("prodID: Production ID") + _, args = Script.parseCommandLine() from DIRAC.Core.Utilities.PrettyPrint import printTable from DIRAC.ProductionSystem.Client.ProductionClient import ProductionClient @@ -32,12 +27,8 @@ def main(): prodClient = ProductionClient() # get arguments - args = Script.getPositionalArgs() - if len(args) < 1: - Script.showHelp(exitCode=1) - else: - prodID = args[0] - res = prodClient.getProduction(prodID) + prodID = args[0] + res = prodClient.getProduction(prodID) fields = [ 'ProductionName', diff --git a/src/DIRAC/ProductionSystem/scripts/dirac_prod_get_all.py b/src/DIRAC/ProductionSystem/scripts/dirac_prod_get_all.py index 9655679bc7d..33cfe905261 100755 --- a/src/DIRAC/ProductionSystem/scripts/dirac_prod_get_all.py +++ b/src/DIRAC/ProductionSystem/scripts/dirac_prod_get_all.py @@ -1,9 +1,6 @@ #!/usr/bin/env python """ Get summary informations of all productions - -Usage: - dirac-prod-get-all """ from __future__ import absolute_import from __future__ import division @@ -12,12 +9,11 @@ __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script from DIRAC.Core.Utilities.PrettyPrint import printTable -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): Script.parseCommandLine() diff --git a/src/DIRAC/ProductionSystem/scripts/dirac_prod_get_description.py b/src/DIRAC/ProductionSystem/scripts/dirac_prod_get_description.py index 614058b51c7..6b9972a292b 100755 --- a/src/DIRAC/ProductionSystem/scripts/dirac_prod_get_description.py +++ b/src/DIRAC/ProductionSystem/scripts/dirac_prod_get_description.py @@ -2,41 +2,31 @@ """ Get the description of a given production -Usage: - dirac-prod-get-description prodID - -Arguments: - prodID: Production ID (mandatory) - Example: $ dirac-prod-get-description 381 """ - from __future__ import print_function from __future__ import absolute_import from __future__ import division __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument("prodID: Production ID") + _, args = Script.parseCommandLine() from DIRAC.ProductionSystem.Client.ProductionClient import ProductionClient prodClient = ProductionClient() # get arguments - args = Script.getPositionalArgs() - if len(args) < 1: - Script.showHelp(exitCode=1) - else: - prodID = args[0] - res = prodClient.getProduction(prodID) + prodID = args[0] + res = prodClient.getProduction(prodID) if res['OK']: prod = res['Value'] diff --git a/src/DIRAC/ProductionSystem/scripts/dirac_prod_get_trans.py b/src/DIRAC/ProductionSystem/scripts/dirac_prod_get_trans.py index 035865552c9..2ae9a6509c7 100755 --- a/src/DIRAC/ProductionSystem/scripts/dirac_prod_get_trans.py +++ b/src/DIRAC/ProductionSystem/scripts/dirac_prod_get_trans.py @@ -2,12 +2,6 @@ """ Get the transformations belonging to a given production -Usage: - dirac-prod-get-trans prodID - -Arguments: - prodID: Production ID (mandatory) - Example: $ dirac-prod-get-trans 381 """ @@ -18,22 +12,19 @@ __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script from DIRAC.Core.Utilities.PrettyPrint import printTable -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument("prodID: Production ID") + _, args = Script.parseCommandLine() from DIRAC.ProductionSystem.Client.ProductionClient import ProductionClient from DIRAC.TransformationSystem.Client.TransformationClient import TransformationClient - args = Script.getPositionalArgs() - if len(args) < 1: - Script.showHelp(exitCode=1) - # get arguments prodID = args[0] diff --git a/src/DIRAC/ProductionSystem/scripts/dirac_prod_start.py b/src/DIRAC/ProductionSystem/scripts/dirac_prod_start.py index a121ffa0570..b31481425ba 100755 --- a/src/DIRAC/ProductionSystem/scripts/dirac_prod_start.py +++ b/src/DIRAC/ProductionSystem/scripts/dirac_prod_start.py @@ -2,12 +2,6 @@ """ Start a given production -Usage: - dirac-prod-start prodID - -Arguments: - prodID: Production ID (mandatory) - Example: $ dirac-prod-start 381 """ @@ -18,20 +12,17 @@ __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument("prodID: Production ID") + _, args = Script.parseCommandLine() from DIRAC.ProductionSystem.Client.ProductionClient import ProductionClient - args = Script.getPositionalArgs() - if len(args) < 1: - Script.showHelp(exitCode=1) - # get arguments prodID = args[0] diff --git a/src/DIRAC/ProductionSystem/scripts/dirac_prod_stop.py b/src/DIRAC/ProductionSystem/scripts/dirac_prod_stop.py index 78c5bfb3158..48c19124dd8 100755 --- a/src/DIRAC/ProductionSystem/scripts/dirac_prod_stop.py +++ b/src/DIRAC/ProductionSystem/scripts/dirac_prod_stop.py @@ -2,12 +2,6 @@ """ Stop a given production -Usage: - dirac-prod-stop prodID - -Arguments: - prodID: Production ID (mandatory) - Example: $ dirac-prod-stop 381 """ @@ -18,20 +12,17 @@ __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument("prodID: Production ID") + _, args = Script.parseCommandLine() from DIRAC.ProductionSystem.Client.ProductionClient import ProductionClient - args = Script.getPositionalArgs() - if len(args) < 1: - Script.showHelp(exitCode=1) - # get arguments prodID = args[0] diff --git a/src/DIRAC/RequestManagementSystem/scripts/dirac_rms_list_req_cache.py b/src/DIRAC/RequestManagementSystem/scripts/dirac_rms_list_req_cache.py index a5a6e79c234..e0d795a8bb5 100755 --- a/src/DIRAC/RequestManagementSystem/scripts/dirac_rms_list_req_cache.py +++ b/src/DIRAC/RequestManagementSystem/scripts/dirac_rms_list_req_cache.py @@ -1,9 +1,6 @@ #!/bin/env python """ List the number of requests in the caches of all the ReqProxyies - -Usage: - dirac-rms-list-req-cache [options] """ from __future__ import absolute_import from __future__ import division @@ -12,15 +9,13 @@ __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): Script.registerSwitch('', 'Full', ' Print full list of requests') - from DIRAC.Core.Base.Script import parseCommandLine - parseCommandLine() + Script.parseCommandLine() from DIRAC.RequestManagementSystem.Client.ReqClient import ReqClient fullPrint = False diff --git a/src/DIRAC/RequestManagementSystem/scripts/dirac_rms_reqdb_summary.py b/src/DIRAC/RequestManagementSystem/scripts/dirac_rms_reqdb_summary.py index 4d5d021db7f..3459e27144e 100755 --- a/src/DIRAC/RequestManagementSystem/scripts/dirac_rms_reqdb_summary.py +++ b/src/DIRAC/RequestManagementSystem/scripts/dirac_rms_reqdb_summary.py @@ -1,9 +1,6 @@ #!/bin/env python """ Show ReqDB summary - -Usage: - dirac-rms-reqdb-summary [options] """ from __future__ import absolute_import from __future__ import division @@ -11,14 +8,12 @@ __RCSID__ = "$Id$" -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - from DIRAC.Core.Base.Script import parseCommandLine - parseCommandLine() + Script.parseCommandLine() import DIRAC diff --git a/src/DIRAC/RequestManagementSystem/scripts/dirac_rms_request.py b/src/DIRAC/RequestManagementSystem/scripts/dirac_rms_request.py index 8dcda50ef0d..1e034cf0620 100755 --- a/src/DIRAC/RequestManagementSystem/scripts/dirac_rms_request.py +++ b/src/DIRAC/RequestManagementSystem/scripts/dirac_rms_request.py @@ -1,13 +1,6 @@ #!/bin/env python """ Show request given its ID, a jobID or a transformation and a task - -Usage: - dirac-rms-request [options] [request[,request1,...]| - -Arguments: - request: a request ID or a unique request name - : a file containing a list of requests (Comma-separated on each line) """ from __future__ import absolute_import from __future__ import division @@ -17,7 +10,7 @@ import datetime import os -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script def convertDate(date): @@ -35,9 +28,8 @@ def convertDate(date): return value -@DIRACScript() +@Script() def main(): - from DIRAC.Core.Base import Script Script.registerSwitch('', 'Job=', ' JobID[,jobID2,...]') Script.registerSwitch('', 'Transformation=', ' transformation ID') Script.registerSwitch('', 'Tasks=', ' Associated to --Transformation, list of taskIDs') @@ -56,8 +48,11 @@ def main(): Script.registerSwitch('', 'Cancel', ' Cancel the request') Script.registerSwitch('', 'ListJobs', ' List the corresponding jobs') Script.registerSwitch('', 'TargetSE=', ' Select request only if that SE is in the targetSEs') - from DIRAC.Core.Base.Script import parseCommandLine - parseCommandLine() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(("file: a file containing a list of requests (Comma-separated on each line)", + "request: a request ID or a unique request name"), mandatory=False) + Script.registerArgument(["request: a request ID or a unique request name"], mandatory=False) + Script.parseCommandLine() import DIRAC from DIRAC import gLogger diff --git a/src/DIRAC/ResourceStatusSystem/scripts/dirac_rss_list_status.py b/src/DIRAC/ResourceStatusSystem/scripts/dirac_rss_list_status.py index 0dad2aaee1f..fd72ae3f96f 100755 --- a/src/DIRAC/ResourceStatusSystem/scripts/dirac_rss_list_status.py +++ b/src/DIRAC/ResourceStatusSystem/scripts/dirac_rss_list_status.py @@ -2,21 +2,13 @@ """ Script that dumps the DB information for the elements into the standard output. If returns information concerning the StatusType and Status attributes. - -Usage: - dirac-rss-list-status [options] - -Verbosity:: - - -o LogLevel=LEVEL NOTICE by default, levels available: INFO, DEBUG, VERBOSE.. """ from __future__ import absolute_import from __future__ import division from __future__ import print_function from DIRAC import gLogger, exit as DIRACExit, version -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script from DIRAC.ResourceStatusSystem.Client import ResourceStatusClient from DIRAC.Core.Utilities.PrettyPrint import printTable @@ -157,7 +149,7 @@ def run(): tabularPrint(elements) -@DIRACScript() +@Script() def main(): global subLogger global switchDict diff --git a/src/DIRAC/ResourceStatusSystem/scripts/dirac_rss_query_db.py b/src/DIRAC/ResourceStatusSystem/scripts/dirac_rss_query_db.py index 1c5b4e35563..0cf9d3b85f4 100755 --- a/src/DIRAC/ResourceStatusSystem/scripts/dirac_rss_query_db.py +++ b/src/DIRAC/ResourceStatusSystem/scripts/dirac_rss_query_db.py @@ -2,18 +2,6 @@ """ Script that dumps the DB information for the elements into the standard output. If returns information concerning the StatusType and Status attributes. - -Usage: - dirac-rss-query-db [option] - -Arguments: - Queries: [select|add|modify|delete] - Elements: [site|resource|component|node] - TableTypes: [status|log|history] - -Verbosity:: - - -o LogLevel=LEVEL NOTICE by default, levels available: INFO, DEBUG, VERBOSE.. """ from __future__ import absolute_import from __future__ import division @@ -23,8 +11,7 @@ import datetime from DIRAC import gLogger, exit as DIRACExit, S_OK, version -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script from DIRAC.ResourceStatusSystem.Client import ResourceStatusClient from DIRAC.ConfigurationSystem.Client.Helpers.Operations import Operations from DIRAC.Core.Security.ProxyInfo import getProxyInfo @@ -416,7 +403,7 @@ def run(args, switchDictSet): confirm(query, matches) -@DIRACScript() +@Script() def main(): global subLogger diff --git a/src/DIRAC/ResourceStatusSystem/scripts/dirac_rss_query_dtcache.py b/src/DIRAC/ResourceStatusSystem/scripts/dirac_rss_query_dtcache.py index 5660a7f6f47..d50eae75749 100755 --- a/src/DIRAC/ResourceStatusSystem/scripts/dirac_rss_query_dtcache.py +++ b/src/DIRAC/ResourceStatusSystem/scripts/dirac_rss_query_dtcache.py @@ -1,17 +1,6 @@ #!/usr/bin/env python """ Select/Add/Delete a new DownTime entry for a given Site or Service. - -Usage: - dirac-rss-query-dtcache [option] - -Queries:: - - [select|add|delete] - -Verbosity:: - - -o LogLevel=LEVEL NOTICE by default, levels available: INFO, DEBUG, VERBOSE.. """ from __future__ import absolute_import from __future__ import division @@ -22,8 +11,7 @@ import datetime from DIRAC import gLogger, exit as DIRACExit, version -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script from DIRAC.Core.Utilities import Time from DIRAC.Core.Utilities.PrettyPrint import printTable from DIRAC.ResourceStatusSystem.Utilities import Utils @@ -340,7 +328,7 @@ def run(args, switchDict): error(result['Message']) -@DIRACScript() +@Script() def main(): global subLogger global ResourceManagementClient diff --git a/src/DIRAC/ResourceStatusSystem/scripts/dirac_rss_set_status.py b/src/DIRAC/ResourceStatusSystem/scripts/dirac_rss_set_status.py index 764003ad692..0f128ce67c0 100755 --- a/src/DIRAC/ResourceStatusSystem/scripts/dirac_rss_set_status.py +++ b/src/DIRAC/ResourceStatusSystem/scripts/dirac_rss_set_status.py @@ -13,8 +13,7 @@ from datetime import datetime, timedelta from DIRAC import gLogger, exit as DIRACExit, S_OK, version -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script from DIRAC.Core.Security.ProxyInfo import getProxyInfo from DIRAC.ResourceStatusSystem.Client import ResourceStatusClient from DIRAC.ResourceStatusSystem.PolicySystem import StateMachine @@ -241,7 +240,7 @@ def run(switchDict): DIRACExit(1) -@DIRACScript() +@Script() def main(): global subLogger global registerUsageMessage diff --git a/src/DIRAC/ResourceStatusSystem/scripts/dirac_rss_set_token.py b/src/DIRAC/ResourceStatusSystem/scripts/dirac_rss_set_token.py index 8d02b92a6b1..c73db886b8d 100755 --- a/src/DIRAC/ResourceStatusSystem/scripts/dirac_rss_set_token.py +++ b/src/DIRAC/ResourceStatusSystem/scripts/dirac_rss_set_token.py @@ -6,9 +6,6 @@ If the releaseToken switch is used, no matter what was the previous token, it will be set to rs_svc (RSS owns it). If not set, the token will be set to whatever username is defined on the proxy loaded while issuing this command. In the second case, the token lasts one day. - -Usage: - dirac-rss-token --element=[Site|Resource] --name=[name] --reason=[some reason] """ from __future__ import absolute_import from __future__ import division @@ -20,8 +17,7 @@ # DIRAC from DIRAC import gLogger, exit as DIRACExit, S_OK, version -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script from DIRAC.Core.Security.ProxyInfo import getProxyInfo from DIRAC.ResourceStatusSystem.Client.ResourceStatusClient import ResourceStatusClient @@ -179,7 +175,7 @@ def setToken(user): return S_OK() -@DIRACScript() +@Script() def main(): """ Main function of the script. Gets the username from the proxy loaded and sets diff --git a/src/DIRAC/ResourceStatusSystem/scripts/dirac_rss_sync.py b/src/DIRAC/ResourceStatusSystem/scripts/dirac_rss_sync.py index 46d63bcbb40..3fdfe998611 100755 --- a/src/DIRAC/ResourceStatusSystem/scripts/dirac_rss_sync.py +++ b/src/DIRAC/ResourceStatusSystem/scripts/dirac_rss_sync.py @@ -5,13 +5,6 @@ reason to `Synchronized`. However, it can copy over the status on the CS to the RSS. Important: If the StatusType is not defined on the CS, it will set it to Banned ! - -Usage: - dirac-rss-sync [options] - -Verbosity:: - - -o LogLevel=LEVEL NOTICE by default, levels available: INFO, DEBUG, VERBOSE.. """ from __future__ import absolute_import from __future__ import division @@ -20,8 +13,7 @@ __RCSID__ = '$Id$' from DIRAC import version, gLogger, exit as DIRACExit, S_OK -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script subLogger = None switchDict = {} @@ -251,7 +243,7 @@ def run(): DIRACExit(1) -@DIRACScript() +@Script() def main(): global subLogger global switchDict diff --git a/src/DIRAC/Resources/Catalog/FCConditionParser.py b/src/DIRAC/Resources/Catalog/FCConditionParser.py index 57e915256c5..00a6e1d9d04 100644 --- a/src/DIRAC/Resources/Catalog/FCConditionParser.py +++ b/src/DIRAC/Resources/Catalog/FCConditionParser.py @@ -15,33 +15,31 @@ class FCConditionParser(object): - """ - This objects allows to evaluate conditions on whether or not - a given operation should be evaluated on a given catalog - for a given lfn (be glad so many things are given to you !). - - The conditions are expressed as boolean logic, where the basic bloc has - the form "pluginName=whateverThatWillBePassedToThePlugin". - The basic blocs will be evaluated by the respective plugins, and the result can - be combined using the standard boolean operators: + """ This objects allows to evaluate conditions on whether or not + a given operation should be evaluated on a given catalog + for a given lfn (be glad so many things are given to you !). - * ! for not - * & for and - * \| for or - * [ ] for prioritizing the operations + The conditions are expressed as boolean logic, where the basic bloc has + the form "pluginName=whateverThatWillBePassedToThePlugin". + The basic blocs will be evaluated by the respective plugins, and the result can + be combined using the standard boolean operators:: - All these characters, as well as the '=' symbol cannot be used in any expression to be - evaluated by a plugin. + * `!` for not + * `&` for and + * `|` for or + * `[ ]` for prioritizing the operations - The rule to evaluate can either be given at calling time, or can be retrieved - from the CS depending on the context (see doc of __call__ and __getConditionFromCS) + All these characters, as well as the '=' symbol cannot be used in any expression to be + evaluated by a plugin. + The rule to evaluate can either be given at calling time, or can be retrieved + from the CS depending on the context (see doc of __call__ and __getConditionFromCS) - Example of rules are: - * Filename=startswith('/lhcb') & Proxy=voms.has(/lhcb/Role->production) - * [Filename=startswith('/lhcb') & !Filename=find('/user/')] | Proxy=group.in(lhcb_mc, lhcb_data) + Example of rules are:: + * Filename=startswith('/lhcb') & Proxy=voms.has(/lhcb/Role->production) + * [Filename=startswith('/lhcb') & !Filename=find('/user/')] | Proxy=group.in(lhcb_mc, lhcb_data) """ # Some characters are reserved for the grammar @@ -73,7 +71,7 @@ def __init__(self, token): it is a list with only one element which itself is a list [ [ Arg1, Operator, Arg2] ] The arguments themselves can be of any type, but they need to - provide an "eval" method that takes \*\*kwargs as input, + provide an "eval" method that takes `kwargs` as input, and return a boolean """ @@ -90,7 +88,7 @@ def eval(self, **kwargs): """ Perform the evaluation of the boolean logic by applying the operator between the two arguments - :param \*\*kwargs: whatever information is given to plugin (typically lfn) + :param kwargs: whatever information is given to plugin (typically lfn) """ return self.evalop(arg.eval(**kwargs) for arg in self.args) @@ -118,7 +116,7 @@ def __init__(self, t): it is a list with only one element which itself is a list [ [ !, Arg1] ] The argument itself can be of any type, but it needs to - provide an "eval" method that takes \*\*kwargs as input, + provide an "eval" method that takes `kwargs` as input, and return a boolean """ @@ -129,7 +127,7 @@ def eval(self, **kwargs): """ Perform the evaluation of the boolean logic by returning the negation of the evaluation of the argument - :param \*\*kwargs: whatever information is given to plugin (typically lfn) + :param kwargs: whatever information is given to plugin (typically lfn) """ return not self.arg.eval(**kwargs) @@ -181,7 +179,7 @@ def __init__(self, tokens): def eval(self, **kwargs): """Forward the evaluation call to the plugin - :param \*\*kwargs: contains all the information given to the plugin namely the lfns + :param kwargs: contains all the information given to the plugin namely the lfns :return: True or False """ diff --git a/src/DIRAC/Resources/scripts/dirac_resource_get_parameters.py b/src/DIRAC/Resources/scripts/dirac_resource_get_parameters.py index aaa90f17bdc..97eff68655a 100755 --- a/src/DIRAC/Resources/scripts/dirac_resource_get_parameters.py +++ b/src/DIRAC/Resources/scripts/dirac_resource_get_parameters.py @@ -1,9 +1,6 @@ #!/usr/bin/env python """ Get parameters assigned to the CE - -Usage: - dirac-resource-get-parameters [option]... [cfgfile] """ from __future__ import absolute_import from __future__ import division @@ -12,15 +9,14 @@ __RCSID__ = "$Id$" import json -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script ceName = '' Queue = '' Site = '' -@DIRACScript() +@Script() def main(): global ceName global Queue diff --git a/src/DIRAC/Resources/scripts/dirac_resource_info.py b/src/DIRAC/Resources/scripts/dirac_resource_info.py index f000a7ea1c1..9242396712e 100644 --- a/src/DIRAC/Resources/scripts/dirac_resource_info.py +++ b/src/DIRAC/Resources/scripts/dirac_resource_info.py @@ -2,9 +2,6 @@ """ Get information on resources available for the given VO: Computing and Storage. By default, resources for the VO corresponding to the current user identity are displayed - -Usage: - dirac-resource-info [option]... """ from __future__ import absolute_import from __future__ import division @@ -12,11 +9,10 @@ __RCSID__ = "$Id$" -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): from DIRAC import S_OK, gLogger, gConfig, exit as DIRACExit @@ -122,39 +118,38 @@ def printSEInfo(voName): gLogger.notice(printTable(fields, records, printOut=False, columnSeparator=' ')) return S_OK() - if __name__ == '__main__': - if not voName: - # Get the current VO - result = getVOfromProxyGroup() - if not result['OK']: - gLogger.error('No proxy found, please login') - DIRACExit(-1) - voName = result['Value'] - else: - result = gConfig.getSections('/Registry/VO') - if not result['OK']: - gLogger.error('Failed to contact the CS') - DIRACExit(-1) - if voName not in result['Value']: - gLogger.error('Invalid VO name') - DIRACExit(-1) - - if not (ceFlag or seFlag): - gLogger.error('Resource type is not specified') + if not voName: + # Get the current VO + result = getVOfromProxyGroup() + if not result['OK']: + gLogger.error('No proxy found, please login') + DIRACExit(-1) + voName = result['Value'] + else: + result = gConfig.getSections('/Registry/VO') + if not result['OK']: + gLogger.error('Failed to contact the CS') + DIRACExit(-1) + if voName not in result['Value']: + gLogger.error('Invalid VO name') + DIRACExit(-1) + + if not (ceFlag or seFlag): + gLogger.error('Resource type is not specified') + DIRACExit(-1) + + if ceFlag: + result = printCEInfo(voName) + if not result['OK']: + gLogger.error(result['Message']) + DIRACExit(-1) + if seFlag: + result = printSEInfo(voName) + if not result['OK']: + gLogger.error(result['Message']) DIRACExit(-1) - if ceFlag: - result = printCEInfo(voName) - if not result['OK']: - gLogger.error(result['Message']) - DIRACExit(-1) - if seFlag: - result = printSEInfo(voName) - if not result['OK']: - gLogger.error(result['Message']) - DIRACExit(-1) - - DIRACExit(0) + DIRACExit(0) if __name__ == "__main__": diff --git a/src/DIRAC/StorageManagementSystem/scripts/dirac_stager_monitor_file.py b/src/DIRAC/StorageManagementSystem/scripts/dirac_stager_monitor_file.py index f2d4a2cfcb9..7565ab6c58f 100755 --- a/src/DIRAC/StorageManagementSystem/scripts/dirac_stager_monitor_file.py +++ b/src/DIRAC/StorageManagementSystem/scripts/dirac_stager_monitor_file.py @@ -13,12 +13,23 @@ - pin expiry time - pin length -Usage: - dirac-stager-monitor-file LFN SE ... - -Arguments: - LFN: LFN of the staging file - SE: Storage Element for the staging file +Example: + $ dirac-stager-monitor-file.py /lhcb/LHCb/Collision12/FULL.DST/00020846/0005/0_1.full.dst GRIDKA-RDST + -------------------- + LFN : /lhcb/LHCb/Collision12/FULL.DST/00020846/0005/0_1.full.dst + SE : GRIDKA-RDST + PFN : srm://gridka-dCache.fzk.de/pnfs/gridka.de/lhcb/LHCb/Collision12/FULL.DST/00020846/0005/0_1.full.dst + Status : StageSubmitted + LastUpdate: 2013-06-11 18:13:40 + Reason : None + Jobs requesting this file to be staged: 48518896 + ------SRM staging request info-------------- + SRM RequestID: -1768636375 + SRM StageStatus: StageSubmitted + SRM StageRequestSubmitTime: 2013-06-11 18:13:38 + SRM StageRequestCompletedTime: None + SRM PinExpiryTime: None + SRM PinLength: 43200 """ from __future__ import absolute_import from __future__ import division @@ -26,21 +37,19 @@ __RCSID__ = "$Id$" -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): + # Registering arguments will automatically add their description to the help menu + Script.registerArgument("LFN: LFN of the staging file") + Script.registerArgument("SE: Storage Element for the staging file") Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() - if len(args) < 2: - Script.showHelp() from DIRAC import exit as DIRACExit, gLogger - lfn = args[0] - se = args[1] + lfn, se = Script.getPositionalArgs(group=True) from DIRAC.StorageManagementSystem.Client.StorageManagerClient import StorageManagerClient client = StorageManagerClient() @@ -95,23 +104,3 @@ def main(): if __name__ == "__main__": main() - - -''' Example: -dirac-stager-monitor-file.py /lhcb/LHCb/Collision12/FULL.DST/00020846/0005/00020846_00056603_1.full.dst GRIDKA-RDST --------------------- -LFN : /lhcb/LHCb/Collision12/FULL.DST/00020846/0005/00020846_00056603_1.full.dst -SE : GRIDKA-RDST -PFN : srm://gridka-dCache.fzk.de/pnfs/gridka.de/lhcb/LHCb/Collision12/FULL.DST/00020846/0005/00020846_00056603_1.full.dst -Status : StageSubmitted -LastUpdate: 2013-06-11 18:13:40 -Reason : None -Jobs requesting this file to be staged: 48518896 -------SRM staging request info-------------- -SRM RequestID: -1768636375 -SRM StageStatus: StageSubmitted -SRM StageRequestSubmitTime: 2013-06-11 18:13:38 -SRM StageRequestCompletedTime: None -SRM PinExpiryTime: None -SRM PinLength: 43200 -''' # NOQA diff --git a/src/DIRAC/StorageManagementSystem/scripts/dirac_stager_monitor_jobs.py b/src/DIRAC/StorageManagementSystem/scripts/dirac_stager_monitor_jobs.py index 6960a1b51bc..560090e4070 100755 --- a/src/DIRAC/StorageManagementSystem/scripts/dirac_stager_monitor_jobs.py +++ b/src/DIRAC/StorageManagementSystem/scripts/dirac_stager_monitor_jobs.py @@ -6,11 +6,75 @@ """ Report the summary of the staging progress of jobs -Usage: - dirac-stager-monitor-jobs jobID [jobID] [jobID] ... - -Arguments: - JobID: DIRAC job ID +Example: + $ dirac-stager-monitor-jobs.py 5688643 5688644 + + JobID : 5688643 + Status : Offline + SubmitTime : 2013-06-10 15:21:03 + CompleteTime : None + Staging files for this job: + -------------------- + LFN : /lhcb/LHCb/Collision10/SDST/01/0000/01_00003705_1.sdst + SE : IN2P3-RDST + PFN : srm://ccsrm.in2p3.fr/pnfs/in2p3.fr/data/lhcb/LHCb/Collision10/SDST/01/0000/01_00003705_1.sdst + Status : Offline + Reason : None + -------------------- + LFN : /lhcb/LHCb/Collision10/SDST/01/0000/01_00001918_1.sdst + SE : IN2P3-RDST + PFN : srm://ccsrm.in2p3.fr/pnfs/in2p3.fr/data/lhcb/LHCb/Collision10/SDST/01/0000/01_00001918_1.sdst + Status : Offline + Reason : None + -------------------- + LFN : /lhcb/LHCb/Collision10/SDST/01/0000/01_00002347_1.sdst + SE : IN2P3-RDST + PFN : srm://ccsrm.in2p3.fr/pnfs/in2p3.fr/data/lhcb/LHCb/Collision10/SDST/01/0000/01_00002347_1.sdst + Status : Offline + Reason : None + -------------------- + LFN : /lhcb/LHCb/Collision10/SDST/01/0000/01_00003701_1.sdst + SE : IN2P3-RDST + PFN : srm://ccsrm.in2p3.fr/pnfs/in2p3.fr/data/lhcb/LHCb/Collision10/SDST/01/0000/01_00003701_1.sdst + Status : Offline + Reason : None + ---------------------- + JobID : 5688644 + Status : Offline + SubmitTime : 2013-06-10 15:21:07 + CompleteTime : None + Staging files for this job: + -------------------- + LFN : /lhcb/LHCb/Collision10/SDST/01/0000/01_00005873_1.sdst + SE : IN2P3-RDST + PFN : srm://ccsrm.in2p3.fr/pnfs/in2p3.fr/data/lhcb/LHCb/Collision10/SDST/01/0000/01_00005873_1.sdst + Status : Offline + Reason : None + -------------------- + LFN : /lhcb/LHCb/Collision10/SDST/01/0000/01_00004468_1.sdst + SE : IN2P3-RDST + PFN : srm://ccsrm.in2p3.fr/pnfs/in2p3.fr/data/lhcb/LHCb/Collision10/SDST/01/0000/01_00004468_1.sdst + Status : Offline + Reason : None + -------------------- + LFN : /lhcb/LHCb/Collision10/SDST/01/0000/01_00000309_1.sdst + SE : IN2P3-RDST + PFN : srm://ccsrm.in2p3.fr/pnfs/in2p3.fr/data/lhcb/LHCb/Collision10/SDST/01/0000/01_00000309_1.sdst + Status : Offline + Reason : None + -------------------- + LFN : /lhcb/LHCb/Collision10/SDST/01/0000/01_00005911_1.sdst + SE : IN2P3-RDST + PFN : srm://ccsrm.in2p3.fr/pnfs/in2p3.fr/data/lhcb/LHCb/Collision10/SDST/01/0000/01_00005911_1.sdst + Status : Offline + Reason : None + -------------------- + LFN : /lhcb/LHCb/Collision10/SDST/01/0000/01_00003296_1.sdst + SE : IN2P3-RDST + PFN : srm://ccsrm.in2p3.fr/pnfs/in2p3.fr/data/lhcb/LHCb/Collision10/SDST/01/0000/01_00003296_1.sdst + Status : Offline + Reason : None + -------------------- """ from __future__ import absolute_import from __future__ import division @@ -18,12 +82,13 @@ __RCSID__ = "$Id$" -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["JobID: DIRAC Job ID"]) Script.parseCommandLine(ignoreErrors=False) args = Script.getPositionalArgs() @@ -77,75 +142,3 @@ def main(): if __name__ == "__main__": main() - - -''' Example: -dirac-stager-monitor-jobs.py 5688643 5688644 - -JobID : 5688643 -Status : Offline -SubmitTime : 2013-06-10 15:21:03 -CompleteTime : None -Staging files for this job: - -------------------- - LFN : /lhcb/LHCb/Collision10/SDST/00010270/0000/00010270_00003705_1.sdst - SE : IN2P3-RDST - PFN : srm://ccsrm.in2p3.fr/pnfs/in2p3.fr/data/lhcb/LHCb/Collision10/SDST/00010270/0000/00010270_00003705_1.sdst - Status : Offline - Reason : None - -------------------- - LFN : /lhcb/LHCb/Collision10/SDST/00010270/0000/00010270_00001918_1.sdst - SE : IN2P3-RDST - PFN : srm://ccsrm.in2p3.fr/pnfs/in2p3.fr/data/lhcb/LHCb/Collision10/SDST/00010270/0000/00010270_00001918_1.sdst - Status : Offline - Reason : None - -------------------- - LFN : /lhcb/LHCb/Collision10/SDST/00010270/0000/00010270_00002347_1.sdst - SE : IN2P3-RDST - PFN : srm://ccsrm.in2p3.fr/pnfs/in2p3.fr/data/lhcb/LHCb/Collision10/SDST/00010270/0000/00010270_00002347_1.sdst - Status : Offline - Reason : None - -------------------- - LFN : /lhcb/LHCb/Collision10/SDST/00010270/0000/00010270_00003701_1.sdst - SE : IN2P3-RDST - PFN : srm://ccsrm.in2p3.fr/pnfs/in2p3.fr/data/lhcb/LHCb/Collision10/SDST/00010270/0000/00010270_00003701_1.sdst - Status : Offline - Reason : None ----------------------- -JobID : 5688644 -Status : Offline -SubmitTime : 2013-06-10 15:21:07 -CompleteTime : None -Staging files for this job: - -------------------- - LFN : /lhcb/LHCb/Collision10/SDST/00010270/0000/00010270_00005873_1.sdst - SE : IN2P3-RDST - PFN : srm://ccsrm.in2p3.fr/pnfs/in2p3.fr/data/lhcb/LHCb/Collision10/SDST/00010270/0000/00010270_00005873_1.sdst - Status : Offline - Reason : None - -------------------- - LFN : /lhcb/LHCb/Collision10/SDST/00010270/0000/00010270_00004468_1.sdst - SE : IN2P3-RDST - PFN : srm://ccsrm.in2p3.fr/pnfs/in2p3.fr/data/lhcb/LHCb/Collision10/SDST/00010270/0000/00010270_00004468_1.sdst - Status : Offline - Reason : None - -------------------- - LFN : /lhcb/LHCb/Collision10/SDST/00010270/0000/00010270_00000309_1.sdst - SE : IN2P3-RDST - PFN : srm://ccsrm.in2p3.fr/pnfs/in2p3.fr/data/lhcb/LHCb/Collision10/SDST/00010270/0000/00010270_00000309_1.sdst - Status : Offline - Reason : None - -------------------- - LFN : /lhcb/LHCb/Collision10/SDST/00010270/0000/00010270_00005911_1.sdst - SE : IN2P3-RDST - PFN : srm://ccsrm.in2p3.fr/pnfs/in2p3.fr/data/lhcb/LHCb/Collision10/SDST/00010270/0000/00010270_00005911_1.sdst - Status : Offline - Reason : None - -------------------- - LFN : /lhcb/LHCb/Collision10/SDST/00010270/0000/00010270_00003296_1.sdst - SE : IN2P3-RDST - PFN : srm://ccsrm.in2p3.fr/pnfs/in2p3.fr/data/lhcb/LHCb/Collision10/SDST/00010270/0000/00010270_00003296_1.sdst - Status : Offline - Reason : None - -------------------- -''' # NOQA diff --git a/src/DIRAC/StorageManagementSystem/scripts/dirac_stager_monitor_request.py b/src/DIRAC/StorageManagementSystem/scripts/dirac_stager_monitor_request.py index ddad87f0661..5c53e560301 100755 --- a/src/DIRAC/StorageManagementSystem/scripts/dirac_stager_monitor_request.py +++ b/src/DIRAC/StorageManagementSystem/scripts/dirac_stager_monitor_request.py @@ -5,12 +5,6 @@ ######################################################################## """ Report the summary of the stage task from the DB. - -Usage: - dirac-stager-monitor-request [options] ... Request ... - -Arguments: - Request: ID of the Stage request in the StorageManager """ from __future__ import absolute_import from __future__ import division @@ -18,12 +12,13 @@ __RCSID__ = "$Id$" -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): + # Registering arguments will automatically add their description to the help menu + Script.registerArgument("Request: ID of the Stage request in the StorageManager") Script.parseCommandLine(ignoreErrors=False) args = Script.getPositionalArgs() diff --git a/src/DIRAC/StorageManagementSystem/scripts/dirac_stager_monitor_requests.py b/src/DIRAC/StorageManagementSystem/scripts/dirac_stager_monitor_requests.py index 1469f36b103..cd04bfd1820 100755 --- a/src/DIRAC/StorageManagementSystem/scripts/dirac_stager_monitor_requests.py +++ b/src/DIRAC/StorageManagementSystem/scripts/dirac_stager_monitor_requests.py @@ -6,30 +6,37 @@ """ Report the details of file staging requests, based on selection filters -Usage: - dirac-stager-monitor-requests [--status=] [--se=] [--limit=] [--showJobs=YES] ... - -Arguments: - status: file status=(New, Offline, Waiting, Failed, StageSubmitted, Staged). - se: storage element - showJobs: whether to ALSO list the jobs asking for these files to be staged - - WARNING: Query may be heavy, please use --limit switch! +WARNING: Query may be heavy, please use --limit switch! + +Example: + $ dirac-stager-show-requests.py --status=Staged --se=GRIDKA-RDST --limit=10 --showJobs=YES + Query limited to 10 entries + + Status LastUpdate LFN SE Reason Jobs PinExpiryTime PinLength + Staged 2013-06-05 20:10:50 /lhcb/LHCb/5.full.dst GRIDKA-RDST None ['48498752'] 2013-06-05 22:10:50 86400 + Staged 2013-06-06 15:54:29 /lhcb/LHCb/1.full.dst GRIDKA-RDST None ['48516851'] 2013-06-06 16:54:29 43200 + Staged 2013-06-07 02:35:41 /lhcb/LHCb/3.full.dst GRIDKA-RDST None ['48520736'] 2013-06-07 03:35:41 43200 + Staged 2013-06-06 04:16:50 /lhcb/LHCb/3.full.dst GRIDKA-RDST None ['48510852'] 2013-06-06 06:16:50 86400 + Staged 2013-06-07 03:44:04 /lhcb/LHCb/3.full.dst GRIDKA-RDST None ['48520737'] 2013-06-07 04:44:04 43200 + Staged 2013-06-05 23:37:46 /lhcb/LHCb/3.full.dst GRIDKA-RDST None ['48508687'] 2013-06-06 01:37:46 86400 + Staged 2013-06-10 08:50:09 /lhcb/LHCb/5.full.dst GRIDKA-RDST None ['48518896'] 2013-06-10 09:50:09 43200 + Staged 2013-06-06 11:03:25 /lhcb/LHCb/2.full.dst GRIDKA-RDST None ['48515583'] 2013-06-06 12:03:25 43200 + Staged 2013-06-06 11:11:50 /lhcb/LHCb/2.full.dst GRIDKA-RDST None ['48515072'] 2013-06-06 12:11:50 43200 + Staged 2013-06-07 03:19:26 /lhcb/LHCb/2.full.dst GRIDKA-RDST None ['48515600'] 2013-06-07 04:19:26 43200 """ from __future__ import absolute_import from __future__ import division from __future__ import print_function -_RCSID__ = "$Id$" +__RCSID__ = "$Id$" -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script from DIRAC import gConfig, gLogger, exit as DIRACExit, S_OK, version subLogger = None -@DIRACScript() +@Script() def main(): def registerSwitches(): ''' @@ -165,21 +172,3 @@ def run(): if __name__ == "__main__": main() - - -''' Example: -dirac-stager-show-requests.py --status=Staged --se=GRIDKA-RDST --limit=10 --showJobs=YES -Query limited to 10 entries - -Status LastUpdate LFN SE Reason Jobs PinExpiryTime PinLength -Staged 2013-06-05 20:10:50 /lhcb/LHCb/Collision12/FULL.DST/00020846/0005/00020846_00054816_1.full.dst GRIDKA-RDST None ['48498752'] 2013-06-05 22:10:50 86400 -Staged 2013-06-06 15:54:29 /lhcb/LHCb/Collision12/FULL.DST/00020846/0001/00020846_00013202_1.full.dst GRIDKA-RDST None ['48516851'] 2013-06-06 16:54:29 43200 -Staged 2013-06-07 02:35:41 /lhcb/LHCb/Collision12/FULL.DST/00020846/0003/00020846_00032726_1.full.dst GRIDKA-RDST None ['48520736'] 2013-06-07 03:35:41 43200 -Staged 2013-06-06 04:16:50 /lhcb/LHCb/Collision12/FULL.DST/00020846/0003/00020846_00030567_1.full.dst GRIDKA-RDST None ['48510852'] 2013-06-06 06:16:50 86400 -Staged 2013-06-07 03:44:04 /lhcb/LHCb/Collision12/FULL.DST/00020846/0003/00020846_00032699_1.full.dst GRIDKA-RDST None ['48520737'] 2013-06-07 04:44:04 43200 -Staged 2013-06-05 23:37:46 /lhcb/LHCb/Collision12/FULL.DST/00020846/0003/00020846_00032576_1.full.dst GRIDKA-RDST None ['48508687'] 2013-06-06 01:37:46 86400 -Staged 2013-06-10 08:50:09 /lhcb/LHCb/Collision12/FULL.DST/00020846/0005/00020846_00056424_1.full.dst GRIDKA-RDST None ['48518896'] 2013-06-10 09:50:09 43200 -Staged 2013-06-06 11:03:25 /lhcb/LHCb/Collision12/FULL.DST/00020846/0002/00020846_00022161_1.full.dst GRIDKA-RDST None ['48515583'] 2013-06-06 12:03:25 43200 -Staged 2013-06-06 11:11:50 /lhcb/LHCb/Collision12/FULL.DST/00020846/0002/00020846_00029215_1.full.dst GRIDKA-RDST None ['48515072'] 2013-06-06 12:11:50 43200 -Staged 2013-06-07 03:19:26 /lhcb/LHCb/Collision12/FULL.DST/00020846/0002/00020846_00022323_1.full.dst GRIDKA-RDST None ['48515600'] 2013-06-07 04:19:26 43200 -''' # NOQA diff --git a/src/DIRAC/StorageManagementSystem/scripts/dirac_stager_show_stats.py b/src/DIRAC/StorageManagementSystem/scripts/dirac_stager_show_stats.py index 67d145295c8..e57410c69ee 100755 --- a/src/DIRAC/StorageManagementSystem/scripts/dirac_stager_show_stats.py +++ b/src/DIRAC/StorageManagementSystem/scripts/dirac_stager_show_stats.py @@ -8,7 +8,7 @@ Currently used Cache per SE is also reported. (active pins) Example: - dirac-stager-show-stats + $ dirac-stager-show-stats Status SE NumberOfFiles Size(GB) -------------------------------------------------------------------------- @@ -27,12 +27,12 @@ from __future__ import print_function __RCSID__ = "$Id$" -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript + +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script from DIRAC import gConfig, gLogger, exit as DIRACExit, S_OK, version -@DIRACScript() +@Script() def main(): Script.parseCommandLine(ignoreErrors=False) from DIRAC.StorageManagementSystem.Client.StorageManagerClient import StorageManagerClient diff --git a/src/DIRAC/StorageManagementSystem/scripts/dirac_stager_stage_files.py b/src/DIRAC/StorageManagementSystem/scripts/dirac_stager_stage_files.py index ad5299ec006..391d06687c8 100755 --- a/src/DIRAC/StorageManagementSystem/scripts/dirac_stager_stage_files.py +++ b/src/DIRAC/StorageManagementSystem/scripts/dirac_stager_stage_files.py @@ -4,8 +4,8 @@ # Author : Daniela Remenska ######################################################################## """ -- submit staging requests for a particular Storage Element! Default DIRAC JobID will be =0. - (not visible in the Job monitoring list though) +Submit staging requests for a particular Storage Element! Default DIRAC JobID will be =0. +(not visible in the Job monitoring list though) Usage: dirac-stager-stage-files @@ -13,6 +13,21 @@ Arguments: : LFN to Stage (or local file with list of LFNs) : Name of Storage Element + +Example: + $ dirac-stager-stage-files.py filesToStage.txt GRIDKA-RDST + Stage request submitted for LFNs: + ['/lhcb/LHCb/Collision12/FULL.DST/00020846/0002/00020846_00023458_1.full.dst', + '/lhcb/LHCb/Collision12/FULL.DST/00020846/0003/00020846_00032669_1.full.dst', + '/lhcb/LHCb/Collision12/FULL.DST/00020846/0003/00020846_00032666_1.full.dst'] + SE= GRIDKA-RDST + You can check their status and progress with dirac-stager-monitor-file + + $ dirac-stager-stage-files.py /lhcb/LHCb/Collision12/FULL.DST/00020846/0003/00020846_00032641_1.full.dst GRIDKA-RDST + Stage request submitted for LFNs: + ['/lhcb/LHCb/Collision12/FULL.DST/00020846/0003/00020846_00032641_1.full.dst'] + SE= GRIDKA-RDST + You can check their status and progress with dirac-stager-monitor-file """ from __future__ import absolute_import from __future__ import division @@ -20,11 +35,10 @@ __RCSID__ = "$Id$" -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): Script.parseCommandLine(ignoreErrors=True) @@ -73,19 +87,3 @@ def main(): if __name__ == "__main__": main() - - -'''Example1: -dirac-stager-stage-files.py filesToStage.txt GRIDKA-RDST -Stage request submitted for LFNs: -['/lhcb/LHCb/Collision12/FULL.DST/00020846/0002/00020846_00023458_1.full.dst', '/lhcb/LHCb/Collision12/FULL.DST/00020846/0003/00020846_00032669_1.full.dst', '/lhcb/LHCb/Collision12/FULL.DST/00020846/0003/00020846_00032666_1.full.dst'] -SE= GRIDKA-RDST -You can check their status and progress with dirac-stager-monitor-file - -Example2: -dirac-stager-stage-files.py /lhcb/LHCb/Collision12/FULL.DST/00020846/0003/00020846_00032641_1.full.dst GRIDKA-RDST -Stage request submitted for LFNs: -['/lhcb/LHCb/Collision12/FULL.DST/00020846/0003/00020846_00032641_1.full.dst'] -SE= GRIDKA-RDST -You can check their status and progress with dirac-stager-monitor-file -''' # NOQA diff --git a/src/DIRAC/TransformationSystem/scripts/dirac_production_runjoblocal.py b/src/DIRAC/TransformationSystem/scripts/dirac_production_runjoblocal.py index 6ebeaa84ee3..b5be7f2219a 100755 --- a/src/DIRAC/TransformationSystem/scripts/dirac_production_runjoblocal.py +++ b/src/DIRAC/TransformationSystem/scripts/dirac_production_runjoblocal.py @@ -23,8 +23,7 @@ from six.moves.urllib.request import urlopen -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script def __runSystemDefaults(jobID, vo): @@ -135,11 +134,11 @@ def __runJobLocally(jobID, basepath, vo): localJob.runLocal() -@DIRACScript() +@Script() def main(): - Script.parseCommandLine(ignoreErrors=False) Script.registerSwitch('D:', 'Download=', 'Defines data acquisition as DownloadInputData') Script.registerSwitch('P:', 'Protocol=', 'Defines data acquisition as InputDataByProtocol') + Script.parseCommandLine(ignoreErrors=False) _downloadinputdata = False _jobID = None diff --git a/src/DIRAC/TransformationSystem/scripts/dirac_transformation_add_files.py b/src/DIRAC/TransformationSystem/scripts/dirac_transformation_add_files.py index c0d8b9142df..122cf4bcea7 100755 --- a/src/DIRAC/TransformationSystem/scripts/dirac_transformation_add_files.py +++ b/src/DIRAC/TransformationSystem/scripts/dirac_transformation_add_files.py @@ -1,9 +1,6 @@ #!/usr/bin/env python """ Add files to an existing transformation - -Usage: - dirac-transformation-add-files TransID """ from __future__ import absolute_import from __future__ import division @@ -13,23 +10,21 @@ import os import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): + # Registering arguments will automatically add their description to the help menu + Script.registerArgument("TransID: transformation ID") + Script.registerArgument(("LFN: LFN", "FileName: file containing LFNs")) Script.parseCommandLine() from DIRAC.TransformationSystem.Client.TransformationClient import TransformationClient - args = Script.getPositionalArgs() - if len(args) < 2: - Script.showHelp(exitCode=1) + tID, inputFileName = Script.getPositionalArgs(group=True) # get arguments - inputFileName = args[1] - lfns = [] if os.path.exists(inputFileName): inputFile = open(inputFileName, 'r') @@ -40,7 +35,7 @@ def main(): lfns.append(inputFileName) tc = TransformationClient() - res = tc.addFilesToTransformation(args[0], lfns) # Files added here + res = tc.addFilesToTransformation(tID, lfns) # Files added here if not res['OK']: DIRAC.gLogger.error(res['Message']) diff --git a/src/DIRAC/TransformationSystem/scripts/dirac_transformation_archive.py b/src/DIRAC/TransformationSystem/scripts/dirac_transformation_archive.py index 92970c0b566..4684d19f75a 100755 --- a/src/DIRAC/TransformationSystem/scripts/dirac_transformation_archive.py +++ b/src/DIRAC/TransformationSystem/scripts/dirac_transformation_archive.py @@ -1,27 +1,23 @@ #!/usr/bin/env python """ Archive a transformation - -Usage: - dirac-transformation-archive transID [transID] [transID] """ - from __future__ import print_function from __future__ import absolute_import from __future__ import division + +__RCSID__ = "$Id$" + import sys -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine() - args = Script.getPositionalArgs() - - if not args: - Script.showHelp() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["transID: transformation ID"]) + _, args = Script.parseCommandLine() transIDs = [int(arg) for arg in args] diff --git a/src/DIRAC/TransformationSystem/scripts/dirac_transformation_clean.py b/src/DIRAC/TransformationSystem/scripts/dirac_transformation_clean.py index 696ee06c296..b141b9e12fd 100755 --- a/src/DIRAC/TransformationSystem/scripts/dirac_transformation_clean.py +++ b/src/DIRAC/TransformationSystem/scripts/dirac_transformation_clean.py @@ -1,27 +1,23 @@ #!/usr/bin/env python """ Clean a tranformation - -Usage: - dirac-transformation-clean transID [transID] [transID] """ - from __future__ import print_function from __future__ import absolute_import from __future__ import division + +__RCSID__ = "$Id$" + import sys -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine() - - args = Script.getPositionalArgs() - if not args: - Script.showHelp() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["transID: transformation ID"]) + _, args = Script.parseCommandLine() from DIRAC.TransformationSystem.Agent.TransformationCleaningAgent import TransformationCleaningAgent from DIRAC.TransformationSystem.Client.TransformationClient import TransformationClient diff --git a/src/DIRAC/TransformationSystem/scripts/dirac_transformation_cli.py b/src/DIRAC/TransformationSystem/scripts/dirac_transformation_cli.py index 05a87f660ed..21a768f8fae 100755 --- a/src/DIRAC/TransformationSystem/scripts/dirac_transformation_cli.py +++ b/src/DIRAC/TransformationSystem/scripts/dirac_transformation_cli.py @@ -6,11 +6,12 @@ from __future__ import division from __future__ import print_function -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +__RCSID__ = "$Id$" +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() + +@Script() def main(): Script.parseCommandLine(ignoreErrors=False) diff --git a/src/DIRAC/TransformationSystem/scripts/dirac_transformation_get_files.py b/src/DIRAC/TransformationSystem/scripts/dirac_transformation_get_files.py index 577f63c3f57..b7d232f3c2a 100755 --- a/src/DIRAC/TransformationSystem/scripts/dirac_transformation_get_files.py +++ b/src/DIRAC/TransformationSystem/scripts/dirac_transformation_get_files.py @@ -2,9 +2,6 @@ """ Get the files attached to a transformation - -Usage: - dirac-transformation-get-files TransID """ from __future__ import absolute_import from __future__ import division @@ -13,17 +10,17 @@ __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument("transID: transformation ID") + _, args = Script.parseCommandLine() from DIRAC.TransformationSystem.Client.TransformationClient import TransformationClient - args = Script.getPositionalArgs() if len(args) != 1: Script.showHelp(exitCode=1) diff --git a/src/DIRAC/TransformationSystem/scripts/dirac_transformation_recover_data.py b/src/DIRAC/TransformationSystem/scripts/dirac_transformation_recover_data.py index f855a192ce1..8230ef5b104 100755 --- a/src/DIRAC/TransformationSystem/scripts/dirac_transformation_recover_data.py +++ b/src/DIRAC/TransformationSystem/scripts/dirac_transformation_recover_data.py @@ -7,8 +7,7 @@ from __future__ import print_function from DIRAC import S_OK, gLogger -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script __RCSID__ = '$Id$' @@ -33,7 +32,7 @@ def registerSwitches(self): Script.registerSwitch('X', 'Enabled', 'Enable the changes', self.setEnabled) -@DIRACScript() +@Script() def main(): PARAMS = Params() PARAMS.registerSwitches() diff --git a/src/DIRAC/TransformationSystem/scripts/dirac_transformation_remove_output.py b/src/DIRAC/TransformationSystem/scripts/dirac_transformation_remove_output.py index a080b50add8..1e5de8ea109 100755 --- a/src/DIRAC/TransformationSystem/scripts/dirac_transformation_remove_output.py +++ b/src/DIRAC/TransformationSystem/scripts/dirac_transformation_remove_output.py @@ -1,9 +1,6 @@ #!/usr/bin/env python """ Remove the outputs produced by a transformation - -Usage: - dirac-transformation-remove-output transID [transID] [transID] """ from __future__ import print_function @@ -12,17 +9,14 @@ import sys -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine() - args = Script.getPositionalArgs() - - if not args: - Script.showHelp() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["transID: transformation ID"]) + _, args = Script.parseCommandLine() transIDs = [int(arg) for arg in args] diff --git a/src/DIRAC/TransformationSystem/scripts/dirac_transformation_replication.py b/src/DIRAC/TransformationSystem/scripts/dirac_transformation_replication.py index da1b4b16842..0eee2f4916c 100755 --- a/src/DIRAC/TransformationSystem/scripts/dirac_transformation_replication.py +++ b/src/DIRAC/TransformationSystem/scripts/dirac_transformation_replication.py @@ -12,11 +12,10 @@ __RCSID__ = "$Id$" -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): """reads command line parameters, makes check and creates replication transformation""" from DIRAC import gLogger, exit as dexit diff --git a/src/DIRAC/TransformationSystem/scripts/dirac_transformation_verify_outputdata.py b/src/DIRAC/TransformationSystem/scripts/dirac_transformation_verify_outputdata.py index ab8c79320f2..9b25e7a62e4 100755 --- a/src/DIRAC/TransformationSystem/scripts/dirac_transformation_verify_outputdata.py +++ b/src/DIRAC/TransformationSystem/scripts/dirac_transformation_verify_outputdata.py @@ -1,27 +1,24 @@ #!/usr/bin/env python """ Runs checkTransformationIntegrity from ValidateOutputDataAgent on selected Tranformation - -Usage: - dirac-transformation-verify-outputdata transID [transID] [transID] """ from __future__ import print_function from __future__ import absolute_import from __future__ import division + +__RCSID__ = "$Id$" + import sys -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine() - - args = Script.getPositionalArgs() - if not args: - Script.showHelp() + # Registering arguments will automatically add their description to the help menu + Script.registerArgument(["transID: transformation ID"]) + _, args = Script.parseCommandLine() transIDs = [int(arg) for arg in args] diff --git a/src/DIRAC/WorkloadManagementSystem/JobWrapper/JobWrapperTemplate.py b/src/DIRAC/WorkloadManagementSystem/JobWrapper/JobWrapperTemplate.py index 2996d26ef59..1d5481658ec 100644 --- a/src/DIRAC/WorkloadManagementSystem/JobWrapper/JobWrapperTemplate.py +++ b/src/DIRAC/WorkloadManagementSystem/JobWrapper/JobWrapperTemplate.py @@ -27,7 +27,7 @@ if sitePython: sys.path.insert(0, "@SITEPYTHON@") -from DIRAC.Core.Base import Script +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script Script.parseCommandLine() from DIRAC import gLogger diff --git a/src/DIRAC/WorkloadManagementSystem/scripts/dirac_admin_kill_pilot.py b/src/DIRAC/WorkloadManagementSystem/scripts/dirac_admin_kill_pilot.py index 6fb0be9cdb4..07d6b1cc531 100755 --- a/src/DIRAC/WorkloadManagementSystem/scripts/dirac_admin_kill_pilot.py +++ b/src/DIRAC/WorkloadManagementSystem/scripts/dirac_admin_kill_pilot.py @@ -5,9 +5,6 @@ ######################################################################## """ Kill the specified pilot - -Usage: - dirac-admin-kill-pilot """ from __future__ import absolute_import from __future__ import division @@ -15,17 +12,14 @@ __RCSID__ = "$Id$" import DIRAC -from DIRAC.Core.Base import Script -from DIRAC.Core.Utilities.DIRACScript import DIRACScript +from DIRAC.Core.Utilities.DIRACScript import DIRACScript as Script -@DIRACScript() +@Script() def main(): - Script.parseCommandLine(ignoreErrors=True) - args = Script.getPositionalArgs() - - if len(args) < 1: - Script.showHelp(exitCode=1) + # Registering arguments will automatically add their description to the help menu + Script.registerArgument("PilotRef: pilot reference") + _, args = Script.parseCommandLine(ignoreErrors=True) pilotRef = args[0] diff --git a/src/DIRAC/WorkloadManagementSystem/scripts/dirac_admin_pilot_logging_info.py b/src/DIRAC/WorkloadManagementSystem/scripts/dirac_admin_pilot_logging_info.py index 88af3776a1b..07d74bced88 100755 --- a/src/DIRAC/WorkloadManagementSystem/scripts/dirac_admin_pilot_logging_info.py +++ b/src/DIRAC/WorkloadManagementSystem/scripts/dirac_admin_pilot_logging_info.py @@ -2,20 +2,17 @@ """ Get Pilots Logging for specific Pilot UUID or Job ID. -Usage: - dirac-admin-pilot-loggin-info