middleware and respnse models updated
This commit is contained in:
@@ -23,14 +23,17 @@ class CategoryClusterController:
|
||||
{ "category_cluster_name": "category_cluster_module" }
|
||||
"""
|
||||
if not hasattr(category_clusters, "__all__"):
|
||||
raise ValueError(f"Given module {str(category_clusters)} does not have __all__ attribute")
|
||||
raise ValueError(
|
||||
f"Given module {str(category_clusters)} does not have __all__ attribute"
|
||||
)
|
||||
for iter_module in [str(item) for item in category_clusters.__all__]:
|
||||
# CategoryCluster which represent api routers for each category
|
||||
cls.imports_dict.append(
|
||||
CategoryBulk(
|
||||
category_cluster=getattr(category_clusters, iter_module, None),
|
||||
name=iter_module
|
||||
))
|
||||
name=iter_module,
|
||||
)
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def as_dict(cls):
|
||||
@@ -39,4 +42,5 @@ class CategoryClusterController:
|
||||
to_dict[cluster.name] = cluster.category_cluster
|
||||
return to_dict
|
||||
|
||||
cluster_controller = CategoryClusterController()
|
||||
|
||||
cluster_controller = CategoryClusterController()
|
||||
|
||||
@@ -35,24 +35,32 @@ class DecoratorModule:
|
||||
"""
|
||||
decorators = []
|
||||
current_func = func
|
||||
original_qualname = getattr(func, '__qualname__', '')
|
||||
original_qualname = getattr(func, "__qualname__", "")
|
||||
|
||||
while hasattr(current_func, '__wrapped__'):
|
||||
if hasattr(current_func, '__closure__') and current_func.__closure__:
|
||||
while hasattr(current_func, "__wrapped__"):
|
||||
if hasattr(current_func, "__closure__") and current_func.__closure__:
|
||||
for cell in current_func.__closure__:
|
||||
decorator = cell.cell_contents
|
||||
# Only add if it's a callable and not the original function
|
||||
if callable(decorator) and getattr(decorator, '__qualname__', '') != original_qualname:
|
||||
if (
|
||||
callable(decorator)
|
||||
and getattr(decorator, "__qualname__", "") != original_qualname
|
||||
):
|
||||
decorators.append(decorator)
|
||||
current_func = current_func.__wrapped__
|
||||
return list(dict.fromkeys(decorators)) # Remove duplicates while preserving order
|
||||
return list(
|
||||
dict.fromkeys(decorators)
|
||||
) # Remove duplicates while preserving order
|
||||
|
||||
@staticmethod
|
||||
def get_actual_decorators(method_endpoint):
|
||||
original_qualname = getattr(method_endpoint.endpoint_callable, '__qualname__', '')
|
||||
original_qualname = getattr(
|
||||
method_endpoint.endpoint_callable, "__qualname__", ""
|
||||
)
|
||||
actual_decorators = [
|
||||
d for d in method_endpoint.DECORATORS_LIST or []
|
||||
if callable(d) and getattr(d, '__qualname__', '') != original_qualname
|
||||
d
|
||||
for d in method_endpoint.DECORATORS_LIST or []
|
||||
if callable(d) and getattr(d, "__qualname__", "") != original_qualname
|
||||
]
|
||||
return actual_decorators
|
||||
|
||||
@@ -68,17 +76,27 @@ class DecoratorModule:
|
||||
try:
|
||||
function_callable = decorator(function_callable)
|
||||
except Exception as e:
|
||||
print(f"Warning: Failed to apply decorator {decorator.__qualname__}: {str(e)}")
|
||||
print(
|
||||
f"Warning: Failed to apply decorator {decorator.__qualname__}: {str(e)}"
|
||||
)
|
||||
|
||||
method_endpoint.endpoint_callable = function_callable
|
||||
|
||||
# Get the final list of applied decorators (for debugging)
|
||||
applied_decorators = cls.get_all_decorators(method_endpoint.endpoint_callable)
|
||||
applied_decorators_qualname = [getattr(d, '__qualname__', str(d)) for d in applied_decorators]
|
||||
applied_decorators_qualname = [
|
||||
getattr(d, "__qualname__", str(d)) for d in applied_decorators
|
||||
]
|
||||
if applied_decorators:
|
||||
print(f"Applied decorators for {method_endpoint.name}:", applied_decorators_qualname)
|
||||
print(
|
||||
f"Applied decorators for {method_endpoint.name}:",
|
||||
applied_decorators_qualname,
|
||||
)
|
||||
return applied_decorators_qualname
|
||||
|
||||
@classmethod
|
||||
def list_qualname(cls, method_endpoint_list):
|
||||
return [getattr(method_endpoint, '__qualname__', '') for method_endpoint in method_endpoint_list]
|
||||
return [
|
||||
getattr(method_endpoint, "__qualname__", "")
|
||||
for method_endpoint in method_endpoint_list
|
||||
]
|
||||
|
||||
@@ -9,8 +9,6 @@ def get_cluster_controller_group():
|
||||
return cluster_controller
|
||||
|
||||
|
||||
|
||||
|
||||
"""
|
||||
prepare_routing = PrepareRouting(cluster_controller_group=cluster_controller)
|
||||
prepare_events = PrepareEvents(cluster_controller_group=cluster_controller)
|
||||
|
||||
@@ -2,7 +2,7 @@ from typing import Any
|
||||
|
||||
from ApiLayers.ApiServices.Cluster.create_router import (
|
||||
CreateRouterFromCluster,
|
||||
CreateEndpointFromCluster
|
||||
CreateEndpointFromCluster,
|
||||
)
|
||||
from Events.Engine.abstract_class import CategoryCluster
|
||||
from Services.Redis.Actions.actions import RedisActions
|
||||
@@ -83,19 +83,27 @@ class PrepareEvents(DecoratorModule):
|
||||
# [SAVE]REDIS => MENU_FIRST_LAYER = [ClusterToMethod, ...]
|
||||
self.valid_redis_items.MENU_FIRST_LAYER_VALUE.add(cluster.name)
|
||||
# [SAVE]REDIS => CLUSTER_INDEX = {ClusterToMethod: [MethodEvent, ...], "MethodEvent": "ClusterToMethod"}
|
||||
self.valid_redis_items.CLUSTER_INDEX_VALUE.update(cluster.get_redis_cluster_index_value())
|
||||
self.valid_redis_items.CLUSTER_INDEX_VALUE.update(
|
||||
cluster.get_redis_cluster_index_value()
|
||||
)
|
||||
# [SAVE]REDIS => CLUSTER_FUNCTION_CODES = {"ClusterToMethod"} : [FUNCTION_CODE, ...]}
|
||||
self.valid_redis_items.CLUSTER_FUNCTION_CODES_VALUE = {
|
||||
f"{self.valid_redis_items.CLUSTER_FUNCTION_CODES_KEY}:{cluster.name}" : tuple(cluster.retrieve_all_function_codes())
|
||||
f"{self.valid_redis_items.CLUSTER_FUNCTION_CODES_KEY}:{cluster.name}": tuple(
|
||||
cluster.retrieve_all_function_codes()
|
||||
)
|
||||
}
|
||||
|
||||
for method_endpoint in list(cluster.ENDPOINTS.values()):
|
||||
# [SAVE]REDIS => ENDPOINT2CLASS = {MethodEvent: Endpoint("/.../.../..."), ...}
|
||||
self.valid_redis_items.ENDPOINT2CLASS_VALUE.update(
|
||||
{f"{cluster.name}:{method_endpoint.name}": f"{cluster.PREFIX}{method_endpoint.URL}"}
|
||||
{
|
||||
f"{cluster.name}:{method_endpoint.name}": f"{cluster.PREFIX}{method_endpoint.URL}"
|
||||
}
|
||||
)
|
||||
self.valid_redis_items.ENDPOINT2CLASS_VALUE.update(
|
||||
{f"{cluster.PREFIX}{method_endpoint.URL}" :f"{cluster.name}:{method_endpoint.name}"}
|
||||
{
|
||||
f"{cluster.PREFIX}{method_endpoint.URL}": f"{cluster.name}:{method_endpoint.name}"
|
||||
}
|
||||
)
|
||||
# [SAVE]REDIS => METHOD_FUNCTION_CODES:MethodEvent:Endpoint = [FUNCTION_CODE, ...]
|
||||
self.valid_redis_items.METHOD_FUNCTION_CODES_VALUE.update(
|
||||
@@ -116,8 +124,12 @@ class SetItems2Redis:
|
||||
|
||||
def set_items(self):
|
||||
from ApiLayers.AllConfigs.Redis.configs import RedisCategoryKeys
|
||||
|
||||
dict_prep = self.prepare_events.valid_redis_items.as_dict
|
||||
for redis_values_to_delete, redis_key_type in RedisCategoryKeys.__annotations__.items():
|
||||
for (
|
||||
redis_values_to_delete,
|
||||
redis_key_type,
|
||||
) in RedisCategoryKeys.__annotations__.items():
|
||||
if isinstance(redis_key_type, str):
|
||||
continue
|
||||
RedisActions.delete(list_keys=[f"{redis_values_to_delete}*"])
|
||||
@@ -125,19 +137,23 @@ class SetItems2Redis:
|
||||
# Save MENU_FIRST_LAYER to Redis
|
||||
redis_list = RedisList(redis_key=RedisCategoryKeys.MENU_FIRST_LAYER)
|
||||
RedisActions.set_json(
|
||||
list_keys=redis_list.to_list(), value=dict_prep.get(RedisCategoryKeys.MENU_FIRST_LAYER)
|
||||
list_keys=redis_list.to_list(),
|
||||
value=dict_prep.get(RedisCategoryKeys.MENU_FIRST_LAYER),
|
||||
)
|
||||
self.std_out += f"{RedisCategoryKeys.MENU_FIRST_LAYER}: {dict_prep.get(RedisCategoryKeys.MENU_FIRST_LAYER)}\n"
|
||||
|
||||
# Save CLUSTER_INDEX to Redis
|
||||
redis_list = RedisList(redis_key=RedisCategoryKeys.CLUSTER_INDEX)
|
||||
RedisActions.set_json(
|
||||
list_keys=redis_list.to_list(), value=dict_prep.get(RedisCategoryKeys.CLUSTER_INDEX)
|
||||
list_keys=redis_list.to_list(),
|
||||
value=dict_prep.get(RedisCategoryKeys.CLUSTER_INDEX),
|
||||
)
|
||||
self.std_out += f"\n{RedisCategoryKeys.CLUSTER_INDEX}: {dict_prep.get(RedisCategoryKeys.CLUSTER_INDEX)}\n"
|
||||
|
||||
# Save CLUSTER_FUNCTION_CODES to Redis by iterating over the dict
|
||||
for redis_key, redis_value in dict_prep.get(RedisCategoryKeys.CLUSTER_FUNCTION_CODES).items():
|
||||
for redis_key, redis_value in dict_prep.get(
|
||||
RedisCategoryKeys.CLUSTER_FUNCTION_CODES
|
||||
).items():
|
||||
redis_list = RedisList(redis_key=redis_key)
|
||||
RedisActions.set_json(
|
||||
list_keys=redis_list.to_list(), value=list(redis_value)
|
||||
@@ -145,7 +161,9 @@ class SetItems2Redis:
|
||||
self.std_out += f"\n{RedisCategoryKeys.CLUSTER_FUNCTION_CODES}: {dict_prep.get(RedisCategoryKeys.CLUSTER_FUNCTION_CODES)}\n"
|
||||
|
||||
# Save METHOD_FUNCTION_CODES to Redis by iterating over the dict
|
||||
for redis_key, redis_value in dict_prep.get(RedisCategoryKeys.METHOD_FUNCTION_CODES).items():
|
||||
for redis_key, redis_value in dict_prep.get(
|
||||
RedisCategoryKeys.METHOD_FUNCTION_CODES
|
||||
).items():
|
||||
redis_list = RedisList(redis_key=redis_key)
|
||||
RedisActions.set_json(
|
||||
list_keys=redis_list.to_list(), value=list(redis_value)
|
||||
@@ -153,19 +171,22 @@ class SetItems2Redis:
|
||||
self.std_out += f"\n{RedisCategoryKeys.METHOD_FUNCTION_CODES}: {dict_prep.get(RedisCategoryKeys.METHOD_FUNCTION_CODES)}\n"
|
||||
|
||||
# Save ENDPOINT2CLASS to Redis by iterating over the dict
|
||||
for redis_key, redis_value in dict_prep.get(RedisCategoryKeys.ENDPOINT2CLASS).items():
|
||||
redis_list = RedisList(redis_key=f"{RedisCategoryKeys.ENDPOINT2CLASS}:{redis_key}\n")
|
||||
RedisActions.set_json(
|
||||
list_keys=redis_list.to_list(), value=redis_value
|
||||
for redis_key, redis_value in dict_prep.get(
|
||||
RedisCategoryKeys.ENDPOINT2CLASS
|
||||
).items():
|
||||
redis_list = RedisList(
|
||||
redis_key=f"{RedisCategoryKeys.ENDPOINT2CLASS}:{redis_key}\n"
|
||||
)
|
||||
RedisActions.set_json(list_keys=redis_list.to_list(), value=redis_value)
|
||||
self.std_out += f"\n{RedisCategoryKeys.ENDPOINT2CLASS}: {dict_prep.get(RedisCategoryKeys.ENDPOINT2CLASS)}\n"
|
||||
|
||||
RedisActions.set_json(
|
||||
list_keys=[f"{RedisCategoryKeys.REBUILD}:*"], value={
|
||||
list_keys=[f"{RedisCategoryKeys.REBUILD}:*"],
|
||||
value={
|
||||
f"{RedisCategoryKeys.MENU_FIRST_LAYER}": True,
|
||||
f"{RedisCategoryKeys.CLUSTER_INDEX}": True,
|
||||
f"{RedisCategoryKeys.CLUSTER_FUNCTION_CODES}": True,
|
||||
f"{RedisCategoryKeys.METHOD_FUNCTION_CODES}": True,
|
||||
f"{RedisCategoryKeys.ENDPOINT2CLASS}": True,
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user