Blender Extensions platform
Go to file
Anna Sirota 1f07de4ea9 Files: add WebP MIME-type
Ubuntu 22.04 and earlier don't have WebP in `/etc/mime.types`,
which makes .webp invalid from the point of view of file upload forms.
This should ensure that WebP can actually be uploaded regardless of distro
the app is running on.
2024-04-26 13:34:30 +02:00
abuse Log deleted extension data (#84) 2024-04-19 16:25:49 +02:00
access Initial models, tests and other boilerplate 2022-08-25 17:37:48 +02:00
assets_shared@9d428a82a5 Update web-assets 2024-03-11 16:50:52 +01:00
blender_extensions Thumbnails: flag toggling validation requirement 2024-04-26 11:50:55 +02:00
common Record changes: better way to compare object states 2024-04-23 18:38:41 +02:00
constants Thumbnails for images and videos (#87) 2024-04-25 17:50:56 +02:00
emails Add emails app 2024-02-24 00:31:00 +01:00
extensions HomeView: cache template fragments 2024-04-26 12:03:10 +02:00
files Files: add WebP MIME-type 2024-04-26 13:34:30 +02:00
notifications Notifications: remove @blender.org email restriction (#72) 2024-04-22 10:41:27 +02:00
playbooks Playbooks: add ffmpeg package 2024-04-25 18:29:01 +02:00
public/media Blender Kitsu: Updated manifest 2024-02-02 09:50:05 +01:00
ratings Log deleted extension data (#84) 2024-04-19 16:25:49 +02:00
releases Releases: Make 4.3 deactive by default 2024-02-18 15:52:16 +01:00
reviewers Thumbnails for images and videos (#87) 2024-04-25 17:50:56 +02:00
stats Tags: Make tags dependent on type, and remove taggit 2024-02-29 15:52:47 +01:00
teams Admin: Improve Teams admin 2024-03-05 19:05:47 +01:00
users Fix "TypeError fromisoformat" on sign in without confirmed email 2024-04-26 10:46:50 +02:00
.eslintignore Initial models, tests and other boilerplate 2022-08-25 17:37:48 +02:00
.eslintrc.js Initial models, tests and other boilerplate 2022-08-25 17:37:48 +02:00
.gitignore Playbooks: prepare production 2022-11-03 14:58:52 +01:00
.gitmodules Fix .gitmodules (remove git://) 2023-12-14 18:16:19 +01:00
.pre-commit-config.yaml Revert "Run API schema update as part of the pre-commit hook" 2024-02-20 19:25:56 +01:00
README.md Docs: update notes on Blender ID webhook 2024-04-04 11:32:48 +02:00
deploy.sh Make deploy.sh support extra arguments --check --diff 2024-02-29 18:14:52 +01:00
logo-source.svg Initial models, tests and other boilerplate 2022-08-25 17:37:48 +02:00
manage.py Initial models, tests and other boilerplate 2022-08-25 17:37:48 +02:00
pyproject.toml Initial models, tests and other boilerplate 2022-08-25 17:37:48 +02:00
requirements.txt Thumbnails for images and videos (#87) 2024-04-25 17:50:56 +02:00
requirements_dev.txt Add tblib to support --parallel test runner 2024-04-19 16:07:13 +02:00
requirements_prod.txt Replace gunicorn with uwsgi, use persistent db connections (#90) 2024-04-25 15:11:07 +02:00
setup.cfg PEP: flake8 no longer supports inline comments in setup.cfg 2024-04-04 12:04:44 +02:00
utils.py Move absolutify to utils, don't use tempatetags from models 2024-04-19 15:07:58 +02:00

README.md

blender-extensions-logo

Blender Extensions

Blender Extensions platform, heavily inspired by Mozilla's https://github.com/mozilla/addons-server.

Requirements

  • Python 3.10

Development

Extra requirements

  • virtualenv

Setup

Checkout Blender Web Assets submodule first:

git submodule update --init --recursive

Create and activate a virtual environment using your favourite method, e.g.

virtualenv .venv -p python
source .venv/bin/activate

Install required packages:

pip install -r requirements_dev.txt

Create the database tables and load some basic data to work with using the following commands:

./manage.py migrate
./manage.py loaddata **/fixtures/*.json

It's also possible to generate fake add-on data using the following command:

./manage.py generate_fake_data

Run development server

./manage.py runserver 8111

Update /etc/hosts to point to extensions.local, e.g.:

127.0.0.1	extensions.local

Now http://extensions.local:8111 should be ready to work with and it should be possible to log into http://extensions.local:8111/admin/ with admin/admin.

Blender ID

Blender Extensions, as all other Blender web services, uses Blender ID. Blender Extensions can also receive Blender ID account modifications such as badge updates via a webhook.

For development, Blender ID's code contains a fixture with an OAuth app and a webhook that should work without any changes to default configuration. To load this fixture, go to your development Blender ID and run the following:

./manage.py loaddata blender_extensions_devserver

N.B.: the webhook view delegates the actual updating of the user profile to a background task, so in order to see the updates locally, start the processing of tasks using the following:

./manage.py process_tasks

Blender ID and staging/production

For staging/production, create an OAuth2 application in Blender ID using Admin Blender-ID OAuth2 applications -> Add:

  • Redirect URIs: https://staging.extensions.blender.org/oauth/authorized (https://extensions.blender.org for production);
  • Client type: "Confidential";
  • Authorization grant type: "Authorization code";
  • Name: "Blender Extensions Staging" (or "Blender Extensions" for production);

Copy client ID and secret and save them as BID_OAUTH_CLIENT and BID_OAUTH_SECRET into a .env file:

export BID_OAUTH_CLIENT=<CLIENT ID HERE>
export BID_OAUTH_SECRET=<SECRET HERE>

Create a webhook using Admin Blender-ID API Webhooks > Add:

  • Name: "Blender Extensions Staging" (or "Blender Extensions" for production)";
  • URL: https://staging.extensions.blender.org/webhooks/user-modified/ (or https://extensions.blender.org/webhooks/user-modified/ for production);
  • App: choose the app created in the previous step;

Copy webhook's secret into the .env file as BID_WEBHOOK_USER_MODIFIED_SECRET:

export BID_WEBHOOK_USER_MODIFIED_SECRET=<WEBHOOK SECRET HERE>

Pre-commit hooks

Make sure to enable pre-commit hooks after installing requirements from requirements_dev.txt:

pre-commit install

This will enable formatting pre-commit checks for Django templates, Python and JS modules.

Testing

To simply run the test suit use

./manage.py test

To run tests and generate a coverage report use

coverage run manage.py test && coverage html

and then open htmlcov/index.html with your favourite browser.

Deploy

See playbooks.

Feature Flags

At the moment there are the following feature flags:

  • is_alpha
  • is_beta

To create them run

./manage.py waffle_switch --create is_alpha on

./manage.py waffle_switch --create is_beta off

They can optionally be setup on the deployment platform to set the release stage of the site. These settings will be removed once the site is officially launched.