summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/hashserv/client.py
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/hashserv/client.py')
-rw-r--r--bitbake/lib/hashserv/client.py42
1 files changed, 37 insertions, 5 deletions
diff --git a/bitbake/lib/hashserv/client.py b/bitbake/lib/hashserv/client.py
index 82400fe5aa..4457f8e50d 100644
--- a/bitbake/lib/hashserv/client.py
+++ b/bitbake/lib/hashserv/client.py
@@ -18,10 +18,11 @@ class AsyncClient(bb.asyncrpc.AsyncClient):
18 MODE_GET_STREAM = 1 18 MODE_GET_STREAM = 1
19 19
20 def __init__(self, username=None, password=None): 20 def __init__(self, username=None, password=None):
21 super().__init__('OEHASHEQUIV', '1.1', logger) 21 super().__init__("OEHASHEQUIV", "1.1", logger)
22 self.mode = self.MODE_NORMAL 22 self.mode = self.MODE_NORMAL
23 self.username = username 23 self.username = username
24 self.password = password 24 self.password = password
25 self.saved_become_user = None
25 26
26 async def setup_connection(self): 27 async def setup_connection(self):
27 await super().setup_connection() 28 await super().setup_connection()
@@ -29,8 +30,13 @@ class AsyncClient(bb.asyncrpc.AsyncClient):
29 self.mode = self.MODE_NORMAL 30 self.mode = self.MODE_NORMAL
30 await self._set_mode(cur_mode) 31 await self._set_mode(cur_mode)
31 if self.username: 32 if self.username:
33 # Save off become user temporarily because auth() resets it
34 become = self.saved_become_user
32 await self.auth(self.username, self.password) 35 await self.auth(self.username, self.password)
33 36
37 if become:
38 await self.become_user(become)
39
34 async def send_stream(self, msg): 40 async def send_stream(self, msg):
35 async def proc(): 41 async def proc():
36 await self.socket.send(msg) 42 await self.socket.send(msg)
@@ -92,7 +98,14 @@ class AsyncClient(bb.asyncrpc.AsyncClient):
92 async def get_outhash(self, method, outhash, taskhash, with_unihash=True): 98 async def get_outhash(self, method, outhash, taskhash, with_unihash=True):
93 await self._set_mode(self.MODE_NORMAL) 99 await self._set_mode(self.MODE_NORMAL)
94 return await self.invoke( 100 return await self.invoke(
95 {"get-outhash": {"outhash": outhash, "taskhash": taskhash, "method": method, "with_unihash": with_unihash}} 101 {
102 "get-outhash": {
103 "outhash": outhash,
104 "taskhash": taskhash,
105 "method": method,
106 "with_unihash": with_unihash,
107 }
108 }
96 ) 109 )
97 110
98 async def get_stats(self): 111 async def get_stats(self):
@@ -120,6 +133,7 @@ class AsyncClient(bb.asyncrpc.AsyncClient):
120 result = await self.invoke({"auth": {"username": username, "token": token}}) 133 result = await self.invoke({"auth": {"username": username, "token": token}})
121 self.username = username 134 self.username = username
122 self.password = token 135 self.password = token
136 self.saved_become_user = None
123 return result 137 return result
124 138
125 async def refresh_token(self, username=None): 139 async def refresh_token(self, username=None):
@@ -128,13 +142,19 @@ class AsyncClient(bb.asyncrpc.AsyncClient):
128 if username: 142 if username:
129 m["username"] = username 143 m["username"] = username
130 result = await self.invoke({"refresh-token": m}) 144 result = await self.invoke({"refresh-token": m})
131 if self.username and result["username"] == self.username: 145 if (
146 self.username
147 and not self.saved_become_user
148 and result["username"] == self.username
149 ):
132 self.password = result["token"] 150 self.password = result["token"]
133 return result 151 return result
134 152
135 async def set_user_perms(self, username, permissions): 153 async def set_user_perms(self, username, permissions):
136 await self._set_mode(self.MODE_NORMAL) 154 await self._set_mode(self.MODE_NORMAL)
137 return await self.invoke({"set-user-perms": {"username": username, "permissions": permissions}}) 155 return await self.invoke(
156 {"set-user-perms": {"username": username, "permissions": permissions}}
157 )
138 158
139 async def get_user(self, username=None): 159 async def get_user(self, username=None):
140 await self._set_mode(self.MODE_NORMAL) 160 await self._set_mode(self.MODE_NORMAL)
@@ -149,12 +169,23 @@ class AsyncClient(bb.asyncrpc.AsyncClient):
149 169
150 async def new_user(self, username, permissions): 170 async def new_user(self, username, permissions):
151 await self._set_mode(self.MODE_NORMAL) 171 await self._set_mode(self.MODE_NORMAL)
152 return await self.invoke({"new-user": {"username": username, "permissions": permissions}}) 172 return await self.invoke(
173 {"new-user": {"username": username, "permissions": permissions}}
174 )
153 175
154 async def delete_user(self, username): 176 async def delete_user(self, username):
155 await self._set_mode(self.MODE_NORMAL) 177 await self._set_mode(self.MODE_NORMAL)
156 return await self.invoke({"delete-user": {"username": username}}) 178 return await self.invoke({"delete-user": {"username": username}})
157 179
180 async def become_user(self, username):
181 await self._set_mode(self.MODE_NORMAL)
182 result = await self.invoke({"become-user": {"username": username}})
183 if username == self.username:
184 self.saved_become_user = None
185 else:
186 self.saved_become_user = username
187 return result
188
158 189
159class Client(bb.asyncrpc.Client): 190class Client(bb.asyncrpc.Client):
160 def __init__(self, username=None, password=None): 191 def __init__(self, username=None, password=None):
@@ -182,6 +213,7 @@ class Client(bb.asyncrpc.Client):
182 "get_all_users", 213 "get_all_users",
183 "new_user", 214 "new_user",
184 "delete_user", 215 "delete_user",
216 "become_user",
185 ) 217 )
186 218
187 def _get_async_client(self): 219 def _get_async_client(self):