1
1
import json
2
2
from typing import Dict , List
3
3
4
+ from jsonpickle import encode
5
+ from jsonpickle .unpickler import Unpickler
6
+
4
7
from azure .storage .blob import BlockBlobService , Blob , PublicAccess
5
- from botbuilder .core import Storage , StoreItem
8
+ from botbuilder .core import Storage
6
9
7
10
# TODO: sanitize_blob_name
8
11
@@ -59,7 +62,7 @@ async def read(self, keys: List[str]) -> Dict[str, object]:
59
62
60
63
return items
61
64
62
- async def write (<
8000
span class="pl-s1">self, changes : Dict [str , StoreItem ]):
65
+ async def write (self , changes : Dict [str , object ]):
63
66
self .client .create_container (self .settings .container_name )
64
67
self .client .set_container_acl (
65
68
self .settings .container_name , public_access = PublicAccess .Container
@@ -71,10 +74,11 @@ async def write(self, changes: Dict[str, StoreItem]):
71
74
)
72
75
if e_tag :
73
76
item .e_tag = e_tag .replace ('"' , '\\ "' )
77
+ item_str = self ._store_item_to_str (item )
74
78
self .client .create_blob_from_text (
75
79
container_name = self .settings .container_name ,
76
80
blob_name = name ,
77
- text = str ( item ) ,
81
+ text = item_str ,
78
82
if_match = e_tag ,
79
83
)
80
84
@@ -95,8 +99,12 @@ async def delete(self, keys: List[str]):
95
99
container_name = self .settings .container_name , blob_name = key
96
100
)
97
101
98
- def _blob_to_store_item (self , blob : Blob ) -> StoreItem :
102
+ def _blob_to_store_item (self , blob : Blob ) -> object :
99
103
item = json .loads (blob .content )
100
104
item ["e_tag" ] = blob .properties .etag
101
105
item ["id" ] = blob .name
102
- return StoreItem (** item )
106
+ result = Unpickler ().restore (item )
107
+ return result
108
+
109
+ def _store_item_to_str (self , item : object ) -> str :
110
+ return encode (item )
0 commit comments