pycares 4.6.0__cp310-cp310-win32.whl → 4.7.0__cp310-cp310-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 CHANGED
@@ -332,7 +332,8 @@ class Channel:
332
332
  rotate: bool = False,
333
333
  local_ip: Union[str, bytes, None] = None,
334
334
  local_dev: Optional[str] = None,
335
- resolvconf_path: Union[str, bytes, None] = None):
335
+ resolvconf_path: Union[str, bytes, None] = None,
336
+ event_thread: bool = False) -> None:
336
337
 
337
338
  channel = _ffi.new("ares_channel *")
338
339
  options = _ffi.new("struct ares_options *")
@@ -373,6 +374,8 @@ class Channel:
373
374
  if sock_state_cb:
374
375
  if not callable(sock_state_cb):
375
376
  raise TypeError("sock_state_cb is not callable")
377
+ if event_thread:
378
+ raise RuntimeError("sock_state_cb and event_thread cannot be used together")
376
379
 
377
380
  userdata = _ffi.new_handle(sock_state_cb)
378
381
 
@@ -383,6 +386,14 @@ class Channel:
383
386
  options.sock_state_cb_data = userdata
384
387
  optmask = optmask | _lib.ARES_OPT_SOCK_STATE_CB
385
388
 
389
+ if event_thread:
390
+ if not ares_threadsafety():
391
+ raise RuntimeError("c-ares is not built with thread safety")
392
+ if sock_state_cb:
393
+ raise RuntimeError("sock_state_cb and event_thread cannot be used together")
394
+ optmask = optmask | _lib.ARES_OPT_EVENT_THREAD
395
+ options.evsys = _lib.ARES_EVSYS_DEFAULT
396
+
386
397
  if lookups:
387
398
  options.lookups = _ffi.new('char[]', ascii_bytes(lookups))
388
399
  optmask = optmask | _lib.ARES_OPT_LOOKUPS
@@ -422,6 +433,11 @@ class Channel:
422
433
  def cancel(self) -> None:
423
434
  _lib.ares_cancel(self._channel[0])
424
435
 
436
+ def reinit(self) -> None:
437
+ r = _lib.ares_reinit(self._channel[0])
438
+ if r != _lib.ARES_SUCCESS:
439
+ raise AresError(r, errno.strerror(r))
440
+
425
441
  @property
426
442
  def servers(self) -> list[str]:
427
443
  servers = _ffi.new("struct ares_addr_node **")
@@ -847,6 +863,15 @@ class ares_addrinfo_result(AresResult):
847
863
  _lib.ares_freeaddrinfo(ares_addrinfo)
848
864
 
849
865
 
