voxel51/fiftyone

[BUG] Datasets cannot have 'pk' fields

Open

#2,192 opened on Oct 24, 2022

View on GitHub
 (1 comment) (0 reactions) (0 assignees)Python (400 forks)batch import
bugcoregood first issue

Repository metrics

Stars
 (4,021 stars)
PR merge metrics
 (Avg merge 3d 11h) (161 merged PRs in 30d)

Description

Datasets cannot currently have a pk field:

import fiftyone as fo

sample = fo.Sample(filepath="image.jpg", pk=123)

dataset = fo.Dataset()
dataset.add_sample(sample)

dataset.set_values("foo", ["bar"])
# TypeError: id must be an instance of (bytes, str, ObjectId), not <class 'int'>

I believe pk should be a reserved keyword, IE these should be updated to raise errors:

sample = fo.Sample(filepath="image.jpg")
sample["pk"]  # ValueError: 'pk' is a reserved keyword

sample = fo.Sample(filepath="image.jpg", pk=123)    # ValueError: 'pk' is a reserved keyword

There may be other such keywords that need similar handling, btw.

I haven't investigated the source of the error. It might be possible to instead patch things so that pk is allowable.

Contributor guide