commit 8314e32bc6621e288f78d8fa7b964bb06714e766 Author: Vladislav Ostapov Date: Mon Sep 2 13:00:23 2024 +0300 first commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d2d9075 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.idea/ +venv diff --git a/README.md b/README.md new file mode 100644 index 0000000..73dcb64 --- /dev/null +++ b/README.md @@ -0,0 +1,30 @@ +# flask-hello-world + +Проект написан на коленке за 5 минут и предназначен для того, чтобы генерировать и получать по http файлы нюбых размеров. + +Использование: +* запустить сервер +* получить файл используя, например, curl + +# Установка зависимостей и запуск + +Для запуска проекта рекомендуется использовать **python virtual environment**. +У проекта только одна единственная зависимость, устанавливается командой: + +```bash +pip install -r requirements.txt +``` + +Запускать проект нужно командой: + +```bash +python -m flask --app main run --host=0.0.0.0 +``` + +Чтобы получить файл, предусмотрено несколько вариантов: +* получить `index.html`: `http://хост:5000/` +* получить файл с точно заданным размером в байтах: `http://хост:5000/gen?len=длинна_файла` + +При этом: +* вместо `хост` нужно вписать доменное имя или IP-адрес сервера +* вместо `длинна_файла` нужно указать число - количесво байт, при этом поддерживаются указания длинны с буквами (`100k` = 100 килобайт, `1m` = 1 мегабайт) diff --git a/index.html b/index.html new file mode 100644 index 0000000..96ea857 --- /dev/null +++ b/index.html @@ -0,0 +1,10 @@ + + + + + Hello world! + + +

Hello!

+ + \ No newline at end of file diff --git a/main.py b/main.py new file mode 100644 index 0000000..28e20c5 --- /dev/null +++ b/main.py @@ -0,0 +1,40 @@ +from flask import Flask +from flask import request +import re + +app = Flask(__name__) + + +@app.route("/") +def index(): + with open("index.html", "r") as f: + return f.read() + + +@app.route("/gen", methods=['GET']) +def content_generator(): + len_param = request.args.get('len') + total_size = -1 + if re.match(r"^[0-9]+$", len_param): + total_size = int(len_param) + elif re.match(r"^[0-9]+k$", len_param): + total_size = int(len_param[0:-1]) * 1024 + elif re.match(r"^[0-9]+m$", len_param): + total_size = int(len_param[0:-1]) * 1024 * 1024 + + if total_size <= 0: + return "Invalid payload size", 400 + + generated_segment = bytearray() + for i in range(0, 256): + generated_segment.append(i) + + res = bytearray() + while len(res) < total_size: + remain = total_size - len(res) + if remain >= len(generated_segment): + res += generated_segment + else: + res += generated_segment[0:remain] + + return bytes(res) diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..edeab81 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +Flask~=3.0.3