api.py 1.9 KB

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