Skip to main content

A Django app for common configuration, utilities, and base models.

Project description

django-nublado-core

Common abstract models, utilities, and a simple dictionary-based app settings system for Django projects.

Overview

I found myself copying and pasting the same "core" app containing common abstract models, utilities, and app settings configuration in my Django projects, so I made it a reusable package.

The goal is to provide simple, reliable core building blocks without introducing unnecessary complexity. The package evolves incrementally as needs arise in my projects, and is shared for others who may find it useful.

What’s included

  • Abstract base models for common Django patterns (e.g., timestamps, UUIDs, language).

  • A small utility for typed, dictionary-based application settings using dataclasses.

Installation

Install the package from PyPI.

pip install django-nublado-core

Add the app to your Django project.

INSTALLED_APPS = [
    ...
    "django_nublado_core",
]

The package provides only abstract models and utilities, and does not create database tables or migrations on its own.

Abstract models

These core abstract models provide common fields and related functionality used across multiple models.

TimestampModel

An abstract model that adds automatic timestamp fields for object creation and updates.

from django.db import models

from django_nublado_core.models import TimestampModel


class Article(TimestampModel):
    title = models.CharField(max_length=200)


# Sample usage
article = Article(title="hello there")
article.save()
article.created_at
article.updated_at # refreshed on each save

Notes

  • Uses timezone-aware datetimes.

Fields:

  • created_at
  • updated_at

UUIDModel

An abstract model that generates a UUID for a subclassed model's primary key.

from django.db import models

from django_nublado_core.models import UUIDModel


class User(UUIDModel):
    username = models.CharField(max_length=200)

# Sample usage
user = User(username="Paco")
user.save()
# Primary key is a generated UUID.
user.pk # UUID('eeb4a289-034c-4e4c-9c54-98100cca1ee7')

Notes

  • The generated UUID field is set as the primary key.

LanguageModel

An abstract model that provides a language choices field populated by the project's language settings.

LanguageModel contains an inner LanguageChoices enum derived from settings.LANGUAGES.

from django.db import models

from django_nublado_core.models import LanguageModel


class Article(LanguageModel):
    title = models.CharField(max_length=200)


# Sample usage
article = Article(title="hello there")
article.save()
article.language # "en"

article.LanguageChoices.EN.value # "en"

Notes

  • The default language value is taken from settings.LANGUAGE_CODE.

  • Language values are validated via full_clean(), but are not enforced at the database level by default. This is intentional. Database-level constraints can be added by developers in subclasses if needed.

Application settings

This package provides a small utility for loading typed, dictionary-based application settings using Django settings and Python dataclasses.

To configure settings for an app, define three things in a module (conf.py or app_settings.py for example):

  • The name of the settings dictionary
  • A dictionary of default values
  • A dataclass defining the exposed settings

Defining app settings

from dataclasses import dataclass

from django_nublado_core.conf.base import AppSettings

# The app's settings dict name (defined in Django settings.py)
SETTINGS_DICT_NAME = "YOUR_APP_SETTINGS"

# Default values for all exposed settings
SETTINGS_DEFAULTS = {
    "SETTING_A": "setting A",
}


@dataclass(frozen=True)
class AppData:
    SETTING_A: str


app_settings = AppSettings(
    settings_dict_name=SETTINGS_DICT_NAME,
    defaults=SETTINGS_DEFAULTS,
    cls=AppData,
)

Overriding settings

In your project's settings.py, define a dictionary matching the configured settings name.

YOUR_APP_SETTINGS = {
    "SETTING_A": "custom value",
}

Only keys explicitly declared on the dataclass are loaded. Unknown keys are ignored and logged as warnings.

Usage

The resulting app_settings object provides typed, read-only access to your application settings.

from .config import app_settings

value = app_settings.SETTING_A

Notes

  • All settings must have defaults defined.
  • Settings are loaded and cached at runtime.
  • Unknown user-defined keys are ignored and logged.

Testing

pytest

Notes:

  • Runs all tests for the app.
  • Requires pytest-django.

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_nublado_core-0.4.3.tar.gz (11.0 kB view details)

Uploaded Source

Built Distribution

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

django_nublado_core-0.4.3-py3-none-any.whl (8.3 kB view details)

Uploaded Python 3

File details

Details for the file django_nublado_core-0.4.3.tar.gz.

File metadata

  • Download URL: django_nublado_core-0.4.3.tar.gz
  • Upload date:
  • Size: 11.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.6

File hashes

Hashes for django_nublado_core-0.4.3.tar.gz
Algorithm Hash digest
SHA256 7e011310172c211c860af676fee50fc862dfabbfe711f0604563c5ff126883ad
MD5 4bb57b792181c00162d6be0da7086f59
BLAKE2b-256 8e9daabe19926b88a9937e551b5d4d5bb8ef522e0111e61d241d387f8917f7fd

See more details on using hashes here.

File details

Details for the file django_nublado_core-0.4.3-py3-none-any.whl.

File metadata

File hashes

Hashes for django_nublado_core-0.4.3-py3-none-any.whl
Algorithm Hash digest
SHA256 25e8e3ef0d803f7c8997aa97e59559ebde3ad92929b82fc3ae90b78b16aedb30
MD5 4d222cc4c8c14805a000acfca07bb4fa
BLAKE2b-256 a4d510471947108201fcf0a844208f139bbc4183d2f7bb39d6285650906b09a8

See more details on using hashes here.

Supported by

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