atsfill 0.0.4.dev38__tar.gz → 0.0.4.dev39__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.dev38 → atsfill-0.0.4.dev39}/PKG-INFO +1 -1
- {atsfill-0.0.4.dev38 → atsfill-0.0.4.dev39}/pyproject.toml +2 -2
- {atsfill-0.0.4.dev38 → atsfill-0.0.4.dev39}/pyproject.toml.orig +2 -2
- {atsfill-0.0.4.dev38 → atsfill-0.0.4.dev39}/src/atsfill/adapters/dayforce.py +3 -2
- {atsfill-0.0.4.dev38 → atsfill-0.0.4.dev39}/LICENSE +0 -0
- {atsfill-0.0.4.dev38 → atsfill-0.0.4.dev39}/README.md +0 -0
- {atsfill-0.0.4.dev38 → atsfill-0.0.4.dev39}/src/atsfill/__init__.py +0 -0
- {atsfill-0.0.4.dev38 → atsfill-0.0.4.dev39}/src/atsfill/adapters/__init__.py +0 -0
- {atsfill-0.0.4.dev38 → atsfill-0.0.4.dev39}/src/atsfill/adapters/ashby.py +0 -0
- {atsfill-0.0.4.dev38 → atsfill-0.0.4.dev39}/src/atsfill/adapters/bamboohr.py +0 -0
- {atsfill-0.0.4.dev38 → atsfill-0.0.4.dev39}/src/atsfill/adapters/breezy.py +0 -0
- {atsfill-0.0.4.dev38 → atsfill-0.0.4.dev39}/src/atsfill/adapters/greenhouse.py +0 -0
- {atsfill-0.0.4.dev38 → atsfill-0.0.4.dev39}/src/atsfill/adapters/hireology.py +0 -0
- {atsfill-0.0.4.dev38 → atsfill-0.0.4.dev39}/src/atsfill/adapters/jazzhr.py +0 -0
- {atsfill-0.0.4.dev38 → atsfill-0.0.4.dev39}/src/atsfill/adapters/lever.py +0 -0
- {atsfill-0.0.4.dev38 → atsfill-0.0.4.dev39}/src/atsfill/adapters/manatal.py +0 -0
- {atsfill-0.0.4.dev38 → atsfill-0.0.4.dev39}/src/atsfill/adapters/oracle.py +0 -0
- {atsfill-0.0.4.dev38 → atsfill-0.0.4.dev39}/src/atsfill/adapters/paycor.py +0 -0
- {atsfill-0.0.4.dev38 → atsfill-0.0.4.dev39}/src/atsfill/adapters/paylocity.py +0 -0
- {atsfill-0.0.4.dev38 → atsfill-0.0.4.dev39}/src/atsfill/adapters/recruitee.py +0 -0
- {atsfill-0.0.4.dev38 → atsfill-0.0.4.dev39}/src/atsfill/adapters/smartrecruiters.py +0 -0
- {atsfill-0.0.4.dev38 → atsfill-0.0.4.dev39}/src/atsfill/adapters/teamtailor.py +0 -0
- {atsfill-0.0.4.dev38 → atsfill-0.0.4.dev39}/src/atsfill/adapters/workable.py +0 -0
- {atsfill-0.0.4.dev38 → atsfill-0.0.4.dev39}/src/atsfill/adapters/wttj.py +0 -0
- {atsfill-0.0.4.dev38 → atsfill-0.0.4.dev39}/src/atsfill/cli.py +0 -0
- {atsfill-0.0.4.dev38 → atsfill-0.0.4.dev39}/src/atsfill/core/__init__.py +0 -0
- {atsfill-0.0.4.dev38 → atsfill-0.0.4.dev39}/src/atsfill/core/accounts.py +0 -0
- {atsfill-0.0.4.dev38 → atsfill-0.0.4.dev39}/src/atsfill/core/adapter.py +0 -0
- {atsfill-0.0.4.dev38 → atsfill-0.0.4.dev39}/src/atsfill/core/attempts.py +0 -0
- {atsfill-0.0.4.dev38 → atsfill-0.0.4.dev39}/src/atsfill/core/browser.py +0 -0
- {atsfill-0.0.4.dev38 → atsfill-0.0.4.dev39}/src/atsfill/core/commands.py +0 -0
- {atsfill-0.0.4.dev38 → atsfill-0.0.4.dev39}/src/atsfill/core/matching.py +0 -0
- {atsfill-0.0.4.dev38 → atsfill-0.0.4.dev39}/src/atsfill/core/paths.py +0 -0
- {atsfill-0.0.4.dev38 → atsfill-0.0.4.dev39}/src/atsfill/core/registry.py +0 -0
- {atsfill-0.0.4.dev38 → atsfill-0.0.4.dev39}/src/atsfill/core/results.py +0 -0
- {atsfill-0.0.4.dev38 → atsfill-0.0.4.dev39}/src/atsfill/py.typed +0 -0
- {atsfill-0.0.4.dev38 → atsfill-0.0.4.dev39}/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.dev39
|
|
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.
|
|
3
|
+
version = "0.0.4.dev39"
|
|
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"
|
|
@@ -68,7 +68,7 @@ select = [
|
|
|
68
68
|
[tool.pytest.ini_options]
|
|
69
69
|
testpaths = ["tests"]
|
|
70
70
|
markers = ["live: drives a real hiring system page with data from .env and .tmp/; opt-in with -m live"]
|
|
71
|
-
addopts = "-m 'not live' -n
|
|
71
|
+
addopts = "-m 'not live' -n auto --dist loadscope"
|
|
72
72
|
|
|
73
73
|
[[tool.uv.index]]
|
|
74
74
|
name = "testpypi"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "atsfill"
|
|
3
|
-
version = "0.0.4.
|
|
3
|
+
version = "0.0.4.dev39"
|
|
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"
|
|
@@ -55,7 +55,7 @@ testpaths = ["tests"]
|
|
|
55
55
|
markers = [
|
|
56
56
|
"live: drives a real hiring system page with data from .env and .tmp/; opt-in with -m live",
|
|
57
57
|
]
|
|
58
|
-
addopts = "-m 'not live' -n
|
|
58
|
+
addopts = "-m 'not live' -n auto --dist loadscope"
|
|
59
59
|
|
|
60
60
|
[[tool.uv.index]]
|
|
61
61
|
name = "testpypi"
|
|
@@ -36,6 +36,7 @@ SUBMIT_TIMEOUT_MS = 90_000
|
|
|
36
36
|
UPDATE_TRIES = 3
|
|
37
37
|
FOLLOWUP_TIMEOUT_MS = 3_000
|
|
38
38
|
DIAL_TIMEOUT_MS = 2_000 # per dial code tried, longest first
|
|
39
|
+
OPTIONS_TIMEOUT_MS = 5_000 # for a dropdown's options to render
|
|
39
40
|
NEXT_TRIES = 3
|
|
40
41
|
STEP_POLLS = 16 # of POLL_MS, before Next is clicked again
|
|
41
42
|
POLL_MS = 500
|
|
@@ -701,7 +702,7 @@ def _pick(page: Page, target: Locator, texts: list[str]) -> bool:
|
|
|
701
702
|
target.fill("")
|
|
702
703
|
target.press_sequentially(text[:40], delay=10)
|
|
703
704
|
with suppress(Timeout):
|
|
704
|
-
options.first.wait_for(timeout=
|
|
705
|
+
options.first.wait_for(timeout=OPTIONS_TIMEOUT_MS)
|
|
705
706
|
page.evaluate(_REVEAL, [target.get_attribute("id"), [text]])
|
|
706
707
|
if _click_option(page, target, _plain(text).casefold().__eq__):
|
|
707
708
|
return True
|
|
@@ -751,7 +752,7 @@ def _pick_suggestion(page: Page, target: Locator, value: str) -> None:
|
|
|
751
752
|
_open(target)
|
|
752
753
|
target.press_sequentially(value[:40], delay=10)
|
|
753
754
|
with suppress(Timeout):
|
|
754
|
-
page.locator(_option(target)).first.wait_for(timeout=
|
|
755
|
+
page.locator(_option(target)).first.wait_for(timeout=OPTIONS_TIMEOUT_MS)
|
|
755
756
|
if not _click_option(page, target, lambda shown: shown.startswith(_plain(value).casefold())):
|
|
756
757
|
target.press("Escape")
|
|
757
758
|
|
|
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
|