atsfill 0.0.4.dev80__tar.gz → 0.0.4.dev81__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.dev80 → atsfill-0.0.4.dev81}/PKG-INFO +1 -1
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/pyproject.toml +1 -1
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/pyproject.toml.orig +1 -1
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/src/atsfill/adapters/oracle.py +6 -6
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/src/atsfill/core/adapter.py +2 -2
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/LICENSE +0 -0
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/README.md +0 -0
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/src/atsfill/__init__.py +0 -0
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/src/atsfill/adapters/__init__.py +0 -0
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/src/atsfill/adapters/ashby.py +0 -0
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/src/atsfill/adapters/bamboohr.py +0 -0
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/src/atsfill/adapters/breezy.py +0 -0
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/src/atsfill/adapters/dayforce.py +0 -0
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/src/atsfill/adapters/eightfold.py +0 -0
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/src/atsfill/adapters/greenhouse.py +0 -0
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/src/atsfill/adapters/hireology.py +0 -0
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/src/atsfill/adapters/hiringthing.py +0 -0
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/src/atsfill/adapters/jazzhr.py +0 -0
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/src/atsfill/adapters/lever.py +0 -0
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/src/atsfill/adapters/manatal.py +0 -0
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/src/atsfill/adapters/paycor.py +0 -0
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/src/atsfill/adapters/paylocity.py +0 -0
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/src/atsfill/adapters/personio.py +0 -0
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/src/atsfill/adapters/phenom.py +0 -0
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/src/atsfill/adapters/pinpoint.py +0 -0
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/src/atsfill/adapters/recruitee.py +0 -0
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/src/atsfill/adapters/rippling.py +0 -0
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/src/atsfill/adapters/smartrecruiters.py +0 -0
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/src/atsfill/adapters/teamtailor.py +0 -0
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/src/atsfill/adapters/workable.py +0 -0
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/src/atsfill/adapters/wttj.py +0 -0
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/src/atsfill/adapters/zohorecruit.py +0 -0
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/src/atsfill/cli.py +0 -0
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/src/atsfill/core/__init__.py +0 -0
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/src/atsfill/core/accounts.py +0 -0
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/src/atsfill/core/attempts.py +0 -0
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/src/atsfill/core/browser.py +0 -0
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/src/atsfill/core/commands.py +0 -0
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/src/atsfill/core/matching.py +0 -0
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/src/atsfill/core/paths.py +0 -0
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/src/atsfill/core/registry.py +0 -0
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/src/atsfill/core/results.py +0 -0
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/src/atsfill/py.typed +0 -0
- {atsfill-0.0.4.dev80 → atsfill-0.0.4.dev81}/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.dev81
|
|
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
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
as docs/adapters/oracle.md observes.
|
|
3
3
|
|
|
4
4
|
The form opens only past an email step, and an email the employer's Oracle already knows gets an
|
|
5
|
-
emailed
|
|
5
|
+
emailed OTP instead. Reading passes the step with a throwaway address; filling starts over with
|
|
6
6
|
the answer's. Oracle keeps a draft of the application from then on, autosaved as fields change.
|
|
7
7
|
"""
|
|
8
8
|
|
|
@@ -31,7 +31,7 @@ SUBMIT = ".apply-flow-pagination__submit-button"
|
|
|
31
31
|
PAGINATION = ".apply-flow-pagination__button"
|
|
32
32
|
PAGE_NUMBERS = ".apply-flow-navigation-pages__link:visible"
|
|
33
33
|
LOADING = ".app-loading-spinner, .cx-select--loading, .apply-flow-block .skeleton"
|
|
34
|
-
|
|
34
|
+
OTP_PAGE = ".apply-flow-pin-code-required"
|
|
35
35
|
CAPTCHA = "iframe[src*='hcaptcha.com']"
|
|
36
36
|
MANUALLY = ".quick-apply-flow__manually--link:visible" # past an offer to import a profile
|
|
37
37
|
COOKIES = ".cookie-consent button:visible"
|
|
@@ -356,7 +356,7 @@ class Oracle:
|
|
|
356
356
|
if "--checked" not in (box.get_attribute("class") or ""):
|
|
357
357
|
_click(page, box)
|
|
358
358
|
_click(page, page.locator(NEXT).first)
|
|
359
|
-
opened = page.locator(f"apply-flow-block, {
|
|
359
|
+
opened = page.locator(f"apply-flow-block, {OTP_PAGE}, {MANUALLY}")
|
|
360
360
|
try:
|
|
361
361
|
opened.first.wait_for(timeout=STEP_TIMEOUT_MS)
|
|
362
362
|
if page.locator(MANUALLY).count():
|
|
@@ -366,10 +366,10 @@ class Oracle:
|
|
|
366
366
|
if page.locator(CAPTCHA).count():
|
|
367
367
|
raise Blocked("captcha: the email step asks for an hCaptcha") from None
|
|
368
368
|
raise RuntimeError("the email step did not open the form") from None
|
|
369
|
-
if page.locator(
|
|
369
|
+
if page.locator(OTP_PAGE).count():
|
|
370
370
|
raise Blocked(
|
|
371
|
-
f"
|
|
372
|
-
"
|
|
371
|
+
f"email_otp: {email} is known to this employer's Oracle, which emails it an"
|
|
372
|
+
" OTP before it shows the form"
|
|
373
373
|
)
|
|
374
374
|
page.locator(f"{PAGINATION}:visible").first.wait_for(timeout=STEP_TIMEOUT_MS)
|
|
375
375
|
_settle(page)
|
|
@@ -6,8 +6,8 @@ from atsfill.core.results import Answer, Field, SideEffect
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
class Blocked(Exception):
|
|
9
|
-
"""The system stopped the command: a captcha, a low reCAPTCHA score, an
|
|
10
|
-
|
|
9
|
+
"""The system stopped the command: a captcha, a low reCAPTCHA score, an OTP, a login
|
|
10
|
+
wall.
|
|
11
11
|
|
|
12
12
|
The message is the result's reason, `code` or `code: detail`.
|
|
13
13
|
"""
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|