One LinkedIn, one repository, one website: a person's presence online is four single URL fields #189
Labels
No labels
accessibility
authentication
breaking change
bug
documentation
enhancement
interface
internationalisation
observability
security
tier
1
tier
2
tier
3
tier/4
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Postulo/postulo#189
Loading…
Add table
Add a link
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?
Observation
Somebody has a GitHub and a GitLab, or a personal Mastodon and a professional one, or
three repositories worth showing. Postulo holds one of each:
Four single-valued URL columns, three of them on the person and one on every contact they
record. A second of anything goes in notes or nowhere.
The pattern to copy already exists, twice, two lines above the problem
Contacthas this, immediately before itslinkedin_url:Profilehas the same two relations. So telephone numbers and postal addresses arealready many-per-person, generic, attached to both the account holder and their contacts,
with the cascade written down — and a web presence, which is the same shape, is a column.
And the plugin half is equally settled.
plugins/phone_numbers/__init__.pyis the model:So: a
featureplugin holding a name and nothing else, acore.model behind aGenericRelation, andplugins.policydeciding whether it is offered. Nothing new is beinginvented — this is the third instance of a shape that has been through review twice.
Before building it: three things already store links, and they overlap
1.
resume.Linkis multi-valued and already kinded:It also checks links (
LinkStatus: not checked / answered / did not answer), renders as aCV Links section, and can be sent with an application.
CODEis, word for word, "multiplecode repos".
2.
accounts.PersonIdentifieris multi-valued and schemed: ORCID, ResearcherID, Scopus,ISNI, other — the scholarly identities a name cannot carry.
3. The four URL columns above.
So the real question is not "what model" but "which of these owns a GitHub address"
There is a defensible line, and the issue turns on whether it is worth a fourth store:
profile page says exactly that: "the contact block that will be printed on your CVs".
experience and education.
A GitHub URL is plausibly either, and means something different in each. That distinction is
real. Whether it justifies a fourth table is the decision this issue needs.
The cheaper path worth pricing first: give
resume.Linka "show in the contact block"flag. That yields multiple social profiles and multiple code repos immediately, reusing the
kinds, the link checking and the CV rendering that all already work — and it costs one field
and one migration rather than a model, a plugin, a page and sixty-eight catalogues. What it
does not give is links on a contact, since
resume.Linkbelongs to the account holder;Contact.linkedin_urlwould stay single.If links on contacts matter, the generic model is the right answer and the flag is not. That
is the question to settle before any code.
If it is the new model
core.WebProfile(name to be argued), generic,GenericRelationfrom bothProfileandContact, with the cascade the phone-number comment explains — a generic FK alone hasno referential integrity and deleting the holder must delete these.
featureplugin underplugins/, declaration only, name fixed likephone-numbersbecause "changing it orphans every decision an administrator has recorded about it".
Bluesky, personal site — and then somebody's Forgejo instance.
resume.LinkKindsolves thisby describing the sort of thing rather than naming the host, which ages far better than a
list of brand names and is the precedent to follow.
accounts/identifiers.pyshows theother shape, a scheme list with
OTHER.read-only aliases for a release or go at once (the export format in
core/export.pynamesthem, so
FORMAT_VERSIONis involved either way).resume.Link's docstring is the standard to hold: "Postulo neverfetches a link on its own… the only thing worse is a job tracker quietly making requests
nobody asked for." Whatever this becomes inherits that, including any favicon or avatar
temptation.
Related
things that would sit on it, and the two should agree on where contact data lives.
release rule.