Skip to content

Additional Extension Points in FormBuilder and FormFieldStreamBlock #160

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 49 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
46b4856
Some new extension points
rgs258 Sep 12, 2020
1acf5be
Extension point for create_field_class and some comments
rgs258 Sep 14, 2020
9068bb0
Encapsulates the field_name creation such that there is a method to o…
rgs258 Oct 16, 2020
e893e7d
Undo AbstractFormOut - no longer needed
rgs258 Nov 18, 2020
2104faf
Merge branch 'master' into wrds_forms_work
rgs258 Nov 18, 2020
8f45527
Documentation Improvements
rgs258 Nov 19, 2020
5cb1022
Upgrade to wagtail 2.12 and fix a bug
rgs258 Mar 16, 2021
6527012
Merge remote-tracking branch 'remotes/gasman/wagtail-2.12-compat' int…
rgs258 Mar 18, 2021
9a11923
Wagtail 2.13
rgs258 May 19, 2021
969aeaa
Merge remote-tracking branch 'remotes/origin/master' into wrds_forms_…
rgs258 May 26, 2021
3384f7c
Allow instantiate_block method to return None in order to cause a blo…
rgs258 May 26, 2021
1468b9c
Merge remote-tracking branch 'remotes/origin/master' into wrds_forms_…
rgs258 Jan 7, 2022
533b347
Merge pull request #5 from FlipperPA/upgrade/wagtail-2.15
rgs258 Jan 7, 2022
2ba72d1
Merge branch 'labd:master' into wrds_forms_work
rgs258 Mar 16, 2022
f7a0493
Merge branch 'wagtail_216' into wrds_forms_work
rgs258 Mar 16, 2022
940e4ff
Merge remote-tracking branch 'remotes/origin/master' into wrds_forms_…
rgs258 May 10, 2022
4ab78fe
Merge branch 'labd:master' into wrds_forms_work
rgs258 May 11, 2022
401ecd0
clean(lint): remove unused import
Sep 23, 2022
2d011a2
fix(ci): enable testing for WT 3 and 4
Sep 23, 2022
d6339a5
fix(example app): Have example app work, issues w/ outdated db and un…
Sep 23, 2022
8eca002
fix(deps) allow installing w/ version 3.0.3 of WT
Sep 23, 2022
a6beb22
Merge branch 'labd:master' into wrds_forms_work
rgs258 Oct 18, 2022
820dab7
Merge pull request #8 from TonisPiip/wagtail-3
rgs258 Oct 18, 2022
d07911d
going after wagtail4
rgs258 Oct 19, 2022
883fc2b
Require Wagtail 3 or higher for package path changes
rgs258 Oct 25, 2022
66d8402
Removes StreamFieldPanel and adds use_json_field=True to instantiatio…
rgs258 Oct 25, 2022
0bdc091
allow wagtail 4.1
rgs258 Nov 14, 2022
e7a0df0
Merge branch 'master' into wrds_forms_work
rgs258 Apr 4, 2023
e1214f2
Adds get_local_blocks to allow for overriding the local_blocks to be …
rgs258 Dec 19, 2023
9117bbb
Merge branch 'master' into wrds_forms_work
rgs258 Dec 19, 2023
bfb9542
Adds yet another extension point, `get_form_block_class`, to allow th…
rgs258 Jan 5, 2024
f132758
Adjusts wagtailstreamforms/wagtailstreamforms_fields.py to use new se…
rgs258 Jan 31, 2024
891b666
Adds yet another override point: `get_form_block_kwargs`.
rgs258 Jan 31, 2024
170a947
Compatible Wagtail 6.0.1, Django 5.0.2
rense Feb 29, 2024
cb61586
Fix example project
rense Feb 29, 2024
9e95dfd
github workflows
rense Feb 29, 2024
688f47a
Merge pull request #9 from ammohq/master
rgs258 Sep 17, 2024
8e6e4be
Merge branch 'master' into wrds_forms_work
rgs258 Sep 17, 2024
2d5054a
Undo removal of use_json_field=True
rgs258 Sep 17, 2024
575549d
wt6.3
rense Nov 14, 2024
d1a1132
workflow
rense Nov 14, 2024
58c476e
no coverage files
rense Nov 14, 2024
96e69f2
remove generic_chooser
rense Nov 14, 2024
e74e576
icon name
rense Nov 14, 2024
576d549
trying to improve pyproject.toml
rgs258 Jan 29, 2025
ece0806
convert to a hatch project - why not?
rgs258 Jan 29, 2025
313a06e
Merge pull request #10 from ammohq/wt6.3
rgs258 Mar 17, 2025
43f75fc
Merge branch 'master' into wrds_forms_work
rgs258 Mar 17, 2025
84477fc
Update wagtailstreamforms dependency requirements for Wagtail 6 compa…
rgs258 Mar 25, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/nightly-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,10 @@ jobs:

