class_docstr: Define the cartopy raster fetching interface.
  
  A :class:`RasterSource` instance is able to supply images and
  associated extents (as a sequence of :class:`LocatedImage` instances)
  through its :meth:`~RasterSource.fetch_raster` method.
  
  As a result, further interfacing classes, such as
  :class:`cartopy.mpl.slippy_image_artist.SlippyImageArtist`, can then
  make use of the interface for functionality such as interactive image
  retrieval with pan and zoom functionality.
  
  .. _raster-source-interface:
docstr: Raise an error if this raster source cannot provide images in the
  specified projection.
  
  Parameters
  ----------
  projection: :class:`cartopy.crs.Projection`
      The desired projection of the image.
docstr_tok: ["Raise","an","error","if","this","raster","source","can","not","provide","images","in","the","specified","projection",".","Parameters","--","--","--","--","--","projection",":",":","class",":","`","cartopy.crs.Projection","`","The","desired","projection","of","the","image","."]
code: def validate_projection(self, projection):
      """
      Raise an error if this raster source cannot provide images in the
      specified projection.
  
      Parameters
      ----------
      projection: :class:`cartopy.crs.Projection`
          The desired projection of the image.
  
      """
      raise NotImplementedError()
  
imports: import collections
  from pathlib import Path
  import string
  from urllib.request import urlopen
  import warnings
  from cartopy import config
label_desc: Use image node_id 1 for calling the RasterSource obj's underlying member method code with example usage: obj.validate_projection(projection) without return types