fix(feishu): test SDK globals by None-ness, not globals() membership

The no-SDK fallback guards check '"Name" in globals()' — correct on
main where a failed module-level import leaves those names undefined,
but the deferred-import port pre-binds every SDK name to None, so the
guard was always true and the fallback paths called .builder() on None
(AttributeError) wherever lark_oapi isn't installed. Local runs passed
because lark IS installed here; CI's default env has no feishu extra.
Rewrote all 14 guards to 'is not None', which is correct under both
conditions. Verified by simulating CI with a lark-blocking meta_path
hook: 74 passed, 18 skipped (the skipUnless set), zero failures.
This commit is contained in:
kshitijk4poor 2026-08-03 17:20:20 +05:30 committed by kshitij
parent f84e3687d8
commit e80b7aeda1
1 changed files with 14 additions and 14 deletions

View File

@ -5051,19 +5051,19 @@ class FeishuAdapter(BasePlatformAdapter):
@staticmethod
def _build_get_chat_request(chat_id: str) -> Any:
if "GetChatRequest" in globals():
if GetChatRequest is not None:
return GetChatRequest.builder().chat_id(chat_id).build()
return SimpleNamespace(chat_id=chat_id)
@staticmethod
def _build_get_message_request(message_id: str) -> Any:
if "GetMessageRequest" in globals():
if GetMessageRequest is not None:
return GetMessageRequest.builder().message_id(message_id).build()
return SimpleNamespace(message_id=message_id)
@staticmethod
def _build_message_resource_request(*, message_id: str, file_key: str, resource_type: str) -> Any:
if "GetMessageResourceRequest" in globals():
if GetMessageResourceRequest is not None:
return (
GetMessageResourceRequest.builder()
.message_id(message_id)
@ -5075,7 +5075,7 @@ class FeishuAdapter(BasePlatformAdapter):
@staticmethod
def _build_get_application_request(*, app_id: str, lang: str) -> Any:
if "GetApplicationRequest" in globals():
if GetApplicationRequest is not None:
return (
GetApplicationRequest.builder()
.app_id(app_id)
@ -5086,7 +5086,7 @@ class FeishuAdapter(BasePlatformAdapter):
@staticmethod
def _build_reply_message_body(*, content: str, msg_type: str, reply_in_thread: bool, uuid_value: str) -> Any:
if "ReplyMessageRequestBody" in globals():
if ReplyMessageRequestBody is not None:
return (
ReplyMessageRequestBody.builder()
.content(content)
@ -5104,7 +5104,7 @@ class FeishuAdapter(BasePlatformAdapter):
@staticmethod
def _build_reply_message_request(message_id: str, request_body: Any) -> Any:
if "ReplyMessageRequest" in globals():
if ReplyMessageRequest is not None:
return (
ReplyMessageRequest.builder()
.message_id(message_id)
@ -5115,7 +5115,7 @@ class FeishuAdapter(BasePlatformAdapter):
@staticmethod
def _build_update_message_body(*, msg_type: str, content: str) -> Any:
if "UpdateMessageRequestBody" in globals():
if UpdateMessageRequestBody is not None:
return (
UpdateMessageRequestBody.builder()
.msg_type(msg_type)
@ -5126,7 +5126,7 @@ class FeishuAdapter(BasePlatformAdapter):
@staticmethod
def _build_update_message_request(message_id: str, request_body: Any) -> Any:
if "UpdateMessageRequest" in globals():
if UpdateMessageRequest is not None:
return (
UpdateMessageRequest.builder()
.message_id(message_id)
@ -5137,7 +5137,7 @@ class FeishuAdapter(BasePlatformAdapter):
@staticmethod
def _build_create_message_body(*, receive_id: str, msg_type: str, content: str, uuid_value: str) -> Any:
if "CreateMessageRequestBody" in globals():
if CreateMessageRequestBody is not None:
return (
CreateMessageRequestBody.builder()
.receive_id(receive_id)
@ -5155,7 +5155,7 @@ class FeishuAdapter(BasePlatformAdapter):
@staticmethod
def _build_create_message_request(receive_id_type: str, request_body: Any) -> Any:
if "CreateMessageRequest" in globals():
if CreateMessageRequest is not None:
return (
CreateMessageRequest.builder()
.receive_id_type(receive_id_type)
@ -5166,7 +5166,7 @@ class FeishuAdapter(BasePlatformAdapter):
@staticmethod
def _build_image_upload_body(*, image_type: str, image: Any) -> Any:
if "CreateImageRequestBody" in globals():
if CreateImageRequestBody is not None:
return (
CreateImageRequestBody.builder()
.image_type(image_type)
@ -5177,13 +5177,13 @@ class FeishuAdapter(BasePlatformAdapter):
@staticmethod
def _build_image_upload_request(request_body: Any) -> Any:
if "CreateImageRequest" in globals():
if CreateImageRequest is not None:
return CreateImageRequest.builder().request_body(request_body).build()
return SimpleNamespace(request_body=request_body)
@staticmethod
def _build_file_upload_body(*, file_type: str, file_name: str, file: Any, duration: int = 0) -> Any:
if "CreateFileRequestBody" in globals():
if CreateFileRequestBody is not None:
builder = (
CreateFileRequestBody.builder()
.file_type(file_type)
@ -5197,7 +5197,7 @@ class FeishuAdapter(BasePlatformAdapter):
@staticmethod
def _build_file_upload_request(request_body: Any) -> Any:
if "CreateFileRequest" in globals():
if CreateFileRequest is not None:
return CreateFileRequest.builder().request_body(request_body).build()
return SimpleNamespace(request_body=request_body)