blob: 3cc21bcd24bf497fb1333b105abaef0b92dc38fd [file] [log] [blame]
# -*- python -*-
'''A module for parsing script command line arguments.
..seealso: https://docs.python.org/3/library/argparse.html##
'''
# -----------------------------------------------------------------------
# Copyright 2022-2024 Open Networking Foundation (ONF) and the ONF Contributors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# -----------------------------------------------------------------------
##-------------------##
##---] GLOBALS [---##
##-------------------##
ARGV = None
namespace = None
##-------------------##
##---] IMPORTS [---##
##-------------------##
import argparse
from flog.main import utils as main_utils
from flog.main import help as main_help
## -----------------------------------------------------------------------
## -----------------------------------------------------------------------
def get_argv():
"""Retrieve parsed command line switches.
..pre: getopts() was called earlier.
:return: Parsed command line argument storage
:rtype : dict
"""
global ARGV
global namespace
if ARGV is None:
# Normalize argspace/namespace into a getopt/dictionary
# Program wide syntax edits needed: args['foo'] => args.foo
arg_dict = {}
for arg in vars(namespace):
arg_dict[arg] = getattr(namespace, arg)
ARGV = arg_dict
return ARGV
## -----------------------------------------------------------------------
## -----------------------------------------------------------------------
def getopts(argv, debug=None) -> None:
"""Parse command line args, check options and pack into a hashmap
:param argv: values passed on the command line
:param debug: optional flag to enable debug mode
:return: Digested command line arguments
:rtype : dict
:raises ValueError
.. versionadded:: 1.0
"""
global namespace
iam = main_utils.iam()
if debug is None:
debug = False
parser = argparse.ArgumentParser\
(
description = '''Report test dependencies based on selection criteria.'''
# epilog = 'extra-help-text'
)
## -----------------------------------------------------------------------
## [TEST: categories]
## -----------------------------------------------------------------------
parser.add_argument('--attr',
action = 'append',
default = [],
choices=\
[
'olt', # optical line termination
#
'onu', # optical network unit
#
'epon',
'pon', # passive optical network
'gpon', # gigabit-pon
'xpon',
],
help = 'Enable testing by attribute',
)
## -----------------------------------------------------------------------
## [TEST:types]
## -----------------------------------------------------------------------
parser.add_argument('--type',
action = 'append',
default = [],
choices=\
[
'burnin', # profile, stress testing
'integration', # trigger inter-dependencies
'oink', # kitchen sink testing
'regression', # have we broken the renaissance ?
'scale', #
'system', #
'smoke', # quick: 60s > [n]
'standalone', # dependency-less tests
'suite', #
'unit', # module/api/narrow focus.
],
help = 'Enable testing by category',
)
## -----------------------------------------------------------------------
## [FILTER]
## -----------------------------------------------------------------------
parser.add_argument('--excl',
action = 'append',
default = [],
help = 'FILTER: Probe resources to exclude',
)
parser.add_argument('--incl',
action = 'append',
default = [],
help = 'FILTER: Probe resources to include',
)
## -----------------------------------------------------------------------
## [MODES]
## -----------------------------------------------------------------------
parser.add_argument('--debug',
action = 'store_true',
default = False,
help = 'Enable debug mode',
)
parser.add_argument('--trace',
action = 'append',
default = [],
help = 'Enable python debugging to trace a named resource.',
)
parser.add_argument('--usage',
action = 'store_true',
default = False,
help = 'Show usage examples',
)
parser.add_argument('--version', action='version', version='%(prog)s 1.0')
namespace = parser.parse_args()
# --------------------------------------------------------------
# [TODO] update --usage to accept a value, display context help.
# --------------------------------------------------------------
if namespace.usage:
main_help.usage()
return
# [EOF]