hpcman.queue.acctinfo
Classes
QueueAcctinfo
QueueAcct class based on Pydantic BaseModel.
Bases: BaseModel
Source code in hpcman/hpcman/queue/acctinfo.py
| class QueueAcctinfo(BaseModel):
"""QueueAcct class based on Pydantic BaseModel.
Attributes:
users list[str]: User names.
partitions list[str]: Queue names.
accounts list[str]: Account names.
debug (bool, optional): Debug flag. Defaults to False.
"""
model_config = ConfigDict(arbitrary_types_allowed=True)
users: list[str] = []
partitions: list[str] = []
accounts: list[str] = []
debug: bool
priority_partitions: set[str] = set()
partition_map: dict[str, set[str]] = dict()
assoc: SlurmAssociations | None = None
@field_validator("users") # type: ignore
@classmethod
def check_users(cls, v: list[str]) -> list[str]:
if not any([check_valid_slurm_association(x) for x in v]):
raise InvalidSlurmUser(f"One or more provided users is invalid: {v}")
else:
return v
@field_validator("accounts") # type: ignore
@classmethod
def check_accounts(cls, v: list[str]) -> list[str]:
if not any([check_valid_slurm_association(x, "accounts") for x in v]):
raise InvalidSlurmAccount(f"One or more provided accounts is invalid: {v}")
else:
return v
@field_validator("partitions") # type: ignore
@classmethod
def check_partitions(cls, v: list[str]) -> list[str]:
if not any([check_valid_slurm_partition(part) for part in v]):
raise InvalidSlurmPartition(f"One or more provided partitions is invalid: {v}")
else:
return v
def generate_acct_tree(self) -> Tree:
user_tree = Tree("Slurm Queue Account Associations")
filtered_users = _gather_acctinfo_data(self)
for fu in filtered_users:
user_text = Text()
user_text.append(fu.name, style="cyan")
user_text.append(" Default Acct: ")
user_text.append(fu.default_account, style="green")
user_info = Tree(user_text)
for fa in fu.accounts:
acct_tree = Tree(Text(fa.name))
acct_text = Text()
if fa.partitions:
for i, part in enumerate(fa.partitions):
if i > 0:
acct_text.append(",")
if part in self.priority_partitions:
acct_text.append(f"{part}*", style="bold magenta")
else:
acct_text.append(part, style="magenta")
acct_tree.add(Tree(acct_text))
else:
acct_tree.add(Tree(Text("None", style="red")))
user_info.add(acct_tree)
user_tree.add(user_info)
return user_tree
|
Fields
| Name |
Type |
Description |
users |
list[str] |
User names. |
partitions |
list[str] |
Queue names. |
accounts |
list[str] |
Account names. |
debug |
bool |
Debug flag. Defaults to False. |
priority_partitions |
set[str] |
|
partition_map |
dict[str, set[str]] |
|
assoc |
SlurmAssociations | None |
|
Methods
check_users
def check_users(
v: list[str]
) -> list[str]
Source code in hpcman/hpcman/queue/acctinfo.py
| @field_validator("users") # type: ignore
@classmethod
def check_users(cls, v: list[str]) -> list[str]:
if not any([check_valid_slurm_association(x) for x in v]):
raise InvalidSlurmUser(f"One or more provided users is invalid: {v}")
else:
return v
|
check_accounts
def check_accounts(
v: list[str]
) -> list[str]
Source code in hpcman/hpcman/queue/acctinfo.py
| @field_validator("accounts") # type: ignore
@classmethod
def check_accounts(cls, v: list[str]) -> list[str]:
if not any([check_valid_slurm_association(x, "accounts") for x in v]):
raise InvalidSlurmAccount(f"One or more provided accounts is invalid: {v}")
else:
return v
|
check_partitions
def check_partitions(
v: list[str]
) -> list[str]
Source code in hpcman/hpcman/queue/acctinfo.py
| @field_validator("partitions") # type: ignore
@classmethod
def check_partitions(cls, v: list[str]) -> list[str]:
if not any([check_valid_slurm_partition(part) for part in v]):
raise InvalidSlurmPartition(f"One or more provided partitions is invalid: {v}")
else:
return v
|
generate_acct_tree
def generate_acct_tree() -> Tree
Source code in hpcman/hpcman/queue/acctinfo.py
| def generate_acct_tree(self) -> Tree:
user_tree = Tree("Slurm Queue Account Associations")
filtered_users = _gather_acctinfo_data(self)
for fu in filtered_users:
user_text = Text()
user_text.append(fu.name, style="cyan")
user_text.append(" Default Acct: ")
user_text.append(fu.default_account, style="green")
user_info = Tree(user_text)
for fa in fu.accounts:
acct_tree = Tree(Text(fa.name))
acct_text = Text()
if fa.partitions:
for i, part in enumerate(fa.partitions):
if i > 0:
acct_text.append(",")
if part in self.priority_partitions:
acct_text.append(f"{part}*", style="bold magenta")
else:
acct_text.append(part, style="magenta")
acct_tree.add(Tree(acct_text))
else:
acct_tree.add(Tree(Text("None", style="red")))
user_info.add(acct_tree)
user_tree.add(user_info)
return user_tree
|
FilteredAccount
Source code in hpcman/hpcman/queue/acctinfo.py
| @dataclass
class FilteredAccount:
name: str
partitions: list[str] = field(default_factory=list)
priority_partitions: list[str] = field(default_factory=list)
|
Attributes
| Name |
Type |
Description |
name |
str |
|
partitions |
list[str] |
|
priority_partitions |
list[str] |
|
FilteredUser
Source code in hpcman/hpcman/queue/acctinfo.py
| @dataclass
class FilteredUser:
name: str
default_account: str
accounts: list[FilteredAccount] = field(default_factory=list)
|
Attributes
| Name |
Type |
Description |
name |
str |
|
default_account |
str |
|
accounts |
list[FilteredAccount] |
|
Functions
run_queue_acctinfo
def run_queue_acctinfo(
kwargs = {}
) -> None
Run the queue_acct command.
Parameters:
| Name |
Type |
Description |
user |
str |
User name. |
queue |
Optional[str] |
Queue name. Defaults to None. |
debug |
bool |
Debug flag. Defaults to False. |
Returns:
| Type |
Description |
None |
None |
Source code in hpcman/hpcman/queue/acctinfo.py
| def run_queue_acctinfo(**kwargs) -> None:
"""Run the queue_acct command.
Args:
user (str): User name.
queue (Optional[str], optional): Queue name. Defaults to None.
debug (bool, optional): Debug flag. Defaults to False.
Returns:
None
"""
json_output = kwargs.pop("json_output", False)
console = Console()
try:
acct = QueueAcctinfo(**{k: v for k, v in kwargs.items() if v is not None})
except ValidationError as e:
handle_validation_errors(e, print_error=False)
if json_output:
_print_acctinfo_json(acct)
return
console.print(acct.generate_acct_tree())
if kwargs["debug"]:
console.print(acct)
|