Skip to content

Commit fa52a6e

Browse files
authored
[ENHANCEMENT] argilla: Remove attribute-like access (#5048)
<!-- Thanks for your contribution! As part of our Community Growers initiative 🌱, we're donating Justdiggit bunds in your name to reforest sub-Saharan Africa. To claim your Community Growers certificate, please contact David Berenstein in our Slack community or fill in this form https://tally.so/r/n9XrxK once your PR has been merged. --> # Description This PR addresses [discussion](#5026 (comment)) from PR #5026 and removes attribute-like access for record fields, vectors and metadata. **Type of change** (Please delete options that are not relevant. Remember to title the PR according to the type of change) - [ ] New feature (non-breaking change which adds functionality) - [ ] Refactor (change restructuring the codebase without changing functionality) - [ ] Improvement (change adding some improvement to an existing functionality) **How Has This Been Tested** (Please describe the tests that you ran to verify your changes. And ideally, reference `tests`) - [ ] Test A - [ ] Test B **Checklist** - [ ] I added relevant documentation - [ ] I followed the style guidelines of this project - [ ] I did a self-review of my code - [ ] I made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] I filled out [the contributor form](https://tally.so/r/n9XrxK) (see text above) - [ ] I have added relevant notes to the `CHANGELOG.md` file (See https://keepachangelog.com/)
1 parent 6452993 commit fa52a6e

File tree

11 files changed

+45
-93
lines changed

11 files changed

+45
-93
lines changed

argilla/src/argilla/records/_resource.py

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -270,12 +270,6 @@ class RecordFields(dict):
270270
def __init__(self, fields: Optional[Dict[str, FieldValue]] = None) -> None:
271271
super().__init__(fields or {})
272272

273-
def __getattr__(self, item: str):
274-
return self[item]
275-
276-
def __setattr__(self, key: str, value: MetadataValue):
277-
self[key] = value
278-
279273
def to_dict(self) -> dict:
280274
return dict(self.items())
281275

@@ -286,12 +280,6 @@ class RecordMetadata(dict):
286280
def __init__(self, metadata: Optional[Dict[str, MetadataValue]] = None) -> None:
287281
super().__init__(metadata or {})
288282

289-
def __getattr__(self, item: str):
290-
return self[item]
291-
292-
def __setattr__(self, key: str, value: MetadataValue):
293-
self[key] = value
294-
295283
def to_dict(self) -> dict:
296284
return dict(self.items())
297285

@@ -307,12 +295,6 @@ class RecordVectors(dict):
307295
def __init__(self, vectors: Dict[str, VectorValue]) -> None:
308296
super().__init__(vectors or {})
309297

310-
def __getattr__(self, item: str):
311-
return self[item]
312-
313-
def __setattr__(self, key: str, value: VectorValue):
314-
self[key] = value
315-
316298
def to_dict(self) -> Dict[str, List[float]]:
317299
return dict(self.items())
318300

@@ -371,7 +353,6 @@ def api_models(self) -> List[UserResponseModel]:
371353
]
372354

373355

