import logging import os from urllib.parse import urlparse import requests class File: def __init__(self, source: str): self._source = source self._is_url = source.startswith("http://") or source.startswith("https://") if self._is_url: parsed_url = urlparse(source) path = parsed_url.path else: path = source self._path = os.path.normpath(os.path.abspath(path)) self._dirname = os.path.dirname(self._path) self._filename = os.path.basename(self._path).split(".")[0] self._language = os.path.basename(self._path).split(".")[1] def _read_content(self): if self._is_url: response = requests.get(self.source) if response.status_code == 200: content = response.text return content else: print(f"Failed to retrieve content from URL: {self.source}") return None else: try: with open(self._path, "r") as file: content = file.read() return content except FileNotFoundError: print(f"File not found: {self.source}") return None @property def content(self) -> str: if not hasattr(self, "_text"): self._content = self._read_content() return self._content @property def language(self) -> str: return self._language @property def filename(self) -> str: return self._filename @property def dirname(self) -> str: return self._dirname @property def source(self) -> str: return self._source def override_origin_file(self, content: str) -> None: if not self._is_url: with open(self._path, "w") as f: f.write(content) else: logging.warning( "Cannot override origin file from URL, create a new file instead." ) self.create_new_file(content) def create_new_file(self, content: str) -> None: if self._is_url: path = os.path.join( "./", self.filename + f"_doc.{self.language}", ) else: path = os.path.join( self.dirname, self.filename + f"_doc.{self.language}", ) with open(path, "w") as f: f.write(content)