Philipp Hörist pushed to branch master at gajim / python-nbxmpp
Commits: dbed818f by lovetox at 2021-02-28T13:26:53+01:00 Protocol: Make JID a dataclass obj - - - - - 1 changed file: - nbxmpp/protocol.py Changes: ===================================== nbxmpp/protocol.py ===================================== @@ -23,7 +23,8 @@ import hashlib import functools import warnings from base64 import b64encode -from collections import namedtuple +from dataclasses import dataclass +from dataclasses import asdict from gi.repository import GLib @@ -584,25 +585,23 @@ def unescape_localpart(localpart): return localpart -class JID(namedtuple('JID', - ['jid', 'localpart', 'domain', 'resource'])): - - __slots__ = [] - - def __new__(cls, jid=None, localpart=None, domain=None, resource=None): - if jid is not None: - deprecation_warning('JID(jid) is deprecated, use from_string()') - return JID.from_string(str(jid)) +@dataclass(frozen=True) +class JID: + localpart: str = None + domain: str = None + resource: str = None + def __init__(self, localpart=None, domain=None, resource=None): if localpart is not None: localpart = validate_localpart(localpart) + object.__setattr__(self, "localpart", localpart) domain = validate_domainpart(domain) + object.__setattr__(self, "domain", domain) if resource is not None: resource = validate_resourcepart(resource) - - return super().__new__(cls, None, localpart, domain, resource) + object.__setattr__(self, "resource", resource) @classmethod @functools.lru_cache(maxsize=None) @@ -625,8 +624,7 @@ class JID(namedtuple('JID', else: localpart, domainpart = None, rest - return cls(jid=None, - localpart=localpart, + return cls(localpart=localpart, domain=domainpart, resource=resourcepart) @@ -659,8 +657,7 @@ class JID(namedtuple('JID', localpart = None domainpart = user_input - return cls(jid=None, - localpart=localpart, + return cls(localpart=localpart, domain=domainpart, resource=None) @@ -684,7 +681,13 @@ class JID(namedtuple('JID', return JID.from_string(other) == self except Exception: return False - return super().__eq__(other) + + if not isinstance(other, JID): + raise TypeError('eq with type (%s) not supported' % type(other)) + + return (self.localpart == other.localpart and + self.domain == other.domain and + self.resource == other.resource) def __ne__(self, other): return not self.__eq__(other) @@ -705,7 +708,9 @@ class JID(namedtuple('JID', def new_as_bare(self): if self.resource is None: return self - return self._replace(resource=None) + new = asdict(self) + new.pop('resource') + return JID(**new) def bare_match(self, other): if isinstance(other, str): @@ -723,7 +728,9 @@ class JID(namedtuple('JID', self.resource is not None) def new_with(self, **kwargs): - return self._replace(**kwargs) + new = asdict(self) + new.update(kwargs) + return JID(**new) def to_user_string(self, show_punycode=True): domain = self.domain_to_ascii() View it on GitLab: https://dev.gajim.org/gajim/python-nbxmpp/-/commit/dbed818fff4585fb05f5f113702ca8a26604cffd -- View it on GitLab: https://dev.gajim.org/gajim/python-nbxmpp/-/commit/dbed818fff4585fb05f5f113702ca8a26604cffd You're receiving this email because of your account on dev.gajim.org.
_______________________________________________ Commits mailing list Commits@gajim.org https://lists.gajim.org/cgi-bin/listinfo/commits