This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (pypi.python.org).
Help us improve Python packaging - Donate today!

App Settings for Django

Project Description

Note

For the latest source, discussions, etc., please visit the GitHub repository

Django Pods

Django Pods is a minimalist package that lets you configure default settings for your reusable apps, and allows developers using your apps to override these defaults in their own project settings.

This package is largely inspired by Django Rest Framework and Django AllAuth and adapted to work with Django Applications, but also with any classes extending pods.apps.AppSettings.

Preview

Django Pods allows developers to customise app settings in two ways:

  1. Dictionary style (as per Django Rest Framework):

    YOUR_APP = {
        "SETTING": "VALUE"
    }
    
  2. Prefix style:

    YOUR_APP_SETTING = "VALUE"
    

Installation

pip install django-pods

Usage in Reusable Apps

  1. Add django-pods to the install_requires of your setup.py:

    setup(
        name="rock_n_roll",
        install_requires=["django-pods", ...],
        ...
    )
    
  2. Add the AppSettings mixin to your AppConfig implementation in rock_n_roll/apps.py:

    from django.apps import AppConfig
    from pods.apps import AppSettings
    
    
    class RockNRollConfig(AppSettings, AppConfig):
        name = 'rock_n_roll'
        verbose_name = "Rock ’n’ roll"
    
        # Path to app settings module
        settings_module = "rock_n_roll.app_settings"
    
        # Optional
        settings_imports = ("CLASS_TO_IMPORT",)
    
        # Optional
        # defaults to the capitalized class name, e.g. ROCK_N_ROLL_CONFIG
        settings_key = "ROCK_N_ROLL"
    
  3. Declare your default app settings in rock_n_roll/app_settings.py:

    QUESTION = "What is your favourite band?"
    ANSWER = "The Rolling Stones"
    CLASS_TO_IMPORT = "path.to.ClassToImport"
    
  4. Access your settings anywhere in your package:

    from django.apps import apps
    
    app = apps.get_app_config('rock_n_roll')
    
    app.QUESTION
    # What is your favourite band?
    
    app.ANSWER
    # The Beatles
    
    app.CLASS_TO_IMPORT
    # <class 'path.to.ClassToImport'>
    

Settings can also be accessed directly via the class:

from rock_n_roll.apps import RockNRollConfig


RockNRollConfig.QUESTION
RockNRollConfig.ANSWER
RockNRollConfig.CLASS_TO_IMPORT

Note

AppSettings “settings“ Property

AppSettings implements __getattr__ to proxy to the settings attributes of the class:

app.QUESTION == app.settings.QUESTION

# or

RockNRollConfig.QUESTION == RockNRollConfig.settings.QUESTION

Note

Usage with Django < 1.7

Prior to Django 1.7, there wasn’t a logical place to create a class representing an app. However, any class can extend AppSettings. For example, in models.py:

from pods.apps import AppSettings


class AnyClass(AppSettings):
    settings_module = "rock_n_roll.app_settings"

Import your app class directly:

from .models import AnyClass

AnyClass.QUESTION

Usage in Projects

  1. Install the app that uses Django Pods:

    pip install rock_n_roll
    
  2. Add the app to the INSTALLED_APPS of your project/settings.py:

    INSTALLED_APPS = (
        ...
        "rock_n_roll",
        ...
    )
    
  3. Override the app’s settings as needed:

    # Dictionary style
    ROCK_N_ROLL = {
        "ANSWER": "The Beatles",
    }
    
    
    # Prefix style
    ROCK_N_ROLL_ANSWER = "The Beatles"
    

Running Tests

tox

Contributions

All contributions and comments are welcome.

Change Log

v1.1.2

  • Django 1.8 support

v1.1.1

  • Switch to Semantic Versioning
  • Fix issue with parse_requirements for newer versions of pip (>=6.0.0)
  • Fix typo in AppSettingsMeta

v1.1

  • Exclude tests and docs from the build

v1.0

  • Add support for prefix style overrides
  • Documentation changes

v0.4

  • Fix bug with default settings_key not set correctly if none given

v0.3

  • Unit tests now use Django 1.7 final and support Django 1.6 and 1.5
  • Fix PyPI classifiers for supported python versions

v0.2

  • Fix compatibility with Django 1.6

v0.1

  • Initial
Release History

Release History

This version
History Node

1.1.2

History Node

1.1.1

History Node

1.1

History Node

1.0

History Node

0.4

History Node

0.3

History Node

0.2

History Node

0.1

Download Files

Download Files

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

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
django_pods-1.1.2-py2.py3-none-any.whl (7.4 kB) Copy SHA256 Checksum SHA256 py2.py3 Wheel Mar 6, 2015
django-pods-1.1.2.tar.gz (6.4 kB) Copy SHA256 Checksum SHA256 Source Mar 6, 2015

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting