diff --git a/plugins/utils/README.md b/plugins/utils/README.md index f12fbff3..32ddffeb 100644 --- a/plugins/utils/README.md +++ b/plugins/utils/README.md @@ -294,3 +294,19 @@ delegate( persistent=True, ) ``` + +### load_default_view + +When this operator is enabled, any dataset whose `info` dict contains the name +of a valid saved view in its `default_view` key will load the specified view by +default (rather than the full dataset) whenever that dataset is opened in the +App. + +```py +# Save a view on the dataset that you wish to be loaded by default +dataset.save_view("your_view", view) + +# Register the saved view's name so the operator knows to load it +dataset.info["default_view"] = view.name +dataset.save() +``` diff --git a/plugins/utils/__init__.py b/plugins/utils/__init__.py index be60dffd..853a95d6 100644 --- a/plugins/utils/__init__.py +++ b/plugins/utils/__init__.py @@ -2470,6 +2470,29 @@ def execute(self, ctx): fcn(*args, **kwargs) +class LoadDefaultView(foo.Operator): + @property + def config(self): + return foo.OperatorConfig( + name="load_default_view", + label="Load default view", + on_dataset_open=True, + ) + + def execute(self, ctx): + default_view = ctx.dataset.info.get("default_view", None) + if default_view and ctx.dataset.has_saved_view(default_view): + if Version(fo.__version__) >= Version("0.23.7"): + ctx.trigger("set_view", params={"name": default_view}) + else: + view = ctx.dataset.load_saved_view(default_view) + ctx.trigger("set_view", params={"view": serialize_view(view)}) + + +def serialize_view(view): + return json.loads(json_util.dumps(view._serialize())) + + def register(p): p.register(CreateDataset) p.register(LoadDataset) @@ -2483,3 +2506,4 @@ def register(p): p.register(ComputeMetadata) p.register(GenerateThumbnails) p.register(Delegate) + p.register(LoadDefaultView) diff --git a/plugins/utils/fiftyone.yml b/plugins/utils/fiftyone.yml index 5211ad09..f35f7e4e 100644 --- a/plugins/utils/fiftyone.yml +++ b/plugins/utils/fiftyone.yml @@ -18,3 +18,4 @@ operators: - compute_metadata - generate_thumbnails - delegate + - load_default_view