"7": "wheezy",
"8": "jessie",
},
+ "rhel": {
+ "7": "maipo",
+ "6": "santiago",
+ },
+ "centos": {
+ "7": "core",
+ "6": "core",
+ }
}
DEFAULT_OS_VERSION = dict(
def __init__(self, name=None, version=None, codename=None):
self.name = name
- self.version = version
- self.codename = codename
+ self.version = version or self._codename_to_version(name, codename)
+ self.codename = codename or self._version_to_codename(name, version)
self._set_package_type()
+ @staticmethod
+ def _version_to_codename(name, version):
+ for (_version, codename) in DISTRO_CODENAME_MAP[name].iteritems():
+ if version == _version or version.split('.')[0] == _version:
+ return codename
+ raise RuntimeError("No codename found for %s %s !" % (
+ name,
+ version,
+ ))
+
+ @staticmethod
+ def _codename_to_version(name, codename):
+ for (version, _codename) in DISTRO_CODENAME_MAP[name].iteritems():
+ if codename == _codename:
+ return version
+ raise RuntimeError("No version found for %s %s !" % (
+ name,
+ codename,
+ ))
+
@classmethod
def from_python(cls, python_val):
"""
name = 'centos'
elif name.startswith('fedora'):
name = 'fedora'
- obj = cls()
- obj.name = name
- obj.version = version
- obj.codename = codename.lower()
- obj._set_package_type()
+ obj = cls(name=name, version=version, codename=codename.lower())
return obj
@classmethod
Additionally, we set the package type:
package_type = 'deb'
"""
- obj = cls()
str_ = lsb_release_str.strip()
- name = obj._get_value(str_, 'Distributor ID')
+ name = cls._get_value(str_, 'Distributor ID')
if name == 'RedHatEnterpriseServer':
name = 'rhel'
- obj.name = name.lower()
-
- obj.version = obj._get_value(str_, 'Release')
- obj.codename = obj._get_value(str_, 'Codename').lower()
+ name = name.lower()
- obj._set_package_type()
+ version = cls._get_value(str_, 'Release')
+ codename = cls._get_value(str_, 'Codename').lower()
+ obj = cls(name=name, version=version, codename=codename)
return obj
Additionally, we set the package type:
package_type = 'deb'
"""
- obj = cls()
str_ = os_release_str.strip()
- obj.name = cls._get_value(str_, 'ID').lower()
- obj.version = cls._get_value(str_, 'VERSION_ID')
- obj.codename = None
-
- obj._set_package_type()
+ name = cls._get_value(str_, 'ID').lower()
+ version = cls._get_value(str_, 'VERSION_ID')
+ obj = cls(name=name, version=version)
return obj
os = OS.from_os_release(self.str_centos_7_os_release)
assert os.name == 'centos'
assert os.version == '7'
- assert os.codename is None
+ assert os.codename == 'core'
assert os.package_type == 'rpm'
def test_debian_7_lsb_release(self):
os = OS.from_os_release(self.str_debian_7_os_release)
assert os.name == 'debian'
assert os.version == '7'
- assert os.codename is None
+ assert os.codename == 'wheezy'
assert os.package_type == 'deb'
def test_ubuntu_12_04_python(self):
os = OS.from_os_release(self.str_ubuntu_12_04_os_release)
assert os.name == 'ubuntu'
assert os.version == '12.04'
- assert os.codename is None
+ assert os.codename == 'precise'
assert os.package_type == 'deb'
def test_rhel_6_4_lsb_release(self):
os = OS.from_os_release(self.str_rhel_7_os_release)
assert os.name == 'rhel'
assert os.version == '7.0'
- assert os.codename is None
+ assert os.codename == 'maipo'
assert os.package_type == 'rpm'
def test_repr(self):
os = OS(name='NAME', version='0.1.2', codename='code')
ref_dict = dict(name='NAME', version='0.1.2', codename='code')
assert os.to_dict() == ref_dict
+
+ def test_version_no_codename(self):
+ os = OS(name='ubuntu', version='16.04')
+ assert os.codename == 'xenial'
+
+ def test_codename_no_version(self):
+ os = OS(name='ubuntu', codename='trusty')
+ assert os.version == '14.04'