From 91fd8ba193f0fae8ce16a47bdf90338d95dfb91d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B0=D1=80=D0=B8=D1=8F=20=D0=91=D0=B5=D1=80=D0=B4?= =?UTF-8?q?=D0=BD=D0=B8=D0=BA=D0=BE=D0=B2=D0=B0?= Date: Thu, 28 May 2026 08:34:44 +0000 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20memory=5Fclient.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- memory_client.py | 87 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 memory_client.py diff --git a/memory_client.py b/memory_client.py new file mode 100644 index 0000000..bbc49d5 --- /dev/null +++ b/memory_client.py @@ -0,0 +1,87 @@ +import json +import sys +from pathlib import Path + +import httpx + + +BASE_URL = "http://localhost:8000" + + +def save(key: str, value: str) -> dict: + """Сохраняет значение по ключу.""" + payload = {"key": key, "value": value} + response = httpx.post(f"{BASE_URL}/save", json=payload) + return response.json() + + +def get(key: str) -> dict: + """Получает значение по ключу.""" + params = {"key": key} + response = httpx.get(f"{BASE_URL}/get", params=params) + return response.json() + + +def delete(key: str) -> dict: + """Удаляет запись по ключу.""" + payload = {"key": key} + response = httpx.delete(f"{BASE_URL}/delete", json=payload) + return response.json() + + +def list_keys() -> dict: + """Возвращает список всех ключей.""" + response = httpx.get(f"{BASE_URL}/list_keys") + return response.json() + + +def save_with_namespace(namespace: str, key: str, value: str) -> dict: + """Сохраняет значение в указанном пространстве имён.""" + payload = {"namespace": namespace, "key": key, "value": value} + response = httpx.post(f"{BASE_URL}/save_with_namespace", json=payload) + return response.json() + + +def get_by_namespace(namespace: str, key: str) -> dict: + """Получает значение из указанного пространства имён.""" + params = {"namespace": namespace, "key": key} + response = httpx.get(f"{BASE_URL}/get_by_namespace", params=params) + return response.json() + + +def main() -> None: + """Простой тестовый сценарий для проверки работы сервера.""" + print("=== Тестирование MCP-сервера ===") + + # 1. Сохраняем простое значение + print("\nСохраняем ключ 'foo' со значением 'bar'") + print(json.dumps(save("foo", "bar"), indent=2)) + + # 2. Получаем сохранённое значение + print("\nПолучаем ключ 'foo'") + print(json.dumps(get("foo"), indent=2)) + + # 3. Сохраняем в пространстве имён + ns = "experiment" + print(f"\nСохраняем ключ '{ns}:baz' со значением 'qux' в namespace '{ns}'") + print(json.dumps(save_with_namespace(ns, "baz", "qux"), indent=2)) + + # 4. Получаем из пространства имён + print(f"\nПолучаем ключ '{ns}:baz' из namespace '{ns}'") + print(json.dumps(get_by_namespace(ns, "baz"), indent=2)) + + # 5. Список всех ключей + print("\nСписок всех ключей:") + print(json.dumps(list_keys(), indent=2)) + + # 6. Удаляем ключ 'foo' + print("\nУдаляем ключ 'foo'") + print(json.dumps(delete("foo"), indent=2)) + + # 7. Проверяем, что ключ удалён + print("\nПроверка удаления ключа 'foo':") + print(json.dumps(get("foo"), indent=2)) + + +if __name__ == "__main__": + sys.exit(main()) \ No newline at end of file