Skip to content

Commit 781fcf6

Browse files
committed
fix: 🐛 add instance when creating issues
1 parent dce7375 commit 781fcf6

File tree

2 files changed

+20
-7
lines changed

2 files changed

+20
-7
lines changed

src/check_datapackage/check.py

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -230,8 +230,9 @@ def _check_fk_source_fields(
230230
) -> list[Issue]:
231231
"""Check that foreign key source fields exist and have the correct number."""
232232
issues = []
233-
source_fields = _key_fields_as_str_list(resolve("/fields", foreign_key))
234-
unknown_fields = _get_unknown_key_fields(source_fields, resource.value)
233+
source_fields = resolve("/fields", foreign_key)
234+
source_field_list = _key_fields_as_str_list(source_fields)
235+
unknown_fields = _get_unknown_key_fields(source_field_list, resource.value)
235236
if unknown_fields:
236237
issues.append(
237238
Issue(
@@ -241,11 +242,12 @@ def _check_fk_source_fields(
241242
"No fields found in resource for foreign key source fields: "
242243
f"{unknown_fields}."
243244
),
245+
instance=source_fields,
244246
)
245247
)
246248

247249
dest_fields = _key_fields_as_str_list(resolve("/reference/fields", foreign_key))
248-
if len(source_fields) != len(dest_fields):
250+
if len(source_field_list) != len(dest_fields):
249251
issues.append(
250252
Issue(
251253
jsonpath=f"{resource.jsonpath}.schema.foreignKeys.fields",
@@ -254,6 +256,7 @@ def _check_fk_source_fields(
254256
"The number of foreign key source fields must be the same as "
255257
"the number of foreign key destination fields."
256258
),
259+
instance=source_fields,
257260
)
258261
)
259262
return issues
@@ -264,8 +267,9 @@ def _check_fk_dest_fields_same_resource(
264267
resource: PropertyField,
265268
) -> list[Issue]:
266269
"""Check that foreign key destination fields exist on the same resource."""
267-
dest_fields = _key_fields_as_str_list(resolve("/reference/fields", foreign_key))
268-
unknown_fields = _get_unknown_key_fields(dest_fields, resource.value)
270+
dest_fields = resolve("/reference/fields", foreign_key)
271+
dest_field_list = _key_fields_as_str_list(dest_fields)
272+
unknown_fields = _get_unknown_key_fields(dest_field_list, resource.value)
269273
if not unknown_fields:
270274
return []
271275

@@ -277,6 +281,7 @@ def _check_fk_dest_fields_same_resource(
277281
"No fields found in resource for foreign key "
278282
f"destination fields: {unknown_fields}."
279283
),
284+
instance=dest_fields,
280285
)
281286
]
282287

@@ -285,7 +290,8 @@ def _check_fk_dest_fields_diff_resource(
285290
foreign_key: dict[str, Any], resource: PropertyField, properties: dict[str, Any]
286291
) -> list[Issue]:
287292
"""Check that foreign key destination fields exist on the destination resource."""
288-
dest_fields = _key_fields_as_str_list(resolve("/reference/fields", foreign_key))
293+
dest_fields = resolve("/reference/fields", foreign_key)
294+
dest_field_list = _key_fields_as_str_list(dest_fields)
289295
# Safe, as only keys of the correct type here
290296
dest_resource_name = cast(str, resolve("/reference/resource", foreign_key))
291297

@@ -299,11 +305,12 @@ def _check_fk_dest_fields_diff_resource(
299305
f"The destination resource {dest_resource_name!r} of this foreign "
300306
"key doesn't exist in the package."
301307
),
308+
instance=dest_resource_name,
302309
)
303310
]
304311

305312
unknown_fields = _get_unknown_key_fields(
306-
dest_fields, properties, f"{dest_resource_path}."
313+
dest_field_list, properties, f"{dest_resource_path}."
307314
)
308315
if not unknown_fields:
309316
return []
@@ -316,6 +323,7 @@ def _check_fk_dest_fields_diff_resource(
316323
f"No fields found in destination resource {dest_resource_name!r} "
317324
f"for foreign key destination fields: {unknown_fields}."
318325
),
326+
instance=dest_fields,
319327
)
320328
]
321329

tests/test_check.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@ def test_fail_mismatched_foreign_key_fields():
178178
assert len(issues) == 1
179179
assert issues[0].jsonpath == "$.resources[0].schema.foreignKeys.fields"
180180
assert issues[0].type == "foreign-key-source-fields"
181+
assert issues[0].instance == ["known_field"]
181182

182183

183184
@mark.parametrize(
@@ -205,6 +206,7 @@ def test_fail_bad_foreign_key_source_fields(source_fields, dest_fields):
205206
assert len(issues) == 1
206207
assert issues[0].jsonpath == "$.resources[0].schema.foreignKeys.fields"
207208
assert issues[0].type == "foreign-key-source-fields"
209+
assert issues[0].instance == source_fields
208210

209211

210212
@mark.parametrize(
@@ -234,6 +236,7 @@ def test_fail_bad_foreign_key_destination_fields_same_resource(
234236
assert len(issues) == 1
235237
assert issues[0].jsonpath == "$.resources[0].schema.foreignKeys.reference.fields"
236238
assert issues[0].type == "foreign-key-destination-fields"
239+
assert issues[0].instance == dest_fields
237240

238241

239242
def test_do_not_check_bad_foreign_keys_against_fields_same_resource():
@@ -288,6 +291,7 @@ def test_fail_foreign_key_with_unknown_destination_resource(properties_fk):
288291
assert len(issues) == 1
289292
assert issues[0].jsonpath == "$.resources[0].schema.foreignKeys.reference.resource"
290293
assert issues[0].type == "foreign-key-destination-resource"
294+
assert issues[0].instance == "unknown"
291295

292296

293297
@mark.parametrize(
@@ -313,6 +317,7 @@ def test_fail_bad_foreign_key_destination_fields_different_resource(
313317
assert len(issues) == 1
314318
assert issues[0].jsonpath == "$.resources[0].schema.foreignKeys.reference.fields"
315319
assert issues[0].type == "foreign-key-destination-fields"
320+
assert issues[0].instance == dest_fields
316321

317322

318323
def test_do_not_check_bad_foreign_keys_against_fields_different_resource(properties_fk):

0 commit comments

Comments
 (0)