Skip to content

Commit 6066229

Browse files
authored
Warnings overhaul (#790)
* Warnings overhaul * Fix potential to falsely emitted `DeprecationWarning` for deprecated `PoolConfig` options. * Treat warnings as errors during testing * Change TestKit backend to expect and catch warnings * TestKit backend: fix missing Python build dependency * TestKit backend: fix warning assertions * Test: close driver properly * TestKit backend: close resources properly
1 parent 608489d commit 6066229

File tree

22 files changed

+226
-45
lines changed

22 files changed

+226
-45
lines changed

neo4j/_async/driver.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -644,7 +644,6 @@ def session(self, **config) -> AsyncSession:
644644
"""
645645
session_config = SessionConfig(self._default_workspace_config,
646646
config)
647-
SessionConfig.consume(config) # Consume the config
648647
return AsyncSession(self._pool, session_config)
649648

650649

@@ -676,5 +675,4 @@ def __init__(self, pool, default_workspace_config):
676675
def session(self, **config) -> AsyncSession:
677676
session_config = SessionConfig(self._default_workspace_config,
678677
config)
679-
SessionConfig.consume(config) # Consume the config
680678
return AsyncSession(self._pool, session_config)

neo4j/_async/io/_bolt.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -259,19 +259,20 @@ def get_handshake(cls):
259259
return b"".join(version.to_bytes() for version in offered_versions).ljust(16, b"\x00")
260260

261261
@classmethod
262-
async def ping(cls, address, *, timeout=None, **config):
262+
async def ping(cls, address, *, timeout=None, pool_config=None):
263263
""" Attempt to establish a Bolt connection, returning the
264264
agreed Bolt protocol version if successful.
265265
"""
266-
config = PoolConfig.consume(config)
266+
if pool_config is None:
267+
pool_config = PoolConfig()
267268
try:
268269
s, protocol_version, handshake, data = \
269270
await AsyncBoltSocket.connect(
270271
address,
271272
timeout=timeout,
272-
custom_resolver=config.resolver,
273-
ssl_context=config.get_ssl_context(),
274-
keep_alive=config.keep_alive,
273+
custom_resolver=pool_config.resolver,
274+
ssl_context=pool_config.get_ssl_context(),
275+
keep_alive=pool_config.keep_alive,
275276
)
276277
except (ServiceUnavailable, SessionExpired, BoltHandshakeError):
277278
return None
@@ -282,7 +283,7 @@ async def ping(cls, address, *, timeout=None, **config):
282283
@classmethod
283284
async def open(
284285
cls, address, *, auth=None, timeout=None, routing_context=None,
285-
**pool_config
286+
pool_config=None
286287
):
287288
"""Open a new Bolt connection to a given server address.
288289
@@ -305,7 +306,8 @@ def time_remaining():
305306
return t if t > 0 else 0
306307

307308
t0 = perf_counter()
308-
pool_config = PoolConfig.consume(pool_config)
309+
if pool_config is None:
310+
pool_config = PoolConfig()
309311

310312
socket_connection_timeout = pool_config.connection_timeout
311313
if socket_connection_timeout is None:

neo4j/_async/io/_pool.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -379,7 +379,7 @@ def open(cls, address, *, auth, pool_config, workspace_config):
379379
async def opener(addr, timeout):
380380
return await AsyncBolt.open(
381381
addr, auth=auth, timeout=timeout, routing_context=None,
382-
**pool_config
382+
pool_config=pool_config
383383
)
384384

385385
pool = cls(opener, pool_config, workspace_config, address)
@@ -431,7 +431,7 @@ def open(cls, *addresses, auth, pool_config, workspace_config,
431431
async def opener(addr, timeout):
432432
return await AsyncBolt.open(
433433
addr, auth=auth, timeout=timeout,
434-
routing_context=routing_context, **pool_config
434+
routing_context=routing_context, pool_config=pool_config
435435
)
436436

437437
pool = cls(opener, pool_config, workspace_config, address)

neo4j/_conf.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -300,9 +300,19 @@ def set_attr(k, v):
300300
else:
301301
raise AttributeError(k)
302302

303+
rejected_keys = []
303304
for key, value in data_dict.items():
304305
if value is not None:
305-
set_attr(key, value)
306+
try:
307+
set_attr(key, value)
308+
except AttributeError as exc:
309+
if not exc.args == (key,):
310+
raise
311+
rejected_keys.append(key)
312+
313+
if rejected_keys:
314+
raise ConfigurationError("Unexpected config keys: "
315+
+ ", ".join(rejected_keys))
306316

307317
def __init__(self, *args, **kwargs):
308318
for arg in args:

neo4j/_meta.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818

1919
import asyncio
20+
import tracemalloc
2021
import typing as t
2122
from functools import wraps
2223
from warnings import warn
@@ -130,8 +131,6 @@ def inner(*args, **kwargs):
130131

131132

132133
def unclosed_resource_warn(obj):
133-
import tracemalloc
134-
from warnings import warn
135134
msg = f"Unclosed {obj!r}."
136135
trace = tracemalloc.get_object_traceback(obj)
137136
if trace:

neo4j/_sync/driver.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -643,7 +643,6 @@ def session(self, **config) -> Session:
643643
"""
644644
session_config = SessionConfig(self._default_workspace_config,
645645
config)
646-
SessionConfig.consume(config) # Consume the config
647646
return Session(self._pool, session_config)
648647

649648

@@ -675,5 +674,4 @@ def __init__(self, pool, default_workspace_config):
675674
def session(self, **config) -> Session:
676675
session_config = SessionConfig(self._default_workspace_config,
677676
config)
678-
SessionConfig.consume(config) # Consume the config
679677
return Session(self._pool, session_config)

neo4j/_sync/io/_bolt.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -259,19 +259,20 @@ def get_handshake(cls):
259259
return b"".join(version.to_bytes() for version in offered_versions).ljust(16, b"\x00")
260260

261261
@classmethod
262-
def ping(cls, address, *, timeout=None, **config):
262+
def ping(cls, address, *, timeout=None, pool_config=None):
263263
""" Attempt to establish a Bolt connection, returning the
264264
agreed Bolt protocol version if successful.
265265
"""
266-
config = PoolConfig.consume(config)
266+
if pool_config is None:
267+
pool_config = PoolConfig()
267268
try:
268269
s, protocol_version, handshake, data = \
269270
BoltSocket.connect(
270271
address,
271272
timeout=timeout,
272-
custom_resolver=config.resolver,
273-
ssl_context=config.get_ssl_context(),
274-
keep_alive=config.keep_alive,
273+
custom_resolver=pool_config.resolver,
274+
ssl_context=pool_config.get_ssl_context(),
275+
keep_alive=pool_config.keep_alive,
275276
)
276277
except (ServiceUnavailable, SessionExpired, BoltHandshakeError):
277278
return None
@@ -282,7 +283,7 @@ def ping(cls, address, *, timeout=None, **config):
282283
@classmethod
283284
def open(
284285
cls, address, *, auth=None, timeout=None, routing_context=None,
285-
**pool_config
286+
pool_config=None
286287
):
287288
"""Open a new Bolt connection to a given server address.
288289
@@ -305,7 +306,8 @@ def time_remaining():
305306
return t if t > 0 else 0
306307

307308
t0 = perf_counter()
308-
pool_config = PoolConfig.consume(pool_config)
309+
if pool_config is None:
310+
pool_config = PoolConfig()
309311

310312
socket_connection_timeout = pool_config.connection_timeout
311313
if socket_connection_timeout is None:

neo4j/_sync/io/_pool.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -379,7 +379,7 @@ def open(cls, address, *, auth, pool_config, workspace_config):
379379
def opener(addr, timeout):
380380
return Bolt.open(
381381
addr, auth=auth, timeout=timeout, routing_context=None,
382-
**pool_config
382+
pool_config=pool_config
383383
)
384384

385385
pool = cls(opener, pool_config, workspace_config, address)
@@ -431,7 +431,7 @@ def open(cls, *addresses, auth, pool_config, workspace_config,
431431
def opener(addr, timeout):
432432
return Bolt.open(
433433
addr, auth=auth, timeout=timeout,
434-
routing_context=routing_context, **pool_config
434+
routing_context=routing_context, pool_config=pool_config
435435
)
436436

437437
pool = cls(opener, pool_config, workspace_config, address)

testkit/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ RUN apt-get update && \
2525
apt-get install -y --no-install-recommends \
2626
make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev \
2727
libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev \
28-
libxml2-dev libxmlsec1-dev libffi-dev \
28+
libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev \
2929
ca-certificates && \
3030
apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
3131

testkit/backend.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424

2525

2626
if __name__ == "__main__":
27-
cmd = ["python", "-m", "testkitbackend"]
27+
cmd = ["python", "-W", "error", "-m", "testkitbackend"]
2828
if "TEST_BACKEND_SERVER" in os.environ:
2929
cmd.append(os.environ["TEST_BACKEND_SERVER"])
3030
subprocess.check_call(cmd, stdout=sys.stdout, stderr=sys.stderr)

0 commit comments

Comments
 (0)