def create(self, file_metadata: FileMetadata, overwrite: bool = False) -> Tuple[FileMetadata, str]: """Create file without uploading content. Args: file_metadata (FileMetaData): File metadata for the file to create. overwrite (bool): If 'overwrite' is set to true, and the POST body content specifies a 'externalId' field, fields for the file found for externalId can be overwritten. The default setting is false. If metadata is included in the request body, all of the original metadata will be overwritten. File-Asset mappings only change if explicitly stated in the assetIds field of the POST json body. Do not set assetIds in request body if you want to keep the current file-asset mappings. Returns: Tuple[FileMetaData, str]: Tuple containing the file metadata and upload url of the created file. Examples: Create a file:: >>> from cognite.client import CogniteClient >>> from cognite.client.data_classes import FileMetadata >>> c = CogniteClient() >>> file_metadata = FileMetadata(name="MyFile") >>> res = c.files.create(file_metadata) """ res = self._post(url_path=self._RESOURCE_PATH, json=file_metadata.dump(camel_case=True), params={"overwrite": overwrite}) returned_file_metadata = res.json() upload_url = returned_file_metadata.pop("uploadUrl") file_metadata = FileMetadata._load(returned_file_metadata) return (file_metadata, upload_url)
def upload_bytes( self, content: Union[str, bytes, TextIO, BinaryIO], name: str, external_id: str = None, source: str = None, mime_type: str = None, metadata: Dict[str, Any] = None, asset_ids: List[int] = None, source_created_time: int = None, source_modified_time: int = None, overwrite: bool = False, ): """Upload bytes or string. You can also pass a file handle to content. Args: content (Union[str, bytes, TextIO, BinaryIO]): The content to upload. name (str): Name of the file. external_id (str): The external ID provided by the client. Must be unique within the project. source (str): The source of the file. mime_type (str): File type. E.g. text/plain, application/pdf,... metadata (Dict[str, Any]): Customizable extra data about the file. String key -> String value. asset_ids (List[int]): No description. source_created_time (int): The timestamp for when the file was originally created in the source system. source_modified_time (int): The timestamp for when the file was last modified in the source system. overwrite (bool): If 'overwrite' is set to true, and the POST body content specifies a 'externalId' field, fields for the file found for externalId can be overwritten. The default setting is false. If metadata is included in the request body, all of the original metadata will be overwritten. The actual file will be overwritten after successful upload. If there is no successful upload, the current file contents will be kept. File-Asset mappings only change if explicitly stated in the assetIds field of the POST json body. Do not set assetIds in request body if you want to keep the current file-asset mappings. Examples: Upload a file from memory:: >>> from cognite.client import CogniteClient >>> c = CogniteClient() >>> res = c.files.upload_bytes(b"some content", name="my_file", asset_ids=[1,2,3]) """ file_metadata = FileMetadata( name=name, external_id=external_id, source=source, mime_type=mime_type, metadata=metadata, asset_ids=asset_ids, source_created_time=source_created_time, source_modified_time=source_modified_time, ) res = self._post(url_path=self._RESOURCE_PATH, json=file_metadata.dump(camel_case=True), params={"overwrite": overwrite}) returned_file_metadata = res.json() upload_url = returned_file_metadata.pop("uploadUrl") headers = {"X-Upload-Content-Type": file_metadata.mime_type} self._request_session.put(upload_url, data=content, headers=headers) return FileMetadata._load(returned_file_metadata)