import copy
import pipes
import os
+import shutil
from email.mime.text import MIMEText
from email import charset
_ = XLATOR.gettext
ngettext = XLATOR.ngettext
-__version__ = '0.3.2'
+__version__ = '0.3.3'
# =============================================================================
import copy
import datetime
import textwrap
+import shutil
# Thisrd party modules
from fb_tools.common import to_bool
# Own modules
-from .. import pp
+from .. import pp, print_out, line
from .. import DEFAULT_TERMINAL_WIDTH, DEFAULT_TERMINAL_HEIGHT
from ..xlate import XLATOR
from .base_module_info import BaseForgeModuleInfo
-__version__ = '0.2.1'
+__version__ = '0.3.0'
LOG = logging.getLogger(__name__)
# -------------------------------------------------------------------------
@property
def pdk(self):
- """The pdk of this release."""
+ """Does this module use PDK."""
return self._pdk
@pdk.setter
self.tasks.append(copy.copy(task))
# -------------------------------------------------------------------------
+ def show(self, detail=False, file=None, flush=False):
+
+ msg = _("Current revision of module on Puppet forge:")
+ print_out(msg, file=file, flush=flush)
+ line(width=len(msg), file=file, flush=flush)
+ print_out('', file=file, flush=flush)
+
+ labels = {}
+ max_len_label = 1
+ labels['release_version'] = _("Version:")
+ labels['created_at'] = _("Created at:")
+ labels['updated_at'] = _("Updated at:")
+ labels['file_size'] = _("File size:")
+ labels['supported'] = _("Supported:")
+ labels['pdk'] = _("Using PDK:")
+ labels['validation_score'] = _("Validation score:")
+ labels['downloads'] = _("Downloads:")
+ if detail:
+ labels['deleted_for'] = _("Deleted for:")
+ labels['file_uri'] = _("File URI:")
+ labels['file_md5'] = _("File MD5:")
+ labels['readme'] = _("File README:")
+
+ labels_sorted = (
+ 'release_version', 'created_at', 'updated_at', 'deleted_for', 'file_size',
+ 'supported', 'pdk', 'validation_score', 'downloads', 'deleted_for',
+ 'file_uri', 'file_md5', 'readme',
+ )
+
+ for label in labels.keys():
+ if len(labels[label]) > max_len_label:
+ max_len_label = len(labels[label])
+
+ term_size = shutil.get_terminal_size((DEFAULT_TERMINAL_WIDTH, DEFAULT_TERMINAL_HEIGHT))
+ width = term_size.columns
+ indent = ' ' * (max_len_label + 1)
+
+ for label in labels_sorted:
+ if label not in labels:
+ continue
+ lbl = labels[label]
+ val = getattr(self, label, None)
+
+ if label in ('supported', 'pdk') and val is not None:
+ if val:
+ val = _('Yes')
+ else:
+ val = _('No')
+
+ if label == 'readme' and val is not None:
+ val = textwrap.fill(
+ val, width=width, subsequent_indent=indent, replace_whitespace=False)
+
+ if val is None:
+ val = '~'
+
+ msg = "{lbl:<{max}} {val}".format(lbl=lbl, max=max_len_label, val=val)
+ print_out(msg, file=file, flush=flush)
+
+ print_out('', file=file, flush=flush)
# =============================================================================
from .cur_mod_release_info import CurrentModuleReleaseInfo
from .owner_info import ForgeOwnerInfo
-__version__ = '0.6.1'
+__version__ = '0.6.2'
LOG = logging.getLogger(__name__)
return module_info
-
# -------------------------------------------------------------------------
def show(self, detail=False, file=None, flush=False):
- if self.verbose > 2:
- msg = "Base classes of {}:".format(BaseForgeObject)
- msg += '\n' + pp(inspect.getmro(BaseForgeObject))
- LOG.debug(msg)
- msg = "Base classes of {}:".format(BaseModuleInfo)
- msg += '\n' + pp(inspect.getmro(BaseModuleInfo))
- LOG.debug(msg)
- msg = "Base classes of {}:".format(self.__class__.__name__)
- msg += '\n' + pp(inspect.getmro(self.__class__))
- LOG.debug(msg)
-
if not self.exists_on_forge:
msg = _("Module {!r} not found on Puppet forge.").format(self.full_name)
print_out(msg, file=file, flush=flush)
val = '~'
msg = "{lbl:<{max}} {val}".format(lbl=lbl, max=max_len_label, val=val)
print_out(msg, file=file, flush=flush)
+
print_out('', file=file, flush=flush)
+ if self.current_release:
+ self.current_release.show(detail=detail, file=file, flush=flush)
+
+ if detail and self.releases:
+ self.releases.show(file=file, flush=flush)
+
# =============================================================================
if __name__ == "__main__":
from fb_tools.common import to_bool
# Own modules
+from .. import print_out
+
from ..xlate import XLATOR
from . import parse_forge_date
from . import BaseForgeObject
-__version__ = '0.2.1'
+__version__ = '0.3.0'
LOG = logging.getLogger(__name__)
# -------------------------------------------------------------------------
@property
def supported(self):
- """The URI of this release."""
+ """Is this a supported release."""
return self._supported
@supported.setter
if 'version' in data and data['version']:
self.release_version = data['version']
+ # -------------------------------------------------------------------------
+ def show(self, width_label=None, width_size=None, file=None, flush=False):
+
+ if width_label is None:
+ width_label = len(self.release_version) + 1
+ else:
+ width_label += 1
+
+ size_str = "{}".format(self.file_size)
+ if self.file_size is None:
+ size_str = '~'
+ else:
+ size_str = "{}".format(self.file_size)
+ if width_size is None:
+ width_size = len(size_str)
+ else:
+ if width_size < len(size_str):
+ width_size = len(size_str)
+
+ vals = {}
+ vals['ver'] = self.release_version + ':'
+ vals['with'] = width_label + 1
+ vals['cr_l'] = _("Created at:")
+ vals['cr_v'] = self.created_at
+ if self.deleted_at:
+ vals['del_l'] = _("Deleted at:")
+ vals['del_v'] = self.deleted_at
+ vals['fs_l'] = _("File size:")
+ vals['fs_v'] = size_str
+ vals['fs_w'] = width_size
+ vals['sup_l'] = _("Supported:")
+ vals['sup_v'] = _('No')
+ if self.supported:
+ vals['sup_v'] = _('Yes')
+
+ msg = ' * {ver:<{with}} {cr_l} {cr_v}, {fs_l} {fs_v:>{fs_w}}, {sup_l} {sup_v}'
+ if self.deleted_at:
+ msg += ', {del_l} {del_v}'
+
+ line = msg.format(**vals)
+ print_out(line, file=file, flush=flush)
+
# =============================================================================
if __name__ == "__main__":
except ImportError:
from collections import MutableSequence
+try:
+ from packaging.version import Version
+except ImportError:
+ from distutils.version import LooseVersion as Version
+
# Third party modules
from fb_tools.obj import FbBaseObject
# Own modules
+from .. import print_out, line
+
from ..xlate import XLATOR
from .mod_release_info import ModuleReleaseInfo
-__version__ = '0.2.0'
+__version__ = '0.3.0'
LOG = logging.getLogger(__name__)
new_list.append(copy.copy(release))
return new_list
+ # -------------------------------------------------------------------------
+ def show(self, file=None, flush=False):
+
+ msg = _("All revisions of module on Puppet forge:")
+ print_out(msg, file=file, flush=flush)
+ line(width=len(msg), file=file, flush=flush)
+ print_out('', file=file, flush=flush)
+
+ max_len_version = 1
+ max_len_size = 1
+ for release in self._list:
+ if len(release.release_version) > max_len_version:
+ max_len_version = len(release.release_version)
+ if release.file_size:
+ size_str = "{}".format(release.file_size)
+ if len(size_str) > max_len_size:
+ max_len_size = len(size_str)
+
+ for release in sorted(self._list, key=lambda x: Version(x.release_version)):
+ release.show(
+ width_label=max_len_version, width_size=max_len_size, file=file, flush=flush)
+
+ print_out('', file=file, flush=flush)
+
# =============================================================================
if __name__ == "__main__":