Skip to main content

django object tracking

Project description

django-handleref

PyPI PyPI Tests LGTM Grade Codecov

track when an object was created or changed and allow querying based on time and versioning (w/ django-reversion support)

HandleRefModel as a base for all your models

from django.db import models
from django_handleref.models import HandleRefModel

class Test(HandleRefModel):
    name = models.CharField(max_length=255)

Querying for modification since

It is now possible for you to see which instances of a model have been created or modified since a specific time or version

import time

# create instance
test = Test.objects.create(name="This is a test")

# keep track of time, we need this later
t = time.time()

# modifying and saving it
test.name = "Changed my mind"
test.save()

# now we can use the handleref manager to retrieve it
Test.handleref.since(timestamp=t).count() # 1
Test.handleref.since(timestamp=time.time().count() #0

Soft delete

By default all models extending HandleRefModel will softdelete when their delete() method is called. Note that this currently wont work for batch deletes - as this does not call the delete() method.

test = Test.objects.get(id=1)
test.delete()

# querying handleref undeleted will not contain the deleted object
Test.handleref.undeleted().filter(id=1).count() #0

# querying handleref since will not contain the deleted object
Test.handleref.since(timestamp=t).filter(id=1).count() #0

# passing deleted=True to handleref since will contain the deleted object
Test.handleref.since(timestamp=t, deleted=True).filter(id=1).count() #1

# querying using the standard objects manager will contain the deleted object
Test.objects.filter(id=1).count() #1

# You may also still hard-delete by passing hard=True to delete
test.delete(hard=True)
Test.objects.filter(id=1).count() #0

Versioning (with django-reversion)

Requires

django-reversion==1.8.7

When django-reversion is installed all your HandleRefModels will be valid for versioning.

import reversion

with reversion.create_revision():
    obj = Test.objects.create(name="This is a test")
    obj.save()

    obj.version #1

    obj.name = "Changed my mind"
    obj.save()

    obj.version #2

Test.handleref.since(version=1).count() #1

License

Copyright 2015-2021 20C, LLC

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this softare except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

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-handleref-1.0.2.tar.gz (19.8 kB view details)

Uploaded Source

Built Distribution

django_handleref-1.0.2-py3-none-any.whl (27.6 kB view details)

Uploaded Python 3

File details

Details for the file django-handleref-1.0.2.tar.gz.

File metadata

  • Download URL: django-handleref-1.0.2.tar.gz
  • Upload date:
  • Size: 19.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.3 pkginfo/1.7.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.0

File hashes

Hashes for django-handleref-1.0.2.tar.gz
Algorithm Hash digest
SHA256 7e23d4697cece9b85d081aee4cff69c12273da0bb9f9c1dbcc5480064c825e31
MD5 c25e76c3ea79d812bc1fe542ad2a629d
BLAKE2b-256 b46ee2abc0beb583c3a81f9e37b75f4b214a410b5b80042967bd95915dcafb7c

See more details on using hashes here.

File details

Details for the file django_handleref-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: django_handleref-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 27.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.3 pkginfo/1.7.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.0

File hashes

Hashes for django_handleref-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 c6128fcf7e1863d5135e319947fcc8f113bb7a20026341fa5f106cb25ce93055
MD5 0c85add1d13e39e4d128f5c251760e16
BLAKE2b-256 ab9ed4790f911e28a77d0cca37f8cc693a79644acb5ff3af52499d5b6bbf577f

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