/ bin / tau / tau-python / api.py
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))