BaseApp
Project description
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:
# Install baseapp-backend's testproject dependencies
pip3 install -r testproject/requirements.txt
# Change folder to your app's testproject:
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:
pip install -e baseapp-backend
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/testsdirectory - In the testproject dir:
- Change the settings.py file to enable your app
- Add your app to the
INSTALLED_APPSlist
- Add your app to the
- If your app needs a new dependency, add it to the "extras_require" of the main
setup.cfg.- Change
testproject/requirements.txtto include your new dependency from your "extras_require" usingpip install -e .[your_extra]
- Change
- Change the settings.py file to enable your app
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
- choose to create a new tag (named as
Project details
Release history Release notifications | RSS feed
0.0.44 yanked
Reason this release was yanked:
bad version attribute when using setuptools_scm v9.2.0
0.0.43 yanked
Reason this release was yanked:
bad version attribute when using setuptools_scm v9.2.0
0.0.42 yanked
Reason this release was yanked:
bad version attribute when using setuptools_scm v9.2.0
0.0.41 yanked
Reason this release was yanked:
bad version attribute when using setuptools_scm v9.2.0
0.0.40 yanked
Reason this release was yanked:
bad version attribute when using setuptools_scm v9.2.0
0.0.39 yanked
Reason this release was yanked:
bad version attribute when using setuptools_scm v9.2.0
0.0.38 yanked
Reason this release was yanked:
bad version attribute when using setuptools_scm v9.2.0
0.0.37 yanked
Reason this release was yanked:
bad version attribute when using setuptools_scm v9.2.0
0.0.36 yanked
Reason this release was yanked:
bad version attribute when using setuptools_scm v9.2.0
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file baseapp_backend-0.0.49.tar.gz.
File metadata
- Download URL: baseapp_backend-0.0.49.tar.gz
- Upload date:
- Size: 523.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ce4cac9bf0983677791258048948e18f3efea2f2b4838de48c37468fffc0562b
|
|
| MD5 |
828ec5bacf065b6f5aa571804481cb73
|
|
| BLAKE2b-256 |
c04058501ddbbdb175a6aaf484b8e74c1f15beed80177ff15b91ee26d9a33880
|