@@ -77,6 +77,49 @@ def __eq__(self, other: object) -> bool:
7777 and self .read_only == other .read_only
7878 )
7979
80+ # -------------------------------------------------------------------
81+ # Synchronous store methods
82+ # -------------------------------------------------------------------
83+
84+ def get_sync (
85+ self ,
86+ key : str ,
87+ * ,
88+ prototype : BufferPrototype | None = None ,
89+ byte_range : ByteRequest | None = None ,
90+ ) -> Buffer | None :
91+ if prototype is None :
92+ prototype = default_buffer_prototype ()
93+ if not self ._is_open :
94+ self ._is_open = True
95+ assert isinstance (key , str )
96+ try :
97+ value = self ._store_dict [key ]
98+ start , stop = _normalize_byte_range_index (value , byte_range )
99+ return prototype .buffer .from_buffer (value [start :stop ])
100+ except KeyError :
101+ return None
102+
103+ def set_sync (self , key : str , value : Buffer ) -> None :
104+ self ._check_writable ()
105+ if not self ._is_open :
106+ self ._is_open = True
107+ assert isinstance (key , str )
108+ if not isinstance (value , Buffer ):
109+ raise TypeError (
110+ f"MemoryStore.set(): `value` must be a Buffer instance. Got an instance of { type (value )} instead."
111+ )
112+ self ._store_dict [key ] = value
113+
114+ def delete_sync (self , key : str ) -> None :
115+ self ._check_writable ()
116+ if not self ._is_open :
117+ self ._is_open = True
118+ try :
119+ del self ._store_dict [key ]
120+ except KeyError :
121+ logger .debug ("Key %s does not exist." , key )
122+
80123 async def get (
81124 self ,
82125 key : str ,
@@ -122,14 +165,33 @@ async def set(self, key: str, value: Buffer, byte_range: tuple[int, int] | None
122165 raise TypeError (
123166 f"MemoryStore.set(): `value` must be a Buffer instance. Got an instance of { type (value )} instead."
124167 )
125-
126168 if byte_range is not None :
127169 buf = self ._store_dict [key ]
128170 buf [byte_range [0 ] : byte_range [1 ]] = value
129171 self ._store_dict [key ] = buf
130172 else :
131173 self ._store_dict [key ] = value
132174
175+ def _set_range_impl (self , key : str , value : Buffer , start : int ) -> None :
176+ buf = self ._store_dict [key ]
177+ target = buf .as_numpy_array ()
178+ if start + len (value ) > len (target ):
179+ raise ValueError (
180+ f"set_range would write beyond the end of the stored value: "
181+ f"start={ start } , len(value)={ len (value )} , stored size={ len (target )} "
182+ )
183+ if not target .flags .writeable :
184+ target = target .copy ()
185+ self ._store_dict [key ] = buf .__class__ (target )
186+ target [start : start + len (value )] = value .as_numpy_array ()
187+
188+ def set_range_sync (self , key : str , value : Buffer , start : int ) -> None :
189+ """Synchronous byte-range write."""
190+ self ._check_writable ()
191+ if not self ._is_open :
192+ self ._is_open = True
193+ self ._set_range_impl (key , value , start )
194+
133195 async def set_if_not_exists (self , key : str , value : Buffer ) -> None :
134196 # docstring inherited
135197 self ._check_writable ()
0 commit comments