about summary refs log tree commit diff
path: root/gn_libs/privileges.py
blob: 47cb735a29aaae51abde7498b9682ede33d77efe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
"""Utilities for handling privileges."""
from typing import Union, TypeAlias

PrivilegesList = tuple[str, ...]
CheckObj = tuple[str, PrivilegesList] # where the first item is either "OR" or "AND"
Checks: TypeAlias = Union[
    CheckObj,
    tuple[str, tuple['Checks', ...]]]


class SpecificationValueError(ValueError):
    """Raised when there is an error in the specification string."""
    pass


def parse(spec: str) -> Checks:
    """Parse a string specification for privileges and return a tree of data
    objects of the form (<operator> (<check>))"""
    # 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