Skip to content

Commit ef069de

Browse files
committed
Keep compat with old IndexStats.field_distribution
1 parent 28a0927 commit ef069de

File tree

2 files changed

+32
-4
lines changed

2 files changed

+32
-4
lines changed

meilisearch/models/index.py

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,43 @@
11
from __future__ import annotations
22

33
from enum import Enum
4-
from typing import Dict, List, Optional, Union
4+
from typing import Any, Dict, Iterator, List, Optional, Union
55

66
from camel_converter.pydantic_base import CamelBase
7+
from pydantic import ConfigDict, field_validator
8+
9+
10+
class FieldDistribution:
11+
__dict: Dict
12+
13+
def __init__(self, dist: Dict[str, int]) -> None:
14+
self.__dict = dist
15+
for key in dist:
16+
setattr(self, key, dist[key])
17+
18+
def __getattr__(self, attr: str) -> str:
19+
if attr in self.__dict.keys():
20+
return attr
21+
raise AttributeError(f"{self.__class__.__name__} object has no attribute {attr}")
22+
23+
def __iter__(self) -> Iterator:
24+
return iter(self.__dict__.items())
725

826

927
class IndexStats(CamelBase):
28+
model_config = ConfigDict(arbitrary_types_allowed=True)
29+
1030
number_of_documents: int
1131
is_indexing: bool
12-
field_distribution: Dict[str, int]
32+
field_distribution: FieldDistribution
33+
34+
@field_validator("field_distribution", mode="before")
35+
@classmethod
36+
def build_field_distribution(cls, v: Any) -> FieldDistribution:
37+
if not isinstance(v, dict):
38+
raise TypeError('"field_distribution" in IndexStats must be a dict')
39+
40+
return FieldDistribution(v)
1341

1442

1543
class Faceting(CamelBase):

tests/index/test_index_stats_meilisearch.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,5 @@ def test_get_stats_default(index_with_documents):
1313
response = index_with_documents().get_stats()
1414
assert isinstance(response, IndexStats)
1515
assert response.number_of_documents == 31
16-
assert "genre" in response.field_distribution
17-
assert response.field_distribution["genre"] == 11
16+
assert hasattr(response.field_distribution, "genre")
17+
assert response.field_distribution.genre == 11

0 commit comments

Comments
 (0)