From 9d9a86efaa079cb12636b0d3e9e61bc1bbfbb0b3 Mon Sep 17 00:00:00 2001 From: puckoprutt Date: Tue, 18 Feb 2025 23:46:22 +0100 Subject: [PATCH] added spiders app --- settings/settings.py | 4 +- settings/urls.py | 1 + spiders/__init__.py | 0 spiders/apps.py | 6 +++ spiders/dagens_lunch/serializer.py | 59 ++++++++++++++++++++++++++++++ spiders/dagens_lunch/urls.py | 12 ++++++ spiders/dagens_lunch/views.py | 55 ++++++++++++++++++++++++++++ spiders/migrations/__init__.py | 0 spiders/tests.py | 3 ++ spiders/urls.py | 6 +++ spiders/views.py | 2 + 11 files changed, 146 insertions(+), 2 deletions(-) create mode 100644 spiders/__init__.py create mode 100644 spiders/apps.py create mode 100644 spiders/dagens_lunch/serializer.py create mode 100644 spiders/dagens_lunch/urls.py create mode 100644 spiders/dagens_lunch/views.py create mode 100644 spiders/migrations/__init__.py create mode 100644 spiders/tests.py create mode 100644 spiders/urls.py create mode 100644 spiders/views.py diff --git a/settings/settings.py b/settings/settings.py index 35192e8..49d84c3 100644 --- a/settings/settings.py +++ b/settings/settings.py @@ -61,8 +61,8 @@ INSTALLED_APPS = [ 'knox', # my shit - 'options', - 'users' + 'users', + 'spiders' ] MIDDLEWARE = [ diff --git a/settings/urls.py b/settings/urls.py index 40eb42a..1f2d223 100644 --- a/settings/urls.py +++ b/settings/urls.py @@ -24,6 +24,7 @@ from drf_spectacular.views import SpectacularSwaggerView urlpatterns = [ path("auth/", include('users.urls')), + path("spiders/", include('spiders.urls')), # Spectacular path("schema/", SpectacularAPIView.as_view(), name="schema-text"), diff --git a/spiders/__init__.py b/spiders/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/spiders/apps.py b/spiders/apps.py new file mode 100644 index 0000000..640e74e --- /dev/null +++ b/spiders/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class SpidersConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'spiders' diff --git a/spiders/dagens_lunch/serializer.py b/spiders/dagens_lunch/serializer.py new file mode 100644 index 0000000..229d969 --- /dev/null +++ b/spiders/dagens_lunch/serializer.py @@ -0,0 +1,59 @@ +from rest_framework import serializers + +class DagensLunch(serializers.Serializer): + place = serializers.CharField(max_length=20) + monday = serializers.CharField() + tuesday = serializers.CharField() + wednesday = serializers.CharField() + thursday = serializers.CharField() + friday = serializers.CharField() + scraped_by = serializers.CharField(max_length=40) + scraped_at = serializers.DateTimeField() + + class Meta: + fields = ("place", "monday", "tuesday", "wednesday", "thursday", "friday", "scraped_by", "scraped_at") + read_only_fields = ("place", "monday", "tuesday", "wednesday", "thursday", "friday", "scraped_by", "scraped_at") + +class DagensLunchMax(DagensLunch): + + class Meta(DagensLunch.Meta): + pass + +class DagensLunchValsaren(DagensLunch): + week = serializers.CharField() + alltid = serializers.CharField() + klassiker = serializers.CharField() + price = serializers.DecimalField(max_digits=6, decimal_places=2) + price_takeaway = serializers.DecimalField(max_digits=6, decimal_places=2) + + class Meta(DagensLunch.Meta): + fields = DagensLunch.Meta.fields + ( + "week", "alltid", "klassiker", "price", "price_takeaway" + ) + read_only_fields = DagensLunch.Meta.read_only_fields + ( + "week", "alltid", "klassiker", "price", "price_takeaway" + ) + +class DagensLunchMalmens(DagensLunch): + week = serializers.CharField() + monday = serializers.ListField() + tuesday = serializers.ListField() + wednesday = serializers.ListField() + thursday = serializers.ListField() + friday = serializers.ListField() + + class Meta(DagensLunch.Meta): + fields = DagensLunch.Meta.fields + ( "week", ) + read_only_fields = DagensLunch.Meta.read_only_fields + ( "week", ) + +class DagensLunchHeat(DagensLunch): + monday = serializers.ListField() + tuesday = serializers.ListField() + wednesday = serializers.ListField() + thursday = serializers.ListField() + friday = serializers.ListField() + week = serializers.CharField() + + class Meta(DagensLunch.Meta): + fields = DagensLunch.Meta.fields + ( "week", ) + read_only_fields = DagensLunch.Meta.read_only_fields + ( "week", ) \ No newline at end of file diff --git a/spiders/dagens_lunch/urls.py b/spiders/dagens_lunch/urls.py new file mode 100644 index 0000000..41eb07f --- /dev/null +++ b/spiders/dagens_lunch/urls.py @@ -0,0 +1,12 @@ +from django.urls import path +from spiders.dagens_lunch.views import Lunch_Valsaren_View +from spiders.dagens_lunch.views import Lunch_Malmens_View +from spiders.dagens_lunch.views import Lunch_Heat_View +from spiders.dagens_lunch.views import Lunch_Max_View + +urlpatterns = [ + path("valsaren/", Lunch_Valsaren_View.as_view({"get": "lunch"}), name="spiders_dagens_lunch_valsaren"), + path("malmens/", Lunch_Malmens_View.as_view({"get": "lunch"}), name="spiders_dagens_lunch_malmens"), + path("heat/", Lunch_Heat_View.as_view({"get": "lunch"}), name="spiders_dagens_lunch_heat"), + path("max/", Lunch_Max_View.as_view({"get": "lunch"}), name="spiders_dagens_lunch_max"), +] \ No newline at end of file diff --git a/spiders/dagens_lunch/views.py b/spiders/dagens_lunch/views.py new file mode 100644 index 0000000..44227a9 --- /dev/null +++ b/spiders/dagens_lunch/views.py @@ -0,0 +1,55 @@ +import json +from pathlib import Path +from settings.puckoviews import PuckoView +from rest_framework.response import Response +from rest_framework.permissions import AllowAny +from spiders.dagens_lunch.serializer import DagensLunchValsaren +from spiders.dagens_lunch.serializer import DagensLunchMalmens +from spiders.dagens_lunch.serializer import DagensLunchHeat +from spiders.dagens_lunch.serializer import DagensLunchMax + +DAGENS_LUNCH_PATH = Path("/home/riisen/utveckling/spiders/dagens_lunch/latest") + +class Lunch_Valsaren_View(PuckoView): + permission_classes = [AllowAny,] + serializer_class = DagensLunchValsaren + + def lunch(self, request): + file = DAGENS_LUNCH_PATH / "valsaren.json" + with open(file, "r") as f: + data = json.load(f) + serializer = self.serializer_class(data) + return Response(serializer.data, status=200) + +class Lunch_Malmens_View(PuckoView): + permission_classes = [AllowAny,] + serializer_class = DagensLunchMalmens + + def lunch(self, request): + file = DAGENS_LUNCH_PATH / "malmens.json" + with open(file, "r") as f: + data = json.load(f) + serializer = self.serializer_class(data) + return Response(serializer.data, status=200) + +class Lunch_Heat_View(PuckoView): + permission_classes = [AllowAny,] + serializer_class = DagensLunchHeat + + def lunch(self, request): + file = DAGENS_LUNCH_PATH / "heat.json" + with open(file, "r") as f: + data = json.load(f) + serializer = self.serializer_class(data) + return Response(serializer.data, status=200) + +class Lunch_Max_View(PuckoView): + permission_classes = [AllowAny,] + serializer_class = DagensLunchMax + + def lunch(self, request): + file = DAGENS_LUNCH_PATH / "max.json" + with open(file, "r") as f: + data = json.load(f) + serializer = self.serializer_class(data) + return Response(serializer.data, status=200) \ No newline at end of file diff --git a/spiders/migrations/__init__.py b/spiders/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/spiders/tests.py b/spiders/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/spiders/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/spiders/urls.py b/spiders/urls.py new file mode 100644 index 0000000..c98e688 --- /dev/null +++ b/spiders/urls.py @@ -0,0 +1,6 @@ +from django.urls import path +from django.urls import include + +urlpatterns = [ + path("dagens_lunch/", include("spiders.dagens_lunch.urls")) +] \ No newline at end of file diff --git a/spiders/views.py b/spiders/views.py new file mode 100644 index 0000000..d82ca52 --- /dev/null +++ b/spiders/views.py @@ -0,0 +1,2 @@ +import json +