<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get(self, filename, reset=False):
 """ Get a single processed file. Uses a cached version if `run` has already been called, unless `reset` is True. """

        if filename in self.files and not reset:
            return self.files[filename]

        # load a single file, and process
        files = {}
        path = os.path.join(self.source, filename)
        files[filename] = frontmatter.load(path, 
            filename=filename,
            slug=os.path.splitext(filename)[0])

        # call middleware
        for func in self.middleware:
            func(files, self)

        # cache the processed post
        self.files.update(files)

        # return just the post
        try:
            return files[filename]
        except KeyError:
            raise PostNotFound('{0} not found'.format(filename))