fix dict delete + plugin
This commit is contained in:
@@ -312,9 +312,31 @@ class ResourceHandler_dict(
|
||||
|
||||
_dict: dict[T_DictKey, T_DictValues] = cast(dict[T_DictKey, T_DictValues], self.resource)
|
||||
|
||||
plugin_dict: ResourcePlugin_dict | None = None
|
||||
if self.req.get_resource_origin(1) in self.prev_handler.resource._plugins_:
|
||||
plugin_dict = cast(
|
||||
ResourcePlugin_dict,
|
||||
self.prev_handler.resource._plugins_[self.req.get_resource_origin(1)],
|
||||
)
|
||||
plugin_dict.set_context(self.req, self.req.get_root_resource())
|
||||
|
||||
if params.API_key is not None:
|
||||
del _dict[dict_key_type(params.API_key)]
|
||||
if issubclass(dict_key_type, bytes):
|
||||
key_byte = dict_key_type(params.API_key, "utf-8")
|
||||
if plugin_dict:
|
||||
plugin_dict.handle_dict_delete(_dict, key_byte, params)
|
||||
return None
|
||||
del _dict[key_byte]
|
||||
else:
|
||||
key_std = dict_key_type(params.API_key)
|
||||
if plugin_dict:
|
||||
plugin_dict.handle_dict_delete(_dict, key_std, params)
|
||||
return None
|
||||
del _dict[key_std]
|
||||
else:
|
||||
if plugin_dict:
|
||||
plugin_dict.handle_dict_delete_all(_dict, params)
|
||||
return None
|
||||
_dict.clear()
|
||||
return
|
||||
|
||||
@@ -407,35 +429,26 @@ class ResourceHandler_dict_elem(
|
||||
assert isinstance(self.prev_handler.resource, RestResourceBase)
|
||||
|
||||
dict_key_type: T_T_DictKey = self.prev_handler.resource._dict_key_type_[self.req.get_resource_origin(1)]
|
||||
_dict: dict[T_DictKey, T_DictValues] = cast(dict[T_DictKey, T_DictValues], self.resource)
|
||||
|
||||
plugin_dict: ResourcePlugin_dict | None = None
|
||||
if self.req.get_resource_origin(1) in self.prev_handler.resource._plugins_:
|
||||
plugin_dict = cast(
|
||||
ResourcePlugin_dict,
|
||||
self.prev_handler.resource._plugins_[self.req.get_resource_origin(1)],
|
||||
)
|
||||
plugin_dict.set_context(self.req, self.req.get_root_resource())
|
||||
|
||||
if issubclass(dict_key_type, bytes):
|
||||
key_byte = dict_key_type(self.req.get_resource_origin(0), "utf-8")
|
||||
dict_byte: dict[T_DictKey, T_DictValues] = cast(dict[T_DictKey, T_DictValues], self.resource)
|
||||
|
||||
if self.req.get_resource_origin(1) in self.prev_handler.resource._plugins_:
|
||||
plugin_dict: ResourcePlugin_dict = cast(
|
||||
ResourcePlugin_dict,
|
||||
self.prev_handler.resource._plugins_[self.req.get_resource_origin(1)],
|
||||
)
|
||||
|
||||
plugin_dict.set_context(self.req, self.req.get_root_resource())
|
||||
return plugin_dict.handle_dict_elem_get(dict_byte, key_byte, params)
|
||||
|
||||
return dict_byte[key_byte]
|
||||
if plugin_dict:
|
||||
return plugin_dict.handle_dict_elem_get(_dict, key_byte, params)
|
||||
return _dict[key_byte]
|
||||
else:
|
||||
key_std = dict_key_type(self.req.get_resource_origin(0))
|
||||
dict_std: dict[T_DictKey, T_DictValues] = cast(dict[T_DictKey, T_DictValues], self.resource)
|
||||
|
||||
if self.req.get_resource_origin(1) in self.prev_handler.resource._plugins_:
|
||||
plugin_dict: ResourcePlugin_dict = cast(
|
||||
ResourcePlugin_dict,
|
||||
self.prev_handler.resource._plugins_[self.req.get_resource_origin(1)],
|
||||
)
|
||||
|
||||
plugin_dict.set_context(self.req, self.req.get_root_resource())
|
||||
return plugin_dict.handle_dict_elem_get(dict_std, key_std, params)
|
||||
|
||||
return dict_std[key_std]
|
||||
if plugin_dict:
|
||||
return plugin_dict.handle_dict_elem_get(_dict, key_std, params)
|
||||
return _dict[key_std]
|
||||
|
||||
def _handle_process_delete(self, params) -> None:
|
||||
# print(f"{type(self).__name__}->_handle_process_delete()")
|
||||
@@ -449,33 +462,25 @@ class ResourceHandler_dict_elem(
|
||||
assert isinstance(self.prev_handler.resource, RestResourceBase)
|
||||
|
||||
dict_key_type: T_T_DictKey = self.prev_handler.resource._dict_key_type_[self.req.get_resource_origin(2)]
|
||||
_dict: dict[T_DictKey, T_DictValues] = cast(dict[T_DictKey, T_DictValues], self.resource)
|
||||
|
||||
plugin_dict: ResourcePlugin_dict | None = None
|
||||
if self.req.get_resource_origin(2) in self.prev_handler.resource._plugins_:
|
||||
plugin_dict = cast(ResourcePlugin_dict, self.prev_handler.resource._plugins_[self.req.get_resource_origin(2)])
|
||||
plugin_dict.set_context(self.req, self.req.get_root_resource())
|
||||
|
||||
if issubclass(dict_key_type, bytes):
|
||||
key_byte = dict_key_type(self.req.get_resource_origin(1), "utf-8")
|
||||
dict_byte: dict[T_DictKey, T_DictValues] = cast(dict[T_DictKey, T_DictValues], self.resource)
|
||||
|
||||
if self.req.get_resource_origin(2) in self.prev_handler.resource._plugins_:
|
||||
plugin_dict: ResourcePlugin_dict = cast(
|
||||
ResourcePlugin_dict, self.prev_handler.resource._plugins_[self.req.get_resource_origin(2)]
|
||||
)
|
||||
plugin_dict.set_context(self.req, self.req.get_root_resource())
|
||||
plugin_dict.handle_dict_delete(dict_byte, key_byte, params)
|
||||
if plugin_dict:
|
||||
plugin_dict.handle_dict_delete(_dict, key_byte, params)
|
||||
return None
|
||||
|
||||
del dict_byte[key_byte]
|
||||
del _dict[key_byte]
|
||||
else:
|
||||
key_std = dict_key_type(self.req.get_resource_origin(1))
|
||||
dict_std: dict[T_DictKey, T_DictValues] = cast(dict[T_DictKey, T_DictValues], self.resource)
|
||||
|
||||
if self.req.get_resource_origin(2) in self.prev_handler.resource._plugins_:
|
||||
plugin_dict: ResourcePlugin_dict = cast(
|
||||
ResourcePlugin_dict, self.prev_handler.resource._plugins_[self.req.get_resource_origin(2)]
|
||||
)
|
||||
plugin_dict.set_context(self.req, self.req.get_root_resource())
|
||||
plugin_dict.handle_dict_delete(dict_std, key_std, params)
|
||||
if plugin_dict:
|
||||
plugin_dict.handle_dict_delete(_dict, key_std, params)
|
||||
return None
|
||||
|
||||
del dict_std[key_std]
|
||||
del _dict[key_std]
|
||||
|
||||
|
||||
@ResourceHandler.register_resource_handler
|
||||
|
||||
@@ -6,7 +6,6 @@ from typing import (
|
||||
TYPE_CHECKING,
|
||||
)
|
||||
|
||||
from pydantic import BaseModel
|
||||
from pydantic.fields import FieldInfo
|
||||
|
||||
from .rest_resource import RestResourceBase
|
||||
|
||||
@@ -38,9 +38,6 @@ def init_classes():
|
||||
resource_dict: dict[str, Test_Record],
|
||||
params: RestRequestParams_Dict_GET,
|
||||
) -> list[str]:
|
||||
# print("HOOK handle_dict_get_keys")
|
||||
# print(resource_dict)
|
||||
# print(params)
|
||||
result = super().handle_dict_get_keys(resource_dict, params)
|
||||
if self.static_Test_Record_active is True:
|
||||
result.append("static_elem")
|
||||
@@ -52,10 +49,6 @@ def init_classes():
|
||||
key: str,
|
||||
params: RestRequestParams_Dict_elem_GET,
|
||||
) -> Test_Record:
|
||||
# print("HOOK handle_dict_elem_get")
|
||||
# print(resource_dict)
|
||||
# print(key)
|
||||
# print(params)
|
||||
if key == "static_elem":
|
||||
if self.static_Test_Record_active is True:
|
||||
return self.static_Test_Record
|
||||
@@ -69,16 +62,19 @@ def init_classes():
|
||||
key: str,
|
||||
params: RestRequestParams_Dict_DELETE[str],
|
||||
) -> None:
|
||||
print("HOOK handle_dict_delete")
|
||||
print(resource_dict)
|
||||
print(key)
|
||||
print(params)
|
||||
print(self.static_Test_Record_active)
|
||||
if key == "static_elem":
|
||||
self.static_Test_Record_active = False
|
||||
else:
|
||||
del resource_dict[key]
|
||||
|
||||
def handle_dict_delete_all(
|
||||
self,
|
||||
resource_dict: dict[str, Test_Record],
|
||||
params: RestRequestParams_Dict_DELETE[str],
|
||||
) -> None:
|
||||
self.static_Test_Record_active = False
|
||||
resource_dict.clear()
|
||||
|
||||
@register_rest_rootpoint
|
||||
class RootApp(RestResourceBase):
|
||||
str_dict_Test_Record: dict[str, Test_Record] = RestField(
|
||||
@@ -116,14 +112,34 @@ class Test_RestAPI_Plugin_Dict(unittest.TestCase):
|
||||
self.assertEqual(result.get_result(), '{"test_str": "mytest", "test_int": 84}')
|
||||
|
||||
def test_delete_dict_elems(self):
|
||||
result = self.testapp.process_request("/str_dict_Test_Record/test", rsrc_verb.DELETE)
|
||||
print(result.get_result())
|
||||
self.testapp.process_request("/str_dict_Test_Record/test", rsrc_verb.DELETE)
|
||||
|
||||
result = self.testapp.process_request("/str_dict_Test_Record", rsrc_verb.GET)
|
||||
self.assertEqual(result.get_result(), '["static_elem"]')
|
||||
|
||||
result = self.testapp.process_request("/str_dict_Test_Record/static_elem", rsrc_verb.DELETE)
|
||||
print(result.get_result())
|
||||
self.testapp.process_request("/str_dict_Test_Record/static_elem", rsrc_verb.DELETE)
|
||||
|
||||
result = self.testapp.process_request("/str_dict_Test_Record", rsrc_verb.GET)
|
||||
self.assertEqual(result.get_result(), "[]")
|
||||
|
||||
def test_delete_all_dict_elems(self):
|
||||
self.testapp.process_request("/str_dict_Test_Record/test", rsrc_verb.DELETE)
|
||||
|
||||
result = self.testapp.process_request("/str_dict_Test_Record", rsrc_verb.GET)
|
||||
self.assertEqual(result.get_result(), '["static_elem"]')
|
||||
|
||||
self.testapp.process_request("/str_dict_Test_Record", rsrc_verb.DELETE)
|
||||
|
||||
result = self.testapp.process_request("/str_dict_Test_Record", rsrc_verb.GET)
|
||||
self.assertEqual(result.get_result(), "[]")
|
||||
|
||||
def test_delete_dict_elems_API_key(self):
|
||||
self.testapp.process_request("/str_dict_Test_Record/test", rsrc_verb.DELETE)
|
||||
|
||||
result = self.testapp.process_request("/str_dict_Test_Record", rsrc_verb.GET)
|
||||
self.assertEqual(result.get_result(), '["static_elem"]')
|
||||
|
||||
self.testapp.process_request("/str_dict_Test_Record?API_key=static_elem", rsrc_verb.DELETE)
|
||||
|
||||
result = self.testapp.process_request("/str_dict_Test_Record", rsrc_verb.GET)
|
||||
self.assertEqual(result.get_result(), "[]")
|
||||
|
||||
Reference in New Issue
Block a user