steps:
- uses: actions/checkout@v2
- name: Set up Python 3.8
- name: Set up Python 3.12
uses: actions/setup-python@v1
with:
python-version: 3.8
python-version: 3.12
- name: Install dependencies
run: |
python -m pip install --upgrade pip
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/python-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python 3.8
- name: Set up Python 3.12
uses: actions/setup-python@v1
with:
python-version: 3.8
python-version: 3.12
- name: Install build requirements
run: python -m pip install wheel
- name: Build package
Expand Down
63 changes: 12 additions & 51 deletions .github/workflows/python-test.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
---
name: Python Tests

on: [push]
Expand All @@ -7,13 +6,15 @@ jobs:
format:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python 3.8
uses: actions/setup-python@v1
- uses: actions/checkout@v3
- name: Set up Python 3.12
uses: actions/setup-python@v4
with:
python-version: 3.8
python-version: "3.12"
- name: Install dependencies
run: pip install tox
run: |
python -m pip install --upgrade pip
pip install tox
- name: Validate formatting
run: tox -e format

Expand All @@ -22,58 +23,18 @@ jobs:
strategy:
max-parallel: 4
matrix:
python-version: ["3.12"]
tox_env:
- py311-dj41-wt41
- py311-dj41-wt50
- py311-dj41-wt51
- py311-dj41-wt52
include:
- python-version: "3.11"
tox_env: py311-dj41-wt41
- python-version: "3.11"
tox_env: py311-dj41-wt50
- python-version: "3.11"
tox_env: py311-dj41-wt51
- python-version: "3.11"
tox_env: py311-dj41-wt52

- py312-dj51-wt63
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v1
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install tox tox-gh-actions
- name: Test with tox
- name: Run tests with tox
run: tox -e ${{ matrix.tox_env }} -- index-url=https://pypi.python.org/simple/
- name: Prepare artifacts
run: mkdir -p .coverage-data && mv .coverage.* .coverage-data/
- uses: actions/upload-artifact@master
with:
name: coverage-data
path: .coverage-data/

coverage:
runs-on: ubuntu-latest
needs: [test]
steps:
- uses: actions/checkout@v2
- uses: actions/download-artifact@master
with:
name: coverage-data
path: .
- name: Set up Python 3.8
uses: actions/setup-python@v1
with:
python-version: 3.8
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install tox
- name: Prepare Coverage report
run: tox -e coverage-report
- name: Upload to codecov
uses: codecov/[email protected]
2 changes: 1 addition & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ services:
ports:
- 8000:8000
db:
image: postgres:9.6
image: postgres:11
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=password
Expand Down
6 changes: 3 additions & 3 deletions example/migrations/0001_initial.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

from django.db import migrations, models
import django.db.models.deletion
import wagtail.core.blocks
import wagtail.core.fields
import wagtail.blocks
import wagtail.fields
import wagtailstreamforms.blocks


