workspace: initial clean commit

This commit is contained in:
Stream
2026-04-12 21:55:33 +03:00
commit 0fc86ac3ae
220 changed files with 31657 additions and 0 deletions

View File

@@ -0,0 +1,109 @@
#!/usr/bin/env python3
"""
send_task.py — отправить задание на сервер-реле vprok.ru
Стрим вызывает этот скрипт когда нужно заполнить корзину:
python3 send_task.py "молоко 1, яйца С1 10шт, йогурт Активиа 4шт"
Формат строки:
<название товара> <количество>[шт], ...
Примеры:
python3 send_task.py "молоко 2, хлеб 1, масло сливочное 3шт"
python3 send_task.py "яйца С1 10, кефир Простоквашино 2шт, сметана 20% 1"
"""
import sys
import re
import json
import urllib.request
import urllib.error
SERVER_URL = "http://185.130.212.192:5000"
API_KEY = "vprok2024secret"
HEADERS = {"X-Api-Key": API_KEY, "Content-Type": "application/json"}
def parse_items(raw: str) -> list[dict]:
"""
Парсит строку вида "молоко 2, яйца С1 10шт, хлеб"
в список [{"query": "молоко", "qty": 2}, ...]
"""
items = []
# Разбиваем по запятой
parts = [p.strip() for p in raw.split(",") if p.strip()]
for part in parts:
# Ищем число в конце (возможно с "шт")
m = re.search(r'\s+(\d+)\s*шт?\.?$', part, re.IGNORECASE)
if m:
qty = int(m.group(1))
query = part[:m.start()].strip()
else:
# Попробуем просто число в конце
m2 = re.search(r'\s+(\d+)$', part)
if m2:
qty = int(m2.group(1))
query = part[:m2.start()].strip()
else:
qty = 1
query = part.strip()
if query:
items.append({"query": query, "qty": qty})
return items
def send_task(items: list) -> dict:
"""Отправляет задание на сервер. Возвращает ответ сервера."""
payload = json.dumps({"items": items}).encode("utf-8")
req = urllib.request.Request(
f"{SERVER_URL}/task",
data=payload,
headers=HEADERS,
method="POST"
)
with urllib.request.urlopen(req, timeout=15) as resp:
return json.loads(resp.read().decode())
def get_status() -> dict:
"""Получить текущий статус."""
req = urllib.request.Request(f"{SERVER_URL}/status", headers={"X-Api-Key": API_KEY})
with urllib.request.urlopen(req, timeout=10) as resp:
return json.loads(resp.read().decode())
def main():
if len(sys.argv) < 2:
print(__doc__)
sys.exit(1)
raw = " ".join(sys.argv[1:])
items = parse_items(raw)
if not items:
print("Не удалось распознать товары в строке:", raw)
sys.exit(1)
print(f"📋 Распознано {len(items)} товар(ов):")
for i, item in enumerate(items, 1):
print(f" {i}. {item['query']} × {item['qty']}")
print(f"\n📡 Отправляю на {SERVER_URL}...")
try:
result = send_task(items)
print(f"✅ Задание принято! ID: {result.get('task_id')}, товаров: {result.get('items_count')}")
print(" Windows клиент заберёт задание в течение 30 секунд.")
except urllib.error.HTTPError as e:
print(f"❌ HTTP ошибка: {e.code}{e.read().decode()}")
sys.exit(1)
except urllib.error.URLError as e:
print(f"Не удалось подключиться к серверу {SERVER_URL}: {e.reason}")
print(" Проверьте, запущен ли сервер-реле.")
sys.exit(1)
if __name__ == "__main__":
main()