atsfill 0.0.4.dev63__tar.gz → 0.0.4.dev64__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.
- {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/PKG-INFO +1 -1
- {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/pyproject.toml +1 -1
- {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/pyproject.toml.orig +1 -1
- {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/adapters/phenom.py +19 -9
- {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/LICENSE +0 -0
- {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/README.md +0 -0
- {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/__init__.py +0 -0
- {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/adapters/__init__.py +0 -0
- {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/adapters/ashby.py +0 -0
- {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/adapters/bamboohr.py +0 -0
- {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/adapters/breezy.py +0 -0
- {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/adapters/dayforce.py +0 -0
- {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/adapters/greenhouse.py +0 -0
- {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/adapters/hireology.py +0 -0
- {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/adapters/jazzhr.py +0 -0
- {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/adapters/lever.py +0 -0
- {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/adapters/manatal.py +0 -0
- {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/adapters/oracle.py +0 -0
- {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/adapters/paycor.py +0 -0
- {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/adapters/paylocity.py +0 -0
- {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/adapters/recruitee.py +0 -0
- {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/adapters/smartrecruiters.py +0 -0
- {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/adapters/teamtailor.py +0 -0
- {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/adapters/workable.py +0 -0
- {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/adapters/wttj.py +0 -0
- {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/cli.py +0 -0
- {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/core/__init__.py +0 -0
- {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/core/accounts.py +0 -0
- {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/core/adapter.py +0 -0
- {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/core/attempts.py +0 -0
- {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/core/browser.py +0 -0
- {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/core/commands.py +0 -0
- {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/core/matching.py +0 -0
- {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/core/paths.py +0 -0
- {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/core/registry.py +0 -0
- {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/core/results.py +0 -0
- {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/py.typed +0 -0
- {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/registry.toml +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: atsfill
|
|
3
|
-
Version: 0.0.4.
|
|
3
|
+
Version: 0.0.4.dev64
|
|
4
4
|
Summary: Read, dry-run and submit job application forms on hiring systems: Ashby, Greenhouse, Teamtailor, Welcome to the Jungle.
|
|
5
5
|
Keywords: job-applications,ats,ashby,greenhouse,teamtailor,ai-agents,cli
|
|
6
6
|
Author: shbernal
|
|
@@ -311,6 +311,7 @@ class Phenom:
|
|
|
311
311
|
return None
|
|
312
312
|
|
|
313
313
|
def read_form(self, page: Page) -> list[Field]:
|
|
314
|
+
_check_open(page)
|
|
314
315
|
self._apply = _apply_url(page)
|
|
315
316
|
self._open(page)
|
|
316
317
|
try:
|
|
@@ -379,6 +380,7 @@ class Phenom:
|
|
|
379
380
|
page.evaluate("() => { localStorage.clear(); sessionStorage.clear(); }")
|
|
380
381
|
if fresh or not page.url.startswith(self._apply):
|
|
381
382
|
page.goto(self._apply, wait_until="domcontentloaded")
|
|
383
|
+
_check_open(page)
|
|
382
384
|
try:
|
|
383
385
|
page.locator(f"{FORM} {NEXT}, {FORM} button[type=submit]").first.wait_for(
|
|
384
386
|
state="attached", timeout=FORM_TIMEOUT_MS
|
|
@@ -421,17 +423,25 @@ def get(obj: Any, path: str) -> Any:
|
|
|
421
423
|
|
|
422
424
|
def _phapp_of(html: str) -> dict[str, Any]:
|
|
423
425
|
"""The apply page's `phApp`, from the object literals its scripts assign."""
|
|
426
|
+
ph = _literal(html, "var phApp = phApp || ")
|
|
427
|
+
ph["ddo"] = _literal(html, "phApp.ddo = ")
|
|
428
|
+
ph["sessionParams"] = _literal(html, "phApp.sessionParams = ")
|
|
429
|
+
return ph
|
|
424
430
|
|
|
425
|
-
def literal(marker: str) -> Any:
|
|
426
|
-
at = html.find(marker)
|
|
427
|
-
if at < 0:
|
|
428
|
-
raise ValueError(f"no {marker.strip()} on the page")
|
|
429
|
-
return json.JSONDecoder().raw_decode(html, at + len(marker))[0]
|
|
430
431
|
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
432
|
+
def _literal(html: str, marker: str) -> Any:
|
|
433
|
+
at = html.find(marker)
|
|
434
|
+
if at < 0:
|
|
435
|
+
raise ValueError(f"no {marker.strip()} on the page")
|
|
436
|
+
return json.JSONDecoder().raw_decode(html, at + len(marker))[0]
|
|
437
|
+
|
|
438
|
+
|
|
439
|
+
def _check_open(page: Page) -> None:
|
|
440
|
+
"""Raises `posting_gone` on Phenom's page for a closed posting, which a closed job's URL
|
|
441
|
+
and its wizard's both serve."""
|
|
442
|
+
with suppress(ValueError):
|
|
443
|
+
if _literal(page.content(), "var phApp = phApp || ").get("pageName") == "404":
|
|
444
|
+
raise Unsupported("posting_gone: the careers site answers its 404 page")
|
|
435
445
|
|
|
436
446
|
|
|
437
447
|
def _read(
|
|
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
|