improve input validation

This commit is contained in:
Your Name 2024-07-16 02:28:53 -04:00 committed by Henri Dickson
parent 8778100656
commit 1e24e434e6
7 changed files with 36 additions and 37 deletions

View file

@ -38,6 +38,7 @@ from catalog.common import (
jsondata,
)
from catalog.common.models import (
LIST_OF_ONE_PLUS_STR_SCHEMA,
LOCALE_CHOICES_JSONFORM,
SCRIPT_CHOICES,
LanguageListField,
@ -81,7 +82,7 @@ EDITION_LOCALIZED_TITLE_SCHEMA = {
},
"text": {"type": "string", "title": _("text content")},
},
"required": ["lang", "s"],
"required": ["lang", "text"],
},
"minItems": 1,
"maxItems": 1,
@ -100,7 +101,7 @@ EDITION_LOCALIZED_SUBTITLE_SCHEMA = {
},
"text": {"type": "string", "title": _("text content")},
},
"required": ["lang", "s"],
"required": ["lang", "text"],
},
"minItems": 0,
"maxItems": 1,
@ -154,14 +155,14 @@ class Edition(Item):
# _("subtitle"), null=True, blank=True, default=None, max_length=500
# )
orig_title = jsondata.CharField(
_("original title"), null=True, blank=True, default=None, max_length=500
_("original title"), null=True, blank=True, max_length=500
)
author = jsondata.ArrayField(
author = jsondata.JSONField(
verbose_name=_("author"),
base_field=models.CharField(max_length=500),
null=False,
blank=False,
default=list,
schema=LIST_OF_ONE_PLUS_STR_SCHEMA,
)
translator = jsondata.ArrayField(
verbose_name=_("translator"),
@ -172,7 +173,7 @@ class Edition(Item):
)
language = LanguageListField()
pub_house = jsondata.CharField(
_("publishing house"), null=True, blank=False, default=None, max_length=500
_("publishing house"), null=True, blank=False, max_length=500
)
pub_year = jsondata.IntegerField(
_("publication year"),
@ -186,14 +187,10 @@ class Edition(Item):
blank=True,
validators=[MinValueValidator(1), MaxValueValidator(12)],
)
binding = jsondata.CharField(
_("binding"), null=True, blank=True, default=None, max_length=500
)
binding = jsondata.CharField(_("binding"), null=True, blank=True, max_length=500)
pages = jsondata.IntegerField(_("pages"), blank=True, default=None)
series = jsondata.CharField(
_("series"), null=True, blank=True, default=None, max_length=500
)
contents = jsondata.TextField(_("contents"), null=True, blank=True, default=None)
series = jsondata.CharField(_("series"), null=True, blank=True, max_length=500)
contents = jsondata.TextField(_("contents"), null=True, blank=True)
price = jsondata.CharField(_("price"), null=True, blank=True, max_length=500)
imprint = jsondata.CharField(_("imprint"), null=True, blank=True, max_length=500)

View file

@ -308,7 +308,7 @@ LOCALIZED_TITLE_SCHEMA = {
},
"text": {"type": "string", "title": _("text content")},
},
"required": ["lang", "s"],
"required": ["lang", "text"],
},
"minItems": 1,
"uniqueItems": True,
@ -330,11 +330,18 @@ LOCALIZED_DESCRIPTION_SCHEMA = {
"widget": "textarea",
},
},
"required": ["lang", "s"],
"required": ["lang", "text"],
},
"uniqueItems": True,
}
LIST_OF_ONE_PLUS_STR_SCHEMA = {
"type": "list",
"items": {"type": "string", "required": True},
"minItems": 1,
"uniqueItems": True,
}
def LanguageListField():
return jsondata.ArrayField(

View file

@ -47,7 +47,7 @@ def _EditForm(item_model):
# {'id': 547, 'primary_lookup_id_type': 'imdb', 'primary_lookup_id_value': 'tt0056923', 'cover': <ImageFieldFile: item/tmdb_movie/2024/01/12/10973d2b-1d20-4e37-8c3c-ecc89e671a80.jpg>, 'orig_title': 'Charade', 'other_title': [], 'director': ['Stanley Donen'], 'playwright': ['Peter Stone'], 'actor': ['Cary Grant', 'Audrey Hepburn', 'Walter Matthau', 'James Coburn', 'George Kennedy', 'Dominique Minot', 'Ned Glass', 'Jacques Marin', 'Paul Bonifas', 'Thomas Chelimsky', 'Marc Arian', 'Claudine Berg', 'Marcel Bernier', 'Albert Daumergue', 'Raoul Delfosse', 'Stanley Donen', 'Jean Gold', 'Chantal Goya', 'Clément Harari', 'Monte Landis', 'Bernard Musson', 'Antonio Passalia', 'Jacques Préboist', 'Peter Stone', 'Michel Thomass', 'Roger Trapp', 'Louis Viret'], 'genre': ['喜剧', '悬疑', '爱情'], 'showtime': [{'time': '1963-12-05', 'region': ''}], 'site': '', 'area': [], 'language': ['English', 'Français', 'Deutsch', 'Italiano'], 'year': 1963, 'duration': '', 'localized_title': [], 'localized_description': []}
def migrate_initial(self):
if self.initial and self.instance:
if self.initial and self.instance and self.instance.pk:
if (
"localized_title" in self.Meta.fields
and not self.initial["localized_title"]

View file

@ -65,7 +65,7 @@ class Movie(Item):
# "brief",
]
orig_title = jsondata.CharField(
verbose_name=_("original title"), blank=True, default="", max_length=500
verbose_name=_("original title"), blank=True, max_length=500
)
other_title = jsondata.ArrayField(
verbose_name=_("other title"),
@ -130,9 +130,7 @@ class Movie(Item):
},
},
)
site = jsondata.URLField(
verbose_name=_("website"), blank=True, default="", max_length=200
)
site = jsondata.URLField(verbose_name=_("website"), blank=True, max_length=200)
area = jsondata.ArrayField(
verbose_name=_("region"),
base_field=models.CharField(
@ -146,9 +144,7 @@ class Movie(Item):
)
language = LanguageListField()
year = jsondata.IntegerField(verbose_name=_("year"), null=True, blank=True)
duration = jsondata.CharField(
verbose_name=_("length"), blank=True, default="", max_length=200
)
duration = jsondata.CharField(verbose_name=_("length"), blank=True, max_length=200)
season_number = jsondata.IntegerField(
null=True, blank=True
) # TODO remove after migration

View file

@ -16,6 +16,7 @@ from catalog.common import (
PrimaryLookupIdDescriptor,
jsondata,
)
from catalog.common.models import LIST_OF_ONE_PLUS_STR_SCHEMA
class AlbumInSchema(ItemInSchema):
@ -63,10 +64,12 @@ class Album(Item):
duration = jsondata.IntegerField(
_("length"), null=True, blank=True, help_text=_("milliseconds")
)
artist = jsondata.ArrayField(
models.CharField(blank=True, default="", max_length=200),
artist = jsondata.JSONField(
verbose_name=_("artist"),
null=False,
blank=False,
default=list,
schema=LIST_OF_ONE_PLUS_STR_SCHEMA,
)
genre = jsondata.ArrayField(
verbose_name=pgettext_lazy("music", "genre"),
@ -82,7 +85,7 @@ class Album(Item):
blank=True,
default=list,
)
track_list = jsondata.TextField(_("tracks"), blank=True, default="")
track_list = jsondata.TextField(_("tracks"), blank=True)
other_title = jsondata.ArrayField(
verbose_name=_("other title"),
base_field=models.CharField(blank=True, default="", max_length=200),
@ -90,11 +93,9 @@ class Album(Item):
blank=True,
default=list,
)
album_type = jsondata.CharField(
_("album type"), blank=True, default="", max_length=500
)
media = jsondata.CharField(_("media type"), blank=True, default="", max_length=500)
bandcamp_album_id = jsondata.CharField(blank=True, default="", max_length=500)
album_type = jsondata.CharField(_("album type"), blank=True, max_length=500)
media = jsondata.CharField(_("media type"), blank=True, max_length=500)
bandcamp_album_id = jsondata.CharField(blank=True, max_length=500)
disc_count = jsondata.IntegerField(
_("number of discs"), blank=True, default="", max_length=500
)

View file

@ -109,7 +109,7 @@ class Performance(Item):
category = ItemCategory.Performance
url_path = "performance"
orig_title = jsondata.CharField(
verbose_name=_("original name"), blank=True, default="", max_length=500
verbose_name=_("original name"), blank=True, max_length=500
)
other_title = jsondata.ArrayField(
verbose_name=_("other title"),

View file

@ -135,7 +135,7 @@ class TVShow(Item):
"single_episode_length",
]
orig_title = jsondata.CharField(
verbose_name=_("original title"), blank=True, default="", max_length=500
verbose_name=_("original title"), blank=True, max_length=500
)
other_title = jsondata.ArrayField(
base_field=models.CharField(blank=True, default="", max_length=500),
@ -200,9 +200,7 @@ class TVShow(Item):
},
},
)
site = jsondata.URLField(
verbose_name=_("website"), blank=True, default="", max_length=200
)
site = jsondata.URLField(verbose_name=_("website"), blank=True, max_length=200)
area = jsondata.ArrayField(
verbose_name=_("region"),
base_field=models.CharField(
@ -224,7 +222,7 @@ class TVShow(Item):
null=True, blank=True
) # TODO remove after migration
duration = jsondata.CharField(
blank=True, default="", max_length=200
blank=True, max_length=200
) # TODO remove after migration
@classmethod