py_abac.storage package

Submodules

py_abac.storage.base module

Policy Storage abstract class

class py_abac.storage.base.Storage[source]

Bases: object

Base class for policy storage

abstract add(policy: py_abac.policy.policy.Policy)[source]

Store a policy

abstract delete(uid: str)[source]

Delete a policy

abstract get(uid: str) → Optional[py_abac.policy.policy.Policy][source]

Get specific policy

abstract get_all(limit: int, offset: int) → Generator[py_abac.policy.policy.Policy, None, None][source]

Retrieve all the policies within a window

abstract get_for_target(subject_id: str, resource_id: str, action_id: str) → Generator[py_abac.policy.policy.Policy, None, None][source]

Get all policies for given target IDs.

abstract update(policy: py_abac.policy.policy.Policy)[source]

Update a policy

py_abac.storage.migration module

Migration utilities for Storage Migrations

class py_abac.storage.migration.Migration[source]

Bases: object

Manager for maintaining various migration actions of the storage: schema, indices, etc

abstract down()[source]

Migrate DB schema down

abstract up()[source]

Migrate DB schema up

abstract property order

Number of this migration in the row of migrations

class py_abac.storage.migration.MigrationSet[source]

Bases: object

Collection of migrations.

down(number: int = None)[source]

Runs migrations down. If number was specified, runs particular migration from the set

abstract last_applied()[source]

Number of the last migration that was applied up

abstract migrations()[source]

Get migrations. Subclasses should defile a list of storage migrations here

abstract save_applied_number(number: int)[source]

Save the last applied up migration number

up(number: int = None)[source]

Runs migrations up. If number was specified, runs particular migration from the set

class py_abac.storage.migration.Migrator(migration_set: py_abac.storage.migration.MigrationSet)[source]

Bases: object

Migrations executor. Just pass a desired set of migrations to it and run up/down. If number was specified, runs particular migration

down(number: int = None)[source]

Runs down of a MigrationSet

up(number: int = None)[source]

Runs up of a MigrationSet

py_abac.storage.utils module

Utility methods used for creating storage

py_abac.storage.utils.get_all_wildcard_queries(string: str, wildcard: str = '*') → List[str][source]

This method computes all possible wildcard queries matching given string.

Example

"a" -> ['a', '*', '*a*', 'a*', '*a']
"ab" -> ['ab', '*', '*a*', 'a*', '*b', '*b*', '*ab*', 'ab*', '*ab']

See unit tests for more examples.

Parameters
  • string – string for which to obtain queries

  • wildcard – wildcard char in query. Default set to ‘*’

Returns

list of queries

py_abac.storage.utils.get_sub_wildcard_queries(query: str, wildcard: str = '*') → List[str][source]

This method splits a wildcard query into sub-queries in such a way that if it matches an arbitrary string, then all its sub-queries also match that string. This is achieved by splitting the query by the wildcard and then adding it back as prefix and suffix to the splits.

Example

"ab*c" -> ["ab*", "*c"]
"*a*b" -> ["*a*", "*b"]
"ab**" -> ["ab*"]

See unit tests for more examples.

Parameters
  • query – wildcard query

  • wildcard – wildcard char in the query. Default set to ‘*’

Returns

list of sub-queries

Module contents