from typing import Optional, List
from ._private._cluster_apis import ClusterAPIS
from .document import Document
from .kw_module_enum import KWModuleEnum
from ._private._well_dto import FileType
from ._private.dto_converters._document_dto_converter import DocumentDtoConverter
[docs]
class File:
"""
KA file object.
Presents a KA file.
.. note:: Should not be instantiated directly.
"""
def __init__(self,
field_id: str,
well_group_id: Optional[str],
well_id: Optional[str],
custom_workflow_id: Optional[str],
file_id: str,
name: str,
file_type: FileType,
folder_id: Optional[str],
folder_name: Optional[str],
labels: List[str],
cluster_apis: ClusterAPIS,
document_dto_converter: DocumentDtoConverter):
self.__field_id: str = field_id
self.__well_group_id: Optional[str] = well_group_id
self.__well_id: Optional[str] = well_id
self.__custom_workflow_id: Optional[str] = custom_workflow_id
self.__file_id: str = file_id
self.__name: str = name
self.__type: str = str(file_type.value)
self.__folder_id: Optional[str] = folder_id
self.__folder_name: Optional[str] = folder_name
self.__labels: List[str] = labels
self.__cluster_apis: ClusterAPIS = cluster_apis
self.__dto_converter: DocumentDtoConverter = document_dto_converter
@property
def file_id(self) -> str:
""" Gets the id of the KA :class:`File`.
"""
return self.__file_id
@property
def name(self) -> str:
""" Gets the name of the KA :class:`File`.
"""
return self.__name
@property
def well_group_id(self) -> Optional[str]:
"""Gets the well_group_id of the KA :class:`File`.
"""
return self.__well_group_id
@property
def type(self) -> str:
""" Gets the type of the KA :class:`File`.
"""
return self.__type
@property
def folder_id(self) -> Optional[str]:
""" Gets the id of the folder where the KA :class:`File` is located.
"""
return self.__folder_id
@property
def folder_name(self) -> Optional[str]:
""" Gets the name of the folder where the KA :class:`File` is located.
"""
return self.__folder_name
@property
def labels(self) -> List[str]:
""" Gets the list of labels of the KA :class:`File`.
"""
return self.__labels
def as_kw_document(self, parent_ipta_name: Optional[str] = None) -> Document:
""" Gets this :class:`File` as a KW :class:`Document` entity.
Parameters
----------
parent_ipta_name:
The name of the parent ipta document if there is one
"""
try:
return Document(self.__field_id, self.__well_group_id, self.__well_id, self.__custom_workflow_id, self.__file_id, self.name, KWModuleEnum(self.type),
parent_ipta_name, self.__labels, self.__cluster_apis, self.__dto_converter)
except ValueError:
raise ValueError(f"File {self.name} is not a valid KW document")
def download_content(self, file_location: str) -> None:
""" Downloads the content of the document to the specified location.
Parameters
----------
New file_location:
location where to download the file
"""
self.__cluster_apis.field_api.download_content(self.__file_id, file_location)
def rename(self, name: str) -> None:
""" Rename this file
Parameters
----------
New name:
New name of the file
"""
dto = {'name': f'{name}'}
self.__name = self.__cluster_apis.field_api.rename_file(self.__field_id, self.__well_id, self.__file_id, dto)
def copy(self, new_name: Optional[str] = None, field_id: Optional[str] = None, well_id: Optional[str] = None, well_group_id: Optional[str] = None, user_task_id: Optional[str] = None) -> str:
""" Copy this file"""
field_id = self.__field_id if field_id is None else field_id
well_id = self.__well_id if well_id is None else well_id
if new_name is None:
new_file_id = self.__cluster_apis.field_api.copy_file(field_id, well_id, well_group_id, user_task_id, self.__file_id).id
else:
new_file_id = self.__cluster_apis.field_api.copy_and_rename_file(field_id, well_id, well_group_id, user_task_id, self.file_id, new_name).id
return new_file_id
def add_labels(self, labels: List[str]) -> None:
"""Add labels to this file"""
dto = {"userDefinedLabels": labels}
self.__cluster_apis.field_api.add_labels(self.__field_id, self.__well_id, self.__file_id, "file", dto)
self.__labels.extend(labels)
def delete(self) -> None:
"""Delete this file"""
self.__cluster_apis.field_api.delete_file(self.__field_id, self.__well_id, self.file_id)