Ejemplo n.º 1
0
 def __validate_environment(self, name, environment):
     for (key, val) in environment.items():
         if not type(key) is str:
             raise InvalidManifestError()
         if not (val is None or type(val) is str):
             raise InvalidManifestError(
                 name + ".environment: Expected a string or null: " + key)
Ejemplo n.º 2
0
 def __validate_placeholder_expansion(self, text, dummymap, location=None):
     try:
         text.format_map(dummymap)
     except KeyError as e:
         raise InvalidManifestError(location + ": Undefined placeholder: " +
                                    str(e))
     except ValueError as e:
         raise InvalidManifestError(
             location + ": Error during placeholder expansion: " + str(e))
Ejemplo n.º 3
0
 def _validate_stanza(self, name, definition):
     for (key, value) in definition.items():
         if key == 'description':
             if type(value) is not str:
                 raise InvalidManifestError(name + "." + key +
                                            ": Expected a string")
         elif key == 'cmdargs':
             if not _is_list_of_str(value):
                 raise InvalidManifestError(
                     name + "." + key + ": Expected an array of strings")
         elif key == 'setup':
             if type(value) is not dict:
                 raise InvalidManifestError(name + "." + key +
                                            ": Expected an object")
             self.__validate_setup(name, value)
         elif key in {'stdin', 'stdout', 'stderr'}:
             if type(value) is not str:
                 raise InvalidManifestError(name + "." + key +
                                            ": Expected a string")
         elif key == 'expect':
             if type(value) is not int:
                 raise InvalidManifestError(name + "." + key +
                                            ": Expected an integer")
         elif key == 'require':
             if type(value) is not dict:
                 raise InvalidManifestError(name + "." + key +
                                            ": Expected an object")
             self.__validate_require(name, value)
         elif type(key) is str:
             raise InvalidManifestError(name + "." + key +
                                        ": Unknown attribute")
         else:
             raise InvalidManifestError()
Ejemplo n.º 4
0
 def __validate_require(self, name, require):
     for (key, value) in require.items():
         if key == 'empty':
             if not _is_list_of_str(value):
                 raise InvalidManifestError(
                     name + ".require.empty: Expected an array of strings")
         elif key == 'equal':
             if not (_is_list_of_str(value) and len(value) == 2):
                 raise InvalidManifestError(
                     name +
                     ".require.empty: Expected an array of two strings")
         elif type(key) is str:
             raise InvalidManifestError(name + ".require." + key +
                                        ": Unknown attribute")
         else:
             raise InvalidManifestError()
Ejemplo n.º 5
0
 def __validate_setup(self, name, setup):
     for key in setup.keys():
         if not type(key) is str:
             raise InvalidManifestError()
         if not MacroManifestLoader.__PH_PATTERN.match(key):
             raise InvalidManifestError(
                 name + ".setup: Not a valid placeholder: " + key)
     dummymap = {key: '' for key in setup.keys()}
     for (key, value) in setup.items():
         if value is None:
             pass
         elif type(value) is str:
             self.__validate_placeholder_expansion(value, dummymap,
                                                   name + ".setup." + key)
         elif type(value) is list:
             if not all(type(s) is str for s in value):
                 raise InvalidManifestError(
                     name + ".setup." + key +
                     ": Expected an array of strings")
             if any('{' + key + '}' in s for s in value):
                 raise InvalidManifestError(name + ".setup." + key +
                                            ": Self-reference in recipe")
             if not value or not value[0].strip():
                 raise InvalidManifestError(name + ".setup." + key +
                                            ": Not a valid command")
             for text in value:
                 self.__validate_placeholder_expansion(
                     text, dummymap, name + ".setup." + key)
         else:
             raise InvalidManifestError(
                 name + ".setup." + key +
                 ": Expected 'null', a string or an array")
Ejemplo n.º 6
0
 def _validate_stanza(self, name, definition):
     if 'command' not in definition:
         raise InvalidManifestError(name + ": The 'command' attribute is required")
     for (key, value) in definition.items():
         if key == 'description':
             if type(value) is not str:
                 raise InvalidManifestError(name + "." + key + ": Expected a string")
         elif key == 'command':
             if type(value) is not list or not all(type(s) is str for s in value):
                 raise InvalidManifestError(name + "." + key + ": Expected an array of strings")
             if not value or not value[0].strip():
                 raise InvalidManifestError(name + "." + key + ": Command cannot be empty")
         elif type(key) is str:
             raise InvalidManifestError(name + "." + key + ": Unknown attribute")
         else:
             raise InvalidManifestError()