Skip to content

Commit 0841052

Browse files
🔵
1 parent 85f88ad commit 0841052

File tree

1 file changed

+10
-3
lines changed

1 file changed

+10
-3
lines changed

frictionless/resources/table.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -233,18 +233,25 @@ def __open_lookup(self):
233233
# Prepare source
234234
source_name = fk["reference"]["resource"]
235235
source_key = tuple(fk["reference"]["fields"])
236-
if source_name and source_name != self.name:
236+
if source_name == self.name or not source_name:
237+
# Self reference
238+
# A copy is needed as the resource is closed after the lookup
239+
source_res = self.to_copy()
240+
else:
237241
if not self.package:
238242
note = (
239243
'package is required for foreign keys to other resources: "{fk}"'
240244
)
241245
raise FrictionlessException(errors.ResourceError(note=note))
246+
242247
if not self.package.has_resource(source_name):
243248
note = f'failed to handle a foreign key for resource "{self.name}" as resource "{source_name}" does not exist'
244249
raise FrictionlessException(errors.ResourceError(note=note))
250+
251+
# A copy is needed as the resource is closed after the lookup.
252+
# Otherwise, this would cause issues in case of circular references.
245253
source_res = self.package.get_resource(source_name).to_copy()
246-
else:
247-
source_res = self.to_copy()
254+
248255
if source_res.schema:
249256
source_res.schema.foreign_keys = []
250257

0 commit comments

Comments
 (0)