dp-cli 0.8.0__tar.gz → 0.8.1__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 (87) hide show
  1. {dp_cli-0.8.0/dp_cli.egg-info → dp_cli-0.8.1}/PKG-INFO +1 -1
  2. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/session.py +7 -0
  3. {dp_cli-0.8.0 → dp_cli-0.8.1/dp_cli.egg-info}/PKG-INFO +1 -1
  4. {dp_cli-0.8.0 → dp_cli-0.8.1}/pyproject.toml +1 -1
  5. {dp_cli-0.8.0 → dp_cli-0.8.1}/tests/test_skill_dist.py +15 -7
  6. {dp_cli-0.8.0 → dp_cli-0.8.1}/LICENSE +0 -0
  7. {dp_cli-0.8.0 → dp_cli-0.8.1}/MANIFEST.in +0 -0
  8. {dp_cli-0.8.0 → dp_cli-0.8.1}/README.md +0 -0
  9. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/__init__.py +0 -0
  10. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/bridge.py +0 -0
  11. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/bridge_manager.py +0 -0
  12. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/catalog.py +0 -0
  13. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/commands/__init__.py +0 -0
  14. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/commands/_utils.py +0 -0
  15. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/commands/assert_cmd.py +0 -0
  16. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/commands/batch.py +0 -0
  17. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/commands/browser.py +0 -0
  18. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/commands/element.py +0 -0
  19. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/commands/emulate.py +0 -0
  20. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/commands/extract.py +0 -0
  21. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/commands/hook.py +0 -0
  22. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/commands/keyboard.py +0 -0
  23. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/commands/meta.py +0 -0
  24. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/commands/misc.py +0 -0
  25. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/commands/network.py +0 -0
  26. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/commands/observe.py +0 -0
  27. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/commands/page.py +0 -0
  28. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/commands/record.py +0 -0
  29. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/commands/rpc.py +0 -0
  30. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/commands/serve.py +0 -0
  31. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/commands/snapshot_cmd.py +0 -0
  32. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/commands/storage.py +0 -0
  33. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/commands/tab.py +0 -0
  34. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/human.py +0 -0
  35. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/locators/__init__.py +0 -0
  36. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/locators/playwright.py +0 -0
  37. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/locators/pw_js.py +0 -0
  38. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/locators/suggest.py +0 -0
  39. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/logs.py +0 -0
  40. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/main.py +0 -0
  41. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/output.py +0 -0
  42. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/pw_ts.py +0 -0
  43. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/recorder.py +0 -0
  44. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/skill_dist.py +0 -0
  45. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/snapshot/__init__.py +0 -0
  46. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/snapshot/a11y.py +0 -0
  47. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/snapshot/clickable.py +0 -0
  48. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/snapshot/clickable_js.py +0 -0
  49. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/snapshot/extract.py +0 -0
  50. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/snapshot/js_scripts.py +0 -0
  51. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/snapshot/utils.py +0 -0
  52. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli/stealth.py +0 -0
  53. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli.egg-info/SOURCES.txt +0 -0
  54. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli.egg-info/dependency_links.txt +0 -0
  55. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli.egg-info/entry_points.txt +0 -0
  56. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli.egg-info/requires.txt +0 -0
  57. {dp_cli-0.8.0 → dp_cli-0.8.1}/dp_cli.egg-info/top_level.txt +0 -0
  58. {dp_cli-0.8.0 → dp_cli-0.8.1}/setup.cfg +0 -0
  59. {dp_cli-0.8.0 → dp_cli-0.8.1}/setup.py +0 -0
  60. {dp_cli-0.8.0 → dp_cli-0.8.1}/skills/dp-cli/SKILL.md +0 -0
  61. {dp_cli-0.8.0 → dp_cli-0.8.1}/skills/dp-cli/references/auto-connect-gnome.sh +0 -0
  62. {dp_cli-0.8.0 → dp_cli-0.8.1}/skills/dp-cli/references/commands.md +0 -0
  63. {dp_cli-0.8.0 → dp_cli-0.8.1}/skills/dp-cli/references/extraction.md +0 -0
  64. {dp_cli-0.8.0 → dp_cli-0.8.1}/tests/test_a11y.py +0 -0
  65. {dp_cli-0.8.0 → dp_cli-0.8.1}/tests/test_assert_cmd.py +0 -0
  66. {dp_cli-0.8.0 → dp_cli-0.8.1}/tests/test_batch.py +0 -0
  67. {dp_cli-0.8.0 → dp_cli-0.8.1}/tests/test_bridge_integration.py +0 -0
  68. {dp_cli-0.8.0 → dp_cli-0.8.1}/tests/test_bridge_manager.py +0 -0
  69. {dp_cli-0.8.0 → dp_cli-0.8.1}/tests/test_browser_cdp.py +0 -0
  70. {dp_cli-0.8.0 → dp_cli-0.8.1}/tests/test_browser_smoke.py +0 -0
  71. {dp_cli-0.8.0 → dp_cli-0.8.1}/tests/test_clickable.py +0 -0
  72. {dp_cli-0.8.0 → dp_cli-0.8.1}/tests/test_commands.py +0 -0
  73. {dp_cli-0.8.0 → dp_cli-0.8.1}/tests/test_compact.py +0 -0
  74. {dp_cli-0.8.0 → dp_cli-0.8.1}/tests/test_docs.py +0 -0
  75. {dp_cli-0.8.0 → dp_cli-0.8.1}/tests/test_event_wait.py +0 -0
  76. {dp_cli-0.8.0 → dp_cli-0.8.1}/tests/test_expect_gen.py +0 -0
  77. {dp_cli-0.8.0 → dp_cli-0.8.1}/tests/test_hook.py +0 -0
  78. {dp_cli-0.8.0 → dp_cli-0.8.1}/tests/test_human.py +0 -0
  79. {dp_cli-0.8.0 → dp_cli-0.8.1}/tests/test_pw_locator.py +0 -0
  80. {dp_cli-0.8.0 → dp_cli-0.8.1}/tests/test_pw_ts.py +0 -0
  81. {dp_cli-0.8.0 → dp_cli-0.8.1}/tests/test_recorder.py +0 -0
  82. {dp_cli-0.8.0 → dp_cli-0.8.1}/tests/test_resolve_locator.py +0 -0
  83. {dp_cli-0.8.0 → dp_cli-0.8.1}/tests/test_rpc.py +0 -0
  84. {dp_cli-0.8.0 → dp_cli-0.8.1}/tests/test_serve.py +0 -0
  85. {dp_cli-0.8.0 → dp_cli-0.8.1}/tests/test_session.py +0 -0
  86. {dp_cli-0.8.0 → dp_cli-0.8.1}/tests/test_snapshot_small.py +0 -0
  87. {dp_cli-0.8.0 → dp_cli-0.8.1}/tests/test_trim.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dp-cli
