return obj
+
+ @classmethod
+ def version_codename(cls, name, version_or_codename):
+ """
+ Return (version, codename) based on one input, trying to infer
+ which we're given
+ """
+ codename = None
+ version = None
+
+ try:
+ codename = OS._version_to_codename(name, version_or_codename)
+ except KeyError:
+ pass
+
+ try:
+ version = OS._codename_to_version(name, version_or_codename)
+ except (KeyError, RuntimeError):
+ pass
+
+ if version:
+ codename = version_or_codename
+ elif codename:
+ version = version_or_codename
+ else:
+ raise KeyError('%s not a %s version or codename' %
+ (version_or_codename, name))
+ return version, codename
+
+
@staticmethod
def _get_value(str_, name):
regex = '^%s[:=](.+)' % name
from textwrap import dedent
from ..opsys import OS
+import pytest
class TestOS(object):
assert os.codename == 'maipo'
assert os.package_type == 'rpm'
+ def test_version_codename_success(self):
+ assert OS.version_codename('ubuntu', '14.04') == ('14.04', 'trusty')
+ assert OS.version_codename('ubuntu', 'trusty') == ('14.04', 'trusty')
+
+ def test_version_codename_failure(self):
+ with pytest.raises(KeyError) as excinfo:
+ OS.version_codename('ubuntu', 'frog')
+ assert excinfo.type == KeyError
+ assert 'frog' in excinfo.value.args[0]
+
def test_repr(self):
os = OS(name='NAME', version='0.1.2', codename='code')
assert repr(os) == "OS(name='NAME', version='0.1.2', codename='code')"