mirror of https://github.com/jesopo/irctokens
change Hostmask __init__, move tokenisation to Hostmask.from_source(
This commit is contained in:
parent
17b5fb124d
commit
572c1e9b98
|
@ -17,15 +17,17 @@ def _escape_tag(value: str):
|
|||
return value
|
||||
|
||||
class Hostmask(object):
|
||||
def __init__(self, source: str):
|
||||
self._raw = source
|
||||
username, _, hostname = source.partition("@")
|
||||
self.nickname, _, username = username.partition("!")
|
||||
self.username = username or None
|
||||
self.hostname = hostname or None
|
||||
def __init__(self, source: str,
|
||||
nickname: str,
|
||||
username: Optional[str],
|
||||
hostname: Optional[str]):
|
||||
self._source = source
|
||||
self.nickname = nickname
|
||||
self.username = username
|
||||
self.hostname = hostname
|
||||
|
||||
def __str__(self) -> str:
|
||||
return self._raw
|
||||
return self._source
|
||||
def __repr__(self) -> str:
|
||||
return (f"Hostmask(nick={self.nickname!r}, user={self.username!r}"
|
||||
f", host={self.hostname!r})")
|
||||
|
@ -35,6 +37,12 @@ class Hostmask(object):
|
|||
else:
|
||||
return False
|
||||
|
||||
@staticmethod
|
||||
def from_source(source: str):
|
||||
username, _, hostname = source.partition("@")
|
||||
nickname, _, username = username.partition("!")
|
||||
return Hostmask(source, nickname, username or None, hostname or None)
|
||||
|
||||
class Line(object):
|
||||
def __init__(self,
|
||||
tags: Optional[Dict[str, Optional[str]]]=None,
|
||||
|
@ -58,8 +66,8 @@ class Line(object):
|
|||
_hostmask: Optional[Hostmask] = None
|
||||
@property
|
||||
def hostmask(self):
|
||||
if self.source:
|
||||
self._hostmask = self._hostmask or Hostmask(self.source)
|
||||
if self.source and not self._hostmask:
|
||||
self._hostmask = Hostmask.from_source(self.source)
|
||||
return self._hostmask
|
||||
|
||||
def format(self) -> str:
|
||||
|
|
|
@ -3,32 +3,32 @@ import irctokens
|
|||
|
||||
class HostmaskTest(unittest.TestCase):
|
||||
def test_all(self):
|
||||
hostmask = irctokens.Hostmask("nick!user@host")
|
||||
hostmask = irctokens.Hostmask.from_source("nick!user@host")
|
||||
self.assertEqual(hostmask.nickname, "nick")
|
||||
self.assertEqual(hostmask.username, "user")
|
||||
self.assertEqual(hostmask.hostname, "host")
|
||||
|
||||
def test_no_hostname(self):
|
||||
hostmask = irctokens.Hostmask("nick!user")
|
||||
hostmask = irctokens.Hostmask.from_source("nick!user")
|
||||
self.assertEqual(hostmask.nickname, "nick")
|
||||
self.assertEqual(hostmask.username, "user")
|
||||
self.assertIsNone(hostmask.hostname)
|
||||
|
||||
def test_no_ident(self):
|
||||
hostmask = irctokens.Hostmask("nick@host")
|
||||
hostmask = irctokens.Hostmask.from_source("nick@host")
|
||||
self.assertEqual(hostmask.nickname, "nick")
|
||||
self.assertIsNone(hostmask.username)
|
||||
self.assertEqual(hostmask.hostname, "host")
|
||||
|
||||
def test_only_nickname(self):
|
||||
hostmask = irctokens.Hostmask("nick")
|
||||
hostmask = irctokens.Hostmask.from_source("nick")
|
||||
self.assertEqual(hostmask.nickname, "nick")
|
||||
self.assertIsNone(hostmask.username)
|
||||
self.assertIsNone(hostmask.hostname)
|
||||
|
||||
def test_line(self):
|
||||
line = irctokens.tokenise(":nick!user@host PRIVMSG #channel hello")
|
||||
hostmask = irctokens.Hostmask("nick!user@host")
|
||||
hostmask = irctokens.Hostmask.from_source("nick!user@host")
|
||||
self.assertEqual(line.hostmask, hostmask)
|
||||
self.assertEqual(line.hostmask.nickname, "nick")
|
||||
self.assertEqual(line.hostmask.username, "user")
|
||||
|
|
Loading…
Reference in New Issue