docs: def _read(self, directory, filename, session, path, name, extension, spatial, spatialReferenceID, maskMap):
          """
          WMS Dataset File Read from File Method
          """
          # Assign file extension attribute to file object
          self.fileExtension = extension
  
          if isinstance(maskMap, RasterMapFile) and maskMap.fileExtension == 'msk':
              # Vars from mask map
              columns = maskMap.columns
              rows = maskMap.rows
              upperLeftX = maskMap.west
              upperLeftY = maskMap.north
  
              # Derive the cell size (GSSHA cells are square, so it is the same in both directions)
              cellSizeX = int(abs(maskMap.west - maskMap.east) / columns)
              cellSizeY = -1 * cellSizeX
  
              # Dictionary of keywords/cards and parse function names
              KEYWORDS = {'DATASET': wdc.datasetHeaderChunk,
                          'TS': wdc.datasetScalarTimeStepChunk}
  
              # Open file and read plain text into text field
              with open(path, 'r') as f:
                  chunks = pt.chunk(KEYWORDS, f)
  
              # Parse header chunk first
              header = wdc.datasetHeaderChunk('DATASET', chunks['DATASET'][0])
  
              # Parse each time step chunk and aggregate
              timeStepRasters = []
  
              for chunk in chunks['TS']:
                  timeStepRasters.append(wdc.datasetScalarTimeStepChunk(chunk, columns, header['numberCells']))
  
              # Set WMS dataset file properties
              self.name = header['name']
              self.numberCells = header['numberCells']
              self.numberData = header['numberData']
              self.objectID = header['objectID']
  
              if header['type'] == 'BEGSCL':
                  self.objectType = header['objectType']
                  self.type = self.SCALAR_TYPE
  
              elif header['type'] == 'BEGVEC':
                  self.vectorType = header['objectType']
                  self.type = self.VECTOR_TYPE
  
              # Create WMS raster dataset files for each raster
              for timeStep, timeStepRaster in enumerate(timeStepRasters):
                  # Create new WMS raster dataset file object
                  wmsRasterDatasetFile = WMSDatasetRaster()
  
                  # Set the wms dataset for this WMS raster dataset file
                  wmsRasterDatasetFile.wmsDataset = self
  
                  # Set the time step and timestamp and other properties
                  wmsRasterDatasetFile.iStatus = timeStepRaster['iStatus']
                  wmsRasterDatasetFile.timestamp = timeStepRaster['timestamp']
                  wmsRasterDatasetFile.timeStep = timeStep + 1
  
                  # If spatial is enabled create PostGIS rasters
                  if spatial:
                      # Process the values/cell array
                      wmsRasterDatasetFile.raster = RasterLoader.makeSingleBandWKBRaster(session,
                                                                                         columns, rows,
                                                                                         upperLeftX, upperLeftY,
                                                                                         cellSizeX, cellSizeY,
                                                                                         0, 0,
                                                                                         spatialReferenceID,
                                                                                         timeStepRaster['cellArray'])
  
                  # Otherwise, set the raster text properties
                  else:
                      wmsRasterDatasetFile.rasterText = timeStepRaster['rasterText']
  
              # Add current file object to the session
              session.add(self)
  
          else:
              log.warning("Could not read {0}. Mask Map must be supplied "
                       "to read WMS Datasets.".format(filename))