diff options
| author | CoprDistGit <infra@openeuler.org> | 2023-04-11 09:31:29 +0000 |
|---|---|---|
| committer | CoprDistGit <infra@openeuler.org> | 2023-04-11 09:31:29 +0000 |
| commit | 5e988d3f701faf4e1198f026fa5da42247fa91dd (patch) | |
| tree | b233810100c82cd84975be4f8be5be342e08c777 /python-django-fsm-log.spec | |
| parent | 1c5113aea7ab6429a96b82c2ebd39205298a5df3 (diff) | |
automatic import of python-django-fsm-log
Diffstat (limited to 'python-django-fsm-log.spec')
| -rw-r--r-- | python-django-fsm-log.spec | 895 |
1 files changed, 895 insertions, 0 deletions
diff --git a/python-django-fsm-log.spec b/python-django-fsm-log.spec new file mode 100644 index 0000000..6cf51af --- /dev/null +++ b/python-django-fsm-log.spec @@ -0,0 +1,895 @@ +%global _empty_manifest_terminate_build 0 +Name: python-django-fsm-log +Version: 3.1.0 +Release: 1 +Summary: Transition's persistence for django-fsm +License: MIT +URL: https://github.com/jazzband/django-fsm-log +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/bd/25/25296d04f9d4bb3717049a4f758f8b3ce5c6614ffea3b9504d1f6e79121f/django-fsm-log-3.1.0.tar.gz +BuildArch: noarch + +Requires: python3-django +Requires: python3-django-fsm +Requires: python3-django-appconf +Requires: python3-sphinx +Requires: python3-sphinx-rtd-theme +Requires: python3-myst-parser +Requires: python3-pytest +Requires: python3-pytest-cov +Requires: python3-pytest-django +Requires: python3-pytest-mock + +%description +# Django Finite State Machine Log + +[](https://github.com/jazzband/django-fsm-log/actions/workflows/test_suite.yml) +[](https://codecov.io/gh/jazzband/django-fsm-log) +[](https://jazzband.co/) +[](https://results.pre-commit.ci/latest/github/jazzband/django-fsm-log/master) +[](https://django-fsm-log.readthedocs.io/en/latest/?badge=latest) + +Provides persistence of the transitions of your fsm's models. Backed by the excellent [Django FSM](https://github.com/viewflow/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](#advanced-usage) + +## Changelog + +## 4.0.0 (not released) + +## 3.1.0 (2023-03-23) + +- `fsm_log_description` now accepts a default description parameter +- Document `fsm_log_description` decorator +- Add support for Django 4.1 +- Add compatibility for python 3.11 + +### 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](https://github.com/jazzband/django-fsm-log/pull/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 + +```bash +pip install django-fsm-log +``` + +Register django_fsm_log in your list of Django applications: + +```python +INSTALLED_APPS = ( + ..., + 'django_fsm_log', + ..., +) +``` + +Then migrate the app to create the database table + +```bash +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: + +```python +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`. + +```python +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: + +```python +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: + +```python +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. + +```python +article = Article.objects.create() +article.submit(by=some_user) # StateLog.by will be some_user +``` + +### `description` Decorator + +Decorator that allows to set a custom description (saved on database) to a transitions. + +```python +from django.db import models +from django_fsm import FSMField, transition +from django_fsm_log.decorators import fsm_log_description + +class Article(models.Model): + + state = FSMField(default='draft', protected=True) + + @fsm_log_description(description='Article submitted') # description param is NOT required + @transition(field=state, source='draft', target='submitted') + def submit(self, description=None): + pass + +article = Article.objects.create() +article.submit() # logged with "Article submitted" description +article.submit(description="Article reviewed and submitted") # logged with "Article reviewed and submitted" description +``` + +.. TIP:: + The "description" argument passed when calling ".submit" has precedence over the default description set in the decorator + +The decorator also accepts a `allow_inline` boolean argument that allows to set the description inside the transition method. + +```python +from django.db import models +from django_fsm import FSMField, transition +from django_fsm_log.decorators import fsm_log_description + +class Article(models.Model): + + state = FSMField(default='draft', protected=True) + + @fsm_log_description(allow_inline=True) + @transition(field=state, source='draft', target='submitted') + def submit(self, description=None): + description.set("Article submitted") + +article = Article.objects.create() +article.submit() # logged with "Article submitted" description +``` + +### 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: + +```python +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: + +```python +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 + +```python +from django_fsm_log.models import StateLog +article = Article.objects.get(...) +pending_state_log = StateLog.pending_objects.get_for_object(article) +``` + +## Contributing + +### Running tests + +```bash +pip install tox +tox +``` + +### Linting with pre-commit + +We use ruff, black and more, all configured and check via [pre-commit](https://pre-commit.com/). +Before committing, run the following: + +```bash +pip install pre-commit +pre-commit install +``` + + + + +%package -n python3-django-fsm-log +Summary: Transition's persistence for django-fsm +Provides: python-django-fsm-log +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-django-fsm-log +# Django Finite State Machine Log + +[](https://github.com/jazzband/django-fsm-log/actions/workflows/test_suite.yml) +[](https://codecov.io/gh/jazzband/django-fsm-log) +[](https://jazzband.co/) +[](https://results.pre-commit.ci/latest/github/jazzband/django-fsm-log/master) +[](https://django-fsm-log.readthedocs.io/en/latest/?badge=latest) + +Provides persistence of the transitions of your fsm's models. Backed by the excellent [Django FSM](https://github.com/viewflow/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](#advanced-usage) + +## Changelog + +## 4.0.0 (not released) + +## 3.1.0 (2023-03-23) + +- `fsm_log_description` now accepts a default description parameter +- Document `fsm_log_description` decorator +- Add support for Django 4.1 +- Add compatibility for python 3.11 + +### 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](https://github.com/jazzband/django-fsm-log/pull/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 + +```bash +pip install django-fsm-log +``` + +Register django_fsm_log in your list of Django applications: + +```python +INSTALLED_APPS = ( + ..., + 'django_fsm_log', + ..., +) +``` + +Then migrate the app to create the database table + +```bash +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: + +```python +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`. + +```python +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: + +```python +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: + +```python +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. + +```python +article = Article.objects.create() +article.submit(by=some_user) # StateLog.by will be some_user +``` + +### `description` Decorator + +Decorator that allows to set a custom description (saved on database) to a transitions. + +```python +from django.db import models +from django_fsm import FSMField, transition +from django_fsm_log.decorators import fsm_log_description + +class Article(models.Model): + + state = FSMField(default='draft', protected=True) + + @fsm_log_description(description='Article submitted') # description param is NOT required + @transition(field=state, source='draft', target='submitted') + def submit(self, description=None): + pass + +article = Article.objects.create() +article.submit() # logged with "Article submitted" description +article.submit(description="Article reviewed and submitted") # logged with "Article reviewed and submitted" description +``` + +.. TIP:: + The "description" argument passed when calling ".submit" has precedence over the default description set in the decorator + +The decorator also accepts a `allow_inline` boolean argument that allows to set the description inside the transition method. + +```python +from django.db import models +from django_fsm import FSMField, transition +from django_fsm_log.decorators import fsm_log_description + +class Article(models.Model): + + state = FSMField(default='draft', protected=True) + + @fsm_log_description(allow_inline=True) + @transition(field=state, source='draft', target='submitted') + def submit(self, description=None): + description.set("Article submitted") + +article = Article.objects.create() +article.submit() # logged with "Article submitted" description +``` + +### 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: + +```python +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: + +```python +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 + +```python +from django_fsm_log.models import StateLog +article = Article.objects.get(...) +pending_state_log = StateLog.pending_objects.get_for_object(article) +``` + +## Contributing + +### Running tests + +```bash +pip install tox +tox +``` + +### Linting with pre-commit + +We use ruff, black and more, all configured and check via [pre-commit](https://pre-commit.com/). +Before committing, run the following: + +```bash +pip install pre-commit +pre-commit install +``` + + + + +%package help +Summary: Development documents and examples for django-fsm-log +Provides: python3-django-fsm-log-doc +%description help +# Django Finite State Machine Log + +[](https://github.com/jazzband/django-fsm-log/actions/workflows/test_suite.yml) +[](https://codecov.io/gh/jazzband/django-fsm-log) +[](https://jazzband.co/) +[](https://results.pre-commit.ci/latest/github/jazzband/django-fsm-log/master) +[](https://django-fsm-log.readthedocs.io/en/latest/?badge=latest) + +Provides persistence of the transitions of your fsm's models. Backed by the excellent [Django FSM](https://github.com/viewflow/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](#advanced-usage) + +## Changelog + +## 4.0.0 (not released) + +## 3.1.0 (2023-03-23) + +- `fsm_log_description` now accepts a default description parameter +- Document `fsm_log_description` decorator +- Add support for Django 4.1 +- Add compatibility for python 3.11 + +### 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](https://github.com/jazzband/django-fsm-log/pull/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 + +```bash +pip install django-fsm-log +``` + +Register django_fsm_log in your list of Django applications: + +```python +INSTALLED_APPS = ( + ..., + 'django_fsm_log', + ..., +) +``` + +Then migrate the app to create the database table + +```bash +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: + +```python +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`. + +```python +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: + +```python +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: + +```python +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. + +```python +article = Article.objects.create() +article.submit(by=some_user) # StateLog.by will be some_user +``` + +### `description` Decorator + +Decorator that allows to set a custom description (saved on database) to a transitions. + +```python +from django.db import models +from django_fsm import FSMField, transition +from django_fsm_log.decorators import fsm_log_description + +class Article(models.Model): + + state = FSMField(default='draft', protected=True) + + @fsm_log_description(description='Article submitted') # description param is NOT required + @transition(field=state, source='draft', target='submitted') + def submit(self, description=None): + pass + +article = Article.objects.create() +article.submit() # logged with "Article submitted" description +article.submit(description="Article reviewed and submitted") # logged with "Article reviewed and submitted" description +``` + +.. TIP:: + The "description" argument passed when calling ".submit" has precedence over the default description set in the decorator + +The decorator also accepts a `allow_inline` boolean argument that allows to set the description inside the transition method. + +```python +from django.db import models +from django_fsm import FSMField, transition +from django_fsm_log.decorators import fsm_log_description + +class Article(models.Model): + + state = FSMField(default='draft', protected=True) + + @fsm_log_description(allow_inline=True) + @transition(field=state, source='draft', target='submitted') + def submit(self, description=None): + description.set("Article submitted") + +article = Article.objects.create() +article.submit() # logged with "Article submitted" description +``` + +### 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: + +```python +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: + +```python +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 + +```python +from django_fsm_log.models import StateLog +article = Article.objects.get(...) +pending_state_log = StateLog.pending_objects.get_for_object(article) +``` + +## Contributing + +### Running tests + +```bash +pip install tox +tox +``` + +### Linting with pre-commit + +We use ruff, black and more, all configured and check via [pre-commit](https://pre-commit.com/). +Before committing, run the following: + +```bash +pip install pre-commit +pre-commit install +``` + + + + +%prep +%autosetup -n django-fsm-log-3.1.0 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-django-fsm-log -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Tue Apr 11 2023 Python_Bot <Python_Bot@openeuler.org> - 3.1.0-1 +- Package Spec generated |
