api.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import asyncio, json, random
  2. import sys
  3. # import lib.config
  4. from lib.net import Channel
  5. async def create_channel(server_name, port):
  6. reader, writer = await asyncio.open_connection(server_name, port)
  7. channel = Channel(reader, writer)
  8. return channel
  9. def random_id():
  10. return random.randint(0, 2**32)
  11. async def query(method, params, server_name, port):
  12. channel = await create_channel(server_name, port)
  13. request = {
  14. "id": random_id(),
  15. "method": method,
  16. "params": params,
  17. "jsonrpc": "2.0",
  18. }
  19. await channel.send(request)
  20. response = await channel.receive()
  21. # Closed connect returns None
  22. if response is None:
  23. print("error: connection with server was closed", file=sys.stderr)
  24. sys.exit(-1)
  25. if "error" in response:
  26. error = response["error"]
  27. errcode, errmsg = error["code"], error["message"]
  28. print(f"error: {errcode} - {errmsg}", file=sys.stderr)
  29. sys.exit(-1)
  30. return response["result"]
  31. async def get_info(server_name, port):
  32. return await query("get_info", [], server_name, int(port))
  33. async def get_workspace(server_name, port):
  34. return await query("get_ws", [], server_name, int(port))
  35. async def add_task(task, server_name, port):
  36. return await query("add", [task], server_name, int(port))
  37. async def get_ref_ids(server_name, port):
  38. return await query("get_ref_ids", [], server_name, int(port))
  39. async def get_archive_ref_ids(month_ts, server_name, port):
  40. return await query("get_archive_ref_ids", [str(month_ts)], server_name, int(port))
  41. async def fetch_task(refid, server_name, port):
  42. return await query("get_task_by_ref_id", [refid], server_name, int(port))
  43. async def change_task_status(refid, status, server_name, port):
  44. await query("set_state", [refid, status], server_name, int(port))
  45. return True
  46. async def modify_task(refid, changes, server_name, port):
  47. return await query("modify", [refid, changes], server_name, int(port))
  48. async def switch_workspace(workspace, server_name, port):
  49. return await query("switch_ws", [workspace], server_name, int(port))
  50. async def fetch_active_tasks(server_name, port):
  51. return await query("fetch_active_tasks", [], server_name, int(port))
  52. async def fetch_deactive_tasks(month_ts, server_name, port):
  53. return await query("fetch_deactive_tasks", [str(month_ts)], server_name, int(port))
  54. async def fetch_archive_task(task_refid, month_ts, server_name, port):
  55. return await query("fetch_archive_task", [task_refid, str(month_ts)], server_name, int(port))
  56. async def add_task_comment(refid, comment, server_name, port):
  57. await query("set_comment", [refid, comment], server_name, int(port))
  58. return True