374-
375356
class RecordSuggestions(Iterable[Suggestion]):
376357
"""This is a container class for the suggestions of a Record.
377358
It allows for accessing suggestions by attribute and iterating over them.
@@ -410,4 +391,3 @@ def to_dict(self) -> Dict[str, List[str]]:
410391

411392
def api_models(self) -> List[SuggestionModel]:
412393
return [suggestion.api_model() for suggestion in self.__suggestions]
413-

argilla/tests/integration/test_add_records.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,9 @@ def test_add_records(client):
8484
assert dataset_records[0].id == str(mock_data[0]["id"])
8585
assert dataset_records[1].id == str(mock_data[1]["id"])
8686
assert dataset_records[2].id == str(mock_data[2]["id"])
87-
assert dataset_records[0].fields.text == mock_data[0]["text"]
88-
assert dataset_records[1].fields.text == mock_data[1]["text"]
89-
assert dataset_records[2].fields.text == mock_data[2]["text"]
87+
assert dataset_records[0].fields["text"] == mock_data[0]["text"]
88+
assert dataset_records[1].fields["text"] == mock_data[1]["text"]
89+
assert dataset_records[2].fields["text"] == mock_data[2]["text"]
9090

9191

9292
def test_add_dict_records(client: Argilla):
@@ -124,7 +124,7 @@ def test_add_dict_records(client: Argilla):
124124

125125
for record, data in zip(ds.records, mock_data):
126126
assert record.id == data["id"]
127-
assert record.fields.text == data["text"]
127+
assert record.fields["text"] == data["text"]
128128
assert "label" not in record.__dict__
129129

130130
for record, data in zip(ds.records(batch_size=1, with_suggestions=True), mock_data):
@@ -193,7 +193,7 @@ def test_add_records_with_suggestions(client) -> None:
193193
assert dataset_records[0].suggestions.topics.value == ["topic1", "topic2"]
194194
assert dataset_records[0].suggestions.topics.score == [0.9, 0.8]
195195

196-
assert dataset_records[1].fields.text == mock_data[1]["text"]
196+
assert dataset_records[1].fields["text"] == mock_data[1]["text"]
197197
assert dataset_records[1].suggestions.comment.value == "I'm doing great, thank you!"
198198
assert dataset_records[1].suggestions.comment.score is None
199199
assert dataset_records[1].suggestions.topics.value == ["topic3"]
@@ -258,7 +258,7 @@ def test_add_records_with_responses(client) -> None:
258258

259259
for record, mock_record in zip(dataset_records, mock_data):
260260
assert record.id == str(mock_record["id"])
261-
assert record.fields.text == mock_record["text"]
261+
assert record.fields["text"] == mock_record["text"]
262262
assert record.responses.label[0].value == mock_record["my_label"]
263263
assert record.responses.label[0].user_id == user.id
264264

@@ -319,7 +319,7 @@ def test_add_records_with_responses_and_suggestions(client) -> None:
319319
dataset_records = list(dataset.records(with_suggestions=True))
320320

321321
assert dataset_records[0].id == str(mock_data[0]["id"])
322-
assert dataset_records[1].fields.text == mock_data[1]["text"]
322+
assert dataset_records[1].fields["text"] == mock_data[1]["text"]
323323
assert dataset_records[2].suggestions.label.value == "positive"
324324
assert dataset_records[2].responses.label[0].value == "negative"
325325
assert dataset_records[2].responses.label[0].user_id == user.id
@@ -386,7 +386,7 @@ def test_add_records_with_fields_mapped(client) -> None:
386386
dataset_records = list(dataset.records(with_suggestions=True))
387387

388388
assert dataset_records[0].id == str(mock_data[0]["id"])
389-
assert dataset_records[1].fields.text == mock_data[1]["x"]
389+
assert dataset_records[1].fields["text"] == mock_data[1]["x"]
390390
assert dataset_records[2].suggestions.label.value == "positive"
391391
assert dataset_records[2].suggestions.label.score == 0.5
392392
assert dataset_records[2].responses.label[0].value == "negative"
@@ -447,7 +447,7 @@ def test_add_records_with_id_mapped(client) -> None:
447447
dataset_records = list(dataset.records(with_suggestions=True))
448448

449449
assert dataset_records[0].id == str(mock_data[0]["uuid"])
450-
assert dataset_records[1].fields.text == mock_data[1]["x"]
450+
assert dataset_records[1].fields["text"] == mock_data[1]["x"]
451451
assert dataset_records[2].suggestions.label.value == "positive"
452452
assert dataset_records[2].responses.label[0].value == "negative"
453453
assert dataset_records[2].responses.label[0].user_id == user.id
@@ -571,7 +571,7 @@ def test_add_records_with_responses_and_same_schema_name(client: Argilla):
571571

572572
dataset_records = list(dataset.records(with_responses=True))
573573

574-
assert dataset_records[0].fields.text == mock_data[1]["text"]
574+
assert dataset_records[0].fields["text"] == mock_data[1]["text"]
575575
assert dataset_records[1].responses.label[0].value == "negative"
576576
assert dataset_records[1].responses.label[0].user_id == user.id
577577

argilla/tests/integration/test_export_dataset.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ def test_import_dataset_from_disk(dataset: rg.Dataset, client):
118118
new_dataset = rg.Dataset.from_disk(output_dir, client=client)
119119

120120
for i, record in enumerate(new_dataset.records(with_suggestions=True)):
121-
assert record.fields.text == mock_data[i]["text"]
121+
assert record.fields["text"] == mock_data[i]["text"]
122122
assert record.suggestions.label.value == mock_data[i]["label"]
123123

124124
assert new_dataset.settings.fields[0].name == "text"

argilla/tests/integration/test_export_records.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ def test_export_records_from_json(dataset: rg.Dataset):
241241
dataset.records.from_json(path=temp_file)
242242

243243
for i, record in enumerate(dataset.records(with_suggestions=True)):
244-
assert record.fields.text == mock_data[i]["text"]
244+
assert record.fields["text"] == mock_data[i]["text"]
245245
assert record.suggestions.label.value == mock_data[i]["label"]
246246
assert record.id == str(mock_data[i]["id"])
247247

@@ -297,6 +297,6 @@ def test_import_records_from_hf_dataset(dataset: rg.Dataset) -> None:
297297
dataset.records.log(records=mock_hf_dataset)
298298

299299
for i, record in enumerate(dataset.records(with_suggestions=True)):
300-
assert record.fields.text == mock_data[i]["text"]
300+
assert record.fields["text"] == mock_data[i]["text"]
301301
assert record.suggestions.label.value == mock_data[i]["label"]
302302
assert record.id == str(mock_data[i]["id"])

argilla/tests/integration/test_metadata.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,6 @@ def test_add_record_with_metadata(dataset_with_metadata: Dataset):
117117
dataset_with_metadata.records.log(records)
118118

119119
for idx, record in enumerate(dataset_with_metadata.records):
120-
assert record.metadata.category == records[idx]["category"]
121120
assert record.metadata["category"] == records[idx]["category"]
122121
assert len(record.metadata) == 1
123122
models = record.metadata.api_models()
@@ -134,7 +133,6 @@ def test_add_record_with_mapped_metadata(dataset_with_metadata: Dataset):
134133
dataset_with_metadata.records.log(records, mapping={"my_category": "category"})
135134

136135
for idx, record in enumerate(dataset_with_metadata.records):
137-
assert record.metadata.category == records[idx]["my_category"]
138136
assert record.metadata["category"] == records[idx]["my_category"]
139137
assert len(record.metadata) == 1
140138
models = record.metadata.api_models()

argilla/tests/integration/test_query_records.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,12 @@ def test_query_records_by_text(client: Argilla, dataset: Dataset):
6464

6565
assert len(records) == 1
6666
assert records[0].id == "1"
67-
assert records[0].fields.text == "First record"
67+
assert records[0].fields["text"] == "First record"
6868

6969
records = list(dataset.records(query="second"))
7070
assert len(records) == 1
7171
assert records[0].id == "2"
72-
assert records[0].fields.text == "Second record"
72+
assert records[0].fields["text"] == "Second record"
7373

7474
records = list(dataset.records(query="record"))
7575
assert len(records) == 2

argilla/tests/integration/test_update_dataset_settings.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,12 @@ def test_update_settings(self, client: Argilla, dataset: Dataset):
4141

4242
dataset = client.datasets(dataset.name)
4343
settings = dataset.settings
44-
assert settings.fields.text.use_markdown is True
45-
assert settings.vectors.vector.dimensions == 10
44+
assert settings.fields["text"].use_markdown is True
45+
assert settings.vectors["vector"].dimensions == 10
4646
assert isinstance(settings.metadata.metadata, FloatMetadataProperty)
4747

48-
settings.vectors.vector.title = "A new title for vector"
48+
settings.vectors["vector"].title = "A new title for vector"
4949

5050
settings.update()
5151
dataset = client.datasets(dataset.name)
52-
assert dataset.settings.vectors.vector.title == "A new title for vector"
52+
assert dataset.settings.vectors["vector"].title == "A new title for vector"

argilla/tests/integration/test_vectors.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,9 @@ def test_vectors(client: rg.Argilla, dataset: rg.Dataset):
7474
assert dataset_records[0].id == str(mock_data[0]["id"])
7575
assert dataset_records[1].id == str(mock_data[1]["id"])
7676
assert dataset_records[2].id == str(mock_data[2]["id"])
77-
assert dataset_records[0].vectors.vector == mock_data[0]["vector"]
78-
assert dataset_records[1].vectors.vector == mock_data[1]["vector"]
79-
assert dataset_records[2].vectors.vector == mock_data[2]["vector"]
77+
assert dataset_records[0].vectors["vector"] == mock_data[0]["vector"]
78+
assert dataset_records[1].vectors["vector"] == mock_data[1]["vector"]
79+
assert dataset_records[2].vectors["vector"] == mock_data[2]["vector"]
8080

8181

8282
def test_vectors_return_with_bool(client: rg.Argilla, dataset: rg.Dataset):
@@ -106,9 +106,9 @@ def test_vectors_return_with_bool(client: rg.Argilla, dataset: rg.Dataset):
106106
assert dataset_records[0].id == str(mock_data[0]["id"])
107107
assert dataset_records[1].id == str(mock_data[1]["id"])
108108
assert dataset_records[2].id == str(mock_data[2]["id"])
109-
assert dataset_records[0].vectors.vector == mock_data[0]["vector"]
110-
assert dataset_records[1].vectors.vector == mock_data[1]["vector"]
111-
assert dataset_records[2].vectors.vector == mock_data[2]["vector"]
109+
assert dataset_records[0].vectors["vector"] == mock_data[0]["vector"]
110+
assert dataset_records[1].vectors["vector"] == mock_data[1]["vector"]
111+
assert dataset_records[2].vectors["vector"] == mock_data[2]["vector"]
112112

113113

114114
def test_vectors_return_with_name(client: rg.Argilla, dataset: rg.Dataset):
@@ -138,6 +138,6 @@ def test_vectors_return_with_name(client: rg.Argilla, dataset: rg.Dataset):
138138
assert dataset_records[0].id == str(mock_data[0]["id"])
139139
assert dataset_records[1].id == str(mock_data[1]["id"])
140140
assert dataset_records[2].id == str(mock_data[2]["id"])
141-
assert dataset_records[0].vectors.vector == mock_data[0]["vector"]
142-
assert dataset_records[1].vectors.vector == mock_data[1]["vector"]
143-
assert dataset_records[2].vectors.vector == mock_data[2]["vector"]
141+
assert dataset_records[0].vectors["vector"] == mock_data[0]["vector"]
142+
assert dataset_records[1].vectors["vector"] == mock_data[1]["vector"]
143+
assert dataset_records[2].vectors["vector"] == mock_data[2]["vector"]

argilla/tests/unit/export/test_record_export_import_compatibillity.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ def test_export_record_to_from_dict(record):
4646
assert record.suggestions[0].value == imported_record.suggestions[0].value
4747
for key, value in record.metadata.items():
4848
assert imported_record.metadata[key] == value
49-
assert record.fields.text == imported_record.fields.text
49+
assert record.fields["text"] == imported_record.fields["text"]
5050
# This is a consequence of how UUIDs are treated in python and could be
5151
# problematic for users.
5252
assert str(record.id) == imported_record.id
@@ -62,5 +62,5 @@ def test_export_generic_io_via_json(record):
6262
assert record.suggestions[0].value == imported_record.suggestions[0].value
6363
for key, value in record.metadata.items():
6464
assert imported_record.metadata[key] == value
65-
assert record.fields.text == imported_record.fields.text
66-
assert record.vectors.text == imported_record.vectors.text
65+
assert record.fields["text"] == imported_record.fields["text"]
66+
assert record.vectors["text"] == imported_record.vectors["text"]

argilla/tests/unit/test_record_ingestion.py

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ def test_ingest_record_from_dict(dataset):
4343
},
4444
)
4545

46-
assert record.fields.prompt == "What is the capital of France?"
46+
assert record.fields["prompt"] == "What is the capital of France?"
4747
assert record.suggestions.label.value == "positive"
4848

4949

@@ -58,7 +58,7 @@ def test_ingest_record_from_dict_with_mapping(dataset):
5858
},
5959
)
6060

61-
assert record.fields.prompt == "What is the capital of France?"
61+
assert record.fields["prompt"] == "What is the capital of France?"
6262
assert record.suggestions.label.value == "positive"
6363

6464

@@ -70,7 +70,7 @@ def test_ingest_record_from_dict_with_suggestions(dataset):
7070
},
7171
)
7272

73-
assert record.fields.prompt == "Hello World, how are you?"
73+
assert record.fields["prompt"] == "Hello World, how are you?"
7474
assert record.suggestions.label.value == "negative"
7575

7676

@@ -88,7 +88,7 @@ def test_ingest_record_from_dict_with_suggestions_scores(dataset):
8888
},
8989
)
9090

91-
assert record.fields.prompt == "Hello World, how are you?"
91+
assert record.fields["prompt"] == "Hello World, how are you?"
9292
assert record.suggestions.label.value == "negative"
9393
assert record.suggestions.label.score == 0.9
9494
assert record.suggestions.label.agent == "model_name"
@@ -108,7 +108,7 @@ def test_ingest_record_from_dict_with_suggestions_scores_and_agent(dataset):
108108
},
109109
)
110110

111-
assert record.fields.prompt == "Hello World, how are you?"
111+
assert record.fields["prompt"] == "Hello World, how are you?"
112112
assert record.suggestions.label.value == "negative"
113113
assert record.suggestions.label.score == 0.9
114114
assert record.suggestions.label.agent == "model_name"
@@ -127,7 +127,7 @@ def test_ingest_record_from_dict_with_responses(dataset):
127127
user_id=user_id,
128128
)
129129

130-
assert record.fields.prompt == "Hello World, how are you?"
130+
assert record.fields["prompt"] == "Hello World, how are you?"
131131
assert record.responses.label[0].value == "negative"
132132
assert record.responses.label[0].user_id == user_id
133133

@@ -142,7 +142,7 @@ def test_ingest_record_from_dict_with_id_as_id(dataset):
142142
},
143143
)
144144

145-
assert record.fields.prompt == "Hello World, how are you?"
145+
assert record.fields["prompt"] == "Hello World, how are you?"
146146
assert record.id == record_id
147147

148148

@@ -159,7 +159,7 @@ def test_ingest_record_from_dict_with_id_and_mapping(dataset):
159159
},
160160
)
161161

162-
assert record.fields.prompt == "Hello World, how are you?"
162+
assert record.fields["prompt"] == "Hello World, how are you?"
163163
assert record.id == record_id
164164

165165

@@ -172,7 +172,7 @@ def test_ingest_record_from_dict_with_metadata(dataset):
172172
},
173173
)
174174

175-
assert record.fields.prompt == "Hello World, how are you?"
175+
assert record.fields["prompt"] == "Hello World, how are you?"
176176
assert record.suggestions.label.value == "negative"
177177
assert record.metadata["score"] == 0.9
178178

@@ -189,7 +189,7 @@ def test_ingest_record_from_dict_with_metadata_and_mapping(dataset):
189189
},
190190
)
191191

192-
assert record.fields.prompt == "Hello World, how are you?"
192+
assert record.fields["prompt"] == "Hello World, how are you?"
193193
assert record.suggestions.label.value == "negative"
194194
assert record.metadata["score"] == 0.9
195195

@@ -203,9 +203,9 @@ def test_ingest_record_from_dict_with_vectors(dataset):
203203
},
204204
)
205205

206-
assert record.fields.prompt == "Hello World, how are you?"
206+
assert record.fields["prompt"] == "Hello World, how are you?"
207207
assert record.suggestions.label.value == "negative"
208-
assert record.vectors.vector == [1, 2, 3]
208+
assert record.vectors["vector"] == [1, 2, 3]
209209

210210

211211
def test_ingest_record_from_dict_with_vectors_and_mapping(dataset):
@@ -220,6 +220,6 @@ def test_ingest_record_from_dict_with_vectors_and_mapping(dataset):
220220
},
221221
)
222222

223-
assert record.fields.prompt == "Hello World, how are you?"
223+
assert record.fields["prompt"] == "Hello World, how are you?"
224224
assert record.suggestions.label.value == "negative"
225-
assert record.vectors.vector == [1, 2, 3]
225+
assert record.vectors["vector"] == [1, 2, 3]

0 commit comments

Comments
 (0)