Versioning and auditing extension for PostgreSQL and SQLAlchemy.
Reason this release was yanked:
broken
Project description
Flask-PostgreSQL-Audit
Auditing extension for Flask-SQLAlchemy with PostgreSQL. Forked from PostgreSQL-Audit, tries to combine the best of breed from existing solutions such as SQLAlchemy-Continuum, Papertrail and especially Audit Trigger by 2ndQuadrant.
- Stores audit recordss into single table called
pga_activity - Uses trigger based approach to keep INSERTs, UPDATEs and DELETEs as fast as possible
- Tracks and stores actor identities into table called
pga_transaction - Uses Alembic and Alembic-Utils to generate necessary database objects for migration
Installation
pip install flask-postgresql-audit
or using uv
uv add flask-postgresql-audit
or install directly from this repo
uv add git+https://github.com/higamigu/flask-postgresql-audit --tag v1.0.0
Usage
from flask_sqlalchemy import SQLAlchemy
from flask_postgresql_audit import PostgreSQLAudit, Audit
from my_app import app # your flask app
db = SQLAlchemy()
audit = PostgreSQLAudit()
class Article(db.Model, Audit):
__tablename__ = 'article'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String)
db.init_app(app)
audit.init_app(app, db)
article = Article(name='Some article')
db.session.add(article)
db.session.commit()
Then generate migration file
flask db migrate -m "pg audit initial migration"
flask db upgrade
Now we can check the newly created activity.
activity = db.session.scalar(select(audit.Activity))
activity.id # 1
activity.table_name # 'article'
activity.verb # 'insert'
activity.old_data # None
activity.changed_data # {'id': '1', 'name': 'Some article'}
article.name = 'Some other article'
db.session.commit()
activity = db.session.scalar(select(audit.Activity).order_by(desc("id")))
activity.id # 2
activity.table_name # 'article'
activity.verb # 'update'
activity.object_id # 1
activity.old_data # {'id': '1', 'name': 'Some article'}
activity.changed_data # {'name': 'Some other article'}
db.session.delete(article)
db.session.commit()
activity = db.session.scalar(select(audit.Activity).order_by(desc("id")))
activity.id # 3
activity.table_name # 'article'
activity.verb # 'delete'
activity.object_id # 1
activity.old_data # {'id': '1', 'name': 'Some other article'}
activity.changed_data # None
Different Schema
You can isolate pg_audit objects entirely to a different schema by doing
from flask_postgresql_audit import PostgreSQLAudit
audit = PostgreSQLAudit(schema="audit")
...
And then you need to tell alembic to track other than public schema by adding following line in alembic/env.py
...
def run_migrations_online():
connectable = get_engine()
with connectable.connect() as connection:
context.configure(
connection=connection,
target_metadata=get_metadata(),
include_schemas=True, # add this arg
...
)
with context.begin_transaction():
context.run_migrations()
...
Custom Actor ID getter
You can customize actor id getter function by doing the following. Here is an example using current_user from flask_jwt_extended library.
from flask_jwt_extended import jwt_required, current_user
@jwt_required(optional=True)
def actor_id_getter():
try:
return current_user.email or None
except Exception:
return None
...
audit = PostgreSQLAudit(actor_id_getter=actor_id_getter)
...
Enable Alembic Logger
You can enable alembic logger for pg_audit by adding the following to your alembic.ini
# Logging configuration
[loggers]
keys = root,sqlalchemy,alembic,alembic_utils,pg_audit # add 'pg_audit' here
...
[logger_pg_audit] # and add the logger for pg_audit here
level = INFO
handlers =
qualname = pg_audit
Running the tests
git clone https://github.com/higamigu/flask-postgresql-audit.git
cd flask-postgresql-audit
pip install tox
createdb postgresql_audit_test
tox
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file flask_postgresql_audit-1.0.0-1-py3-none-any.whl.
File metadata
- Download URL: flask_postgresql_audit-1.0.0-1-py3-none-any.whl
- Upload date:
- Size: 17.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0ac136d4ddc8619a781c3993e47a756b4cc45489a3e2e29bc821b98b7ed76cfc
|
|
| MD5 |
f3af5da8dbfb78fc91546d013d23911f
|
|
| BLAKE2b-256 |
fce70c6891516824c30d9fa8e76e1f0b28de4696a6c0b4f50be4fc9fd1f29d31
|