- "paperless-ngx/backend"
ignore:
- dependency-name: "uvicorn"
- - dependency-name: "djangorestframework"
- versions:
- - "3.15.0"
- - "3.15.1"
- - "3.15.2"
groups:
development:
patterns:
django-guardian = "*"
django-multiselectfield = "*"
django-soft-delete = "*"
-djangorestframework = "==3.14.0"
+djangorestframework = "==3.15.2"
djangorestframework-guardian = "*"
drf-writable-nested = "*"
bleach = "*"
{
"_meta": {
"hash": {
- "sha256": "272a69e9011a60f2d326b77d99d261425b66ebcc8ae929372213700ae47de0f5"
+ "sha256": "dfe78ffea6031e95e8e1ba35b668dacb08a4383b80d3d51d9fca239c4317d194"
},
"pipfile-spec": 6,
"requires": {},
},
"djangorestframework": {
"hashes": [
- "sha256:579a333e6256b09489cbe0a067e66abe55c6595d8926be6b99423786334350c8",
- "sha256:eb63f58c9f218e1a7d064d17a70751f528ed4e1d35547fdade9aaf4cd103fd08"
+ "sha256:2b8871b062ba1aefc2de01f773875441a961fefbf79f5eed1e32b2f096944b20",
+ "sha256:36fe88cd2d6c6bec23dca9804bab2ba5517a8bb9d8f47ebc68981b56840107ad"
],
"index": "pypi",
- "markers": "python_version >= '3.6'",
- "version": "==3.14.0"
+ "markers": "python_version >= '3.8'",
+ "version": "==3.15.2"
},
"djangorestframework-guardian": {
"hashes": [
--- /dev/null
+# 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",
+ ),
+ ),
+ ]
User,
blank=True,
null=True,
+ default=None,
on_delete=models.SET_NULL,
verbose_name=_("owner"),
)
)
# 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):
# 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
permissions = None
if "set_permissions" in validated_data:
permissions = validated_data.pop("set_permissions")
+ self.validate_unique_together(validated_data)
instance = super().create(validated_data)
if permissions is not None:
self._set_permissions(permissions, instance)
def update(self, instance, validated_data):
if "set_permissions" in validated_data:
self._set_permissions(validated_data["set_permissions"], instance)
- if "owner" in validated_data and "name" in self.Meta.fields:
- 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"},
- )
+ self.validate_unique_together(validated_data, instance)
return super().update(instance, validated_data)
class TestMigrateWorkflow(TestMigrations):
migrate_from = "1043_alter_savedviewfilterrule_rule_type"
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):
User = apps.get_model("auth", "User")
--- /dev/null
+# 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",
+ ),
+ ),
+ ]