0
0
The official Blender Extensions platform.
Go to file
2024-06-24 15:43:36 +02:00
.gitea/issue_template Gitea: Fix templates 2024-05-29 16:03:54 +02:00
abuse Abuse reports: moderator form for resolving/dismissing + notification (#173) 2024-06-07 17:04:52 +02:00
access Initial models, tests and other boilerplate 2022-08-25 17:37:48 +02:00
apitokens Profile: Add page titles 2024-05-29 15:59:09 +02:00
assets_shared@493bc70fd4 Fix: Update git submodule assets_shared to v2.0.0-alpha.25 2024-06-19 10:56:14 +02:00
blender_extensions API Tokens (#134) 2024-05-27 12:53:29 +02:00
common Fix: Template base default_og_image path root url 2024-06-24 15:43:36 +02:00
constants Extension model: add blocklisted status 2024-06-14 16:11:43 +02:00
emails Abuse reports: moderator form for resolving/dismissing + notification (#173) 2024-06-07 17:04:52 +02:00
extensions Feat: Add Open Graph image placeholder and improve image_url conditionals 2024-06-24 12:51:59 +02:00
files Manifest: support [build.generated] produced by --split-platforms 2024-06-21 13:05:00 +02:00
notifications Abuse reports: moderator form for resolving/dismissing + notification (#173) 2024-06-07 17:04:52 +02:00
playbooks Playbooks: fix typo that prevented deletion requests from being handled 2024-06-05 13:39:39 +02:00
public/media Partial Revert "Feat: Add Open Graph image placeholder and improve image_url conditionals" 2024-06-24 15:14:53 +02:00
ratings Refactor Extension and Version: explicit constructors from File (#191) 2024-06-20 14:40:39 +02:00
releases Releases: Make 4.3 deactive by default 2024-02-18 15:52:16 +01:00
reviewers Version: drop file field, use files instead (#193) 2024-06-21 11:29:21 +02:00
stats Refactor Extension and Version: explicit constructors from File (#191) 2024-06-20 14:40:39 +02:00
teams Profile: Add page titles 2024-05-29 15:59:09 +02:00
users Version: drop file field, use files instead (#193) 2024-06-21 11:29:21 +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 Git: ignore DS_Store files 2024-05-29 16:01:20 +02:00
.gitmodules UI: Web Assets v2 upgrade (#85) 2024-04-30 17:57:31 +02: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
AUTHORS Add license and authors 2024-06-03 17:17:43 +02:00
deploy.sh Make deploy.sh support extra arguments --check --diff 2024-02-29 18:14:52 +01:00
LICENSE Add license and authors 2024-06-03 17:17:43 +02: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 Docs: point to deploy section of playbooks 2024-06-18 18:27:00 +02:00
requirements_dev.txt Revert "Deps: install faker and factory in prod too (used in the admin)" 2024-05-02 14:18:08 +02:00
requirements_prod.txt Replace gunicorn with uwsgi, use persistent db connections (#90) 2024-04-25 15:11:07 +02:00
requirements.txt Deps: use version tag of django-background-tasks 2024-06-05 13:53:11 +02:00
setup.cfg PEP: flake8 no longer supports inline comments in setup.cfg 2024-04-04 12:04:44 +02:00
utils.py Basic email template for notifications (#96) 2024-05-02 14:04:22 +02:00

Blender Extensions

Free and open source add-ons and themes for Blender.

Requirements

  • Python 3.10
  • libmagic: sudo apt-get install libmagic1 in Debian/Ubuntu, brew install libmagic on OSX.

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.

License and Copyright

The platform source code is available under the GPLv3 or later. Early versions of the platform are inspired by Mozilla Addons Server. List of authors is available in the AUTHORS file.