4444)
4545from .._meta import (
4646 deprecation_warn ,
47- experimental ,
4847 experimental_warn ,
49- ExperimentalWarning ,
5048 preview ,
5149 preview_warn ,
5250 PreviewWarning ,
@@ -293,10 +291,6 @@ def driver(
293291 routing_context = routing_context , ** config )
294292
295293 @classmethod
296- @experimental (
297- "The bookmark manager feature is experimental. "
298- "It might be changed or removed any time even without prior notice."
299- )
300294 def bookmark_manager (
301295 cls ,
302296 initial_bookmarks : t .Union [None , Bookmarks , t .Iterable [str ]] = None ,
@@ -357,9 +351,6 @@ def bookmark_manager(
357351
358352 :returns: A default implementation of :class:`AsyncBookmarkManager`.
359353
360- **This is experimental** (see :ref:`filter-warnings-ref`).
361- It might be changed or removed any time even without prior notice.
362-
363354 .. versionadded:: 5.0
364355
365356 .. versionchanged:: 5.3
@@ -373,6 +364,8 @@ def bookmark_manager(
373364 an argument.
374365 * ``bookmarks_consumer`` no longer receives the database name as
375366 an argument.
367+
368+ .. versionchanged:: 5.8 stabilized from experimental
376369 """
377370 return AsyncNeo4jBookmarkManager (
378371 initial_bookmarks = initial_bookmarks ,
@@ -480,12 +473,7 @@ def __init__(self, pool, default_workspace_config):
480473 assert default_workspace_config is not None
481474 self ._pool = pool
482475 self ._default_workspace_config = default_workspace_config
483- with warnings .catch_warnings ():
484- warnings .filterwarnings ("ignore" ,
485- message = r".*\bbookmark manager\b.*" ,
486- category = ExperimentalWarning )
487- self ._query_bookmark_manager = \
488- AsyncGraphDatabase .bookmark_manager ()
476+ self ._query_bookmark_manager = AsyncGraphDatabase .bookmark_manager ()
489477
490478 async def __aenter__ (self ) -> AsyncDriver :
491479 return self
@@ -579,7 +567,7 @@ async def execute_query(
579567 self ,
580568 query_ : str ,
581569 parameters_ : t .Optional [t .Dict [str , t .Any ]] = None ,
582- routing_ : T_RoutingControl = RoutingControl .WRITERS ,
570+ routing_ : T_RoutingControl = RoutingControl .WRITE ,
583571 database_ : t .Optional [str ] = None ,
584572 impersonated_user_ : t .Optional [str ] = None ,
585573 bookmark_manager_ : t .Union [
@@ -598,7 +586,7 @@ async def execute_query(
598586 self ,
599587 query_ : str ,
600588 parameters_ : t .Optional [t .Dict [str , t .Any ]] = None ,
601- routing_ : T_RoutingControl = RoutingControl .WRITERS ,
589+ routing_ : T_RoutingControl = RoutingControl .WRITE ,
602590 database_ : t .Optional [str ] = None ,
603591 impersonated_user_ : t .Optional [str ] = None ,
604592 bookmark_manager_ : t .Union [
@@ -612,15 +600,11 @@ async def execute_query(
612600 ) -> _T :
613601 ...
614602
615- @experimental (
616- "Driver.execute_query is experimental. "
617- "It might be changed or removed any time even without prior notice."
618- )
619603 async def execute_query (
620604 self ,
621605 query_ : str ,
622606 parameters_ : t .Optional [t .Dict [str , t .Any ]] = None ,
623- routing_ : T_RoutingControl = RoutingControl .WRITERS ,
607+ routing_ : T_RoutingControl = RoutingControl .WRITE ,
624608 database_ : t .Optional [str ] = None ,
625609 impersonated_user_ : t .Optional [str ] = None ,
626610 bookmark_manager_ : t .Union [
@@ -661,9 +645,9 @@ async def work(tx):
661645 bookmark_manager=bookmark_manager_,
662646 auth=auth_,
663647 ) as session:
664- if routing_ == RoutingControl.WRITERS :
648+ if routing_ == RoutingControl.WRITE :
665649 return await session.execute_write(work)
666- elif routing_ == RoutingControl.READERS :
650+ elif routing_ == RoutingControl.READ :
667651 return await session.execute_read(work)
668652
669653 Usage example::
@@ -678,7 +662,7 @@ async def example(driver: neo4j.AsyncDriver) -> List[str]:
678662 records, summary, keys = await driver.execute_query(
679663 "MATCH (p:Person {age: $age}) RETURN p.name",
680664 {"age": 42},
681- routing_=neo4j.RoutingControl.READERS , # or just "r"
665+ routing_=neo4j.RoutingControl.READ , # or just "r"
682666 database_="neo4j",
683667 )
684668 assert keys == ["p.name"] # not needed, just for illustration
@@ -699,7 +683,7 @@ async def example(driver: neo4j.AsyncDriver) -> int:
699683 "SET p.nickname = 'My dear' "
700684 "RETURN count(*)",
701685 # optional routing parameter, as write is default
702- # routing_=neo4j.RoutingControl.WRITERS , # or just "w",
686+ # routing_=neo4j.RoutingControl.WRITE , # or just "w",
703687 database_="neo4j",
704688 result_transformer_=neo4j.AsyncResult.single,
705689 age=15,
@@ -837,17 +821,11 @@ async def example(driver: neo4j.AsyncDriver) -> neo4j.Record::
837821 :returns: the result of the ``result_transformer``
838822 :rtype: T
839823
840- **This is experimental** (see :ref:`filter-warnings-ref`).
841- It might be changed or removed any time even without prior notice.
842-
843- We are looking for feedback on this feature. Please let us know what
844- you think about it here:
845- https://github.com/neo4j/neo4j-python-driver/discussions/896
846-
847824 .. versionadded:: 5.5
848825
849826 .. versionchanged:: 5.8
850- Added the ``auth_`` parameter.
827+ * Added the ``auth_`` parameter.
828+ * Stabilized from experimental.
851829 """
852830 invalid_kwargs = [k for k in kwargs if
853831 k [- 2 :- 1 ] != "_" and k [- 1 :] == "_" ]
@@ -866,9 +844,6 @@ async def example(driver: neo4j.AsyncDriver) -> neo4j.Record::
866844 assert bookmark_manager_ is not _default
867845
868846 with warnings .catch_warnings ():
869- warnings .filterwarnings ("ignore" ,
870- message = r".*\bbookmark_manager\b.*" ,
871- category = ExperimentalWarning )
872847 warnings .filterwarnings ("ignore" ,
873848 message = r"^User switching\b.*" ,
874849 category = PreviewWarning )
@@ -877,9 +852,9 @@ async def example(driver: neo4j.AsyncDriver) -> neo4j.Record::
877852 bookmark_manager = bookmark_manager_ ,
878853 auth = auth_ )
879854 async with session :
880- if routing_ == RoutingControl .WRITERS :
855+ if routing_ == RoutingControl .WRITE :
881856 executor = session .execute_write
882- elif routing_ == RoutingControl .READERS :
857+ elif routing_ == RoutingControl .READ :
883858 executor = session .execute_read
884859 else :
885860 raise ValueError ("Invalid routing control value: %r"
@@ -889,11 +864,7 @@ async def example(driver: neo4j.AsyncDriver) -> neo4j.Record::
889864 )
890865
891866 @property
892- @experimental (
893- "Driver.query_bookmark_manager is experimental. "
894- "It might be changed or removed any time even without prior notice."
895- )
896- def query_bookmark_manager (self ) -> AsyncBookmarkManager :
867+ def execute_query_bookmark_manager (self ) -> AsyncBookmarkManager :
897868 """The driver's default query bookmark manager.
898869
899870 This is the default :class:`AsyncBookmarkManager` used by
@@ -912,10 +883,12 @@ async def example(driver: neo4j.AsyncDriver) -> None:
912883 # (i.e., can read what was written by <QUERY 2>)
913884 await driver.execute_query("<QUERY 3>")
914885
915- **This is experimental** (see :ref:`filter-warnings-ref`).
916- It might be changed or removed any time even without prior notice.
917-
918886 .. versionadded:: 5.5
887+
888+ .. versionchanged:: 5.8
889+ * Renamed from ``query_bookmark_manager`` to
890+ ``execute_query_bookmark_manager``.
891+ * Stabilized from experimental.
919892 """
920893 return self ._query_bookmark_manager
921894
@@ -1212,11 +1185,7 @@ async def _work(
12121185) -> _T :
12131186 res = await tx .run (query , parameters )
12141187 if transformer is AsyncResult .to_eager_result :
1215- with warnings .catch_warnings ():
1216- warnings .filterwarnings ("ignore" ,
1217- message = r".*\bto_eager_result\b.*" ,
1218- category = ExperimentalWarning )
1219- return await transformer (res )
1188+ return await transformer (res )
12201189 return await transformer (res )
12211190
12221191
0 commit comments