Source code for dedoc.metadata_extractors.concrete_metadata_extractors.base_metadata_extractor

from typing import Optional

from dedoc.metadata_extractors.abstract_metadata_extractor import AbstractMetadataExtractor


[docs]class BaseMetadataExtractor(AbstractMetadataExtractor): """ This metadata extractor allows to extract metadata from the documents of any format. It returns the following information about the given file: - file name; - file name during parsing (unique); - file type (MIME); - file size in bytes; - time when the file was last accessed; - time when the file was created; - time when the file was last modified. """
[docs] def can_extract(self, file_path: str, converted_filename: Optional[str] = None, original_filename: Optional[str] = None, parameters: Optional[dict] = None, mime: Optional[str] = None, extension: Optional[str] = None) -> bool: """ This extractor can handle any file so the method always returns True. Look to the :meth:`~dedoc.metadata_extractors.AbstractMetadataExtractor.can_extract` documentation to get the information about parameters. """ return True
[docs] def extract(self, file_path: str, converted_filename: Optional[str] = None, original_filename: Optional[str] = None, parameters: Optional[dict] = None) -> dict: """ Gets the basic meta-information about the file. Look to the :meth:`~dedoc.metadata_extractors.AbstractMetadataExtractor.extract` documentation to get the information about parameters. """ from base64 import b64encode import os parameters = {} if parameters is None else parameters file_dir, file_name, converted_filename, original_filename = self._get_names(file_path, converted_filename, original_filename) meta_info = self._get_base_meta_information(file_dir, file_name, original_filename) if parameters.get("is_attached", False) and str(parameters.get("return_base64", "false")).lower() == "true": with open(os.path.join(file_dir, converted_filename), "rb") as file: meta_info["base64_encode"] = b64encode(file.read()).decode("utf-8") return meta_info
@staticmethod def _get_base_meta_information(directory: str, filename: str, name_actual: str) -> dict: import os from dedoc.utils.utils import get_file_mime_type (mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime) = os.stat(os.path.join(directory, filename)) meta = { "file_name": name_actual, "temporary_file_name": filename, "file_type": get_file_mime_type(os.path.join(directory, filename)), "size": size, # in bytes "access_time": atime, "created_time": ctime, "modified_time": mtime } return meta