"""Utilities for handling privileges.""" from typing import Union, Sequence, TypeAlias Operator: TypeAlias = str # Valid operators: "AND", "OR" Privilege: TypeAlias = str PrivilegesList: TypeAlias = Sequence[Privilege] ParseTree = tuple[Operator, # Leaves (`PrivilegesList` objects) on the left, # trees (`ParseTree` objects) on the right Union[PrivilegesList, tuple[PrivilegesList, 'ParseTree']]] class SpecificationValueError(ValueError): """Raised when there is an error in the specification string.""" pass def parse(spec: str) -> ParseTree: """Parse a string specification for privileges and return a tree of data objects of the form ( ())""" # if(spec.strip() == ""): # raise SpecificationValueError( # "You passed an empty specification. I do not know what to do.") return tuple() def check(spec: str, privileges: tuple[str, ...]) -> bool: """Check that the sequence of `privileges` satisfies `spec`.""" return False