From 418ed63090bc1771ad9d7d0a5dad6c216884b9dd Mon Sep 17 00:00:00 2001 From: Artem Date: Sat, 16 May 2026 17:05:47 +0300 Subject: [PATCH 1/2] 'Solution' --- car/serializers.py | 46 +++++++++++++++++++++++++++++++++++++++++++++- main.py | 16 ++++++++++++++-- 2 files changed, 59 insertions(+), 3 deletions(-) diff --git a/car/serializers.py b/car/serializers.py index 3026b2b3..3fea0258 100644 --- a/car/serializers.py +++ b/car/serializers.py @@ -1,5 +1,49 @@ +from django.core.validators import MinValueValidator, MaxValueValidator from rest_framework import serializers +from car.models import Car + class CarSerializer(serializers.Serializer): - pass + id = serializers.IntegerField(read_only=True) + manufacturer = serializers.CharField(max_length=64) + model = serializers.CharField(max_length=64) + horse_powers = serializers.IntegerField( + validators=[ + MaxValueValidator(1914), + MinValueValidator(1) + ] + ) + is_broken = serializers.BooleanField() + problem_description = serializers.CharField( + allow_null=True, + allow_blank=True, + required=False + ) + + def create(self, validated_data) -> Car: + return Car.objects.create(**validated_data) + + def update(self, instance, validated_data) -> Car: + instance.manufacturer = validated_data.get( + "manufacturer", + instance.manufacturer + ) + instance.model = validated_data.get( + "model", + instance.model + ) + instance.horse_powers = validated_data.get( + "horse_powers", + instance.horse_powers + ) + instance.is_broken = validated_data.get( + "is_broken", + instance.is_broken + ) + instance.problem_description = validated_data.get( + "problem_description", + instance.problem_description + ) + instance.save() + return instance diff --git a/main.py b/main.py index c8ff592b..f06e81c3 100644 --- a/main.py +++ b/main.py @@ -1,9 +1,21 @@ +import io + +from rest_framework.parsers import JSONParser +from rest_framework.renderers import JSONRenderer + from car.models import Car +from car.serializers import CarSerializer def serialize_car_object(car: Car) -> bytes: - pass + serializer = CarSerializer(car) + json = JSONRenderer().render(serializer.data) + return json def deserialize_car_object(json: bytes) -> Car: - pass + stream = io.BytesIO(json) + data = JSONParser().parse(stream) + serializer = CarSerializer(data=data) + serializer.is_valid(raise_exception=True) + return serializer.save() From 8b0b1eb740555c869e0f5b6b8db26b5bf82720c3 Mon Sep 17 00:00:00 2001 From: Artem Date: Sat, 16 May 2026 17:06:49 +0300 Subject: [PATCH 2/2] Add migrate to PR --- car/migrations/0001_initial.py | 26 ++++++++++++++++++++++++++ keylog.log | 15 +++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 car/migrations/0001_initial.py create mode 100644 keylog.log diff --git a/car/migrations/0001_initial.py b/car/migrations/0001_initial.py new file mode 100644 index 00000000..1013f8f5 --- /dev/null +++ b/car/migrations/0001_initial.py @@ -0,0 +1,26 @@ +# Generated by Django 4.1 on 2026-05-16 14:02 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Car', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('manufacturer', models.CharField(max_length=64)), + ('model', models.CharField(max_length=64)), + ('horse_powers', models.PositiveSmallIntegerField(validators=[django.core.validators.MaxValueValidator(1914), django.core.validators.MinValueValidator(1)])), + ('is_broken', models.BooleanField()), + ('problem_description', models.TextField(blank=True, null=True)), + ], + ), + ] diff --git a/keylog.log b/keylog.log new file mode 100644 index 00000000..b61ebe04 --- /dev/null +++ b/keylog.log @@ -0,0 +1,15 @@ +SERVER_HANDSHAKE_TRAFFIC_SECRET af3a67df09cbb0d7e96cfab69f87d02e0c90897f4992ea6462eb755b78cbf0c1 8eb3eb8c51f112a3f6481915a2b98d51ff5d785119697dcae7b122dd3908c0e9 +EXPORTER_SECRET af3a67df09cbb0d7e96cfab69f87d02e0c90897f4992ea6462eb755b78cbf0c1 c78b546b04cbc2b96426888fce21333655fde07deb68eae7a8205a3c63e1a77d +SERVER_TRAFFIC_SECRET_0 af3a67df09cbb0d7e96cfab69f87d02e0c90897f4992ea6462eb755b78cbf0c1 c764635a68fc1fd55db188b483b9c6d800f4b85f4269271c8b3e7cb1a7326460 +CLIENT_HANDSHAKE_TRAFFIC_SECRET af3a67df09cbb0d7e96cfab69f87d02e0c90897f4992ea6462eb755b78cbf0c1 287ba389db3b39250209ddf2ad05535ca20d390117108add1e0711be2a054275 +CLIENT_TRAFFIC_SECRET_0 af3a67df09cbb0d7e96cfab69f87d02e0c90897f4992ea6462eb755b78cbf0c1 d2c19de67c6d51d60542298de7bdfd89c2c7e6afee69f7f36be54d9ab327c515 +SERVER_HANDSHAKE_TRAFFIC_SECRET 56e16dee349fb59f1cf647898a241caa93d272b07f4388807938d1baf4a7b67c 8a0c213508bf8dfda51ef3affd545265c91bdea8314bccfe65a868e8a0db7a53 +EXPORTER_SECRET 56e16dee349fb59f1cf647898a241caa93d272b07f4388807938d1baf4a7b67c 3a00e0f25370d74debbd558edf961284952762932439f2dbcba66a57a53d093e +SERVER_TRAFFIC_SECRET_0 56e16dee349fb59f1cf647898a241caa93d272b07f4388807938d1baf4a7b67c d865dd921f7d979c3ff4b5d032f6bc4a421f83b3e163f2763cc2870befb0bf68 +CLIENT_HANDSHAKE_TRAFFIC_SECRET 56e16dee349fb59f1cf647898a241caa93d272b07f4388807938d1baf4a7b67c 145cc030b0e8b40fd6fd0aa6efba093a98150931cf278aa559987dec5b0971a1 +CLIENT_TRAFFIC_SECRET_0 56e16dee349fb59f1cf647898a241caa93d272b07f4388807938d1baf4a7b67c e40bfc5cdcab9ce649f166b531985348d698e3e42dfa27a0619a49f7e9320ad0 +SERVER_HANDSHAKE_TRAFFIC_SECRET 0d8f3fc58d4d66cb9bf8471a40f78c2de88d7f067d2bc0b4a7cc40f4349217df c2f3545eb9eb267211a50b69246372993594669abe42198bfbdbdb275437cc3d +EXPORTER_SECRET 0d8f3fc58d4d66cb9bf8471a40f78c2de88d7f067d2bc0b4a7cc40f4349217df a1b5bb82a465a205bd454c05d31bfe3ab119025992e0c3af0829ee92867c04b5 +SERVER_TRAFFIC_SECRET_0 0d8f3fc58d4d66cb9bf8471a40f78c2de88d7f067d2bc0b4a7cc40f4349217df 2e1f53dafab457b6ed2484f94413148ef84c0fce057057f1c5d19f79893ec490 +CLIENT_HANDSHAKE_TRAFFIC_SECRET 0d8f3fc58d4d66cb9bf8471a40f78c2de88d7f067d2bc0b4a7cc40f4349217df 38b8fe706988ee5c58a4fdac1a5b3cc56018b588f77753ef54c2588da2f9735c +CLIENT_TRAFFIC_SECRET_0 0d8f3fc58d4d66cb9bf8471a40f78c2de88d7f067d2bc0b4a7cc40f4349217df 2053d7a50e5f4826a7cb52efc9f460361053e1ffe1774c4ce9d781dfc7ab0df5