Given a markdown file, get an Entry object.

def from_file(cls, path, **kwargs):
		"""
		Given a markdown file, get an Entry object.
		"""
		LOG.debug('creating %s from "%s"', cls, path)

		# the filename will be the default slug - can be overridden later
		kwargs['slug'] = os.path.splitext(os.path.basename(path))[0]

		# TODO: ideally this should be part of the Post class.
		# if a pubdate isn't explicitly passed, get it from the file metadata
		# instead. note that it might still be overriden later on while reading
		# the file contents.
		if issubclass(cls, Post) and not kwargs.get('pubdate'):
			# you would think creation always comes before modification, but you
			# can manually modify a file's modification date to one earlier than
			# the creation date. this lets you set a post's pubdate by running
			# the command `touch`. we support this behaviour by simply finding
			# the chronologically earliest date of creation and modification.
			timestamp = min(os.path.getctime(path), os.path.getmtime(path))
			kwargs['pubdate'] = datetime.fromtimestamp(timestamp)

		with open(path, 'r') as file:
			entry = cls.from_string(file.read(), **kwargs)

		return entry