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
[email protected]
https://lists.gajim.org/cgi-bin/listinfo/commits