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 (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.

ValidatedSaveModel

An abstract model that provides an explicit helper to validate a subclassed object before saving it, without overriding the model's save method and inadvertently messing something up.

This is especially useful in cases where you want to ensure model validation is applied outside of Django forms.

from django.db import models

from django_nublado_core.models import ValidatedSaveModel


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


# Sample usage
article = Article(title="hello there")
# full_clean and save
article.validate_and_save()

Notes

  • Calls full_clean() before saving.
  • Does not override Django’s save() method.
  • Useful for explicit validation outside of forms when saving.

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 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.
  • The resulting settings object is immutable.

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.0.tar.gz (12.6 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.0-py3-none-any.whl (9.4 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for django_nublado_core-0.4.0.tar.gz
Algorithm Hash digest
SHA256 0ed20fb898600871560c37d51896411417438521b5f6ab67121d757b5f1fcc21
MD5 9de7d90e0f13b926aa711f0d68f5750f
BLAKE2b-256 f581375eb98ba89083d9ae0b7667e65efc2757123ab4b30421db890f7fe9f8db

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for django_nublado_core-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8bdfd2136d2fe4d74cc490f7cdd74da9758a2aa0f5611c8b673d96f738d97400
MD5 ec12b1e3ec61a7eaa9e391d55ada1599
BLAKE2b-256 1f3d82c780d4d4058229d4f321caf8ac61de82703ce9395607c4c0496ae799a6

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