Add JSONEncoder for all iterable objects

This commit is contained in:
tcely 2025-04-11 05:50:04 -04:00 committed by GitHub
parent 26dc67503d
commit 9bf84efb16
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -11,6 +11,7 @@ from django.conf import settings
from django.db import models from django.db import models
from django.core.exceptions import SuspiciousOperation from django.core.exceptions import SuspiciousOperation
from django.core.files.storage import FileSystemStorage from django.core.files.storage import FileSystemStorage
from django.core.serializers.json import DjangoJSONEncoder
from django.core.validators import RegexValidator from django.core.validators import RegexValidator
from django.utils.text import slugify from django.utils.text import slugify
from django.utils import timezone from django.utils import timezone
@ -35,6 +36,20 @@ from .choices import (Val, CapChoices, Fallback, FileExtension,
media_file_storage = FileSystemStorage(location=str(settings.DOWNLOAD_ROOT), base_url='/media-data/') media_file_storage = FileSystemStorage(location=str(settings.DOWNLOAD_ROOT), base_url='/media-data/')
_srctype_dict = lambda n: dict(zip( YouTube_SourceType.values, (n,) * len(YouTube_SourceType.values) )) _srctype_dict = lambda n: dict(zip( YouTube_SourceType.values, (n,) * len(YouTube_SourceType.values) ))
class JSONEncoder(DjangoJSONEncoder):
item_separator = ','
key_separator = ':'
def default(self, obj):
try:
iterable = iter(obj)
except TypeError:
pass
else:
return list(iterable)
return super().default(obj)
class Source(models.Model): class Source(models.Model):
''' '''
A Source is a source of media. Currently, this is either a YouTube channel A Source is a source of media. Currently, this is either a YouTube channel
@ -1747,6 +1762,7 @@ class Metadata(models.Model):
) )
value = models.JSONField( value = models.JSONField(
_('value'), _('value'),
encoder=JSONEncoder,
null=False, null=False,
default=dict, default=dict,
help_text=_('JSON metadata object'), help_text=_('JSON metadata object'),
@ -1812,6 +1828,7 @@ class MetadataFormat(models.Model):
) )
value = models.JSONField( value = models.JSONField(
_('value'), _('value'),
encoder=JSONEncoder,
null=False, null=False,
default=dict, default=dict,
help_text=_('JSON metadata format object'), help_text=_('JSON metadata format object'),