stdlib, resources: Added pretty printing resource (#323)

- Implemented a __str__ for AbstractResource __str__ prints resource
category, id and version.
link to resources website is also printed.
This commit is contained in:
Bobby R. Bruce
2023-09-27 17:32:35 -07:00
committed by GitHub

View File

@@ -70,6 +70,7 @@ class AbstractResource:
def __init__(
self,
id: Optional[str] = None,
resource_version: Optional[str] = None,
local_path: Optional[str] = None,
description: Optional[str] = None,
@@ -91,12 +92,24 @@ class AbstractResource:
f"Local path specified for resource, '{local_path}', does not "
"exist."
)
self._id = id
self._local_path = local_path
self._description = description
self._source = source
self._version = resource_version
def get_category_name(cls) -> str:
raise NotImplementedError
def __str__(self):
message = (
f"{self.get_category_name()}({self._id}, {self._version})\n"
"For more information, please visit "
f"https://resources.gem5.org/resources/{self._id}?"
f"version={self._version}"
)
return message
def get_resource_version(self) -> str:
"""Returns the version of the resource."""
return self._version
@@ -122,6 +135,7 @@ class FileResource(AbstractResource):
def __init__(
self,
local_path: str,
id: Optional[str] = None,
resource_version: Optional[str] = None,
description: Optional[str] = None,
source: Optional[str] = None,
@@ -134,11 +148,15 @@ class FileResource(AbstractResource):
super().__init__(
local_path=local_path,
id=id,
description=description,
source=source,
resource_version=resource_version,
)
def get_category_name(cls) -> str:
return "FileResource"
class DirectoryResource(AbstractResource):
"""A resource consisting of a directory."""
@@ -146,6 +164,7 @@ class DirectoryResource(AbstractResource):
def __init__(
self,
local_path: str,
id: Optional[str] = None,
resource_version: Optional[str] = None,
description: Optional[str] = None,
source: Optional[str] = None,
@@ -159,11 +178,15 @@ class DirectoryResource(AbstractResource):
super().__init__(
local_path=local_path,
id=id,
description=description,
source=source,
resource_version=resource_version,
)
def get_category_name(cls) -> str:
return "DirectoryResource"
class DiskImageResource(FileResource):
"""A Disk Image resource."""
@@ -171,6 +194,7 @@ class DiskImageResource(FileResource):
def __init__(
self,
local_path: str,
id: Optional[str] = None,
resource_version: Optional[str] = None,
description: Optional[str] = None,
source: Optional[str] = None,
@@ -179,6 +203,7 @@ class DiskImageResource(FileResource):
):
super().__init__(
local_path=local_path,
id=id,
description=description,
source=source,
resource_version=resource_version,
@@ -189,6 +214,9 @@ class DiskImageResource(FileResource):
"""Returns, if applicable, the Root Partition of the disk image."""
return self._root_partition
def get_category_name(cls) -> str:
return "DiskImageResource"
class BinaryResource(FileResource):
"""A binary resource."""
@@ -196,6 +224,7 @@ class BinaryResource(FileResource):
def __init__(
self,
local_path: str,
id: Optional[str] = None,
resource_version: Optional[str] = None,
description: Optional[str] = None,
source: Optional[str] = None,
@@ -204,6 +233,7 @@ class BinaryResource(FileResource):
):
super().__init__(
local_path=local_path,
id=id,
description=description,
source=source,
resource_version=resource_version,
@@ -216,6 +246,9 @@ class BinaryResource(FileResource):
elif isinstance(architecture, ISA):
self._architecture = architecture
def get_category_name(cls) -> str:
return "BinaryResource"
def get_architecture(self) -> Optional[ISA]:
"""Returns the ISA this binary is compiled to."""
return self._architecture
@@ -227,6 +260,7 @@ class BootloaderResource(BinaryResource):
def __init__(
self,
local_path: str,
id: Optional[str] = None,
resource_version: Optional[str] = None,
description: Optional[str] = None,
source: Optional[str] = None,
@@ -235,12 +269,16 @@ class BootloaderResource(BinaryResource):
):
super().__init__(
local_path=local_path,
id=id,
description=description,
architecture=architecture,
source=source,
resource_version=resource_version,
)
def get_category_name(cls) -> str:
return "BootloaderResource"
class GitResource(DirectoryResource):
"""A git resource."""
@@ -248,6 +286,7 @@ class GitResource(DirectoryResource):
def __init__(
self,
local_path: str,
id: Optional[str] = None,
resource_version: Optional[str] = None,
description: Optional[str] = None,
source: Optional[str] = None,
@@ -255,11 +294,15 @@ class GitResource(DirectoryResource):
):
super().__init__(
local_path=local_path,
id=id,
description=description,
source=source,
resource_version=resource_version,
)
def get_category_name(cls) -> str:
return "GitResource"
class KernelResource(BinaryResource):
"""A kernel resource."""
@@ -267,6 +310,7 @@ class KernelResource(BinaryResource):
def __init__(
self,
local_path: str,
id: Optional[str] = None,
resource_version: Optional[str] = None,
description: Optional[str] = None,
source: Optional[str] = None,
@@ -275,12 +319,16 @@ class KernelResource(BinaryResource):
):
super().__init__(
local_path=local_path,
id=id,
description=description,
source=source,
architecture=architecture,
resource_version=resource_version,
)
def get_category_name(cls) -> str:
return "KernelResource"
class CheckpointResource(DirectoryResource):
"""A checkpoint resource. The following directory structure is expected:
@@ -293,6 +341,7 @@ class CheckpointResource(DirectoryResource):
def __init__(
self,
local_path: str,
id: Optional[str] = None,
resource_version: Optional[str] = None,
description: Optional[str] = None,
source: Optional[str] = None,
@@ -300,11 +349,15 @@ class CheckpointResource(DirectoryResource):
):
super().__init__(
local_path=local_path,
id=id,
description=description,
source=source,
resource_version=resource_version,
)
def get_category_name(cls) -> str:
return "CheckpointResource"
class SimpointResource(AbstractResource):
"""A simpoint resource. This resource stores all information required to
@@ -320,6 +373,7 @@ class SimpointResource(AbstractResource):
simpoint_list: List[int] = None,
weight_list: List[float] = None,
warmup_interval: int = 0,
id: Optional[str] = None,
workload_name: Optional[str] = None,
description: Optional[str] = None,
source: Optional[str] = None,
@@ -340,6 +394,7 @@ class SimpointResource(AbstractResource):
super().__init__(
local_path=local_path,
id=id,
description=description,
source=source,
resource_version=resource_version,
@@ -421,6 +476,9 @@ class SimpointResource(AbstractResource):
self._simpoint_start_insts[index] = start_inst - warmup_inst
return warmup_list
def get_category_name(cls) -> str:
return "SimpointResource"
class LooppointCsvResource(FileResource, LooppointCsvLoader):
"""This Looppoint resource used to create a Looppoint resource from a
@@ -429,6 +487,7 @@ class LooppointCsvResource(FileResource, LooppointCsvLoader):
def __init__(
self,
local_path: str,
id: Optional[str] = None,
resource_version: Optional[str] = None,
description: Optional[str] = None,
source: Optional[str] = None,
@@ -437,17 +496,22 @@ class LooppointCsvResource(FileResource, LooppointCsvLoader):
FileResource.__init__(
self,
local_path=local_path,
id=id,
description=description,
source=source,
resource_version=resource_version,
)
LooppointCsvLoader.__init__(self, pinpoints_file=Path(local_path))
def get_category_name(cls) -> str:
return "LooppointCsvResource"
class LooppointJsonResource(FileResource, LooppointJsonLoader):
def __init__(
self,
local_path: str,
id: Optional[str] = None,
resource_version: Optional[str] = None,
region_id: Optional[Union[str, int]] = None,
description: Optional[str] = None,
@@ -457,6 +521,7 @@ class LooppointJsonResource(FileResource, LooppointJsonLoader):
FileResource.__init__(
self,
local_path=local_path,
id=id,
description=description,
source=source,
resource_version=resource_version,
@@ -465,6 +530,9 @@ class LooppointJsonResource(FileResource, LooppointJsonLoader):
self, looppoint_file=local_path, region_id=region_id
)
def get_category_name(cls) -> str:
return "LooppointJsonResource"
class SimpointDirectoryResource(SimpointResource):
"""A Simpoint diretory resource. This Simpoint Resource assumes the
@@ -477,6 +545,7 @@ class SimpointDirectoryResource(SimpointResource):
weight_file: str,
simpoint_interval: int,
warmup_interval: int,
id: Optional[str] = None,
resource_version: Optional[str] = None,
workload_name: Optional[str] = None,
description: Optional[str] = None,
@@ -510,6 +579,7 @@ class SimpointDirectoryResource(SimpointResource):
warmup_interval=warmup_interval,
workload_name=workload_name,
local_path=local_path,
id=id,
description=description,
source=source,
resource_version=resource_version,
@@ -553,6 +623,9 @@ class SimpointDirectoryResource(SimpointResource):
weight_list.append(weight)
return simpoint_list, weight_list
def get_category_name(cls) -> str:
return "SimpointDirectoryResource"
class WorkloadResource(AbstractResource):
"""A workload resource. This resource is used to specify a workload to run
@@ -563,6 +636,7 @@ class WorkloadResource(AbstractResource):
def __init__(
self,
function: str = None,
id: Optional[str] = None,
resource_version: Optional[str] = None,
description: Optional[str] = None,
source: Optional[str] = None,
@@ -577,6 +651,7 @@ class WorkloadResource(AbstractResource):
super().__init__(
local_path=local_path,
id=id,
description=description,
source=source,
resource_version=resource_version,
@@ -613,6 +688,9 @@ class WorkloadResource(AbstractResource):
"""
self._params[parameter] = value
def get_category_name(cls) -> str:
return "WorkloadResource"
def obtain_resource(
resource_id: str,