diff options
author | Tiago Gomes <tiago.gomes@codethink.co.uk> | 2015-11-12 15:48:07 +0000 |
---|---|---|
committer | Pedro Alvarez <pedro.alvarez@codethink.co.uk> | 2016-03-25 21:02:34 +0000 |
commit | bfecb5c86bb6e80e8cd89b2ab87952024bd801f9 (patch) | |
tree | 65f0d835b10bdba3045795523a7830956533ac90 /morphlib/morphloader.py | |
parent | ddb8b27d5056074013a89d8ab277e39fdc1f069d (diff) | |
download | morph-bfecb5c86bb6e80e8cd89b2ab87952024bd801f9.tar.gz |
morphloader: add missing validation to stratum chunks
Change-Id: I7268b732ab0e37a198cd0484f491334ff456de2b
Diffstat (limited to 'morphlib/morphloader.py')
-rw-r--r-- | morphlib/morphloader.py | 54 |
1 files changed, 25 insertions, 29 deletions
diff --git a/morphlib/morphloader.py b/morphlib/morphloader.py index 0160e419..3e735a41 100644 --- a/morphlib/morphloader.py +++ b/morphlib/morphloader.py @@ -59,6 +59,17 @@ class MissingFieldError(MorphologyValidationError): 'Missing field %s from morphology %s' % (field, morphology_name)) +class InvalidStringError(MorphologyValidationError): + + def __init__(self, field, spec, morph_filename): + self.field = field + self.spec = spec + self.morph_filename = morph_filename + MorphologyValidationError.__init__( + self, "Field '%(field)s' must be a non-empty string in %(spec)s"\ + " for morphology %(morph_filename)s" % locals()) + + class InvalidFieldError(MorphologyValidationError): def __init__(self, field, morphology_name): @@ -127,27 +138,6 @@ class DuplicateChunkError(MorphologyValidationError): 'in stratum %(stratum_name)s' % locals()) -class EmptyRefError(MorphologyValidationError): - - def __init__(self, ref_location, morph_filename): - self.ref_location = ref_location - self.morph_filename = morph_filename - MorphologyValidationError.__init__( - self, 'Empty ref found for %(ref_location)s '\ - 'in %(morph_filename)s' % locals()) - - -class ChunkSpecRefNotStringError(MorphologyValidationError): - - def __init__(self, ref_value, chunk_name, stratum_name): - self.ref_value = ref_value - self.chunk_name = chunk_name - self.stratum_name = stratum_name - MorphologyValidationError.__init__( - self, 'Ref %(ref_value)s for %(chunk_name)s '\ - 'in stratum %(stratum_name)s is not a string' % locals()) - - class ChunkSpecConflictingFieldsError(MorphologyValidationError): def __init__(self, fields, chunk_name, stratum_name): @@ -547,14 +537,20 @@ class MorphologyLoader(object): for spec in morph['chunks']: chunk_name = spec['name'] - # All chunk refs must be strings. - if 'ref' in spec: - ref = spec['ref'] - if ref == None: - raise EmptyRefError(spec['name'], morph.filename) - elif not isinstance(ref, basestring): - raise ChunkSpecRefNotStringError( - ref, spec['name'], morph.filename) + # All chunks repos and refs must be strings + + def validate_chunk_str_field(field, spec, morph_filename): + if field not in spec: + raise MissingFieldError('%s in %s' % (field, spec), + morph.filename) + val = spec[field] + if not val or not isinstance(val, basestring) or ( + not val.strip()): + raise InvalidStringError( + field, spec, morph_filename) + + validate_chunk_str_field('repo', spec, morph.filename) + validate_chunk_str_field('ref', spec, morph.filename) # The build-depends field must be a list. if 'build-depends' in spec: |