abuz-solver 0.1.0__tar.gz → 0.1.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: abuz-solver
3
- Version: 0.1.0
3
+ Version: 0.1.2
4
4
  Summary: Client for remote task solver (single solve function).
5
5
  Author: Abuz
6
6
  License-Expression: MIT
@@ -51,50 +51,73 @@ def _request(base_url: str, path: str, method: str = "GET", data: dict | None =
51
51
  body = e.read().decode("utf-8", errors="replace") if e.fp else ""
52
52
  raise RuntimeError(f"HTTP {e.code}: {body[:200]}" if body else str(e)) from e
53
53
 
54
- def solve(task: str, lang: str, out_file: str | None = None, server_url: str | None = None) -> str:
54
+ def solve(task: str, lang: str, out_file: str | None = None, server_url: str | None = None, out_dir: str = "solutions") -> str:
55
55
  """
56
- Отправить задачу на сервер, вернуть решение (код). Вся логика на сервере.
57
- task: текст задания, lang: язык (python, c++, ...), out_file: сохранить ответ в файл.
58
- server_url: URL сервера (например http://127.0.0.1:8001); если не указан — берётся из конфига.
56
+ Отправить задачу на сервер, вернуть решение (код). Результат всегда сохраняется у клиента.
57
+ task: текст задания, lang: язык (python, c++, ...).
58
+ out_file: дополнительно сохранить в этот файл.
59
+ out_dir: папка для автосохранения (по умолчанию solutions/); результат пишется в out_dir/solution_YYYYMMDD_HHMMSS.txt.
60
+ server_url: URL сервера; если не указан — берётся из конфига.
59
61
  """
62
+ import os
63
+ from datetime import datetime
60
64
  base_url = (server_url or "").strip() or _get_url()
61
65
  data = _request(base_url, "/solve", method="POST", data={"task": task, "lang": lang})
62
66
  if not data.get("ok"):
63
67
  raise RuntimeError(data.get("detail", "Solve failed"))
64
68
  content = data.get("content", "")
69
+ os.makedirs(out_dir, exist_ok=True)
70
+ default_path = os.path.join(out_dir, datetime.now().strftime("solution_%Y%m%d_%H%M%S.txt"))
71
+ with open(default_path, "w", encoding="utf-8") as f:
72
+ f.write(content)
65
73
  if out_file:
66
74
  with open(out_file, "w", encoding="utf-8") as f:
67
75
  f.write(content)
68
76
  return content
69
77
 
70
- def send_to_saved(text: str, server_url: str | None = None) -> None:
78
+ def send_to_saved(text: str, server_url: str | None = None, out_dir: str = "telegram_sent") -> None:
71
79
  """
72
- Отправить текст в «Избранное» Telegram через сервер.
73
- Сервер шлёт сообщение в свой Saved Messages.
80
+ Отправить текст в «Избранное» Telegram через сервер. Копия отправленного сохраняется у клиента.
74
81
  server_url: URL сервера; если не указан — берётся из конфига.
82
+ out_dir: папка для сохранения копии отправленного (по умолчанию telegram_sent/).
75
83
  """
84
+ import os
85
+ from datetime import datetime
76
86
  base_url = (server_url or "").strip() or _get_url()
77
87
  data = _request(base_url, "/telegram_send", method="POST", data={"text": text})
78
88
  if not data.get("ok"):
79
89
  raise RuntimeError(data.get("detail", "Send failed"))
90
+ os.makedirs(out_dir, exist_ok=True)
91
+ path = os.path.join(out_dir, datetime.now().strftime("sent_%Y%m%d_%H%M%S.txt"))
92
+ with open(path, "w", encoding="utf-8") as f:
93
+ f.write(text)
80
94
 
81
95
 
82
- def get_saved_messages(limit: int = 50, server_url: str | None = None) -> list[dict]:
96
+ def get_saved_messages(limit: int = 50, server_url: str | None = None, out_dir: str = "telegram_saved") -> list[dict]:
83
97
  """
84
- Последние сообщения из «Избранное» — запрос к серверу, сервер ходит в Telegram.
85
- Возвращает [{"text": ..., "date": ...}, ...].
98
+ Последние сообщения из «Избранное» — запрос к серверу. Результат сохраняется у клиента в out_dir.
99
+ Возвращает [{"text": ..., "date": ..., "id": ...}, ...].
100
+ out_dir: папка для сохранения каждого сообщения в отдельный .txt (по умолчанию telegram_saved/).
86
101
  server_url: URL сервера; если не указан — берётся из конфига.
87
102
  """
103
+ import os
88
104
  base_url = (server_url or "").strip() or _get_url()
89
105
  data = _request(base_url, f"/telegram_saved_messages?limit={limit}")
90
- msgs = data.get("messages", [])
91
- return [{"text": m.get("text", ""), "date": m.get("date", "")} for m in msgs]
106
+ raw = data.get("messages", [])
107
+ msgs = [{"id": m.get("id", 0), "text": m.get("text", ""), "date": m.get("date", "")} for m in raw]
108
+ os.makedirs(out_dir, exist_ok=True)
109
+ for m in msgs:
110
+ date_part = (m.get("date", "") or "").replace(":", "-").replace("T", "_")[:19] or "no_date"
111
+ path = os.path.join(out_dir, f"{date_part}_{m.get('id', 0)}.txt")
112
+ with open(path, "w", encoding="utf-8") as f:
113
+ f.write(m.get("text", "") or "(медиа/пусто)")
114
+ return msgs
92
115
 
93
116
  def listen_and_save_telegram(out_dir: str = "telegram_saved", server_url: str | None = None) -> None:
94
117
  """
95
- Опрашивает сервер и сохраняет каждое новое сообщение из «Избранное» в отдельный .txt.
96
- В файле только текст. Работает до Ctrl+C. Вся логика Telegram на сервере.
97
- server_url: URL сервера; если не указан берётся из конфига.
118
+ Опрашивает сервер и сохраняет каждое новое сообщение из «Избранное» у клиента в out_dir (отдельный .txt).
119
+ Работает до Ctrl+C.
120
+ out_dir: папка для сохранения (по умолчанию telegram_saved/). server_url: URL сервера.
98
121
  """
99
122
  import os
100
123
  import time
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: abuz-solver
3
- Version: 0.1.0
3
+ Version: 0.1.2
4
4
  Summary: Client for remote task solver (single solve function).
5
5
  Author: Abuz
6
6
  License-Expression: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "abuz-solver"
7
- version = "0.1.0"
7
+ version = "0.1.2"
8
8
  description = "Client for remote task solver (single solve function)."
9
9
  requires-python = ">=3.10"
10
10
  license = "MIT"
File without changes