Repository navigation
fix(api): preserve stored text cells when extracting legacy .xls files - #44666
yuyongyan29-dev wants to merge 7 commits into
Conversation
Added regression tests to ensure ExcelExtractor correctly handles .xls files with stored text cells and maintains legacy behavior when xlrd is not used.
|
Thanks for working on the issue I reported in #44658. I had also prepared a local fix before noticing this PR during the final duplicate check, and would like to coordinate the work. My implementation passes One compatibility difference is worth deciding explicitly: Would you and the maintainers prefer incorporating the real-workbook regression coverage here, and considering the smaller parsing change, rather than having two competing fixes? I can provide the fixture and tests for a coordinated contribution. AI tools assisted with this contribution. The reported local checks were executed; I have not run this PR's test suite. Update: I compared the actual extractor implementations on real BIFF workbooks at upstream There is an additional NA-policy difference to consider: for rows The complete local patch below includes the real workbook fixture. It is based on upstream Complete local patch, including the binary BIFF fixture (git apply compatible)diff --git a/api/core/rag/extractor/excel_extractor.py b/api/core/rag/extractor/excel_extractor.py
index 5d5316dc..f978167c 100644
--- a/api/core/rag/extractor/excel_extractor.py
+++ b/api/core/rag/extractor/excel_extractor.py
@@ -136,7 +136,8 @@ class ExcelExtractor(BaseExtractor):
elif file_extension == ".xls":
excel_file = pd.ExcelFile(self._file_path, engine="xlrd")
for excel_sheet_name in excel_file.sheet_names:
- df = excel_file.parse(sheet_name=excel_sheet_name)
+ # Preserve stored text such as identifiers with leading zeros instead of inferring numeric columns.
+ df = excel_file.parse(sheet_name=excel_sheet_name, dtype=object)
df.dropna(how="all", inplace=True)
for _, series_row in df.iterrows():
diff --git a/api/tests/fixtures/rag/text_identifiers.xls b/api/tests/fixtures/rag/text_identifiers.xls
new file mode 100644
index 0000000000000000000000000000000000000000..be1fa45e32569256d85c62174c9badc6c534cc57
GIT binary patch
literal 5632
zcmeHLO=w(I6#m|unRH_F_tI3fLKp^&THBJJDpF`Ct*NDpgjNgwAn41?lMI=>DKnE`
zU1+psDG06<H-##=iMsF)Me5Fl60r+G5E2D9T?q;<TF37@w-Y8&!-x=Une%w(-gEA`
z=iGbFx##_Svl6Uccz@3tHo*}j@JGE99Zh_X{mus62aeb4A{%X*eX`nc19_k`%|Ldf
z@M-r~I}}UBdksF`OMXEN{K)%BoW)c*jxyT_$7~Iur!^e*lJH2s$-4))+q(J<=MC>N
z{I1D<W_a8<uNXdzeyn;=U?n%T_W^1Hbv@>1ZLEjb!$&sfd*h5?H@>7y{e@SR?i@|w
zXr&mIZm@yDWEU=iAw3brQ6(%5CU3)A*abXJ*grYBe_|ptGjnKe?ohS5iUG#`B7Uo9
zfM2z1!KF-_zrB9&kO6*|O@Z_O4#ws0_-RISGygR|2`r-iH1pZR5~F>I3}7ct7NWRT
ze5M#xs!L38-;R1WrovirA<8U-rTM6O70b*6@U#G&_F%aX^#G6Li*9QEO!RDRComD^
zi*sQ~6zl!z`H+fh=Qv@iT#Hh`@bJj!SOOS{#zc)A7#;2cW}-|rEEY1^nPS$24&HY^
zg+`sw*nxw?EIidHUycjx9GxrA$2BhUcpOfbq5`!~gr@yiDU4^S;A|-@#<y^#u734x
zs9)W7s=J5_=(T=eXS)w+Tz%)4Zzrcu<(@LmA~^yb^*iM~)bXNba56Vf;35gMh`l!B
zUc)a*26tG0kKqBzuvQJ7+I_wA(0P-2*+z$GXUyPo?yjc(-Rv)2IsNhA(oea2*k3-e
z_T0eocexA5@=05u4PEE4&)es{@w(uXT%+|EDOJZG47;k>To2PeD?1^@JsEhtxCZ$Q
z2n;*QBc=U2$|ohQj!KY{2OO0oB_Bz%W^C3hUO=vs*UAHXo@ln}cc6NN=Y3JqJh(0?
z&5DFH%lc-`;sy5ZAzku)U^{V?G&3_zvu~P*NVzd-X8z%b-;WQa2IE54VLLKN9=jPc
zsGGZzk9B$iK9?JmqS3ofDbC76C%IJyxx7%El@}>LO}#ER-H6Y8&#o}`eh2x|E1e!Q
z@}G0(bJ}*f6HrQ5(sE2W-JD~xAYOngY-BrOwt4<p2NKlLkCPuPeEs&~&*QS6;N|Qm
z%)ZW(Wf<GPW|%SCsO^Ea2ihKJd!X%s|B(mu&ZZ}%o_=~$(c7E;0q9Ll|8=hMR@;V~
z(*qBq%&UeBjw5DU!8u00b+{ENui+WxQY+B-Unto}X}yA3OxrqUTbaH=hTlNz_O*@;
bgIf{q<7g|1R>%Ie{pS6*YGez!|78D90I*1#
literal 0
HcmV?d00001
diff --git a/api/tests/unit_tests/core/rag/extractor/test_excel_extractor.py b/api/tests/unit_tests/core/rag/extractor/test_excel_extractor.py
index 5b87121f..5309d22b 100644
--- a/api/tests/unit_tests/core/rag/extractor/test_excel_extractor.py
+++ b/api/tests/unit_tests/core/rag/extractor/test_excel_extractor.py
@@ -1,3 +1,4 @@
+from pathlib import Path
from types import SimpleNamespace
import pandas as pd
@@ -247,7 +248,7 @@ class TestExcelExtractor:
class FakeExcelFile:
sheet_names = ["Sheet1"]
- def parse(self, sheet_name):
+ def parse(self, sheet_name, dtype=None):
assert sheet_name == "Sheet1"
return pd.DataFrame([{"A": "x", "B": 1}, {"A": None, "B": None}])
@@ -264,7 +265,7 @@ class TestExcelExtractor:
class FakeExcelFile:
sheet_names = ["Sheet1"]
- def parse(self, sheet_name):
+ def parse(self, sheet_name, dtype=None):
return pd.DataFrame([{"note": 'he said "hi"', "plain": "text"}])
monkeypatch.setattr(pd, "ExcelFile", lambda path, engine=None: FakeExcelFile())
@@ -275,6 +276,29 @@ class TestExcelExtractor:
assert len(docs) == 1
assert docs[0].page_content == '"note":"he said \\"hi\\"";"plain":"text"'
+ def test_extract_xls_preserves_numeric_looking_text(self):
+ # Real BIFF cells are needed here: a mocked DataFrame cannot expose pandas' type inference.
+ file_path = Path(__file__).resolve().parents[4] / "fixtures" / "rag" / "text_identifiers.xls"
+
+ docs = ExcelExtractor(str(file_path)).extract()
+
+ assert [doc.page_content for doc in docs[:2]] == [
+ '"Code":"00123";"ScientificText":"1e3";"DecimalText":"01.20";"Quantity":"7";"Note":"he said \\"hi\\""',
+ '"Code":"00456";"ScientificText":"2e3";"DecimalText":"03.40";"Quantity":"9";"Note":"second"',
+ ]
+ assert all(doc.metadata == {"source": str(file_path)} for doc in docs)
+
+ def test_extract_xls_preserves_native_values_and_skips_empty_rows(self):
+ file_path = Path(__file__).resolve().parents[4] / "fixtures" / "rag" / "text_identifiers.xls"
+
+ docs = ExcelExtractor(str(file_path)).extract()
+
+ assert len(docs) == 4
+ assert [doc.page_content for doc in docs[2:]] == [
+ '"Amount":"7";"Enabled":"True";"Date":"2026-01-02 00:00:00";"Note":"he said \\"hi\\""',
+ '"Amount":"2.5";"Enabled":"False";"Date":"2026-03-04 05:06:07";"Note":"plain"',
+ ]
+
def test_extract_unsupported_extension_raises(self):
extractor = ExcelExtractor("/tmp/sample.txt")
|
|
@PointerL Thank you — and agreed, let's coordinate rather than run two competing fixes. I'd suggest we keep this PR's approach as the base: restoring cell values from xlrd's stored types only touches cells that were actually stored as text, so native numbers, booleans and dates keep their previous serialized output exactly (1.0/0.0, 7.0, ...). The dtype=object route is smaller, but as you noted it changes that output for booleans and for integer columns containing blanks, which could surprise downstream consumers. Your real-BIFF fixture and regression tests sound strictly better than synthetic coverage. Please share them (attach here, or link a gist or branch) and I'll fold them into this PR, adapting cases where needed, with a Co-authored-by credit for you on the commit. If any of your cases behave differently under the stored-type approach, I'll flag it here explicitly so we and the maintainers can decide with full information. AI assistance disclosure: this PR and this reply were prepared with AI assistance; the test results cited in the PR were actually executed. |
|
@yuyongyan29-dev Agreed. Please keep your stored-text restoration approach so the existing numeric and boolean output remains unchanged. The real BIFF Please add the following credit to the commit incorporating my contribution: If any other cases behave differently, please flag them here so we can resolve them together. Thanks! |
Merge only the fixture and test changes from PointerL's coordinated contribution (PR comment 6368844330); his alternative dtype=object production change is intentionally not included. Native-value expectations follow this PR's stored-type behavior. Co-authored-by: PointerL <124577547+PointerL@users.noreply.github.com>
Merge only the fixture and test changes from PointerL's coordinated contribution (PR comment 6368844330); his alternative dtype=object production change is intentionally not included. Native-value expectations follow this PR's stored-type behavior. Co-authored-by: PointerL <124577547+PointerL@users.noreply.github.com>
|
@PointerL 已按约定并入你的 fixture 和测试:新增 api/tests/fixtures/rag/text_identifiers.xls,并更新 api/tests/unit_tests/core/rag/extractor/test_excel_extractor.py,仅包含 fixture + 测试,未动你的 dtype=object 生产改动;两笔提交均已按你给的署名行署名(Co-authored-by: PointerL 124577547+PointerL@users.noreply.github.com),原生值预期已按本 PR 的 stored-type 行为适配。感谢你的协作! |
Pyrefly Diffbase → PR--- /tmp/pyrefly_base.txt 2026-10-30 13:12:05.905621105 +0000
+++ /tmp/pyrefly_pr.txt 2026-10-30 13:11:47.705433297 +0000
@@ -162,28 +162,8 @@
--> providers/vdb/vdb-tencent/tests/e2e_tests/conftest.py:95:33
ERROR Object of class `ModuleType` has no attribute `VectorType` [missing-attribute]
--> providers/vdb/vdb-tidb-vector/tests/unit_tests/src/dify_vdb_tidb_vector/test_tidb_vector.py:77:5
-ERROR Unpacked keyword argument `str` is not assignable to parameter `port` with type `int | None` in function `qdrant_client.qdrant_client.QdrantClient.__init__` [bad-argument-type]
- --> providers/vdb/vdb-tidb-on-qdrant/src/dify_vdb_tidb_on_qdrant/tidb_on_qdrant_vector.py:93:51
-ERROR Unpacked keyword argument `str` is not assignable to parameter `grpc_port` with type `int` in function `qdrant_client.qdrant_client.QdrantClient.__init__` [bad-argument-type]
- --> providers/vdb/vdb-tidb-on-qdrant/src/dify_vdb_tidb_on_qdrant/tidb_on_qdrant_vector.py:93:51
-ERROR Unpacked keyword argument `str` is not assignable to parameter `prefer_grpc` with type `bool` in function `qdrant_client.qdrant_client.QdrantClient.__init__` [bad-argument-type]
- --> providers/vdb/vdb-tidb-on-qdrant/src/dify_vdb_tidb_on_qdrant/tidb_on_qdrant_vector.py:93:51
-ERROR Unpacked keyword argument `str` is not assignable to parameter `https` with type `bool | None` in function `qdrant_client.qdrant_client.QdrantClient.__init__` [bad-argument-type]
- --> providers/vdb/vdb-tidb-on-qdrant/src/dify_vdb_tidb_on_qdrant/tidb_on_qdrant_vector.py:93:51
-ERROR Unpacked keyword argument `str` is not assignable to parameter `timeout` with type `int | None` in function `qdrant_client.qdrant_client.QdrantClient.__init__` [bad-argument-type]
- --> providers/vdb/vdb-tidb-on-qdrant/src/dify_vdb_tidb_on_qdrant/tidb_on_qdrant_vector.py:93:51
-ERROR Unpacked keyword argument `str` is not assignable to parameter `force_disable_check_same_thread` with type `bool` in function `qdrant_client.qdrant_client.QdrantClient.__init__` [bad-argument-type]
- --> providers/vdb/vdb-tidb-on-qdrant/src/dify_vdb_tidb_on_qdrant/tidb_on_qdrant_vector.py:93:51
-ERROR Unpacked keyword argument `str` is not assignable to parameter `grpc_options` with type `dict[str, Any] | None` in function `qdrant_client.qdrant_client.QdrantClient.__init__` [bad-argument-type]
- --> providers/vdb/vdb-tidb-on-qdrant/src/dify_vdb_tidb_on_qdrant/tidb_on_qdrant_vector.py:93:51
-ERROR Unpacked keyword argument `str` is not assignable to parameter `auth_token_provider` with type `(() -> Awaitable[str]) | (() -> str) | None` in function `qdrant_client.qdrant_client.QdrantClient.__init__` [bad-argument-type]
- --> providers/vdb/vdb-tidb-on-qdrant/src/dify_vdb_tidb_on_qdrant/tidb_on_qdrant_vector.py:93:51
-ERROR `None` is not subscriptable [unsupported-operation]
- --> providers/vdb/vdb-tidb-on-qdrant/src/dify_vdb_tidb_on_qdrant/tidb_service.py:152:20
-ERROR `None` is not subscriptable [unsupported-operation]
- --> providers/vdb/vdb-tidb-on-qdrant/src/dify_vdb_tidb_on_qdrant/tidb_service.py:153:35
-ERROR Argument `Any | None` is not assignable to parameter `cluster_response` with type `Mapping[str, Any]` in function `TidbService.extract_qdrant_endpoint` [bad-argument-type]
- --> providers/vdb/vdb-tidb-on-qdrant/src/dify_vdb_tidb_on_qdrant/tidb_service.py:154:75
+WARN Cannot find type stubs for module `xlrd` [untyped-import]
+ --> core/rag/extractor/excel_extractor.py:184:20
ERROR Argument `Literal['normal']` is not assignable to parameter `status` with type `ConversationStatus | SQLCoreOperations[ConversationStatus]` in function `models.model.Conversation.__init__` [bad-argument-type]
--> tests/e2e_tests/containers/controllers/console/app/test_chat_conversation_status_count_api.py:75:16
ERROR Argument `Literal['app-run']` is not assignable to parameter `triggered_from` with type `SQLCoreOperations[WorkflowRunTriggeredFrom] | WorkflowRunTriggeredFrom` in function `models.workflow.WorkflowRun.__init__` [bad-argument-type]
@@ -537,23 +517,23 @@
ERROR Argument `list[SimpleNamespace]` is not assignable to parameter `dsl_dependencies` with type `list[PluginDependency]` in function `services.app_dsl_service.AppDslService.get_leaked_dependencies` [bad-argument-type]
--> tests/e2e_tests/containers/services/test_app_dsl_service.py:1618:73
ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
- --> tests/e2e_tests/containers/services/test_app_generate_service.py:196:38
+ --> tests/e2e_tests/containers/services/test_app_generate_service.py:199:38
ERROR Argument `str | None` is not assignable to parameter `created_by` with type `SQLCoreOperations[str] | str` in function `models.workflow.Workflow.__init__` [bad-argument-type]
- --> tests/e2e_tests/containers/services/test_app_generate_service.py:223:24
+ --> tests/e2e_tests/containers/services/test_app_generate_service.py:226:24
ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
- --> tests/e2e_tests/containers/services/test_app_generate_service.py:497:23
+ --> tests/e2e_tests/containers/services/test_app_generate_service.py:500:23
ERROR Argument `Literal['invalid_mode']` is not assignable to parameter `value` with type `AppMode | SQLCoreOperations[AppMode]` in function `sqlalchemy.orm.base.Mapped.__set__` [bad-argument-type]
- --> tests/e2e_tests/containers/services/test_app_generate_service.py:576:20
+ --> tests/e2e_tests/containers/services/test_app_generate_service.py:579:20
WARN Module `sqlalchemy.exc` exists, but was not imported explicitly. You are relying on other modules to load it. [implicit-import]
- --> tests/e2e_tests/containers/services/test_app_generate_service.py:583:41
+ --> tests/e2e_tests/containers/services/test_app_generate_service.py:586:41
ERROR Argument `dict[str, dict[str, str]]` is not assignable to parameter `args` with type `LoopNodeRunPayload` in function `services.app_generate_service.AppGenerateService.generate_single_loop` [bad-argument-type]
- --> tests/e2e_tests/containers/services/test_app_generate_service.py:837:18
+ --> tests/e2e_tests/containers/services/test_app_generate_service.py:840:18
ERROR Argument `dict[str, dict[str, str]]` is not assignable to parameter `args` with type `LoopNodeRunPayload` in function `services.app_generate_service.AppGenerateService.generate_single_loop` [bad-argument-type]
- --> tests/e2e_tests/containers/services/test_app_generate_service.py:869:18
+ --> tests/e2e_tests/containers/services/test_app_generate_service.py:872:18
ERROR Argument `dict[str, dict[str, str]]` is not assignable to parameter `args` with type `LoopNodeRunPayload` in function `services.app_generate_service.AppGenerateService.generate_single_loop` [bad-argument-type]
- --> tests/e2e_tests/containers/services/test_app_generate_service.py:900:22
+ --> tests/e2e_tests/containers/services/test_app_generate_service.py:903:22
ERROR Argument `Literal['agent-chat']` is not assignable to parameter `value` with type `AppMode | SQLCoreOperations[AppMode]` in function `sqlalchemy.orm.base.Mapped.__set__` [bad-argument-type]
- --> tests/e2e_tests/containers/services/test_app_generate_service.py:1017:20
+ --> tests/e2e_tests/containers/services/test_app_generate_service.py:1020:20
ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
--> tests/e2e_tests/containers/services/test_app_service.py:86:38
ERROR Object of class `NoneType` has no attribute `id` [missing-attribute]
@@ -749,53 +729,57 @@
ERROR Argument `Literal['emoji']` is not assignable to parameter `icon_type` with type `IconType | SQLCoreOperations[IconType | None] | None` in function `models.model.App.__init__` [bad-argument-type]
--> tests/e2e_tests/containers/services/test_end_user_service.py:430:27
ERROR Object of class `NoneType` has no attribute `size` [missing-attribute]
- --> tests/e2e_tests/containers/services/test_feature_service.py:131:20
+ --> tests/e2e_tests/containers/services/test_feature_service.py:130:20
ERROR Object of class `NoneType` has no attribute `limit` [missing-attribute]
- --> tests/e2e_tests/containers/services/test_feature_service.py:132:20
+ --> tests/e2e_tests/containers/services/test_feature_service.py:131:20
ERROR Object of class `NoneType` has no attribute `size` [missing-attribute]
- --> tests/e2e_tests/containers/services/test_feature_service.py:202:16
+ --> tests/e2e_tests/containers/services/test_feature_service.py:201:16
ERROR Object of class `NoneType` has no attribute `limit` [missing-attribute]
- --> tests/e2e_tests/containers/services/test_feature_service.py:203:16
+ --> tests/e2e_tests/containers/services/test_feature_service.py:202:16
ERROR Object of class `NoneType` has no attribute `size` [missing-attribute]
- --> tests/e2e_tests/containers/services/test_feature_service.py:511:20
+ --> tests/e2e_tests/containers/services/test_feature_service.py:510:20
ERROR Object of class `NoneType` has no attribute `limit` [missing-attribute]
- --> tests/e2e_tests/containers/services/test_feature_service.py:512:20
+ --> tests/e2e_tests/containers/services/test_feature_service.py:511:20
ERROR Object of class `NoneType` has no attribute `size` [missing-attribute]
- --> tests/e2e_tests/containers/services/test_feature_service.py:600:20
+ --> tests/e2e_tests/containers/services/test_feature_service.py:599:20
ERROR Object of class `NoneType` has no attribute `limit` [missing-attribute]
- --> tests/e2e_tests/containers/services/test_feature_service.py:601:20
+ --> tests/e2e_tests/containers/services/test_feature_service.py:600:20
ERROR Object of class `NoneType` has no attribute `size` [missing-attribute]
+ --> tests/e2e_tests/containers/services/test_feature_service.py:698:20
+ERROR Object of class `NoneType` has no attribute `limit` [missing-attribute]
--> tests/e2e_tests/containers/services/test_feature_service.py:699:20
+ERROR Object of class `NoneType` has no attribute `size` [missing-attribute]
+ --> tests/e2e_tests/containers/services/test_feature_service.py:746:16
ERROR Object of class `NoneType` has no attribute `limit` [missing-attribute]
- --> tests/e2e_tests/containers/services/test_feature_service.py:700:20
+ --> tests/e2e_tests/containers/services/test_feature_service.py:747:16
ERROR Object of class `NoneType` has no attribute `size` [missing-attribute]
- --> tests/e2e_tests/containers/services/test_feature_service.py:740:16
+ --> tests/e2e_tests/containers/services/test_feature_service.py:795:16
ERROR Object of class `NoneType` has no attribute `limit` [missing-attribute]
- --> tests/e2e_tests/containers/services/test_feature_service.py:741:16
+ --> tests/e2e_tests/containers/services/test_feature_service.py:796:16
ERROR Object of class `NoneType` has no attribute `size` [missing-attribute]
- --> tests/e2e_tests/containers/services/test_feature_service.py:857:16
+ --> tests/e2e_tests/containers/services/test_feature_service.py:912:16
ERROR Object of class `NoneType` has no attribute `limit` [missing-attribute]
- --> tests/e2e_tests/containers/services/test_feature_service.py:858:16
+ --> tests/e2e_tests/containers/services/test_feature_service.py:913:16
ERROR Object of class `NoneType` has no attribute `size` [missing-attribute]
- --> tests/e2e_tests/containers/services/test_feature_service.py:1176:16
+ --> tests/e2e_tests/containers/services/test_feature_service.py:1231:16
ERROR Object of class `NoneType` has no attribute `limit` [missing-attribute]
- --> tests/e2e_tests/containers/services/test_feature_service.py:1177:16
+ --> tests/e2e_tests/containers/services/test_feature_service.py:1232:16
ERROR Object of class `NoneType` has no attribute `size` [missing-attribute]
- --> tests/e2e_tests/containers/services/test_feature_service.py:1287:20
+ --> tests/e2e_tests/containers/services/test_feature_service.py:1342:20
ERROR Object of class `NoneType` has no attribute `limit` [missing-attribute]
- --> tests/e2e_tests/containers/services/test_feature_service.py:1288:20
+ --> tests/e2e_tests/containers/services/test_feature_service.py:1343:20
ERROR Object of class `NoneType` has no attribute `size` [missing-attribute]
- --> tests/e2e_tests/containers/services/test_feature_service.py:1496:16
+ --> tests/e2e_tests/containers/services/test_feature_service.py:1551:16
ERROR Object of class `NoneType` has no attribute `limit` [missing-attribute]
- --> tests/e2e_tests/containers/services/test_feature_service.py:1497:16
+ --> tests/e2e_tests/containers/services/test_feature_service.py:1552:16
ERROR Object of class `NoneType` has no attribute `size` [missing-attribute]
- --> tests/e2e_tests/containers/services/test_feature_service.py:1550:16
+ --> tests/e2e_tests/containers/services/test_feature_service.py:1608:16
ERROR Object of class `NoneType` has no attribute `limit` [missing-attribute]
- --> tests/e2e_tests/containers/services/test_feature_service.py:1551:16
+ --> tests/e2e_tests/containers/services/test_feature_service.py:1609:16
ERROR Object of class `NoneType` has no attribute `size` [missing-attribute]
- --> tests/e2e_tests/containers/services/test_feature_service.py:1653:16
+ --> tests/e2e_tests/containers/services/test_feature_service.py:1715:16
ERROR Object of class `NoneType` has no attribute `limit` [missing-attribute]
- --> tests/e2e_tests/containers/services/test_feature_service.py:1654:16
+ --> tests/e2e_tests/containers/services/test_feature_service.py:1716:16
ERROR Argument `Literal['active']` is not assignable to parameter `status` with type `AccountStatus | SQLCoreOperations[AccountStatus]` in function `models.account.Account.__init__` [bad-argument-type]
--> tests/e2e_tests/containers/services/test_file_service.py:67:20
ERROR Argument `Literal['normal']` is not assignable to parameter `status` with type `SQLCoreOperations[TenantStatus] | TenantStatus` in function `models.account.Tenant.__init__` [bad-argument-type]
@@ -985,35 +969,35 @@
ERROR Argument `Literal['normal']` is not assignable to parameter `status` with type `MessageStatus | SQLCoreOperations[MessageStatus]` in function `models.model.Message.__init__` [bad-argument-type]
--> tests/e2e_tests/containers/services/test_message_service_extra_contents.py:44:16
ERROR Argument `Literal['active']` is not assignable to parameter `status` with type `AccountStatus | SQLCoreOperations[AccountStatus]` in function `models.account.Account.__init__` [bad-argument-type]
- --> tests/e2e_tests/containers/services/test_messages_clean_service.py:129:20
+ --> tests/e2e_tests/containers/services/test_messages_clean_service.py:128:20
ERROR Argument `Literal['normal']` is not assignable to parameter `status` with type `SQLCoreOperations[TenantStatus] | TenantStatus` in function `models.account.Tenant.__init__` [bad-argument-type]
- --> tests/e2e_tests/containers/services/test_messages_clean_service.py:137:20
+ --> tests/e2e_tests/containers/services/test_messages_clean_service.py:136:20
ERROR Argument `Literal['chat']` is not assignable to parameter `mode` with type `AppMode | SQLCoreOperations[AppMode]` in function `models.model.App.__init__` [bad-argument-type]
- --> tests/e2e_tests/containers/services/test_messages_clean_service.py:160:18
+ --> tests/e2e_tests/containers/services/test_messages_clean_service.py:159:18
ERROR Argument `Literal['chat']` is not assignable to parameter `mode` with type `AppMode | SQLCoreOperations[AppMode]` in function `models.model.Conversation.__init__` [bad-argument-type]
- --> tests/e2e_tests/containers/services/test_messages_clean_service.py:182:18
+ --> tests/e2e_tests/containers/services/test_messages_clean_service.py:181:18
ERROR Argument `Literal['normal']` is not assignable to parameter `status` with type `ConversationStatus | SQLCoreOperations[ConversationStatus]` in function `models.model.Conversation.__init__` [bad-argument-type]
- --> tests/e2e_tests/containers/services/test_messages_clean_service.py:185:20
+ --> tests/e2e_tests/containers/services/test_messages_clean_service.py:184:20
ERROR Argument `Literal['local_file']` is not assignable to parameter `transfer_method` with type `FileTransferMethod | SQLCoreOperations[FileTransferMethod]` in function `models.model.MessageFile.__init__` [bad-argument-type]
- --> tests/e2e_tests/containers/services/test_messages_clean_service.py:267:29
+ --> tests/e2e_tests/containers/services/test_messages_clean_service.py:266:29
ERROR Argument `Literal['end_user']` is not assignable to parameter `created_by_role` with type `CreatorUserRole | SQLCoreOperations[CreatorUserRole]` in function `models.model.MessageFile.__init__` [bad-argument-type]
- --> tests/e2e_tests/containers/services/test_messages_clean_service.py:270:29
+ --> tests/e2e_tests/containers/services/test_messages_clean_service.py:269:29
ERROR Argument `Literal['end_user']` is not assignable to parameter `created_by_role` with type `CreatorUserRole | SQLCoreOperations[CreatorUserRole]` in function `models.web.SavedMessage.__init__` [bad-argument-type]
- --> tests/e2e_tests/containers/services/test_messages_clean_service.py:279:29
+ --> tests/e2e_tests/containers/services/test_messages_clean_service.py:278:29
ERROR Object of class `str` has no attribute `id` [missing-attribute]
- --> tests/e2e_tests/containers/services/test_messages_clean_service.py:613:13
+ --> tests/e2e_tests/containers/services/test_messages_clean_service.py:628:13
ERROR Object of class `str` has no attribute `id` [missing-attribute]
- --> tests/e2e_tests/containers/services/test_messages_clean_service.py:614:13
+ --> tests/e2e_tests/containers/services/test_messages_clean_service.py:632:13
ERROR Object of class `str` has no attribute `id` [missing-attribute]
- --> tests/e2e_tests/containers/services/test_messages_clean_service.py:901:13
+ --> tests/e2e_tests/containers/services/test_messages_clean_service.py:942:13
ERROR Object of class `str` has no attribute `id` [missing-attribute]
- --> tests/e2e_tests/containers/services/test_messages_clean_service.py:902:13
+ --> tests/e2e_tests/containers/services/test_messages_clean_service.py:946:13
ERROR Object of class `str` has no attribute `id` [missing-attribute]
- --> tests/e2e_tests/containers/services/test_messages_clean_service.py:903:13
+ --> tests/e2e_tests/containers/services/test_messages_clean_service.py:950:13
ERROR Object of class `str` has no attribute `id` [missing-attribute]
- --> tests/e2e_tests/containers/services/test_messages_clean_service.py:907:22
+ --> tests/e2e_tests/containers/services/test_messages_clean_service.py:957:22
ERROR Object of class `str` has no attribute `id` [missing-attribute]
- --> tests/e2e_tests/containers/services/test_messages_clean_service.py:907:52
+ --> tests/e2e_tests/containers/services/test_messages_clean_service.py:957:52
ERROR Argument `Literal['active']` is not assignable to parameter `status` with type `AccountStatus | SQLCoreOperations[AccountStatus]` in function `models.account.Account.__init__` [bad-argument-type]
--> tests/e2e_tests/containers/services/test_model_load_balancing_service.py:84:20
ERROR Argument `Literal['normal']` is not assignable to parameter `status` with type `SQLCoreOperations[TenantStatus] | TenantStatus` in function `models.account.Tenant.__init__` [bad-argument-type]
@@ -2116,8 +2100,6 @@
--> tests/helpers/workflow/table_runner.py:389:23
ERROR `graph_runtime_state` is uninitialized [unbound-name]
--> tests/helpers/workflow/table_runner.py:390:37
-WARN `URLError` is already caught earlier in this `try` statement, so it never matches here [unreachable-except-clause]
- --> tests/pytest_dify.py:155:34
ERROR Object of class `object` has no attribute `package` [missing-attribute]
--> tests/unit_tests/commands/test_data_migration.py:218:16
ERROR Object of class `object` has no attribute `options_override` [missing-attribute]
@@ -2222,26 +2204,6 @@
--> tests/unit_tests/controllers/console/app/test_message.py:150:16
ERROR Argument `str | None` is not assignable to parameter `s` with type `bytearray | bytes | str` in function `json.loads` [bad-argument-type]
--> tests/unit_tests/controllers/console/app/test_model_config.py:891:36
-ERROR Argument `(ParamSpec(Unknown)) -> Response | Unknown` is not assignable to parameter `func` with type `(...) -> Any` in function `inspect.unwrap` [bad-argument-type]
- --> tests/unit_tests/controllers/console/app/test_workflow.py:325:34
-ERROR Argument `(ParamSpec(Unknown)) -> Response | Unknown` is not assignable to parameter `func` with type `(...) -> Any` in function `inspect.unwrap` [bad-argument-type]
- --> tests/unit_tests/controllers/console/app/test_workflow.py:336:34
-ERROR Argument `(ParamSpec(Unknown)) -> Response | Unknown` is not assignable to parameter `func` with type `(...) -> Any` in function `inspect.unwrap` [bad-argument-type]
- --> tests/unit_tests/controllers/console/app/test_workflow.py:365:34
-ERROR Argument `(ParamSpec(Unknown)) -> Response | Unknown` is not assignable to parameter `func` with type `(...) -> Any` in function `inspect.unwrap` [bad-argument-type]
- --> tests/unit_tests/controllers/console/app/test_workflow.py:390:34
-ERROR Argument `(ParamSpec(Unknown)) -> Response | Unknown` is not assignable to parameter `func` with type `(...) -> Any` in function `inspect.unwrap` [bad-argument-type]
- --> tests/unit_tests/controllers/console/app/test_workflow.py:431:34
-ERROR Argument `(ParamSpec(Unknown)) -> Response | Unknown` is not assignable to parameter `func` with type `(...) -> Any` in function `inspect.unwrap` [bad-argument-type]
- --> tests/unit_tests/controllers/console/app/test_workflow.py:461:34
-ERROR Argument `(ParamSpec(Unknown)) -> Response | Unknown` is not assignable to parameter `func` with type `(...) -> Any` in function `inspect.unwrap` [bad-argument-type]
- --> tests/unit_tests/controllers/console/app/test_workflow.py:488:34
-ERROR Argument `(ParamSpec(Unknown)) -> Response | Unknown` is not assignable to parameter `func` with type `(...) -> Any` in function `inspect.unwrap` [bad-argument-type]
- --> tests/unit_tests/controllers/console/app/test_workflow.py:529:34
-ERROR Argument `(ParamSpec(Unknown)) -> Response | Unknown` is not assignable to parameter `func` with type `(...) -> Any` in function `inspect.unwrap` [bad-argument-type]
- --> tests/unit_tests/controllers/console/app/test_workflow.py:592:34
-ERROR Argument `(ParamSpec(Unknown)) -> Response | Unknown` is not assignable to parameter `func` with type `(...) -> Any` in function `inspect.unwrap` [bad-argument-type]
- --> tests/unit_tests/controllers/console/app/test_workflow.py:613:34
ERROR Object of class `WorkflowRun` has no attribute `retry_index` [missing-attribute]
--> tests/unit_tests/controllers/console/app/test_workflow_run.py:222:5
ERROR Missing argument `app_model` in function `handler` [missing-argument]
@@ -2300,14 +2262,8 @@
--> tests/unit_tests/controllers/console/auth/test_email_register.py:236:12
ERROR Object of class `FunctionType` has no attribute `side_effect` [missing-attribute]
--> tests/unit_tests/controllers/console/auth/test_email_register.py:268:5
-ERROR Argument `(ParamSpec(Unknown)) -> Response | Unknown` is not assignable to parameter `func` with type `(...) -> Any` in function `inspect.unwrap` [bad-argument-type]
- --> tests/unit_tests/controllers/console/datasets/rag_pipeline/test_datasource_auth.py:828:33
ERROR Object of class `FromClause` has no attribute `create` [missing-attribute]
--> tests/unit_tests/controllers/console/datasets/rag_pipeline/test_rag_pipeline.py:83:9
-ERROR Argument `(ParamSpec(Unknown)) -> Response | Unknown` is not assignable to parameter `func` with type `(...) -> Any` in function `inspect.unwrap` [bad-argument-type]
- --> tests/unit_tests/controllers/console/datasets/rag_pipeline/test_rag_pipeline.py:303:25
-ERROR Argument `(ParamSpec(Unknown)) -> Response | Unknown` is not assignable to parameter `func` with type `(...) -> Any` in function `inspect.unwrap` [bad-argument-type]
- --> tests/unit_tests/controllers/console/datasets/rag_pipeline/test_rag_pipeline.py:334:25
ERROR Unexpected keyword argument `created_at` in function `models.workflow.WorkflowNodeExecutionModel.__init__` [unexpected-keyword]
--> tests/unit_tests/controllers/console/datasets/rag_pipeline/test_rag_pipeline_workflow.py:876:9
ERROR Argument `datetime | None` is not assignable to parameter `value` with type `SQLCoreOperations[datetime] | datetime` in function `sqlalchemy.orm.base.Mapped.__set__` [bad-argument-type]
@@ -2398,18 +2354,16 @@
--> tests/unit_tests/controllers/console/datasets/test_external.py:86:17
ERROR Argument `UUID` is not assignable to parameter `object` with type `ExternalKnowledgeApiPayload` in function `list.append` [bad-argument-type]
--> tests/unit_tests/controllers/console/datasets/test_external.py:88:21
+ERROR Argument `UUID` is not assignable to parameter `object` with type `RequestContext` in function `list.append` [bad-argument-type]
+ --> tests/unit_tests/controllers/console/datasets/test_external.py:88:21
ERROR Generator function should return `Generator` [bad-return]
--> tests/unit_tests/controllers/console/tag/test_tags.py:66:23
ERROR Argument `SimpleNamespace` is not assignable to parameter `form` with type `Form` in function `controllers.console.human_input_form._jsonify_form_definition` [bad-argument-type]
--> tests/unit_tests/controllers/console/test_human_input_form.py:94:41
ERROR Argument `SimpleNamespace` is not assignable to parameter `form` with type `Form` in function `controllers.console.human_input_form.ConsoleHumanInputFormApi._ensure_console_access` [bad-argument-type]
--> tests/unit_tests/controllers/console/test_human_input_form.py:105:57
-ERROR Argument `(ParamSpec(Unknown)) -> Response | Unknown` is not assignable to parameter `func` with type `(...) -> Any` in function `inspect.unwrap` [bad-argument-type]
- --> tests/unit_tests/controllers/console/test_human_input_form.py:131:22
-ERROR Argument `(ParamSpec(Unknown)) -> Response | Unknown` is not assignable to parameter `func` with type `(...) -> Any` in function `inspect.unwrap` [bad-argument-type]
- --> tests/unit_tests/controllers/console/test_human_input_form.py:152:22
ERROR Type `Response` is not iterable [not-iterable]
- --> tests/unit_tests/controllers/console/test_wraps.py:306:17
+ --> tests/unit_tests/controllers/console/test_wraps.py:305:17
ERROR Argument value `Literal[0]` violates Pydantic `ge` constraint `Literal[1]` for field `page` [bad-argument-type]
--> tests/unit_tests/controllers/console/workspace/test_endpoint.py:235:47
ERROR Missing argument `plugin_id` in function `controllers.console.workspace.endpoint.EndpointListForPluginQuery.__init__` [missing-argument]
@@ -2425,7 +2379,7 @@
ERROR Missing argument `endpoint_id` in function `controllers.console.workspace.endpoint.EndpointIdPayload.__init__` [missing-argument]
--> tests/unit_tests/controllers/console/workspace/test_endpoint.py:561:46
ERROR Argument `Literal['team']` is not assignable to parameter `plan` with type `CloudPlan | None` in function `services.workspace.contracts.EffectiveCreditPool.__init__` [bad-argument-type]
- --> tests/unit_tests/controllers/console/workspace/test_model_providers.py:359:18
+ --> tests/unit_tests/controllers/console/workspace/test_model_providers.py:358:18
ERROR `in` is not supported between `Literal['knowledge-retrieval']` and `object` [not-iterable]
--> tests/unit_tests/controllers/console/workspace/test_snippets.py:213:12
WARN Call to deprecated overload `contextlib.contextmanager` [deprecated]
@@ -2462,16 +2416,6 @@
--> tests/unit_tests/controllers/inner_api/plugin/test_wraps.py:423:35
ERROR Missing argument `payload` in function `protected_view` [missing-argument]
--> tests/unit_tests/controllers/inner_api/plugin/test_wraps.py:429:36
-ERROR Argument `(ParamSpec(Unknown)) -> Unknown` is not assignable to parameter `func` with type `(...) -> Any` in function `inspect.unwrap` [bad-argument-type]
- --> tests/unit_tests/controllers/inner_api/test_runtime_credentials.py:77:32
-ERROR Argument `(ParamSpec(Unknown)) -> Unknown` is not assignable to parameter `func` with type `(...) -> Any` in function `inspect.unwrap` [bad-argument-type]
- --> tests/unit_tests/controllers/inner_api/test_runtime_credentials.py:107:32
-ERROR Argument `(ParamSpec(Unknown)) -> Unknown` is not assignable to parameter `func` with type `(...) -> Any` in function `inspect.unwrap` [bad-argument-type]
- --> tests/unit_tests/controllers/inner_api/test_runtime_credentials.py:154:32
-ERROR Argument `(ParamSpec(Unknown)) -> Unknown` is not assignable to parameter `func` with type `(...) -> Any` in function `inspect.unwrap` [bad-argument-type]
- --> tests/unit_tests/controllers/inner_api/test_runtime_credentials.py:202:32
-ERROR Argument `(ParamSpec(Unknown)) -> Unknown` is not assignable to parameter `func` with type `(...) -> Any` in function `inspect.unwrap` [bad-argument-type]
- --> tests/unit_tests/controllers/inner_api/test_runtime_credentials.py:216:32
ERROR Attribute `payload` of class `Namespace` is a read-only property and cannot be set [read-only]
--> tests/unit_tests/controllers/mcp/test_mcp.py:32:5
ERROR Object of class `FromClause` has no attribute `create` [missing-attribute]
@@ -2555,7 +2499,7 @@
ERROR `None` is not subscriptable [unsupported-operation]
--> tests/unit_tests/controllers/service_api/app/test_audio.py:205:16
ERROR Argument `list[dict[str, Any]] | None` is not assignable to parameter `obj` with type `Sized` in function `len` [bad-argument-type]
- --> tests/unit_tests/controllers/service_api/app/test_completion.py:258:24
+ --> tests/unit_tests/controllers/service_api/app/test_completion.py:256:24
ERROR Argument value `Literal[0]` violates Pydantic `ge` constraint `Literal[1]` for field `limit` [bad-argument-type]
--> tests/unit_tests/controllers/service_api/app/test_conversation.py:69:39
ERROR Argument value `Literal[101]` violates Pydantic `le` constraint `Literal[100]` for field `limit` [bad-argument-type]
@@ -2831,33 +2775,17 @@
ERROR Argument `list[Unknown]` is not assignable to parameter `llm_response` with type `Generator[LLMResultChunk]` in function `core.agent.output_parser.cot_output_parser.CotAgentOutputParser.handle_react_stream_output` [bad-argument-type]
--> tests/unit_tests/core/agent/output_parser/test_cot_output_parser.py:195:71
ERROR Argument `list[Unknown]` is not assignable to parameter `llm_response` with type `Generator[LLMResultChunk]` in function `core.agent.output_parser.cot_output_parser.CotAgentOutputParser.handle_react_stream_output` [bad-argument-type]
- --> tests/unit_tests/core/agent/output_parser/test_cot_output_parser.py:207:71
-ERROR No matching overload found for function `str.join` called with arguments: (list[AgentScratchpadUnit.Action | str]) [no-matching-overload]
- --> tests/unit_tests/core/agent/output_parser/test_cot_output_parser.py:208:23
+ --> tests/unit_tests/core/agent/output_parser/test_cot_output_parser.py:205:71
ERROR Argument `list[Unknown]` is not assignable to parameter `llm_response` with type `Generator[LLMResultChunk]` in function `core.agent.output_parser.cot_output_parser.CotAgentOutputParser.handle_react_stream_output` [bad-argument-type]
- --> tests/unit_tests/core/agent/output_parser/test_cot_output_parser.py:215:75
-ERROR No matching overload found for function `str.join` called with arguments: (list[AgentScratchpadUnit.Action | str]) [no-matching-overload]
- --> tests/unit_tests/core/agent/output_parser/test_cot_output_parser.py:216:27
+ --> tests/unit_tests/core/agent/output_parser/test_cot_output_parser.py:218:71
ERROR Argument `list[Unknown]` is not assignable to parameter `llm_response` with type `Generator[LLMResultChunk]` in function `core.agent.output_parser.cot_output_parser.CotAgentOutputParser.handle_react_stream_output` [bad-argument-type]
- --> tests/unit_tests/core/agent/output_parser/test_cot_output_parser.py:221:71
+ --> tests/unit_tests/core/agent/output_parser/test_cot_output_parser.py:226:71
ERROR No matching overload found for function `str.join` called with arguments: (list[AgentScratchpadUnit.Action | str]) [no-matching-overload]
- --> tests/unit_tests/core/agent/output_parser/test_cot_output_parser.py:222:25
+ --> tests/unit_tests/core/agent/output_parser/test_cot_output_parser.py:227:38
ERROR Argument `list[Unknown]` is not assignable to parameter `llm_response` with type `Generator[LLMResultChunk]` in function `core.agent.output_parser.cot_output_parser.CotAgentOutputParser.handle_react_stream_output` [bad-argument-type]
- --> tests/unit_tests/core/agent/output_parser/test_cot_output_parser.py:229:71
+ --> tests/unit_tests/core/agent/output_parser/test_cot_output_parser.py:247:71
ERROR No matching overload found for function `str.join` called with arguments: (list[AgentScratchpadUnit.Action | str]) [no-matching-overload]
- --> tests/unit_tests/core/agent/output_parser/test_cot_output_parser.py:230:25
-ERROR Argument `list[Unknown]` is not assignable to parameter `llm_response` with type `Generator[LLMResultChunk]` in function `core.agent.output_parser.cot_output_parser.CotAgentOutputParser.handle_react_stream_output` [bad-argument-type]
- --> tests/unit_tests/core/agent/output_parser/test_cot_output_parser.py:242:71
-ERROR Argument `list[Unknown]` is not assignable to parameter `llm_response` with type `Generator[LLMResultChunk]` in function `core.agent.output_parser.cot_output_parser.CotAgentOutputParser.handle_react_stream_output` [bad-argument-type]
- --> tests/unit_tests/core/agent/output_parser/test_cot_output_parser.py:255:71
-ERROR Argument `list[Unknown]` is not assignable to parameter `llm_response` with type `Generator[LLMResultChunk]` in function `core.agent.output_parser.cot_output_parser.CotAgentOutputParser.handle_react_stream_output` [bad-argument-type]
- --> tests/unit_tests/core/agent/output_parser/test_cot_output_parser.py:263:71
-ERROR No matching overload found for function `str.join` called with arguments: (list[AgentScratchpadUnit.Action | str]) [no-matching-overload]
- --> tests/unit_tests/core/agent/output_parser/test_cot_output_parser.py:264:38
-ERROR Argument `list[Unknown]` is not assignable to parameter `llm_response` with type `Generator[LLMResultChunk]` in function `core.agent.output_parser.cot_output_parser.CotAgentOutputParser.handle_react_stream_output` [bad-argument-type]
- --> tests/unit_tests/core/agent/output_parser/test_cot_output_parser.py:284:71
-ERROR No matching overload found for function `str.join` called with arguments: (list[AgentScratchpadUnit.Action | str]) [no-matching-overload]
- --> tests/unit_tests/core/agent/output_parser/test_cot_output_parser.py:286:25
+ --> tests/unit_tests/core/agent/output_parser/test_cot_output_parser.py:249:25
ERROR `None` is not assignable to attribute `agent_callback` with type `DifyAgentCallbackHandler` [bad-assignment]
--> tests/unit_tests/core/agent/test_cot_agent_runner.py:121:29
ERROR Object of class `DummyRunner` has no attribute `session` [missing-attribute]
@@ -2970,8 +2898,6 @@
--> tests/unit_tests/core/agent/test_fc_agent_runner.py:238:9
ERROR Argument `None` is not assignable to parameter `query` with type `str` in function `core.agent.fc_agent_runner.FunctionCallAgentRunner._organize_user_query` [bad-argument-type]
--> tests/unit_tests/core/agent/test_fc_agent_runner.py:339:46
-ERROR `list[str]` is not assignable to attribute `files` with type `Sequence[File] | list[File]` [bad-assignment]
- --> tests/unit_tests/core/agent/test_fc_agent_runner.py:351:24
ERROR Object of class `FunctionCallAgentRunner` has no attribute `session` [missing-attribute]
--> tests/unit_tests/core/agent/test_fc_agent_runner.py:407:58
ERROR Object of class `FunctionCallAgentRunner` has no attribute `session` [missing-attribute]
@@ -3116,6 +3042,10 @@
--> tests/unit_tests/core/app/apps/advanced_chat/test_app_generator.py:1450:33
ERROR Object of type `Generator[Mapping[str, Any] | str] | Mapping[str, Any]` has no attribute `ok` [missing-attribute]
--> tests/unit_tests/core/app/apps/advanced_chat/test_app_generator.py:1453:16
+ERROR Object of class `NoneType` has no attribute `app_id` [missing-attribute]
+ --> tests/unit_tests/core/app/apps/advanced_chat/test_app_generator.py:1457:16
+ERROR Object of class `NoneType` has no attribute `user_id` [missing-attribute]
+ --> tests/unit_tests/core/app/apps/advanced_chat/test_app_generator.py:1458:16
ERROR Argument `SimpleNamespace` is not assignable to parameter `graph_runtime_state` with type `RuntimeState` in function `core.app.apps.advanced_chat.app_generator.AdvancedChatAppGenerator.resume` [bad-argument-type]
--> tests/unit_tests/core/app/apps/advanced_chat/test_app_generator.py:1498:33
ERROR Object of type `Generator[Mapping[str, Any] | str] | Mapping[str, Any]` has no attribute `ok` [missing-attribute]
@@ -3686,6 +3616,8 @@
--> tests/unit_tests/core/app/apps/test_workflow_app_runner.py:925:59
ERROR Argument `TestWorkflowAppRunnerCoreCases.TestWorkflowBasedAppRunner.test_handle_start_node_result_events_project_outputs._QueueManager` is not assignable to parameter `queue_manager` with type `AppQueueManager` in function `core.app.apps.workflow_app_runner.WorkflowBasedAppRunner.__init__` [bad-argument-type]
--> tests/unit_tests/core/app/apps/test_workflow_app_runner.py:1004:59
+ERROR Object of class `object` has no attribute `outputs` [missing-attribute]
+ --> tests/unit_tests/core/app/apps/test_workflow_app_runner.py:1027:20
ERROR Argument `_DummyQueueManager` is not assignable to parameter `queue_manager` with type `AppQueueManager` in function `core.app.apps.workflow_app_runner.WorkflowBasedAppRunner.__init__` [bad-argument-type]
--> tests/unit_tests/core/app/apps/test_workflow_app_runner.py:1056:55
ERROR Argument `_DummyWorkflowEntry` is not assignable to parameter `workflow_entry` with type `WorkflowEntry` in function `core.app.apps.workflow_app_runner.WorkflowBasedAppRunner.handle_event` [bad-argument-type]
@@ -3722,6 +3654,10 @@
--> tests/unit_tests/core/app/apps/workflow/test_app_generator.py:1414:37
ERROR Object of type `Generator[Mapping[str, Any] | str] | Mapping[str, Any]` has no attribute `ok` [missing-attribute]
--> tests/unit_tests/core/app/apps/workflow/test_app_generator.py:1419:20
+ERROR Object of class `NoneType` has no attribute `app_id` [missing-attribute]
+ --> tests/unit_tests/core/app/apps/workflow/test_app_generator.py:1423:20
+ERROR Object of class `NoneType` has no attribute `user_id` [missing-attribute]
+ --> tests/unit_tests/core/app/apps/workflow/test_app_generator.py:1424:20
ERROR Argument `SimpleNamespace` is not assignable to parameter `graph_runtime_state` with type `RuntimeState` in function `core.app.apps.workflow.app_generator.WorkflowAppGenerator.resume` [bad-argument-type]
--> tests/unit_tests/core/app/apps/workflow/test_app_generator.py:1465:37
ERROR Object of type `Generator[Mapping[str, Any] | str] | Mapping[str, Any]` has no attribute `ok` [missing-attribute]
@@ -4167,19 +4103,19 @@
ERROR Object of class `Account` has no attribute `app_id` [missing-attribute]
--> tests/unit_tests/core/plugin/backwards_invocation/test_app.py:440:16
ERROR Object of class `NoneType` has no attribute `context_tokens` [missing-attribute]
- --> tests/unit_tests/core/plugin/backwards_invocation/test_model.py:408:12
+ --> tests/unit_tests/core/plugin/backwards_invocation/test_model.py:407:12
ERROR Object of class `NoneType` has no attribute `max_output_tokens` [missing-attribute]
- --> tests/unit_tests/core/plugin/backwards_invocation/test_model.py:409:12
+ --> tests/unit_tests/core/plugin/backwards_invocation/test_model.py:408:12
ERROR Object of class `NoneType` has no attribute `output_parameter` [missing-attribute]
- --> tests/unit_tests/core/plugin/backwards_invocation/test_model.py:410:12
+ --> tests/unit_tests/core/plugin/backwards_invocation/test_model.py:409:12
ERROR Object of class `NoneType` has no attribute `context_tokens` [missing-attribute]
- --> tests/unit_tests/core/plugin/backwards_invocation/test_model.py:434:12
+ --> tests/unit_tests/core/plugin/backwards_invocation/test_model.py:433:12
ERROR Object of class `NoneType` has no attribute `max_output_tokens` [missing-attribute]
- --> tests/unit_tests/core/plugin/backwards_invocation/test_model.py:435:12
+ --> tests/unit_tests/core/plugin/backwards_invocation/test_model.py:434:12
ERROR Object of class `NoneType` has no attribute `max_output_tokens` [missing-attribute]
- --> tests/unit_tests/core/plugin/backwards_invocation/test_model.py:454:12
+ --> tests/unit_tests/core/plugin/backwards_invocation/test_model.py:453:12
ERROR Object of class `NoneType` has no attribute `output_parameter` [missing-attribute]
- --> tests/unit_tests/core/plugin/backwards_invocation/test_model.py:455:12
+ --> tests/unit_tests/core/plugin/backwards_invocation/test_model.py:454:12
ERROR Argument `TestPluginDaemonEntities.test_credential_type_helpers._FakeCredential` is not assignable to parameter `self` with type `CredentialType` in function `core.plugin.entities.plugin_daemon.CredentialType.get_name` [bad-argument-type]
--> tests/unit_tests/core/plugin/entities/test_plugin_daemon.py:313:40
ERROR Argument `object` is not assignable to parameter `method` with type `str` in function `httpx._api.request` [bad-argument-type]
@@ -4363,13 +4299,17 @@
ERROR Argument `str` is not assignable to parameter `doc_form` with type `IndexStructureType | SQLCoreOperations[IndexStructureType]` in function `models.dataset.Document.__init__` [bad-argument-type]
--> tests/unit_tests/core/rag/datasource/test_retrieval_service.py:148:18
ERROR Argument `list[FromClause]` is not assignable to parameter `tables` with type `Sequence[Table] | None` in function `sqlalchemy.sql.schema.MetaData.create_all` [bad-argument-type]
- --> tests/unit_tests/core/rag/extractor/test_excel_extractor.py:17:56
+ --> tests/unit_tests/core/rag/extractor/test_excel_extractor.py:18:56
+WARN Cannot find type stubs for module `xlrd` [untyped-import]
+ --> tests/unit_tests/core/rag/extractor/test_excel_extractor.py:284:16
+WARN Cannot find type stubs for module `xlrd` [untyped-import]
+ --> tests/unit_tests/core/rag/extractor/test_excel_extractor.py:351:16
ERROR Argument `object | None` is not assignable to parameter `session` with type `Session | None` in function `core.rag.extractor.extract_processor.ExtractProcessor.extract` [bad-argument-type]
--> tests/unit_tests/core/rag/extractor/test_extract_processor.py:222:85
ERROR Object of class `NoneType` has no attribute `strip` [missing-attribute]
--> tests/unit_tests/core/rag/extractor/test_markdown_extractor.py:30:16
ERROR `_CloseRecorder` is not assignable to attribute `temp_file` with type `_TemporaryFileWrapper[bytes]` [bad-assignment]
- --> tests/unit_tests/core/rag/extractor/test_word_extractor.py:399:27
+ --> tests/unit_tests/core/rag/extractor/test_word_extractor.py:397:27
ERROR Object of class `NoneType` has no attribute `indexing_status` [missing-attribute]
--> tests/unit_tests/core/rag/index_processor/test_index_processor.py:240:16
ERROR Object of class `FunctionType` has no attribute `return_value` [missing-attribute]
@@ -4489,45 +4429,37 @@
WARN Call to deprecated overload `contextlib.contextmanager` [deprecated]
--> tests/unit_tests/core/repositories/test_sqlalchemy_workflow_node_execution_repository.py:874:1
ERROR Argument `Literal[core.entities.provider_entities.ProviderQuotaType.TRIAL]` is not assignable to parameter `quota_type` with type `models.enums.ProviderQuotaType | SQLCoreOperations[models.enums.ProviderQuotaType | None] | None` in function `models.provider.Provider.__init__` [bad-argument-type]
- --> tests/unit_tests/core/test_provider_manager.py:120:20
+ --> tests/unit_tests/core/test_provider_manager.py:119:20
ERROR Argument `Literal['llm']` is not assignable to parameter `model_type` with type `ModelType | SQLCoreOperations[ModelType]` in function `models.provider.ProviderModelSetting.__init__` [bad-argument-type]
- --> tests/unit_tests/core/test_provider_manager.py:178:20
+ --> tests/unit_tests/core/test_provider_manager.py:177:20
ERROR Argument `Literal['llm']` is not assignable to parameter `model_type` with type `ModelType | SQLCoreOperations[ModelType]` in function `models.provider.LoadBalancingModelConfig.__init__` [bad-argument-type]
- --> tests/unit_tests/core/test_provider_manager.py:191:24
-ERROR Argument `Literal['llm']` is not assignable to parameter `model_type` with type `ModelType | SQLCoreOperations[ModelType]` in function `models.provider.LoadBalancingModelConfig.__init__` [bad-argument-type]
- --> tests/unit_tests/core/test_provider_manager.py:200:24
-ERROR Argument `list[ProviderModelSetting]` is not assignable to parameter `provider_model_settings` with type `list[_ProviderModelSettingCacheEntry] | None` in function `core.provider_manager.ProviderManager._to_model_settings` [bad-argument-type]
- --> tests/unit_tests/core/test_provider_manager.py:221:37
-ERROR Argument `list[LoadBalancingModelConfig]` is not assignable to parameter `load_balancing_model_configs` with type `list[_LoadBalancingModelConfigCacheEntry] | None` in function `core.provider_manager.ProviderManager._to_model_settings` [bad-argument-type]
- --> tests/unit_tests/core/test_provider_manager.py:222:42
-ERROR Argument `Literal['llm']` is not assignable to parameter `model_type` with type `ModelType | SQLCoreOperations[ModelType]` in function `models.provider.ProviderModelSetting.__init__` [bad-argument-type]
- --> tests/unit_tests/core/test_provider_manager.py:265:20
+ --> tests/unit_tests/core/test_provider_manager.py:190:24
ERROR Argument `Literal['llm']` is not assignable to parameter `model_type` with type `ModelType | SQLCoreOperations[ModelType]` in function `models.provider.LoadBalancingModelConfig.__init__` [bad-argument-type]
- --> tests/unit_tests/core/test_provider_manager.py:274:24
+ --> tests/unit_tests/core/test_provider_manager.py:199:24
ERROR Argument `list[ProviderModelSetting]` is not assignable to parameter `provider_model_settings` with type `list[_ProviderModelSettingCacheEntry] | None` in function `core.provider_manager.ProviderManager._to_model_settings` [bad-argument-type]
- --> tests/unit_tests/core/test_provider_manager.py:288:67
+ --> tests/unit_tests/core/test_provider_manager.py:220:37
ERROR Argument `list[LoadBalancingModelConfig]` is not assignable to parameter `load_balancing_model_configs` with type `list[_LoadBalancingModelConfigCacheEntry] | None` in function `core.provider_manager.ProviderManager._to_model_settings` [bad-argument-type]
- --> tests/unit_tests/core/test_provider_manager.py:288:77
+ --> tests/unit_tests/core/test_provider_manager.py:221:42
ERROR Argument `Literal['llm']` is not assignable to parameter `model_type` with type `ModelType | SQLCoreOperations[ModelType]` in function `models.provider.ProviderModelSetting.__init__` [bad-argument-type]
- --> tests/unit_tests/core/test_provider_manager.py:478:20
+ --> tests/unit_tests/core/test_provider_manager.py:416:20
ERROR Argument `Literal['llm']` is not assignable to parameter `model_type` with type `ModelType | SQLCoreOperations[ModelType]` in function `models.provider.LoadBalancingModelConfig.__init__` [bad-argument-type]
- --> tests/unit_tests/core/test_provider_manager.py:489:24
+ --> tests/unit_tests/core/test_provider_manager.py:427:24
ERROR Argument `list[ProviderModelSetting]` is not assignable to parameter `provider_model_settings` with type `list[_ProviderModelSettingCacheEntry] | None` in function `core.provider_manager.ProviderManager._to_model_settings` [bad-argument-type]
- --> tests/unit_tests/core/test_provider_manager.py:509:37
+ --> tests/unit_tests/core/test_provider_manager.py:447:37
ERROR Argument `list[LoadBalancingModelConfig]` is not assignable to parameter `load_balancing_model_configs` with type `list[_LoadBalancingModelConfigCacheEntry] | None` in function `core.provider_manager.ProviderManager._to_model_settings` [bad-argument-type]
- --> tests/unit_tests/core/test_provider_manager.py:510:42
+ --> tests/unit_tests/core/test_provider_manager.py:448:42
ERROR Argument `Literal['llm']` is not assignable to parameter `model_type` with type `ModelType | SQLCoreOperations[ModelType]` in function `models.provider.ProviderModelSetting.__init__` [bad-argument-type]
- --> tests/unit_tests/core/test_provider_manager.py:528:20
+ --> tests/unit_tests/core/test_provider_manager.py:466:20
ERROR Argument `Literal['llm']` is not assignable to parameter `model_type` with type `ModelType | SQLCoreOperations[ModelType]` in function `models.provider.LoadBalancingModelConfig.__init__` [bad-argument-type]
- --> tests/unit_tests/core/test_provider_manager.py:539:24
+ --> tests/unit_tests/core/test_provider_manager.py:477:24
ERROR Argument `Literal['llm']` is not assignable to parameter `model_type` with type `ModelType | SQLCoreOperations[ModelType]` in function `models.provider.LoadBalancingModelConfig.__init__` [bad-argument-type]
- --> tests/unit_tests/core/test_provider_manager.py:548:24
+ --> tests/unit_tests/core/test_provider_manager.py:486:24
ERROR Argument `list[ProviderModelSetting]` is not assignable to parameter `provider_model_settings` with type `list[_ProviderModelSettingCacheEntry] | None` in function `core.provider_manager.ProviderManager._to_model_settings` [bad-argument-type]
- --> tests/unit_tests/core/test_provider_manager.py:569:37
+ --> tests/unit_tests/core/test_provider_manager.py:507:37
ERROR Argument `list[LoadBalancingModelConfig]` is not assignable to parameter `load_balancing_model_configs` with type `list[_LoadBalancingModelConfigCacheEntry] | None` in function `core.provider_manager.ProviderManager._to_model_settings` [bad-argument-type]
- --> tests/unit_tests/core/test_provider_manager.py:570:42
+ --> tests/unit_tests/core/test_provider_manager.py:508:42
WARN Identity comparison `False is True` is always False [unnecessary-comparison]
- --> tests/unit_tests/core/test_provider_manager.py:1309:30
+ --> tests/unit_tests/core/test_provider_manager.py:1247:30
ERROR Class member `DummyTool.get_runtime_parameters` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
--> tests/unit_tests/core/tools/__base/test_tool.py:71:9
ERROR Object of type `ToolInvokeMessage.BlobChunkMessage | ToolInvokeMessage.BlobMessage | ToolInvokeMessage.FileMessage | ToolInvokeMessage.JsonMessage | ToolInvokeMessage.LogMessage | ToolInvokeMessage.RetrieverResourceMessage | ToolInvokeMessage.TextMessage | ToolInvokeMessage.VariableMessage | None` has no attribute `text` [missing-attribute]
@@ -5875,7 +5807,7 @@
ERROR Object of class `object` has no attribute `agent_role` [missing-attribute]
--> tests/unit_tests/services/agent/test_roster_service.py:5614:16
ERROR Argument `object` is not assignable to parameter `pwd` with type `bytes | None` in function `zipfile.ZipFile.read` [bad-argument-type]
- --> tests/unit_tests/services/agent/test_skill_package_service.py:327:44
+ --> tests/unit_tests/services/agent/test_skill_package_service.py:306:44
ERROR Object of class `NoneType` has no attribute `node_job_config_dict` [missing-attribute]
--> tests/unit_tests/services/agent/test_workflow_publish_service.py:601:49
ERROR Object of class `NoneType` has no attribute `node_job_config_dict` [missing-attribute]
@@ -6009,9 +5941,9 @@
ERROR Argument `(_storage_key: str, *, expires_in: int, filename: str) -> str` is not assignable to parameter `sign_download_url` with type `WorkflowRunArchiveDownloadUrlSigner` in function `services.retention.workflow_run.archive_log_service.WorkflowRunArchiveService.__init__` [bad-argument-type]
--> tests/unit_tests/services/retention/workflow_run/test_archive_log_service.py:405:27
ERROR Argument `FakeRepo` is not assignable to parameter `workflow_run_repo` with type `APIWorkflowRunRepository | None` in function `services.retention.workflow_run.clear_free_plan_expired_workflow_run_logs.WorkflowRunCleanup.__init__` [bad-argument-type]
- --> tests/unit_tests/services/retention/workflow_run/test_clear_free_plan_expired_workflow_run_logs.py:565:49
+ --> tests/unit_tests/services/retention/workflow_run/test_clear_free_plan_expired_workflow_run_logs.py:564:49
ERROR Class member `FailingRepo.delete_runs_with_related_by_ids` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
- --> tests/unit_tests/services/retention/workflow_run/test_clear_free_plan_expired_workflow_run_logs.py:865:17
+ --> tests/unit_tests/services/retention/workflow_run/test_clear_free_plan_expired_workflow_run_logs.py:864:17
ERROR Argument `list[FromClause]` is not assignable to parameter `tables` with type `Sequence[Table] | None` in function `sqlalchemy.sql.schema.MetaData.create_all` [bad-argument-type]
--> tests/unit_tests/services/retention/workflow_run/test_restore_archived_workflow_run.py:58:16
ERROR Argument `str` is not assignable to parameter `type` with type `SQLCoreOperations[WorkflowType] | WorkflowType` in function `models.workflow.WorkflowRun.__init__` [bad-argument-type]
@@ -6080,26 +6012,44 @@
--> tests/unit_tests/services/test_app_task_service.py:1319:18
ERROR `in` is not supported between `Literal['Quota limit reached']` and `None` [not-iterable]
--> tests/unit_tests/services/test_async_workflow_service.py:344:16
+WARN `services.billing_service.BillingService.get_model_provider_payment_link` is deprecated [deprecated]
+ --> tests/unit_tests/services/test_billing_service.py:660:18
+WARN `services.billing_service.BillingService.get_tenant_feature_plan_usage` is deprecated [deprecated]
+ --> tests/unit_tests/services/test_billing_service.py:791:18
+WARN `services.billing_service.BillingService.get_tenant_feature_plan_usage` is deprecated [deprecated]
+ --> tests/unit_tests/services/test_billing_service.py:1751:17
+WARN `services.billing_service.BillingService.get_tenant_feature_plan_usage` is deprecated [deprecated]
+ --> tests/unit_tests/services/test_billing_service.py:1762:25
+ERROR Argument `BillingInfo` is not assignable to parameter `result` with type `dict[Unknown, Unknown]` in function `TestBillingServiceSubscriptionInfoDataType._assert_billing_info_types` [bad-argument-type]
+ --> tests/unit_tests/services/test_billing_service.py:1853:41
+ERROR Argument `BillingInfo` is not assignable to parameter `result` with type `dict[Unknown, Unknown]` in function `TestBillingServiceSubscriptionInfoDataType._assert_billing_info_types` [bad-argument-type]
+ --> tests/unit_tests/services/test_billing_service.py:1862:41
+ERROR Argument `BillingInfo` is not assignable to parameter `result` with type `dict[Unknown, Unknown]` in function `TestBillingServiceSubscriptionInfoDataType._assert_billing_info_types` [bad-argument-type]
+ --> tests/unit_tests/services/test_billing_service.py:1875:41
+ERROR Argument `BillingInfo` is not assignable to parameter `result` with type `dict[Unknown, Unknown]` in function `TestBillingServiceSubscriptionInfoDataType._assert_billing_info_types` [bad-argument-type]
+ --> tests/unit_tests/services/test_billing_service.py:1886:41
ERROR Argument `Literal['normal']` is not assignable to parameter `status` with type `ConversationStatus | SQLCoreOperations[ConversationStatus]` in function `models.model.Conversation.__init__` [bad-argument-type]
- --> tests/unit_tests/services/test_clear_free_plan_tenant_expired_logs.py:119:16
+ --> tests/unit_tests/services/test_clear_free_plan_tenant_expired_logs.py:117:16
ERROR Object of class `object` has no attribute `id` [missing-attribute]
- --> tests/unit_tests/services/test_clear_free_plan_tenant_expired_logs.py:331:39
+ --> tests/unit_tests/services/test_clear_free_plan_tenant_expired_logs.py:329:39
ERROR Class member `FixedDateTime.now` overrides parent class `datetime` in an inconsistent manner [bad-override]
- --> tests/unit_tests/services/test_clear_free_plan_tenant_expired_logs.py:595:13
+ --> tests/unit_tests/services/test_clear_free_plan_tenant_expired_logs.py:593:13
ERROR Class member `FixedDateTime.now` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
- --> tests/unit_tests/services/test_clear_free_plan_tenant_expired_logs.py:595:13
+ --> tests/unit_tests/services/test_clear_free_plan_tenant_expired_logs.py:593:13
ERROR Class member `FixedDateTime.now` overrides parent class `datetime` in an inconsistent manner [bad-override]
- --> tests/unit_tests/services/test_clear_free_plan_tenant_expired_logs.py:667:13
+ --> tests/unit_tests/services/test_clear_free_plan_tenant_expired_logs.py:665:13
ERROR Class member `FixedDateTime.now` overrides a member in a parent class but is missing an `@override` decorator [missing-override-decorator]
- --> tests/unit_tests/services/test_clear_free_plan_tenant_expired_logs.py:667:13
+ --> tests/unit_tests/services/test_clear_free_plan_tenant_expired_logs.py:665:13
ERROR Object of class `object` has no attribute `kw` [missing-attribute]
- --> tests/unit_tests/services/test_clear_free_plan_tenant_expired_logs.py:764:12
+ --> tests/unit_tests/services/test_clear_free_plan_tenant_expired_logs.py:762:12
ERROR Object of class `object` has no attribute `kw` [missing-attribute]
- --> tests/unit_tests/services/test_clear_free_plan_tenant_expired_logs.py:765:12
+ --> tests/unit_tests/services/test_clear_free_plan_tenant_expired_logs.py:763:12
ERROR Argument `Literal['invalid']` is not assignable to parameter `session_factory` with type `Engine | sessionmaker[Unknown] | None` in function `services.file_service.FileService.__init__` [bad-argument-type]
--> tests/unit_tests/services/test_file_service.py:92:45
ERROR Unexpected keyword argument `whole_workspace` in function `core.workflow.human_input_adapter.EmailRecipients.__init__` [unexpected-keyword]
--> tests/unit_tests/services/test_human_input_delivery_test_service.py:260:44
+ERROR Argument `dict[str, Any]` is not assignable to parameter `utm_info` with type `UtmInfo` in function `services.operation_service.OperationService.record_utm` [bad-argument-type]
+ --> tests/unit_tests/services/test_operation_service.py:118:57
ERROR Argument `Iterator[dict[str, str | dict[str, str]] | str]` is not assignable to parameter `response` with type `Generator[Mapping[str, Any] | str] | Mapping[str, Any]` in function `services.snippet_generate_service.SnippetGenerateService._filter_virtual_start_events` [bad-argument-type]
--> tests/unit_tests/services/test_snippet_generate_service.py:80:68
ERROR Keyword argument `loop_count` with type `Literal[1]` is not assignable to parameter `**kwargs` with type `str` in function `typing.MutableMapping.update` [bad-argument-type]
@@ -6307,11 +6257,11 @@
ERROR Argument `dict[str, list[Unknown] | str | dict[str, bool] | dict[str, bool | str] | dict[str, dict[str, bool | int | list[str]]]]` is not assignable to parameter `features` with type `dict[str, object]` in function `_create_workflow` [bad-argument-type]
--> tests/unit_tests/services/test_workflow_restore.py:63:18
ERROR `dict[str, str]` is not assignable to dict value type `list[Unknown] | str` [bad-assignment]
- --> tests/unit_tests/services/test_workflow_service.py:237:30
+ --> tests/unit_tests/services/test_workflow_service.py:236:30
ERROR Argument `Literal['invalid']` is not assignable to parameter `value` with type `AppMode | SQLCoreOperations[AppMode]` in function `sqlalchemy.orm.base.Mapped.__set__` [bad-argument-type]
- --> tests/unit_tests/services/test_workflow_service.py:3900:24
+ --> tests/unit_tests/services/test_workflow_service.py:3899:24
ERROR Argument `dict[str, str | dict[str, str]]` is not assignable to parameter `node_config` with type `NodeConfigDict` in function `services.workflow_service.WorkflowService._build_human_input_node_for_debugging` [bad-argument-type]
- --> tests/unit_tests/services/test_workflow_service.py:3931:69
+ --> tests/unit_tests/services/test_workflow_service.py:3930:69
ERROR Object of class `MCPToolProvider` has no attribute `provider_icon` [missing-attribute]
--> tests/unit_tests/services/tools/test_tools_transform_service.py:80:9
ERROR Object of class `MCPToolProvider` has no attribute `masked_server_url` [missing-attribute]
|
Pyrefly Type Coverage
|
Head branch was pushed to by a user without write access
Codecov Report❌ Patch coverage is
❌ Your project check has failed because the head coverage (82.35%) is below the adjusted base coverage (88.30%). You can increase the head coverage or adjust the Removed Code Behavior. Additional details and impacted files@@ Coverage Diff @@
## main #44666 +/- ##
==========================================
- Coverage 89.30% 82.35% -6.95%
==========================================
Files 5983 6078 +95
Lines 375012 377702 +2690
Branches 76053 76825 +772
==========================================
- Hits 334898 311066 -23832
- Misses 34078 60684 +26606
+ Partials 6036 5952 -84
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
|
Hi maintainers, gentle ping on this one when you have a moment — happy to adjust anything. Thanks! |
Summary
Fixes #44658
Legacy
.xlsimports ran text cells through pandas' number inference, so00123became123and1e3became1000.0. The.xlsbranch ofExcelExtractornow checks the xlrd cell type and keeps the stored text for text cells. Numeric cells are unchanged, and if the workbook isn't available it falls back to the old behavior..xlsxgoes through openpyxl and doesn't have this problem.Tests: added a regression test and tests against a real
.xlsfixture (thanks @PointerL).test_excel_extractor.py: 14 passed. With the fix reverted, 3 of them fail.Screenshots
N/A, backend only.
Checklist
make lint && make type-check(backend) andvp staged(frontend) to appease the lint godsI ran the
make lintsteps one by one becausemakewasn't available, and they all pass. pyrefly reports no errors on the changed file. The repo-wide type-check fails locally only on optional vector-DB imports that I don't have installed.I used AI assistance for this change and checked the results myself.
From Grok Bot