Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
680b534
Enums for job search query params
paddy74 Sep 11, 2025
33bff5d
JobSummary resp shape for SearchEndpoint
paddy74 Sep 11, 2025
7a3baa3
Add query param fields to SearchEndpoint.Params
paddy74 Sep 11, 2025
6601dd2
Some initial field validation for SearchEndpoint.Params
paddy74 Sep 11, 2025
67dd614
Remaining shapes for SearchEndpoint.Response
paddy74 Sep 11, 2025
85a9fee
Create placeholder test for SearchEndpoint
paddy74 Sep 11, 2025
9b18b7f
Add more docstrings to search.py
paddy74 Sep 11, 2025
252f2ca
Create tests/conftest.py with SearchEndpoint fixtures
paddy74 Sep 11, 2025
d020f83
Import future annotation for self type hints
paddy74 Sep 11, 2025
035dc36
Add unit tests for search.py:
paddy74 Sep 11, 2025
f98f725
Change client 'job_search' to 'search_jobs'
paddy74 Sep 11, 2025
d4522c6
Rename USAJobsApiClient to USAJobsClient
paddy74 Sep 11, 2025
c971873
Update
paddy74 Sep 11, 2025
7f8cd16
Docstring all SearchEndpoint classes and funcs
paddy74 Sep 21, 2025
922083f
Add ValidInfo ValidErr type hints to search.py
paddy74 Sep 21, 2025
e77a193
Create job search result helper func
paddy74 Sep 21, 2025
bb4a119
Add remaining SearchEndpoint response shapes
paddy74 Sep 21, 2025
fc3c652
Fix rebase conflicts
paddy74 Sep 26, 2025
b4a5afa
Add generator for job search pages
paddy74 Sep 26, 2025
05db89a
Add generator for job search items
paddy74 Sep 26, 2025
ea84157
Add is_inrange util function
paddy74 Sep 29, 2025
af6bf0f
Add desc and validators to SearchEndpoint.Params
paddy74 Sep 29, 2025
e8a99a0
Handle SearchEndpoint dates as dt.date types
paddy74 Sep 29, 2025
f8c10dd
Rename JobSummary to JOAItem
paddy74 Sep 29, 2025
e83024a
Correct JOAItem.id type
paddy74 Sep 29, 2025
718108c
Fix SearchResultItems members
paddy74 Sep 30, 2025
66c2241
Clean-up unit tests and fixtures
paddy74 Sep 30, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 24 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,20 @@
# python-usajobsapi

A Python wrapper for the [USAJOBS REST API](https://developer.usajobs.gov/). The library aims to provide a simple interface for discovering and querying job postings from USAJOBS using Python.
A Python wrapper for the [USAJOBS REST API](https://developer.usajobs.gov/). The package aims to provide a simple SDK interface for discovering and querying job postings from USAJOBS using Python.

## Features

- Lightweight client for the USAJOBS REST endpoints
- Easily search for job postings with familiar Python types
- No external dependencies required
- Lightweight client for the USAJOBS REST API endpoints
- Leverage type hinting and validation for endpoint parameters
- Map endpoint results to Python objects

### Supported Endpoints

This package primarily aims to support searching and retrieval of active and past job listings. However, updates are planned to add support for all other documented endpoints.

Currently, the following endpoints are supported:

- [Job Search API](https://developer.usajobs.gov/api-reference/get-api-search) (`/api/Search`)

## Installation

Expand All @@ -16,6 +24,12 @@ A Python wrapper for the [USAJOBS REST API](https://developer.usajobs.gov/). The
pip install python-usajobsapi
```

or, with [astral-uv](https://docs.astral.sh/uv/):

```bash
uv add python-usajobsapi
```

### From source

```bash
Expand All @@ -29,12 +43,12 @@ pip install .
Register for a USAJOBS API key and set a valid User-Agent before making requests.

```python
from usajobsapi import USAJobs
from usajobsapi import USAJobsClient

client = USAJobs(user_agent="name@example.com", api_key="YOUR_API_KEY")
results = client.search_jobs(keyword="data scientist", location="Remote")
client = USAJobsClient(auth_user="name@example.com", auth_key="YOUR_API_KEY")
results = client.search_jobs(keyword="data scientist", location_names=["Atlanta", "Georgia"]).search_result.jobs()
for job in results:
print(job["Title"])
print(job.position_title)
```

## Contributing
Expand All @@ -50,11 +64,11 @@ Please open an issue first for major changes to discuss your proposal.

## License

Distributed under the GNU General Public License v3.0. See [LICENSE](LICENSE) for details.
Distributed under the [GNU General Public License v3.0](https://www.gnu.org/licenses/gpl-3.0.en.html). See [LICENSE](LICENSE) for details.

## Project Status

This project is under active development and the API may change. Feedback and ideas are appreciated.
This project is under active development and its API may change. Changes to the [USAJOBS REST API documentation](https://developer.usajobs.gov/) shall be monitored and incorporated into this project in a reasonable amount of time. Feedback and ideas are appreciated.

## Contact

Expand Down
Loading