code: def restore(self):
          
          if not os.path.exists(self.filename):
              return self
          if not os.path.isfile(self.filename):
              return self
  
          try:
              with open(self.filename, "rb") as f:
                  unpickledObject = pickle.load(f)
  
              for key in list(self.__dict__.keys()):
                  default = self.__dict__[key]
                  self.__dict__[key] = unpickledObject.__dict__.get(key, default)
          except:
              pass
  
          return self
docs: Set the values of whatever attributes are recoverable
          from the pickle file.
  
          Populate the attributes (the __dict__) of the EgStore object
          from     the attributes (the __dict__) of the pickled object.
  
          If the pickled object has attributes that have been initialized
          in the EgStore object, then those attributes of the EgStore object
          will be replaced by the values of the corresponding attributes
          in the pickled object.
  
          If the pickled object is missing some attributes that have
          been initialized in the EgStore object, then those attributes
          of the EgStore object will retain the values that they were
          initialized with.
  
          If the pickled object has some attributes that were not
          initialized in the EgStore object, then those attributes
          will be ignored.
  
          IN SUMMARY:
  
          After the recover() operation, the EgStore object will have all,
          and only, the attributes that it had when it was initialized.
  
          Where possible, those attributes will have values recovered
          from the pickled object.