fcmd 0.2.3__tar.gz → 0.2.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. {fcmd-0.2.3 → fcmd-0.2.4}/.bumpversion.toml +1 -1
  2. {fcmd-0.2.3 → fcmd-0.2.4}/Makefile +6 -3
  3. {fcmd-0.2.3 → fcmd-0.2.4}/PKG-INFO +1 -1
  4. {fcmd-0.2.3 → fcmd-0.2.4}/pyproject.toml +1 -1
  5. {fcmd-0.2.3 → fcmd-0.2.4}/pyrefly.toml +2 -0
  6. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/__init__.py +1 -1
  7. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/_env_persist.py +3 -1
  8. {fcmd-0.2.3 → fcmd-0.2.4}/uv.lock +1 -1
  9. {fcmd-0.2.3 → fcmd-0.2.4}/.copier-answers.yml +0 -0
  10. {fcmd-0.2.3 → fcmd-0.2.4}/.coveragerc +0 -0
  11. {fcmd-0.2.3 → fcmd-0.2.4}/.gitattributes +0 -0
  12. {fcmd-0.2.3 → fcmd-0.2.4}/.github/workflows/ci.yml +0 -0
  13. {fcmd-0.2.3 → fcmd-0.2.4}/.github/workflows/release.yml +0 -0
  14. {fcmd-0.2.3 → fcmd-0.2.4}/.gitignore +0 -0
  15. {fcmd-0.2.3 → fcmd-0.2.4}/.pre-commit-config.yaml +0 -0
  16. {fcmd-0.2.3 → fcmd-0.2.4}/.python-version +0 -0
  17. {fcmd-0.2.3 → fcmd-0.2.4}/.readthedocs.yaml +0 -0
  18. {fcmd-0.2.3 → fcmd-0.2.4}/.vscode/settings.json +0 -0
  19. {fcmd-0.2.3 → fcmd-0.2.4}/LICENSE +0 -0
  20. {fcmd-0.2.3 → fcmd-0.2.4}/README.md +0 -0
  21. {fcmd-0.2.3 → fcmd-0.2.4}/docs/_static/.gitkeep +0 -0
  22. {fcmd-0.2.3 → fcmd-0.2.4}/docs/api.rst +0 -0
  23. {fcmd-0.2.3 → fcmd-0.2.4}/docs/changelog.rst +0 -0
  24. {fcmd-0.2.3 → fcmd-0.2.4}/docs/conf.py +0 -0
  25. {fcmd-0.2.3 → fcmd-0.2.4}/docs/index.rst +0 -0
  26. {fcmd-0.2.3 → fcmd-0.2.4}/pytest.ini +0 -0
  27. {fcmd-0.2.3 → fcmd-0.2.4}/ruff.toml +0 -0
  28. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/__main__.py +0 -0
  29. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/_compat.py +0 -0
  30. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/_dependency_runner.py +0 -0
  31. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/_layer_runner.py +0 -0
  32. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/_task_runner.py +0 -0
  33. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/apis/__init__.py +0 -0
  34. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/apis/_tool_args.py +0 -0
  35. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/apis/_tool_exec.py +0 -0
  36. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/apis/context.py +0 -0
  37. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/apis/dag.py +0 -0
  38. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/apis/errors.py +0 -0
  39. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/apis/profiling.py +0 -0
  40. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/apis/report.py +0 -0
  41. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/apis/task.py +0 -0
  42. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/apis/toolkit.py +0 -0
  43. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/__init__.py +0 -0
  44. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/_common.py +0 -0
  45. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/_completion_scripts.py +0 -0
  46. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/_doctor_helpers.py +0 -0
  47. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/_env_helpers.py +0 -0
  48. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/_profiler_helpers.py +0 -0
  49. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/archivex.py +0 -0
  50. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/asciitool.py +0 -0
  51. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/autofmt.py +0 -0
  52. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/bumpversion.py +0 -0
  53. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/calcdate.py +0 -0
  54. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/casetool.py +0 -0
  55. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/clr.py +0 -0
  56. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/codetool.py +0 -0
  57. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/colortool.py +0 -0
  58. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/convtool.py +0 -0
  59. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/cryptool.py +0 -0
  60. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/csvtool.py +0 -0
  61. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/dockercmd.py +0 -0
  62. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/envdev.py +0 -0
  63. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/filedate.py +0 -0
  64. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/filelevel.py +0 -0
  65. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/filerename.py +0 -0
  66. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/filesearch.py +0 -0
  67. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/folderback.py +0 -0
  68. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/folderzip.py +0 -0
  69. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/gittool.py +0 -0
  70. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/hashfile.py +0 -0
  71. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/hashtool.py +0 -0
  72. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/idtool.py +0 -0
  73. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/imagetool.py +0 -0
  74. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/inifile.py +0 -0
  75. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/iptool.py +0 -0
  76. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/jsontool.py +0 -0
  77. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/lscalc.py +0 -0
  78. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/main.py +0 -0
  79. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/mathtool.py +0 -0
  80. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/nettool.py +0 -0
  81. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/packtool.py +0 -0
  82. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/padtool.py +0 -0
  83. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/pathtool.py +0 -0
  84. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/pdftool.py +0 -0
  85. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/piptool.py +0 -0
  86. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/portcheck.py +0 -0
  87. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/pymake.py +0 -0
  88. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/randtool.py +0 -0
  89. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/regextool.py +0 -0
  90. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/reseticoncache.py +0 -0
  91. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/screenshot.py +0 -0
  92. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/setenv.py +0 -0
  93. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/sshcopyid.py +0 -0
  94. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/stattool.py +0 -0
  95. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/sysinfo.py +0 -0
  96. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/taskkill.py +0 -0
  97. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/textdiff.py +0 -0
  98. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/timetool.py +0 -0
  99. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/tomltool.py +0 -0
  100. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/txttool.py +0 -0
  101. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/urltool.py +0 -0
  102. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/which.py +0 -0
  103. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/writefile.py +0 -0
  104. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/xmltool.py +0 -0
  105. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/yamtool.py +0 -0
  106. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/cli/zipencrypt.py +0 -0
  107. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/command.py +0 -0
  108. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/conditions.py +0 -0
  109. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/console.py +0 -0
  110. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/executors.py +0 -0
  111. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/models/__init__.py +0 -0
  112. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/models/command.py +0 -0
  113. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/models/filefilter.py +0 -0
  114. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/models/version.py +0 -0
  115. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/py.typed +0 -0
  116. {fcmd-0.2.3 → fcmd-0.2.4}/src/fcmd/yaml_loader.py +0 -0
  117. {fcmd-0.2.3 → fcmd-0.2.4}/tests/__init__.py +0 -0
  118. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli.py +0 -0
  119. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_archivex.py +0 -0
  120. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_asciitool.py +0 -0
  121. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_autofmt.py +0 -0
  122. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_bumpversion.py +0 -0
  123. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_calcdate.py +0 -0
  124. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_casetool.py +0 -0
  125. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_clr.py +0 -0
  126. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_codetool.py +0 -0
  127. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_colortool.py +0 -0
  128. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_convtool.py +0 -0
  129. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_cryptool.py +0 -0
  130. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_csvtool.py +0 -0
  131. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_dockercmd.py +0 -0
  132. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_envdev.py +0 -0
  133. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_filedate.py +0 -0
  134. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_filelevel.py +0 -0
  135. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_filerename.py +0 -0
  136. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_filesearch.py +0 -0
  137. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_folderback.py +0 -0
  138. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_folderzip.py +0 -0
  139. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_gittool.py +0 -0
  140. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_hashfile.py +0 -0
  141. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_hashtool.py +0 -0
  142. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_idtool.py +0 -0
  143. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_imagetool.py +0 -0
  144. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_inifile.py +0 -0
  145. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_iptool.py +0 -0
  146. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_jsontool.py +0 -0
  147. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_lscalc.py +0 -0
  148. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_mathtool.py +0 -0
  149. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_nettool.py +0 -0
  150. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_packtool.py +0 -0
  151. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_padtool.py +0 -0
  152. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_pathtool.py +0 -0
  153. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_pdftool.py +0 -0
  154. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_piptool.py +0 -0
  155. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_portcheck.py +0 -0
  156. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_profiler.py +0 -0
  157. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_pymake.py +0 -0
  158. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_randtool.py +0 -0
  159. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_regextool.py +0 -0
  160. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_reseticoncache.py +0 -0
  161. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_screenshot.py +0 -0
  162. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_setenv.py +0 -0
  163. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_sshcopyid.py +0 -0
  164. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_stattool.py +0 -0
  165. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_sysinfo.py +0 -0
  166. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_taskkill.py +0 -0
  167. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_textdiff.py +0 -0
  168. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_timetool.py +0 -0
  169. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_tomltool.py +0 -0
  170. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_txttool.py +0 -0
  171. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_urltool.py +0 -0
  172. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_which.py +0 -0
  173. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_writefile.py +0 -0
  174. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_xmltool.py +0 -0
  175. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_yamtool.py +0 -0
  176. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_cli_zipencrypt.py +0 -0
  177. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_command.py +0 -0
  178. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_conditions.py +0 -0
  179. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_console.py +0 -0
  180. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_context.py +0 -0
  181. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_env_persist.py +0 -0
  182. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_executors.py +0 -0
  183. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_fcmd.py +0 -0
  184. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_graph.py +0 -0
  185. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_init.py +0 -0
  186. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_models.py +0 -0
  187. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_perf_baseline.py +0 -0
  188. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_profiling.py +0 -0
  189. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_report.py +0 -0
  190. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_task.py +0 -0
  191. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_toolkit.py +0 -0
  192. {fcmd-0.2.3 → fcmd-0.2.4}/tests/test_yaml_loader.py +0 -0
  193. {fcmd-0.2.3 → fcmd-0.2.4}/tox.ini +0 -0
  194. {fcmd-0.2.3 → fcmd-0.2.4}/uv.toml +0 -0
