Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 28 additions & 29 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,11 +1,3 @@
language: python
python:
- '2.7'
install:
- pip install .
- pip install unittest2
script:
- echo "No tests"
before_deploy:
- wget https://github.com/jgm/pandoc/releases/download/1.19.1/pandoc-1.19.1-1-amd64.deb
-O $TRAVIS_BUILD_DIR/pandoc.deb
Expand All @@ -18,37 +10,44 @@ deploy:
api_key:
secure: siQVd277FRApq4RSiq3149zA+2OcPVu7wmh0Qv/U5AUBTJRv4sKP9VV8lKLjgKmmFUsq2lxxe+ENPk66jD0OSp4ZBHTdVAI2k3W9xeuUO/b8ol+peXt78uOnuNIdNyrJPuQYcPVhzKaeUh5lBmLGQrOCJi10foPJK6r2zkvMAB6jvvYhczE/KWCpBKLmC1YI2fwlqUWPeO6agLDnZ3XhHxJaKkTwcBAmQ50qWaUaMf/E8TMfz7L+cGedVBaR1ml6+Te1NN5uw09y/RaEb9UVYREz4zgYz5dhevmXiX8OG9pSxwJApIsejF47LYI2xoIjhaeysf1RpsYurbz3BFUHT9cVaP3BkBNiDRenPrhhyAPe+U/Xv5N9CWn9t7rKB/0gncBx+GyVgAKu5EkyHuGWhOA5knMWaUAB057w5hKBBKReYclrtNlPUWYjAE/s3vTaUSuUej1bCRr9y1noIiMxwGeYTwGfc3TFoMJVFVM6SBN7E22l5PHISqcjBch2/dtCsaHHdxi5PIxb61UPSREQ6c6hzIfu2gWrKpLuDFs8z78xxGUrG4peIRr3jZ6MUhi0Fw1LFFkKSvtXe3HQ2sdzMy7G91gj5hajtPXJ+ZWV6xvS5FU/Vh2bZroJvhnOJM9OV+qjI596OZ19E6XfA3BwHwS+cFG7jLD2+e8fFSe/Hz0=
file:
- LICENSE
- README.md
- setup.py
- basescript/basescript.py
- basescript/__init__.py
- basescript/log.py
- basescript/utils.py
- examples/adder.py
- examples/helloworld.py
- LICENSE
- README.md
- setup.py
- basescript/basescript.py
- basescript/__init__.py
- basescript/log.py
- basescript/utils.py
- examples/adder.py
- examples/helloworld.py
name: basescript-0.3.1
tag_name: 0.3.1
on:
true:
repo: deep-compute/basescript
- provider: pypi
distributions: "sdist bdist_wheel"
distributions: sdist bdist_wheel
server: https://test.pypi.org/legacy/
skip_cleanup: true
user: "deepcompute"
user: deepcompute
password:
secure: "fkHbFReSrTMDhMP1T26rlk0jVwmWyz8AkJqjThLWd0JBzxpAzLpeDCweCFuJk9hk1bnVnbJN/SgRBcRyYDkGCrarEtu3WkesGnIaqFKbMnu5Zwytex3ghPDK4ZK6+GVYSyljbYJUYXDZLMRoumiMOm7IHGVZ8soA02XNy7lBe36o5Dj3QfpRGUZLb2/nbMWIBvltecuhMk66yWKkSlwy0RjsOTn9XwjtTr5hGC6XD9kdC6NUeK6eSmdU/pa6DyOVSoKXEBims100g4gfOck5P8gXq8ssGVnWDkU9pvTKz085ayeepVDMygI5xug1U2zM3dTvTsRnsjr3B4FsAewfc9uh/sfFpr3v2oOIdUARf2sphJEja+0Z606s9DfxFMWHopouG9JDmzPwZBJNhJRIVW93VfODsUPejKtWJd259SfNRioj+ORP4b7wVQVfjvZM5CifDKrlMTBp1adt4bE8C/DepcezwgKLjRiGU0N0ndg7oJ9XcxUppzOwtEAPx0rLymWCz03O2gCXbr5NrtFZ/kbzPpMhDW1cnSW8zTzSQpzpXrqj5la+KIBynIp+EQZdxvM3NOyHFkpswOr1bsaFSmJ96ejrohIUq95FamQI6l8yo8iJiqROTLw6YUbcLa+F8qEP8ZdthPv98uV0ZAddduO9nysWzu2Hit3bXT4dQ3U="
on:
secure: fkHbFReSrTMDhMP1T26rlk0jVwmWyz8AkJqjThLWd0JBzxpAzLpeDCweCFuJk9hk1bnVnbJN/SgRBcRyYDkGCrarEtu3WkesGnIaqFKbMnu5Zwytex3ghPDK4ZK6+GVYSyljbYJUYXDZLMRoumiMOm7IHGVZ8soA02XNy7lBe36o5Dj3QfpRGUZLb2/nbMWIBvltecuhMk66yWKkSlwy0RjsOTn9XwjtTr5hGC6XD9kdC6NUeK6eSmdU/pa6DyOVSoKXEBims100g4gfOck5P8gXq8ssGVnWDkU9pvTKz085ayeepVDMygI5xug1U2zM3dTvTsRnsjr3B4FsAewfc9uh/sfFpr3v2oOIdUARf2sphJEja+0Z606s9DfxFMWHopouG9JDmzPwZBJNhJRIVW93VfODsUPejKtWJd259SfNRioj+ORP4b7wVQVfjvZM5CifDKrlMTBp1adt4bE8C/DepcezwgKLjRiGU0N0ndg7oJ9XcxUppzOwtEAPx0rLymWCz03O2gCXbr5NrtFZ/kbzPpMhDW1cnSW8zTzSQpzpXrqj5la+KIBynIp+EQZdxvM3NOyHFkpswOr1bsaFSmJ96ejrohIUq95FamQI6l8yo8iJiqROTLw6YUbcLa+F8qEP8ZdthPv98uV0ZAddduO9nysWzu2Hit3bXT4dQ3U=
true:
branch: master
tags: false
# pypi
- provider: pypi
distributions: "sdist bdist_wheel"
distributions: sdist bdist_wheel
skip_cleanup: true
user: "deepcompute"
password:
secure: "fkHbFReSrTMDhMP1T26rlk0jVwmWyz8AkJqjThLWd0JBzxpAzLpeDCweCFuJk9hk1bnVnbJN/SgRBcRyYDkGCrarEtu3WkesGnIaqFKbMnu5Zwytex3ghPDK4ZK6+GVYSyljbYJUYXDZLMRoumiMOm7IHGVZ8soA02XNy7lBe36o5Dj3QfpRGUZLb2/nbMWIBvltecuhMk66yWKkSlwy0RjsOTn9XwjtTr5hGC6XD9kdC6NUeK6eSmdU/pa6DyOVSoKXEBims100g4gfOck5P8gXq8ssGVnWDkU9pvTKz085ayeepVDMygI5xug1U2zM3dTvTsRnsjr3B4FsAewfc9uh/sfFpr3v2oOIdUARf2sphJEja+0Z606s9DfxFMWHopouG9JDmzPwZBJNhJRIVW93VfODsUPejKtWJd259SfNRioj+ORP4b7wVQVfjvZM5CifDKrlMTBp1adt4bE8C/DepcezwgKLjRiGU0N0ndg7oJ9XcxUppzOwtEAPx0rLymWCz03O2gCXbr5NrtFZ/kbzPpMhDW1cnSW8zTzSQpzpXrqj5la+KIBynIp+EQZdxvM3NOyHFkpswOr1bsaFSmJ96ejrohIUq95FamQI6l8yo8iJiqROTLw6YUbcLa+F8qEP8ZdthPv98uV0ZAddduO9nysWzu2Hit3bXT4dQ3U="
on:
user: deepcompute
password:
secure: fkHbFReSrTMDhMP1T26rlk0jVwmWyz8AkJqjThLWd0JBzxpAzLpeDCweCFuJk9hk1bnVnbJN/SgRBcRyYDkGCrarEtu3WkesGnIaqFKbMnu5Zwytex3ghPDK4ZK6+GVYSyljbYJUYXDZLMRoumiMOm7IHGVZ8soA02XNy7lBe36o5Dj3QfpRGUZLb2/nbMWIBvltecuhMk66yWKkSlwy0RjsOTn9XwjtTr5hGC6XD9kdC6NUeK6eSmdU/pa6DyOVSoKXEBims100g4gfOck5P8gXq8ssGVnWDkU9pvTKz085ayeepVDMygI5xug1U2zM3dTvTsRnsjr3B4FsAewfc9uh/sfFpr3v2oOIdUARf2sphJEja+0Z606s9DfxFMWHopouG9JDmzPwZBJNhJRIVW93VfODsUPejKtWJd259SfNRioj+ORP4b7wVQVfjvZM5CifDKrlMTBp1adt4bE8C/DepcezwgKLjRiGU0N0ndg7oJ9XcxUppzOwtEAPx0rLymWCz03O2gCXbr5NrtFZ/kbzPpMhDW1cnSW8zTzSQpzpXrqj5la+KIBynIp+EQZdxvM3NOyHFkpswOr1bsaFSmJ96ejrohIUq95FamQI6l8yo8iJiqROTLw6YUbcLa+F8qEP8ZdthPv98uV0ZAddduO9nysWzu2Hit3bXT4dQ3U=
true:
branch: master
# only when there is a release it will update pypi
tags: true
install:
- pip install .
- pip install unittest2
language: python
python:
- '2.7'
script:
- docker run -v $(pwd):/app deepcompute/black:python-black-latest --check .
- echo "No tests"
95 changes: 57 additions & 38 deletions basescript/basescript.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,21 @@
from .log import init_logger
from deeputil import Dummy


