@@ -39,6 +39,25 @@ async def update(self, changes):
39
39
body = await resp .content .read ()
40
40
resp .raise_for_status ()
41
41
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
+
42
61
async def handle_request (self , request ):
43
62
if not request :
44
63
raise ProtocolError ("invalid command" )
@@ -72,6 +91,22 @@ async def handle_request(self, request):
72
91
)
73
92
return ""
74
93
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
+
75
110
raise ProtocolError ("invalid command" )
76
111
77
112
0 commit comments