@@ -1,5 +1,5 @@
1
1
  [tool.bumpversion]
2
- current_version = "0.2.2"
2
+ current_version = "0.2.4"
3
3
  commit = true
4
4
  exclude = ["template/*"]
5
5
  message = "chore: 更新版本 {current_version} → {new_version}"
@@ -4,7 +4,7 @@
4
4
  PACKAGE := fcmd
5
5
  COV_THRESHOLD := 95
6
6
 
7
- .PHONY: help sync build b clean c test cov lint typecheck check doc tox bump patch minor major push
7
+ .PHONY: help sync build b clean c test cov lint typecheck typecheck-ci check doc tox bump patch minor major push
8
8
 
9
9
  help: ## 显示帮助信息
10
10
  @awk 'BEGIN {FS = ":.*##"} /^[a-zA-Z].*:.*##/ {printf " \033[36m%-14s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)
@@ -31,10 +31,13 @@ lint: ## 代码风格检查 (ruff)
31
31
  uv run ruff check .
32
32
  uv run ruff format --check .
33
33
 
34
- typecheck: ## 类型检查 (pyrefly)
34
+ typecheck: ## 类型检查 (pyrefly, 本地平台)
35
35
  uv run pyrefly check
36
36
 
37
- check: lint typecheck cov ## 运行全套门禁 (lint + typecheck + cov)
37
+ typecheck-ci: ## 类型检查 (pyrefly, CI 平台 linux — 捕获跨平台问题)
38
+ uv run pyrefly check --python-platform linux
39
+
40
+ check: lint typecheck typecheck-ci cov ## 运行全套门禁 (lint + typecheck + typecheck-ci + cov)
38
41
 
