diff options
author | Sam Thursfield <sam.thursfield@codethink.co.uk> | 2015-07-30 17:18:56 +0000 |
---|---|---|
committer | Baserock Gerrit <gerrit@baserock.org> | 2015-08-18 13:22:01 +0000 |
commit | 12cb150d6b66ee6b23c81c36ad34a35e9c9cbdd5 (patch) | |
tree | fb4348357d3e96334a59389de1751b06de855dd4 /morphlib/definitions_version.py | |
parent | c34838b5d7c613b6be24480de6104ee1270404f3 (diff) | |
download | morph-12cb150d6b66ee6b23c81c36ad34a35e9c9cbdd5.tar.gz |
Move definitions VERSION parsing code into its own definitions_version module
I need to use this outside of the 'sourceresolver' module. Also, the
'sourceresolver' module is too big.
Change-Id: I523bcc9555193b7369768441b72f1059e6adde5c
Diffstat (limited to 'morphlib/definitions_version.py')
-rw-r--r-- | morphlib/definitions_version.py | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/morphlib/definitions_version.py b/morphlib/definitions_version.py new file mode 100644 index 00000000..44bed178 --- /dev/null +++ b/morphlib/definitions_version.py @@ -0,0 +1,78 @@ +# Copyright (C) 2015 Codethink Limited +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see <http://www.gnu.org/licenses/>. +# +# =*= License: GPL-2 =*= + + +'''Functions for dealing with the definitions VERSION marker file.''' + + +import cliapp +import yaml + +import morphlib + + +SUPPORTED_VERSIONS = [3, 4, 5, 6] + + +class DefinitionsVersionError(cliapp.AppException): + pass + + +class UnknownVersionError(DefinitionsVersionError): # pragma: no cover + def __init__(self, version): + DefinitionsVersionError.__init__( + self, "Definitions format version %s is not supported" % version) + + +class InvalidVersionFileError(DefinitionsVersionError): # pragma: no cover + def __init__(self): + DefinitionsVersionError.__init__(self, "invalid VERSION file") + + +def parse_version_file(version_text): + '''Parse VERSION file and return the version of the format if: + + VERSION is a YAML file + and it's a dict + and has the key 'version' + and the type stored in the 'version' key is an int + + otherwise returns None + + ''' + yaml_obj = yaml.safe_load(version_text) + + return (yaml_obj['version'] if yaml_obj is not None + and isinstance(yaml_obj, dict) + and 'version' in yaml_obj + and isinstance(yaml_obj['version'], int) + + else None) + + +def check_version_file(version_text): # pragma: no cover + '''Check the VERSION information is valid and is a supported version.''' + + if version_text == None: + raise InvalidVersionFileError() + + version = morphlib.definitions_version.parse_version_file(version_text) + + if version == None: + raise InvalidVersionFileError() + + if version not in SUPPORTED_VERSIONS: + raise UnknownVersionError(version) |