class_docstr: Middleware for injecting client-side feature flags into the Context.
  
  The client webapp is expected to include a json-serialized version of its
  FeatureFlags in the `X-TensorBoard-Feature-Flags` header or the
  `tensorBoardFeatureFlags` query parameter. This middleware extracts the
  header or query parameter value and converts it into the client_feature_flags
  property for the DataProvider's Context object, where client_feature_flags
  is a Dict of string keys and arbitrary value types.
  
  In the event that both the header and query parameter are specified, the
  values from the header will take precedence.
code: def _parse_potential_header_param_flags(self, header_string):
      if not header_string:
          return {}
  
      try:
          header_feature_flags = json.loads(header_string)
      except json.JSONDecodeError:
          raise errors.InvalidArgumentError(
              "X-TensorBoard-Feature-Flags cannot be JSON decoded."
          )
  
      if not isinstance(header_feature_flags, dict):
          raise errors.InvalidArgumentError(
              "X-TensorBoard-Feature-Flags cannot be decoded to a dict."
          )
  
      return header_feature_flags
  
file_path: tensorboard/tensorboard/backend/client_feature_flags.py
imports: import json
  import urllib.parse
  from tensorboard import context
  from tensorboard import errors
label_desc: Use image node_id 3 for calling the ClientFeatureFlagsMiddleware obj's underlying member method code with example usage: obj._parse_potential_header_param_flags(header_string) and returns: header_feature_flags, dict