Expand All @@ -20,7 +20,7 @@ class Migration(migrations.Migration):
name='BasicPage',
fields=[
('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.Page')),
('body', wagtail.core.fields.StreamField((('rich_text', wagtail.core.blocks.RichTextBlock()), ('form', wagtail.core.blocks.StructBlock((('form', wagtailstreamforms.blocks.FormChooserBlock()), ('form_action', wagtail.core.blocks.CharBlock(help_text='The form post action. "" or "." for the current page or a url', required=False)), ('form_reference', wagtailstreamforms.blocks.InfoBlock(help_text='This form will be given a unique reference once saved', required=False)))))))),
('body', wagtail.fields.StreamField((('rich_text', wagtail.blocks.RichTextBlock()), ('form', wagtail.blocks.StructBlock((('form', wagtailstreamforms.blocks.FormChooserBlock()), ('form_action', wagtail.blocks.CharBlock(help_text='The form post action. "" or "." for the current page or a url', required=False)), ('form_reference', wagtailstreamforms.blocks.InfoBlock(help_text='This form will be given a unique reference once saved', required=False)))))))),
],
options={
'abstract': False,
Expand Down
4 changes: 2 additions & 2 deletions example/models.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from django.db import models

from wagtail.admin.panels import StreamFieldPanel
from wagtail import blocks
from wagtail.admin.panels import FieldPanel
from wagtail.fields import StreamField
from wagtail.models import Page
from wagtailstreamforms.blocks import WagtailFormBlock
Expand All @@ -23,5 +23,5 @@ class BasicPage(Page):
show_in_menus_default = True

content_panels = Page.content_panels + [
StreamFieldPanel('body'),
FieldPanel('body'),
]
24 changes: 12 additions & 12 deletions example/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

# Security

SECRET_KEY = environ.get('SECRET_KEY', '')
SECRET_KEY = environ.get('SECRET_KEY', 's3cr3t')

DEBUG = True

Expand Down Expand Up @@ -37,12 +37,11 @@
'wagtail.search',
'wagtail.contrib.redirects',
'wagtail.sites',
'wagtail.contrib.modeladmin',
'wagtail.contrib.postgres_search',
'wagtail_modeladmin',
'wagtail.contrib.settings',
'wagtail.contrib.search_promotions',

'captcha',
'django_recaptcha',
'taggit',

# app specific
Expand Down Expand Up @@ -90,14 +89,14 @@
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'HOST': environ.get('RDS_HOSTNAME'),
'PORT': environ.get('RDS_PORT'),
'NAME': environ.get('RDS_DB_NAME'),
'USER': environ.get('RDS_USERNAME'),
'PASSWORD': environ.get('RDS_PASSWORD'),
'HOST': environ.get('DB_HOSTNAME'),
'PORT': environ.get('DB_PORT'),
'NAME': environ.get('DB_NAME'),
'USER': environ.get('DB_USERNAME'),
'PASSWORD': environ.get('DB_PASSWORD'),
}
}

DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'

# Email

Expand Down Expand Up @@ -143,7 +142,7 @@
# Wagtail

WAGTAIL_SITE_NAME = 'example.com'

WAGTAILADMIN_BASE_URL = "/"

# Forms

Expand All @@ -156,4 +155,5 @@
RECAPTCHA_PUBLIC_KEY = '6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI'
RECAPTCHA_PRIVATE_KEY = '6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe'
NOCAPTCHA = True
SILENCED_SYSTEM_CHECKS = ['captcha.recaptcha_test_key_error']
SILENCED_SYSTEM_CHECKS = ['django_recaptcha.recaptcha_test_key_error']

49 changes: 38 additions & 11 deletions example/wagtailstreamforms_fields.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from django import forms
from django.contrib.auth.models import User
from django_recaptcha.fields import ReCaptchaField

from captcha.fields import ReCaptchaField
from wagtail import blocks
from wagtailstreamforms.fields import BaseField, register

Expand All @@ -19,11 +19,26 @@ def get_options(self, block_value):
})
return options

