-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathfre.py
79 lines (70 loc) · 2.74 KB
/
fre.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
"""
Main host file for FRE-CLI program scripts
authored by Bennett.Chang@noaa.gov | bcc2761
NOAA | GFDL
2023-2024
principal click group for main/fre allows for subgroup functions to
be called via this script. I.e. 'fre' is the entry point
"""
import importlib.metadata
import click
from .lazy_group import LazyGroup
import logging
fre_logger = logging.getLogger(__name__)
FORMAT = "%(levelname)s:%(filename)s:%(funcName)s %(message)s"
#MODE = 'x'
# versioning, turn xxxx.y into xxxx.0y
version_unexpanded = importlib.metadata.version('fre-cli')
version_unexpanded_split = version_unexpanded.split('.')
if len(version_unexpanded_split[1]) == 1:
version_minor = "0" + version_unexpanded_split[1]
else:
version_minor = version_unexpanded_split[1]
# if the patch version is present, then use it. otherwise, omit
try:
len(version_unexpanded_split[2])
if len(version_unexpanded_split[2]) == 1:
version_patch = "0" + version_unexpanded_split[2]
else:
version_patch = version_unexpanded_split[2]
version = version_unexpanded_split[0] + '.' + version_minor + '.' + version_patch
except IndexError:
version = version_unexpanded_split[0] + '.' + version_minor
@click.version_option(
package_name = "fre-cli",
version=version
)
# click and lazy group loading
@click.group(
cls = LazyGroup,
lazy_subcommands = {"pp": ".pp.frepp.pp_cli",
"catalog": ".catalog.frecatalog.catalog_cli",
"list": ".list_.frelist.list_cli",
"check": ".check.frecheck.check_cli",
"run": ".run.frerun.run_cli",
"yamltools": ".yamltools.freyamltools.yamltools_cli",
"make": ".make.fremake.make_cli",
"app": ".app.freapp.app_cli",
"cmor": ".cmor.frecmor.cmor_cli",
"analysis": ".analysis.freanalysis.analysis_cli"},
help = click.style(
"'fre' is the main CLI click group. It houses the other tool groups as lazy subcommands.",
fg='cyan')
)
@click.option('-v', '--verbose', is_flag=True,
default=False, help="set logging verbosity higher",
required=False)
@click.option('-l', '--log_file', default=None, required=False, type=str,
help='path to log file for all fre calls. leave as None to print to screen')
def fre(verbose, log_file):
''' entry point function to subgroup functions '''
log_level=None
#file_mode = None if log_file is None else MODE
if verbose:
log_level=logging.INFO
else:
log_level=logging.WARN
logging.basicConfig(level=log_level, format=FORMAT,
filename=log_file, encoding='utf-8')
if __name__ == '__main__':
fre()