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.
Files changed (38) hide show
  1. {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/PKG-INFO +1 -1
  2. {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/pyproject.toml +1 -1
  3. {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/pyproject.toml.orig +1 -1
  4. {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/adapters/phenom.py +19 -9
  5. {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/LICENSE +0 -0
  6. {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/README.md +0 -0
  7. {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/__init__.py +0 -0
  8. {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/adapters/__init__.py +0 -0
  9. {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/adapters/ashby.py +0 -0
  10. {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/adapters/bamboohr.py +0 -0
  11. {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/adapters/breezy.py +0 -0
  12. {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/adapters/dayforce.py +0 -0
  13. {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/adapters/greenhouse.py +0 -0
  14. {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/adapters/hireology.py +0 -0
  15. {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/adapters/jazzhr.py +0 -0
  16. {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/adapters/lever.py +0 -0
  17. {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/adapters/manatal.py +0 -0
  18. {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/adapters/oracle.py +0 -0
  19. {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/adapters/paycor.py +0 -0
  20. {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/adapters/paylocity.py +0 -0
  21. {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/adapters/recruitee.py +0 -0
  22. {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/adapters/smartrecruiters.py +0 -0
  23. {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/adapters/teamtailor.py +0 -0
  24. {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/adapters/workable.py +0 -0
  25. {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/adapters/wttj.py +0 -0
  26. {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/cli.py +0 -0
  27. {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/core/__init__.py +0 -0
  28. {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/core/accounts.py +0 -0
  29. {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/core/adapter.py +0 -0
  30. {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/core/attempts.py +0 -0
  31. {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/core/browser.py +0 -0
  32. {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/core/commands.py +0 -0
  33. {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/core/matching.py +0 -0
  34. {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/core/paths.py +0 -0
  35. {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/core/registry.py +0 -0
  36. {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/core/results.py +0 -0
  37. {atsfill-0.0.4.dev63 → atsfill-0.0.4.dev64}/src/atsfill/py.typed +0 -0
  38. {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.dev63
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
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "atsfill"
3
- version = "0.0.4.dev63"
3
+ version = "0.0.4.dev64"
4
4
  description = "Read, dry-run and submit job application forms on hiring systems: Ashby, Greenhouse, Teamtailor, Welcome to the Jungle."
5
5
  readme = "README.md"
6
6
  license = "MIT"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "atsfill"
3
- version = "0.0.4.dev63"
3
+ version = "0.0.4.dev64"
4
4
  description = "Read, dry-run and submit job application forms on hiring systems: Ashby, Greenhouse, Teamtailor, Welcome to the Jungle."
5
5
  readme = "README.md"
6
6
  license = "MIT"
@@ -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
- ph = literal("var phApp = phApp || ")
432
- ph["ddo"] = literal("phApp.ddo = ")
433
- ph["sessionParams"] = literal("phApp.sessionParams = ")
434
- return ph
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