diff options
Diffstat (limited to 'bitbake/lib/hashserv/client.py')
-rw-r--r-- | bitbake/lib/hashserv/client.py | 62 |
1 files changed, 59 insertions, 3 deletions
diff --git a/bitbake/lib/hashserv/client.py b/bitbake/lib/hashserv/client.py index 9542d72f6c..82400fe5aa 100644 --- a/bitbake/lib/hashserv/client.py +++ b/bitbake/lib/hashserv/client.py | |||
@@ -6,6 +6,7 @@ | |||
6 | import logging | 6 | import logging |
7 | import socket | 7 | import socket |
8 | import bb.asyncrpc | 8 | import bb.asyncrpc |
9 | import json | ||
9 | from . import create_async_client | 10 | from . import create_async_client |
10 | 11 | ||
11 | 12 | ||
@@ -16,15 +17,19 @@ class AsyncClient(bb.asyncrpc.AsyncClient): | |||
16 | MODE_NORMAL = 0 | 17 | MODE_NORMAL = 0 |
17 | MODE_GET_STREAM = 1 | 18 | MODE_GET_STREAM = 1 |
18 | 19 | ||
19 | def __init__(self): | 20 | def __init__(self, username=None, password=None): |
20 | super().__init__('OEHASHEQUIV', '1.1', logger) | 21 | super().__init__('OEHASHEQUIV', '1.1', logger) |
21 | self.mode = self.MODE_NORMAL | 22 | self.mode = self.MODE_NORMAL |
23 | self.username = username | ||
24 | self.password = password | ||
22 | 25 | ||
23 | async def setup_connection(self): | 26 | async def setup_connection(self): |
24 | await super().setup_connection() | 27 | await super().setup_connection() |
25 | cur_mode = self.mode | 28 | cur_mode = self.mode |
26 | self.mode = self.MODE_NORMAL | 29 | self.mode = self.MODE_NORMAL |
27 | await self._set_mode(cur_mode) | 30 | await self._set_mode(cur_mode) |
31 | if self.username: | ||
32 | await self.auth(self.username, self.password) | ||
28 | 33 | ||
29 | async def send_stream(self, msg): | 34 | async def send_stream(self, msg): |
30 | async def proc(): | 35 | async def proc(): |
@@ -41,6 +46,7 @@ class AsyncClient(bb.asyncrpc.AsyncClient): | |||
41 | if new_mode == self.MODE_NORMAL and self.mode == self.MODE_GET_STREAM: | 46 | if new_mode == self.MODE_NORMAL and self.mode == self.MODE_GET_STREAM: |
42 | r = await self._send_wrapper(stream_to_normal) | 47 | r = await self._send_wrapper(stream_to_normal) |
43 | if r != "ok": | 48 | if r != "ok": |
49 | self.check_invoke_error(r) | ||
44 | raise ConnectionError("Unable to transition to normal mode: Bad response from server %r" % r) | 50 | raise ConnectionError("Unable to transition to normal mode: Bad response from server %r" % r) |
45 | elif new_mode == self.MODE_GET_STREAM and self.mode == self.MODE_NORMAL: | 51 | elif new_mode == self.MODE_GET_STREAM and self.mode == self.MODE_NORMAL: |
46 | r = await self.invoke({"get-stream": None}) | 52 | r = await self.invoke({"get-stream": None}) |
@@ -109,9 +115,52 @@ class AsyncClient(bb.asyncrpc.AsyncClient): | |||
109 | await self._set_mode(self.MODE_NORMAL) | 115 | await self._set_mode(self.MODE_NORMAL) |
110 | return await self.invoke({"clean-unused": {"max_age_seconds": max_age}}) | 116 | return await self.invoke({"clean-unused": {"max_age_seconds": max_age}}) |
111 | 117 | ||
118 | async def auth(self, username, token): | ||
119 | await self._set_mode(self.MODE_NORMAL) | ||
120 | result = await self.invoke({"auth": {"username": username, "token": token}}) | ||
121 | self.username = username | ||
122 | self.password = token | ||
123 | return result | ||
124 | |||
125 | async def refresh_token(self, username=None): | ||
126 | await self._set_mode(self.MODE_NORMAL) | ||
127 | m = {} | ||
128 | if username: | ||
129 | m["username"] = username | ||
130 | result = await self.invoke({"refresh-token": m}) | ||
131 | if self.username and result["username"] == self.username: | ||
132 | self.password = result["token"] | ||
133 | return result | ||
134 | |||
135 | async def set_user_perms(self, username, permissions): | ||
136 | await self._set_mode(self.MODE_NORMAL) | ||
137 | return await self.invoke({"set-user-perms": {"username": username, "permissions": permissions}}) | ||
138 | |||
139 | async def get_user(self, username=None): | ||
140 | await self._set_mode(self.MODE_NORMAL) | ||
141 | m = {} | ||
142 | if username: | ||
143 | m["username"] = username | ||
144 | return await self.invoke({"get-user": m}) | ||
145 | |||
146 | async def get_all_users(self): | ||
147 | await self._set_mode(self.MODE_NORMAL) | ||
148 | return (await self.invoke({"get-all-users": {}}))["users"] | ||
149 | |||
150 | async def new_user(self, username, permissions): | ||
151 | await self._set_mode(self.MODE_NORMAL) | ||
152 | return await self.invoke({"new-user": {"username": username, "permissions": permissions}}) | ||
153 | |||
154 | async def delete_user(self, username): | ||
155 | await self._set_mode(self.MODE_NORMAL) | ||
156 | return await self.invoke({"delete-user": {"username": username}}) | ||
157 | |||
112 | 158 | ||
113 | class Client(bb.asyncrpc.Client): | 159 | class Client(bb.asyncrpc.Client): |
114 | def __init__(self): | 160 | def __init__(self, username=None, password=None): |
161 | self.username = username | ||
162 | self.password = password | ||
163 | |||
115 | super().__init__() | 164 | super().__init__() |
116 | self._add_methods( | 165 | self._add_methods( |
117 | "connect_tcp", | 166 | "connect_tcp", |
@@ -126,7 +175,14 @@ class Client(bb.asyncrpc.Client): | |||
126 | "backfill_wait", | 175 | "backfill_wait", |
127 | "remove", | 176 | "remove", |
128 | "clean_unused", | 177 | "clean_unused", |
178 | "auth", | ||
179 | "refresh_token", | ||
180 | "set_user_perms", | ||
181 | "get_user", | ||
182 | "get_all_users", | ||
183 | "new_user", | ||
184 | "delete_user", | ||
129 | ) | 185 | ) |
130 | 186 | ||
131 | def _get_async_client(self): | 187 | def _get_async_client(self): |
132 | return AsyncClient() | 188 | return AsyncClient(self.username, self.password) |