Skip to content

Commit d8ec229

Browse files
authored
Merge pull request #1483 from sanders41/context-manager
Add a context manager to Client like in AsyncClient
2 parents c49f8d4 + 790653c commit d8ec229

File tree

14 files changed

+530
-493
lines changed

14 files changed

+530
-493
lines changed

README.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -66,15 +66,15 @@ async with AsyncClient('http://127.0.0.1:7700', 'masterKey') as client:
6666
```py
6767
from meilisearch_python_sdk import Client
6868

69-
client = Client('http://127.0.0.1:7700', 'masterKey')
70-
index = client.index("books")
69+
with Client('http://127.0.0.1:7700', 'masterKey') as client:
70+
index = client.index("books")
7171

72-
documents = [
73-
{"id": 1, "title": "Ready Player One"},
74-
{"id": 42, "title": "The Hitchhiker's Guide to the Galaxy"},
75-
]
72+
documents = [
73+
{"id": 1, "title": "Ready Player One"},
74+
{"id": 42, "title": "The Hitchhiker's Guide to the Galaxy"},
75+
]
7676

77-
index.add_documents(documents)
77+
index.add_documents(documents)
7878
```
7979

8080
The server will return an update id that can be used to

docs/client_api.md

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
## `client` Usage
22

3-
### Create a client
3+
### Create a client with a context manager
44

5-
To create a client:
5+
This client runs in a context manager which ensures that everything is cleaned up after the use of
6+
the client is done. To create a client:
67

78
```py
8-
from milisearch_python_sdk import Client
9+
from meilisearch-python-sdk import Client
910

1011

11-
client = Client("http://localhost:7700", "masterKey")
12-
index = client.index("movies")
13-
...
12+
with Client("http://localhost:7700", "masterKey") as client:
13+
index = client.index("movies")
14+
...
1415
```
1516

1617
### Custom headers
@@ -21,15 +22,32 @@ client.
2122
```py
2223
from meilisearch_python_sdk import Client
2324

24-
client = Client(
25+
with Client(
2526
"http://127.0.0.1:7700",
2627
"masterKey",
2728
custom_headers={"header_key_1": "header_value_1", "header_key_2": "header_value_2"}
28-
)
29-
index = client.index("movies")
29+
) as client:
30+
index = client.index("movies")
3031
...
3132
```
3233

34+
### Create a client without a context manager
35+
36+
It is also possible to call the client without using a context manager, but in doing so you will
37+
need to make sure to do the cleanup yourself:
38+
39+
```py
40+
from meilisearch-python-sdk import Client
41+
42+
43+
try:
44+
client = Client("http://localhost:7700", "masterKey")
45+
...
46+
finally:
47+
await client.close()
48+
49+
```
50+
3351
## `Client` API
3452

3553
::: meilisearch_python_sdk.Client

docs/json_handler.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@ documents = [
3737
{"id": uuid4(), "title": "test 1", "when": datetime.now()},
3838
{"id": uuid4(), "title": "Test 2", "when": datetime.now()},
3939
]
40-
client = Client("http://127.0.0.1:7700", json_handler=BuiltinHandler(serializer=CustomEncoder))
41-
index = client.index("movies", primary_key="id")
42-
index.add_documents(documents)
40+
with Client("http://127.0.0.1:7700", json_handler=BuiltinHandler(serializer=CustomEncoder)) as client:
41+
index = client.index("movies", primary_key="id")
42+
index.add_documents(documents)
4343
```
4444

4545
## orjson
@@ -57,9 +57,9 @@ documents = [
5757
{"id": uuid4(), "title": "test 1"},
5858
{"id": uuid4(), "title": "Test 2"},
5959
]
60-
client = Client("http://127.0.0.1:7700", json_handler=OrjsonHandler())
61-
index = client.index("movies", primary_key="id")
62-
index.add_documents(documents)
60+
with Client("http://127.0.0.1:7700", json_handler=OrjsonHandler()) as client:
61+
index = client.index("movies", primary_key="id")
62+
index.add_documents(documents)
6363
```
6464

