pycares 4.5.0__cp313-cp313-win32.whl → 4.6.1__cp313-cp313-win32.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pycares/__init__.py +150 -97
- pycares/_cares.pyd +0 -0
- pycares/_version.py +1 -1
- pycares/errno.py +58 -39
- pycares/py.typed +0 -0
- pycares/utils.py +7 -10
- {pycares-4.5.0.dist-info → pycares-4.6.1.dist-info}/METADATA +15 -2
- pycares-4.6.1.dist-info/RECORD +12 -0
- {pycares-4.5.0.dist-info → pycares-4.6.1.dist-info}/WHEEL +1 -1
- pycares-4.5.0.dist-info/RECORD +0 -11
- {pycares-4.5.0.dist-info → pycares-4.6.1.dist-info/licenses}/LICENSE +0 -0
- {pycares-4.5.0.dist-info → pycares-4.6.1.dist-info}/top_level.txt +0 -0
pycares/__init__.py
CHANGED
@@ -9,79 +9,68 @@ from . import errno
|
|
9
9
|
from .utils import ascii_bytes, maybe_str, parse_name
|
10
10
|
from ._version import __version__
|
11
11
|
|
12
|
-
import collections.abc
|
13
12
|
import socket
|
14
13
|
import math
|
15
14
|
import functools
|
16
15
|
import sys
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
"QUERY_CLASS_ANY" : "C_ANY",
|
76
|
-
}
|
77
|
-
|
78
|
-
for k, v in exported_pycares_symbols_map.items():
|
79
|
-
globals()[k] = getattr(_lib, v)
|
80
|
-
|
81
|
-
|
82
|
-
globals()['ARES_VERSION'] = maybe_str(_ffi.string(_lib.ares_version(_ffi.NULL)))
|
83
|
-
|
84
|
-
|
16
|
+
from collections.abc import Callable, Iterable
|
17
|
+
from typing import Any, Optional, Union
|
18
|
+
|
19
|
+
IP4 = tuple[str, int]
|
20
|
+
IP6 = tuple[str, int, int, int]
|
21
|
+
|
22
|
+
# Flag values
|
23
|
+
ARES_FLAG_USEVC = _lib.ARES_FLAG_USEVC
|
24
|
+
ARES_FLAG_PRIMARY = _lib.ARES_FLAG_PRIMARY
|
25
|
+
ARES_FLAG_IGNTC = _lib.ARES_FLAG_IGNTC
|
26
|
+
ARES_FLAG_NORECURSE = _lib.ARES_FLAG_NORECURSE
|
27
|
+
ARES_FLAG_STAYOPEN = _lib.ARES_FLAG_STAYOPEN
|
28
|
+
ARES_FLAG_NOSEARCH = _lib.ARES_FLAG_NOSEARCH
|
29
|
+
ARES_FLAG_NOALIASES = _lib.ARES_FLAG_NOALIASES
|
30
|
+
ARES_FLAG_NOCHECKRESP = _lib.ARES_FLAG_NOCHECKRESP
|
31
|
+
|
32
|
+
# Nameinfo flag values
|
33
|
+
ARES_NI_NOFQDN = _lib.ARES_NI_NOFQDN
|
34
|
+
ARES_NI_NUMERICHOST = _lib.ARES_NI_NUMERICHOST
|
35
|
+
ARES_NI_NAMEREQD = _lib.ARES_NI_NAMEREQD
|
36
|
+
ARES_NI_NUMERICSERV = _lib.ARES_NI_NUMERICSERV
|
37
|
+
ARES_NI_DGRAM = _lib.ARES_NI_DGRAM
|
38
|
+
ARES_NI_TCP = _lib.ARES_NI_TCP
|
39
|
+
ARES_NI_UDP = _lib.ARES_NI_UDP
|
40
|
+
ARES_NI_SCTP = _lib.ARES_NI_SCTP
|
41
|
+
ARES_NI_DCCP = _lib.ARES_NI_DCCP
|
42
|
+
ARES_NI_NUMERICSCOPE = _lib.ARES_NI_NUMERICSCOPE
|
43
|
+
ARES_NI_LOOKUPHOST = _lib.ARES_NI_LOOKUPHOST
|
44
|
+
ARES_NI_LOOKUPSERVICE = _lib.ARES_NI_LOOKUPSERVICE
|
45
|
+
ARES_NI_IDN = _lib.ARES_NI_IDN
|
46
|
+
ARES_NI_IDN_ALLOW_UNASSIGNED = _lib.ARES_NI_IDN_ALLOW_UNASSIGNED
|
47
|
+
ARES_NI_IDN_USE_STD3_ASCII_RULES = _lib.ARES_NI_IDN_USE_STD3_ASCII_RULES
|
48
|
+
|
49
|
+
# Bad socket
|
50
|
+
ARES_SOCKET_BAD = _lib.ARES_SOCKET_BAD
|
51
|
+
|
52
|
+
# Query types
|
53
|
+
QUERY_TYPE_A = _lib.T_A
|
54
|
+
QUERY_TYPE_AAAA = _lib.T_AAAA
|
55
|
+
QUERY_TYPE_ANY = _lib.T_ANY
|
56
|
+
QUERY_TYPE_CAA = _lib.T_CAA
|
57
|
+
QUERY_TYPE_CNAME = _lib.T_CNAME
|
58
|
+
QUERY_TYPE_MX = _lib.T_MX
|
59
|
+
QUERY_TYPE_NAPTR = _lib.T_NAPTR
|
60
|
+
QUERY_TYPE_NS = _lib.T_NS
|
61
|
+
QUERY_TYPE_PTR = _lib.T_PTR
|
62
|
+
QUERY_TYPE_SOA = _lib.T_SOA
|
63
|
+
QUERY_TYPE_SRV = _lib.T_SRV
|
64
|
+
QUERY_TYPE_TXT = _lib.T_TXT
|
65
|
+
|
66
|
+
# Query classes
|
67
|
+
QUERY_CLASS_IN = _lib.C_IN
|
68
|
+
QUERY_CLASS_CHAOS = _lib.C_CHAOS
|
69
|
+
QUERY_CLASS_HS = _lib.C_HS
|
70
|
+
QUERY_CLASS_NONE = _lib.C_NONE
|
71
|
+
QUERY_CLASS_ANY = _lib.C_ANY
|
72
|
+
|
73
|
+
ARES_VERSION = maybe_str(_ffi.string(_lib.ares_version(_ffi.NULL)))
|
85
74
|
PYCARES_ADDRTTL_SIZE = 256
|
86
75
|
|
87
76
|
|
@@ -138,7 +127,7 @@ def _query_cb(arg, status, timeouts, abuf, alen):
|
|
138
127
|
result = None
|
139
128
|
break
|
140
129
|
if r is not None:
|
141
|
-
if isinstance(r,
|
130
|
+
if isinstance(r, Iterable):
|
142
131
|
result.extend(r)
|
143
132
|
else:
|
144
133
|
result.append(r)
|
@@ -328,22 +317,22 @@ class Channel:
|
|
328
317
|
__qclasses__ = (_lib.C_IN, _lib.C_CHAOS, _lib.C_HS, _lib.C_NONE, _lib.C_ANY)
|
329
318
|
|
330
319
|
def __init__(self,
|
331
|
-
flags = None,
|
332
|
-
timeout = None,
|
333
|
-
tries = None,
|
334
|
-
ndots = None,
|
335
|
-
tcp_port = None,
|
336
|
-
udp_port = None,
|
337
|
-
servers = None,
|
338
|
-
domains = None,
|
339
|
-
lookups = None,
|
340
|
-
sock_state_cb = None,
|
341
|
-
socket_send_buffer_size = None,
|
342
|
-
socket_receive_buffer_size = None,
|
343
|
-
rotate = False,
|
344
|
-
local_ip = None,
|
345
|
-
local_dev = None,
|
346
|
-
resolvconf_path = None):
|
320
|
+
flags: Optional[int] = None,
|
321
|
+
timeout: Optional[float] = None,
|
322
|
+
tries: Optional[int] = None,
|
323
|
+
ndots: Optional[int] = None,
|
324
|
+
tcp_port: Optional[int] = None,
|
325
|
+
udp_port: Optional[int] = None,
|
326
|
+
servers: Optional[Iterable[Union[str, bytes]]] = None,
|
327
|
+
domains: Optional[Iterable[Union[str, bytes]]] = None,
|
328
|
+
lookups: Union[str, bytes, None] = None,
|
329
|
+
sock_state_cb: Optional[Callable[[int, bool, bool], None]] = None,
|
330
|
+
socket_send_buffer_size: Optional[int] = None,
|
331
|
+
socket_receive_buffer_size: Optional[int] = None,
|
332
|
+
rotate: bool = False,
|
333
|
+
local_ip: Union[str, bytes, None] = None,
|
334
|
+
local_dev: Optional[str] = None,
|
335
|
+
resolvconf_path: Union[str, bytes, None] = None):
|
347
336
|
|
348
337
|
channel = _ffi.new("ares_channel *")
|
349
338
|
options = _ffi.new("struct ares_options *")
|
@@ -430,11 +419,11 @@ class Channel:
|
|
430
419
|
if local_dev:
|
431
420
|
self.set_local_dev(local_dev)
|
432
421
|
|
433
|
-
def cancel(self):
|
422
|
+
def cancel(self) -> None:
|
434
423
|
_lib.ares_cancel(self._channel[0])
|
435
424
|
|
436
425
|
@property
|
437
|
-
def servers(self):
|
426
|
+
def servers(self) -> list[str]:
|
438
427
|
servers = _ffi.new("struct ares_addr_node **")
|
439
428
|
|
440
429
|
r = _lib.ares_get_servers(self._channel[0], servers)
|
@@ -457,7 +446,7 @@ class Channel:
|
|
457
446
|
return server_list
|
458
447
|
|
459
448
|
@servers.setter
|
460
|
-
def servers(self, servers):
|
449
|
+
def servers(self, servers: Iterable[Union[str, bytes]]) -> None:
|
461
450
|
c = _ffi.new("struct ares_addr_node[%d]" % len(servers))
|
462
451
|
for i, server in enumerate(servers):
|
463
452
|
if _lib.ares_inet_pton(socket.AF_INET, ascii_bytes(server), _ffi.addressof(c[i].addr.addr4)) == 1:
|
@@ -487,7 +476,7 @@ class Channel:
|
|
487
476
|
|
488
477
|
return rfds, wfds
|
489
478
|
|
490
|
-
def process_fd(self, read_fd, write_fd):
|
479
|
+
def process_fd(self, read_fd: int, write_fd: int) -> None:
|
491
480
|
_lib.ares_process_fd(self._channel[0], _ffi.cast("ares_socket_t", read_fd), _ffi.cast("ares_socket_t", write_fd))
|
492
481
|
|
493
482
|
def timeout(self, t = None):
|
@@ -509,7 +498,7 @@ class Channel:
|
|
509
498
|
|
510
499
|
return (tv.tv_sec + tv.tv_usec / 1000000.0)
|
511
500
|
|
512
|
-
def gethostbyaddr(self, addr, callback):
|
501
|
+
def gethostbyaddr(self, addr: str, callback: Callable[[Any, int], None]) -> None:
|
513
502
|
if not callable(callback):
|
514
503
|
raise TypeError("a callable is required")
|
515
504
|
|
@@ -528,7 +517,7 @@ class Channel:
|
|
528
517
|
_global_set.add(userdata)
|
529
518
|
_lib.ares_gethostbyaddr(self._channel[0], address, _ffi.sizeof(address[0]), family, _lib._host_cb, userdata)
|
530
519
|
|
531
|
-
def gethostbyname(self, name, family, callback):
|
520
|
+
def gethostbyname(self, name: str, family: socket.AddressFamily, callback: Callable[[Any, int], None]) -> None:
|
532
521
|
if not callable(callback):
|
533
522
|
raise TypeError("a callable is required")
|
534
523
|
|
@@ -536,7 +525,16 @@ class Channel:
|
|
536
525
|
_global_set.add(userdata)
|
537
526
|
_lib.ares_gethostbyname(self._channel[0], parse_name(name), family, _lib._host_cb, userdata)
|
538
527
|
|
539
|
-
def getaddrinfo(
|
528
|
+
def getaddrinfo(
|
529
|
+
self,
|
530
|
+
host: str,
|
531
|
+
port: Optional[int],
|
532
|
+
callback: Callable[[Any, int], None],
|
533
|
+
family: socket.AddressFamily = 0,
|
534
|
+
type: int = 0,
|
535
|
+
proto: int = 0,
|
536
|
+
flags: int = 0
|
537
|
+
) -> None:
|
540
538
|
if not callable(callback):
|
541
539
|
raise TypeError("a callable is required")
|
542
540
|
|
@@ -557,7 +555,7 @@ class Channel:
|
|
557
555
|
hints.ai_protocol = proto
|
558
556
|
_lib.ares_getaddrinfo(self._channel[0], parse_name(host), service, hints, _lib._addrinfo_cb, userdata)
|
559
557
|
|
560
|
-
def query(self, name, query_type, callback, query_class=None):
|
558
|
+
def query(self, name: str, query_type: str, callback: Callable[[Any, int], None], query_class: Optional[str] = None) -> None:
|
561
559
|
self._do_query(_lib.ares_query, name, query_type, callback, query_class=query_class)
|
562
560
|
|
563
561
|
def search(self, name, query_type, callback, query_class=None):
|
@@ -590,7 +588,7 @@ class Channel:
|
|
590
588
|
else:
|
591
589
|
raise ValueError("invalid IP address")
|
592
590
|
|
593
|
-
def getnameinfo(self, address, flags, callback):
|
591
|
+
def getnameinfo(self, address: Union[IP4, IP6], flags: int, callback: Callable[[Any, int], None]) -> None:
|
594
592
|
if not callable(callback):
|
595
593
|
raise TypeError("a callable is required")
|
596
594
|
|
@@ -849,7 +847,62 @@ class ares_addrinfo_result(AresResult):
|
|
849
847
|
_lib.ares_freeaddrinfo(ares_addrinfo)
|
850
848
|
|
851
849
|
|
850
|
+
__all__ = (
|
851
|
+
"ARES_FLAG_USEVC",
|
852
|
+
"ARES_FLAG_PRIMARY",
|
853
|
+
"ARES_FLAG_IGNTC",
|
854
|
+
"ARES_FLAG_NORECURSE",
|
855
|
+
"ARES_FLAG_STAYOPEN",
|
856
|
+
"ARES_FLAG_NOSEARCH",
|
857
|
+
"ARES_FLAG_NOALIASES",
|
858
|
+
"ARES_FLAG_NOCHECKRESP",
|
859
|
+
|
860
|
+
# Nameinfo flag values
|
861
|
+
"ARES_NI_NOFQDN",
|
862
|
+
"ARES_NI_NUMERICHOST",
|
863
|
+
"ARES_NI_NAMEREQD",
|
864
|
+
"ARES_NI_NUMERICSERV",
|
865
|
+
"ARES_NI_DGRAM",
|
866
|
+
"ARES_NI_TCP",
|
867
|
+
"ARES_NI_UDP",
|
868
|
+
"ARES_NI_SCTP",
|
869
|
+
"ARES_NI_DCCP",
|
870
|
+
"ARES_NI_NUMERICSCOPE",
|
871
|
+
"ARES_NI_LOOKUPHOST",
|
872
|
+
"ARES_NI_LOOKUPSERVICE",
|
873
|
+
"ARES_NI_IDN",
|
874
|
+
"ARES_NI_IDN_ALLOW_UNASSIGNED",
|
875
|
+
"ARES_NI_IDN_USE_STD3_ASCII_RULES",
|
876
|
+
|
877
|
+
# Bad socket
|
878
|
+
"ARES_SOCKET_BAD",
|
852
879
|
|
853
|
-
__all__ = exported_pycares_symbols + list(exported_pycares_symbols_map.keys()) + ['AresError', 'Channel', 'errno', '__version__']
|
854
880
|
|
855
|
-
|
881
|
+
# Query types
|
882
|
+
"QUERY_TYPE_A",
|
883
|
+
"QUERY_TYPE_AAAA",
|
884
|
+
"QUERY_TYPE_ANY",
|
885
|
+
"QUERY_TYPE_CAA",
|
886
|
+
"QUERY_TYPE_CNAME",
|
887
|
+
"QUERY_TYPE_MX",
|
888
|
+
"QUERY_TYPE_NAPTR",
|
889
|
+
"QUERY_TYPE_NS",
|
890
|
+
"QUERY_TYPE_PTR",
|
891
|
+
"QUERY_TYPE_SOA",
|
892
|
+
"QUERY_TYPE_SRV",
|
893
|
+
"QUERY_TYPE_TXT",
|
894
|
+
|
895
|
+
# Query classes
|
896
|
+
"QUERY_CLASS_IN",
|
897
|
+
"QUERY_CLASS_CHAOS",
|
898
|
+
"QUERY_CLASS_HS",
|
899
|
+
"QUERY_CLASS_NONE",
|
900
|
+
"QUERY_CLASS_ANY",
|
901
|
+
|
902
|
+
|
903
|
+
"ARES_VERSION",
|
904
|
+
"AresError",
|
905
|
+
"Channel",
|
906
|
+
"errno",
|
907
|
+
"__version__"
|
908
|
+
)
|
pycares/_cares.pyd
CHANGED
Binary file
|
pycares/_version.py
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
|
2
|
-
__version__ = '4.
|
2
|
+
__version__ = '4.6.1'
|
pycares/errno.py
CHANGED
@@ -1,50 +1,69 @@
|
|
1
|
+
from typing import Union
|
1
2
|
|
2
3
|
from ._cares import ffi as _ffi, lib as _lib
|
3
4
|
from .utils import maybe_str
|
4
5
|
|
6
|
+
ARES_SUCCESS = _lib.ARES_SUCCESS
|
7
|
+
# error codes
|
8
|
+
ARES_ENODATA = _lib.ARES_ENODATA
|
9
|
+
ARES_EFORMERR = _lib.ARES_EFORMERR
|
10
|
+
ARES_ESERVFAIL = _lib.ARES_ESERVFAIL
|
11
|
+
ARES_ENOTFOUND = _lib.ARES_ENOTFOUND
|
12
|
+
ARES_ENOTIMP = _lib.ARES_ENOTIMP
|
13
|
+
ARES_EREFUSED = _lib.ARES_EREFUSED
|
14
|
+
ARES_EBADQUERY = _lib.ARES_EBADQUERY
|
15
|
+
ARES_EBADNAME = _lib.ARES_EBADNAME
|
16
|
+
ARES_EBADFAMILY = _lib.ARES_EBADFAMILY
|
17
|
+
ARES_EBADRESP = _lib.ARES_EBADRESP
|
18
|
+
ARES_ECONNREFUSED = _lib.ARES_ECONNREFUSED
|
19
|
+
ARES_ETIMEOUT = _lib.ARES_ETIMEOUT
|
20
|
+
ARES_EOF = _lib.ARES_EOF
|
21
|
+
ARES_EFILE = _lib.ARES_EFILE
|
22
|
+
ARES_ENOMEM = _lib.ARES_ENOMEM
|
23
|
+
ARES_EDESTRUCTION = _lib.ARES_EDESTRUCTION
|
24
|
+
ARES_EBADSTR = _lib.ARES_EBADSTR
|
25
|
+
ARES_EBADFLAGS = _lib.ARES_EBADFLAGS
|
26
|
+
ARES_ENONAME = _lib.ARES_ENONAME
|
27
|
+
ARES_EBADHINTS = _lib.ARES_EBADHINTS
|
28
|
+
ARES_ENOTINITIALIZED = _lib.ARES_ENOTINITIALIZED
|
29
|
+
ARES_ELOADIPHLPAPI = _lib.ARES_ELOADIPHLPAPI
|
30
|
+
ARES_EADDRGETNETWORKPARAMS = _lib.ARES_EADDRGETNETWORKPARAMS
|
31
|
+
ARES_ECANCELLED = _lib.ARES_ECANCELLED
|
32
|
+
ARES_ESERVICE = _lib.ARES_ESERVICE
|
5
33
|
|
6
|
-
|
7
|
-
|
34
|
+
errorcode = {
|
35
|
+
ARES_SUCCESS: "ARES_SUCCESS",
|
8
36
|
# error codes
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
37
|
+
ARES_ENODATA: "ARES_ENODATA",
|
38
|
+
ARES_EFORMERR: "ARES_EFORMERR",
|
39
|
+
ARES_ESERVFAIL: "ARES_ESERVFAIL",
|
40
|
+
ARES_ENOTFOUND: "ARES_ENOTFOUND",
|
41
|
+
ARES_ENOTIMP: "ARES_ENOTIMP",
|
42
|
+
ARES_EREFUSED: "ARES_EREFUSED",
|
43
|
+
ARES_EBADQUERY: "ARES_EBADQUERY",
|
44
|
+
ARES_EBADNAME: "ARES_EBADNAME",
|
45
|
+
ARES_EBADFAMILY: "ARES_EBADFAMILY",
|
46
|
+
ARES_EBADRESP: "ARES_EBADRESP",
|
47
|
+
ARES_ECONNREFUSED: "ARES_ECONNREFUSED",
|
48
|
+
ARES_ETIMEOUT: "ARES_ETIMEOUT",
|
49
|
+
ARES_EOF: "ARES_EOF",
|
50
|
+
ARES_EFILE: "ARES_EFILE",
|
51
|
+
ARES_ENOMEM: "ARES_ENOMEM",
|
52
|
+
ARES_EDESTRUCTION: "ARES_EDESTRUCTION",
|
53
|
+
ARES_EBADSTR: "ARES_EBADSTR",
|
54
|
+
ARES_EBADFLAGS: "ARES_EBADFLAGS",
|
55
|
+
ARES_ENONAME: "ARES_ENONAME",
|
56
|
+
ARES_EBADHINTS: "ARES_EBADHINTS",
|
57
|
+
ARES_ENOTINITIALIZED: "ARES_ENOTINITIALIZED",
|
58
|
+
ARES_ELOADIPHLPAPI: "ARES_ELOADIPHLPAPI",
|
59
|
+
ARES_EADDRGETNETWORKPARAMS: "ARES_EADDRGETNETWORKPARAMS",
|
60
|
+
ARES_ECANCELLED: "ARES_ECANCELLED",
|
61
|
+
ARES_ESERVICE: "ARES_ESERVICE",
|
62
|
+
}
|
35
63
|
|
36
|
-
errorcode = {}
|
37
64
|
|
38
|
-
|
39
|
-
value = getattr(_lib, symbol)
|
40
|
-
globals()[symbol] = value
|
41
|
-
globals()["errorcode"][value] = symbol
|
42
|
-
|
43
|
-
|
44
|
-
def strerror(code):
|
65
|
+
def strerror(code: int) -> Union[str, bytes]:
|
45
66
|
return maybe_str(_ffi.string(_lib.ares_strerror(code)))
|
46
67
|
|
47
68
|
|
48
|
-
__all__ =
|
49
|
-
|
50
|
-
del exported_pycares_symbols
|
69
|
+
__all__ = ("errorcode", "strerror", *errorcode.values())
|
pycares/py.typed
ADDED
File without changes
|
pycares/utils.py
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
|
2
|
+
from typing import Union
|
3
|
+
|
2
4
|
try:
|
3
5
|
import idna as idna2008
|
4
6
|
except ImportError:
|
@@ -24,25 +26,20 @@ def maybe_str(data):
|
|
24
26
|
raise TypeError('only str (ascii encoding) and bytes are supported')
|
25
27
|
|
26
28
|
|
27
|
-
def
|
28
|
-
for c in text:
|
29
|
-
if ord(c) > 0x7f:
|
30
|
-
return False
|
31
|
-
return True
|
32
|
-
|
33
|
-
def parse_name_idna2008(name):
|
29
|
+
def parse_name_idna2008(name: str) -> str:
|
34
30
|
parts = name.split('.')
|
35
31
|
r = []
|
36
32
|
for part in parts:
|
37
|
-
if
|
33
|
+
if part.isascii():
|
38
34
|
r.append(part.encode('ascii'))
|
39
35
|
else:
|
40
36
|
r.append(idna2008.encode(part))
|
41
37
|
return b'.'.join(r)
|
42
38
|
|
43
|
-
|
39
|
+
|
40
|
+
def parse_name(name: Union[str, bytes]) -> bytes:
|
44
41
|
if isinstance(name, str):
|
45
|
-
if
|
42
|
+
if name.isascii():
|
46
43
|
return name.encode('ascii')
|
47
44
|
if idna2008 is not None:
|
48
45
|
return parse_name_idna2008(name)
|
@@ -1,6 +1,6 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.4
|
2
2
|
Name: pycares
|
3
|
-
Version: 4.
|
3
|
+
Version: 4.6.1
|
4
4
|
Summary: Python interface for c-ares
|
5
5
|
Home-page: http://github.com/saghul/pycares
|
6
6
|
Author: Saúl Ibarra Corretgé
|
@@ -28,6 +28,19 @@ License-File: LICENSE
|
|
28
28
|
Requires-Dist: cffi>=1.5.0
|
29
29
|
Provides-Extra: idna
|
30
30
|
Requires-Dist: idna>=2.1; extra == "idna"
|
31
|
+
Dynamic: author
|
32
|
+
Dynamic: author-email
|
33
|
+
Dynamic: classifier
|
34
|
+
Dynamic: description
|
35
|
+
Dynamic: description-content-type
|
36
|
+
Dynamic: home-page
|
37
|
+
Dynamic: license
|
38
|
+
Dynamic: license-file
|
39
|
+
Dynamic: platform
|
40
|
+
Dynamic: provides-extra
|
41
|
+
Dynamic: requires-dist
|
42
|
+
Dynamic: requires-python
|
43
|
+
Dynamic: summary
|
31
44
|
|
32
45
|
Looking for new maintainers
|
33
46
|
===========================
|
@@ -0,0 +1,12 @@
|
|
1
|
+
pycares/__init__.py,sha256=FUE_1XczxLUO4f9jWARbumO4oAWM4eF1UBS9Cs0EiQw,32626
|
2
|
+
pycares/__main__.py,sha256=-WwwGX4NQ8hpOqrNuCy59quCQJt7IAwQXdQjga5s4WA,2880
|
3
|
+
pycares/_cares.pyd,sha256=d8IuKCHHw7L5msgzbEDbSeZkLSTE9JtARFNeolfbVys,107008
|
4
|
+
pycares/_version.py,sha256=nMxGyGYNJ1000wnb1Janrs5k6aKCiMEh6a7VTHwXuaI,25
|
5
|
+
pycares/errno.py,sha256=32f2SnSjYACq7peW9Iqb7cvDvwup6LDpNMWGHWhLnWI,2340
|
6
|
+
pycares/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
7
|
+
pycares/utils.py,sha256=ZzjEdkygbU3_B1g4SVwlDS949PhttJG2gK735_6G5Ps,1344
|
8
|
+
pycares-4.6.1.dist-info/licenses/LICENSE,sha256=ZzIVbIpf5QFzaiLCDSjxhvH5EViAWLVO-W4ZgBzWvb8,1090
|
9
|
+
pycares-4.6.1.dist-info/METADATA,sha256=RA-2SXrzVC5VSMorEwbeyn1F8QTt2tpHQxwVsh1plp8,4622
|
10
|
+
pycares-4.6.1.dist-info/WHEEL,sha256=h1yBWRp7d7E3iSx_-CIQ9ghyrJ6lbw3eXQNv0LtpqIM,97
|
11
|
+
pycares-4.6.1.dist-info/top_level.txt,sha256=nIeo7L2XUVBQZO2YE6pH7tlKaBWTfmmRcXbqe_NWYCw,15
|
12
|
+
pycares-4.6.1.dist-info/RECORD,,
|
pycares-4.5.0.dist-info/RECORD
DELETED
@@ -1,11 +0,0 @@
|
|
1
|
-
pycares/__init__.py,sha256=EIkDaFs0MmRAYi6Ce2VzcA3H14-25zPyiD_6TfSBCSQ,30609
|
2
|
-
pycares/__main__.py,sha256=-WwwGX4NQ8hpOqrNuCy59quCQJt7IAwQXdQjga5s4WA,2880
|
3
|
-
pycares/_cares.pyd,sha256=lda5UE9DOhQQlJpPbieXRsLYk7OYHybPy97BnquuXzQ,107008
|
4
|
-
pycares/_version.py,sha256=LndxDVTCo2jR91ipCX7gSKfdLq7B21t2ofpRE-CSa_E,25
|
5
|
-
pycares/errno.py,sha256=cForwpErZsnPUQYttEgUjWZgi37cyrOGCWxUcO76HUE,1089
|
6
|
-
pycares/utils.py,sha256=lKohvVcx0fjDcbkK0hGgvgY5WWnshj1Snxy-gGRbDNo,1399
|
7
|
-
pycares-4.5.0.dist-info/LICENSE,sha256=ZzIVbIpf5QFzaiLCDSjxhvH5EViAWLVO-W4ZgBzWvb8,1090
|
8
|
-
pycares-4.5.0.dist-info/METADATA,sha256=2zq6M_4O0AU22YCieCf9t1DXPLZzHvlce5fYCA1JFYs,4331
|
9
|
-
pycares-4.5.0.dist-info/WHEEL,sha256=pUXSsnGWJ09R6rv65E7mPoM8rWovBqrkySmEuK3ly_A,97
|
10
|
-
pycares-4.5.0.dist-info/top_level.txt,sha256=nIeo7L2XUVBQZO2YE6pH7tlKaBWTfmmRcXbqe_NWYCw,15
|
11
|
-
pycares-4.5.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|