Plugins: reference data and lookups (ESCO, NACE, GeoNames) as bundled plugins, with a suggestion-source kind #1252
Labels
No labels
accessibility
authentication
breaking change
bug
documentation
enhancement
interface
internationalisation
observability
performance
security
tier
1
tier
2
tier
3
tier/4
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
Postulo/postulo#1252
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The need
Data lookups and reference data should be plugins, so that Postulo stays modular: a person turns one off, replaces it, or installs another for their country, and core carries only the mechanism. What is a plugin today and what is not (read from
main, 2026-11-13):plugins/wikidata, kindfeature), on a press onlyplugins/register_lookup: onefeatureplus theregister-adapterkind), so the Annuaire is an adapter, not a plugin of its ownplugins/publication_lookups)plugins/maps) for the dots, but the offline place table and the city search are read by core (jobs/geocoding.py,jobs/places.py)jobs/esco.py,fetch_esco, read directly by the application forms and the checksjobs/industries.py,data/nace-2.1.jsonjobs/logos.py)So the lookups with a button are already plugins; the reference vocabularies that feed suggestions (ESCO, NACE, the place table) are not, and #1251 (suggestions in most fields) would add one more core-only mechanism.
Wanted
suggestion-sourceplugin kind (besideregister-adapter,identifier,link-service): a plugin declares which fields it can suggest for (job_title,skill,industry,city,company,school, ...), the languages it covers, whether it is offline or needs the network, and the licence of its data. #1251's component asks the enabled sources, merges and ranks the answers (the person's own entries first), and shows the source of each suggestion.register_lookupis, installed by default, removable):esco(occupations, skills),nace(sectors and industries, with the short labels of #1248),geonames(cities and postcodes, offline). Core keeps no import of them: forms and checks ask the registry, and the application runs, with plainer fields, when one is absent. Their data files, licences andfetch_*commands move with them.plugins/consent.py), and is off until the person enables it, as #879 and #1187 decided.plugins/api.py, the publishedpostulo.plugins.testingcheck) gains the kind, with a contract test, and the helloworld reference plugin shows one; the plugin guide in the wiki documents it, for the Writing-a-plugin page.Decisions to take here
Tests
The application starts and every form works with each of the three plugins disabled; suggestions come only from enabled sources; the consent screen lists the hosts a lookup contacts; the plugin contract test passes for the new kind; removing a plugin leaves its data readable.
Related: #1251, #1248, #1249, #1245, #879, #1187, #1170.