866
+ def ares_threadsafety() -> bool:
867
+ """
868
+ Check if c-ares was compiled with thread safety support.
869
+
870
+ :return: True if thread-safe, False otherwise.
871
+ :rtype: bool
872
+ """
873
+ return bool(_lib.ares_threadsafety())
874
+
850
875
  __all__ = (
851
876
  "ARES_FLAG_USEVC",
852
877
  "ARES_FLAG_PRIMARY",
@@ -903,6 +928,7 @@ __all__ = (
903
928
  "ARES_VERSION",
904
929
  "AresError",
905
930
  "Channel",
931
+ "ares_threadsafety",
906
932
  "errno",
907
933
  "__version__"
908
934
  )
pycares/_cares.pyd CHANGED
Binary file
pycares/_version.py CHANGED
@@ -1,2 +1,2 @@
1
1
 
2
- __version__ = '4.6.0'
2
+ __version__ = '4.7.0'
pycares/errno.py CHANGED
@@ -3,49 +3,67 @@ from typing import Union
3
3
  from ._cares import ffi as _ffi, lib as _lib
4
4
  from .utils import maybe_str
5
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
6
33
 
7
- exported_pycares_symbols = [
8
- 'ARES_SUCCESS',
34
+ errorcode = {
35
+ ARES_SUCCESS: "ARES_SUCCESS",
9
36
  # error codes
10
- 'ARES_ENODATA',
11
- 'ARES_EFORMERR',
12
- 'ARES_ESERVFAIL',
13
- 'ARES_ENOTFOUND',
14
- 'ARES_ENOTIMP',
15
- 'ARES_EREFUSED',
16
- 'ARES_EBADQUERY',
17
- 'ARES_EBADNAME',
18
- 'ARES_EBADFAMILY',
19
- 'ARES_EBADRESP',
20
- 'ARES_ECONNREFUSED',
21
- 'ARES_ETIMEOUT',
22
- 'ARES_EOF',
23
- 'ARES_EFILE',
24
- 'ARES_ENOMEM',
25
- 'ARES_EDESTRUCTION',
26
- 'ARES_EBADSTR',
27
- 'ARES_EBADFLAGS',
28
- 'ARES_ENONAME',
29
- 'ARES_EBADHINTS',
30
- 'ARES_ENOTINITIALIZED',
31
- 'ARES_ELOADIPHLPAPI',
32
- 'ARES_EADDRGETNETWORKPARAMS',
33
- 'ARES_ECANCELLED',
34
- 'ARES_ESERVICE'
35
- ]
36
-
37
- errorcode = {}
38
-
39
- for symbol in exported_pycares_symbols:
40
- value = getattr(_lib, symbol)
41
- globals()[symbol] = value
42
- globals()["errorcode"][value] = symbol
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
+ }
43
63
 
44
64
 
45
65
  def strerror(code: int) -> Union[str, bytes]:
46
66
  return maybe_str(_ffi.string(_lib.ares_strerror(code)))
47
67
 
48
68
 
49
- __all__ = exported_pycares_symbols + ['errorcode', 'strerror']
50
-
51
- del exported_pycares_symbols
69
+ __all__ = ("errorcode", "strerror", *errorcode.values())
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pycares
3
- Version: 4.6.0
3
+ Version: 4.7.0
4
4
  Summary: Python interface for c-ares
5
5
  Home-page: http://github.com/saghul/pycares
6
6
  Author: Saúl Ibarra Corretgé
@@ -0,0 +1,12 @@
1
+ pycares/__init__.py,sha256=4pcVxQtqN2b3dYejSn0-5UhVQtnFf-giLhXNhdxO6pg,33615
2
+ pycares/__main__.py,sha256=-WwwGX4NQ8hpOqrNuCy59quCQJt7IAwQXdQjga5s4WA,2880
3
+ pycares/_cares.pyd,sha256=QZpGljj769IfyBTDUlly4WQtVmSSysMQl2WFTnZDB30,183808
4
+ pycares/_version.py,sha256=fQhP4tP6n6MNeE-3CN7K72JQzxJdhExDFIpuwM1P1lI,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.7.0.dist-info/licenses/LICENSE,sha256=ZzIVbIpf5QFzaiLCDSjxhvH5EViAWLVO-W4ZgBzWvb8,1090
9
+ pycares-4.7.0.dist-info/METADATA,sha256=lxElNQ2gWW8BVtKR3xS9FukhHz6roZi698VnT8KKCHI,4622
10
+ pycares-4.7.0.dist-info/WHEEL,sha256=yfRWACNKjr6OSXtz0eFfp9MlgTi3VwUGdYsrYzhFUcc,97
11
+ pycares-4.7.0.dist-info/top_level.txt,sha256=nIeo7L2XUVBQZO2YE6pH7tlKaBWTfmmRcXbqe_NWYCw,15
12
+ pycares-4.7.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (78.1.0)
2
+ Generator: setuptools (80.1.0)
3
3
  Root-Is-Purelib: false
4
4
  Tag: cp310-cp310-win32
5
5
 
@@ -1,12 +0,0 @@
1
- pycares/__init__.py,sha256=FUE_1XczxLUO4f9jWARbumO4oAWM4eF1UBS9Cs0EiQw,32626
2
- pycares/__main__.py,sha256=-WwwGX4NQ8hpOqrNuCy59quCQJt7IAwQXdQjga5s4WA,2880
3
- pycares/_cares.pyd,sha256=xK8IwK6Ldsiw4iQoYhhcGvFbyv20xHFUp4WB0IH_ONk,106496
4
- pycares/_version.py,sha256=MJZC_xBqothvBje6hgJoAUxF_5eXQehYQJjvordXTlQ,25
5
- pycares/errno.py,sha256=87ma2-f61ZbeU-9o5rUUscHsD4_i7aU5eyU2e7bzruQ,1141
6
- pycares/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
- pycares/utils.py,sha256=ZzjEdkygbU3_B1g4SVwlDS949PhttJG2gK735_6G5Ps,1344
8
- pycares-4.6.0.dist-info/licenses/LICENSE,sha256=ZzIVbIpf5QFzaiLCDSjxhvH5EViAWLVO-W4ZgBzWvb8,1090
9
- pycares-4.6.0.dist-info/METADATA,sha256=6ztMhOO8J7uN5j4lwhCs9YnOpryWYEsr-l_1NUl82tM,4622
10
- pycares-4.6.0.dist-info/WHEEL,sha256=xlKrXzr_1K18tdVBurRRTekMRqWYEwTju41b3f8kJkQ,97
11
- pycares-4.6.0.dist-info/top_level.txt,sha256=nIeo7L2XUVBQZO2YE6pH7tlKaBWTfmmRcXbqe_NWYCw,15
12
- pycares-4.6.0.dist-info/RECORD,,