class BaseScript(object):
DESC = 'Base script abstraction'
DESC = "Base script abstraction"
METRIC_GROUPING_INTERVAL = 1

def __init__(self, args=None):
# argparse parser obj
self.parser = argparse.ArgumentParser(description=self.DESC)
self.define_baseargs(self.parser)

self.subcommands = self.parser.add_subparsers(title='commands')
self.subcommands.dest = 'commands'
self.subcommands = self.parser.add_subparsers(title="commands")
self.subcommands.dest = "commands"
self.subcommands.required = True
self.define_subcommands(self.subcommands)
self.subcommand_run = self.subcommands.add_parser('run')
self.subcommand_run = self.subcommands.add_parser("run")
self.subcommand_run.set_defaults(func=self.run)

self.define_args(self.subcommand_run)
Expand All @@ -34,12 +35,12 @@ def __init__(self, args=None):

if self.args.debug:
if self.args.log_level is None:
self.args.log_level = 'debug'
self.args.log_level = "debug"
if self.args.metric_grouping_interval is None:
self.args.metric_grouping_interval = 0

if not self.args.log_level:
self.args.log_level = 'info'
self.args.log_level = "info"
self.args.metric_grouping_interval = self.METRIC_GROUPING_INTERVAL

if self.args.metric_grouping_interval is None:
Expand All @@ -52,22 +53,22 @@ def __init__(self, args=None):
fpath=self.args.log_file,
pre_hooks=self.define_log_pre_format_hooks(),
post_hooks=self.define_log_post_format_hooks(),
metric_grouping_interval=self.args.metric_grouping_interval
metric_grouping_interval=self.args.metric_grouping_interval,
)

