code: def __init__(
      self,
      tag: str,
      text: str,
      name: Optional[str] = None,
      type: Optional[str] = None,
      master: str = "false",
      agent: str = "false",
      webui: str = "false",
  ) -> None:
      assert text.strip(), "License text not found"
      assert name is not None, "a Name header is required"
      assert type is not None, "a Type header is required"
      assert (
          type.lower() in known_licenses
      ), f"Type header must be one of {known_licenses}"
      assert master.lower() in {
          "true",
          "false",
      }, "Master must be true or false"
      assert agent.lower() in {
          "true",
          "false",
      }, "Agent must be true or false"
      assert webui.lower() in {
          "true",
          "false",
      }, "Webui must be true or false"
  
      self.tag = tag
      self.text = text
      self.name = name
      self.type = type.lower()
      self.master = master.lower() == "true"
      self.agent = agent.lower() == "true"
      self.webui = webui.lower() == "true"
  
file_path: determined/tools/scripts/gen-attributions.py
imports: import email
  import os
  import sys
  from typing import IO, List, Optional
label_desc: Use image node_id 1 to create a new License object  with example: obj = License(tag, text, name, type, master, agent, webui)