6565
## ujson
@@ -77,7 +77,7 @@ documents = [
7777
{"id": uuid4(), "title": "test 1"},
7878
{"id": uuid4(), "title": "Test 2"},
7979
]
80-
client = Client("http://127.0.0.1:7700", json_handler=UjsonHandler())
81-
index = client.index("movies", primary_key="id")
82-
index.add_documents(documents)
80+
with Client("http://127.0.0.1:7700", json_handler=UjsonHandler()) as client:
81+
index = client.index("movies", primary_key="id")
82+
index.add_documents(documents)
8383
```

docs/plugins.md

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -84,13 +84,13 @@ async def main() -> int:
8484
with open("datasets/small_movies.json") as f:
8585
documents = json.load(f)
8686

87-
client = AsyncClient("http://127.0.0.1:7700", "masterKey")
88-
plugins = AsyncIndexPlugins(search_plugins=(SearchTrackerPlugin(),))
89-
index = await client.create_index("movies", primary_key="id", plugins=plugins)
90-
task = await index.add_documents(documents)
91-
await client.wait_for_task(task.task_uid)
92-
result = await index.search("Cars")
93-
print(result) # noqa: T201
87+
async with AsyncClient("http://127.0.0.1:7700", "masterKey") as client:
88+
plugins = AsyncIndexPlugins(search_plugins=(SearchTrackerPlugin(),))
89+
index = await client.create_index("movies", primary_key="id", plugins=plugins)
90+
task = await index.add_documents(documents)
91+
await client.wait_for_task(task.task_uid)
92+
result = await index.search("Cars")
93+
print(result) # noqa: T201
9494

9595
return 0
9696

@@ -142,13 +142,13 @@ def main() -> int:
142142
with open("datasets/small_movies.json") as f:
143143
documents = json.load(f)
144144

145-
client = Client("http://127.0.0.1:7700", "masterKey")
146-
plugins = IndexPlugins(search_plugins=(SearchTrackerPlugin(),))
147-
index = client.create_index("movies", primary_key="id", plugins=plugins)
148-
task = index.add_documents(documents)
149-
client.wait_for_task(task.task_uid)
150-
result = index.search("Cars")
151-
print(result) # noqa: T201
145+
with Client("http://127.0.0.1:7700", "masterKey") as client:
146+
plugins = IndexPlugins(search_plugins=(SearchTrackerPlugin(),))
147+
index = client.create_index("movies", primary_key="id", plugins=plugins)
148+
task = index.add_documents(documents)
149+
client.wait_for_task(task.task_uid)
150+
result = index.search("Cars")
151+
print(result) # noqa: T201
152152

153153
return 0
154154

@@ -224,17 +224,17 @@ async def main() -> int:
224224
with open("datasets/small_movies.json") as f:
225225
documents = json.load(f)
226226

227-
client = AsyncClient("http://127.0.0.1:7700", "masterKey")
228-
plugins = AsyncIndexPlugins(
229-
add_documents_plugins=(ModifyDocumentPlugin(),),
230-
update_documents_plugins=(ModifyDocumentPlugin(),),
231-
search_plugins=(FilterSearchResultsPlugin(),),
232-
)
233-
index = await client.create_index("movies", primary_key="id", plugins=plugins)
234-
task = await index.add_documents(documents)
235-
await client.wait_for_task(task.task_uid)
236-
result = await index.search("cars")
237-
print(result) # noqa: T201
227+
async with AsyncClient("http://127.0.0.1:7700", "masterKey") as client:
228+
plugins = AsyncIndexPlugins(
229+
add_documents_plugins=(ModifyDocumentPlugin(),),
230+
update_documents_plugins=(ModifyDocumentPlugin(),),
231+
search_plugins=(FilterSearchResultsPlugin(),),
232+
)
233+
index = await client.create_index("movies", primary_key="id", plugins=plugins)
234+
task = await index.add_documents(documents)
235+
await client.wait_for_task(task.task_uid)
236+
result = await index.search("cars")
237+
print(result) # noqa: T201
238238

239239
return 0
240240

@@ -295,17 +295,17 @@ def main() -> int:
295295
with open("datasets/small_movies.json") as f:
296296
documents = json.load(f)
297297

298-
client = Client("http://127.0.0.1:7700", "masterKey")
299-
plugins = IndexPlugins(
300-
add_documents_plugins=(ModifyDocumentPlugin(),),
301-
update_documents_plugins=(ModifyDocumentPlugin(),),
302-
search_plugins=(FilterSearchResultsPlugin(),),
303-
)
304-
index = client.create_index("movies", primary_key="id", plugins=plugins)
305-
task = index.add_documents(documents)
306-
client.wait_for_task(task.task_uid)
307-
result = index.search("cars")
308-
print(result) # noqa: T201
298+
with Client("http://127.0.0.1:7700", "masterKey") as client:
299+
plugins = IndexPlugins(
300+
add_documents_plugins=(ModifyDocumentPlugin(),),
301+
update_documents_plugins=(ModifyDocumentPlugin(),),
302+
search_plugins=(FilterSearchResultsPlugin(),),
303+
)
304+
index = client.create_index("movies", primary_key="id", plugins=plugins)
305+
task = index.add_documents(documents)
306+
client.wait_for_task(task.task_uid)
307+
result = index.search("cars")
308+
print(result) # noqa: T201
309309

310310
return 0
311311

examples/add_documents_decorator.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@ def load_documents() -> list[dict[str, Any]]:
1919

2020

2121
def main() -> int:
22-
client = Client("http://127.0.0.1:7700", "masterKey")
23-
index = client.create_index("movies", "id")
24-
load_documents()
25-
documents = index.get_documents()
22+
with Client("http://127.0.0.1:7700", "masterKey") as client:
23+
index = client.create_index("movies", "id")
24+
load_documents()
25+
documents = index.get_documents()
2626

27-
print(documents) # noqa: T201
27+
print(documents) # noqa: T201
2828

2929
return 0
3030

examples/add_documents_in_batches.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ def main() -> int:
99
with open("../datasets/small_movies.json") as f:
1010
documents = json.load(f)
1111

12-
client = Client("http://127.0.0.1:7700", "masterKey")
13-
index = client.index("movies")
12+
with Client("http://127.0.0.1:7700", "masterKey") as client:
13+
index = client.index("movies")
1414

15-
# Meilisearch prefers larger batch sizes so set this as large as you can.
16-
index.add_documents_in_batches(documents, primary_key="id", batch_size=1000)
15+
# Meilisearch prefers larger batch sizes so set this as large as you can.
16+
index.add_documents_in_batches(documents, primary_key="id", batch_size=1000)
1717

1818
return 0
1919

examples/documents_and_search_results.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -50,17 +50,17 @@ def main() -> int:
5050
with open("../datasets/small_movies.json") as f:
5151
documents = json.load(f)
5252

53-
client = Client("http://127.0.0.1:7700", "masterKey")
54-
plugins = IndexPlugins(
55-
add_documents_plugins=(ModifyDocumentPlugin(),),
56-
update_documents_plugins=(ModifyDocumentPlugin(),),
57-
search_plugins=(FilterSearchResultsPlugin(),),
58-
)
59-
index = client.create_index("movies", primary_key="id", plugins=plugins)
60-
task = index.add_documents(documents)
61-
client.wait_for_task(task.task_uid)
62-
result = index.search("cars")
63-
print(result) # noqa: T201
53+
with Client("http://127.0.0.1:7700", "masterKey") as client:
54+
plugins = IndexPlugins(
55+
add_documents_plugins=(ModifyDocumentPlugin(),),
56+
update_documents_plugins=(ModifyDocumentPlugin(),),
57+
search_plugins=(FilterSearchResultsPlugin(),),
58+
)
59+
index = client.create_index("movies", primary_key="id", plugins=plugins)
60+
task = index.add_documents(documents)
61+
client.wait_for_task(task.task_uid)
62+
result = index.search("cars")
63+
print(result) # noqa: T201
6464

6565
return 0
6666

examples/orjson_example.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88

99

1010
def add_documents(file_path: Path | str = "../datasets/small_movies.json") -> TaskInfo:
11-
client = Client("http://127.0.0.1:7700", "masterKey", json_handler=OrjsonHandler())
12-
index = client.create_index("movies", primary_key="id")
13-
return index.add_documents_from_file(file_path)
11+
with Client("http://127.0.0.1:7700", "masterKey", json_handler=OrjsonHandler()) as client:
12+
index = client.create_index("movies", primary_key="id")
13+
return index.add_documents_from_file(file_path)
1414

1515

1616
def main() -> int:

examples/search_tracker.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,13 @@ def search(index: Index, query: str) -> SearchResults[JsonDict]:
5353

5454

5555
def main() -> int:
56-
client = Client("http://127.0.0.1:7700", "masterKey")
57-
plugins = IndexPlugins(search_plugins=(SearchTrackerPlugin(),))
58-
index = client.create_index("movies", primary_key="id", plugins=plugins)
59-
task = add_documents(index)
60-
client.wait_for_task(task.task_uid)
61-
result = search(index, "Cars")
62-
print(result) # noqa: T201
56+
with Client("http://127.0.0.1:7700", "masterKey") as client:
57+
plugins = IndexPlugins(search_plugins=(SearchTrackerPlugin(),))
58+
index = client.create_index("movies", primary_key="id", plugins=plugins)
59+
task = add_documents(index)
60+
client.wait_for_task(task.task_uid)
61+
result = search(index, "Cars")
62+
print(result) # noqa: T201
6363

6464
return 0
6565

examples/ujson_example.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88

99

1010
def add_documents(file_path: Path | str = "../datasets/small_movies.json") -> TaskInfo:
11-
client = Client("http://127.0.0.1:7700", "masterKey", json_handler=UjsonHandler())
12-
index = client.create_index("movies", primary_key="id")
13-
return index.add_documents_from_file(file_path)
11+
with Client("http://127.0.0.1:7700", "masterKey", json_handler=UjsonHandler()) as client:
12+
index = client.create_index("movies", primary_key="id")
13+
return index.add_documents_from_file(file_path)
1414

1515

1616
def main() -> int:

0 commit comments

Comments
 (0)