Skip to content

Commit

Permalink
replace assertions, raise ValueError instead
Browse files Browse the repository at this point in the history
  • Loading branch information
jpommerening committed Feb 16, 2014
1 parent b9a85da commit 2f9e413
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 19 deletions.
6 changes: 6 additions & 0 deletions slave/buildslave/commands/base.py
Expand Up @@ -130,6 +130,7 @@ class Command:
# sendStatus(dict) (zero or more)
# commandComplete() or commandInterrupted() (one, at end)

requiredArgs = []
debug = False
interrupted = False
running = False # set by Builder, cleared on shutdown or when the
Expand All @@ -142,6 +143,11 @@ def __init__(self, builder, stepId, args):
self.stepId = stepId # just for logging
self.args = args
self.startTime = None

missingArgs = filter(lambda arg: not arg in args, self.requiredArgs)
if missingArgs:
raise ValueError("%s is missing args: %s" %
(self.__class__.__name__, ", ".join(missingArgs)))
self.setup(args)

def setup(self, args):
Expand Down
40 changes: 21 additions & 19 deletions slave/buildslave/commands/fs.py
Expand Up @@ -31,11 +31,11 @@ class MakeDirectory(base.Command):

header = "mkdir"

# args['dir'] is relative to Builder directory, and is required.
requiredArgs = ['dir']

def start(self):
args = self.args
# args['dir'] is relative to Builder directory, and is required.
assert args['dir'] is not None
dirname = os.path.join(self.builder.basedir, args['dir'])
dirname = os.path.join(self.builder.basedir, self.args['dir'])

try:
if not os.path.isdir(dirname):
Expand All @@ -50,14 +50,15 @@ class RemoveDirectory(base.Command):

header = "rmdir"

# args['dir'] is relative to Builder directory, and is required.
requiredArgs = ['dir']

def setup(self, args):
self.logEnviron = args.get('logEnviron', True)

@defer.deferredGenerator
def start(self):
args = self.args
# args['dir'] is relative to Builder directory, and is required.
assert args['dir'] is not None
dirnames = args['dir']

self.timeout = args.get('timeout', 120)
Expand Down Expand Up @@ -143,18 +144,17 @@ class CopyDirectory(base.Command):

header = "cpdir"

# args['todir'] and args['fromdir'] are relative to Builder directory, and are required.
requiredArgs = ['todir', 'fromdir']

def setup(self, args):
self.logEnviron = args.get('logEnviron', True)

def start(self):
args = self.args
# args['todir'] is relative to Builder directory, and is required.
# args['fromdir'] is relative to Builder directory, and is required.
assert args['todir'] is not None
assert args['fromdir'] is not None

fromdir = os.path.join(self.builder.basedir, args['fromdir'])
todir = os.path.join(self.builder.basedir, args['todir'])
fromdir = os.path.join(self.builder.basedir, self.args['fromdir'])
todir = os.path.join(self.builder.basedir, self.args['todir'])

self.timeout = args.get('timeout', 120)
self.maxTime = args.get('maxTime', None)
Expand Down Expand Up @@ -196,11 +196,11 @@ class StatFile(base.Command):

header = "stat"

# args['file'] is relative to Builder directory, and is required.
requireArgs = ['file']

def start(self):
args = self.args
# args['dir'] is relative to Builder directory, and is required.
assert args['file'] is not None
filename = os.path.join(self.builder.basedir, args['file'])
filename = os.path.join(self.builder.basedir, self.args['file'])

try:
stat = os.stat(filename)
Expand All @@ -215,10 +215,12 @@ class ListDir(base.Command):

header = "listdir"

# args['dir'] is relative to Builder directory, and is required.
requireArgs = ['dir']

def start(self):
args = self.args
assert args['dir'] is not None
directory = os.path.join(self.builder.basedir, args['dir'])
directory = os.path.join(self.builder.basedir, self.args['dir'])

try:
files = os.listdir(directory)
self.sendStatus({'files': files})
Expand Down
13 changes: 13 additions & 0 deletions slave/buildslave/test/unit/test_commands_base.py
Expand Up @@ -51,6 +51,11 @@ def failCommand(self):
d.errback(RuntimeError("forced failure"))


class DummyArgsCommand(DummyCommand):

requiredArgs = ['workdir']


class TestDummyCommand(CommandTestMixin, unittest.TestCase):

def setUp(self):
Expand Down Expand Up @@ -129,3 +134,11 @@ def check(_):
self.assertState(True, False, True, True, "finishes with interrupted set")
d.addCallback(check)
return d

def test_required_args(self):
self.make_command(DummyArgsCommand, {'workdir': '.'})
try:
self.make_command(DummyArgsCommand, {'stdout': 'boo'})
except ValueError:
return
self.fail("Command was supposed to raise ValueError when missing args")

0 comments on commit 2f9e413

Please sign in to comment.