]> Frank Brehm's Git Trees - pixelpark/puppet-tools.git/commitdiff
Adding module dpx_puppettools.forge.mod_release_info for class ModuleReleaseInfo
authorFrank Brehm <frank.brehm@pixelpark.com>
Thu, 9 Feb 2023 15:12:05 +0000 (16:12 +0100)
committerFrank Brehm <frank.brehm@pixelpark.com>
Thu, 9 Feb 2023 15:12:05 +0000 (16:12 +0100)
lib/dpx_puppettools/forge/__init__.py
lib/dpx_puppettools/forge/mod_release_info.py [new file with mode: 0644]

index bf0a055f26c0da1121d564d82eb7e8d22c8e9fd6..1ea1084b3fe6d9a4352ad48d9e8089c3464b0af5 100644 (file)
@@ -3,7 +3,7 @@
 """
 @author: Frank Brehm
 @contact: frank.brehm@pixelpark.com
-@copyright: © 2023 by Frank Brehm, Publicies Pixelpark GmbH, Berlin
+@copyright: © 2023 by Frank Brehm, Digitas Pixelpark GmbH, Berlin
 @summary: A module for base exception and object classes
           for handling with Puppet forge
 """
diff --git a/lib/dpx_puppettools/forge/mod_release_info.py b/lib/dpx_puppettools/forge/mod_release_info.py
new file mode 100644 (file)
index 0000000..dcd77f4
--- /dev/null
@@ -0,0 +1,274 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""
+@author: Frank Brehm
+@contact: frank.brehm@pixelpark.com
+@copyright: © 2023 by Frank Brehm, Digitas Pixelpark GmbH, Berlin
+@summary: A module for encapsulating all information about a Puppet module
+"""
+from __future__ import absolute_import
+
+# Standard modules
+import logging
+import datetime
+
+# Own modules
+from fb_tools.common import to_bool
+
+from ..xlate import XLATOR
+
+from . import parse_forge_date
+from . import BaseForgeObject
+
+__version__ = '0.2.0'
+
+LOG = logging.getLogger(__name__)
+
+_ = XLATOR.gettext
+ngettext = XLATOR.ngettext
+
+
+# =============================================================================
+class ModuleReleaseInfo(BaseForgeObject):
+    """Class for encapsulating information about a Puppet module release from Puppet Forge."""
+
+    # -------------------------------------------------------------------------
+    def __init__(
+        self, appname=None, verbose=0, version=__version__, base_dir=None,
+            initialized=None):
+
+        self._created_at = None
+        self._deleted_at = None
+        self._file_size = None
+        self._file_uri = None
+        self._supported = None
+        self._release_version = None
+
+        super(ModuleReleaseInfo, self).__init__(
+            appname=appname, verbose=verbose, version=version,
+            base_dir=base_dir, initialized=False)
+
+        if initialized is not None:
+            self.initialized = initialized
+
+    # -------------------------------------------------------------------------
+    def as_dict(self, short=True):
+        """
+        Transforms the elements of the object into a dict
+
+        @return: structure as dict
+        @rtype:  dict
+        """
+
+        res = super(ModuleReleaseInfo, self).as_dict(short=short)
+
+        res['created_at'] = self.created_at
+        res['deleted_at'] = self.deleted_at
+        res['file_size'] = self.file_size
+        res['file_uri'] = self.file_uri
+        res['supported'] = self.supported
+        res['release_version'] = self.release_version
+
+        return res
+
+    # -------------------------------------------------------------------------
+    @property
+    def created_at(self):
+        """Creation date of this release."""
+        return self._created_at
+
+    @created_at.setter
+    def created_at(self, value):
+        if value is None:
+            self._created_at = None
+            return
+        if isinstance(value, datetime.datetime):
+            self._created_at = value
+            return
+        v = str(value).strip()
+        if v == '':
+            self._created_at = None
+            return
+        self._created_at = parse_forge_date(v)
+
+    # -------------------------------------------------------------------------
+    @property
+    def deleted_at(self):
+        """Deletion date of this release."""
+        return self._deleted_at
+
+    @deleted_at.setter
+    def deleted_at(self, value):
+        if value is None:
+            self._deleted_at = None
+            return
+        if isinstance(value, datetime.datetime):
+            self._deleted_at = value
+            return
+        v = str(value).strip()
+        if v == '':
+            self._deleted_at = None
+            return
+        self._deleted_at = parse_forge_date(v)
+
+    # -------------------------------------------------------------------------
+    @property
+    def file_size(self):
+        """The file size in bytes of this release."""
+        return self._file_size
+
+    @file_size.setter
+    def file_size(self, value):
+        if value is None:
+            self._file_size = None
+            return
+        v = int(value)
+        if v < 0:
+            msg = _(
+                "The file size of a release must be greater or equal to zero "
+                "(Given: {}).").format(value)
+            raise ValueError(msg)
+        self._file_size = v
+
+    # -------------------------------------------------------------------------
+    @property
+    def file_uri(self):
+        """The file URI of this release."""
+        return self._file_uri
+
+    @file_uri.setter
+    def file_uri(self, value):
+        if value is None:
+            self._file_uri = None
+            return
+        v = str(value).strip()
+        if v == '':
+            self._file_uri = None
+            return
+        self._file_uri = v
+
+    # -------------------------------------------------------------------------
+    @property
+    def release_version(self):
+        """The version number of this release."""
+        return self._release_version
+
+    @release_version.setter
+    def release_version(self, value):
+        if value is None:
+            self._release_version = None
+            return
+        v = str(value).strip()
+        if v == '':
+            self._release_version = None
+            return
+        self._release_version = v
+
+    # -------------------------------------------------------------------------
+    @property
+    def supported(self):
+        """The URI of this release."""
+        return self._supported
+
+    @supported.setter
+    def supported(self, value):
+        if value is None:
+            self._supported = None
+            return
+        self._supported = to_bool(value)
+
+    # -------------------------------------------------------------------------
+    def to_data(self):
+        """Returning a dict, which can be used to re-instantiate this module info."""
+
+        res = super(ModuleReleaseInfo, self).to_data()
+
+        res['created_at'] = None
+        if self.created_at:
+            res['created_at'] = self.created_at.strftime('%Y-%m-%d %H:%M:%S %z')
+
+        res['deleted_at'] = None
+        if self.deleted_at:
+            res['deleted_at'] = self.deleted_at.strftime('%Y-%m-%d %H:%M:%S %z')
+
+        res['file_size'] = self.file_size
+        res['file_uri'] = self.file_uri
+        res['supported'] = self.supported
+        res['version'] = self.release_version
+
+        return res
+
+    # -------------------------------------------------------------------------
+    def apply_to(self, new):
+
+        if not isinstance(new, ModuleReleaseInfo):
+            msg = _("Parameter {p!r} is not of class {c!r}, but of {e!r} instead.").format(
+                p='new', c='ModuleReleaseInfo', e=new.__class__.__name__)
+            raise TypeError(msg)
+
+        super(ModuleReleaseInfo, self).apply_to(new)
+        new.created_at = self.created_at
+        new.deleted_at = self.deleted_at
+        new.file_size = self.file_size
+        new.file_uri = self.file_uri
+        new.supported = self.supported
+        new.release_version = self.release_version
+
+    # -------------------------------------------------------------------------
+    def __eq__(self, other):
+
+        if self.verbose > 4:
+            LOG.debug(_("Comparing {} objects ...").format(self.__class__.__name__))
+
+        if not super(ModuleReleaseInfo, self).__eq__(other):
+            return False
+
+        if not isinstance(other, ModuleReleaseInfo):
+            return False
+
+        if self.created_at != other.created_at:
+            return False
+        if self.deleted_at != other.deleted_at:
+            return False
+        if self.file_size != other.file_size:
+            return False
+        if self.file_uri != other.file_uri:
+            return False
+        if self.supported != other.supported:
+            return False
+        if self.release_version != other.release_version:
+            return False
+
+        return True
+
+    # -------------------------------------------------------------------------
+    def apply_data(self, data):
+
+        super(ModuleReleaseInfo, self).apply_data(data)
+
+        if 'created_at' in data and data['created_at']:
+            self.created_at = data['created_at']
+        if 'deleted_at' in data and data['deleted_at']:
+            self.deleted_at = data['deleted_at']
+        if 'file_size' in data and data['file_size']:
+            self.file_size = data['file_size']
+        if 'file_uri' in data and data['file_uri']:
+            self.file_uri = data['file_uri']
+        if 'slug' in data and data['slug']:
+            self.slug = data['slug']
+        if 'supported' in data:
+            self.supported = data['supported']
+        if 'uri' in data and data['uri']:
+            self.uri = data['uri']
+        if 'version' in data and data['version']:
+            self.release_version = data['version']
+
+
+# =============================================================================
+if __name__ == "__main__":
+
+    pass
+
+# =============================================================================
+
+# vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 list