class_docstr: Abstract class for defining data reader. All other media readers use this
  abstract class. Media readers are expected to return Batch
  in an iterative manner.
  
  Attributes:
      file_url (str): path to read data from
class_docstr_tok: ["Abstract","class","for","defining","data","reader",".","All","other","media","readers","use","this","abstract","class",".","Media","readers","are","expected","to","return","Batch","in","an","iterative","manner",".","Attributes",":","file_url","(","str",")",":","path","to","read","data","from"]
code: def __init__(self, file_url: str, batch_mem_size: int = 30000000):
      # Check if the file still exists, if not raise an exception
      if not Path(file_url).exists():
          raise DatasetFileNotFoundError()
  
      if isinstance(file_url, Path):
          file_url = str(file_url)
      self.file_url = file_url
      self.batch_mem_size = batch_mem_size
  
file_path: evadb/evadb/readers/abstract_reader.py
imports: from abc import ABCMeta, abstractmethod
  from pathlib import Path
  from typing import Dict, Iterator
  import pandas
  from evadb.models.storage.batch import Batch
  from evadb.utils.errors import DatasetFileNotFoundError
  from evadb.utils.generic_utils import get_size
label_desc: Use image node_id 1 to create a new AbstractReader object  with example: obj = AbstractReader(file_url, batch_mem_size)