Skip to main content

Django Quotas


A robust, extensible quotas and plan management library for Django applications. This package provides a flexible framework for defining, assigning, and tracking quotas (limits) for users, accounts, or any custom entity in your Django project.

Features

  • Strictly typed, modular codebase with clear separation between core logic, database implementations, and utilities
  • Abstract base classes and DTOs for easy extension
  • Default and database-specific implementations provided
  • Supports hourly, daily, monthly, and total quota buckets
  • Pluggable quota models and account models via Django settings
  • Utilities for dynamic model/class loading
  • Designed for integration with Django 5.x and Python 3.11/3.12

Installation

pip install django-quotas

Or, if using Poetry:

poetry add django-quotas

Quickstart

  1. Add to INSTALLED_APPS (to use standard Quota model and database storage backend):

    INSTALLED_APPS = [
        # ...
        'django_quotas',
        'django_quotas.defaults',
        'django_quotas.backends.db'
    ]
    
  2. Configure (optional): You can override default models and table prefixes in your Django settings:

    DJANGO_QUOTAS_TABLE_PREFIX = 'myquotas'  # default: 'django_quotas'
    DJANGO_QUOTAS_QUOTA_MODEL_NAME = 'myapp.MyQuotaModel'  # default: 'django_quotas.defaults.QuotaModel'
    DJANGO_QUOTAS_QUOTA_RELATED_ACCOUNT_MODEL_NAME = 'auth.User'  # or your custom user/account model
    
  3. Run migrations:

    python manage.py migrate
    
  4. Assign quotas: Use the provided models or extend them to assign quotas to users/accounts.

Configuration

All configuration is done via Django settings. See src/django_quotas/config.py for all available options.

  • DJANGO_QUOTAS_TABLE_PREFIX: Prefix for all quota-related tables.
  • DJANGO_QUOTAS_QUOTA_MODEL_NAME: Dotted path to the quota model.
  • DJANGO_QUOTAS_RELATED_ACCOUNT_MODEL: Dotted path to the related account/user model.

API Overview

Core Data Structures

  • QuotaBucket: Enum for supported buckets (hourly, daily, monthly, total)
  • ValuePerBucket: Dataclass holding quota values for each bucket
  • QuotaStatus, QuotaStats, QuotaUseForBucket, Quota, QuotaUsage: DTOs for quota management

Abstract Service

  • QuotaService: Abstract base class for quota management logic
  • QuotaExceededError: Exception raised when a quota is exceeded

Models

  • BaseQuotaModel: Abstract base model for quotas
  • DefaultQuotaModel: Default implementation for quota assignment
  • QuotaUsageModel: Tracks quota usage per account/feature/time

Utilities

  • get_model_by_name(model_name: str): Load a Django model by dotted name
  • get_class_by_name(dotted_path: str): Import a class by dotted path
  • datetime_now(): Get current UTC datetime

Extending & Customization

  • Custom Quota Models: Inherit from BaseQuotaModel and register via settings.
  • Custom Account Models: Set DJANGO_QUOTAS_RELATED_ACCOUNT_MODEL to your user/account model.
  • Custom Quota Logic: Implement your own QuotaService subclass.

Contributing

Contributions are welcome! If you have ideas or find bugs, feel free to open an issue or submit a pull request.

Please:

  • Follow PEP8 and project code style (see .github/copilot-instructions.md)
  • Use type hints and docstrings (PEP257)
  • Run make setup and make before submitting a PR
  • Add unit tests for new features or bugfixes

Credits

  • Dmitry Berezovsky (@corvis) - Author and maintainer

License

Django Quotas is licensed under the MIT License. See LICENSE for more details.


For more details, see the source code in src/django_quotas/ and the included docstrings.

Download files

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

Source Distribution

django_quotas-1.0.0.tar.gz (14.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_quotas-1.0.0-py3-none-any.whl (20.7 kB view details)

Uploaded Python 3

File details

Details for the file django_quotas-1.0.0.tar.gz.

File metadata

  • Download URL: django_quotas-1.0.0.tar.gz
  • Upload date:
  • Size: 14.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.8

File hashes

Hashes for django_quotas-1.0.0.tar.gz
Algorithm Hash digest
SHA256 11701d6d6733686a278dc02fe51c1b04c475bb649d259b07f66e6928d364914e
MD5 92df8a0a2fdc2dbc0b1c46dc1fc0bb0b
BLAKE2b-256 a32f41886354c85359f77fb746b4f66db4dfff2c3f8f1087cb03cb9293bcf853

See more details on using hashes here.

File details

Details for the file django_quotas-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: django_quotas-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 20.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.8

File hashes

Hashes for django_quotas-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 30b8d12a92129d670d6e435a8b7c6c9825a239d8b4b38b56bb51007d4b200b94
MD5 b7eb02b18ab6f9c353b97533291c12f7
BLAKE2b-256 43727640a26d9803d68d7d448244f865b029d5481231662daa20c8ed3780b06c

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 files

0.0.1

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page