Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
D
django-forms-as-jsonschema
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Monitor
Service Desk
Analyze
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
AlekSIS®
Libraries
django-forms-as-jsonschema
Compare revisions
05e59efa29ef950c0635628aec58dd21fe805f08 to 1ba1d2c867175c239b57128c0c7a83fd3dc5bb55
Compare revisions
Changes are shown as if the
source
revision was being merged into the
target
revision.
Learn more about comparing revisions.
Source
AlekSIS/libs/django-forms-as-jsonschema
Select target project
No results found
1ba1d2c867175c239b57128c0c7a83fd3dc5bb55
Select Git revision
Swap
Target
AlekSIS/libs/django-forms-as-jsonschema
Select target project
AlekSIS/libs/django-forms-as-jsonschema
1 result
05e59efa29ef950c0635628aec58dd21fe805f08
Select Git revision
Show changes
Only incoming changes from source
Include changes to target since source was created
Compare
Commits on Source (2)
Allow Python 3.9
· 0e53b338
Julian
authored
2 years ago
0e53b338
Allow empty label and help text
· 1ba1d2c8
Julian
authored
2 years ago
1ba1d2c8
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
django_forms_as_jsonschema/jsonschema.py
+83
-80
83 additions, 80 deletions
django_forms_as_jsonschema/jsonschema.py
pyproject.toml
+1
-1
1 addition, 1 deletion
pyproject.toml
with
84 additions
and
81 deletions
django_forms_as_jsonschema/jsonschema.py
View file @
1ba1d2c8
...
@@ -69,96 +69,99 @@ class JSONSchema:
...
@@ -69,96 +69,99 @@ class JSONSchema:
def
add_field
(
self
,
name
,
field
):
def
add_field
(
self
,
name
,
field
):
new_field
=
{
new_field
=
{
"
type
"
:
"
string
"
,
"
type
"
:
"
string
"
,
"
title
"
:
str
(
field
.
label
),
"
title
"
:
str
(
field
.
label
or
""
),
"
description
"
:
str
(
field
.
help_text
),
"
description
"
:
str
(
field
.
help_text
or
""
),
"
readOnly
"
:
field
.
disabled
"
readOnly
"
:
field
.
disabled
}
}
# string, number, integer, boolean.
# string, number, integer, boolean.
match
type
(
field
.
widget
):
if
type
(
field
.
widget
)
==
forms
.
TextInput
:
case
forms
.
TextInput
:
new_field
[
"
type
"
]
=
"
string
"
elif
type
(
field
.
widget
)
==
forms
.
NumberInput
:
new_field
[
"
type
"
]
=
"
integer
"
if
type
(
field
)
==
forms
.
IntegerField
else
"
number
"
elif
type
(
field
.
widget
)
==
forms
.
EmailInput
:
new_field
[
"
type
"
]
=
"
string
"
new_field
[
"
format
"
]
=
"
email
"
elif
type
(
field
.
widget
)
==
forms
.
URLInput
:
new_field
[
"
type
"
]
=
"
string
"
new_field
[
"
format
"
]
=
"
url
"
elif
type
(
field
.
widget
)
==
forms
.
PasswordInput
:
new_field
[
"
type
"
]
=
"
string
"
new_field
[
"
format
"
]
=
"
password
"
new_field
[
"
x-display
"
]
=
"
password
"
elif
type
(
field
.
widget
)
==
forms
.
HiddenInput
:
new_field
[
"
type
"
]
=
"
string
"
new_field
[
"
format
"
]
=
"
hidden
"
elif
type
(
field
.
widget
)
==
forms
.
MultipleHiddenInput
:
...
elif
type
(
field
.
widget
)
in
[
forms
.
FileInput
,
forms
.
ClearableFileInput
]:
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
"
elif
type
(
field
.
widget
)
==
forms
.
DateInput
:
new_field
[
"
type
"
]
=
"
string
"
new_field
[
"
format
"
]
=
"
date
"
elif
type
(
field
.
widget
)
==
forms
.
DateTimeInput
:
new_field
[
"
type
"
]
=
"
string
"
new_field
[
"
format
"
]
=
"
date-time
"
elif
type
(
field
.
widget
)
==
forms
.
TimeInput
:
new_field
[
"
type
"
]
=
"
string
"
new_field
[
"
format
"
]
=
"
time
"
elif
type
(
field
.
widget
)
==
forms
.
CheckboxInput
:
new_field
[
"
type
"
]
=
"
boolean
"
elif
type
(
field
.
widget
)
in
[
forms
.
Select
,
forms
.
SelectMultiple
,
forms
.
RadioSelect
,
forms
.
CheckboxSelectMultiple
,
forms
.
NullBooleanSelect
]:
one_of
=
[]
for
const
,
title
in
field
.
widget
.
choices
:
one_of
.
append
(
dict
(
const
=
str
(
const
),
title
=
str
(
title
)))
if
field
.
widget
.
allow_multiple_selected
:
new_field
[
"
type
"
]
=
"
array
"
new_field
[
"
items
"
]
=
{
"
type
"
:
"
string
"
,
"
oneOf
"
:
one_of
}
else
:
new_field
[
"
type
"
]
=
"
string
"
new_field
[
"
type
"
]
=
"
string
"
new_field
[
"
oneOf
"
]
=
one_of
case
forms
.
NumberInput
:
if
type
(
field
.
widget
)
==
forms
.
RadioSelect
:
new_field
[
"
type
"
]
=
"
integer
"
if
type
(
field
)
==
forms
.
IntegerField
else
"
number
"
new_field
[
"
x-display
"
]
=
"
radio
"
elif
type
(
field
.
widget
)
==
forms
.
CheckboxSelectMultiple
:
new_field
[
"
x-display
"
]
=
"
checkbox
"
case
forms
.
EmailInput
:
elif
type
(
field
.
widget
)
==
forms
.
SplitDateTimeWidget
:
new_field
[
"
type
"
]
=
"
string
"
...
new_field
[
"
format
"
]
=
"
email
"
case
forms
.
URLInput
:
new_field
[
"
type
"
]
=
"
string
"
new_field
[
"
format
"
]
=
"
url
"
case
forms
.
PasswordInput
:
new_field
[
"
type
"
]
=
"
string
"
new_field
[
"
format
"
]
=
"
password
"
new_field
[
"
x-display
"
]
=
"
password
"
case
forms
.
HiddenInput
:
new_field
[
"
type
"
]
=
"
string
"
new_field
[
"
format
"
]
=
"
hidden
"
case
forms
.
MultipleHiddenInpu
t
:
elif
type
(
field
.
widget
)
==
forms
.
SplitHiddenDateTimeWidge
t
:
...
...
case
forms
.
FileInput
|
forms
.
ClearableFileInput
:
elif
type
(
field
.
widget
)
==
forms
.
SelectDateWidget
:
new_field
|=
{
...
"
type
"
:
"
string
"
,
"
contentMediaType
"
:
"
image/*
"
if
type
(
field
)
==
forms
.
ImageField
else
"
*
"
,
"
writeOnly
"
:
True
}
# Fixme: differentiate between clearable and non-clearable
else
:
# case forms.ClearableFileInput:
print
(
field
,
type
(
field
),
type
(
field
.
widget
))
# ...
case
forms
.
Textarea
:
new_field
[
"
x-display
"
]
=
"
textarea
"
case
forms
.
DateInput
:
new_field
[
"
type
"
]
=
"
string
"
new_field
[
"
format
"
]
=
"
date
"
case
forms
.
DateTimeInput
:
new_field
[
"
type
"
]
=
"
string
"
new_field
[
"
format
"
]
=
"
date-time
"
case
forms
.
TimeInput
:
new_field
[
"
type
"
]
=
"
string
"
new_field
[
"
format
"
]
=
"
time
"
case
forms
.
CheckboxInput
:
new_field
[
"
type
"
]
=
"
boolean
"
case
forms
.
Select
|
forms
.
SelectMultiple
|
forms
.
RadioSelect
|
forms
.
CheckboxSelectMultiple
,
forms
.
NullBooleanSelect
:
one_of
=
[]
for
const
,
title
in
field
.
widget
.
choices
:
one_of
.
append
(
dict
(
const
=
str
(
const
),
title
=
str
(
title
)))
if
field
.
widget
.
allow_multiple_selected
:
new_field
[
"
type
"
]
=
"
array
"
new_field
[
"
items
"
]
=
{
"
type
"
:
"
string
"
,
"
oneOf
"
:
one_of
}
else
:
new_field
[
"
type
"
]
=
"
string
"
new_field
[
"
oneOf
"
]
=
one_of
if
type
(
field
.
widget
)
==
forms
.
RadioSelect
:
new_field
[
"
x-display
"
]
=
"
radio
"
elif
type
(
field
.
widget
)
==
forms
.
CheckboxSelectMultiple
:
new_field
[
"
x-display
"
]
=
"
checkbox
"
case
forms
.
SplitDateTimeWidget
:
...
case
forms
.
SplitHiddenDateTimeWidget
:
...
case
forms
.
SelectDateWidget
:
...
self
.
schema
[
"
properties
"
][
name
]
=
new_field
self
.
schema
[
"
properties
"
][
name
]
=
new_field
This diff is collapsed.
Click to expand it.
pyproject.toml
View file @
1ba1d2c8
...
@@ -5,7 +5,7 @@ description = ""
...
@@ -5,7 +5,7 @@ description = ""
authors
=
[
"Julian Leucker <leuckerj@gmail.com>"
]
authors
=
[
"Julian Leucker <leuckerj@gmail.com>"
]
[tool.poetry.dependencies]
[tool.poetry.dependencies]
python
=
"^3.
10
"
python
=
"^3.
9
"
Django
=
"^4.1"
Django
=
"^4.1"
[tool.poetry.dev-dependencies]
[tool.poetry.dev-dependencies]
...
...
This diff is collapsed.
Click to expand it.