Skip to content
Snippets Groups Projects

Update dependency pytest to v7 - autoclosed

Closed Tine Wittler requested to merge renovate/pytest-7.x into main
Files
3
 
from typing import Optional
 
from django import forms
from django import forms
from django_forms_as_jsonschema.layout import _Section
from .layout import _Section
class JSONSchema:
class JSONSchema:
 
"""Encapsulation of a JSON form schema."""
def __init__(self):
def __init__(self):
self.schema = {
self.schema = {
@@ -14,6 +17,8 @@ class JSONSchema:
@@ -14,6 +17,8 @@ class JSONSchema:
@staticmethod
@staticmethod
def generate_field(field):
def generate_field(field):
 
"""Generate schema for one form field."""
 
# Defaults for a generic field
new_field = {
new_field = {
"type": "string",
"type": "string",
"title": str(field.label or ""),
"title": str(field.label or ""),
@@ -22,63 +27,43 @@ class JSONSchema:
@@ -22,63 +27,43 @@ class JSONSchema:
"required": field.required,
"required": field.required,
}
}
# string, number, integer, boolean.
# Inspect field and update schema accordingly
if isinstance(field.widget, forms.TextInput):
if type(field.widget) == forms.TextInput:
new_field["type"] = "string"
new_field["type"] = "string"
elif isinstance(field.widget, forms.NumberInput) and isinstance(field, forms.IntegerField):
elif type(field.widget) == forms.NumberInput:
new_field["type"] = "integer"
new_field["type"] = "integer" if type(field) == forms.IntegerField else "number"
elif isinstance(field.widget, forms.NumberInput):
new_field["type"] = "number"
elif type(field.widget) == forms.EmailInput:
elif isinstance(field.widget, forms.EmailInput):
new_field["type"] = "string"
new_field["type"] = "string"
new_field["format"] = "email"
new_field["format"] = "email"
elif isinstance(field.widget, forms.URLInput):
elif type(field.widget) == forms.URLInput:
new_field["type"] = "string"
new_field["type"] = "string"
new_field["format"] = "url"
new_field["format"] = "url"
elif isinstance(field.widget, forms.PasswordInput):
elif type(field.widget) == forms.PasswordInput:
new_field["type"] = "string"
new_field["type"] = "string"
new_field["format"] = "password"
new_field["format"] = "password"
new_field["x-display"] = "password"
new_field["x-display"] = "password"
elif isinstance(field.widget, forms.HiddenInput):
elif type(field.widget) == forms.HiddenInput:
new_field["type"] = "string"
new_field["type"] = "string"
new_field["format"] = "hidden"
new_field["format"] = "hidden"
elif isinstance(field.widget, forms.FileInput):
elif type(field.widget) == forms.MultipleHiddenInput:
new_field["type"] = "string"
...
new_field["contentMediaType"] = "image/*" if isinstance(field, forms.ImageField) else "*"
new_field["writeOnly"] = True
elif type(field.widget) in [forms.FileInput, forms.ClearableFileInput]:
elif isinstance(field.widget, forms.Textarea):
new_field |= {
"type": "string",
"contentMediaType": "image/*" if type(field) == forms.ImageField else "*",
"writeOnly": True
}
# Fixme: differentiate between clearable and non-clearable
# elif type(field.widget) == forms.ClearableFileInput:
# ...
elif type(field.widget) == forms.Textarea:
new_field["x-display"] = "textarea"
new_field["x-display"] = "textarea"
elif isinstance(field.widget, forms.DateInput):
elif type(field.widget) == forms.DateInput:
new_field["type"] = "string"
new_field["type"] = "string"
new_field["format"] = "date"
new_field["format"] = "date"
elif isinstance(field.widget, forms.DateTimeInput):
elif type(field.widget) == forms.DateTimeInput:
new_field["type"] = "string"
new_field["type"] = "string"
new_field["format"] = "date-time"
new_field["format"] = "date-time"
elif isinstance(field.widget, forms.TimeInput):
elif type(field.widget) == forms.TimeInput:
new_field["type"] = "string"
new_field["type"] = "string"
new_field["format"] = "time"
new_field["format"] = "time"
elif isinstance(field.widget, forms.CheckboxInput):
elif type(field.widget) == forms.CheckboxInput:
new_field["type"] = "boolean"
new_field["type"] = "boolean"
elif type(field.widget) in [forms.Select, forms.SelectMultiple, forms.RadioSelect, forms.CheckboxSelectMultiple,
elif type(field.widget) in [forms.Select, forms.SelectMultiple, forms.RadioSelect, forms.CheckboxSelectMultiple,
forms.NullBooleanSelect]:
forms.NullBooleanSelect]:
one_of = []
one_of = []
@@ -95,26 +80,17 @@ class JSONSchema:
@@ -95,26 +80,17 @@ class JSONSchema:
new_field["type"] = "string"
new_field["type"] = "string"
new_field["oneOf"] = one_of
new_field["oneOf"] = one_of
if type(field.widget) == forms.RadioSelect:
if isinstance(field.widget, forms.RadioSelect):
new_field["x-display"] = "radio"
new_field["x-display"] = "radio"
elif type(field.widget) == forms.CheckboxSelectMultiple:
elif isinstance(field.widget, forms.CheckboxSelectMultiple):
new_field["x-display"] = "checkbox"
new_field["x-display"] = "checkbox"
elif type(field.widget) == forms.SplitDateTimeWidget:
...
elif type(field.widget) == forms.SplitHiddenDateTimeWidget:
...
elif type(field.widget) == forms.SelectDateWidget:
...
else:
else:
print("[Django-forms-as-jsonschema] Unsupported field/widget detected: ")
raise TypeError(f"Unsupported field/widget: {repr(field)}, {repr(field.widget)}")
print(f"{field=}, {type(field)=}, {type(field.widget)=}")
return new_field
return new_field
def add_field(self, name, field, metadata: dict = None):
def add_field(self, name, field, metadata: Optional[dict] = None):
 
"""Add a form field to this schema."""
new_field = self.generate_field(field)
new_field = self.generate_field(field)
if metadata and metadata.get("section_name") and self.schema["properties"].get(
if metadata and metadata.get("section_name") and self.schema["properties"].get(
metadata["section_name"]
metadata["section_name"]
@@ -127,6 +103,7 @@ class JSONSchema:
@@ -127,6 +103,7 @@ class JSONSchema:
@staticmethod
@staticmethod
def generate_section(section: _Section):
def generate_section(section: _Section):
 
"""Generate schema for a form section."""
sec = {
sec = {
"title": section.title,
"title": section.title,
"type": "object",
"type": "object",
@@ -139,7 +116,9 @@ class JSONSchema:
@@ -139,7 +116,9 @@ class JSONSchema:
return sec
return sec
def add_section(self, section: _Section):
def add_section(self, section: _Section):
 
"""Add a form section to this schema."""
self.schema["properties"][section.codename] = self.generate_section(section)
self.schema["properties"][section.codename] = self.generate_section(section)
def update_properties(self, props: dict):
def update_properties(self, props: dict):
 
"""Merge new property values into schema properties."""
self.schema["properties"].update(props)
self.schema["properties"].update(props)
Loading