class_docstr: This class helps collect `MetaflowCardComponent`s during runtime execution
  
  ### Usage with `current`
  `current.card` is of type `CardComponentCollector`
  
  ### Main Usage TLDR
  - [x] `current.card.append` customizes the default editable card.
  - [x] Only one card can be default editable in a step.
  - [x] The card class must have `ALLOW_USER_COMPONENTS=True` to be considered default editable.
      - [x] Classes with `ALLOW_USER_COMPONENTS=False` are never default editable.
  - [x] The user can specify an `id` argument to a card, in which case the card is editable through `current.card[id].append`.
      - [x] A card with an id can be also default editable, if there are no other cards that are eligible to be default editable.
  - [x] If multiple default-editable cards exist but only one card doesn't have an id, the card without an id is considered to be default editable.
  - [x] If we can't resolve a single default editable card through the above rules, `current.card`.append calls show a warning but the call doesn't fail.
  - [x] A card that is not default editable can be still edited through:
      - [x] its `current.card['myid']`
      - [x] by looking it up by its type, e.g. `current.card.get(type='pytorch')`.
class_docstr_tok: ["This","class","helps","collect","`","MetaflowCardComponent","`","s","during","runtime","execution","#","#","#","Usage","with","`","current","`","`","current.card","`","is","of","type","`","CardComponentCollector","`","#","#","#","Main","Usage","TLDR","-","[","x","]","`","current.card.append","`","customizes","the","default","editable","card",".","-","[","x","]","Only","one","card","can","be","default","editable","in","a","step",".","-","[","x","]","The","card","class","must","have","`","ALLOW_USER_COMPONENTS=True","`","to","be","considered","default","editable",".","-","[","x","]","Classes","with","`","ALLOW_USER_COMPONENTS=False","`","are","never","default","editable",".","-","[","x","]","The","user","can","specify","an","`","id","`","argument","to","a","card",",","in","which","case","the","card","is","editable","through","`","current.card","[","id","]",".append","`",".","-","[","x","]","A","card","with","an","id","can","be","also","default","editable",",","if","there","are","no","other","cards","that","are","eligible","to","be","default","editable",".","-","[","x","]","If","multiple","default-editable","cards","exist","but","only","one","card","does","n't","have","an","id",",","the","card","without","an","id","is","considered","to","be","default","editable",".","-","[","x","]","If","we","ca","n't","resolve","a","single","default","editable","card","through","the","above","rules",",","`","current.card","`",".append","calls","show","a","warning","but","the","call","does","n't","fail",".","-","[","x","]","A","card","that","is","not","default","editable","can","be","still","edited","through",":","-","[","x","]","its","`","current.card","[","'myid","'","]","`","-","[","x","]","by","looking","it","up","by","its","type",",","e.g",".","`","current.card.get","(","type='pytorch","'",")","`","."]
docstr: `get`
  gets all the components arrays for a card `type`.
  Since one `@step` can have many `@card` decorators, many decorators can have the same type. That is why this function returns a list of lists.
  
  Args:
      type ([str], optional): `type` of MetaflowCard. Defaults to None.
  
  Returns: will return empty `list` if `type` is None or not found
      List[List[MetaflowCardComponent]]
docstr_tok: ["`","get","`","gets","all","the","components","arrays","for","a","card","`","type","`",".","Since","one","`","@","step","`","can","have","many","`","@","card","`","decorators",",","many","decorators","can","have","the","same","type",".","That","is","why","this","function","returns","a","list","of","lists",".","Args",":","type","(","[","str","]",",","optional",")",":","`","type","`","of","MetaflowCard",".","Defaults","to","None",".","Returns",":","will","return","empty","`","list","`","if","`","type","`","is","None","or","not","found","List","[","List","[","MetaflowCardComponent","]","]"]
code: def get(self, type=None):
      """`get`
      gets all the components arrays for a card `type`.
      Since one `@step` can have many `@card` decorators, many decorators can have the same type. That is why this function returns a list of lists.
  
      Args:
          type ([str], optional): `type` of MetaflowCard. Defaults to None.
  
      Returns: will return empty `list` if `type` is None or not found
          List[List[MetaflowCardComponent]]
      """
      card_type = type
      card_uuids = [
          card_meta["uuid"]
          for card_meta in self._cards_meta.values()
          if card_meta["type"] == card_type
      ]
      return [self._card_component_store[uuid] for uuid in card_uuids]
  
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 7 for calling the CardComponentCollector obj's underlying member method code with example usage: obj.get(type) and returns: unknown