All Projects → gizmag → Django Fsm Log

gizmag / Django Fsm Log

Licence: mit
Automatic logging for Django FSM

Programming Languages

python
139335 projects - #7 most used programming language

Labels

Projects that are alternatives of or similar to Django Fsm Log

Django Dersleri
YouTube Django Dersleri için proje kaynak kodu
Stars: ✭ 135 (-4.26%)
Mutual labels:  django
Djangoweb
基于Django的运维平台
Stars: ✭ 137 (-2.84%)
Mutual labels:  django
Django Mfa
Django-mfa (Multi Factor Authentication) is a simple package to add extra layer of security to your django web application. It gives web app a randomly changing password as an extra protection and supports u2f too
Stars: ✭ 139 (-1.42%)
Mutual labels:  django
Django Prices
Django fields for the prices module
Stars: ✭ 135 (-4.26%)
Mutual labels:  django
Jbt blog
一个基于Django2.0+Python3.6的博客/A simple blog based on python3.6 and Django2.0.
Stars: ✭ 137 (-2.84%)
Mutual labels:  django
Django Scopes
Safely separate multiple tenants in a Django database
Stars: ✭ 138 (-2.13%)
Mutual labels:  django
Django Business Logic
Visual DSL framework for django
Stars: ✭ 134 (-4.96%)
Mutual labels:  django
Django Intro Zh
Django 官方文档的 intro 部分的中文翻译
Stars: ✭ 141 (+0%)
Mutual labels:  django
Cosmos Search
🌱 The next generation unbiased real-time privacy and user focused code search engine for everyone; Join us at https://discourse.opengenus.org/
Stars: ✭ 137 (-2.84%)
Mutual labels:  django
Django Braces
Reusable, generic mixins for Django
Stars: ✭ 1,756 (+1145.39%)
Mutual labels:  django
Django Anon
Anonymize production data so it can be safely used in not-so-safe environments
Stars: ✭ 136 (-3.55%)
Mutual labels:  django
Pinry
The open-source core of Pinry, a tiling image board system for people who want to save, tag, and share images, videos and webpages in an easy to skim through format.
Stars: ✭ 1,819 (+1190.07%)
Mutual labels:  django
Django Echarts
A django app for Echarts integration using pyecharts library as chart builder.
Stars: ✭ 138 (-2.13%)
Mutual labels:  django
Cleanerversion
CleanerVersion adds a versioning/historizing layer to your relational DB which implements a "Slowly Changing Dimensions Type 2" behavior
Stars: ✭ 135 (-4.26%)
Mutual labels:  django
Django Postgres Copy
Quickly import and export delimited data with Django support for PostgreSQL's COPY command
Stars: ✭ 139 (-1.42%)
Mutual labels:  django
Saleor
A modular, high performance, headless e-commerce platform built with Python, GraphQL, Django, and React.
Stars: ✭ 14,720 (+10339.72%)
Mutual labels:  django
Freedombox
Easy to manage, privacy oriented home server. Read-only mirror of https://salsa.debian.org/freedombox-team/freedombox
Stars: ✭ 137 (-2.84%)
Mutual labels:  django
Django Vote
Simple vote for django
Stars: ✭ 141 (+0%)
Mutual labels:  django
Djangorestframework Dataclasses
Dataclasses serializer for Django REST framework
Stars: ✭ 138 (-2.13%)
Mutual labels:  django
Django Starter Template
A project template for Django 2.0 that follows best practices.
Stars: ✭ 138 (-2.13%)
Mutual labels:  django

Django Finite State Machine Log

Build Status 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

2.0.2-dev (unreleased)

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
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].