Skip to main content

BaseApp Backend

This repository contains baseapp django packages to be reused accross projects based on TSL's BaseApp

baseapp-core

The core contains the basics for BaseApp like Django Rest Framework's basic setup, custom ModelSerializer and fields, also base email template, testing helpers and other utilities. It also contains the base GraphQL setup, check baseapp_core/graphql for more info.

baseapp-auth

Reusable user and authentication utilities. Authentication setup using AuthToken, JWT and Multi-factor authentication (MFA)

baseapp-referrals

Models and utilities for user referrals

baseapp-cloudflare-stream-field

Integration with Cloudflare Stream for file streaming

baseapp-drf-view-action-permissions

This app uses django provided permission and group model and provides the ability to add roles to a django model, and make views from the django-restframework check for them. A Permission represents the lowest single unit of access. A Group is a collection of Permissions. A Role can have many Permission Groups, many Permissions and many Excluded Permissions. The access of a Role is the aggregation of its single Permissions + the permissions on its Permission Groups - its Excluded Permissions.

baseapp-e2e

Utilities for performing E2E (End-To-End) tests with front-end client. (Database initialization and seeding)

baseapp-message-templates

baseapp-notifications

Reusable app to handle in-app, email and push notifications.

baseapp-payments

Utilities for payments

baseapp-reactions

Reusable app to enable User's reactions on any model, features like like/dislike or any other reactions type, customizable for project's needs.

baseapp-reports

App to allow users to report other user generated content.

baseapp-blocks

Let a Profile block another Profile.

baseapp-ratings

Rate from 0 to N on any model. With support for average ratings.

baseapp-social-auth

Login/signup using social networks (Facebook, Google and others)

baseapp-url-shortening

Functionality for url shortening

baseapp-follows

Reusable app to enable any model follow/unfollow any model.

baseapp-pages

Reusable app to handle pages, URL's paths and metadata. It provides useful models and GraphQL Interfaces.

baseapp-wagtail

Wagtail CMS integration with BaseApp

baseapp-comments

Comment threads on any model. With support for reactions, notifications and GraphQL subscriptions.

baseapp-organizations

Reusable app to handle organizations. Users can have and manage multiple Organizations.

baseapp-chats

Real-time chat between users, and groups of users.

baseapp-profiles

This app provides user profile management functionalities, allowing users to create, update, and manage their profiles. Allowing the user to manage multiple profiles and act as a profile when commenting, posting, etc.

baseapp.activity_log

Reusable app to handle activity logs.

baseapp.content_feed

Reusable app to handle content feeds.

baseapp-pdf

Functionality for pdf files

baseapp-api-key

Functionality for API keys

How to develop

Each module of baseapp-backend is being tested inside the testproject/ directory, which can be run as a standalone Django app to test. Then in baseapp-backend directory:

# Bring up docker containers
docker compose up -d --wait

# Enter db container
docker compose exec db bash

# Create 'backend' database
psql -U postgres -c 'create database backend;'

# Exit db container
exit

# Enter backend docker container
docker compose exec backend bash

If you're switching between projects and you want to wipe the DB you can do

psql -U postgres -c 'drop database backend;'
psql -U postgres -c 'create database backend;'

Run testproject inside the backend docker container:

uv run python manage.py runserver 0.0.0.0:8000

How to develop with a specific project

Clone the repository inside your project's backend dir:

git clone git@github.com:silverlogic/baseapp-backend.git

And manually install the package:

cd baseapp-backend && uv sync --all-extras
# Or: pip install -e baseapp-backend  # pip still works

The -e flag will make it like any change you make in the cloned files will effect into the project, even with django's auto reload.

Getting auto complete to work

Currently there's an issue with Pylance where it can't properly detect package installed in the editable mode with pip (eg. pip install -e ./baseapp-core)

To get around this, I've read online that adding --config-settings editable_mode=strict to each line of an editable install will work, but I did not find that to be the case on my machine, instead I would recommend explicitly adding the package directories to the path for pylance

To do this, assuming you've opened the folder at the root of the repo, just add to your .vscode/settings.json file this

"python.analysis.extraPaths": [
    "./baseapp-auth",
    "./baseapp-blocks",
    "./baseapp-chats",
    "./baseapp-cloudflare-stream-field",
    "./baseapp-comments",
    "./baseapp-content-feed",
    "./baseapp-core",
    "./baseapp-drf-view-action-permissions",
    "./baseapp-e2e",
    "./baseapp-follows",
    "./baseapp-message-templates",
    "./baseapp-notifications",
    "./baseapp-pages",
    "./baseapp-payments",
    "./baseapp-profiles",
    "./baseapp-ratings",
    "./baseapp-reactions",
    "./baseapp-reports",
    "./baseapp-social-auth",
    "./baseapp-url-shortening",
]

Testing

Running unit tests:

docker compose exec backend pytest baseapp_APPNAME/tests

Implementation

The packages follow this structure for testing:

baseapp/
    manage.py
    testproject/
        settings.py
    baseapp_APPNAME/
        tests/

Minimum requires

  • All app tests in baseapp_APPNAME/tests directory
  • In the testproject dir:
    • Change the settings.py file to enable your app
      • Add your app to the INSTALLED_APPS list
    • If your app needs a new dependency, add it to [project.optional-dependencies] in pyproject.toml.
      • Use uv add --optional your_extra package-name or add to the appropriate extra in pyproject.toml.

Publishing baseapp-backend package to pypi registry

To publish a new version to pypi you need to:

  • make sure that builds pass
  • create a release on github
    • choose to create a new tag (named as baseapp@v<version> e.g. baseapp@v1.2.3)
    • use the same name for release title
    • optionally add changelog text

Metadata

Release files for baseapp-backend 0.0.52

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for baseapp-backend 0.0.52
File Size Uploaded Provenance
baseapp_backend-0.0.52.tar.gz 778.0 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for baseapp-backend 0.0.52
File Interpreter ABI Platform
baseapp_backend-0.0.52-py3-none-any.whl Python 3 none any Details

Total release size: 1.6 MB

Release files / baseapp_backend-0.0.52.tar.gz

Download URL baseapp_backend-0.0.52.tar.gz
Size 778.0 kB
Tags Source
SHA-256 checksum
How to use checksums
7fe8cb4a9c263c400edb9131c7dbdc880f51ae7e14edab5e25e269767e6f41d7
BLAKE2b-256 checksum
How to use checksums
ef82a54c360695831a9c382421795a6f25b4347434ede62547835ff1009de288
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.7

Release files / baseapp_backend-0.0.52-py3-none-any.whl

Download URL baseapp_backend-0.0.52-py3-none-any.whl
Size 834.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2d68003dd4717110d6edd6021ae6b66f3a5736bb14db72bcac5b9fd8e0778cae
BLAKE2b-256 checksum
How to use checksums
497f14889f6aca3ec73a4242d81620294555e86dac82eeb07b6353be3db77917
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.7

Security for baseapp-backend 0.0.52

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.0.52 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page