77 lines
2.3 KiB
Python
77 lines
2.3 KiB
Python
"""CLI entry point: ``python -m jobsource.main``.
|
|
|
|
Parses arguments and delegates to :func:`~jobsource.pipeline.run_batch`.
|
|
All heavy imports are deferred past the argument parse so ``--help`` exits
|
|
immediately with no dependency overhead.
|
|
|
|
Usage examples::
|
|
|
|
python -m jobsource.main --help
|
|
python -m jobsource.main --batch-size 20 --search "software engineer" --location "United States"
|
|
python -m jobsource.main --search "data engineer" --search "ML engineer" --hours-old 48
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import logging
|
|
import sys
|
|
|
|
|
|
def build_parser() -> argparse.ArgumentParser:
|
|
parser = argparse.ArgumentParser(
|
|
prog="python -m jobsource.main",
|
|
description=(
|
|
"AI Job Source Agent -- emit company_name, career_page_url, "
|
|
"open_position_url for recently posted LinkedIn jobs."
|
|
),
|
|
)
|
|
parser.add_argument(
|
|
"--batch-size",
|
|
type=int,
|
|
default=None,
|
|
help="Number of new jobs to process this run (default from config).",
|
|
)
|
|
parser.add_argument(
|
|
"--search",
|
|
action="append",
|
|
metavar="TERM",
|
|
help="Search term; repeatable. Overrides config search terms.",
|
|
)
|
|
parser.add_argument(
|
|
"--location",
|
|
default=None,
|
|
help="Job location filter (default from config).",
|
|
)
|
|
parser.add_argument(
|
|
"--hours-old",
|
|
type=int,
|
|
default=None,
|
|
help="Only jobs posted within this many hours (default from config).",
|
|
)
|
|
return parser
|
|
|
|
|
|
def main(argv: list[str] | None = None) -> int:
|
|
args = build_parser().parse_args(argv)
|
|
|
|
# Configure root logger so pipeline/cascade INFO and WARNING messages are
|
|
# visible on the terminal. Deferred past parse_args so --help stays instant.
|
|
logging.basicConfig(
|
|
level=logging.INFO,
|
|
format="%(asctime)s %(levelname)-8s %(name)s: %(message)s",
|
|
datefmt="%H:%M:%S",
|
|
)
|
|
|
|
from jobsource.pipeline import run_batch # deferred: keeps --help fast before heavy deps
|
|
run_batch(
|
|
batch_size=args.batch_size,
|
|
search_terms=args.search, # None or list[str] from --search repeats
|
|
location=args.location,
|
|
hours_old=args.hours_old,
|
|
)
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|