django-eventlog


Namedjango-eventlog JSON
Version 2.2.2 PyPI version JSON
download
home_pagehttps://barttc.github.io/django-eventlog/
Summarydjango-eventlog stores event messages in a Django model.
upload_time2024-11-19 08:06:20
maintainerNone
docs_urlNone
authorMartin Mahner
requires_python<4.0,>=3.8
licenseMIT
keywords django logging logger events
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            [![](https://img.shields.io/pypi/v/django-eventlog.svg)](https://pypi.org/project/django-eventlog/)
[![](https://github.com/bartTC/django-eventlog/actions/workflows/push.yml/badge.svg)](https://github.com/bartTC/django-eventlog/actions/workflows/push.yml)
[![](https://codecov.io/github/bartTC/django-eventlog/graph/badge.svg?token=YLXXbCawUQ)](https://codecov.io/github/bartTC/django-eventlog)

---

📖 **Full documentation: https://barttc.github.io/django-eventlog/**

_Compatibility Matrix:_

| Py/Dj     | 3.9 | 3.10 | 3.11 | 3.12 | 3.13 |
| --------- | --- | ---- | ---- | ---- |------|
| 4.2 (LTS) | ✓   | ✓    | ✓    | ✓    | ✓    |
| 5.0       | —   | ✓    | ✓    | ✓    | ✓    |
| 5.1       | —   | ✓    | ✓    | ✓    | ✓    |

# django-eventlog

<img src="https://github.com/bartTC/django-eventlog/raw/main/docs/_static/logo.webp" alt="djang-eventlog Logo" width="300"/>

django-eventlog is a very simple event logger you can use to track certain actions in
your code. Events are stored in a Django model and can be viewed in the Django Admin.

Usage Example:

```python
from eventlog import EventGroup

e = EventGroup()                       # Start a new Event Group
e.info('About to send 1000 mails.',    # Trigger an Event
       initiator='Mailer Daemon')
try:
    # ... sending 1000 mails
    e.info('All emails sent!',         # Trigger an Event in the same group,
           initiator='Mailer Daemon')  # so they are combined in the admin.
except Exception:
    e.error('There was an error sending the emails.',
            initiator='Mailer Daemon')
```

You can reuse an event group by specifying a group name and attach optional data. Data
must be JSON serializable.

```python
from eventlog import EventGroup

def purchase():
    e = EventGroup(group_id=f"Order {self.order.pk}")
    e.info("Sent order to Shopify", data={"items": [1, 2, 3]})

def subscribe_newsletter():
    e = EventGroup(group_id=f"Order {self.order.pk}")
    e.info("User subscribed to newsletter on checkout", data={"email": "user@example.com"})
```

Events can be grouped in a "Event Group" and when hovering over one item in the admin,
all events of the same group are highlighted:

![](https://github.com/bartTC/django-eventlog/raw/main/docs/_static/change_list.png)

The details view of an event will list all other events of this group so you
can track the progress:

![](https://github.com/bartTC/django-eventlog/raw/main/docs/_static/change_form.png)

While looking similar, it's not intended to be a replacement for your regular Python
`logging` facility, rather an addition to it.

django-eventlog stores it's data in a regular database model, so each log entry will
trigger a SQL Insert. Therefore you should be careful using it in high performance
and/or high volume environments.

# Changelog

# 2.2.2 (2024-11-19)

- Added support for Python 3.13 
- Drop support for Django <= 4.1

## 2.2.1 (2024-09-02)

- Added support for Django 5.1

## 2.2 (2024-06-16)

- Minor typo fixes
- The 'group' db field now uses a DB index.

## 2.1 (2024-03-20)

- The format and value of the random group id can now be specified using the AppConfig.
- Various improvements to make the Event model swappable via the AppConfig.
- Switch development tooling from Pipenv to Poetry

## 2.0 (2024-03-10)

- Overall test and code refactor.
- Documentation now done with MKDocs.
- Timeline in Admin change form now supports delays of days and hours, instead of just minutes.
- _Backwards incompatible:_ Removed undocumented `Event.objects.purge()` queryset method.
- _Backwards incompatible:_ The list of event types defined in the app config is now
  set via Python dataclasses rather than a dictionary. The migration is straightforward.

  ```python
  event_types = {
      "info": {
          "label": _("Info"),
          "color": None,
          "bgcolor": None,
      },
      "warning": {
          "label": _("Warning"),
          "color": None,
          "bgcolor": None,
      },
      # ...
  }
  ```

  The dictionary is now a `EventTypeList` of `EventType` dataclasses:

  ```python
  from django.utils.translation import gettext_lazy as _
  from eventlog.datastructures import EventType, EventTypeList

  # List of event types to be used in events. A list of `EventType` classes
  event_types = EventTypeList(
      EventType(name="info", label=_("Info")),
      EventType(name="warning", label=_("Warning")),
      EventType(name="error", label=_("Error"), color="red"),
      EventType(name="critical", label=_("Critical"), color="white", bgcolor="red"),
  )
  ```

  You will only need to do this change if you've earlier overridden the event_type property.

## 1.5 (2024-03-08)

- Event can have optional, JSON serializable data attached.
- Fixed dark mode colors.
- Various Admin UI improvements.

## 1.4 (2024-03-05)

- Event groups can now have arbitrary names instead of UUIDs.
- Event comments is a textfield.
- Fixed potential migration warnings around AutoFields.

## 1.3 (2023-10-04)

- Python 3.12 compatibility
- Django 5.0 support
- Type Annotations

## 1.2 (2023-04-28)

- Python 3.7 to 3.11 compatibility
- Django 3.2 to 4.2 support

## 1.1 (2018-05-11)

- Added ability to manually set a group id to make an EventGroup object
  reusable through threads.

## 1.0 (2018-02-13)

- Production ready 1.0 release.
- The details Admin view now displays all events of the group with an
  annotated delay, so you can see the progress of the group.

## 0.9 (2018-02-13)

- Initial release.
- Django 1.8 to 2.0 compatibility.
- Python 2.7 to 3.6 compatibility.

            

Raw data

            {
    "_id": null,
    "home_page": "https://barttc.github.io/django-eventlog/",
    "name": "django-eventlog",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<4.0,>=3.8",
    "maintainer_email": null,
    "keywords": "django, logging, logger, events",
    "author": "Martin Mahner",
    "author_email": "martin@mahner.org",
    "download_url": "https://files.pythonhosted.org/packages/fd/c4/b3fb606e671f6e023d2f9354b19bd0ad2e579cc70e79782afce9c5f56f91/django_eventlog-2.2.2.tar.gz",
    "platform": null,
    "description": "[![](https://img.shields.io/pypi/v/django-eventlog.svg)](https://pypi.org/project/django-eventlog/)\n[![](https://github.com/bartTC/django-eventlog/actions/workflows/push.yml/badge.svg)](https://github.com/bartTC/django-eventlog/actions/workflows/push.yml)\n[![](https://codecov.io/github/bartTC/django-eventlog/graph/badge.svg?token=YLXXbCawUQ)](https://codecov.io/github/bartTC/django-eventlog)\n\n---\n\n\ud83d\udcd6 **Full documentation: https://barttc.github.io/django-eventlog/**\n\n_Compatibility Matrix:_\n\n| Py/Dj     | 3.9 | 3.10 | 3.11 | 3.12 | 3.13 |\n| --------- | --- | ---- | ---- | ---- |------|\n| 4.2 (LTS) | \u2713   | \u2713    | \u2713    | \u2713    | \u2713    |\n| 5.0       | \u2014   | \u2713    | \u2713    | \u2713    | \u2713    |\n| 5.1       | \u2014   | \u2713    | \u2713    | \u2713    | \u2713    |\n\n# django-eventlog\n\n<img src=\"https://github.com/bartTC/django-eventlog/raw/main/docs/_static/logo.webp\" alt=\"djang-eventlog Logo\" width=\"300\"/>\n\ndjango-eventlog is a very simple event logger you can use to track certain actions in\nyour code. Events are stored in a Django model and can be viewed in the Django Admin.\n\nUsage Example:\n\n```python\nfrom eventlog import EventGroup\n\ne = EventGroup()                       # Start a new Event Group\ne.info('About to send 1000 mails.',    # Trigger an Event\n       initiator='Mailer Daemon')\ntry:\n    # ... sending 1000 mails\n    e.info('All emails sent!',         # Trigger an Event in the same group,\n           initiator='Mailer Daemon')  # so they are combined in the admin.\nexcept Exception:\n    e.error('There was an error sending the emails.',\n            initiator='Mailer Daemon')\n```\n\nYou can reuse an event group by specifying a group name and attach optional data. Data\nmust be JSON serializable.\n\n```python\nfrom eventlog import EventGroup\n\ndef purchase():\n    e = EventGroup(group_id=f\"Order {self.order.pk}\")\n    e.info(\"Sent order to Shopify\", data={\"items\": [1, 2, 3]})\n\ndef subscribe_newsletter():\n    e = EventGroup(group_id=f\"Order {self.order.pk}\")\n    e.info(\"User subscribed to newsletter on checkout\", data={\"email\": \"user@example.com\"})\n```\n\nEvents can be grouped in a \"Event Group\" and when hovering over one item in the admin,\nall events of the same group are highlighted:\n\n![](https://github.com/bartTC/django-eventlog/raw/main/docs/_static/change_list.png)\n\nThe details view of an event will list all other events of this group so you\ncan track the progress:\n\n![](https://github.com/bartTC/django-eventlog/raw/main/docs/_static/change_form.png)\n\nWhile looking similar, it's not intended to be a replacement for your regular Python\n`logging` facility, rather an addition to it.\n\ndjango-eventlog stores it's data in a regular database model, so each log entry will\ntrigger a SQL Insert. Therefore you should be careful using it in high performance\nand/or high volume environments.\n\n# Changelog\n\n# 2.2.2 (2024-11-19)\n\n- Added support for Python 3.13 \n- Drop support for Django <= 4.1\n\n## 2.2.1 (2024-09-02)\n\n- Added support for Django 5.1\n\n## 2.2 (2024-06-16)\n\n- Minor typo fixes\n- The 'group' db field now uses a DB index.\n\n## 2.1 (2024-03-20)\n\n- The format and value of the random group id can now be specified using the AppConfig.\n- Various improvements to make the Event model swappable via the AppConfig.\n- Switch development tooling from Pipenv to Poetry\n\n## 2.0 (2024-03-10)\n\n- Overall test and code refactor.\n- Documentation now done with MKDocs.\n- Timeline in Admin change form now supports delays of days and hours, instead of just minutes.\n- _Backwards incompatible:_ Removed undocumented `Event.objects.purge()` queryset method.\n- _Backwards incompatible:_ The list of event types defined in the app config is now\n  set via Python dataclasses rather than a dictionary. The migration is straightforward.\n\n  ```python\n  event_types = {\n      \"info\": {\n          \"label\": _(\"Info\"),\n          \"color\": None,\n          \"bgcolor\": None,\n      },\n      \"warning\": {\n          \"label\": _(\"Warning\"),\n          \"color\": None,\n          \"bgcolor\": None,\n      },\n      # ...\n  }\n  ```\n\n  The dictionary is now a `EventTypeList` of `EventType` dataclasses:\n\n  ```python\n  from django.utils.translation import gettext_lazy as _\n  from eventlog.datastructures import EventType, EventTypeList\n\n  # List of event types to be used in events. A list of `EventType` classes\n  event_types = EventTypeList(\n      EventType(name=\"info\", label=_(\"Info\")),\n      EventType(name=\"warning\", label=_(\"Warning\")),\n      EventType(name=\"error\", label=_(\"Error\"), color=\"red\"),\n      EventType(name=\"critical\", label=_(\"Critical\"), color=\"white\", bgcolor=\"red\"),\n  )\n  ```\n\n  You will only need to do this change if you've earlier overridden the event_type property.\n\n## 1.5 (2024-03-08)\n\n- Event can have optional, JSON serializable data attached.\n- Fixed dark mode colors.\n- Various Admin UI improvements.\n\n## 1.4 (2024-03-05)\n\n- Event groups can now have arbitrary names instead of UUIDs.\n- Event comments is a textfield.\n- Fixed potential migration warnings around AutoFields.\n\n## 1.3 (2023-10-04)\n\n- Python 3.12 compatibility\n- Django 5.0 support\n- Type Annotations\n\n## 1.2 (2023-04-28)\n\n- Python 3.7 to 3.11 compatibility\n- Django 3.2 to 4.2 support\n\n## 1.1 (2018-05-11)\n\n- Added ability to manually set a group id to make an EventGroup object\n  reusable through threads.\n\n## 1.0 (2018-02-13)\n\n- Production ready 1.0 release.\n- The details Admin view now displays all events of the group with an\n  annotated delay, so you can see the progress of the group.\n\n## 0.9 (2018-02-13)\n\n- Initial release.\n- Django 1.8 to 2.0 compatibility.\n- Python 2.7 to 3.6 compatibility.\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "django-eventlog stores event messages in a Django model.",
    "version": "2.2.2",
    "project_urls": {
        "Bugtracker": "https://github.com/bartTC/django-eventlog/issues",
        "Documentation": "https://barttc.github.io/django-eventlog/",
        "Homepage": "https://barttc.github.io/django-eventlog/",
        "Source": "https://github.com/bartTC/django-eventlog"
    },
    "split_keywords": [
        "django",
        " logging",
        " logger",
        " events"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b2758216ba6faf663c1ba17199fa5fa215208e466ba900a4367ef5f68e6edbc0",
                "md5": "f39949f83dc10d5cab662e07698ecf38",
                "sha256": "dece3b62e0be1c03d1ff3b71bb73ae31e443ce3f4e48c0ec79e7a24e9a8abdd9"
            },
            "downloads": -1,
            "filename": "django_eventlog-2.2.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "f39949f83dc10d5cab662e07698ecf38",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<4.0,>=3.8",
            "size": 19295,
            "upload_time": "2024-11-19T08:06:18",
            "upload_time_iso_8601": "2024-11-19T08:06:18.441167Z",
            "url": "https://files.pythonhosted.org/packages/b2/75/8216ba6faf663c1ba17199fa5fa215208e466ba900a4367ef5f68e6edbc0/django_eventlog-2.2.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "fdc4b3fb606e671f6e023d2f9354b19bd0ad2e579cc70e79782afce9c5f56f91",
                "md5": "705c2d6f43ce7fb008289d7ba2bb67f4",
                "sha256": "1dbf22651f1891e20feb77c7a39e078b9ece6b894993c8462e989b0857cde039"
            },
            "downloads": -1,
            "filename": "django_eventlog-2.2.2.tar.gz",
            "has_sig": false,
            "md5_digest": "705c2d6f43ce7fb008289d7ba2bb67f4",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<4.0,>=3.8",
            "size": 16927,
            "upload_time": "2024-11-19T08:06:20",
            "upload_time_iso_8601": "2024-11-19T08:06:20.172549Z",
            "url": "https://files.pythonhosted.org/packages/fd/c4/b3fb606e671f6e023d2f9354b19bd0ad2e579cc70e79782afce9c5f56f91/django_eventlog-2.2.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-11-19 08:06:20",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "bartTC",
    "github_project": "django-eventlog",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "django-eventlog"
}
        
Elapsed time: 2.43549s