diff --git a/icons/cart.svg b/icons/cart.svg new file mode 100644 index 0000000..ca0f494 --- /dev/null +++ b/icons/cart.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/data_connection.py b/src/data_connection.py index 213ba81..b1fa5cd 100644 --- a/src/data_connection.py +++ b/src/data_connection.py @@ -1,7 +1,7 @@ from src.classes import product_classes -pizza = product_classes.Product(name="Pizza", price=3.0, barcode=1000 , image_filename="pizza.svg") -banana = product_classes.Product(name="Banana", price=1.0, barcode=1001 ,image_filename="banana.svg") +pizza = product_classes.Product(name="Pizza", price=3.0, barcode=1000 , image_filename="pizza") +banana = product_classes.Product(name="Banana", price=1.0, barcode=1001 ,image_filename="banana") product_list = [pizza, banana] diff --git a/src/main.py b/src/main.py index 55158f1..1c295ba 100644 --- a/src/main.py +++ b/src/main.py @@ -1,9 +1,11 @@ from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from fastapi.responses import FileResponse +import os from src.classes import product_classes from src.config import definitions +from validators import image_validator from src import data_connection app = FastAPI() @@ -20,6 +22,7 @@ app.add_middleware( allow_headers=["*"], ) + @app.get("/") def read_root(): return {"Hello": "World"} @@ -34,5 +37,8 @@ def get_single_product(barcode: int): @app.get("/icons/{icon_filename}", response_class=FileResponse) def get_icon(icon_filename: str): - full_filepath = f"{definitions.ICONS_PATH}/{icon_filename}" + full_filepath = os.path.join(definitions.ICONS_PATH, icon_filename) + ".svg" + assert os.path.exists(full_filepath), f"File {full_filepath} not found" + assert image_validator.is_valid_svg(full_filepath), f"File {full_filepath} is not a valid image" + return full_filepath \ No newline at end of file diff --git a/validators/__init__.py b/validators/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/validators/image_validator.py b/validators/image_validator.py new file mode 100644 index 0000000..c50c9a1 --- /dev/null +++ b/validators/image_validator.py @@ -0,0 +1,23 @@ +import re +from PIL import Image + +def is_valid_image(file_name): + try: + with Image.open(file_name) as img: + img.verify() + return True + except (IOError, SyntaxError): + return False + + +def is_valid_svg(file_name): + SVG_R = r'(?:<\?xml\b[^>]*>[^<]*)?(?:[^<]*)*(?: