docs: def _parse_metadata(self, metadata):
          """
          Transforms raw HADS metadata into a dictionary (station code -> props)
          """
          retval = {}
  
          # these are the first keys, afterwards follows a var-len list of variables/props
          # first key always blank so skip it
          field_keys = [
              "nesdis_id",
              "nwsli",
              "location_text",
              "latitude",
              "longitude",
              "hsa",
              "state",
              "owner",
              "manufacturer",
              "channel",
              "init_transmit",  # HHMM
              "trans_interval",
          ]  # min
  
          # repeat in blocks of 7 after field_keys
          var_keys = [
              "pe_code",
              "data_interval",  # min
              "coefficient",
              "constant",
              "time_offset",  # min
              "base_elevation",  # ft
              "gauge_correction",
          ]  # ft
  
          lines = metadata.splitlines()
          for line in lines:
              if len(line) == 0:
                  continue
  
              raw_fields = line.split("|")
  
              fields = dict(zip(field_keys, raw_fields[1 : len(field_keys)]))
  
              # how many blocks of var_keys after initial fields
              var_offset = len(field_keys) + 1
              var_blocks = (len(raw_fields) - var_offset) // len(
                  var_keys
              )  # how many variables
              vars_only = raw_fields[var_offset:]
              variables = {}
  
              for offset in range(var_blocks):
                  var_dict = dict(
                      zip(
                          var_keys,
                          vars_only[
                              offset
                              * len(var_keys) : (offset + 1)
                              * len(var_keys)
                          ],
                      )
                  )
                  variables[var_dict["pe_code"]] = var_dict
  
                  var_dict["base_elevation"] = float(var_dict["base_elevation"])
                  var_dict["gauge_correction"] = float(
                      var_dict["gauge_correction"]
                  )
                  del var_dict["pe_code"]  # no need to duplicate
  
              line_val = {"variables": variables}
              line_val.update(fields)
  
              # conversions
              def dms_to_dd(dms):
                  parts = dms.split(" ")
                  sec = int(parts[1]) * 60 + int(parts[2])
                  return float(parts[0]) + (
                      sec / 3600.0
                  )  # negative already in first portion
  
              line_val["latitude"] = dms_to_dd(line_val["latitude"])
              line_val["longitude"] = dms_to_dd(line_val["longitude"])
  
              retval[line_val["nesdis_id"]] = line_val
  
          return retval