diff --git a/.gitignore b/.gitignore index d4a2e5c5..12a9f97a 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,44 @@ 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/ + +# dist and build +build/ +dist/ +*.egg-info/ + +.venv/ +# \ No newline at end of file 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)), + ], + ), + ] 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..e162ac84 100644 --- a/main.py +++ b/main.py @@ -1,9 +1,22 @@ +import io +from rest_framework.renderers import JSONRenderer +from rest_framework.parsers import JSONParser + + 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()