-
Notifications
You must be signed in to change notification settings - Fork 1
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
WIP: Add wtforms #15
Open
cthoyt
wants to merge
10
commits into
scolby33:develop
Choose a base branch
from
cthoyt:add-wtforms
base: develop
Could not load branches
Branch not found: {{ refName }}
Could not load tags
Nothing to show
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
WIP: Add wtforms #15
Changes from 1 commit
Commits
Show all changes
10 commits
Select commit
Hold shift + click to select a range
8373bf3
Add wtforms test
cthoyt 76b39b2
Add chain map
cthoyt ccba949
Improve extensibility
cthoyt ca24a8e
Merge branch 'develop' into fdevelop
cthoyt 3eec972
Got simple elements working with correct defaults
cthoyt 8ac378b
Merge branch 'fdevelop' into add-wtforms
cthoyt 9062ee7
Merge branch 'develop' into add-wtforms
cthoyt 6f7c4a8
Update __init__.py
cthoyt 917ad01
Reorganize code
cthoyt 444b570
Update type annotations
cthoyt File filter
Filter by extension
Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
"""Test the Flask-WTF wrapper.""" | ||
|
||
import dataclasses | ||
from typing import Type | ||
|
||
from easy_config import EasyConfig | ||
from flask_wtf import FlaskForm | ||
from wtforms import BooleanField, IntegerField, StringField | ||
from wtforms.validators import DataRequired | ||
|
||
type_to_field = { | ||
str: StringField, | ||
int: IntegerField, | ||
bool: BooleanField, | ||
} | ||
|
||
|
||
def form_from_config(cls: Type[EasyConfig]): | ||
"""Build a Flask-WTF form based on the given EasyConfig class.""" | ||
attrs = {} | ||
|
||
for field in dataclasses.fields(cls): | ||
field_cls = type_to_field[field.type] | ||
attribute = field_cls(field.name, validators=[DataRequired()]) | ||
if field.default is not dataclasses.MISSING: | ||
attribute.default = field.default | ||
attrs[field.name] = attribute | ||
|
||
return type(f'{cls.NAME}Form', (FlaskForm,), attrs) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
# -*- coding: utf-8 -*- | ||
|
||
"""Test the Flask-WTF wrapper.""" | ||
|
||
import flask | ||
|
||
from easy_config import EasyConfig | ||
from easy_config.contrib.wtforms import form_from_config | ||
|
||
|
||
def test_with_default(): | ||
"""Test building a form.""" | ||
|
||
class ExampleConfig(EasyConfig): | ||
"""Example EasyConfig subclass to test with.""" | ||
|
||
FILES = None | ||
NAME = 'MyProgram' | ||
|
||
bool_1: bool | ||
bool_2: bool = True | ||
bool_3: bool = True | ||
|
||
form_cls = form_from_config(ExampleConfig) | ||
app = flask.Flask('test_app') | ||
|
||
with app.app_context(): | ||
form = form_cls(csrf_enabled=False) | ||
for field in form: | ||
print(field) | ||
|
||
fields = list(form) | ||
assert 1 == len(fields) | ||
field = fields[0] | ||
assert str(field) == '<input id="number" name="number" required type="checkbox" value="y">' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can WTForms only handle these three datatypes?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
it does other things.. this is not anywhere near complete (but at least is a proof-of-concept)