mirror of
https://github.com/meeb/tubesync.git
synced 2025-06-22 21:16:38 +00:00
Merge pull request #687 from tcely/patch-4
Do not store duplicate categories
This commit is contained in:
commit
9ece0c26e8
@ -1,5 +1,4 @@
|
|||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
from functools import lru_cache
|
|
||||||
from typing import Any, Dict
|
from typing import Any, Dict
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.db import connection, models
|
from django.db import connection, models
|
||||||
@ -143,16 +142,10 @@ class CommaSepChoiceField(models.CharField):
|
|||||||
# **kwargs,
|
# **kwargs,
|
||||||
# })
|
# })
|
||||||
|
|
||||||
@lru_cache(maxsize=10)
|
|
||||||
def from_db_value(self, value, expression, connection):
|
def from_db_value(self, value, expression, connection):
|
||||||
'''
|
'''
|
||||||
Create a data structure to be used in Python code.
|
Create a data structure to be used in Python code.
|
||||||
|
|
||||||
This is called quite often with the same input,
|
|
||||||
because the database value doesn't change often.
|
|
||||||
So, it's being cached to prevent excessive logging.
|
|
||||||
'''
|
'''
|
||||||
self.log.debug(f'fdbv:1: {type(value)} {repr(value)}')
|
|
||||||
if isinstance(value, str) and len(value) > 0:
|
if isinstance(value, str) and len(value) > 0:
|
||||||
value = value.split(self.separator)
|
value = value.split(self.separator)
|
||||||
if not isinstance(value, list):
|
if not isinstance(value, list):
|
||||||
@ -180,7 +173,8 @@ class CommaSepChoiceField(models.CharField):
|
|||||||
return ''
|
return ''
|
||||||
if data.all_choice in value:
|
if data.all_choice in value:
|
||||||
return data.all_choice
|
return data.all_choice
|
||||||
return data.separator.join(value)
|
ordered_unique = list(dict.fromkeys(value))
|
||||||
|
return data.separator.join(ordered_unique)
|
||||||
|
|
||||||
# extra functions not used by any parent classes
|
# extra functions not used by any parent classes
|
||||||
def get_all_choices(self):
|
def get_all_choices(self):
|
||||||
|
@ -172,7 +172,7 @@ class FrontEndTestCase(TestCase):
|
|||||||
response = c.get('/source-add')
|
response = c.get('/source-add')
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
# Create a new source
|
# Create a new source
|
||||||
data_categories = ('sponsor', 'preview',)
|
data_categories = ('sponsor', 'preview', 'preview', 'sponsor',)
|
||||||
expected_categories = ['sponsor', 'preview']
|
expected_categories = ['sponsor', 'preview']
|
||||||
data = {
|
data = {
|
||||||
'source_type': 'c',
|
'source_type': 'c',
|
||||||
@ -223,6 +223,7 @@ class FrontEndTestCase(TestCase):
|
|||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
# save and refresh the Source
|
# save and refresh the Source
|
||||||
source.refresh_from_db()
|
source.refresh_from_db()
|
||||||
|
source.sponsorblock_categories.selected_choices.append('sponsor')
|
||||||
source.save()
|
source.save()
|
||||||
source.refresh_from_db()
|
source.refresh_from_db()
|
||||||
# Check that the SponsorBlock categories remain saved
|
# Check that the SponsorBlock categories remain saved
|
||||||
|
Loading…
Reference in New Issue
Block a user