From dd9d6268ff27c7f57824becfabee4ecf0489b23e Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Sat, 27 May 2023 14:52:38 -0400 Subject: [PATCH] gsetup: Rework version string handling I split the function into two. Calling env_string() will return the string we generate with the versions of the various modules we depend on. Calling print_env() will print this string. I need env_string() so we can set the environment as a tooltip in the header. Signed-off-by: Anna Schumaker --- emmental/__init__.py | 2 +- emmental/gsetup.py | 47 ++++++++++++++++++++++++-------------------- tests/test_gsetup.py | 18 +++++++++++++++++ 3 files changed, 45 insertions(+), 22 deletions(-) diff --git a/emmental/__init__.py b/emmental/__init__.py index 9bc9e13..114791c 100644 --- a/emmental/__init__.py +++ b/emmental/__init__.py @@ -250,7 +250,7 @@ class Application(Adw.Application): """Handle any command line options.""" if opts.contains("version"): print(VERSION_STRING) - gsetup.print_versions() + gsetup.print_env() return 0 return -1 diff --git a/emmental/gsetup.py b/emmental/gsetup.py index f672ad6..1869bfa 100644 --- a/emmental/gsetup.py +++ b/emmental/gsetup.py @@ -40,26 +40,31 @@ def add_style(): CSS_PROVIDER, CSS_PRIORITY) -def __print_version(subsystem, major, minor, micro): - print(f" ⋅ {subsystem} {major}.{minor}.{micro}") +def __version_string(subsystem, major, minor, micro): + return f" ⋅ {subsystem} {major}.{minor}.{micro}" -def print_versions(): - """Print version information for libraries we use.""" - __print_version("Python", sys.version_info.major, sys.version_info.minor, - sys.version_info.micro) - __print_version("Gtk", gi.repository.Gtk.MAJOR_VERSION, - gi.repository.Gtk.MINOR_VERSION, - gi.repository.Gtk.MICRO_VERSION) - __print_version("Libadwaita", gi.repository.Adw.MAJOR_VERSION, - gi.repository.Adw.MINOR_VERSION, - gi.repository.Adw.MICRO_VERSION) - __print_version("GStreamer", gi.repository.Gst.version().major, - gi.repository.Gst.version().minor, - gi.repository.Gst.version().micro) - __print_version("Pango", gi.repository.Pango.VERSION_MAJOR, - gi.repository.Pango.VERSION_MINOR, - gi.repository.Pango.VERSION_MICRO) - __print_version("SQLite", sqlite3.sqlite_version_info[0], - sqlite3.sqlite_version_info[1], - sqlite3.sqlite_version_info[2]) +def env_string() -> str: + """Return a string with the version numbers of our dependencies.""" + gst = gi.repository.Gst.version() + strs = [__version_string("Python", sys.version_info.major, + sys.version_info.minor, sys.version_info.micro), + __version_string("Gtk", gi.repository.Gtk.MAJOR_VERSION, + gi.repository.Gtk.MINOR_VERSION, + gi.repository.Gtk.MICRO_VERSION), + __version_string("Libadwaita", gi.repository.Adw.MAJOR_VERSION, + gi.repository.Adw.MINOR_VERSION, + gi.repository.Adw.MICRO_VERSION), + __version_string("GStreamer", gst.major, gst.minor, gst.micro), + __version_string("Pango", gi.repository.Pango.VERSION_MAJOR, + gi.repository.Pango.VERSION_MINOR, + gi.repository.Pango.VERSION_MICRO), + __version_string("SQLite", sqlite3.sqlite_version_info[0], + sqlite3.sqlite_version_info[1], + sqlite3.sqlite_version_info[2])] + return "\n".join(strs) + + +def print_env() -> None: + """Print the environment versions to stdout.""" + print(env_string()) diff --git a/tests/test_gsetup.py b/tests/test_gsetup.py index e713e65..f3ae666 100644 --- a/tests/test_gsetup.py +++ b/tests/test_gsetup.py @@ -4,6 +4,7 @@ import unittest import pathlib import emmental import gi +import io import xdg.BaseDirectory @@ -65,3 +66,20 @@ class TestGSetup(unittest.TestCase): """Check that the DATA_DIR points to the right place.""" data_path = xdg.BaseDirectory.save_data_path("emmental") self.assertEqual(emmental.gsetup.DATA_DIR, pathlib.Path(data_path)) + + def test_env_string(self): + """Check that the env_string() function works as expected.""" + self.assertRegex(emmental.gsetup.env_string(), + r" ⋅ Python \d+\.\d+\.\d+\n" + r" ⋅ Gtk \d+\.\d+\.\d+\n" + r" ⋅ Libadwaita \d+\.\d+\.\d+\n" + r" ⋅ GStreamer \d+\.\d+\.\d+\n" + r" ⋅ Pango \d+\.\d+\.\d+\n" + r" ⋅ SQLite \d+\.\d+\.\d+$") + + @unittest.mock.patch("sys.stdout", new_callable=io.StringIO) + def test_print_env(self, mock_stdout: io.StringIO): + """Check that the print_env() function prints the env_string().""" + emmental.gsetup.print_env() + self.assertEqual(mock_stdout.getvalue(), + emmental.gsetup.env_string() + "\n")