class_docstr: FiftyOne annotation configuration settings.
class_docstr_tok: ["FiftyOne","annotation","configuration","settings","."]
code: def _parse_backends(self, d):
      d = d.get("backends", {})
      env_vars = dict(os.environ)
  
      #
      # `FIFTYONE_ANNOTATION_BACKENDS` can be used to declare which backends
      # are exposed. This may exclude builtin backends and/or declare new
      # backends
      #
  
      if "FIFTYONE_ANNOTATION_BACKENDS" in env_vars:
          backends = env_vars["FIFTYONE_ANNOTATION_BACKENDS"].split(",")
  
          # Special syntax to append rather than override default backends
          if "*" in backends:
              backends = set(b for b in backends if b != "*")
              backends |= set(self._BUILTIN_BACKENDS.keys())
  
          d = {backend: d.get(backend, {}) for backend in backends}
      else:
          for backend in self._BUILTIN_BACKENDS.keys():
              if backend not in d:
                  d[backend] = {}
  
      #
      # Extract parameters from any environment variables of the form
      # `FIFTYONE_<BACKEND>_<PARAMETER>`
      #
  
      for backend, d_backend in d.items():
          prefix = "FIFTYONE_%s_" % backend.upper()
          for env_name, env_value in env_vars.items():
              if env_name.startswith(prefix):
                  name = env_name[len(prefix) :].lower()
                  value = _parse_env_value(env_value)
                  d_backend[name] = value
  
      #
      # Set default parameters for builtin annotation backends
      #
  
      for backend, defaults in self._BUILTIN_BACKENDS.items():
          if backend not in d:
              continue
  
          d_backend = d[backend]
          for name, value in defaults.items():
              if name not in d_backend:
                  d_backend[name] = value
  
      return d
  
imports: import logging
  import os
  import pytz
  import eta
  import eta.core.config
  import fiftyone.constants
  import fiftyone.core.utils
label_desc: Use image node_id 2 for calling the AnnotationConfig obj's underlying member method code with example usage: obj._parse_backends(d) and returns: d