first commit

This commit is contained in:
Vladislav Ostapov 2024-09-02 13:00:23 +03:00
commit 8314e32bc6
5 changed files with 83 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
.idea/
venv

30
README.md Normal file
View File

@ -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 мегабайт)

10
index.html Normal file
View File

@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hello world!</title>
</head>
<body>
<h1>Hello!</h1>
</body>
</html>

40
main.py Normal file
View File

@ -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)

1
requirements.txt Normal file
View File

@ -0,0 +1 @@
Flask~=3.0.3