def get_form_block_class(self):
return blocks.StructBlock

def get_local_blocks(self):
return [
("label", blocks.CharBlock()),
("help_text", blocks.CharBlock(required=False)),
]

def get_form_block_kwargs(self):
return {
"icon": self.icon,
"label": self.label,
}

def get_form_block(self):
return blocks.StructBlock([
('label', blocks.CharBlock()),
('help_text', blocks.CharBlock(required=False)),
], icon=self.icon, label=self.label)
return self.get_form_block_class()(
self.get_local_blocks(),
**self.get_form_block_kwargs(),
)


@register('regex_validated')
Expand All @@ -45,15 +60,21 @@ def get_regex_choices(self):
('^[a-zA-Z0-9]+$', 'Letters and numbers only'),
)

def get_form_block(self):
return blocks.StructBlock([
def get_local_blocks(self):
return [
('label', blocks.CharBlock()),
('help_text', blocks.CharBlock(required=False)),
('required', blocks.BooleanBlock(required=False)),
('regex', blocks.ChoiceBlock(choices=self.get_regex_choices())),
('error_message', blocks.CharBlock()),
('default_value', blocks.CharBlock(required=False)),
], icon=self.icon, label=self.label)
]

def get_form_block(self):
return self.get_form_block_class()(
self.get_local_blocks(),
**self.get_form_block_kwargs()
)


@register('user')
Expand All @@ -71,9 +92,15 @@ def get_options(self, block_value):
options.update({'queryset': self.get_queryset()})
return options

def get_form_block(self):
return blocks.StructBlock([
def get_local_blocks(self):
return [
('label', blocks.CharBlock()),
('help_text', blocks.CharBlock(required=False)),
('required', blocks.BooleanBlock(required=False)),
], icon=self.icon, label=self.label)
]

def get_form_block(self):
return self.get_form_block_class()(
self.get_local_blocks(),
**self.get_form_block_kwargs()
)
73 changes: 72 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,77 @@
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[project]
name = "wagtailstreamforms"
dynamic = ["version"]
description = "Wagtail forms in a streamfield"
readme = "README.rst"
license = "MIT"
authors = [
{ name = "Stuart George", email = "[email protected]" },
]
keywords = [
"accent",
"design",
"forms",
"streamfield",
"wagtail",
]
classifiers = [
"Development Status :: 5 - Production/Stable",
"Framework :: Django",
"Framework :: Django :: 5.0",
"Framework :: Wagtail",
"Framework :: Wagtail :: 5",
"Framework :: Wagtail :: 6",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Internet :: WWW/HTTP :: Site Management",
]
dependencies = [
"Unidecode>=0.04.14,<2.0",
"wagtail-modeladmin",
"wagtail>6.0,<=6.3",
]

[project.optional-dependencies]
docs = [
"karma_sphinx_theme>=0.0.6",
"sphinx-autobuild>=0.6.0",
"Sphinx>=1.5.2",
"sphinxcontrib-spelling>=2.3.0",
]
test = [
"flake8-blind-except==0.1.1",
"flake8-debugger==3.1.0",
"flake8==3.7.9",
"isort[pyproject]==4.3.21",
"mock==4.0.2",
"pytest-django==4.7.0",
"pytest==7.3.2",
]

[project.urls]
Download = "https://pypi.python.org/pypi/wagtailstreamforms"
Homepage = "https://github.com/AccentDesign/wagtailstreamforms/"

[tool.hatch.version]
path = "wagtailstreamforms/__init__.py"

[tool.hatch.build.targets.sdist]
include = [
"/wagtailstreamforms",
]

[tool.black]
line-length=99
target-version=["py39"]
target-version=["py312"]
exclude = '''
/(
\.git
Expand Down
2 changes: 1 addition & 1 deletion readthedocs.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
python:
version: 3.5
version: 3.12
pip_install: true
requirements_file: docs/requirements.txt
Loading