atsfill 0.0.4.dev124__tar.gz → 0.0.4.dev126__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 (55) hide show
  1. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/PKG-INFO +1 -1
  2. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/pyproject.toml +1 -1
  3. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/pyproject.toml.orig +1 -1
  4. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/adapters/wttj.py +14 -3
  5. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/LICENSE +0 -0
  6. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/README.md +0 -0
  7. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/__init__.py +0 -0
  8. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/adapters/__init__.py +0 -0
  9. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/adapters/ashby.py +0 -0
  10. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/adapters/bamboohr.py +0 -0
  11. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/adapters/breezy.py +0 -0
  12. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/adapters/dayforce.py +0 -0
  13. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/adapters/eightfold.py +0 -0
  14. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/adapters/greenhouse.py +0 -0
  15. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/adapters/gupy.py +0 -0
  16. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/adapters/hireology.py +0 -0
  17. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/adapters/hiringthing.py +0 -0
  18. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/adapters/hrmdirect.py +0 -0
  19. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/adapters/jazzhr.py +0 -0
  20. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/adapters/join.py +0 -0
  21. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/adapters/lever.py +0 -0
  22. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/adapters/manatal.py +0 -0
  23. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/adapters/oracle.py +0 -0
  24. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/adapters/paycor.py +0 -0
  25. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/adapters/paylocity.py +0 -0
  26. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/adapters/personio.py +0 -0
  27. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/adapters/phenom.py +0 -0
  28. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/adapters/pinpoint.py +0 -0
  29. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/adapters/recruitee.py +0 -0
  30. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/adapters/rippling.py +0 -0
  31. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/adapters/smartrecruiters.py +0 -0
  32. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/adapters/successfactors.js +0 -0
  33. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/adapters/successfactors.py +0 -0
  34. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/adapters/taleo.py +0 -0
  35. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/adapters/teamtailor.py +0 -0
  36. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/adapters/ukg.py +0 -0
  37. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/adapters/workable.py +0 -0
  38. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/adapters/workday.py +0 -0
  39. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/adapters/zohorecruit.py +0 -0
  40. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/cli.py +0 -0
  41. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/core/__init__.py +0 -0
  42. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/core/accounts.py +0 -0
  43. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/core/adapter.py +0 -0
  44. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/core/attempts.py +0 -0
  45. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/core/browser.py +0 -0
  46. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/core/commands.py +0 -0
  47. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/core/conditions.py +0 -0
  48. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/core/html.py +0 -0
  49. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/core/matching.py +0 -0
  50. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/core/passwords.py +0 -0
  51. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/core/paths.py +0 -0
  52. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/core/registry.py +0 -0
  53. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/core/results.py +0 -0
  54. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/src/atsfill/py.typed +0 -0
  55. {atsfill-0.0.4.dev124 → atsfill-0.0.4.dev126}/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.dev124
3
+ Version: 0.0.4.dev126
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.dev124"
3
+ version = "0.0.4.dev126"
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.dev124"
3
+ version = "0.0.4.dev126"
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"
@@ -13,7 +13,7 @@ from urllib.parse import urlsplit
13
13
 
14
14
  from atsfill.core import browser, matching
15
15
  from atsfill.core.adapter import Blocked, Gap, NotTaken, Refused, Unsupported
16
- from atsfill.core.browser import Locator, Page, Request, Response, Timeout
16
+ from atsfill.core.browser import Locator, Page, PageRequest, Request, Response, Timeout
17
17
  from atsfill.core.results import Answer, Field, FieldType, SideEffect
18
18
 
19
19
  HOST = "www.welcometothejungle.com"
@@ -205,12 +205,21 @@ def _account_form(page: Page, form: str, values: dict[str, str], posts: str) ->
205
205
  page.wait_for_function(
206
206
  "() => document.cookie.includes('csrf-token=')", timeout=ACCOUNT_TIMEOUT_MS
207
207
  )
208
+ sent: list[PageRequest] = []
208
209
  answered: list[Response] = []
209
210
 
211
+ def posted(request: PageRequest) -> bool:
212
+ return request.method == "POST" and urlsplit(request.url).path.endswith(posts)
213
+
214
+ def on_request(request: PageRequest) -> None:
215
+ if posted(request):
216
+ sent.append(request)
217
+
210
218
  def on_response(response: Response) -> None:
211
- if response.request.method == "POST" and urlsplit(response.url).path.endswith(posts):
219
+ if posted(response.request):
212
220
  answered.append(response)
213
221
 
222
+ page.on("request", on_request)
214
223
  page.on("response", on_response)
215
224
  on_form = page.url
216
225
  page.locator(f"[data-testid={form}-submit-button]").click()
@@ -223,7 +232,8 @@ def _account_form(page: Page, form: str, values: dict[str, str], posts: str) ->
223
232
  # the page leaves the form on its own: a navigation before then is aborted
224
233
  page.wait_for_url(lambda url: url != on_form, timeout=ACCOUNT_TIMEOUT_MS)
225
234
  return
226
- if said.count():
235
+ # the page can show the answer before its response event arrives here
236
+ if said.count() and not sent:
227
237
  field = said.first.get_attribute("data-testid") or ""
228
238
  text = said.first.inner_text().strip()
229
239
  if field.endswith("-password-error"):
@@ -231,6 +241,7 @@ def _account_form(page: Page, form: str, values: dict[str, str], posts: str) ->
231
241
  raise Unsupported(f"unhandled_rendering: the form says {text!r}")
232
242
  page.wait_for_timeout(ACCOUNT_POLL_MS)
233
243
  finally:
244
+ page.remove_listener("request", on_request)
234
245
  page.remove_listener("response", on_response)
235
246
  raise Unsupported("unhandled_rendering: the form answered nothing")
236
247
 
File without changes
File without changes