Source code for scripts.tofuversion
#!/usr/bin/env python
# Built-in
import sys
import os
import warnings
_HERE = os.path.abspath(os.path.dirname(__file__))
# import parser dict
sys.path.insert(1, _HERE)
from _dparser import _DPARSER
_ = sys.path.pop(1)
###################################################
###################################################
# function
###################################################
[docs]def get_version(verb=None, envvar=None,
path=None, warn=None, force=None, ddef=None):
""" Print tofu version and / or store in environment variable """
# --------------
# Check inputs
kwd = locals()
for k0 in set(ddef.keys()).intersection(kwd.keys()):
if kwd[k0] is None:
kwd[k0] = ddef[k0]
verb, envvar, path = kwd['verb'], kwd['envvar'], kwd['path']
warn, force = kwd['warn'], kwd['force']
# verb, warn, force
dbool = {'verb': verb, 'warn': warn, 'force': force}
for k0, v0 in dbool.items():
if v0 is None:
dbool[k0] = ddef[k0]
if not isinstance(dbool[k0], bool):
msg = ("Arg {} must be a bool\n".format(k0)
+ "\t- provided: {}".format(dbool[k0]))
raise Exception(msg)
# envvar
if isinstance(envvar, bool):
if envvar is True:
envvar = ddef['name']
elif isinstance(envvar, str):
envvar = envvar.upper()
else:
msg = ("Arg envvar must be either:\n"
+ "\t- None: set to default ({})\n".format(ddef['envvar'])
+ "\t- False: no setting of environment variable\n"
+ "\t- True: set default env. var. ({})\n".format(ddef['name'])
+ "\t- str: set provided env. variable\n\n"
+ " you provided: {}".format(envvar))
raise Exception(msg)
if envvar is not False and envvar in os.environ.keys():
if dbool['warn'] is True:
msg = ("Chosen environment variable name already exists:\n"
+ "\t- {}: {}\n".format(envvar, os.environ[envvar])
+ " => Are you sure you want to change it?\n"
+ " use force=True to overwrite {}\n".format(envvar)
+ " use warn=False to disable this warning")
warnings.warn(msg)
# --------------
# Fetch version from git tags, and write to version.py
# Also, when git is not available (PyPi package), use stored version.py
pfe = os.path.join(path, 'version.py')
if not os.path.isfile(pfe):
msg = ("It seems your current tofu install has no version.py:\n"
"\t- looked for: {}".format(pfe))
raise Exception(msg)
# --------------
# Read file
with open(pfe, 'r') as fh:
version = fh.read().strip().split("=")[-1].replace("'", '')
version = version.lower().replace('v', '').replace(' ', '')
# --------------
# Outputs
if dbool['verb'] is True:
print(version)
if envvar is not False:
c0 = ((envvar in os.environ.keys() and dbool['force'] is True)
or envvar not in os.environ.keys())
if c0 is True:
os.environ[envvar] = version
###################################################
###################################################
# bash call (main)
###################################################
[docs]def main():
# Parse input arguments
# Parse arguments
ddef, parser = _DPARSER['version']()
# Parse arguments
args = parser.parse_args()
# Call function
get_version(ddef=ddef, **dict(args._get_kwargs()))
if __name__ == '__main__':
main()