docs: def _get_station_codes(self, force=False):
          """
          Gets and caches a list of station codes optionally within a bbox.
  
          Will return the cached version if it exists unless force is True.
          """
          if not force and self.station_codes is not None:
              return self.station_codes
  
          state_urls = self._get_state_urls()
  
          # filter by bounding box against a shapefile
          state_matches = None
  
          if self.bbox:
              with collection(
                  os.path.join(
                      "resources",
                      "ne_50m_admin_1_states_provinces_lakes_shp.shp",
                  ),
                  "r",
              ) as c:
                  geom_matches = [
                      x["properties"] for x in c.filter(bbox=self.bbox)
                  ]
                  state_matches = [
                      x["postal"] if x["admin"] != "Canada" else "CN"
                      for x in geom_matches
                  ]
  
          self.station_codes = []
  
          for state_url in state_urls:
              if state_matches is not None:
                  state_abbr = state_url.split("/")[-1].split(".")[0]
                  if state_abbr not in state_matches:
                      continue
  
              self.station_codes.extend(self._get_stations_for_state(state_url))
  
          if self.bbox:
              # retrieve metadata for all stations to properly filter them
              metadata = self._get_metadata(self.station_codes)
              parsed_metadata = self.parser._parse_metadata(metadata)
  
              def in_bbox(code):
                  lat = parsed_metadata[code]["latitude"]
                  lon = parsed_metadata[code]["longitude"]
  
                  return (
                      lon >= self.bbox[0]
                      and lon <= self.bbox[2]
                      and lat >= self.bbox[1]
                      and lat <= self.bbox[3]
                  )
  
              self.station_codes = list(filter(in_bbox, self.station_codes))
  
          return self.station_codes