Commit Graph

48 Commits

Author SHA1 Message Date
zavage
f6c92dfe37 Merge pull request 'Feature/modernization' (#1) from feature/modernization into master
Reviewed-on: https://git.zavage.net/Zavage-Software/wabot/pulls/1
2026-07-12 17:48:29 -06:00
154344e94a refactor: rename sessions submodule to _sessions to avoid shadowing sessions()
wabot/__init__.py defines def sessions(...) and also had a sessions.py
submodule, so wabot.sessions (attribute) resolved to the function,
shadowing the module for import wabot.sessions as m style access. This
is the same class of collision that browser.py -> _browser.py already
fixed. Renaming to _sessions.py removes the ambiguity and lets
docs/api.rst drop the :no-index: Sphinx workaround in favor of plain
autoclass directives on the public SessionRecord/SessionStore
re-exports.
2026-07-12 15:37:56 -06:00
68978a34e7 style: apply ruff format across the codebase
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-08 23:12:23 -06:00
5ec5ad615a docs: rewrite README and CLAUDE.md for the modernized library
Reflect the final architecture (Browser facade in _browser.py, JSON
session persistence, ManagedService/ExternalServer hosts, pacing
policies), correct the stale "no test suite" claim now that uv +
pytest (140 unit + 9 integration) + ruff + Sphinx are in place, and
round out .gitignore with .venv/, .pytest_cache/, .ruff_cache/.
2026-07-08 23:10:45 -06:00
163f71e51b docs: sphinx site — quickstart, sessions guide, page objects, API ref 2026-07-08 23:01:44 -06:00
7e24d3445d test: external WebDriver server mode (persist + ephemeral) 2026-07-08 22:53:01 -06:00
2dd4d8c13c test: flagship cross-process browser pickup + destroy cleanup 2026-07-08 22:47:16 -06:00
8fd9bd1fa0 test: end-to-end page-object flow on real headless browsers 2026-07-08 22:42:25 -06:00
a83a95c4e8 docs: sync Task 13 conftest with the dir-scoped marker fix 2026-07-08 22:37:37 -06:00
8682ec28fe test: integration fixtures — static site server, auto-marking conftest 2026-07-08 22:35:14 -06:00
8ed9565c88 refactor: rename browser submodule to _browser to avoid shadowing browser() 2026-07-08 22:31:46 -06:00
b20cf0d10b fix: browser()/destroy() never leak a managed driver service 2026-07-08 22:28:09 -06:00
5245757cc8 feat: public API — wabot.browser()/sessions()/destroy() with reattach flow 2026-07-08 22:13:01 -06:00
3d0e00e88f fix: Browser.quit() stops managed driver service; document facade semantics 2026-07-08 22:08:56 -06:00
4734915475 feat: Browser facade with working refuse-after-exception guard 2026-07-07 23:25:24 -06:00
cafacee2b9 test: verify screenshot seam alignment; release tile buffers 2026-07-07 23:23:17 -06:00
ab50a984a8 feat: full-page screenshots (firefox raw command, chromium PIL stitch) 2026-07-07 23:14:53 -06:00
2adb7b2236 fix: set_checkbox propagates click failure; coerce set_el_value; cover alerts/selects 2026-07-07 23:12:11 -06:00
c99b9509f4 feat: Page interaction helpers (paced clicks, forms, alerts, waits) 2026-07-07 23:01:09 -06:00
fbb7d4114a fix: graceful handling of malformed element declarations; quiet absent-element log 2026-07-07 22:58:05 -06:00
6af8468730 feat: Page element maps with MRO inheritance and typed dispatch 2026-07-07 22:48:18 -06:00
9e825ffd80 test: assert field pacing wiring; simplify NullField 2026-07-07 22:45:46 -06:00
807b91e902 feat: typed field wrappers with pacing (port of legacy fields.py) 2026-07-07 22:37:33 -06:00
14281a0774 fix: attach() closes executor on failure; guard session adoption 2026-07-07 22:35:44 -06:00
3cec3f647b feat: session reattach via ReattachingRemote (adopts saved session id) 2026-07-07 22:25:33 -06:00
65d31e8821 fix: ManagedService terminates unresponsive drivers; stop_service reaps children 2026-07-07 22:23:09 -06:00
f82b77ae62 feat: ManagedService spawns detached driver services that outlive python 2026-07-07 22:08:32 -06:00
e9d307e020 fix: service_alive returns False for non-HTTP responders 2026-07-07 22:05:03 -06:00
99cfe0337c feat: options builder, /status liveness check, ExternalServer host 2026-07-07 21:54:48 -06:00
1909eb621e fix: harden SessionStore — per-record timestamp handling, atomic writes, robust quarantine 2026-07-07 21:49:05 -06:00
8a81f16d7d feat: JSON SessionStore with stale eviction (replaces pickle persistence) 2026-07-07 21:39:11 -06:00
f5e358393d test: assert pacing actually varies; document NoPacing as policy base 2026-07-07 21:37:33 -06:00
25aaa5d4da feat: pacing policies (HumanPacing default behavior, NoPacing for tests) 2026-07-07 21:30:09 -06:00
afa47186cc build: replace setup.py with uv project, src layout 2026-07-07 21:23:55 -06:00
f3f6d23cc6 docs: implementation plan for the modernization (18 TDD tasks)
APIs verified against installed selenium 4.45.0 / uv 0.11.26 /
pytest 9.1.1 / sphinx 9.1.0, including a live end-to-end run of the
session-reattach pattern against chromedriver 150.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 21:20:43 -06:00
12ef5d7eee docs: add CLAUDE.md and modernization design spec
Design approved in brainstorming session: uv packaging, Selenium 4
migration, session persistence rebuilt on JSON + session-ID reattach
(replacing pickle/dill), configurable pacing, pytest unit+integration
tiers, Sphinx docs.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 20:07:07 -06:00
bd631fb008 doc: small readme 2024-11-15 04:06:23 -07:00
bd8a3f35f2 more robusting pickling of saved browser instances 2022-03-06 02:11:38 -07:00
fd2aa7c524 working remote firefox and chromium 2022-03-02 08:56:08 -07:00
3ef55c0590 moved browser instance creation to factory, more cleaning and appdirs 2022-03-02 08:20:22 -07:00
e0e70cc539 changed quote style 2021-07-11 18:51:54 -06:00
6b3de90926 Added dill req to setup 2020-07-26 01:50:51 -06:00
372d5d0ad4 bugfix super weird 2020-03-12 00:57:07 -06:00
359eb96f21 set resolution for phantom/headless driver 2020-02-23 03:48:38 -07:00
d028dea189 added phantom support 2020-02-23 03:21:21 -07:00
b64cd13525 updated reference to new logger 2019-12-29 20:51:50 -07:00
1208b6b306 api/BrowserProxy integrated and logger 2019-12-27 22:23:52 -07:00
f070be3353 first try 2019-12-27 19:28:52 -07:00