The official Blender Extensions platform. https://extensions.blender.org
Go to file
2024-04-04 08:49:24 +02:00
abuse Abuse Reports: Only allow moderators to view reports 2024-03-11 12:26:30 +01: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 Fix TemplateDoesNotExist that happens during handling of CSRF 2024-04-04 08:49:24 +02:00
common Fix TemplateDoesNotExist that happens during handling of CSRF 2024-04-04 08:49:24 +02:00
constants Report a Review option 2024-03-01 16:24:44 +01:00
emails Add emails app 2024-02-24 00:31:00 +01:00
extensions Manifest: schema_version validator 2024-03-29 19:00:32 +01:00
files Manifest: schema_version validator 2024-03-29 19:00:32 +01:00
playbooks Playbooks: git submodule update as well 2024-02-27 19:21:21 +01:00
public/media Blender Kitsu: Updated manifest 2024-02-02 09:50:05 +01:00
ratings Fix typo in template 2024-03-11 10:59:09 +01:00
releases Releases: Make 4.3 deactive by default 2024-02-18 15:52:16 +01:00
reviewers Approval Queue: Only list awaiting-review to everyone 2024-03-11 15:54:01 +01: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 Ratings: Rename review template and layout adjustments 2024-03-05 14:33:45 +01: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
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
README.md README: Fix markdown 2024-02-12 18:51:28 +01:00
requirements_dev.txt Add Blender ID login and webhook 2022-09-26 18:09:41 +02:00
requirements_prod.txt Separate production-only deps (#16) 2024-02-06 10:29:15 +01:00
requirements.txt Dependencies: fix unintended migrations in blender_id_oauth_client and background_tasks 2024-04-02 17:35:38 +02:00
setup.cfg Initial models, tests and other boilerplate 2022-08-25 17:37:48 +02:00
utils.py Initial models, tests and other boilerplate 2022-08-25 17:37:48 +02:00

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

All the configuration of this web app is done via environment variables (there's only one settings.py regardless of an environment).

Blender Extensions, as all other Blender web services, uses Blender ID. To configure OAuth login, first create a new OAuth2 application in Blender ID with the following settings:

  • Redirect URIs: http://extensions.local:8111/oauth/authorized
  • Client type: "Confidential";
  • Authorization grant type: "Authorization code";
  • Name: "Blender Extensions Dev";

Then 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>

Run the dev server using the following command:

source .env && ./manage.py runserver 8111

Webhook

Blender Extensions can receive account modifications such as badge updates via a webhook, which has to be configured in Blender ID admin separately from the OAuth app.

In Admin Blender-ID API Webhooks click Add Webhook and set the following:

  • Name: "Blender Extensions Dev";
  • URL: http://extensions.local:8111/webhooks/user-modified/;
  • App: choose the app created in the previous step;

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

export BID_WEBHOOK_USER_MODIFIED_SECRET=<WEBHOOK SECRET HERE>

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:

source .env && ./manage.py process_tasks

Blender ID and staging/production

The above steps use local development setup as example. For staging/production the steps are the same, the only differences being the names of the app and the webhook, and http://extensions.local:8111 being replaced with the appropriate base URL.

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.