def__init__(self,**kwargs):super().__init__(**kwargs)# Annotations only: in the class body the pydantic mypy plugin would take# them for fields.self._caching_enabled:boolself._download_cb:Callbackself._fs_path_cache:tuple[str,str,str]|None# The runtime state, set in one __dict__ update: pydantic's __setattr__ per# attribute is slow when millions of Files are built. A subclass that# declares them as private attributes needs pydantic's setattr instead.if_FILE_STATE.keys()&self.__private_attributes__.keys():forname,valuein_FILE_STATE.items():setattr(self,name,value)else:self.__dict__.update(_FILE_STATE)
@contextmanagerdefopen(self,mode:str="r",*,client_config:dict[str,Any]|None=None,**open_kwargs,)->Iterator[Any]:"""Open the file and return a file-like object. Default to text mode"""withsuper().open(mode=mode,client_config=client_config,**open_kwargs)asstream:yieldstream
read
read(**open_kwargs)
Return file contents as text (default mode for TextFile).
defread_text(self,**open_kwargs):"""Return file contents as text. **open_kwargs : Any Extra keyword arguments forwarded to ``open()`` (e.g. encoding). """withself.open(**open_kwargs)asstream:returnstream.read()
defsave(self,destination:str,client_config:dict|None=None,*,content_type:str|None=None,content_disposition:str|None=None,cache_control:str|None=None,content_encoding:str|None=None,metadata:dict[str,str]|None=None,write_options:dict[str,Any]|None=None,)->"TextFile":"""Writes its content to destination"""result=super().save(destination,client_config=client_config,content_type=content_type,content_disposition=content_disposition,cache_control=cache_control,content_encoding=content_encoding,metadata=metadata,write_options=write_options,)tf=TextFile(**result.model_dump())tf._set_stream(self._catalog)returntf