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

diff --git a/lib/dpx_puppettools/forge/__init__.py b/lib/dpx_puppettools/forge/__init__.py
new file mode 100644 (file)
index 0000000..bf0a055
--- /dev/null
@@ -0,0 +1,214 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""
+@author: Frank Brehm
+@contact: frank.brehm@pixelpark.com
+@copyright: © 2023 by Frank Brehm, Publicies Pixelpark GmbH, Berlin
+@summary: A module for base exception and object classes
+          for handling with Puppet forge
+"""
+from __future__ import absolute_import
+
+# Standard modules
+import logging
+import datetime
+
+# Third party modules
+from fb_tools.obj import FbBaseObject
+
+# Own modules
+from .. import pp
+
+from ..xlate import XLATOR
+
+from ..errors import BaseModuleInfoError
+
+__version__ = '0.3.0'
+
+LOG = logging.getLogger(__name__)
+
+_ = XLATOR.gettext
+ngettext = XLATOR.ngettext
+
+
+# =============================================================================
+def parse_forge_date(dt):
+
+    return datetime.datetime.strptime(dt, '%Y-%m-%d %H:%M:%S %z')
+
+
+# =============================================================================
+class ReleaseInfoError(BaseModuleInfoError):
+
+    pass
+
+
+# =============================================================================
+class ForgeModuleInfoError(BaseModuleInfoError):
+
+    pass
+
+
+# =============================================================================
+class ForgeModuleInfoTypeError(ForgeModuleInfoError, TypeError):
+
+    pass
+
+
+# =============================================================================
+class BaseForgeObject(FbBaseObject):
+    """Base class for the most forge classes."""
+
+    # -------------------------------------------------------------------------
+    def __init__(
+        self, slug=None, uri=None,
+            appname=None, verbose=0, version=__version__, base_dir=None, initialized=None):
+
+        self._slug = None
+        self._uri = None
+
+        super(BaseForgeObject, self).__init__(
+            appname=appname, verbose=verbose, version=version,
+            base_dir=base_dir, initialized=False)
+
+        self.slug = slug
+        self.uri = uri
+
+        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(BaseForgeObject, self).as_dict(short=short)
+
+        res['slug'] = self.slug
+        res['uri'] = self.uri
+
+        return res
+
+    # -------------------------------------------------------------------------
+    @property
+    def slug(self):
+        """The slug of this owner."""
+        return self._slug
+
+    @slug.setter
+    def slug(self, value):
+        if value is None:
+            self._slug = None
+            return
+        v = str(value).strip()
+        if v == '':
+            self._slug = None
+            return
+        self._slug = v
+
+    # -------------------------------------------------------------------------
+    @property
+    def uri(self):
+        """The URI of this owner."""
+        return self._uri
+
+    @uri.setter
+    def uri(self, value):
+        if value is None:
+            self._uri = None
+            return
+        v = str(value).strip()
+        if v == '':
+            self._uri = None
+            return
+        self._uri = v
+
+    # -------------------------------------------------------------------------
+    def to_data(self):
+        """Returning a dict, which can be used to re-instantiate this owner info."""
+
+        res = {
+            'slug': self.slug,
+            'uri': self.uri,
+        }
+
+        return res
+
+    # -------------------------------------------------------------------------
+    def __copy__(self):
+
+        new = self.__class__(
+            appname=self.appname, verbose=self.verbose, base_dir=self.base_dir)
+
+        self.apply_to(new)
+        new.initialized = self.initialized
+
+        return new
+
+    # -------------------------------------------------------------------------
+    def apply_to(self, new):
+
+        if not isinstance(new, BaseForgeObject):
+            msg = _("Parameter {p!r} is not of class {c!r}, but of {e!r} instead.").format(
+                p='new', c='BaseForgeObject', e=new.__class__.__name__)
+            raise TypeError(msg)
+
+        new.slug = self.slug
+        new.uri = self.uri
+
+    # -------------------------------------------------------------------------
+    def __eq__(self, other):
+
+        if self.verbose > 4:
+            LOG.debug(_("Comparing {} objects ...").format(self.__class__.__name__))
+
+        if not isinstance(other, BaseForgeObject):
+            return False
+
+        if self.slug != other.slug:
+            return False
+        if self.uri != other.uri:
+            return False
+
+        return True
+
+    # -------------------------------------------------------------------------
+    @classmethod
+    def from_data(cls, data, appname=None, verbose=0, base_dir=None):
+
+        if verbose > 3:
+            LOG.debug(_("Trying to get data for {} from:").format(
+                cls.__name__) + '\n' + pp(data))
+
+        obj = cls(appname=appname, verbose=verbose, base_dir=base_dir)
+
+        obj.apply_data(data)
+
+        obj.initialized = True
+
+        if verbose > 3:
+            LOG.debug(_("Got {}:").format(cls.__name__) + '\n' + pp(obj.as_dict()))
+
+        return obj
+
+    # -------------------------------------------------------------------------
+    def apply_data(self, data):
+
+        if 'slug' in data:
+            self.slug = data['slug']
+        if 'uri' in data:
+            self.uri = data['uri']
+
+
+# =============================================================================
+if __name__ == "__main__":
+
+    pass
+
+# =============================================================================
+
+# vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 list