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.1.tar.gz (11.7 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.1-py3-none-any.whl (8.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: django_nublado_core-0.4.1.tar.gz
  • Upload date:
  • Size: 11.7 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.1.tar.gz
Algorithm Hash digest
SHA256 25f2824a8fb29a88cd02681807a5d727804c73515f480661cab6cd7578ab6c1f
MD5 62e1fbcb569a41361818993739be4d16
BLAKE2b-256 452eb4497867b39537e7b56eeaa0691d02c7ad94bf3f8b43c230fcea0cc59463

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for django_nublado_core-0.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 305e908602688cec053f2d6f036c6607d34298e4f5a2ed7c233bb6fdd90f2492
MD5 52299472778e04a13144adf31a54a676
BLAKE2b-256 604ef670546a646bdedbbb7180c37d751d7d046fbd751992f356b7d239ee4193

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