Skip to main content
AccessMode defines the type of access granted to a path. It’s used with CapabilitySet.allow_path() and CapabilitySet.allow_file().

Values

from nono_py import AccessMode

AccessMode.READ        # Read-only access
AccessMode.WRITE       # Write-only access
AccessMode.READ_WRITE  # Both read and write access
ValueDescription
READRead-only access. Can open files for reading, list directories.
WRITEWrite-only access. Can create, modify, and delete files.
READ_WRITEFull access. Combines READ and WRITE permissions.

Usage

Basic Usage

from nono_py import CapabilitySet, AccessMode

caps = CapabilitySet()

# Read-only: can read files but not modify
caps.allow_path("/etc", AccessMode.READ)

# Write-only: can create/modify but not read existing content
caps.allow_path("/var/log/myapp", AccessMode.WRITE)

# Full access: read and write
caps.allow_path("/tmp", AccessMode.READ_WRITE)

With Query Context

from nono_py import CapabilitySet, AccessMode, QueryContext

caps = CapabilitySet()
caps.allow_path("/tmp", AccessMode.READ)

ctx = QueryContext(caps)

# Check read access
result = ctx.query_path("/tmp/file.txt", AccessMode.READ)
print(result["status"])  # "allowed"

# Check write access (not granted)
result = ctx.query_path("/tmp/file.txt", AccessMode.WRITE)
print(result["status"])  # "denied"
print(result["reason"])  # "insufficient_access"

Access Level Hierarchy

READ_WRITE is the highest access level and covers both READ and WRITE:
GrantedRequested READRequested WRITERequested READ_WRITE
READAllowedDeniedDenied
WRITEDeniedAllowedDenied
READ_WRITEAllowedAllowedAllowed

String Representation

from nono_py import AccessMode

print(str(AccessMode.READ))        # "read"
print(str(AccessMode.WRITE))       # "write"
print(str(AccessMode.READ_WRITE))  # "read+write"

print(repr(AccessMode.READ))       # "AccessMode.READ"

Comparison and Hashing

AccessMode values are hashable and can be used as dictionary keys or in sets:
from nono_py import AccessMode

# Use as dict keys
permissions = {
    AccessMode.READ: "r",
    AccessMode.WRITE: "w",
    AccessMode.READ_WRITE: "rw",
}

# Use in sets
allowed_modes = {AccessMode.READ, AccessMode.READ_WRITE}
print(AccessMode.READ in allowed_modes)  # True

# Equality comparison
print(AccessMode.READ == AccessMode.READ)   # True
print(AccessMode.READ == AccessMode.WRITE)  # False