3
- Version: 0.8.0
3
+ Version: 0.8.1
4
4
  Summary: A powerful CLI for DrissionPage — browser automation, structured data extraction, network listening and more.
5
5
  License: BSD-3-Clause
6
6
  Project-URL: Homepage, https://github.com/mofanx/dp-cli
@@ -461,6 +461,13 @@ def _connect_browser(session_name: str = 'default', headless: bool = False,
461
461
  if headless:
462
462
  co.headless(True)
463
463
 
464
+ # CI/容器环境 Chrome 沙箱常起不来:root 用户或 CI 环境变量时补
465
+ # --no-sandbox/--disable-dev-shm-usage(dev shm 在容器里默认 64MB)
466
+ import os
467
+ if os.environ.get('CI') or (hasattr(os, 'geteuid') and os.geteuid() == 0):
468
+ co.set_argument('--no-sandbox')
469
+ co.set_argument('--disable-dev-shm-usage')
470
+
464
471
  co.auto_port(True)
465
472
 
466
473
  page = ChromiumPage(co)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dp-cli
3
- Version: 0.8.0
3
+ Version: 0.8.1
4
4
  Summary: A powerful CLI for DrissionPage — browser automation, structured data extraction, network listening and more.
5
5
  License: BSD-3-Clause
6
6
  Project-URL: Homepage, https://github.com/mofanx/dp-cli
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "dp-cli"
7
- version = "0.8.0"
7
+ version = "0.8.1"
8
8
  description = "A powerful CLI for DrissionPage — browser automation, structured data extraction, network listening and more."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.8"
@@ -26,6 +26,14 @@ def _skill_dir(home):
26
26
  return home / '.claude' / 'skills' / 'dp-cli'
27
27
 
28
28
 
29
+ def _sep_runner():
30
+ """stderr 分离的 CliRunner;click>=8.2 移除了 mix_stderr 参数(默认即分离)。"""
31
+ try:
32
+ return CliRunner(mix_stderr=False)
33
+ except TypeError:
34
+ return CliRunner()
35
+
36
+
29
37
  @pytest.mark.unit
30
38
  def test_install_skills_default_target(runner, fake_home):
31
39
  """默认装到 ~/.claude/skills/dp-cli,frontmatter 写入 CLI 版本戳。"""
@@ -86,7 +94,7 @@ def test_install_skills_check(runner, fake_home):
86
94
  assert r.exit_code == 0
87
95
  # 改版本戳 → 漂移
88
96
  md = _skill_dir(fake_home) / 'SKILL.md'
89
- md.write_text(md.read_text().replace('dp_cli_version: 0.7.0',
97
+ md.write_text(md.read_text().replace(f'dp_cli_version: {sd.cli_version()}',
90
98
  'dp_cli_version: 9.9.9'))
91
99
  r = runner.invoke(cli, ['install', '--skills', '--check'])
92
100
  assert r.exit_code == 1
@@ -117,10 +125,10 @@ def test_install_refresh_commands_md(runner, fake_home, monkeypatch):
117
125
  @pytest.mark.unit
118
126
  def test_warn_drift_stderr_only(fake_home):
119
127
  """漂移警告只去 stderr,stdout 纯净;once-per-version 防刷屏。"""
120
- sep = CliRunner(mix_stderr=False)
128
+ sep = _sep_runner()
121
129
  sep.invoke(cli, ['install', '--skills'])
122
130
  md = _skill_dir(fake_home) / 'SKILL.md'
123
- md.write_text(md.read_text().replace('dp_cli_version: 0.7.0',
131
+ md.write_text(md.read_text().replace(f'dp_cli_version: {sd.cli_version()}',
124
132
  'dp_cli_version: 0.0.1'))
125
133
  (fake_home / '.dp_cli').mkdir(exist_ok=True)
126
134
  r = sep.invoke(cli, ['catalog'])
@@ -132,7 +140,7 @@ def test_warn_drift_stderr_only(fake_home):
132
140
 
133
141
 
134
142
  @pytest.mark.unit
135
- def test_catalog_md_and_json(runner):
143
+ def test_catalog_md_and_json(runner, fake_home):
136
144
  """dp catalog 默认 JSON schema,--md 出命令表(裸输出可重定向)。"""
137
145
  r = runner.invoke(cli, ['catalog'])
138
146
  assert r.exit_code == 0
@@ -153,7 +161,7 @@ def test_stamp_version_three_states():
153
161
 
154
162
 
155
163
  @pytest.mark.unit
156
- def test_install_without_skills_flag(runner):
164
+ def test_install_without_skills_flag(runner, fake_home):
157
165
  """dp install 无 --skills → INVALID_ARGS。"""
158
166
  r = runner.invoke(cli, ['install'])
159
167
  assert r.exit_code != 0
@@ -264,14 +272,14 @@ def test_drift_multi_target(runner, fake_home, monkeypatch):
264
272
  @pytest.mark.unit
265
273
  def test_warn_drift_multi_target_message(fake_home, monkeypatch):
266
274
  """多目标漂移:stderr 警告列出漂移目标路径,stdout 纯净。"""
267
- sep = CliRunner(mix_stderr=False)
275
+ sep = _sep_runner()
268
276
  (fake_home / '.claude').mkdir()
269
277
  (fake_home / '.config' / 'devin').mkdir(parents=True)
270
278
  monkeypatch.chdir(fake_home)
271
279
  sep.invoke(cli, ['install', '--skills', '--all'])
272
280
  md = (fake_home / '.config' / 'devin' / 'skills' / 'dp-cli'
273
281
  / 'SKILL.md')
274
- md.write_text(md.read_text().replace('dp_cli_version: 0.7.0',
282
+ md.write_text(md.read_text().replace(f'dp_cli_version: {sd.cli_version()}',
275
283
  'dp_cli_version: 0.0.1'))
276
284
  (fake_home / '.dp_cli').mkdir(exist_ok=True)
277
285
  r = sep.invoke(cli, ['catalog'])
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