docstr: Return objects for the implementation of this class
  
  See get_object_internal for the description of what this function does
  
  Parameters
  ----------
  obj_type : string
      One of 'root', 'flow', 'run', 'step', 'task', 'artifact'
  obj_order: int
      Order in the list ['root', 'flow', 'run', 'step', 'task', 'artifact']
  sub_type : string
      Same as obj_type with the addition of 'metadata', 'self'
  sub_order:
      Order in the same list as the one for obj_order + ['metadata', 'self']
  filters : dict
      Dictionary with keys 'any_tags', 'tags' and 'system_tags'. If specified
      will return only objects that have the specified tags present. Filters
      are ANDed together so all tags must be present for the object to be returned.
  attempt : int or None
      If None, returns artifacts for latest *done* attempt and all metadata. Otherwise,
      returns artifacts for that attempt (existent, done or not) and *all* metadata
      NOTE: Unlike its external facing `get_object`, this function should
      return *all* metadata; the base class will properly implement the
      filter. For artifacts, this function should filter artifacts at
      the backend level.
  
  Return
  ------
      object or list :
          Depending on the call, the type of object return varies
code: def _get_object_internal(
      cls,
      obj_type,
      obj_order,
      sub_type,
      sub_order,
      filters,
      attempt,
      *args,
  ):
      """
      Return objects for the implementation of this class
  
      See get_object_internal for the description of what this function does
  
      Parameters
      ----------
      obj_type : string
          One of 'root', 'flow', 'run', 'step', 'task', 'artifact'
      obj_order: int
          Order in the list ['root', 'flow', 'run', 'step', 'task', 'artifact']
      sub_type : string
          Same as obj_type with the addition of 'metadata', 'self'
      sub_order:
          Order in the same list as the one for obj_order + ['metadata', 'self']
      filters : dict
          Dictionary with keys 'any_tags', 'tags' and 'system_tags'. If specified
          will return only objects that have the specified tags present. Filters
          are ANDed together so all tags must be present for the object to be returned.
      attempt : int or None
          If None, returns artifacts for latest *done* attempt and all metadata. Otherwise,
          returns artifacts for that attempt (existent, done or not) and *all* metadata
          NOTE: Unlike its external facing `get_object`, this function should
          return *all* metadata; the base class will properly implement the
          filter. For artifacts, this function should filter artifacts at
          the backend level.
  
      Return
      ------
          object or list :
              Depending on the call, the type of object return varies
      """
      raise NotImplementedError()
  
imports: import json
  import os
  import re
  import time
  from collections import namedtuple
  from itertools import chain
  from metaflow.exception import MetaflowInternalError, MetaflowTaggingError
  from metaflow.tagging_util import validate_tag
  from metaflow.util import get_username, resolve_identity_as_tuple, is_stringish
label_desc: Use image node_id 14 for calling the MetadataProvider obj's underlying member method code with example usage: obj._get_object_internal(cls, obj_type, obj_order, sub_type, sub_order, filters, attempt) without return types