Skip to content

Commit a5484b9

Browse files
authored
Astrapy 2.0.0-preview: Tables and much more (#326)
* WIP on tables, descriptor refactor, dse compose * database table methods: list/listnames sync+async done * first table (unit) tests * covering vector types in table defs * wip on tolerant parse/coerce of table options * table crd in place * table info structures handle unsupported columns * just introduced scalar-type enum * check for ok:1 in all database class table/coll CD ops * table index descriptor classes * create (regular/vector) index; drop index * better, shorter, privacy-oriented repr for Full/APIOptions/db classes * more streamlined and secure hiding of tokens in repr and such * repr for apicommander * add support for sourceModel in vector index options * add items to the cql type enum * most table vanity methods * finished table vanity methods; started refactor exceptions * binary is handled at the payload coded layer * removed the pointless {ok:1} returns * remove check_exists and CollectionAlreadyExistsException * rationalize table test dir; some table DML+testing * fix timeout s-vs-ms bugs, simplify timeout internal management, unflaky timeout tests * collection find_one uses API findOne command * WIP table generics * wip generics of collection * tiny edit * brought typing in all tests; add 1/4 typing-specific test * add test for typing collections+tables * rename the default Row and Document types * started cursor2 * cursor2 rewritten and wired to collection find. distinct todo * distinct+in cursors for collections + test/ruff * refine cursor timeouts and replace CursorIsStartedException -> CursorException * for_each, map (also rename overall_max_time_ms -> overall_timeout_ms) * test of timeouts in cursor 'reduce' operations * add typing test for map, etc * table cursors, table's find and distinct methods * improve class hierarchy for table column descriptors * table converters, core logic and most converters * TableSet class and its usage * TableMap and its usage * apitimestamp class, loss/y api optins known to payload conv, support in collections read/write * TableDuration type and its wiring * use stdlib ipaddress for 'inet' CQL type * TableDate class and its use in converters * TableTime type and its usage * DataAPITimestamp covers the stringy rfc3339 formats; used in table converters * DataAPIVector basics * binary encoding of vectors in collections + api options to control it * renamed wire-format options * limit vector bin-enc for collections to insertions * fix tests with the new tolerant-on-insert policy for types * guard against empty-keyspace DBs without 'keyspace' and 'keyspaces' fields on devops responses * add .region property to databases; optimize vector-path in coll pre/post process; adjust dbInfo tests * move the pre-post-processing logic out of commander, into collections (tables todo) * renamed option to 'unroll_iterables_to_list' and used in the general collection preproc route * rename tpostprocessors; nested nan in lists/maps and its test * table type-driven preprocessing wip (DataAPITimestamp missing + tests) * most pre/post processing for tables (except using the custom dt option); missing wiring * full table pre-post-processors, testing and use of options * sensible repr and str for DataAPIVector * converter agent for tables, with caching * unexpected response exceptions renamed; result classes split T/C; full wiring of pre-post-processing for tables * rename WireFormatOptions->SerdesOptions; better timeout messages that always give the number in ms * info methods of async classes are async; adjust collections test re: datetime/DataAPITimestamp; made custom types hashable * WIP on surfacing original timeouts * wip 2 on surfacing the nominal timeout values * surfacing the timeouts as the user configured them * cursors' for_each and to_list error on closed cursors * adjust tests to fetch_db_info signature; suspend dropIndex (the command is missing somehow) * cursor to_list and for_each will error if cursor is closed * equality method on CollectionDescriptor * mostly reworked exception tree; added InvalidEnvironmentException * rearrange and rename collection-specific exceptions * rearranged exception tree * final arrangement of exceptions all in astrapy.exceptions * cursor.has_next can start iteration on IDLE cursor * less unwieldy repr for XInsertManyResult if many items * cursors don't accept project after map is set * if/not/exists option and all the create/drop table/index commands ready * renamed all TableX custom data types to DataAPIX * drop_table_index now a Database method * delete_many for tables; fixes and int.tests for distinct; int.tests for delete_many/one * full options to (table)find_one + testing * wip on the decimal management in jsonencoding * full feature for the decimal-first flag in collections + unit tests * integration testing of the decimal encoding and related options for collections * unit test of table codec paths for decimal/number support * remove CollectionNotFoundException; cleaned out a forgotten table drop_index method * table deletion methods return None; removed associated XResult classes and related exceptions * alterTable and tests * revert to common CumulativeOperationException; remove Table{DeleteMany|UpdateMany}Exception and Table{Delete|Update}Result * rename test modules tableX to dataapiX; factored the 'c' format for duration logic in a separate module * wip DataAPIDuration format flip * DataAPIDuration switched to the ISO-8601-with-signum notation * table's count_documents, estimated_document_count methods + aliases + unit test * removed outdated 'astrapy_latest_interface.py' * table update_one method and test * table insert_many sync + tests * table insert_many, async + integration tests * fix Decimal schema-hashing bug; added IT for update_one * align cursor class names * more terse repr of collections and tables * improve error messages for multi-error DataAPIResponseExceptions * cursors, reverted to .data_source common property for tables/collections * v2.0 diagrams (abstractions, exceptions) * DataAPIClient init and spawner methods all accept api_options besides top named params * database's get_database_admin accepts admin_api_options parameter * removed unnecessary token coercion in tests * uniform api_options to all copy/clone/conversion methods * remove useless token coercion steps * minor (typing and typos) * Table.alter() supports typing and returns the newly-typed table * Table.alter() accepts a dict which it tries to parse into an Operation * cursors' get_sort_vector behaves as dictated by serdes options for tables/collections * include_similarity full support * support for source_model in create collection * add tests for paginated table fnid; rename SortDocuments to SortMode (with alias) * switch to the 6-tier timeout options * duration, use c-format in write path for lossless (for now) * remove row-named count methods * schema-based fillers for missing columns in row, * table's list_indexes and list_index_names methods + test * remove cursor .keyspace property * database 'command' method can target no-keyspace; update param names and streamlined logic * fixed some tests after the api and client minor changes * all tests (except countDocuments) passing again * rename max_time_ms to timeout_ms consistently * refactored the per-method timeout override chains in a zero-respecting manner * reinstated use of command() in a test * DataAPITimestamp has friendlier repr * adjusted the year/sign part of DataAPITimestamp parsing and stringifying * tiny fix to timestamp parsing (+0000123 allowed, 0000123 no for year) * adjusted DataAPIDate parsing and to_string to respect sign-of-year constraints as the API * add test for the timeout overrides including passing zero * added timeout-override and timeout-zero test for async collection * tables, int. test restructure+enrich wip * wip for tuple right typing in ids * proper type handling in insertedIds (dict+tuple) and its testing * a mostly complete integration test suite for tables * DataAPIMap and DataAPISet __eq__ method behaves like regular maps and sets; completed read-then-write-all-types tests * bugfix: token passthrough in the async_fetch_database_info * standard table vectorize integration tests * include sort vector, include similarity; covered by table vectorize tests * more table IT coverage * bigfix: equality of DataAPIMap * I test of table command * some more find IT for tables * increase default per-req timeout to 10s * tables, full IT coverage of find * full findOne IT for tables * full integration test coverage of table cursors * wip3 naming timeouts in errors * wip1 fine-align timeouts * wip2 fine-align timeouts * full alignment to timeout management * split Create- vs List- TableIndexDefinition and TableIndexDescriptor * index creation/list final API for tables * CollectionOptions -> CollectionDefinition class rename * from_dict -> _from_dict method consistently * cursors, for_each and to_list start where consumtion stopped * callback to for_each can stop early by returning False * added a tiny bit of testing to table cursors with foreach * added all collection cursor integration tests * table class docstrings * made some internal-method param required; remove any check/error on include_sort_vector and include_similarity * docstring fixes; in part. move tokens out of client (unless admin example docstrings) * table index creation new signature (for real) * first quickstart and some more timezonecare in the readme * table create_index has optional options param * better readme quickstarts (t/c both) * table.py docstrings: create_index, create_vector_index, list_index_names, list_indexes, alter (+async) * table docstring wip: halfway throug find * minor parameters to table-creation structures made optional; more table docstrings * more docstrings to table.py * sync table docstrings tier0 done * full tier-0 table.py docstring, incl async * more standardization of table.py docstrings * TableVectorIndexOptions can be coerced from None; create_vector_index has optional options; minor docs improvement * more docstring improvement around tables * final datetime/timezone serdes options, completed * adjusted tests in the wake of datetime tzinfo rework * systematc, consistent rewrite of the options to copy and spawn methods for the various abstractions * fix clipped datetime diagram picture * conftest param naming update * minor IT adjustments * create/get[table/coll] docstrings done, vectorize IT improved * adapt a vectorize test to DataAPIVector * wip on createCollection arg unflattening * create_collection signature rework + fluent interface, completed * table creation docstring order fix * column_type may be omitted for vector column type descriptor * param name change in builder method; better repr for DataAPIMap * AsyncDatabase: get_table and get_collection methods are not async functions anymore * environment locked in APIOptions * TODO cleanup in tests * api_options: all docstrings; fixed a couple of spawn/api_option parameter names here and there * datetime serdes example in readme * a small apioptions example in readme * minor api-option docstring changes * docstring for date and vector * docstring all of the custom data types * more docstrings * rename CursorState->FindCursorState; most cursor docstrings * full cursor docstrings * simplified drop_table and drop_collection to only accept the string name of the target to drop * wip typing finds * add type parameter to find methods for returned items * more docstring; all collection vector writes abide by binary_encode_vectors setting * disable (for now) collection vector binary encoding altogether * all docstrings in table.py and database_info.py * docstring for collection.py * all database.py docstrings done * table descriptors, docstrings ok * all docstrings done * primitive->scalar terminology consistently for columns * rewritten CHANGES file * mark version as preview; upgrade hcd docker-compose data api image * comment a stupid flaky test * another tricky async timeout test gone * another tricky async timeout test gone 2 * disabled most of the timeout tests with httpsserver * removed the alias SortMode->SortDocuments * builder interface renamed to .builder()---.build() pattern * renamed TableScalarColumnType -> ColumnType * wip toward proper list/create split for collection def/descr * split list/create table descriptors for real
1 parent ab67b61 commit a5484b9

File tree

137 files changed

+36788
-7997
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

137 files changed

+36788
-7997
lines changed

CHANGES

Lines changed: 146 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,160 @@
1-
v 2.0.0
2-
=======
3-
Support for arbitrary 'database' and 'admin' headers throughout the object chain
4-
Reworked the options system:
1+
v 2.0.0-preview
2+
===============
3+
Introduction of full Tables support.
4+
Major revision of overall interface including Collection support.
5+
6+
Introduced new astrapy-specific data types for full expressivity (see `serdes_options` below):
7+
- `DataAPIVector` data type
8+
- `DataAPIDate`, `DataAPITime`, `DataAPITimestamp`, `DataAPIDuration`
9+
- `DataAPISet`, `DataAPIMap`
10+
11+
Typing support for Collections (optional):
12+
- `get_collection` and `create_collection` get a `document_type` parameter to go with the type hint `Collection[MyType]`
13+
- if unspecified fall back to `DefaultCollection = Collection[DefaultDocumentType]` (where `DefaultDocumentType = dict[str, Any]`)
14+
- cursors from `find` also allow strict typechecking
15+
16+
Introduced a consistent API Options system:
517
- an APIOptions object inherited at each "spawn" operation, with overrides
618
- environment-dependent defaults if nothing supplied
7-
- "spawn" operations expose top-level aliases for selected settings
8-
- per-method overrides. For timeouts, `max_time_ms` becomes an alias for more specific timeout types
9-
- collection and database's `info` method gets timeout parameters
10-
- (not user-facing) classes in the hierarchy other than DataAPIClient have breaking changes in their constructor (now options-first and keyword-arg-only)
11-
Major restructuring of the codebase into directories
12-
- BaseCursor not exported by astrapy.cursors anymore
13-
- some imports (supposedly not used externally) changed slightly
14-
- adapted and limited scope of test_imports.py
15-
Removed AstraDBDatabaseAdmin's `from_api_endpoint` static method (reason: unused)
16-
Rename main branch from 'master' ==> `main`
17-
Cursors' state described by the `CursorState` enum
18-
Removal of several deprecated modules/features from previous versions:
19+
- `serdes_options` to control data types accepted for writes and to select data types for reads
20+
- `serdes_options`: Collections default to using custom types for lossless and full-range expression of database content
21+
- `serdes_options.binary_encode_vectors`, to control usage of binary-encoding for writing vectors.
22+
- e.g. instead of 'datetime.datetime', instances of `DataAPITimestamp` are returned
23+
- Exception: numbers are treated by default as ints and floats. To have them all Decimal, set serdes_option.use_decimals_in_collections to True.
24+
- Use the options' serdes_option to opt out and revert to non-custom data types
25+
- For datetimes, fine control over naive-datetime tolerance and timezone is introduced. Usage of naive datetime is now OPT-IN.
26+
- Support for arbitrary 'database' and 'admin' headers throughout the object chain
27+
- Fully reworked timeout options through all abstractions:
28+
- `TimeoutOptions` has six classes of timeouts, applying differently to various methods according to the kind of method. Timeouts can be overridden per-method-call
29+
- removal of the 'max_time_ms` parameter ==> still a quick migration path is to replace it with `timeout_ms` throughout
30+
- timeout of 0 means that timeout is disabled
31+
32+
Reworked and enriched `FindCursor` interface:
33+
- Cursors are typed, similarly to Tables and Collections. The `find` method has an optional `document_type` parameter for typechecking.
34+
- Cursor classes renamed to `[Async]CollectionCursor`
35+
- Base class for all (find) cursors renamed to `FindCursor`
36+
- introduced `map` and `to_list` methods
37+
- `cursor.state` now has values in `FindCursorState` enum (take `cursor.state.value` for a string)
38+
- 'cursor.address' is removed from the API
39+
- `cursor.rewind()` returns None, mutates cursor in-place
40+
- removed 'cursor.distinct()': use the corresponding collection(/table) method.
41+
- removed cursor '.keyspace' property
42+
- removed 'retrieved' for cursors: use `consumed`
43+
- added many cursor management methods (see docstrings for details)
44+
45+
Other changes to existing API:
46+
- `Database.create_collection`: signature change (now accepts a single "collection definition")
47+
- added parameter `definition` to method (a CollectionDefinition, plain dictionary or None)
48+
- (support for `source_model` vector index setting within the `definition` parameter)
49+
- removed 'dimension', 'metric', 'source_model', 'service', 'indexing', 'default_id_type' (all of them subsumed in `definition`)
50+
- removed parameters 'additional_options' and 'timeout_ms' as part of the broader timeout rework
51+
- renamed 'CollectionOptions' class to `CollectionDefinition` (return type of `Collection.options()`):
52+
- renamed its 'options' attribute into `definition` (although the API payload calls it "options")
53+
- removed its 'raw_options' attribute (redundant w.r.t `CollectionDescriptor.raw_descriptor`)
54+
- `CollectionDefinition`: implemented fluent interface to build collection definition objects
55+
- renamed `CollectionVectorServiceOptions` class to `VectorServiceOptions`
56+
- renamed `astrapy.constants.SortDocuments` to `SortMode`
57+
- renamed (collection-specific) "Result" classes like this:
58+
- 'DeleteResult' ==> `CollectionDeleteResult`
59+
- 'InsertOneResult' ==> `CollectionInsertOneResult`
60+
- 'InsertManyResult' ==> `CollectionInsertManyResult`
61+
- 'UpdateResult' ==> `CollectionUpdateResult`
62+
- signature change from `-> {"ok": 1}` to `-> None` for some admin and schema methods:
63+
- `AstraDBAdmin`: `drop_database` (+ async)
64+
- `AstraDBDatabaseAdmin`, `DataAPIDatabaseAdmin`: `create_keyspace`, `drop_keyspace`, `drop` (+ async)
65+
- `Database`, `AsyncDatabase`: `drop_collection`, `drop_table`
66+
- `Collection`, `AsyncCollection`: `drop`
67+
- renamed parameter 'collection_name' to `collection_or_table_name` and allow for `keyspace=None` in database `command()` method
68+
- [Async]Database `drop_collection` method now accepts a keyspace parameter.
69+
- `AsyncDatabase` methods `get_collection` and `get_table` are not async functions anymore (remove the await when calling them)
70+
- the following "info" methods are made async (= awaitable): `AsyncDatabase.info`, `AsyncDatabase.name`, `AsyncCollection.info`, `AsyncTable.info`, `AsyncDatabase.list_collections`, `AsyncDatabase.list_tables`
71+
- Database info structure: changed class name and reworked attributes of `AstraDBAdminDatabaseInfo` (formerly 'AdminDatabaseInfo') and `AstraDBDatabaseInfo` (formerly 'DatabaseInfo')
72+
- `[Async]Collection` and `[Async]Database`: `info` method now accepts the relevant timeout parameters
73+
- remove 'check_exists' from `[Async]Database.create_collection` method (the client does no checks now)
74+
- removed AstraDBDatabaseAdmin's `from_api_endpoint` static method (reason: unused)
75+
- remove 'database' parameter to the `to_sync()` and `to_async()` conversion methods for collections
76+
- `[Async]Database.drop_collection` method accepts only the string name of the target to drop (no collection objects anymore)
77+
- removed the 'CommandCursor'/'AsyncCommandCursor' classes:
78+
- `AstraDBAdmin`: `list_databases`, `async_list_databases` methods return regular lists
79+
- `[Async]Database`: `list_collections`, `list_tables` methods return regular lists
80+
- `[Async]Database`: added a `.region` property
81+
82+
Exceptions hierarchy reworked:
83+
- removed 'CursorIsStartedException': now `CursorException` raised for all state-related illegal calls in cursors
84+
- removed 'CollectionNotFoundException', replaced by a ValueError in the few cases it's needed
85+
- removed `CollectionAlreadyExistsException` class (not used anymore without `check_exists`)
86+
- introduced `InvalidEnvironmentException` for operations invalid on some Data API environments.
87+
- renamed 'InsertManyException' ==> `CollectionInsertManyException`
88+
- renamed 'DeleteManyException' ==> `CollectionDeleteManyException`
89+
- renamed 'UpdateManyException' ==> `CollectionUpdateManyException`
90+
- renamed 'DevOpsAPIFaultyResponseException' ==> `UnexpectedDevOpsAPIResponseException`
91+
- renamed 'DataAPIFaultyResponseException' ==> `UnexpectedDataAPIResponseException`
92+
- (improved string representation of DataAPIResponseException cases with multiple error descriptors)
93+
94+
Removal of deprecated modules, objects, patterns and parameters:
1995
- 'core' (i.e. pre-1.0) library
2096
- 'collection.bulk_write' and the associated result and exception classes
2197
- 'vector=', 'vectorize=' and 'vectors=' parameters from collection methods
22-
- 'retrieved' (=> `consumed`) and 'collection' (=> `data_source`) for cursors
2398
- 'set_caller' method of `DataAPIClient`, `AstraDBAdmin`, `DataAPIDatabaseAdmin`, `AstraDBDatabaseAdmin`, `[Async]Database`, `[Async]Collection`
24-
- 'caller_name' and 'caller_version' parameters where `callers` is now expected
99+
- 'caller_name' and 'caller_version' parameters. A single list-of-pairs `callers` is now expected
25100
- 'id' and 'region' to DataAPIClient's 'get_database' (and async version). Use `api_endpoint` which is now the one positional parameter.
26-
- 'region' parameter of AstraDBDatabaseAdmin.get[_async]_database (was ignored already in the method)
27-
- 'max_time_ms' parameter in AstraDBDatabaseAdmin's constructor and its `from_astra_db_admin` method (was already ignored in the body)
28-
- The 'max_time_ms' parameter in DataAPIClient's 'get_database' method.
29101
- Accordingly, the syntax `client[api_endpoint]` also does not accept a database ID anymore.
102+
- 'region' parameter of `AstraDBDatabaseAdmin.get[_async]_database` (was ignored already in the method)
30103
- 'namespace' parameter of several methods of: DataAPIClient, admin objects, Database and Collection (use `keyspace`)
31104
- 'namespace' property of CollectionInfo, DatabaseInfo, CollectionNotFoundException, CollectionAlreadyExistsException (use `keyspace`)
32-
- 'namespace' property of Databases and Collections (switch to `keyspace`)
33-
- 'update_db_namespace' parameter to for admin keyspace CRD methods (use `update_db_keyspace`)
34-
- 'use_namespace' for Databases (switch to `use_keyspace`)
35-
- 'delete_all' method of Collection and AsyncCollection (use `delete_many({})`)
36-
Removal of unused imports from toplevel __init__.py (ids, constants, cursors)
105+
- 'namespace' property of `Database` and `Collection` (switch to `keyspace`)
106+
- 'update_db_namespace' parameter for keyspace admin methods (use `update_db_keyspace`)
107+
- 'use_namespace' for `Databases` (switch to `use_keyspace`)
108+
- 'delete_all' method of `Collection` and `AsyncCollection` (use `delete_many({})`)
109+
110+
API payloads are encoded with full Unicode (not encoded in ASCII anymore) for HTTP requests
111+
112+
- Revision of all "spawning and copying" methods for abstractions. Parameters added/removed/renamed (switch to the corresponding parameters inside the APIOptions instead of the removed keyword parameters):
113+
- All the client/admin/database/table/collection classes have an `api_options` parameter in their `with_options/to_[a]sync` method
114+
- `DataAPIClient`
115+
- `_copy()`, `with_options()`: removed 'callers'
116+
- `get_..._database...()`: removed 'api_path', 'api_version'
117+
- `get_admin()`: removed 'dev_ops_url', 'dev_ops_api_version'
118+
- `AstraDBAdmin`
119+
- `(_copy)`: removed 'environment', 'dev_ops_url', 'dev_ops_api_version', 'callers'
120+
- `(with_options)`: removed 'callers'
121+
- `(create..._database)`: added `token`, `spawn_api_options`
122+
- `(get..._database)`: removed 'api_path', 'api_version', 'database_request_timeout_ms', 'database_timeout_ms'; renamed 'database_api_options' => `spawn_api_options`
123+
- `(get_database_admin)`: added `token`, `spawn_api_options`
124+
- `AstraDBDatabaseAdmin`
125+
- `_copy()`: removed 'api_endpoint', 'environment', 'dev_ops_url', 'dev_ops_api_version', 'api_path', 'api_version', 'callers'
126+
- `with_options()`: removed 'api_endpoint', 'callers'
127+
- `get..._database()`: removed 'api_path', 'api_version', 'database_request_timeout_ms', 'database_timeout_ms'; renamed 'database_api_options' => `spawn_api_options`
128+
- `DataAPIDatabaseAdmin`
129+
- `_copy()`: removed 'api_endpoint', 'environment', 'api_path', 'api_version', 'callers'
130+
- `with_options()`: removed 'api_endpoint', 'callers'
131+
- `get..._database()`: removed 'api_path', 'api_version', 'database_request_timeout_ms', 'database_timeout_ms'; renamed 'database_api_options' => `spawn_api_options`
132+
- `[Async]Database`
133+
- `_copy()`: removed 'api_endpoint', 'callers', 'environment', 'api_path', 'api_version'
134+
- `with_options()`: removed 'callers'; added `token`
135+
- `to_[a]sync()`: removed 'api_endpoint', 'callers', 'environment', 'api_path', 'api_version',
136+
- `get_collection()`: removed 'collection_request_timeout_ms', 'collection_timeout_ms'; renamed 'collection_api_options' => `spawn_api_options`
137+
- `get_table()`: removed 'table_request_timeout_ms', 'table_timeout_ms'; renamed 'table_api_options' => `spawn_api_options`
138+
- `create_collection()`: removed 'collection_request_timeout_ms', 'collection_timeout_ms'; renamed 'collection_api_options' => `spawn_api_options`
139+
- `create_table()`: removed 'table_request_timeout_ms', 'table_timeout_ms'; renamed 'table_api_options' => `spawn_api_options`
140+
- `get_database_admin()`: removed 'dev_ops_url', 'dev_ops_api_version'
141+
- `[Async]Collection`
142+
- `_copy()`: removed 'request_timeout_ms', 'collection_timeout_ms', 'callers'
143+
- `with_options`: removed 'request_timeout_ms', 'collection_timeout_ms', 'name', 'callers'
144+
- `to_[a]sync()`: removed 'request_timeout_ms', 'collection_timeout_ms', 'keyspace', 'name', 'callers'
145+
- `[Async]Table`
146+
- `_copy()`: removed 'database', 'name', 'keyspace', 'request_timeout_ms', 'table_timeout_ms', 'callers'
147+
- `with_options`: removed 'name', 'request_timeout_ms', 'table_timeout_ms', 'callers'
148+
- `to_[a]sync()`: removed 'database', 'name', 'keyspace', 'request_timeout_ms', 'table_timeout_ms', 'callers'
37149

150+
Internal restructuring/maintenance things:
151+
- (not user-facing) classes in the hierarchy other than `DataAPIClient` have breaking changes in their constructor (now options-first and keyword-arg-only)
152+
- Token and Embedding API key coercion into `*Provider` now happens at the Options' init layer
153+
- `[Async]Collection.find_one` method uses the actual findOne API command
154+
- rename main branch from 'master' ==> `main`
155+
- major restructuring of the codebase in directories (some internal-only imports changed; reduced the scope of `test_imports`)
156+
- removal of unused imports from toplevel `__init__.py` (ids, constants, cursors)
157+
- simplified timeout management classes and representations
38158

39159
v. 1.5.2
40160
========

0 commit comments

Comments
 (0)