Canonical data contracts and schemas for the CS Jobs Board solution - Python Pydantic models
Project description
Jobs Data Contracts
Canonical data contracts and schemas for the CS Jobs Board solution. This repository serves as the single source of truth for all data structures used across the Jobs Board ecosystem.
Overview
This repository contains OpenAPI/JSON Schema definitions that are used to generate:
- TypeScript types for Next.js and Node.js applications
- Python Pydantic models for FastAPI applications
The generated exports ensure consistency across all applications in the Jobs Board platform.
Repository Structure
.
├── schemas/ # OpenAPI and JSON Schema definitions
│ ├── jobs/ # Jobs API service schemas
│ │ └── openapi.yaml
│ └── search/ # Search API service schemas
│ └── openapi.yaml
├── generated/ # Auto-generated code (do not edit manually)
│ ├── typescript/ # TypeScript types
│ │ ├── jobs.ts # Generated from jobs/openapi.yaml
│ │ ├── search.ts # Generated from search/openapi.yaml
│ │ └── src/ # Auto-generated TypeScript entry points
│ └── python/ # Python Pydantic models
│ ├── jobs/
│ └── search/
├── scripts/ # Generation scripts
│ ├── generate_pydantic.sh # Generate Pydantic models
│ └── generate-src-files.js # Auto-generate TypeScript src/ files
└── dist/ # Compiled TypeScript output (excluded from git)
TypeScript/JavaScript Usage
Installation
Install the package from npm:
npm install jobs-data-contracts
Or with yarn:
yarn add jobs-data-contracts
Usage
Import commonly used types directly:
import {
Job,
JobResultItem,
JobSearchResponse,
Approach,
Grade,
Profession,
Salary,
FixedLocation,
OverseasLocation
} from 'jobs-data-contracts';
For more granular imports:
// Search API types
import { SearchComponents, SearchPaths, SearchOperations } from 'jobs-data-contracts/search';
// Jobs API types
import { JobsComponents, JobsPaths, JobsOperations } from 'jobs-data-contracts/jobs';
Available Type Exports
| Export | Description |
|---|---|
Job |
Full job object for indexing |
JobResultItem |
Compact job result in search responses |
JobSearchResponse |
Search API response with pagination |
FixedLocation |
UK location with address details |
OverseasLocation |
International location |
Salary |
Salary range and currency |
Contacts |
Contact information |
Approach |
Enum: Internal, Across Government, External |
Assignments |
Enum: Apprentice, FTA, Loan, Secondment, Permanent |
Grade |
Enum: Civil Service grades |
Profession |
Enum: Civil Service professions |
Error |
Error response type |
Python/Pydantic Usage
Installation
pip install jobs-data-contracts
Usage
Import and use Pydantic models in your FastAPI application:
from fastapi import FastAPI
from jobs_data_contracts import Job, JobSearchResponse
app = FastAPI()
@app.post("/jobs", response_model=Job)
async def create_job(job: Job):
return job # Automatic validation
@app.get("/search", response_model=JobSearchResponse)
async def search_jobs():
return JobSearchResponse(results=[], total=0, page=1, pageSize=10, totalPages=0)
All models provide automatic validation, type safety, and serialization via Pydantic v2.
Development
Prerequisites
- For TypeScript: Node.js >= 18
- For Python: Python >= 3.8
Setup
npm install
Generating Types
TypeScript:
The TypeScript generation process is fully automated. When you modify schemas, simply run:
npm run generate:typescript
This command will:
- Generate TypeScript types from OpenAPI schemas (
jobs.ts,search.ts) - Automatically create re-export files in
generated/typescript/src/ - Export all schema types for convenient use in your applications
You can also run individual steps:
npm run generate:jobs # Generate types from jobs/openapi.yaml
npm run generate:search # Generate types from search/openapi.yaml
npm run generate:src # Auto-generate src/ re-export files
Python:
npm run generate:python
# Or: ./scripts/generate_pydantic.sh
Generated models are placed in generated/ directory.
Note: The generated/typescript/src/ files are now auto-generated. You no longer need to manually edit these files when schemas change!
Building
TypeScript:
npm run build
Python:
npm run generate:python
python -m build
Testing
npm test # TypeScript type checking
Publishing
TypeScript to npm
npm run build
npm publish
Python to PyPI
npm run generate:python
pip install build twine
python -m build
python -m twine upload dist/*.whl dist/*.tar.gz
Note: Use the specific file patterns (dist/*.whl dist/*.tar.gz) to avoid uploading TypeScript files that may be present in the dist/ directory.
Versioning
This repository follows Semantic Versioning:
- Major: Breaking changes to schemas or generated types
- Minor: New schemas or backward-compatible additions
- Patch: Documentation updates, bug fixes in generation scripts
Contributing
- Schema Changes: All schema modifications should be made in the
schemas/directory - Generation: After schema changes, run generation scripts to update types
- Testing: Run
npm testto verify types compile correctly - Documentation: Update this README if adding new types or changing usage
Schema Guidelines
- Use clear, descriptive property names
- Include descriptions for all schemas and properties
- Define validation rules (min/max, patterns, required fields)
- Use appropriate data types and formats
- Leverage
$reffor reusable components - Follow OpenAPI 3.x best practices
License
This project is licensed under the MIT License - see the LICENSE file for details.
Support
For questions or issues, please open a GitHub issue.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file jobs_data_contracts-1.1.1.tar.gz.
File metadata
- Download URL: jobs_data_contracts-1.1.1.tar.gz
- Upload date:
- Size: 12.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
37d404fa24fe9d6ad6bf2c6f165ae9487d12dd4637d9d667e804cdea93147ef7
|
|
| MD5 |
3fa67a1704b28e7cd28dfc7f971b1f8f
|
|
| BLAKE2b-256 |
d914221ad3d1ce50097aceb12ceedb31174922b30c192bf0e35a80f7cd07f30f
|
File details
Details for the file jobs_data_contracts-1.1.1-py3-none-any.whl.
File metadata
- Download URL: jobs_data_contracts-1.1.1-py3-none-any.whl
- Upload date:
- Size: 12.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
57d50dec32cd073ad72e660b87d12dd9698889265be9e39f5e1ad8cee6f73667
|
|
| MD5 |
6a48f1e4cca5273b03203b03b73a22d7
|
|
| BLAKE2b-256 |
261c1bfc7fa67729dbbbbc6d928da2b84abc0ad4e93799c5f2779477d678ee77
|