Write Python code following FiftyOne's official conventions. Use when contributing to FiftyOne, developing plugins, or writing code that integrates with FiftyOne's codebase.
"""
Module description.
| Copyright 2017-2025, Voxel51, Inc.
| `voxel51.com <https://voxel51.com/>`_
|
"""
# Standard library
import logging
import os
# Third-party
import numpy as np
# eta (Voxel51 utilities)
import eta.core.utils as etau
# FiftyOne
import fiftyone.core.fields as fof
import fiftyone.core.labels as fol
import fiftyone.core.utils as fou
logger = logging.getLogger(__name__)
def public_function(arg):
"""Public API function."""
return _helper(arg)
def _helper(arg):
"""Private helper (underscore prefix)."""
return arg
Four groups, alphabetized within each:
| Group | Example |
|---|---|
| 1. Standard library | import logging, import os |
| 2. Third-party | import numpy as np, from PIL import Image |
| 3. eta packages | import eta.core.utils as etau |
| 4. FiftyOne | import fiftyone.core.labels as fol |
| Module | Alias |
|---|---|
fiftyone | fo |
fiftyone.core.labels | fol |
fiftyone.core.fields | fof |
fiftyone.core.media | fom |
fiftyone.core.storage | fos |
fiftyone.core.utils | fou |
fiftyone.utils.image | foui |
fiftyone.utils.video | fouv |
def get_operator(operator_uri, enabled=True):
"""Gets the operator with the given URI.
Args:
operator_uri: the operator URI
enabled (True): whether to include only enabled operators (True) or
only disabled operators (False) or all operators ("all")
Returns:
an :class:`fiftyone.operators.Operator`
Raises:
ValueError: if the operator is not found
"""
class ImageMetadata(Metadata):
"""Class for storing metadata about image samples.
Args:
size_bytes (None): the size of the image on disk, in bytes
mime_type (None): the MIME type of the image
width (None): the width of the image, in pixels
height (None): the height of the image, in pixels
"""
Key patterns:
param (default): description:class:fiftyone.module.Class``# Public API delegates to private helper
def build_for(cls, path_or_url, mime_type=None):
"""Builds a Metadata object for the given file."""
if path_or_url.startswith("http"):
return cls._build_for_url(path_or_url, mime_type=mime_type)
return cls._build_for_local(path_or_url, mime_type=mime_type)
# Private: underscore prefix, focused purpose
def _build_for_local(cls, filepath, mime_type=None):
"""Internal helper for local files."""
size_bytes = os.path.getsize(filepath)
if mime_type is None:
mime_type = etau.guess_mime_type(filepath)
return cls(size_bytes=size_bytes, mime_type=mime_type)
Use fou.lazy_import() for optional/heavy dependencies:
# Basic lazy import
o3d = fou.lazy_import("open3d", callback=lambda: fou.ensure_package("open3d"))
# With ensure_import for pycocotools
mask_utils = fou.lazy_import(
"pycocotools.mask", callback=lambda: fou.ensure_import("pycocotools")
)
# Internal module lazy import
fop = fou.lazy_import("fiftyone.core.plots.plotly")
When to use:
Use hasattr() for conditional behavior:
# Check for optional attribute
if hasattr(label, "confidence"):
if label.confidence is None or label.confidence < threshold:
label = label.__class__()
# Check for config attribute
if hasattr(eval_info.config, "iscrowd"):
crowd_attr = eval_info.config.iscrowd