-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserializers.py
More file actions
101 lines (75 loc) · 3.06 KB
/
serializers.py
File metadata and controls
101 lines (75 loc) · 3.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
from django.contrib.auth.password_validation import validate_password
from rest_framework import serializers
from rest_framework.fields import UUIDField
from .models import User, Request, File, Filament
class ChangePasswordSerializer(serializers.Serializer):
old_password = serializers.CharField(required=True, write_only=True)
new_password = serializers.CharField(required=True, write_only=True)
confirm_password = serializers.CharField(required=True, write_only=True)
def validate_old_password(self, password):
user = self.context["request"].user
if not user.check_password(password):
raise serializers.ValidationError("Wrong password")
return password
def validate(self, data):
if data["new_password"] != data["confirm_password"]:
raise serializers.ValidationError("Passwords do not match")
return data
def validate_new_password(self, password):
validate_password(password, user=self.context["request"].user)
return password
def save(self, **kwargs):
user = self.context["request"].user
user.set_password(self.validated_data["new_password"])
user.save()
return user
class UserSerializer(serializers.ModelSerializer):
def create(self, validated_data):
user = User.objects.create_user(
username=validated_data["username"],
password=validated_data["password"],
email=validated_data["email"],
)
return user
# noinspection PyMethodMayBeStatic
def validate_password(self, password):
validate_password(password)
return password
class Meta:
model = User
fields = ["id", "username", "password", "email"]
extra_kwargs = {"password": {"write_only": True}}
class CreateFileSerializer(serializers.ModelSerializer):
filaments = serializers.PrimaryKeyRelatedField(many=True, queryset=Filament.objects.all())
class Meta:
model = File
fields = [
"user_id",
"path",
"number_of_printing",
"filaments",
"para_slicer",
]
extra_kwargs = {"user_id": {"read_only": True}}
def validate(self, data):
user = self.context["request"].user
path = data["path"]
if File.objects.filter(path=path, user_id=user).exists():
raise serializers.ValidationError("File already exists")
return data
class CreateRequestSerializer(serializers.ModelSerializer):
class Meta:
model = Request
fields = ["file_id", "created_at"]
extra_kwargs = {"created_at": {"read_only": True}}
def validate(self, data):
user = self.context["request"].user
file = data["file_id"]
if file.user_id != user.id:
raise serializers.ValidationError("File doesn't belong to this user")
return data
class ChangeRequestSerializer(serializers.ModelSerializer):
class Meta:
model = Request
fields = ["printer_id", "status"]
extra_kwargs = {"status": {"read_only": True}}