class_docstr: This class manages the card's state for a single card.
  - It uses the `ComponentStore` to manage the storage of the components
  - It exposes methods to add, remove and access the components.
  - It exposes a `refresh` method that will allow refreshing a card with new data
  for realtime(ish) updates.
  - The `CardComponentCollector` exposes convenience methods similar to this class for a default
  editable card. These methods include :
      - `append`
      - `extend`
      - `clear`
      - `refresh`
      - `components`
      - `__iter__`
  
  ## Usage Patterns :
  
  ```python
  current.card["mycardid"].append(component, id="comp123")
  current.card["mycardid"].extend([component])
  current.card["mycardid"].refresh(data) # refreshes the card with new data
  current.card["mycardid"].components["comp123"] # returns the component with id "comp123"
  current.card["mycardid"].components["comp123"].update()
  current.card["mycardid"].components.clear() # Wipe all the components
  del current.card["mycardid"].components["mycomponentid"] # Delete a component
  ```
class_docstr_tok: ["This","class","manages","the","card","'s","state","for","a","single","card",".","-","It","uses","the","`","ComponentStore","`","to","manage","the","storage","of","the","components","-","It","exposes","methods","to","add",",","remove","and","access","the","components",".","-","It","exposes","a","`","refresh","`","method","that","will","allow","refreshing","a","card","with","new","data","for","realtime","(","ish",")","updates",".","-","The","`","CardComponentCollector","`","exposes","convenience","methods","similar","to","this","class","for","a","default","editable","card",".","These","methods","include",":","-","`","append","`","-","`","extend","`","-","`","clear","`","-","`","refresh","`","-","`","components","`","-","`","__iter__","`","#","#","Usage","Patterns",":","``","`","python","current.card","[","``","mycardid","''","]",".append","(","component",",","id=","''","comp123","''",")","current.card","[","``","mycardid","''","]",".extend","(","[","component","]",")","current.card","[","``","mycardid","''","]",".refresh","(","data",")","#","refreshes","the","card","with","new","data","current.card","[","``","mycardid","''","]",".components","[","``","comp123","''","]","#","returns","the","component","with","id","``","comp123","''","current.card","[","``","mycardid","''","]",".components","[","``","comp123","''","]",".update","(",")","current.card","[","``","mycardid","''","]",".components.clear","(",")","#","Wipe","all","the","components","del","current.card","[","``","mycardid","''","]",".components","[","``","mycomponentid","''","]","#","Delete","a","component","``","`"]
code: def __init__(
      self,
      card_uuid,
      decorator_attributes,
      card_creator,
      components=None,
      logger=None,
      no_warnings=False,
      user_set_card_id=None,
      runtime_card=False,
      card_options=None,
      refresh_interval=5,
  ):
      self._card_creator_args = dict(
          card_uuid=card_uuid,
          user_set_card_id=user_set_card_id,
          runtime_card=runtime_card,
          decorator_attributes=decorator_attributes,
          card_options=card_options,
          logger=logger,
      )
      self._card_creator = card_creator
      self._refresh_interval = refresh_interval
      self._last_layout_change = None
      self._latest_user_data = None
      self._last_refresh = 0
      self._last_render = 0
      self._render_seq = 0
      self._logger = logger
      self._no_warnings = no_warnings
      self._warn_once = {
          "update": {},
          "not_implemented": {},
      }
      card_type = decorator_attributes["type"]
  
      if components is None:
          self._components = ComponentStore(
              logger=self._logger,
              card_type=card_type,
              user_set_id=user_set_card_id,
              components=None,
          )
      else:
          self._components = ComponentStore(
              logger=self._logger,
              card_type=card_type,
              user_set_id=user_set_card_id,
              components=list(components),
          )
  
imports: from .card_modules import MetaflowCardComponent
  from .card_modules.basic import ErrorComponent, SectionComponent
  from .card_modules.components import UserComponent, create_component_id, StubComponent
  from .exception import ComponentOverwriteNotSupportedException
  from metaflow.metaflow_config import RUNTIME_CARD_RENDER_INTERVAL
  import uuid
  import json
  import platform
  from collections import OrderedDict
  import time
label_desc: Use image node_id 1 to create a new CardComponentManager object  with example: obj = CardComponentManager(card_uuid, decorator_attributes, card_creator, components, logger, no_warnings, user_set_card_id, runtime_card, card_options, refresh_interval)