Your career: presentations, conferences and seminars, one section with a role and a type #694
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#694
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 maintainer's list, under Your career, names “Presentations”, “Conferences” and “Seminars”. A person who has given a talk, led a workshop, sat on a programme committee or simply taken part in an event has nowhere in Postulo to say so except a project or a link. This issue adds one section for the three names, following the shape and the checklist settled in #692.
What exists today
src/postulo/resume/registry.py:28-80; none is an event. The closest areProject(a name, a role, a link, dates, a summary and highlights,src/postulo/resume/models.py:198-212) and aLinkof kind “Video” for a recording (:273-282).Interview,ApplicationEventandListingEventare other things (src/postulo/applications/models.py,src/postulo/jobs/models.py:1339): events in a job search, not in a career.Proficiencyoffers a fixed list and “Not stated”, which prints nothing: “a level is a claim about yourself that somebody will test”, and an importer once invented B1 for people who had never stated one (resume/models.py:231-247, #235). A choice's label is drawn in the CV's own language through the catalogues.ConferencesAndSeminars/ConferenceAndSeminar, anEventTypewithTitle(required),Date(a start, an optional end, a duration and anOngoingflag),Location,Descriptionand any number ofLinks; its documentation says it is for events a person “may have participated in … presented their own work or projects, facilitated a workshop, been a panellist or an event organiser … or been a member of a scientific committee”, so the role is prose insideDescription. Separately,SpeakingHistory/SpeakingEvent(EventName,Description) is for “an event in which the person was a lecturer or presenter”. The format before 2020 hadAchievementcodesconferences,seminarsandworkshops, and the printed template's heading Presentations had no code.src/postulo/plugins/europass/candidate.py:136-147): the elements are named in its “nowhere to go” notice (:622-644), and the olderAchievementparagraphs become one Project each (plugins/europass/reader.py:471-483).YEAR_MONTH_FORMAT(src/postulo/templates/documents/themes/base_cv.html:144-147).core/export.py:153-162,:781);ApplicationEvent(src/postulo/applications/models.py:537) andListingEvent(src/postulo/jobs/models.py:1339) already use the word, and the archive writes aneventslist under each posting (format 23, in the history comment atcore/export.py:80).inproceedings.Checked against
mainatf09b6010b.Proposal
Participation(“Event”; the section's heading is “Presentations, conferences and seminars”). AResumeItemwith:event(required, 200: the event's name, “PyCon Portugal 2025”);title(optional, 200: what the person presented, a talk, a poster, a workshop);role(a closed list with “Not stated”: speaker, poster, panellist, workshop leader, organiser, committee member, attendee);kind(a closed list with “Not stated”, labelled “Type” as #705 recommends: conference, seminar, workshop, other);start_dateandend_date(optional);place(optional text, “Lisbon, Portugal” or “Online”);url(optional, one address: a programme, slides or a recording);summary(optional, a line or two). Slugparticipation, placed inOVERVIEW_ORDERwhere #692 puts it.placeandsummaryonly. The event's name and the title of the talk are not translated, by the rule that keeps a credential's name as it is (resume/translatable.py:16-26).participations(the model's plural, asprojectsandcertificationsare), inRESUME_FIELDS,RESUME_MODELSandTRANSLATION_SECTIONS; the importer's maps; aKindwhosenamesare the event, the title and the role and whosedatesare the start and the end, so the same annual event in two years is two entries with a note that the review page already writes (“You have one like it with other dates”).ordering.DATE_FIELDSgetsParticipation: start_date. Both formats go up by one from whatever they are when the commit lands.ConferenceAndSeminaris read intoRecordas an entry:Titlethe event,Datethe dates (anOngoingflag leaves the end empty),Locationthe place,Descriptionthe summary, the firstLinkthe address; the role and the type are left as “Not stated”, because the element does not say them and the prose is not parsed. ASpeakingEventis read with the role speaker, which the element itself states, itsEventNameas the event and itsDescriptionas the summary. A link beyond the first is named on the review page as not read.#section-participation. Demo data: one of each role worth showing. Wiki: Your career record says what an entry is, when to use this section and not a course or a publication.Decisions
These are recommendations the maintainer has not confirmed.
ConferenceAndSeminardoes not decide the person was a speaker or an attendee. A role the file does not state stays unstated, for the reasonProficiencyhas a blank.Participation, notEvent,TalkorAppearance:ApplicationEventandListingEventalready take the word, and Appearance is a Settings page. The maintainer may prefer another; the slug is in the address and the archive, so it is cheaper to settle now.msgid "Role"is a job in the catalogues (“Poste” in the fr-FR draft) andmsgid "Type"is typography until #705 settles it. Recommended: the event's role and type take messages of their own, with apgettextcontext, so a translator is not asked to make one word do both.Prior art
No dependency. The standard is the Europass formats, read for #692:
EventTypeandSpeakingEventTypeas quoted above. Whether the portal fillsConferencesAndSeminarsorSpeakingHistoryfor what a person adds is not verified, and a real download has not been compared (#318). Not verified either: how theDurationof aDateis written, which this issue does not read.Builds on
Issues #131 (entries in other languages), #181 (the candidate file), #203 (the order of entries), #235 (a level or a role nobody stated is not made up), #244 and #318 (the Europass reader and its real-download check). New issues of this set: #692 (shape and checklist), #705 (“Type”, not “Kind”), #687 (publications), #695 (courses).
Needed by
Nothing waits on it.
Done when
tests/test_participations.py: create, edit, delete and move through the registry; a role and a type of “Not stated” are accepted and print nothing; the CV prints the line in the document's language (role and type drawn from the catalogue) in the HTML themes, the plain text and the Word file, a portfolio prints it without an empty heading, and an entry with only an event prints just that; a new entry lands by its start date.tests/test_career_sections.py(the #692 guard) passes with the section;tests/test_career_languages.pygains “a participation translates its place and summary, not its event or title”.core/export.pyFORMAT_VERSION, 29 atf09b6010b; one more than whatever it is when the commit lands) with a round trip intests/test_export.py, a CV holding one and an older archive that still loads; the candidate format (4) goes up by one with its line inSHAPES(tests/test_candidate_file.py:372-387), a review row for a good entry and a refused one, andtests/security/test_candidate_file.pyfor hostile or over-long values;tests/test_europass_candidate.pyreads aConferenceAndSeminarand aSpeakingEventas above and names a second link as not read; the API is unchanged (there is none for the career); search finds one (tests/test_search.py); CV print choice (#308) and the processing record (core/gdpr.py) do not apply;tests/test_wiki_surface.pyis untouched unlessRecordchanges on the surface, in which case its wiki line and Writing a plugin follow;tests/test_page_coverage.pyneeds no entry;tests/security/test_isolation_sweep.pyand a per-section test show another account's entry is a 404; account deletion removes them (tests/test_account_deletion.py); strings, including the two lists, are in the working catalogues (en-GB, fr-FR, pt-PT as drafts) and Weblate (#349).(#N)) are in the same commit.From the list of improvements of 2026-10-02.
Landed on main with a green Forgejo CI run. Its entry in the CHANGELOG's Unreleased section ends in (#694).