first commit
This commit is contained in:
commit
8314e32bc6
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
.idea/
|
||||
venv
|
30
README.md
Normal file
30
README.md
Normal 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
10
index.html
Normal 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
40
main.py
Normal 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
1
requirements.txt
Normal file
@ -0,0 +1 @@
|
||||
Flask~=3.0.3
|
Loading…
x
Reference in New Issue
Block a user