Skip to content

Commit d6cafde

Browse files
committed
Add attribute support to the legacy proxy
Fixes #42
1 parent 7a3d17e commit d6cafde

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed

proxy/proxy.py

+35
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,25 @@ async def update(self, changes):
3939
body = await resp.content.read()
4040
resp.raise_for_status()
4141

42+
async def get_attribute(self, name):
43+
url = self.index_url + f"/{self.index_name}"
44+
headers = {
45+
"Content-Type": "application/vnd.msgpack",
46+
"Accept": "application/vnd.msgpack",
47+
}
48+
async with self.session.get(url, headers=headers) as resp:
49+
resp.raise_for_status()
50+
body = msgpack.loads(await resp.content.read())
51+
return body['a'].get(name, 0)
52+
53+
async def set_attribute(self, name, value):
54+
changes = [
55+
{
56+
's': {'n': name, 'v': value}
57+
}
58+
]
59+
await self.update(changes)
60+
4261
async def handle_request(self, request):
4362
if not request:
4463
raise ProtocolError("invalid command")
@@ -72,6 +91,22 @@ async def handle_request(self, request):
7291
)
7392
return ""
7493

94+
if request[0] == 'get':
95+
if len(request) == 3 and request[1] == 'attribute':
96+
value = await self.get_attribute(request[2])
97+
return str(value)
98+
elif len(request) == 2:
99+
value = await self.get_attribute(request[1])
100+
return str(value)
101+
102+
if request[0] == 'set':
103+
if len(request) == 4 and request[1] == 'attribute':
104+
await self.set_attribute(request[2], int(request[3]))
105+
return ''
106+
elif len(request) == 3:
107+
await self.set_attribute(request[1], int(request[2]))
108+
return ''
109+
75110
raise ProtocolError("invalid command")
76111

77112

0 commit comments

Comments
 (0)