improve input validation
This commit is contained in:
parent
8778100656
commit
1e24e434e6
7 changed files with 36 additions and 37 deletions
|
@ -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)
|
||||
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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"]
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
)
|
||||
|
|
|
@ -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"),
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue