Source code for cfxdb.mrealm.web_cluster_node_membership

##############################################################################
#
#                        Crossbar.io Database
#     Copyright (c) Crossbar.io Technologies GmbH. Licensed under MIT.
#
##############################################################################

from typing import Optional
import pprint
from uuid import UUID

from cfxdb.mrealm.cluster_node_membership import ClusterNodeMembership


[docs]class WebClusterNodeMembership(ClusterNodeMembership): """ Information about memberships of nodes in web clusters. """ def __init__(self, cluster_oid: Optional[UUID] = None, node_oid: Optional[UUID] = None, parallel: Optional[int] = None, standby: Optional[bool] = None, _unknown=None): """ :param cluster_oid: Object ID of the cluster the node is member in. :param node_oid: Object ID of the node that is member in the cluster. :param parallel: Default parallel degree per node in this cluster. :param standby: Flag indicating whether this is a (currently inactive) standby node. """ ClusterNodeMembership.__init__(self, cluster_oid=cluster_oid, node_oid=node_oid, _unknown=_unknown) self.parallel = parallel self.standby = standby def __eq__(self, other): if not isinstance(other, self.__class__): return False if not ClusterNodeMembership.__eq__(self, other): return False if other.parallel != self.parallel: return False if other.standby != self.standby: return False return True def __ne__(self, other): return not self.__eq__(other) def __str__(self): return pprint.pformat(self.marshal())
[docs] def marshal(self): """ Marshal this object to a generic host language object. :return: dict """ obj = ClusterNodeMembership.marshal(self) obj.update({ 'parallel': self.parallel, 'standby': self.standby, }) return obj
[docs] @staticmethod def parse(data): """ Parse generic host language object into an object of this class. :param data: Generic host language object :type data: dict :return: instance of :class:`WebService` """ assert type(data) == dict obj = ClusterNodeMembership.parse(data) data = obj._unknown or {} # future attributes (yet unknown) are not only ignored, but passed through! _unknown = {} for k in data: if k not in ['parallel', 'standby']: _unknown[k] = data[k] parallel = None if 'parallel' in data and data['parallel']: assert type(data['parallel']) == int parallel = data['parallel'] standby = None if 'standby' in data and data['standby']: assert data['standby'] is None or type(data['standby']) == bool standby = data['standby'] obj = WebClusterNodeMembership(cluster_oid=obj.cluster_oid, node_oid=obj.node_oid, parallel=parallel, standby=standby, _unknown=_unknown) return obj