Allow predefined tags on nodes
Whenever a node has a 'tags' property of type 'list' it will be handled as if it has {'allowed': app.config['NODE_TAGS']} in the node type definition.
This commit is contained in:
parent
eb851ce6e1
commit
f54e56bad8
@ -1,9 +1,10 @@
|
|||||||
|
import functools
|
||||||
import logging
|
import logging
|
||||||
|
import typing
|
||||||
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from datetime import date
|
from datetime import date
|
||||||
import pillarsdk
|
import pillarsdk
|
||||||
from flask import current_app
|
|
||||||
from flask_wtf import FlaskForm
|
from flask_wtf import FlaskForm
|
||||||
from wtforms import StringField
|
from wtforms import StringField
|
||||||
from wtforms import DateField
|
from wtforms import DateField
|
||||||
@ -17,6 +18,8 @@ from wtforms import DateTimeField
|
|||||||
from wtforms import SelectMultipleField
|
from wtforms import SelectMultipleField
|
||||||
from wtforms import FieldList
|
from wtforms import FieldList
|
||||||
from wtforms.validators import DataRequired
|
from wtforms.validators import DataRequired
|
||||||
|
|
||||||
|
from pillar import current_app
|
||||||
from pillar.web.utils import system_util
|
from pillar.web.utils import system_util
|
||||||
from pillar.web.utils.forms import FileSelectField
|
from pillar.web.utils.forms import FileSelectField
|
||||||
from pillar.web.utils.forms import CustomFormField
|
from pillar.web.utils.forms import CustomFormField
|
||||||
@ -44,6 +47,13 @@ def iter_node_properties(node_type):
|
|||||||
yield prop_name, prop_schema, prop_fschema
|
yield prop_name, prop_schema, prop_fschema
|
||||||
|
|
||||||
|
|
||||||
|
@functools.lru_cache(maxsize=1)
|
||||||
|
def tag_choices() -> typing.List[typing.Tuple[str, str]]:
|
||||||
|
"""Return (value, label) tuples for the NODE_TAGS config setting."""
|
||||||
|
tags = current_app.config.get('NODE_TAGS') or []
|
||||||
|
return [(tag, tag.title()) for tag in tags] # (value, label) tuples
|
||||||
|
|
||||||
|
|
||||||
def add_form_properties(form_class, node_type):
|
def add_form_properties(form_class, node_type):
|
||||||
"""Add fields to a form based on the node and form schema provided.
|
"""Add fields to a form based on the node and form schema provided.
|
||||||
:type node_schema: dict
|
:type node_schema: dict
|
||||||
@ -60,7 +70,9 @@ def add_form_properties(form_class, node_type):
|
|||||||
# Recursive call if detects a dict
|
# Recursive call if detects a dict
|
||||||
field_type = schema_prop['type']
|
field_type = schema_prop['type']
|
||||||
|
|
||||||
if field_type == 'dict':
|
if prop_name == 'tags' and field_type == 'list':
|
||||||
|
field = SelectMultipleField(choices=tag_choices())
|
||||||
|
elif field_type == 'dict':
|
||||||
assert prop_name == 'attachments'
|
assert prop_name == 'attachments'
|
||||||
field = attachments.attachment_form_group_create(schema_prop)
|
field = attachments.attachment_form_group_create(schema_prop)
|
||||||
elif field_type == 'list':
|
elif field_type == 'list':
|
||||||
|
Loading…
x
Reference in New Issue
Block a user