update ircstates to v0.9.0, use const RPL/ERR vars

This commit is contained in:
jesopo 2020-04-17 21:06:20 +01:00
parent 2d67587938
commit 7232876a75
4 changed files with 32 additions and 48 deletions

View file

@ -1,6 +1,5 @@
from typing import List, Optional
from irctokens import Line
from ircstates import NUMERIC_NAMES
from .interface import IServer, IMatchResponse, IMatchResponseParam
class Responses(IMatchResponse):
@ -33,24 +32,6 @@ class Response(Responses):
def __repr__(self) -> str:
return f"Response({self._commands[0]}: {self._params!r})"
class Numeric(Response):
def __init__(self,
name: str,
params: List[IMatchResponseParam]=[]):
super().__init__(NUMERIC_NAMES.get(name, name), params)
class Numerics(Responses):
def __init__(self,
numerics: List[str],
params: List[IMatchResponseParam]=[]):
self._numerics = numerics
numerics = [NUMERIC_NAMES.get(n, n) for n in numerics]
super().__init__(numerics, params)
def __repr__(self) -> str:
return f"Numerics({self._numerics!r}: {self._params!r})"
class ResponseOr(IMatchResponse):
def __init__(self, *responses: IMatchResponse):
self._responses = responses

View file

@ -2,8 +2,9 @@ from typing import List
from enum import Enum
from base64 import b64decode, b64encode
from irctokens import build
from ircstates.numerics import *
from .matching import Response, ResponseOr, Numerics, ParamAny
from .matching import ResponseOr, Responses, Response, ParamAny
from .contexts import ServerContext
from .params import SASLParams
from .scram import SCRAMContext
@ -27,10 +28,10 @@ class SASLUnknownMechanismError(SASLError):
pass
AUTHENTICATE_ANY = Response("AUTHENTICATE", [ParamAny()])
NUMERICS_FAIL = Numerics(["ERR_SASLFAIL"])
NUMERICS_INITIAL = Numerics(
["ERR_SASLFAIL", "ERR_SASLALREADY", "RPL_SASLMECHS"])
NUMERICS_LAST = Numerics(["RPL_SASLSUCCESS", "ERR_SASLFAIL"])
NUMERICS_FAIL = Response(ERR_SASLFAIL)
NUMERICS_INITIAL = Responses([ERR_SASLFAIL, ERR_SASLALREADY, RPL_SASLMECHS])
NUMERICS_LAST = Responses([RPL_SASLSUCCESS, ERR_SASLFAIL])
def _b64e(s: str):
return b64encode(s.encode("utf8")).decode("ascii")

View file

@ -3,12 +3,13 @@ from typing import Awaitable, Deque, Dict, List, Optional, Set, Tuple
from collections import deque
from asyncio_throttle import Throttler
from ircstates import Emit, Channel, NUMERIC_NAMES
from ircstates import Emit, Channel
from ircstates.numerics import *
from irctokens import build, Line, tokenise
from .ircv3 import CAPContext, CAP_ECHO, CAP_SASL, CAP_LABEL, LABEL_TAG
from .sasl import SASLContext, SASLResult
from .matching import ResponseOr, Numerics, Numeric, ParamAny, ParamFolded
from .matching import ResponseOr, Response, ParamAny, ParamFolded
from .asyncs import MaybeAwait
from .struct import Whois
@ -250,7 +251,7 @@ class Server(IServer):
while folded_names:
line = await self.wait_for(
Numeric("RPL_CHANNELMODEIS", [ParamAny(), ParamAny()]))
Numeric(RPL_CHANNELMODEIS, [ParamAny(), ParamAny()]))
folded = self.casefold(line.params[1])
if folded in folded_names:
@ -269,23 +270,24 @@ class Server(IServer):
params = [ParamAny(), ParamFolded(folded)]
obj = Whois()
while True:
line = await self.wait_for(Numerics([
"RPL_WHOISUSER",
"RPL_WHOISSERVER",
"RPL_WHOISOPERATOR",
"RPL_WHOISIDLE",
"RPL_WHOISHOST",
"RPL_WHOISACCOUNT",
"RPL_WHOISSECURE",
"RPL_ENDOFWHOIS"
line = await self.wait_for(Responses([
RPL_WHOISUSER,
RPL_WHOISSERVER,
RPL_WHOISOPERATOR,
RPL_WHOISIDLE,
RPL_WHOISHOST,
RPL_WHOISACCOUNT,
RPL_WHOISSECURE,
RPL_ENDOFWHOIS
], params))
if line.command == NUMERIC_NAMES["RPL_WHOISUSER"]:
if line.command == RPL_WHOISUSER:
obj.username, obj.hostname, _, obj.realname = line.params[2:]
elif line.command == NUMERIC_NAMES["RPL_WHOISIDLE"]:
obj.idle, obj.signon, _ = line.params[2:]
elif line.command == NUMERIC_NAMES["RPL_WHOISACCOUNT"]:
elif line.command == RPL_WHOISIDLE:
obj.idle, signon, _ = line.params[2:]
obj.signon = int(signon)
elif line.command == RPL_WHOISACCOUNT:
obj.account = line.params[2]
elif line.command == NUMERIC_NAMES["RPL_ENDOFWHOIS"]:
elif line.command == RPL_ENDOFWHOIS:
return obj
return MaybeAwait(_assure)

View file

@ -1,5 +1,5 @@
anyio ==1.3.0
asyncio-throttle ==1.0.1
dataclasses ==0.6
ircstates ==0.8.9
ircstates ==0.9.0
async_stagger ==0.3.0