docs: def read_header(cls, headers_path, block_height, allow_none=False):
          """
          Get a block header at a particular height from disk.
          Return the header if found
          Return None if not.
          """
          if os.path.exists(headers_path):
      
              header_parser = BlockHeaderSerializer()
              sb = os.stat( headers_path )
              if sb.st_size < BLOCK_HEADER_SIZE * block_height:
                  # beyond EOF 
                  if allow_none:
                      return None 
                  else:
                      raise Exception('EOF on block headers')
  
              with open( headers_path, "rb" ) as f:
                  f.seek( block_height * BLOCK_HEADER_SIZE, os.SEEK_SET )
                  hdr = SPVClient.read_header_at( f )
  
              return hdr
          else:
              if allow_none:
                  return None
              else:
                  raise Exception('No such file or directory: {}'.format(headers_path))