self._flush_metrics_q = log._force_flush_q
self.log = log.bind(name=self.args.name)

self.stats = Dummy()

args = { n: getattr(self.args, n) for n in vars(self.args) }
args['func'] = self.args.func.__name__
args = {n: getattr(self.args, n) for n in vars(self.args)}
args["func"] = self.args.func.__name__
self.log.debug("basescript init", **args)

def start(self):
'''
"""
Starts execution of the script
'''
"""
# invoke the appropriate sub-command as requested from command-line
try:
self.args.func()
Expand All @@ -88,7 +89,7 @@ def start(self):

@property
def name(self):
return '.'.join([x for x in (sys.argv[0].split('.')[0], self.args.name) if x])
return ".".join([x for x in (sys.argv[0].split(".")[0], self.args.name) if x])

def define_log_pre_format_hooks(self):
"""
Expand All @@ -110,48 +111,67 @@ def define_log_post_format_hooks(self):
return []

def define_subcommands(self, subcommands):
'''
"""
Define subcommands (as defined at https://docs.python.org/2/library/argparse.html#sub-commands)

eg: adding a sub-command called "blah" that invokes a function fn_blah

blah_command = subcommands.add_parser('blah')
blah_command.set_defaults(func=fn_blah)
'''
"""
pass

def define_baseargs(self, parser):
'''
"""
Define basic command-line arguments required by the script.
@parser is a parser object created using the `argparse` module.
returns: None
'''
parser.add_argument('--name', default=sys.argv[0],
help='Name to identify this instance')
parser.add_argument('--log-level', default=None,
help='Logging level as picked from the logging module')
parser.add_argument('--log-format', default=None,
"""
parser.add_argument(
"--name", default=sys.argv[0], help="Name to identify this instance"
)
parser.add_argument(
"--log-level",
default=None,
help="Logging level as picked from the logging module",
)
parser.add_argument(
"--log-format",
default=None,
# TODO add more formats
choices=("json", "pretty",),
help=("Force the format of the logs. By default, if the "
"command is from a terminal, print colorful logs. "
"Otherwise print json."),
choices=("json", "pretty"),
help=(
"Force the format of the logs. By default, if the "
"command is from a terminal, print colorful logs. "
"Otherwise print json."
),
)
parser.add_argument('--log-file', default=None,
help='Writes logs to log file if specified, default: %(default)s',
parser.add_argument(
"--log-file",
default=None,
help="Writes logs to log file if specified, default: %(default)s",
)
parser.add_argument('--quiet', default=False, action="store_true",
help='if true, does not print logs to stderr, default: %(default)s',
parser.add_argument(
"--quiet",
default=False,
action="store_true",
help="if true, does not print logs to stderr, default: %(default)s",
)
parser.add_argument('--metric-grouping-interval', default=None, type=int,
help='To group metrics based on time interval ex:10 i.e;(10 sec)',
parser.add_argument(
"--metric-grouping-interval",
default=None,
type=int,
help="To group metrics based on time interval ex:10 i.e;(10 sec)",
)
parser.add_argument('--debug', default=False, action="store_true",
help='To run the code in debug mode',
parser.add_argument(
"--debug",
default=False,
action="store_true",
help="To run the code in debug mode",
)

def define_args(self, parser):
'''
"""
Define script specific command-line arguments.
@parser is a parser object created using the `argparse` module.

Expand All @@ -160,12 +180,11 @@ def define_args(self, parser):
module.

returns: None
'''
"""
pass

def run(self):
'''
"""
Override this method to define logic for `run` sub-command
'''
"""
pass

Loading