|
| 1 | +from __future__ import annotations |
| 2 | + |
| 3 | +from typing import Literal, TypeAlias |
| 4 | + |
| 5 | +from linkedapi.types.base import LinkedApiModel |
| 6 | +from linkedapi.types.params import BaseActionParams, LimitParams |
| 7 | + |
| 8 | +JobDatePosted = Literal["anyTime", "past24Hours", "pastWeek", "pastMonth"] |
| 9 | +JobExperienceLevel = Literal[ |
| 10 | + "internship", |
| 11 | + "entryLevel", |
| 12 | + "associate", |
| 13 | + "midSeniorLevel", |
| 14 | + "director", |
| 15 | + "executive", |
| 16 | +] |
| 17 | +JobEmploymentType = Literal[ |
| 18 | + "fullTime", |
| 19 | + "partTime", |
| 20 | + "contract", |
| 21 | + "temporary", |
| 22 | + "volunteer", |
| 23 | + "internship", |
| 24 | + "other", |
| 25 | +] |
| 26 | +JobWorkplaceType = Literal["onSite", "remote", "hybrid"] |
| 27 | +SalaryPeriod = Literal["yearly", "monthly", "hourly"] |
| 28 | +JobCurrency = Literal[ |
| 29 | + "usd", |
| 30 | + "eur", |
| 31 | + "gbp", |
| 32 | + "inr", |
| 33 | + "cad", |
| 34 | + "aud", |
| 35 | + "nzd", |
| 36 | + "hkd", |
| 37 | + "sgd", |
| 38 | + "jpy", |
| 39 | + "cny", |
| 40 | + "chf", |
| 41 | + "sek", |
| 42 | + "nok", |
| 43 | + "dkk", |
| 44 | + "pln", |
| 45 | + "czk", |
| 46 | + "huf", |
| 47 | + "ron", |
| 48 | + "brl", |
| 49 | + "mxn", |
| 50 | + "ars", |
| 51 | + "zar", |
| 52 | + "aed", |
| 53 | + "sar", |
| 54 | + "ils", |
| 55 | + "try", |
| 56 | + "rub", |
| 57 | + "uah", |
| 58 | + "krw", |
| 59 | + "thb", |
| 60 | + "idr", |
| 61 | + "myr", |
| 62 | + "php", |
| 63 | + "vnd", |
| 64 | + "ngn", |
| 65 | + "twd", |
| 66 | +] |
| 67 | + |
| 68 | + |
| 69 | +class JobSalary(LinkedApiModel): |
| 70 | + currency: JobCurrency | None = None |
| 71 | + min_amount: float | None = None |
| 72 | + max_amount: float | None = None |
| 73 | + period: SalaryPeriod | None = None |
| 74 | + |
| 75 | + |
| 76 | +class SearchJobsFilter(LinkedApiModel): |
| 77 | + location: str | None = None |
| 78 | + date_posted: JobDatePosted | None = None |
| 79 | + experience_levels: list[JobExperienceLevel] | None = None |
| 80 | + employment_types: list[JobEmploymentType] | None = None |
| 81 | + workplace_types: list[JobWorkplaceType] | None = None |
| 82 | + companies: list[str] | None = None |
| 83 | + industries: list[str] | None = None |
| 84 | + job_functions: list[str] | None = None |
| 85 | + easy_apply: bool | None = None |
| 86 | + has_verifications: bool | None = None |
| 87 | + under_10_applicants: bool | None = None |
| 88 | + in_your_network: bool | None = None |
| 89 | + fair_chance_employer: bool | None = None |
| 90 | + |
| 91 | + |
| 92 | +class SearchJobsParams(BaseActionParams, LimitParams): |
| 93 | + term: str | None = None |
| 94 | + filter: SearchJobsFilter | None = None |
| 95 | + custom_search_url: str | None = None |
| 96 | + |
| 97 | + |
| 98 | +class SearchJobResult(LinkedApiModel): |
| 99 | + job_id: str | None = None |
| 100 | + job_url: str | None = None |
| 101 | + title: str | None = None |
| 102 | + company_name: str | None = None |
| 103 | + location: str | None = None |
| 104 | + workplace_type: str | None = None |
| 105 | + salary: JobSalary | None = None |
| 106 | + easy_apply: bool | None = None |
| 107 | + is_promoted: bool | None = None |
| 108 | + |
| 109 | + |
| 110 | +class FetchJobParams(BaseActionParams): |
| 111 | + job_url: str |
| 112 | + |
| 113 | + |
| 114 | +class Job(LinkedApiModel): |
| 115 | + job_id: str | None = None |
| 116 | + job_url: str | None = None |
| 117 | + title: str | None = None |
| 118 | + company_name: str | None = None |
| 119 | + company_url: str | None = None |
| 120 | + location: str | None = None |
| 121 | + posted_date: str | None = None |
| 122 | + applicants_count: int | None = None |
| 123 | + workplace_type: str | None = None |
| 124 | + employment_type: str | None = None |
| 125 | + salary: JobSalary | None = None |
| 126 | + description: str | None = None |
| 127 | + apply_url: str | None = None |
| 128 | + easy_apply: bool | None = None |
| 129 | + |
| 130 | + |
| 131 | +FetchJobResult: TypeAlias = Job |
0 commit comments