39
42
  doc: ## 构建 Sphinx 文档
40
43
  uv run sphinx-build -b html docs docs/_build/html
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: fcmd
3
- Version: 0.2.3
3
+ Version: 0.2.4
4
4
  Summary: 极速 Python 工具集应用:DAG 任务调度 + 组合 CLI
5
5
  Author: fcmd
6
6
  License: MIT
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "fcmd"
3
- version = "0.2.3"
3
+ version = "0.2.4"
4
4
  description = "极速 Python 工具集应用:DAG 任务调度 + 组合 CLI"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.8"
@@ -3,3 +3,5 @@ project-excludes = [".venv/**", "template/**"]
3
3
  project-includes = ["**/*.ipynb", "**/*.py*"]
4
4
  python-version = "3.8"
5
5
  search-path = ["."]
6
+ # winreg 仅 Windows 可用;替换为 Any 使 Linux CI 也能通过类型检查(运行时仍导入真实模块)
7
+ replace-imports-with-any = ["winreg"]
@@ -22,7 +22,7 @@ from __future__ import annotations
22
22
 
23
23
  from typing import Any
24
24
 
25
- __version__ = "0.2.3"
25
+ __version__ = "0.2.4"
26
26
 
27
27
  __all__ = [
28
28
  "Context",
@@ -42,10 +42,12 @@ def _persist_env_windows(name: str, value: str) -> None: # pragma: no cover -
42
42
  winreg.SetValueEx(key, name, 0, winreg.REG_EXPAND_SZ, value)
43
43
 
44
44
  # 广播 WM_SETTINGCHANGE,通知已运行进程刷新环境块(否则新终端才生效)。
45
+ # getattr 取 windll 避免 Linux 下 pyrefly 报 missing-attribute(windll 仅 Windows 存在)
45
46
  hwnd_broadcast = 0xFFFF # HWND_BROADCAST
46
47
  wm_settingchange = 0x001A
47
48
  smto_abortifhung = 0x0002
48
- ctypes.windll.user32.SendMessageTimeoutW(
49
+ windll = getattr(ctypes, "windll") # noqa: B009 - 跨平台动态访问,非安全访问用途
50
+ windll.user32.SendMessageTimeoutW(
49
51
  hwnd_broadcast,
50
52
  wm_settingchange,
51
53
  0,
@@ -424,7 +424,7 @@ wheels = [
424
424
 
425
425
  [[package]]
426
426
  name = "fcmd"
427
- version = "0.2.2"
427
+ version = "0.2.3"
428
428
  source = { editable = "." }
429
429
  dependencies = [
430
430
  { name = "pyyaml" },
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes