Skip to content

Commit

Permalink
Merge pull request #113 from nir0s/94-info-best
Browse files Browse the repository at this point in the history
Fixes #94, fixes #112: Improved and fixed info() function.
  • Loading branch information
nir0s committed Apr 20, 2016
2 parents c02ad0e + 5f0a82e commit 6970681
Show file tree
Hide file tree
Showing 3 changed files with 218 additions and 32 deletions.
4 changes: 0 additions & 4 deletions docs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -463,10 +463,6 @@ If you want to participate, please comment on the referenced issues.
and distro release file, vs. dropping them.
Please comment on `issue #95 <https://github.com/nir0s/ld/issues/95>`_.
.. [#todo3] Review whether :func:`ld.info` should use the first version or the
best version for its version related entries.
Please comment on `issue #94 <https://github.com/nir0s/ld/issues/94>`_.
.. [#todo5] Provide input on distros with a reliable ID that do not yet have
testcases:
Expand Down
51 changes: 27 additions & 24 deletions ld.py
Original file line number Diff line number Diff line change
Expand Up @@ -375,7 +375,7 @@ def codename():
return _ldi.codename()


def info():
def info(pretty=False, best=False):
"""
Return certain machine-readable information items about the current Linux
distribution in a dictionary, as shown in the following example:
Expand All @@ -402,19 +402,21 @@ def info():
* ``version``: The result of :func:`ld.version`.
* ``major``: The result of :func:`ld.major_version`.
* ``version_parts -> major``: The result of :func:`ld.major_version`.
* ``minor``: The result of :func:`ld.minor_version`.
* ``version_parts -> minor``: The result of :func:`ld.minor_version`.
* ``build_number``: The result of :func:`ld.build_number`.
* ``version_parts -> build_number``: The result of
:func:`ld.build_number`.
* ``like``: The result of :func:`ld.like`.
* ``codename``: The result of :func:`ld.codename`.
.. todo:: See [#todo3]_ on using the first or best version for this dict.
For a description of the *pretty* and *best* parameters, see the
:func:`ld.version` method.
"""
return _ldi.info()
return _ldi.info(pretty, best)


def os_release_info():
Expand Down Expand Up @@ -594,16 +596,16 @@ def __init__(self,
def __repr__(self):
return \
"LinuxDistribution(" \
"os_release_file=%r, " \
"distro_release_file=%r, " \
"_os_release_info=%r, " \
"_lsb_release_info=%r, " \
"_distro_release_info=%r)" % \
(self.os_release_file,
self.distro_release_file,
self._os_release_info,
self._lsb_release_info,
self._distro_release_info)
"os_release_file={0!r}, " \
"distro_release_file={1!r}, " \
"_os_release_info={2!r}, " \
"_lsb_release_info={3!r}, " \
"_distro_release_info={4!r})".format(
self.os_release_file,
self.distro_release_file,
self._os_release_info,
self._lsb_release_info,
self._distro_release_info)

def linux_distribution(self, full_distribution_name=True):
"""
Expand Down Expand Up @@ -716,23 +718,23 @@ def major_version(self, best=False):
For details, see :func:`ld.major_version`.
"""
return self.version_parts(best=best)[0]
return self.version_parts(best)[0]

def minor_version(self, best=False):
"""
Return the minor version number of the Linux distribution.
For details, see :func:`ld.minor_version`.
"""
return self.version_parts(best=best)[1]
return self.version_parts(best)[1]

def build_number(self, best=False):
"""
Return the build number of the Linux distribution.
For details, see :func:`ld.build_number`.
"""
return self.version_parts(best=best)[2]
return self.version_parts(best)[2]

def like(self):
"""
Expand All @@ -753,7 +755,7 @@ def codename(self):
or self.distro_release_attr('codename') \
or ''

def info(self):
def info(self, pretty=False, best=False):
"""
Return certain machine-readable information about the Linux
distribution.
Expand All @@ -762,13 +764,14 @@ def info(self):
"""
return dict(
id=self.id(),
version=self.version(),
version=self.version(pretty, best),
version_parts=dict(
major=self.major_version(),
minor=self.minor_version(),
build_number=self.build_number()
major=self.major_version(best),
minor=self.minor_version(best),
build_number=self.build_number(best)
),
like=self.like(),
codename=self.codename(),
)

def os_release_info(self):
Expand Down
195 changes: 191 additions & 4 deletions tests/test_ld.py
Original file line number Diff line number Diff line change
Expand Up @@ -1046,7 +1046,7 @@ def test_os_release_attr(self):
for key in info.keys():
self.assertEqual(info[key],
ldi.os_release_attr(key),
"distro: %s, key: %s" % (distro, key))
"distro: {0}, key: {1}".format(distro, key))

def test_lsb_release_attr(self):
distros = os.listdir(DISTROS)
Expand All @@ -1059,7 +1059,7 @@ def test_lsb_release_attr(self):
for key in info.keys():
self.assertEqual(info[key],
ldi.lsb_release_attr(key),
"distro: %s, key: %s" % (distro, key))
"distro: {0}, key: {1}".format(distro, key))

def test_distro_release_attr(self):
distros = os.listdir(DISTROS)
Expand All @@ -1072,10 +1072,10 @@ def test_distro_release_attr(self):
for key in info.keys():
self.assertEqual(info[key],
ldi.distro_release_attr(key),
"distro: %s, key: %s" % (distro, key))
"distro: {0}, key: {1}".format(distro, key))


class TestInfo(testtools.TestCase):
class TestInfo(DistroTestCase):

def setUp(self):
super(TestInfo, self).setUp()
Expand All @@ -1092,6 +1092,34 @@ def test_info(self):
self.assertEqual(info['version_parts']['major'], '7')
self.assertEqual(info['version_parts']['minor'], '0')
self.assertEqual(info['version_parts']['build_number'], '')
self.assertEqual(info['codename'], 'Maipo')

info = ldi.info(best=True)
self.assertEqual(info['id'], 'rhel')
self.assertEqual(info['version'], '7.0')
self.assertEqual(info['like'], 'fedora')
self.assertEqual(info['version_parts']['major'], '7')
self.assertEqual(info['version_parts']['minor'], '0')
self.assertEqual(info['version_parts']['build_number'], '')
self.assertEqual(info['codename'], 'Maipo')

info = ldi.info(pretty=True)
self.assertEqual(info['id'], 'rhel')
self.assertEqual(info['version'], '7.0 (Maipo)')
self.assertEqual(info['like'], 'fedora')
self.assertEqual(info['version_parts']['major'], '7')
self.assertEqual(info['version_parts']['minor'], '0')
self.assertEqual(info['version_parts']['build_number'], '')
self.assertEqual(info['codename'], 'Maipo')

info = ldi.info(pretty=True, best=True)
self.assertEqual(info['id'], 'rhel')
self.assertEqual(info['version'], '7.0 (Maipo)')
self.assertEqual(info['like'], 'fedora')
self.assertEqual(info['version_parts']['major'], '7')
self.assertEqual(info['version_parts']['minor'], '0')
self.assertEqual(info['version_parts']['build_number'], '')
self.assertEqual(info['codename'], 'Maipo')

def test_none(self):
ldi = ld.LinuxDistribution(False, 'non', 'non')
Expand All @@ -1103,6 +1131,34 @@ def test_none(self):
self.assertEqual(info['version_parts']['major'], '')
self.assertEqual(info['version_parts']['minor'], '')
self.assertEqual(info['version_parts']['build_number'], '')
self.assertEqual(info['codename'], '')

info = ldi.info(best=True)
self.assertEqual(info['id'], '')
self.assertEqual(info['version'], '')
self.assertEqual(info['like'], '')
self.assertEqual(info['version_parts']['major'], '')
self.assertEqual(info['version_parts']['minor'], '')
self.assertEqual(info['version_parts']['build_number'], '')
self.assertEqual(info['codename'], '')

info = ldi.info(pretty=True)
self.assertEqual(info['id'], '')
self.assertEqual(info['version'], '')
self.assertEqual(info['like'], '')
self.assertEqual(info['version_parts']['major'], '')
self.assertEqual(info['version_parts']['minor'], '')
self.assertEqual(info['version_parts']['build_number'], '')
self.assertEqual(info['codename'], '')

info = ldi.info(pretty=True, best=True)
self.assertEqual(info['id'], '')
self.assertEqual(info['version'], '')
self.assertEqual(info['like'], '')
self.assertEqual(info['version_parts']['major'], '')
self.assertEqual(info['version_parts']['minor'], '')
self.assertEqual(info['version_parts']['build_number'], '')
self.assertEqual(info['codename'], '')

def test_linux_disribution(self):
ldi = ld.LinuxDistribution(False, self.rhel7_os_release)
Expand All @@ -1115,6 +1171,127 @@ def test_linux_disribution_full_false(self):
i = ldi.linux_distribution(full_distribution_name=False)
self.assertEqual(i, ('rhel', '7.0', 'Maipo'))

def test_all(self):
"""Test info() by comparing its results with the results of specific
consolidated accessor functions."""
distros = os.listdir(DISTROS)
for distro in distros:
self._setup_for_distro(os.path.join(DISTROS, distro))

ldi = ld.LinuxDistribution()

info = ldi.info()

self.assertEqual(info['id'],
ldi.id(),
"distro: {0}".format(distro))
self.assertEqual(info['version'],
ldi.version(),
"distro: {0}".format(distro))
self.assertEqual(info['version_parts']['major'],
ldi.major_version(),
"distro: {0}".format(distro))
self.assertEqual(info['version_parts']['minor'],
ldi.minor_version(),
"distro: {0}".format(distro))
self.assertEqual(info['version_parts']['build_number'],
ldi.build_number(),
"distro: {0}".format(distro))
self.assertEqual(info['like'],
ldi.like(),
"distro: {0}".format(distro))
self.assertEqual(info['codename'],
ldi.codename(),
"distro: {0}".format(distro))
self.assertEqual(len(info['version_parts']), 3,
"distro: {0}".format(distro))
self.assertEqual(len(info), 5,
"distro: {0}".format(distro))

info = ldi.info(best=True)

self.assertEqual(info['id'],
ldi.id(),
"distro: {0}".format(distro))
self.assertEqual(info['version'],
ldi.version(best=True),
"distro: {0}".format(distro))
self.assertEqual(info['version_parts']['major'],
ldi.major_version(best=True),
"distro: {0}".format(distro))
self.assertEqual(info['version_parts']['minor'],
ldi.minor_version(best=True),
"distro: {0}".format(distro))
self.assertEqual(info['version_parts']['build_number'],
ldi.build_number(best=True),
"distro: {0}".format(distro))
self.assertEqual(info['like'],
ldi.like(),
"distro: {0}".format(distro))
self.assertEqual(info['codename'],
ldi.codename(),
"distro: {0}".format(distro))
self.assertEqual(len(info['version_parts']), 3,
"distro: {0}".format(distro))
self.assertEqual(len(info), 5,
"distro: {0}".format(distro))

info = ldi.info(pretty=True)

self.assertEqual(info['id'],
ldi.id(),
"distro: {0}".format(distro))
self.assertEqual(info['version'],
ldi.version(pretty=True),
"distro: {0}".format(distro))
self.assertEqual(info['version_parts']['major'],
ldi.major_version(),
"distro: {0}".format(distro))
self.assertEqual(info['version_parts']['minor'],
ldi.minor_version(),
"distro: {0}".format(distro))
self.assertEqual(info['version_parts']['build_number'],
ldi.build_number(),
"distro: {0}".format(distro))
self.assertEqual(info['like'],
ldi.like(),
"distro: {0}".format(distro))
self.assertEqual(info['codename'],
ldi.codename(),
"distro: {0}".format(distro))
self.assertEqual(len(info['version_parts']), 3,
"distro: {0}".format(distro))
self.assertEqual(len(info), 5,
"distro: {0}".format(distro))

info = ldi.info(pretty=True, best=True)

self.assertEqual(info['id'],
ldi.id(),
"distro: {0}".format(distro))
self.assertEqual(info['version'],
ldi.version(pretty=True, best=True),
"distro: {0}".format(distro))
self.assertEqual(info['version_parts']['major'],
ldi.major_version(best=True),
"distro: {0}".format(distro))
self.assertEqual(info['version_parts']['minor'],
ldi.minor_version(best=True),
"distro: {0}".format(distro))
self.assertEqual(info['version_parts']['build_number'],
ldi.build_number(best=True),
"distro: {0}".format(distro))
self.assertEqual(info['like'],
ldi.like(),
"distro: {0}".format(distro))
self.assertEqual(info['codename'],
ldi.codename(),
"distro: {0}".format(distro))
self.assertEqual(len(info['version_parts']), 3,
"distro: {0}".format(distro))
self.assertEqual(len(info), 5,
"distro: {0}".format(distro))


class TestOSReleaseParsing(testtools.TestCase):
"""Test the parsing of os-release files."""
Expand Down Expand Up @@ -1430,7 +1607,17 @@ def test_global(self):
MODULE_LDI.codename())

self.assertEqual(ld.info(),
MODULE_LDI.info(best=False))
self.assertEqual(ld.info(best=False),
MODULE_LDI.info())
self.assertEqual(ld.info(best=True),
MODULE_LDI.info(best=True))
self.assertEqual(ld.info(),
MODULE_LDI.info(pretty=False))
self.assertEqual(ld.info(pretty=False),
MODULE_LDI.info())
self.assertEqual(ld.info(pretty=True),
MODULE_LDI.info(pretty=True))

self.assertEqual(ld.os_release_info(),
MODULE_LDI.os_release_info())
Expand Down

0 comments on commit 6970681

Please sign in to comment.