Skip to main content

Logging for django-fsm

Project description

Django Finite State Machine Log

test suite Code Health codecov Automatic logging for the excellent Django FSM package.

Logs can be accessed before a transition occurs and before they are persisted to the database by enabling a cached backend. See Advanced Usage

Changelog

3.0.0 (2022-01-14)

  • Switch to github actions (from travis-ci)
  • Test against django 3.2 and 4.0, then python 3.9 and 3.10
  • Drop support for django 1.11, 2.0, 2.1, 3.0, 3.1
  • Drop support for python 3.4, 3.5, 3.6
  • allow using StateLogManager in migrations #95

2.0.1 (2020-03-26)

  • Add support for django3.0
  • Drop support for python2

1.6.2 (2019-01-06)

  • Address Migration history breakage added in 1.6.1

1.6.1 (2018-12-02)

  • Make StateLog.description field nullable

1.6.0 (2018-11-14)

  • Add source state on transitions
  • Fixed get_state_display with FSMIntegerField (#63)
  • Fixed handling of transitions if target is None (#71)
  • Added fsm_log_description decorator (#1, #67)
  • Dropped support for Django 1.10 (#64)

1.5.0 (2017-11-29)

  • cleanup deprecated code.
  • add codecov support.
  • switch to pytest.
  • add Admin integration to visualize past transitions.

1.4.0 (2017-11-09)

  • Bring compatibility with Django 2.0 and drop support of unsupported versions of Django: 1.6, 1.7, 1.9.

Compatibility

  • Python 2.7 and 3.4+
  • Django 1.8+
  • Django-FSM 2+

Installation

First, install the package with pip. This will automatically install any dependencies you may be missing

pip install django-fsm-log

Register django_fsm_log in your list of Django applications:

INSTALLED_APPS = (
    ...,
    'django_fsm_log',
    ...,
)

Then migrate the app to create the database table

python manage.py migrate django_fsm_log

Usage

The app listens for the django_fsm.signals.post_transition signal and creates a new record for each transition.

To query the log:

from django_fsm_log.models import StateLog
StateLog.objects.all()
# ...all recorded logs...

Disabling logging for specific models

By default transitions get recorded for all models. Logging can be disabled for specific models by adding their fully qualified name to DJANGO_FSM_LOG_IGNORED_MODELS.

DJANGO_FSM_LOG_IGNORED_MODELS = ('poll.models.Vote',)

for_ Manager Method

For convenience there is a custom for_ manager method to easily filter on the generic foreign key:

from my_app.models import Article
from django_fsm_log.models import StateLog

article = Article.objects.all()[0]

StateLog.objects.for_(article)
# ...logs for article...

by Decorator

We found that our transitions are commonly called by a user, so we've added a decorator to make logging this easy:

from django.db import models
from django_fsm import FSMField, transition
from django_fsm_log.decorators import fsm_log_by

class Article(models.Model):

    state = FSMField(default='draft', protected=True)

    @fsm_log_by
    @transition(field=state, source='draft', target='submitted')
    def submit(self, by=None):
        pass

With this the transition gets logged when the by kwarg is present.

article = Article.objects.create()
article.submit(by=some_user) # StateLog.by will be some_user

Admin integration

There is an InlineForm available that can be used to display the history of changes.

To use it expand your own AdminModel by adding StateLogInline to its inlines:

from django.contrib import admin
from django_fsm_log.admin import StateLogInline


@admin.register(FSMModel)
class FSMModelAdmin(admin.ModelAdmin):
    inlines = [StateLogInline]

Advanced Usage

You can change the behaviour of this app by turning on caching for StateLog records. Simply add DJANGO_FSM_LOG_STORAGE_METHOD = 'django_fsm_log.backends.CachedBackend' to your project's settings file. It will use your project's default cache backend by default. If you wish to use a specific cache backend, you can add to your project's settings:

DJANGO_FSM_LOG_CACHE_BACKEND = 'some_other_cache_backend'

The StateLog object is now available after the django_fsm.signals.pre_transition signal is fired, but is deleted from the cache and persisted to the database after django_fsm.signals.post_transition is fired.

This is useful if:

  • you need immediate access to StateLog details, and cannot wait until django_fsm.signals.post_transition has been fired
  • at any stage, you need to verify whether or not the StateLog has been written to the database

Access to the pending StateLog record is available via the pending_objects manager

from django_fsm_log.models import StateLog
article = Article.objects.get(...)
pending_state_log = StateLog.pending_objects.get_for_object(article)

Running Tests

pip install tox
tox

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-fsm-log-3.0.0.tar.gz (14.0 kB view details)

Uploaded Source

Built Distribution

django_fsm_log-3.0.0-py3-none-any.whl (13.6 kB view details)

Uploaded Python 3

File details

Details for the file django-fsm-log-3.0.0.tar.gz.

File metadata

  • Download URL: django-fsm-log-3.0.0.tar.gz
  • Upload date:
  • Size: 14.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.1

File hashes

Hashes for django-fsm-log-3.0.0.tar.gz
Algorithm Hash digest
SHA256 8d7b7f5b29cca5567473eba1016af8cd607b8abae1405df70c61f57ed54cd9ab
MD5 3125bd0b7ef4d147f17f4a97328024b5
BLAKE2b-256 5dbfd4e7d44a7e9afc906ebd5532d136bbb3f3bbd76a7c22beebbf268b1afadb

See more details on using hashes here.

File details

Details for the file django_fsm_log-3.0.0-py3-none-any.whl.

File metadata

  • Download URL: django_fsm_log-3.0.0-py3-none-any.whl
  • Upload date:
  • Size: 13.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.1

File hashes

Hashes for django_fsm_log-3.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e7f4df38a7c1913a588ae446387017da9687f895b111347a3127781cdd7ce7a7
MD5 ff1c5b9a076b70fe1102c1b291c0e8a7
BLAKE2b-256 6025d1f82822bff06bf8c7f5d9caf4af3629714a0da49b8aa2a01cd9125ef069

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page