code: def _do_info(bz, opt):
      
      # All these commands call getproducts internally, so do it up front
      # with minimal include_fields for speed
      def _filter_components(compdetails):
          ret = {}
          for k, v in compdetails.items():
              if v.get("is_active", True):
                  ret[k] = v
          return ret
  
      productname = (opt.components or opt.component_owners or opt.versions)
      include_fields = ["name", "id"]
      fastcomponents = (opt.components and not opt.active_components)
      if opt.versions:
          include_fields += ["versions"]
      if opt.component_owners:
          include_fields += [
              "components.default_assigned_to",
              "components.name",
          ]
      if (opt.active_components and
          any(["components" in i for i in include_fields])):
          include_fields += ["components.is_active"]
  
      bz.refresh_products(names=productname and [productname] or None,
              include_fields=include_fields)
  
      if opt.products:
          for name in sorted([p["name"] for p in bz.getproducts()]):
              print(name)
  
      elif fastcomponents:
          for name in sorted(bz.getcomponents(productname)):
              print(name)
  
      elif opt.components:
          details = bz.getcomponentsdetails(productname)
          for name in sorted(_filter_components(details)):
              print(name)
  
      elif opt.versions:
          proddict = bz.getproducts()[0]
          for v in proddict['versions']:
              print(to_encoding(v["name"]))
  
      elif opt.component_owners:
          details = bz.getcomponentsdetails(productname)
          for c in sorted(_filter_components(details)):
              print(to_encoding(u"%s: %s" % (c,
                  details[c]['default_assigned_to'])))
docs: Handle the 'info' subcommand