mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-04-02 13:45:10 -05:00
Chore: upgrade to DRF 3.15 (#7134)
This commit is contained in:
parent
4ad4862641
commit
bb83c1eb0a
5
.github/dependabot.yml
vendored
5
.github/dependabot.yml
vendored
@ -49,11 +49,6 @@ updates:
|
|||||||
- "paperless-ngx/backend"
|
- "paperless-ngx/backend"
|
||||||
ignore:
|
ignore:
|
||||||
- dependency-name: "uvicorn"
|
- dependency-name: "uvicorn"
|
||||||
- dependency-name: "djangorestframework"
|
|
||||||
versions:
|
|
||||||
- "3.15.0"
|
|
||||||
- "3.15.1"
|
|
||||||
- "3.15.2"
|
|
||||||
groups:
|
groups:
|
||||||
development:
|
development:
|
||||||
patterns:
|
patterns:
|
||||||
|
2
Pipfile
2
Pipfile
@ -18,7 +18,7 @@ django-filter = "~=24.2"
|
|||||||
django-guardian = "*"
|
django-guardian = "*"
|
||||||
django-multiselectfield = "*"
|
django-multiselectfield = "*"
|
||||||
django-soft-delete = "*"
|
django-soft-delete = "*"
|
||||||
djangorestframework = "==3.14.0"
|
djangorestframework = "==3.15.2"
|
||||||
djangorestframework-guardian = "*"
|
djangorestframework-guardian = "*"
|
||||||
drf-writable-nested = "*"
|
drf-writable-nested = "*"
|
||||||
bleach = "*"
|
bleach = "*"
|
||||||
|
10
Pipfile.lock
generated
10
Pipfile.lock
generated
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"_meta": {
|
"_meta": {
|
||||||
"hash": {
|
"hash": {
|
||||||
"sha256": "272a69e9011a60f2d326b77d99d261425b66ebcc8ae929372213700ae47de0f5"
|
"sha256": "dfe78ffea6031e95e8e1ba35b668dacb08a4383b80d3d51d9fca239c4317d194"
|
||||||
},
|
},
|
||||||
"pipfile-spec": 6,
|
"pipfile-spec": 6,
|
||||||
"requires": {},
|
"requires": {},
|
||||||
@ -552,12 +552,12 @@
|
|||||||
},
|
},
|
||||||
"djangorestframework": {
|
"djangorestframework": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:579a333e6256b09489cbe0a067e66abe55c6595d8926be6b99423786334350c8",
|
"sha256:2b8871b062ba1aefc2de01f773875441a961fefbf79f5eed1e32b2f096944b20",
|
||||||
"sha256:eb63f58c9f218e1a7d064d17a70751f528ed4e1d35547fdade9aaf4cd103fd08"
|
"sha256:36fe88cd2d6c6bec23dca9804bab2ba5517a8bb9d8f47ebc68981b56840107ad"
|
||||||
],
|
],
|
||||||
"index": "pypi",
|
"index": "pypi",
|
||||||
"markers": "python_version >= '3.6'",
|
"markers": "python_version >= '3.8'",
|
||||||
"version": "==3.14.0"
|
"version": "==3.15.2"
|
||||||
},
|
},
|
||||||
"djangorestframework-guardian": {
|
"djangorestframework-guardian": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
|
@ -0,0 +1,88 @@
|
|||||||
|
# Generated by Django 4.2.13 on 2024-07-09 16:39
|
||||||
|
|
||||||
|
import django.db.models.deletion
|
||||||
|
from django.conf import settings
|
||||||
|
from django.db import migrations
|
||||||
|
from django.db import models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
dependencies = [
|
||||||
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||||
|
("documents", "1050_customfield_extra_data_and_more"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name="correspondent",
|
||||||
|
name="owner",
|
||||||
|
field=models.ForeignKey(
|
||||||
|
blank=True,
|
||||||
|
default=None,
|
||||||
|
null=True,
|
||||||
|
on_delete=django.db.models.deletion.SET_NULL,
|
||||||
|
to=settings.AUTH_USER_MODEL,
|
||||||
|
verbose_name="owner",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name="document",
|
||||||
|
name="owner",
|
||||||
|
field=models.ForeignKey(
|
||||||
|
blank=True,
|
||||||
|
default=None,
|
||||||
|
null=True,
|
||||||
|
on_delete=django.db.models.deletion.SET_NULL,
|
||||||
|
to=settings.AUTH_USER_MODEL,
|
||||||
|
verbose_name="owner",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name="documenttype",
|
||||||
|
name="owner",
|
||||||
|
field=models.ForeignKey(
|
||||||
|
blank=True,
|
||||||
|
default=None,
|
||||||
|
null=True,
|
||||||
|
on_delete=django.db.models.deletion.SET_NULL,
|
||||||
|
to=settings.AUTH_USER_MODEL,
|
||||||
|
verbose_name="owner",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name="savedview",
|
||||||
|
name="owner",
|
||||||
|
field=models.ForeignKey(
|
||||||
|
blank=True,
|
||||||
|
default=None,
|
||||||
|
null=True,
|
||||||
|
on_delete=django.db.models.deletion.SET_NULL,
|
||||||
|
to=settings.AUTH_USER_MODEL,
|
||||||
|
verbose_name="owner",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name="storagepath",
|
||||||
|
name="owner",
|
||||||
|
field=models.ForeignKey(
|
||||||
|
blank=True,
|
||||||
|
default=None,
|
||||||
|
null=True,
|
||||||
|
on_delete=django.db.models.deletion.SET_NULL,
|
||||||
|
to=settings.AUTH_USER_MODEL,
|
||||||
|
verbose_name="owner",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name="tag",
|
||||||
|
name="owner",
|
||||||
|
field=models.ForeignKey(
|
||||||
|
blank=True,
|
||||||
|
default=None,
|
||||||
|
null=True,
|
||||||
|
on_delete=django.db.models.deletion.SET_NULL,
|
||||||
|
to=settings.AUTH_USER_MODEL,
|
||||||
|
verbose_name="owner",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
]
|
@ -34,6 +34,7 @@ class ModelWithOwner(models.Model):
|
|||||||
User,
|
User,
|
||||||
blank=True,
|
blank=True,
|
||||||
null=True,
|
null=True,
|
||||||
|
default=None,
|
||||||
on_delete=models.SET_NULL,
|
on_delete=models.SET_NULL,
|
||||||
verbose_name=_("owner"),
|
verbose_name=_("owner"),
|
||||||
)
|
)
|
||||||
|
@ -261,13 +261,36 @@ class OwnedObjectSerializer(
|
|||||||
)
|
)
|
||||||
# other methods in mixin
|
# other methods in mixin
|
||||||
|
|
||||||
|
def validate_unique_together(self, validated_data, instance=None):
|
||||||
|
# workaround for https://github.com/encode/django-rest-framework/issues/9358
|
||||||
|
if "owner" in validated_data and "name" in self.Meta.fields:
|
||||||
|
name = validated_data.get("name", instance.name if instance else None)
|
||||||
|
objects = (
|
||||||
|
self.Meta.model.objects.exclude(pk=instance.pk)
|
||||||
|
if instance
|
||||||
|
else self.Meta.model.objects.all()
|
||||||
|
)
|
||||||
|
not_unique = objects.filter(
|
||||||
|
owner=validated_data["owner"],
|
||||||
|
name=name,
|
||||||
|
).exists()
|
||||||
|
if not_unique:
|
||||||
|
raise serializers.ValidationError(
|
||||||
|
{"error": "Object violates owner / name unique constraint"},
|
||||||
|
)
|
||||||
|
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
# default to current user if not set
|
# default to current user if not set
|
||||||
if "owner" not in validated_data and self.user:
|
request = self.context.get("request")
|
||||||
|
if (
|
||||||
|
"owner" not in validated_data
|
||||||
|
or (request is not None and "owner" not in request.data)
|
||||||
|
) and self.user:
|
||||||
validated_data["owner"] = self.user
|
validated_data["owner"] = self.user
|
||||||
permissions = None
|
permissions = None
|
||||||
if "set_permissions" in validated_data:
|
if "set_permissions" in validated_data:
|
||||||
permissions = validated_data.pop("set_permissions")
|
permissions = validated_data.pop("set_permissions")
|
||||||
|
self.validate_unique_together(validated_data)
|
||||||
instance = super().create(validated_data)
|
instance = super().create(validated_data)
|
||||||
if permissions is not None:
|
if permissions is not None:
|
||||||
self._set_permissions(permissions, instance)
|
self._set_permissions(permissions, instance)
|
||||||
@ -276,17 +299,7 @@ class OwnedObjectSerializer(
|
|||||||
def update(self, instance, validated_data):
|
def update(self, instance, validated_data):
|
||||||
if "set_permissions" in validated_data:
|
if "set_permissions" in validated_data:
|
||||||
self._set_permissions(validated_data["set_permissions"], instance)
|
self._set_permissions(validated_data["set_permissions"], instance)
|
||||||
if "owner" in validated_data and "name" in self.Meta.fields:
|
self.validate_unique_together(validated_data, instance)
|
||||||
name = validated_data.get("name", instance.name)
|
|
||||||
not_unique = (
|
|
||||||
self.Meta.model.objects.exclude(pk=instance.pk)
|
|
||||||
.filter(owner=validated_data["owner"], name=name)
|
|
||||||
.exists()
|
|
||||||
)
|
|
||||||
if not_unique:
|
|
||||||
raise serializers.ValidationError(
|
|
||||||
{"error": "Object violates owner / name unique constraint"},
|
|
||||||
)
|
|
||||||
return super().update(instance, validated_data)
|
return super().update(instance, validated_data)
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,7 +5,12 @@ from documents.tests.utils import TestMigrations
|
|||||||
class TestMigrateWorkflow(TestMigrations):
|
class TestMigrateWorkflow(TestMigrations):
|
||||||
migrate_from = "1043_alter_savedviewfilterrule_rule_type"
|
migrate_from = "1043_alter_savedviewfilterrule_rule_type"
|
||||||
migrate_to = "1044_workflow_workflowaction_workflowtrigger_and_more"
|
migrate_to = "1044_workflow_workflowaction_workflowtrigger_and_more"
|
||||||
dependencies = (("paperless_mail", "0024_alter_mailrule_name_and_more"),)
|
dependencies = (
|
||||||
|
(
|
||||||
|
"paperless_mail",
|
||||||
|
"0025_alter_mailaccount_owner_alter_mailrule_owner_and_more",
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
def setUpBeforeMigration(self, apps):
|
def setUpBeforeMigration(self, apps):
|
||||||
User = apps.get_model("auth", "User")
|
User = apps.get_model("auth", "User")
|
||||||
|
@ -0,0 +1,52 @@
|
|||||||
|
# Generated by Django 4.2.13 on 2024-07-09 16:39
|
||||||
|
|
||||||
|
import django.db.models.deletion
|
||||||
|
from django.conf import settings
|
||||||
|
from django.db import migrations
|
||||||
|
from django.db import models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
dependencies = [
|
||||||
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||||
|
("paperless_mail", "0024_alter_mailrule_name_and_more"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name="mailaccount",
|
||||||
|
name="owner",
|
||||||
|
field=models.ForeignKey(
|
||||||
|
blank=True,
|
||||||
|
default=None,
|
||||||
|
null=True,
|
||||||
|
on_delete=django.db.models.deletion.SET_NULL,
|
||||||
|
to=settings.AUTH_USER_MODEL,
|
||||||
|
verbose_name="owner",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name="mailrule",
|
||||||
|
name="owner",
|
||||||
|
field=models.ForeignKey(
|
||||||
|
blank=True,
|
||||||
|
default=None,
|
||||||
|
null=True,
|
||||||
|
on_delete=django.db.models.deletion.SET_NULL,
|
||||||
|
to=settings.AUTH_USER_MODEL,
|
||||||
|
verbose_name="owner",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name="processedmail",
|
||||||
|
name="owner",
|
||||||
|
field=models.ForeignKey(
|
||||||
|
blank=True,
|
||||||
|
default=None,
|
||||||
|
null=True,
|
||||||
|
on_delete=django.db.models.deletion.SET_NULL,
|
||||||
|
to=settings.AUTH_USER_MODEL,
|
||||||
|
verbose_name="owner",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
]
|
Loading…
x
Reference in New Issue
Block a user