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:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user