mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-04-02 13:45:10 -05:00
removed slugs entirely, since their only purpose was purely cosmetic anyway.
This commit is contained in:
parent
5753c83618
commit
74a99cf330
@ -17,8 +17,6 @@ class CorrespondentAdmin(admin.ModelAdmin):
|
|||||||
list_filter = ("matching_algorithm",)
|
list_filter = ("matching_algorithm",)
|
||||||
list_editable = ("match", "matching_algorithm")
|
list_editable = ("match", "matching_algorithm")
|
||||||
|
|
||||||
readonly_fields = ("slug",)
|
|
||||||
|
|
||||||
|
|
||||||
class TagAdmin(admin.ModelAdmin):
|
class TagAdmin(admin.ModelAdmin):
|
||||||
|
|
||||||
@ -31,8 +29,6 @@ class TagAdmin(admin.ModelAdmin):
|
|||||||
list_filter = ("colour", "matching_algorithm")
|
list_filter = ("colour", "matching_algorithm")
|
||||||
list_editable = ("colour", "match", "matching_algorithm")
|
list_editable = ("colour", "match", "matching_algorithm")
|
||||||
|
|
||||||
readonly_fields = ("slug", )
|
|
||||||
|
|
||||||
|
|
||||||
class DocumentTypeAdmin(admin.ModelAdmin):
|
class DocumentTypeAdmin(admin.ModelAdmin):
|
||||||
|
|
||||||
@ -44,8 +40,6 @@ class DocumentTypeAdmin(admin.ModelAdmin):
|
|||||||
list_filter = ("matching_algorithm",)
|
list_filter = ("matching_algorithm",)
|
||||||
list_editable = ("match", "matching_algorithm")
|
list_editable = ("match", "matching_algorithm")
|
||||||
|
|
||||||
readonly_fields = ("slug",)
|
|
||||||
|
|
||||||
|
|
||||||
class DocumentAdmin(admin.ModelAdmin):
|
class DocumentAdmin(admin.ModelAdmin):
|
||||||
|
|
||||||
@ -106,7 +100,7 @@ class DocumentAdmin(admin.ModelAdmin):
|
|||||||
for tag in obj.tags.all():
|
for tag in obj.tags.all():
|
||||||
r += self._html_tag(
|
r += self._html_tag(
|
||||||
"span",
|
"span",
|
||||||
tag.slug + ", "
|
tag.name + ", "
|
||||||
)
|
)
|
||||||
return r
|
return r
|
||||||
|
|
||||||
|
@ -259,7 +259,7 @@ class Consumer(LoggingMixin):
|
|||||||
|
|
||||||
relevant_tags = set(file_info.tags)
|
relevant_tags = set(file_info.tags)
|
||||||
if relevant_tags:
|
if relevant_tags:
|
||||||
tag_names = ", ".join([t.slug for t in relevant_tags])
|
tag_names = ", ".join([t.name for t in relevant_tags])
|
||||||
self.log("debug", "Tagging with {}".format(tag_names))
|
self.log("debug", "Tagging with {}".format(tag_names))
|
||||||
document.tags.add(*relevant_tags)
|
document.tags.add(*relevant_tags)
|
||||||
|
|
||||||
|
@ -29,10 +29,7 @@ def _tags_from_path(filepath):
|
|||||||
path_parts = Path(filepath).relative_to(
|
path_parts = Path(filepath).relative_to(
|
||||||
settings.CONSUMPTION_DIR).parent.parts
|
settings.CONSUMPTION_DIR).parent.parts
|
||||||
for part in path_parts:
|
for part in path_parts:
|
||||||
tag_ids.add(Tag.objects.get_or_create(
|
tag_ids.add(Tag.objects.get_or_create(name=part)[0].pk)
|
||||||
slug=slugify(part),
|
|
||||||
defaults={"name": part},
|
|
||||||
)[0].pk)
|
|
||||||
|
|
||||||
return tag_ids
|
return tag_ids
|
||||||
|
|
||||||
|
25
src/documents/migrations/1006_auto_20201208_2209.py
Normal file
25
src/documents/migrations/1006_auto_20201208_2209.py
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
# Generated by Django 3.1.4 on 2020-12-08 22:09
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('documents', '1005_checksums'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='correspondent',
|
||||||
|
name='slug',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='documenttype',
|
||||||
|
name='slug',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='tag',
|
||||||
|
name='slug',
|
||||||
|
),
|
||||||
|
]
|
@ -36,7 +36,6 @@ class MatchingModel(models.Model):
|
|||||||
)
|
)
|
||||||
|
|
||||||
name = models.CharField(max_length=128, unique=True)
|
name = models.CharField(max_length=128, unique=True)
|
||||||
slug = models.SlugField(blank=True, editable=False)
|
|
||||||
|
|
||||||
match = models.CharField(max_length=256, blank=True)
|
match = models.CharField(max_length=256, blank=True)
|
||||||
matching_algorithm = models.PositiveIntegerField(
|
matching_algorithm = models.PositiveIntegerField(
|
||||||
@ -69,7 +68,6 @@ class MatchingModel(models.Model):
|
|||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
|
|
||||||
self.match = self.match.lower()
|
self.match = self.match.lower()
|
||||||
self.slug = slugify(self.name)
|
|
||||||
|
|
||||||
models.Model.save(self, *args, **kwargs)
|
models.Model.save(self, *args, **kwargs)
|
||||||
|
|
||||||
@ -384,9 +382,7 @@ class FileInfo:
|
|||||||
def _get_correspondent(cls, name):
|
def _get_correspondent(cls, name):
|
||||||
if not name:
|
if not name:
|
||||||
return None
|
return None
|
||||||
return Correspondent.objects.get_or_create(name=name, defaults={
|
return Correspondent.objects.get_or_create(name=name)[0]
|
||||||
"slug": slugify(name)
|
|
||||||
})[0]
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def _get_title(cls, title):
|
def _get_title(cls, title):
|
||||||
@ -396,10 +392,7 @@ class FileInfo:
|
|||||||
def _get_tags(cls, tags):
|
def _get_tags(cls, tags):
|
||||||
r = []
|
r = []
|
||||||
for t in tags.split(","):
|
for t in tags.split(","):
|
||||||
r.append(Tag.objects.get_or_create(
|
r.append(Tag.objects.get_or_create(name=t)[0])
|
||||||
slug=slugify(t),
|
|
||||||
defaults={"name": t}
|
|
||||||
)[0])
|
|
||||||
return tuple(r)
|
return tuple(r)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import magic
|
import magic
|
||||||
|
from django.utils.text import slugify
|
||||||
from pathvalidate import validate_filename, ValidationError
|
from pathvalidate import validate_filename, ValidationError
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from rest_framework.fields import SerializerMethodField
|
from rest_framework.fields import SerializerMethodField
|
||||||
@ -7,12 +8,16 @@ from .models import Correspondent, Tag, Document, Log, DocumentType
|
|||||||
from .parsers import is_mime_type_supported
|
from .parsers import is_mime_type_supported
|
||||||
|
|
||||||
|
|
||||||
class CorrespondentSerializer(serializers.HyperlinkedModelSerializer):
|
class CorrespondentSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
document_count = serializers.IntegerField(read_only=True)
|
document_count = serializers.IntegerField(read_only=True)
|
||||||
|
|
||||||
last_correspondence = serializers.DateTimeField(read_only=True)
|
last_correspondence = serializers.DateTimeField(read_only=True)
|
||||||
|
|
||||||
|
def get_slug(self, obj):
|
||||||
|
return slugify(obj.name)
|
||||||
|
slug = SerializerMethodField()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Correspondent
|
model = Correspondent
|
||||||
fields = (
|
fields = (
|
||||||
@ -27,10 +32,14 @@ class CorrespondentSerializer(serializers.HyperlinkedModelSerializer):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class DocumentTypeSerializer(serializers.HyperlinkedModelSerializer):
|
class DocumentTypeSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
document_count = serializers.IntegerField(read_only=True)
|
document_count = serializers.IntegerField(read_only=True)
|
||||||
|
|
||||||
|
def get_slug(self, obj):
|
||||||
|
return slugify(obj.name)
|
||||||
|
slug = SerializerMethodField()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = DocumentType
|
model = DocumentType
|
||||||
fields = (
|
fields = (
|
||||||
@ -44,10 +53,14 @@ class DocumentTypeSerializer(serializers.HyperlinkedModelSerializer):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class TagSerializer(serializers.HyperlinkedModelSerializer):
|
class TagSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
document_count = serializers.IntegerField(read_only=True)
|
document_count = serializers.IntegerField(read_only=True)
|
||||||
|
|
||||||
|
def get_slug(self, obj):
|
||||||
|
return slugify(obj.name)
|
||||||
|
slug = SerializerMethodField()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Tag
|
model = Tag
|
||||||
fields = (
|
fields = (
|
||||||
|
@ -136,7 +136,7 @@ def set_tags(sender,
|
|||||||
|
|
||||||
message = 'Tagging "{}" with "{}"'
|
message = 'Tagging "{}" with "{}"'
|
||||||
logger(
|
logger(
|
||||||
message.format(document, ", ".join([t.slug for t in relevant_tags])),
|
message.format(document, ", ".join([t.name for t in relevant_tags])),
|
||||||
logging_group
|
logging_group
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -165,7 +165,7 @@ def run_post_consume_script(sender, document, **kwargs):
|
|||||||
reverse("document-download", kwargs={"pk": document.pk}),
|
reverse("document-download", kwargs={"pk": document.pk}),
|
||||||
reverse("document-thumb", kwargs={"pk": document.pk}),
|
reverse("document-thumb", kwargs={"pk": document.pk}),
|
||||||
str(document.correspondent),
|
str(document.correspondent),
|
||||||
str(",".join(document.tags.all().values_list("slug", flat=True)))
|
str(",".join(document.tags.all().values_list("name", flat=True)))
|
||||||
)).wait()
|
)).wait()
|
||||||
|
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ class TestAttributes(TestCase):
|
|||||||
|
|
||||||
self.assertEqual(file_info.title, title, filename)
|
self.assertEqual(file_info.title, title, filename)
|
||||||
|
|
||||||
self.assertEqual(tuple([t.slug for t in file_info.tags]), tags, filename)
|
self.assertEqual(tuple([t.name for t in file_info.tags]), tags, filename)
|
||||||
|
|
||||||
def test_guess_attributes_from_name0(self):
|
def test_guess_attributes_from_name0(self):
|
||||||
self._test_guess_attributes_from_name(
|
self._test_guess_attributes_from_name(
|
||||||
@ -188,7 +188,7 @@ class TestFieldPermutations(TestCase):
|
|||||||
self.assertEqual(info.tags, (), filename)
|
self.assertEqual(info.tags, (), filename)
|
||||||
else:
|
else:
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
[t.slug for t in info.tags], tags.split(','),
|
[t.name for t in info.tags], tags.split(','),
|
||||||
filename
|
filename
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -342,8 +342,8 @@ class TestFieldPermutations(TestCase):
|
|||||||
info = FileInfo.from_filename(filename)
|
info = FileInfo.from_filename(filename)
|
||||||
self.assertEqual(info.title, "0001")
|
self.assertEqual(info.title, "0001")
|
||||||
self.assertEqual(len(info.tags), 2)
|
self.assertEqual(len(info.tags), 2)
|
||||||
self.assertEqual(info.tags[0].slug, "tag1")
|
self.assertEqual(info.tags[0].name, "tag1")
|
||||||
self.assertEqual(info.tags[1].slug, "tag2")
|
self.assertEqual(info.tags[1].name, "tag2")
|
||||||
self.assertIsNone(info.created)
|
self.assertIsNone(info.created)
|
||||||
|
|
||||||
# Complex transformation with date in replacement string
|
# Complex transformation with date in replacement string
|
||||||
@ -356,8 +356,8 @@ class TestFieldPermutations(TestCase):
|
|||||||
info = FileInfo.from_filename(filename)
|
info = FileInfo.from_filename(filename)
|
||||||
self.assertEqual(info.title, "0001")
|
self.assertEqual(info.title, "0001")
|
||||||
self.assertEqual(len(info.tags), 2)
|
self.assertEqual(len(info.tags), 2)
|
||||||
self.assertEqual(info.tags[0].slug, "tag1")
|
self.assertEqual(info.tags[0].name, "tag1")
|
||||||
self.assertEqual(info.tags[1].slug, "tag2")
|
self.assertEqual(info.tags[1].name, "tag2")
|
||||||
self.assertEqual(info.created.year, 2019)
|
self.assertEqual(info.created.year, 2019)
|
||||||
self.assertEqual(info.created.month, 9)
|
self.assertEqual(info.created.month, 9)
|
||||||
self.assertEqual(info.created.day, 8)
|
self.assertEqual(info.created.day, 8)
|
||||||
|
@ -103,10 +103,7 @@ class MailAccountHandler(LoggingMixin):
|
|||||||
|
|
||||||
def _correspondent_from_name(self, name):
|
def _correspondent_from_name(self, name):
|
||||||
try:
|
try:
|
||||||
return Correspondent.objects.get_or_create(
|
return Correspondent.objects.get_or_create(name=name)[0]
|
||||||
name=name, defaults={
|
|
||||||
"slug": slugify(name)
|
|
||||||
})[0]
|
|
||||||
except DatabaseError as e:
|
except DatabaseError as e:
|
||||||
self.log(
|
self.log(
|
||||||
"error",
|
"error",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user