Skip to content
Snippets Groups Projects
Commit 7737a04e authored by Nathan Hertz's avatar Nathan Hertz
Browse files

Added type hinting to functions and methods. PEP8-ified things.

parent db664100
No related branches found
No related tags found
No related merge requests found
...@@ -7,9 +7,6 @@ from setuptools import setup ...@@ -7,9 +7,6 @@ from setuptools import setup
VERSION = open('src/null/_version.py').readlines()[-1].split()[-1].strip("\"'") VERSION = open('src/null/_version.py').readlines()[-1].split()[-1].strip("\"'")
README = Path('README.md').read_text() README = Path('README.md').read_text()
# requires = [
# ]
tests_require = [ tests_require = [
'pytest>=5.4,<6.0' 'pytest>=5.4,<6.0'
] ]
...@@ -22,11 +19,10 @@ setup( ...@@ -22,11 +19,10 @@ setup(
author_email='dms-ssa@nrao.edu', author_email='dms-ssa@nrao.edu',
url='TBD', url='TBD',
license="GPL", license="GPL",
# install_requires=requires,
tests_require=tests_require, tests_require=tests_require,
keywords=[], keywords=[],
packages=['null'], packages=['null'],
package_dir={'':'src'}, package_dir={'': 'src'},
classifiers=[ classifiers=[
'Programming Language :: Python :: 3.8' 'Programming Language :: Python :: 3.8'
], ],
......
...@@ -16,47 +16,75 @@ logger = logging.getLogger("null") ...@@ -16,47 +16,75 @@ logger = logging.getLogger("null")
logger.setLevel(logging.INFO) logger.setLevel(logging.INFO)
handler = logging.StreamHandler(stream=sys.stdout) handler = logging.StreamHandler(stream=sys.stdout)
class Null:
def __init__(self, args, verbose):
self.args = args
if verbose:
logger.setLevel(logging.DEBUG)
self.args_to_funcs = {
'print-error': self.print_error,
'greeting': self.print_greeting,
'exit-fail': self.exit_with_failure,
'exit-random': self.exit_randomly,
'nap': self.take_nap,
'dump': self.dump_core
}
def print_error(self): def print_error():
logger.removeHandler(handler) """
err_handler = logging.StreamHandler(stream=sys.stderr) Logs an error message to stderr.
logger.addHandler(err_handler) """
logger.error("ERROR: This is an error.") logger.removeHandler(handler)
err_handler = logging.StreamHandler(stream=sys.stderr)
logger.addHandler(err_handler)
logger.error("ERROR: This is an error.")
def print_greeting():
"""
Prints a friendly greeting to stdout
"""
logger.info("Hello, world!")
logger.debug("And goodbye, world...")
def exit_with_failure():
"""
Exits with status code -1
"""
logger.error("Error purposefully induced. Exiting with status code -1...")
sys.exit(-1)
def exit_randomly():
"""
Exits with a random status code between -50 and 50
"""
status_code = random.randint(-50, 50)
logger.debug("Exiting with status code {}".format(status_code))
sys.exit(status_code)
def print_greeting(self):
logger.info("Hello, world!")
logger.debug("And goodbye, world...")
def exit_with_failure(self): def take_nap():
logger.error("Error purposefully induced. Exiting with status code -1...") """
sys.exit(-1) Sleeps for 5 seconds
"""
logger.debug("Going to sleep...")
time.sleep(5)
logger.debug("Waking up.")
def exit_randomly(self):
status_code = random.randint(-50, 50)
logger.debug("Exiting with status code {}".format(status_code))
sys.exit(status_code)
def take_nap(self): def dump_core():
logger.debug("Going to sleep...") """
time.sleep(5) Makes a call to os.abort() which dumps the core
logger.debug("Waking up.") """
logger.debug("Aborting and dumping core...", stack_info=True)
os.abort()
def dump_core(self): class Null:
logger.debug("Aborting and dumping core...", stack_info=True) """
os.abort() Null executable that executes null functionality based on arguments given
"""
def __init__(self, args: argparse.Namespace, verbose: bool):
self.args = args
if verbose:
logger.setLevel(logging.DEBUG)
self.args_to_funcs = {
'print-error': print_error,
'greeting': print_greeting,
'exit-fail': exit_with_failure,
'exit-random': exit_randomly,
'nap': take_nap,
'dump': dump_core
}
def execute(self): def execute(self):
""" """
...@@ -66,7 +94,8 @@ class Null: ...@@ -66,7 +94,8 @@ class Null:
if val and arg in self.args_to_funcs: if val and arg in self.args_to_funcs:
self.args_to_funcs[arg]() self.args_to_funcs[arg]()
def make_arg_parser():
def make_arg_parser() -> argparse.ArgumentParser:
""" """
Creates an argparse arguments parser with appropriate options Creates an argparse arguments parser with appropriate options
:return: Said argument parser :return: Said argument parser
...@@ -99,6 +128,7 @@ def make_arg_parser(): ...@@ -99,6 +128,7 @@ def make_arg_parser():
help='abort program and dump core') help='abort program and dump core')
return parser return parser
def main(): def main():
arg_parser = make_arg_parser() arg_parser = make_arg_parser()
args = arg_parser.parse_args() args = arg_parser.parse_args()
...@@ -107,5 +137,6 @@ def main(): ...@@ -107,5 +137,6 @@ def main():
executable = Null(args, args.verbose) executable = Null(args, args.verbose)
executable.execute() executable.execute()
if __name__ == '__main__': if __name__ == '__main__':
main() main()
\ No newline at end of file
...@@ -3,33 +3,39 @@ import argparse ...@@ -3,33 +3,39 @@ import argparse
from null.null import Null from null.null import Null
@pytest.fixture() @pytest.fixture()
def null(): def null():
null = Null(argparse.Namespace(), True) null = Null(argparse.Namespace(), True)
return null return null
def test_print_error(null, caplog): def test_print_error(null, caplog):
null.print_error() null.print_error()
assert 'ERROR: This is an error.' in caplog.text assert 'ERROR: This is an error.' in caplog.text
def test_print_greeting(null, caplog): def test_print_greeting(null, caplog):
null.print_greeting() null.print_greeting()
assert 'Hello, world!' in caplog.text assert 'Hello, world!' in caplog.text
assert 'And goodbye, world...' in caplog.text assert 'And goodbye, world...' in caplog.text
def test_exit_with_failure(null, caplog): def test_exit_with_failure(null, caplog):
with pytest.raises(SystemExit) as e: with pytest.raises(SystemExit) as e:
null.exit_with_failure() null.exit_with_failure()
assert 'Error purposefully induced. Exiting with status code -1...' in caplog.text assert 'Error purposefully induced. Exiting with status code -1...' in caplog.text
assert e.value.code == -1 assert e.value.code == -1
def test_exit_randomly(null, caplog): def test_exit_randomly(null, caplog):
with pytest.raises(SystemExit) as e: with pytest.raises(SystemExit) as e:
null.exit_randomly() null.exit_randomly()
assert 'Exiting with status code' in caplog.text assert 'Exiting with status code' in caplog.text
assert -50 <= e.value.code <= 50 assert -50 <= e.value.code <= 50
def test_take_nap(null, caplog): def test_take_nap(null, caplog):
null.take_nap() null.take_nap()
assert 'Going to sleep...' in caplog.text assert 'Going to sleep...' in caplog.text
assert 'Waking up.' in caplog.text assert 'Waking up.' in caplog.text
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment