]> Frank Brehm's Git Trees - pixelpark/puppet-tools.git/commitdiff
Adding and using mothod show() of class ForgeModuleInfo
authorFrank Brehm <frank.brehm@pixelpark.com>
Tue, 14 Feb 2023 11:03:35 +0000 (12:03 +0100)
committerFrank Brehm <frank.brehm@pixelpark.com>
Tue, 14 Feb 2023 11:03:35 +0000 (12:03 +0100)
lib/dpx_puppettools/app/get_forge_module.py
lib/dpx_puppettools/forge/mod_info.py

index f4ac65508f2e6eccb10b4f373ef615ce05190837..5205b35a5093000fe97440da26b4708ccd70d75b 100644 (file)
@@ -32,7 +32,7 @@ LOG = logging.getLogger(__name__)
 _ = XLATOR.gettext
 ngettext = XLATOR.ngettext
 
-__version__ = '0.6.0'
+__version__ = '0.6.1'
 
 
 # =============================================================================
@@ -209,27 +209,10 @@ class GetForgeModuleApplication(BaseDPXPuppetApplication):
             LOG.debug(_("Module-Info:") + '\n' + pp(self.module_info.as_dict()))
             self.empty_line()
 
-        if self.module_info.exists_on_forge:
-            self.show_forgeinfo()
-        else:
-            print(_("Module {!r} not found on Puppet forge.").format(self.module_name))
+        self.module_info.show()
         print(_('Last checked for Puppet forge:') + ' ' + self.module_info.date_checked)
         self.empty_line()
 
-    # -------------------------------------------------------------------------
-    def show_forgeinfo(self):
-
-        msg = _("Information from Puppet forge:")
-        print(msg)
-        self.line(width=len(msg))
-        self.empty_line()
-
-        label = {}
-        label['created_at'] = _("Created at:")
-        label['updated_at'] = _("Updated at:")
-        label['homepage_url'] = _("Project URL:")
-
-
 
 # =============================================================================
 
index 7767d3fcad23b6b9420dabae08fd68cb9a2d203e..14fc079885304e65b2a07e121c84185f773033ab 100644 (file)
@@ -17,6 +17,7 @@ import datetime
 import collections
 import time
 import os
+import shutil
 
 from pathlib import Path
 
@@ -38,6 +39,7 @@ from fb_tools.common import to_bool
 # Own modules
 from .. import pp, DEFAULT_FORGE_API_URL, DEFAULT_HTTP_TIMEOUT, MAX_HTTP_TIMEOUT
 from .. import DEFAULT_VAR_DIR
+from .. import DEFAULT_TERMINAL_WIDTH, DEFAULT_TERMINAL_HEIGHT
 
 from ..errors import BaseHookError, BaseModuleInfoError
 
@@ -53,7 +55,7 @@ from .cur_mod_release_info import CurrentModuleReleaseInfo
 from .owner_info import ForgeOwnerInfo
 
 
-__version__ = '0.5.1'
+__version__ = '0.6.0'
 
 LOG = logging.getLogger(__name__)
 
@@ -875,6 +877,67 @@ class ForgeModuleInfo(BaseModuleInfo):
         return module_info
 
 
+    # -------------------------------------------------------------------------
+    def show(self, file=None, flush=False):
+
+        def my_print(message):
+            print(message, file=file, flush=flush)
+
+        def my_line(width=None, linechar='-', end='\n'):
+            lchar = str(linechar).strip()
+            if not lchar:
+                lchar = '-'
+
+            if not width:
+                term_size = shutil.get_terminal_size(
+                    (DEFAULT_TERMINAL_WIDTH, DEFAULT_TERMINAL_HEIGHT))
+                width = term_size.columns
+
+            lin = (lchar * width)[0:width]
+            print(lin, end=end, file=file, flush=flush)
+
+        if not self.exists_on_forge:
+            msg = _("Module {!r} not found on Puppet forge.").format(self.full_name)
+            my_print(msg)
+            return
+
+        msg = _("Information about {!r} from Puppet forge:").format(self.full_name)
+        my_print(msg)
+        my_line(width=len(msg))
+        my_print('')
+
+        labels = {}
+        max_len_label = 1
+        labels['created_at'] = _("Created at:")
+        labels['updated_at'] = _("Updated at:")
+        labels['homepage_url'] = _("Project URL:")
+        labels['deprecated_at'] = _("Deprecated at:")
+        labels['deprecated_for'] = _("Deprecated for:")
+        labels['downloads'] = _("Downloads:")
+        labels['feedback_score'] = _("Feedback score:")
+        labels['endorsement'] = _('Endorsement:')
+        labels['superseded_by'] = _('Superseded by:')
+
+        labels_sorted = (
+            'created_at', 'updated_at', 'deprecated_at', 'deprecated_for', 'superseded_by',
+            'endorsement', 'downloads', 'feedback_score', 'homepage_url',
+        )
+
+        for label in labels.keys():
+            if len(labels[label]) > max_len_label:
+                max_len_label = len(labels[label])
+
+        for label in labels_sorted:
+            lbl = labels[label]
+            val = getattr(self, label, None)
+            if label == 'superseded_by' and val and isinstance(val, Mapping) and 'slug' in val:
+                val = val['slug']
+            if val is None:
+                val = '~'
+            msg = "{lbl:<{max}} {val}".format(lbl=lbl, max=max_len_label, val=val)
+            my_print(msg)
+        my_print('')
+
 # =============================================================================
 if __name__ == "__main__":