api.py
1 import asyncio, json, random 2 import sys 3 4 # import lib.config 5 from lib.net import Channel 6 7 async def create_channel(server_name, port): 8 try: 9 reader, writer = await asyncio.open_connection(server_name, port) 10 except ConnectionRefusedError: 11 print(f"Error: Connection Refused to '{server_name}:{port}', Either because the daemon is down, is currently syncing or wrong url.") 12 sys.exit(-1) 13 channel = Channel(reader, writer) 14 return channel 15 16 def random_id(): 17 return random.randint(0, 2**32) 18 19 async def query(method, params, server_name, port): 20 channel = await create_channel(server_name, port) 21 request = { 22 "id": random_id(), 23 "method": method, 24 "params": params, 25 "jsonrpc": "2.0", 26 } 27 await channel.send(request) 28 29 response = await channel.receive() 30 # Closed connect returns None 31 if response is None: 32 print("error: connection with server was closed", file=sys.stderr) 33 sys.exit(-1) 34 35 if "error" in response: 36 error = response["error"] 37 errcode, errmsg = error["code"], error["message"] 38 print(f"error: {errcode} - {errmsg}", file=sys.stderr) 39 sys.exit(-1) 40 41 return response["result"] 42 43 async def get_info(server_name, port): 44 return await query("get_info", [], server_name, int(port)) 45 46 async def get_workspace(server_name, port): 47 return await query("get_ws", [], server_name, int(port)) 48 49 async def add_task(task, server_name, port): 50 return await query("add", [task], server_name, int(port)) 51 52 async def get_ref_ids(server_name, port): 53 return await query("get_ref_ids", [], server_name, int(port)) 54 55 async def get_archive_ref_ids(month_ts, server_name, port): 56 return await query("get_archive_ref_ids", [str(month_ts)], server_name, int(port)) 57 58 async def fetch_task(refid, server_name, port): 59 return await query("get_task_by_ref_id", [refid], server_name, int(port)) 60 61 async def change_task_status(refid, status, server_name, port): 62 await query("set_state", [refid, status], server_name, int(port)) 63 return True 64 65 async def modify_task(refid, changes, server_name, port): 66 return await query("modify", [refid, changes], server_name, int(port)) 67 68 async def switch_workspace(workspace, server_name, port): 69 return await query("switch_ws", [workspace], server_name, int(port)) 70 71 async def fetch_active_tasks(server_name, port): 72 return await query("fetch_active_tasks", [], server_name, int(port)) 73 74 async def fetch_deactive_tasks(month_ts, server_name, port): 75 return await query("fetch_deactive_tasks", [str(month_ts)], server_name, int(port)) 76 77 async def fetch_archive_task(task_refid, month_ts, server_name, port): 78 return await query("fetch_archive_task", [task_refid, str(month_ts)], server_name, int(port)) 79 80 async def add_task_comment(refid, comment, server_name, port): 81 return await query("set_comment", [refid, comment], server_name, int(port)) 82 83 async def export_to(path, server_name, port): 84 return await query("export", [path], server_name, int(port)) 85 86 async def import_from(path, server_name, port): 87 return await query("import", [path], server_name, int(port))