From f7c953847953a3d33b128be5910f02b0e6ed5964 Mon Sep 17 00:00:00 2001 From: Ihor Zasimenko Date: Wed, 11 Mar 2026 17:13:00 +0200 Subject: [PATCH 1/6] Implement CarSerializer with required fields --- car/serializers.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/car/serializers.py b/car/serializers.py index 3026b2b3..2788687c 100644 --- a/car/serializers.py +++ b/car/serializers.py @@ -2,4 +2,8 @@ class CarSerializer(serializers.Serializer): - pass + manufacturer = serializers.CharField(max_length=64) + model = serializers.CharField(max_length=64) + horse_powers = serializers.IntegerField(min_value=1, max_value=2000) + is_broken = serializers.BooleanField() + problem_description = serializers.CharField(allow_null=True, required=False) From 0298623f648a2d154d76f7a3bae02fcca0ae9a2c Mon Sep 17 00:00:00 2001 From: Ihor Zasimenko Date: Wed, 11 Mar 2026 17:16:48 +0200 Subject: [PATCH 2/6] Install Django REST framework and apply Car migrations --- car/migrations/0001_initial.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 car/migrations/0001_initial.py diff --git a/car/migrations/0001_initial.py b/car/migrations/0001_initial.py new file mode 100644 index 00000000..7f5caeaf --- /dev/null +++ b/car/migrations/0001_initial.py @@ -0,0 +1,26 @@ +# Generated by Django 6.0.2 on 2026-03-11 15:16 + +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)), + ], + ), + ] From 5d205554af4ab33fd08b811ac8f142c47016a13e Mon Sep 17 00:00:00 2001 From: Ihor Zasimenko Date: Wed, 11 Mar 2026 17:36:18 +0200 Subject: [PATCH 3/6] Fix CarSerializer: add id field and adjust horse_powers validation --- car/serializers.py | 3 ++- car/tests/test_serializers.py | 0 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 car/tests/test_serializers.py diff --git a/car/serializers.py b/car/serializers.py index 2788687c..8af226b2 100644 --- a/car/serializers.py +++ b/car/serializers.py @@ -2,8 +2,9 @@ class CarSerializer(serializers.Serializer): + id = serializers.IntegerField(read_only=True) # додали id manufacturer = serializers.CharField(max_length=64) model = serializers.CharField(max_length=64) - horse_powers = serializers.IntegerField(min_value=1, max_value=2000) + horse_powers = serializers.IntegerField(min_value=1, max_value=1999) # максимум 1999 is_broken = serializers.BooleanField() problem_description = serializers.CharField(allow_null=True, required=False) diff --git a/car/tests/test_serializers.py b/car/tests/test_serializers.py new file mode 100644 index 00000000..e69de29b From edf05b1e6d1e8d21d5ae921447385ebffbe673f9 Mon Sep 17 00:00:00 2001 From: Ihor Zasimenko Date: Wed, 11 Mar 2026 17:53:34 +0200 Subject: [PATCH 4/6] Finalize serializer and main functions to pass all tests --- main.py | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/main.py b/main.py index c8ff592b..6f869f91 100644 --- a/main.py +++ b/main.py @@ -1,9 +1,24 @@ +import json from car.models import Car +from car.serializers import CarSerializer def serialize_car_object(car: Car) -> bytes: - pass + serializer = CarSerializer(car) + return json.dumps(serializer.data, separators=(",", ":")).encode("utf-8") -def deserialize_car_object(json: bytes) -> Car: - pass +def deserialize_car_object(json_bytes: bytes) -> Car: + data = json.loads(json_bytes.decode("utf-8")) + + serializer = CarSerializer(data=data) + serializer.is_valid(raise_exception=True) + + validated = serializer.validated_data + + car = Car(**validated) + + if "id" in data: + car.id = data["id"] + + return car \ No newline at end of file From 441f26a601deb4721dc1fc4898e32cb7cc16e0e7 Mon Sep 17 00:00:00 2001 From: Ihor Zasimenko Date: Wed, 11 Mar 2026 18:00:17 +0200 Subject: [PATCH 5/6] Fix flake8 issues: finalize serializer formatting and newline --- car/serializers.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/car/serializers.py b/car/serializers.py index 8af226b2..991a2971 100644 --- a/car/serializers.py +++ b/car/serializers.py @@ -2,9 +2,15 @@ class CarSerializer(serializers.Serializer): - id = serializers.IntegerField(read_only=True) # додали id + id = serializers.IntegerField(read_only=True) manufacturer = serializers.CharField(max_length=64) model = serializers.CharField(max_length=64) - horse_powers = serializers.IntegerField(min_value=1, max_value=1999) # максимум 1999 + horse_powers = serializers.IntegerField( + min_value=1, + max_value=1999, + ) is_broken = serializers.BooleanField() - problem_description = serializers.CharField(allow_null=True, required=False) + problem_description = serializers.CharField( + allow_null=True, + required=False, + ) From 631a7c2a6b850126eed72694c8b6778eaf0ac7df Mon Sep 17 00:00:00 2001 From: Ihor Zasimenko Date: Wed, 11 Mar 2026 18:03:24 +0200 Subject: [PATCH 6/6] Fix flake8 W292: add newline at end of file --- main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.py b/main.py index 6f869f91..f978f451 100644 --- a/main.py +++ b/main.py @@ -21,4 +21,4 @@ def deserialize_car_object(json_bytes: bytes) -> Car: if "id" in data: car.id = data["id"] - return car \ No newline at end of file + return car