Plugin idea: job-listing sources for more countries and employment services #1253

Open
opened 2026-11-13 10:51:53 +00:00 by tiagoagueda · 0 comments
Owner

Idea

Postulo reads listings from source plugins; the France Travail plugin is the model. More sources would let a person outside France use it as well: EURES, each country's public employment service (for example IEFP in Portugal, the Bundesagentur in Germany, Arbeitsförmedlingen in Sweden), and open job feeds that publish an API or a feed.

What to settle

  • Which sources have a public, licensed API or feed (no scraping); the licence and the terms of use are recorded per source.
  • One plugin per source, or a country package with several (as the register adapters are grouped).
  • What the person sees: search criteria, importing a listing as a listing or as an application, de-duplication with what is already saved, the source name kept on each listing.
  • Language, country and sector mapping to ESCO and NACE (see #1252).

Wanted

A short list of candidate sources, ranked by licence clarity and usefulness, and a reference plugin for the first one, built on the existing source kind; no change to core unless the kind lacks something, in which case that is filed separately.

Rules that apply to every plugin

  • Off until the person enables it; a plugin that calls a service names the host and the data it sends in its manifest and on the consent screen (plugins/consent.py); nothing is fetched on page load.
  • Core keeps no import of it: the application runs with it absent, and data it created stays readable as plain data when it is removed.
  • The plugin surface (plugins/api.py, the published postulo.plugins.testing check) gets a contract test for any new kind; the plugin ships its own translation catalogues (the plugin locale rule); strings go through Weblate only.
  • Its own repository if it is not bundled (see the plugin repositories and #1170's shared CI).

Filed as an idea after a discussion on plugin kinds, with #1252 (reference data and lookups as plugins). Not started; the maintainer decides if and when.

## Idea Postulo reads listings from `source` plugins; the France Travail plugin is the model. More sources would let a person outside France use it as well: **EURES**, each country's public employment service (for example IEFP in Portugal, the Bundesagentur in Germany, Arbeitsförmedlingen in Sweden), and open job feeds that publish an API or a feed. ## What to settle - Which sources have a public, licensed API or feed (no scraping); the licence and the terms of use are recorded per source. - One plugin per source, or a country package with several (as the register adapters are grouped). - What the person sees: search criteria, importing a listing as a listing or as an application, de-duplication with what is already saved, the source name kept on each listing. - Language, country and sector mapping to ESCO and NACE (see #1252). ## Wanted A short list of candidate sources, ranked by licence clarity and usefulness, and a reference plugin for the first one, built on the existing `source` kind; no change to core unless the kind lacks something, in which case that is filed separately. ## Rules that apply to every plugin - Off until the person enables it; a plugin that calls a service names the host and the data it sends in its manifest and on the consent screen (`plugins/consent.py`); nothing is fetched on page load. - Core keeps no import of it: the application runs with it absent, and data it created stays readable as plain data when it is removed. - The plugin surface (`plugins/api.py`, the published `postulo.plugins.testing` check) gets a contract test for any new kind; the plugin ships its own translation catalogues (the plugin locale rule); strings go through Weblate only. - Its own repository if it is not bundled (see the plugin repositories and #1170's shared CI). Filed as an idea after a discussion on plugin kinds, with #1252 (reference data and lookups as plugins). **Not started; the maintainer decides if and when.**
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
Postulo/postulo#1253
No description provided.