From 63d071e9ff0c4cbd5a3e956e95ac2c80bec849b7 Mon Sep 17 00:00:00 2001 From: Kamil Date: Sat, 25 Apr 2026 18:00:29 +0200 Subject: [PATCH 1/4] Add car serialization and deserialization functionality - Implemented `serialize_car_object` and `deserialize_car_object` functions in `main.py` for converting Car instances to and from JSON. - Enhanced `CarSerializer` in `car/serializers.py` with fields for id, manufacturer, model, horse powers, is_broken status, and problem description. - Updated `.gitignore` to include additional file types and directories for better environment management. --- .gitignore | 43 +++++++++++++++++++++++++++++++++++++++++++ car/serializers.py | 14 +++++++++++++- main.py | 19 +++++++++++++++++-- 3 files changed, 73 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index d4a2e5c5..5d9de715 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,46 @@ venv/ .pytest_cache/ **__pycache__/ **db.sqlite3 +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Jupyter Notebook checkpoints +.ipynb_checkpoints + +# Test and coverage artifacts +.coverage +htmlcov/ +.tox/ +.noseids + +# VS Code settings +*.code-workspace + +# Local dev env files +.env.* +.envrc +*.local + +# Mac system files +.DS_Store + +# Logs +*.log + +# Sphinx documentation build +docs/_build/ + +# Migrations +**/migrations/ + +# dist and build +build/ +dist/ +*.egg-info/ + +.venv/ \ No newline at end of file diff --git a/car/serializers.py b/car/serializers.py index 3026b2b3..63ff4e8b 100644 --- a/car/serializers.py +++ b/car/serializers.py @@ -1,5 +1,17 @@ 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(min_value=1, max_value=1914) + is_broken = serializers.BooleanField() + problem_description = serializers.CharField( + allow_null=True, required=False + ) + + def create(self, validated_data): + return Car.objects.create(**validated_data) diff --git a/main.py b/main.py index c8ff592b..a985a5cb 100644 --- a/main.py +++ b/main.py @@ -1,9 +1,24 @@ +import io +from rest_framework.renderers import JSONRenderer +from rest_framework.parsers import JSONParser + +import json + + from car.models import Car +from car.serializers import CarSerializer def serialize_car_object(car: Car) -> bytes: - pass + serializer = CarSerializer(instance=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 8978f5208a6025b077fbfaa7d4a173d690fd172e Mon Sep 17 00:00:00 2001 From: Kamil Date: Sat, 25 Apr 2026 18:13:26 +0200 Subject: [PATCH 2/4] Remove unused json import from main.py to clean up the code. --- main.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/main.py b/main.py index a985a5cb..e162ac84 100644 --- a/main.py +++ b/main.py @@ -2,8 +2,6 @@ from rest_framework.renderers import JSONRenderer from rest_framework.parsers import JSONParser -import json - from car.models import Car from car.serializers import CarSerializer From ca41fe63b63a596638bc2d90fa0b583c7a0e98ba Mon Sep 17 00:00:00 2001 From: Kamil Date: Sat, 25 Apr 2026 18:20:14 +0200 Subject: [PATCH 3/4] Update .gitignore to include a comment for clarity --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 5d9de715..c76ae254 100644 --- a/.gitignore +++ b/.gitignore @@ -49,4 +49,5 @@ build/ dist/ *.egg-info/ -.venv/ \ No newline at end of file +.venv/ +# \ No newline at end of file From cfc4d5be034349ae934983990ae9740e6c497171 Mon Sep 17 00:00:00 2001 From: Kamil Date: Sat, 25 Apr 2026 18:22:29 +0200 Subject: [PATCH 4/4] Remove migrations directory from .gitignore to streamline ignored files. --- .gitignore | 3 --- car/migrations/0001_initial.py | 41 ++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 car/migrations/0001_initial.py diff --git a/.gitignore b/.gitignore index c76ae254..12a9f97a 100644 --- a/.gitignore +++ b/.gitignore @@ -41,9 +41,6 @@ htmlcov/ # Sphinx documentation build docs/_build/ -# Migrations -**/migrations/ - # dist and build build/ dist/ diff --git a/car/migrations/0001_initial.py b/car/migrations/0001_initial.py new file mode 100644 index 00000000..657d6775 --- /dev/null +++ b/car/migrations/0001_initial.py @@ -0,0 +1,41 @@ +# Generated by Django 4.1 on 2026-04-25 15:50 + +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)), + ], + ), + ]