Draw a page for each sync connection to pair, unpair or create records from its remote items, and show each pairing on its record #327
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#327
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 DAV plugin improvements ask for pairing by hand. A card "can be 'paired' and data synced … to the user, to a person, to a department, or to a company". A CardDAV contact can be imported "as a new company (or update existing one)". Events and tasks are paired with interviews and other Postulo records. None of this has anywhere to happen today:
src/postulo/config/urls.py) andINSTALLED_APPSare fixed, and the content security policy allows only Postulo's scripts. #228 settled it: "a plugin with pages or tables of its own has to be built into the image" (src/postulo/core/server_views.py:1398-1400).SyncLinkappears only in the Django admin, which is mounted only whenPOSTULO_ADMIN_URLis set. No record page shows a pairing.suggest()files a guess about an application: a timeline entry or a status change. It cannot say "pair this card with that company".Proposal
The core draws the page and the plugin supplies the data, which keeps to #228.
The plugin's half. An optional
SyncPluginmethod lists the remote items the plugin can pair, filtered by a search and a record kind, or returns one item by its key. An item is a plain value onpostulo.plugins.api, holding:UID, address, label and a second line;A plugin without it gets no page.
A page for each sync connection, under Settings → Connections. It opens on the paired items and the ones gone, listed by record from
SyncLinkwithout asking the server. Unpaired items come from the plugin, on a search or on Show unpaired; one already paired says with which record. For each item:A line on each record's page: "Paired through ‹connection›, last synced ‹date›", or "Removed on the other side", with Unpair and Pair with an item…. It shows only what
SyncLinkholds, so a record page never waits on a server. It goes on company and application pages, on the edit pages of contacts, interviews and reminders (they have no other), on the company's page for a department, and on Your details for the person.Rules.
POSTULO_CONNECTION_TEST_RATE), with a rate of its own.Testing. A helper in
postulo.plugins.testing, besidelisting_history, pairs, unpairs and creates as the page does, for a plugin's own tests.Decisions
Live or stored.
SyncLinkneeds a record, so this is a new table of names and addresses from a personal address book.Recommended: (a), with a timeout and a search rather than a full list.
Who fills a record created from an item.
Recommended: (a). Only the plugin can read a vCard, and (b) cannot import once.
A queue as well, like Suggestions? Recommended: no; the plugin's adoption rules decide what arrives unasked.
Needed by
postulo/postulo-dav#8, postulo/postulo-dav#9, postulo/postulo-dav#11 and postulo/postulo-dav#12, and pairing and unpairing by hand in postulo/postulo-dav#7. It depends on #326. Record kinds beyond contact, interview and application wait for #328 and #331.
Done when
tests/security/test_isolation_sweep.py); a posted address is ignored.tests/test_page_coverage.py). Its list is a table with a caption, and results arrive in a live region.postulo.plugins.apiare in Writing a plugin (tests/test_wiki_surface.py) and asserted intests/test_plugin_surface.py, and the helper inpostulo.plugins.testinghas a test of its own.From the list of DAV plugin improvements of 2026-09-30.