classic_theme
¶
color_common_description = 'The color can be specified either with their name (https://www.w3.org/TR/SVG11/types.html#ColorKeywords), hexadecimal value, RGB value, or HSL value.'
module-attribute
¶
color_common_examples = ['Black', '7fffd4', 'rgb(0,79,144)', 'hsl(270, 60%, 70%)']
module-attribute
¶
length_common_description = 'It can be specified with units (cm, in, pt, mm, ex, em). For example, `0.1cm`.'
module-attribute
¶
Alignment = Literal['left', 'center', 'right']
¶
BodyAlignment = Literal['left', 'justified', 'justified-with-no-hyphenation']
¶
Bullet = Literal['●', '•', '◦', '-', '◆', '★', '■', '—', '○']
¶
PageSize = Literal['a4', 'a5', 'us-letter', 'us-executive']
¶
PhoneNumberFormatType = Literal['national', 'international', 'E164']
¶
SectionTitleType = Literal['with_partial_line', 'with_full_line', 'without_line', 'moderncv']
¶
Bold
¶
Bases: BaseModelWithoutExtraKeys
connections = pydantic.Field(default=False, description='Whether to make connections bold. The default value is `false`.')
class-attribute
instance-attribute
¶
headline = pydantic.Field(default=False, description='Whether to make the headline bold. The default value is `false`.')
class-attribute
instance-attribute
¶
model_config = pydantic.ConfigDict(extra='forbid', validate_default=True)
class-attribute
instance-attribute
¶
name = pydantic.Field(default=True, description='Whether to make the name bold. The default value is `true`.')
class-attribute
instance-attribute
¶
section_titles = pydantic.Field(default=True, description='Whether to make section titles bold. The default value is `true`.')
class-attribute
instance-attribute
¶
ClassicTheme
¶
Bases: BaseModelWithoutExtraKeys
colors = pydantic.Field(default_factory=Colors)
class-attribute
instance-attribute
¶
entries = pydantic.Field(default_factory=Entries)
class-attribute
instance-attribute
¶
header = pydantic.Field(default_factory=Header)
class-attribute
instance-attribute
¶
links = pydantic.Field(default_factory=Links)
class-attribute
instance-attribute
¶
model_config = pydantic.ConfigDict(extra='forbid', validate_default=True)
class-attribute
instance-attribute
¶
page = pydantic.Field(default_factory=Page)
class-attribute
instance-attribute
¶
section_titles = pydantic.Field(default_factory=SectionTitles)
class-attribute
instance-attribute
¶
sections = pydantic.Field(default_factory=Sections)
class-attribute
instance-attribute
¶
templates = pydantic.Field(default_factory=Templates)
class-attribute
instance-attribute
¶
theme = 'classic'
class-attribute
instance-attribute
¶
typography = pydantic.Field(default_factory=Typography)
class-attribute
instance-attribute
¶
Colors
¶
Bases: BaseModelWithoutExtraKeys
body = pydantic.Field(default=(Color('rgb(0, 0, 0)')), description=(color_common_description + ' The default value is `rgb(0, 0, 0)`.'), examples=color_common_examples)
class-attribute
instance-attribute
¶
connections = pydantic.Field(default=(Color('rgb(0, 79, 144)')), description=(color_common_description + ' The default value is `rgb(0, 79, 144)`.'), examples=color_common_examples)
class-attribute
instance-attribute
¶
footer = pydantic.Field(default=(Color('rgb(128, 128, 128)')), description=(color_common_description + ' The default value is `rgb(128, 128, 128)`.'), examples=color_common_examples)
class-attribute
instance-attribute
¶
headline = pydantic.Field(default=(Color('rgb(0, 79, 144)')), description=(color_common_description + ' The default value is `rgb(0, 79, 144)`.'), examples=color_common_examples)
class-attribute
instance-attribute
¶
links = pydantic.Field(default=(Color('rgb(0, 79, 144)')), description=(color_common_description + ' The default value is `rgb(0, 79, 144)`.'), examples=color_common_examples)
class-attribute
instance-attribute
¶
model_config = pydantic.ConfigDict(extra='forbid', validate_default=True)
class-attribute
instance-attribute
¶
name = pydantic.Field(default=(Color('rgb(0, 79, 144)')), description=(color_common_description + ' The default value is `rgb(0, 79, 144)`.'), examples=color_common_examples)
class-attribute
instance-attribute
¶
section_titles = pydantic.Field(default=(Color('rgb(0, 79, 144)')), description=(color_common_description + ' The default value is `rgb(0, 79, 144)`.'), examples=color_common_examples)
class-attribute
instance-attribute
¶
top_note = pydantic.Field(default=(Color('rgb(128, 128, 128)')), description=(color_common_description + ' The default value is `rgb(128, 128, 128)`.'), examples=color_common_examples)
class-attribute
instance-attribute
¶
Connections
¶
Bases: BaseModelWithoutExtraKeys
display_urls_instead_of_usernames = pydantic.Field(default=False, description='Display full URLs instead of labels. The default value is `false`.')
class-attribute
instance-attribute
¶
hyperlink = pydantic.Field(default=True, description='Make contact information clickable in the PDF. The default value is `true`.')
class-attribute
instance-attribute
¶
model_config = pydantic.ConfigDict(extra='forbid', validate_default=True)
class-attribute
instance-attribute
¶
phone_number_format = pydantic.Field(default='national', description='Phone number format. The default value is `national`.')
class-attribute
instance-attribute
¶
separator = pydantic.Field(default='', description="Character(s) to separate contact items (e.g., '|' or '•'). Leave empty for no separator. The default value is `''`.")
class-attribute
instance-attribute
¶
show_icons = pydantic.Field(default=True, description='Show icons next to contact information. The default value is `true`.')
class-attribute
instance-attribute
¶
space_between_connections = pydantic.Field(default='0.5cm', description=('Horizontal space between contact items. ' + length_common_description + ' The default value is `0.5cm`.'))
class-attribute
instance-attribute
¶
EducationEntry
¶
Bases: BaseModelWithoutExtraKeys
date_and_location_column = pydantic.Field(default='LOCATION\nDATE', description='Template for education entry date/location column. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.')
class-attribute
instance-attribute
¶
degree_column = pydantic.Field(default='**DEGREE**', description='Optional degree column template. If provided, displays degree in separate column. If `null`, no degree column is shown. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**DEGREE**`.')
class-attribute
instance-attribute
¶
main_column = pydantic.Field(default='**INSTITUTION**, AREA\nSUMMARY\nHIGHLIGHTS', description='Template for education entry main column. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**INSTITUTION**, AREA\\nSUMMARY\\nHIGHLIGHTS`.')
class-attribute
instance-attribute
¶
model_config = pydantic.ConfigDict(extra='forbid', validate_default=True)
class-attribute
instance-attribute
¶
Entries
¶
Bases: BaseModelWithoutExtraKeys
allow_page_break = pydantic.Field(default=False, description="Allow page breaks within entries. If false, entries that don't fit will move to a new page. The default value is `false`.")
class-attribute
instance-attribute
¶
date_and_location_width = pydantic.Field(default='4.15cm', description=('Width of the date/location column. ' + length_common_description + ' The default value is `4.15cm`.'))
class-attribute
instance-attribute
¶
highlights = pydantic.Field(default_factory=Highlights, description='Highlights settings.')
class-attribute
instance-attribute
¶
model_config = pydantic.ConfigDict(extra='forbid', validate_default=True)
class-attribute
instance-attribute
¶
short_second_row = pydantic.Field(default=True, description='Shorten the second row to align with the date/location column. The default value is `true`.')
class-attribute
instance-attribute
¶
side_space = pydantic.Field(default='0.2cm', description=('Left and right margins. ' + length_common_description + ' The default value is `0.2cm`.'))
class-attribute
instance-attribute
¶
space_between_columns = pydantic.Field(default='0.1cm', description=('Space between main content and date/location columns. ' + length_common_description + ' The default value is `0.1cm`.'))
class-attribute
instance-attribute
¶
summary = pydantic.Field(default_factory=Summary, description='Summary text settings.')
class-attribute
instance-attribute
¶
ExperienceEntry
¶
Bases: BaseModelWithoutExtraKeys
date_and_location_column = pydantic.Field(default='LOCATION\nDATE', description='Template for experience entry date/location column. Available placeholders:\n- `COMPANY`: Company name\n- `POSITION`: Job title/position\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.')
class-attribute
instance-attribute
¶
main_column = pydantic.Field(default='**COMPANY**, POSITION\nSUMMARY\nHIGHLIGHTS', description='Template for experience entry main column. Available placeholders:\n- `COMPANY`: Company name\n- `POSITION`: Job title/position\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**COMPANY**, POSITION\\nSUMMARY\\nHIGHLIGHTS`.')
class-attribute
instance-attribute
¶
model_config = pydantic.ConfigDict(extra='forbid', validate_default=True)
class-attribute
instance-attribute
¶
FontFamily
¶
Bases: BaseModelWithoutExtraKeys
body = pydantic.Field(default='Source Sans 3', description='The font family for body text. The default value is `Source Sans 3`.')
class-attribute
instance-attribute
¶
connections = pydantic.Field(default='Source Sans 3', description='The font family for connections. The default value is `Source Sans 3`.')
class-attribute
instance-attribute
¶
headline = pydantic.Field(default='Source Sans 3', description='The font family for the headline. The default value is `Source Sans 3`.')
class-attribute
instance-attribute
¶
model_config = pydantic.ConfigDict(extra='forbid', validate_default=True)
class-attribute
instance-attribute
¶
name = pydantic.Field(default='Source Sans 3', description='The font family for the name. The default value is `Source Sans 3`.')
class-attribute
instance-attribute
¶
section_titles = pydantic.Field(default='Source Sans 3', description='The font family for section titles. The default value is `Source Sans 3`.')
class-attribute
instance-attribute
¶
FontSize
¶
Bases: BaseModelWithoutExtraKeys
body = pydantic.Field(default='10pt', description='The font size for body text. The default value is `10pt`.')
class-attribute
instance-attribute
¶
connections = pydantic.Field(default='10pt', description='The font size for connections. The default value is `10pt`.')
class-attribute
instance-attribute
¶
headline = pydantic.Field(default='10pt', description='The font size for the headline. The default value is `10pt`.')
class-attribute
instance-attribute
¶
model_config = pydantic.ConfigDict(extra='forbid', validate_default=True)
class-attribute
instance-attribute
¶
name = pydantic.Field(default='30pt', description='The font size for the name. The default value is `30pt`.')
class-attribute
instance-attribute
¶
section_titles = pydantic.Field(default='1.4em', description='The font size for section titles. The default value is `1.4em`.')
class-attribute
instance-attribute
¶
Header
¶
Bases: BaseModelWithoutExtraKeys
alignment = pydantic.Field(default='center', description="Header alignment. Options: 'left', 'center', 'right'. The default value is `center`.")
class-attribute
instance-attribute
¶
connections = pydantic.Field(default_factory=Connections, description='Contact information settings.')
class-attribute
instance-attribute
¶
model_config = pydantic.ConfigDict(extra='forbid', validate_default=True)
class-attribute
instance-attribute
¶
photo_position = pydantic.Field(default='left', description='Photo position (left or right). The default value is `left`.')
class-attribute
instance-attribute
¶
photo_space_left = pydantic.Field(default='0.4cm', description=('Space to the left of the photo. ' + length_common_description + ' The default value is `0.4cm`.'))
class-attribute
instance-attribute
¶
photo_space_right = pydantic.Field(default='0.4cm', description=('Space to the right of the photo. ' + length_common_description + ' The default value is `0.4cm`.'))
class-attribute
instance-attribute
¶
photo_width = pydantic.Field(default='3.5cm', description=('Photo width. ' + length_common_description + ' The default value is `3.5cm`.'))
class-attribute
instance-attribute
¶
space_below_connections = pydantic.Field(default='0.7cm', description=('Space below contact information. ' + length_common_description + ' The default value is `0.7cm`.'))
class-attribute
instance-attribute
¶
space_below_headline = pydantic.Field(default='0.7cm', description=('Space below the headline. ' + length_common_description + ' The default value is `0.7cm`.'))
class-attribute
instance-attribute
¶
space_below_name = pydantic.Field(default='0.7cm', description=('Space below your name. ' + length_common_description + ' The default value is `0.7cm`.'))
class-attribute
instance-attribute
¶
Highlights
¶
Bases: BaseModelWithoutExtraKeys
bullet = pydantic.Field(default='•', description='Bullet character for highlights. The default value is `•`.')
class-attribute
instance-attribute
¶
model_config = pydantic.ConfigDict(extra='forbid', validate_default=True)
class-attribute
instance-attribute
¶
nested_bullet = pydantic.Field(default='•', description='Bullet character for nested highlights. The default value is `•`.')
class-attribute
instance-attribute
¶
space_above = pydantic.Field(default='0cm', description=('Space above highlights. ' + length_common_description + ' The default value is `0cm`.'))
class-attribute
instance-attribute
¶
space_between_bullet_and_text = pydantic.Field(default='0.5em', description=('Space between bullet and text. ' + length_common_description + ' The default value is `0.5em`.'))
class-attribute
instance-attribute
¶
space_between_items = pydantic.Field(default='0cm', description=('Space between highlight items. ' + length_common_description + ' The default value is `0cm`.'))
class-attribute
instance-attribute
¶
space_left = pydantic.Field(default='0.15cm', description=('Left indentation. ' + length_common_description + ' The default value is `0.15cm`.'))
class-attribute
instance-attribute
¶
Links
¶
Bases: BaseModelWithoutExtraKeys
model_config = pydantic.ConfigDict(extra='forbid', validate_default=True)
class-attribute
instance-attribute
¶
show_external_link_icon = pydantic.Field(default=False, description='Show an external link icon next to URLs. The default value is `false`.')
class-attribute
instance-attribute
¶
underline = pydantic.Field(default=False, description='Underline hyperlinks. The default value is `false`.')
class-attribute
instance-attribute
¶
NormalEntry
¶
Bases: BaseModelWithoutExtraKeys
date_and_location_column = pydantic.Field(default='LOCATION\nDATE', description='Template for normal entry date/location column. Available placeholders:\n- `NAME`: Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.')
class-attribute
instance-attribute
¶
main_column = pydantic.Field(default='**NAME**\nSUMMARY\nHIGHLIGHTS', description='Template for normal entry main column. Available placeholders:\n- `NAME`: Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**NAME**\\nSUMMARY\\nHIGHLIGHTS`.')
class-attribute
instance-attribute
¶
model_config = pydantic.ConfigDict(extra='forbid', validate_default=True)
class-attribute
instance-attribute
¶
OneLineEntry
¶
Bases: BaseModelWithoutExtraKeys
main_column = pydantic.Field(default='**LABEL:** DETAILS', description='Template for one-line entries. Available placeholders:\n- `LABEL`: The label text (e.g., "Languages", "Citizenship")\n- `DETAILS`: The details text (e.g., "English (native), Spanish (fluent)")\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**LABEL:** DETAILS`.')
class-attribute
instance-attribute
¶
model_config = pydantic.ConfigDict(extra='forbid', validate_default=True)
class-attribute
instance-attribute
¶
Page
¶
Bases: BaseModelWithoutExtraKeys
bottom_margin = pydantic.Field(default='0.7in', description=(length_common_description + ' The default value is `0.7in`.'))
class-attribute
instance-attribute
¶
left_margin = pydantic.Field(default='0.7in', description=(length_common_description + ' The default value is `0.7in`.'))
class-attribute
instance-attribute
¶
model_config = pydantic.ConfigDict(extra='forbid', validate_default=True)
class-attribute
instance-attribute
¶
right_margin = pydantic.Field(default='0.7in', description=(length_common_description + ' The default value is `0.7in`.'))
class-attribute
instance-attribute
¶
show_footer = pydantic.Field(default=True, description='Show the footer at the bottom of pages. The default value is `true`.')
class-attribute
instance-attribute
¶
show_top_note = pydantic.Field(default=True, description='Show the top note at the top of the first page. The default value is `true`.')
class-attribute
instance-attribute
¶
size = pydantic.Field(default='us-letter', description="The page size. Use 'a4' (international standard) or 'us-letter' (US standard). The default value is `us-letter`.")
class-attribute
instance-attribute
¶
top_margin = pydantic.Field(default='0.7in', description=(length_common_description + ' The default value is `0.7in`.'))
class-attribute
instance-attribute
¶
PublicationEntry
¶
Bases: BaseModelWithoutExtraKeys
date_and_location_column = pydantic.Field(default='DATE', description='Template for publication entry date column. Available placeholders:\n- `TITLE`: Publication title\n- `AUTHORS`: List of authors (formatted as comma-separated string)\n- `SUMMARY`: Summary/abstract text\n- `DOI`: Digital Object Identifier\n- `URL`: Publication URL (if DOI not provided)\n- `JOURNAL`: Journal/conference/venue name\n- `DATE`: Formatted date\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `DATE`.')
class-attribute
instance-attribute
¶
main_column = pydantic.Field(default='**TITLE**\nSUMMARY\nAUTHORS\nURL (JOURNAL)', description='Template for publication entry main column. Available placeholders:\n- `TITLE`: Publication title\n- `AUTHORS`: List of authors (formatted as comma-separated string)\n- `SUMMARY`: Summary/abstract text\n- `DOI`: Digital Object Identifier\n- `URL`: Publication URL (if DOI not provided)\n- `JOURNAL`: Journal/conference/venue name\n- `DATE`: Formatted date\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**TITLE**\\nSUMMARY\\nAUTHORS\\nURL (JOURNAL)`.')
class-attribute
instance-attribute
¶
model_config = pydantic.ConfigDict(extra='forbid', validate_default=True)
class-attribute
instance-attribute
¶
SectionTitles
¶
Bases: BaseModelWithoutExtraKeys
line_thickness = pydantic.Field(default='0.5pt', description=(length_common_description + ' The default value is `0.5pt`.'))
class-attribute
instance-attribute
¶
model_config = pydantic.ConfigDict(extra='forbid', validate_default=True)
class-attribute
instance-attribute
¶
space_above = pydantic.Field(default='0.5cm', description=(length_common_description + ' The default value is `0.5cm`.'))
class-attribute
instance-attribute
¶
space_below = pydantic.Field(default='0.3cm', description=(length_common_description + ' The default value is `0.3cm`.'))
class-attribute
instance-attribute
¶
type = pydantic.Field(default='with_partial_line', description="Section title visual style. Use 'with_partial_line' for a line next to the title, 'with_full_line' for a line across the page, 'without_line' for no line, or 'moderncv' for the ModernCV style. The default value is `with_partial_line`.")
class-attribute
instance-attribute
¶
Sections
¶
Bases: BaseModelWithoutExtraKeys
allow_page_break = pydantic.Field(default=True, description="Allow page breaks within sections. If false, sections that don't fit will start on a new page. The default value is `true`.")
class-attribute
instance-attribute
¶
model_config = pydantic.ConfigDict(extra='forbid', validate_default=True)
class-attribute
instance-attribute
¶
show_time_spans_in = pydantic.Field(default=['experience'], description="Section titles where time spans (e.g., '2 years 3 months') should be displayed. The default value is `['experience']`.", examples=[['Experience'], ['Experience', 'Education']])
class-attribute
instance-attribute
¶
space_between_regular_entries = pydantic.Field(default='1.2em', description=('Vertical space between entries. ' + length_common_description + ' The default value is `1.2em`.'))
class-attribute
instance-attribute
¶
space_between_text_based_entries = pydantic.Field(default='0.3em', description=('Vertical space between text-based entries. ' + length_common_description + ' The default value is `0.3em`.'))
class-attribute
instance-attribute
¶
convert_section_titles_to_snake_case(value)
classmethod
¶
Source code in src/rendercv/schema/models/design/classic_theme.py
SmallCaps
¶
Bases: BaseModelWithoutExtraKeys
connections = pydantic.Field(default=False, description='Whether to use small caps for connections. The default value is `false`.')
class-attribute
instance-attribute
¶
headline = pydantic.Field(default=False, description='Whether to use small caps for the headline. The default value is `false`.')
class-attribute
instance-attribute
¶
model_config = pydantic.ConfigDict(extra='forbid', validate_default=True)
class-attribute
instance-attribute
¶
name = pydantic.Field(default=False, description='Whether to use small caps for the name. The default value is `false`.')
class-attribute
instance-attribute
¶
section_titles = pydantic.Field(default=False, description='Whether to use small caps for section titles. The default value is `false`.')
class-attribute
instance-attribute
¶
Summary
¶
Bases: BaseModelWithoutExtraKeys
model_config = pydantic.ConfigDict(extra='forbid', validate_default=True)
class-attribute
instance-attribute
¶
space_above = pydantic.Field(default='0cm', description=('Space above summary text. ' + length_common_description + ' The default value is `0cm`.'))
class-attribute
instance-attribute
¶
space_left = pydantic.Field(default='0cm', description=('Left margin for summary text. ' + length_common_description + ' The default value is `0cm`.'))
class-attribute
instance-attribute
¶
Templates
¶
Bases: BaseModelWithoutExtraKeys
date_range = pydantic.Field(default='START_DATE – END_DATE', description='Template for date ranges. Available placeholders:\n- `START_DATE`: Formatted start date based on `design.templates.single_date`\n- `END_DATE`: Formatted end date based on `design.templates.single_date` (or "present"/"ongoing" for current positions)\n\nThe default value is `START_DATE – END_DATE`.')
class-attribute
instance-attribute
¶
education_entry = pydantic.Field(default_factory=EducationEntry, description='Template for education entries.')
class-attribute
instance-attribute
¶
experience_entry = pydantic.Field(default_factory=ExperienceEntry, description='Template for experience entries.')
class-attribute
instance-attribute
¶
footer = pydantic.Field(default='*NAME -- PAGE_NUMBER/TOTAL_PAGES*', description="Template for the footer. Available placeholders:\n- `NAME`: The CV owner's name from `cv.name`\n- `PAGE_NUMBER`: Current page number\n- `TOTAL_PAGES`: Total number of pages\n- `CURRENT_DATE`: Formatted date based on `design.templates.single_date`\n- `MONTH_NAME`: Full month name (e.g., January)\n- `MONTH_ABBREVIATION`: Abbreviated month name (e.g., Jan)\n- `MONTH`: Month number (e.g., 1)\n- `MONTH_IN_TWO_DIGITS`: Zero-padded month (e.g., 01)\n- `YEAR`: Full year (e.g., 2025)\n- `YEAR_IN_TWO_DIGITS`: Two-digit year (e.g., 25)\n\nThe default value is `*NAME -- PAGE_NUMBER/TOTAL_PAGES*`.")
class-attribute
instance-attribute
¶
model_config = pydantic.ConfigDict(extra='forbid', validate_default=True)
class-attribute
instance-attribute
¶
normal_entry = pydantic.Field(default_factory=NormalEntry, description='Template for normal entries.')
class-attribute
instance-attribute
¶
one_line_entry = pydantic.Field(default_factory=OneLineEntry, description='Template for one-line entries.')
class-attribute
instance-attribute
¶
publication_entry = pydantic.Field(default_factory=PublicationEntry, description='Template for publication entries.')
class-attribute
instance-attribute
¶
single_date = pydantic.Field(default='MONTH_ABBREVIATION YEAR', description='Template for single dates. Available placeholders:\n- `MONTH_NAME`: Full month name (e.g., January)\n- `MONTH_ABBREVIATION`: Abbreviated month name (e.g., Jan)\n- `MONTH`: Month number (e.g., 1)\n- `MONTH_IN_TWO_DIGITS`: Zero-padded month (e.g., 01)\n- `YEAR`: Full year (e.g., 2025)\n- `YEAR_IN_TWO_DIGITS`: Two-digit year (e.g., 25)\n\nThe default value is `MONTH_ABBREVIATION YEAR`.')
class-attribute
instance-attribute
¶
time_span = pydantic.Field(default='HOW_MANY_YEARS YEARS HOW_MANY_MONTHS MONTHS', description='Template for time spans (duration calculations). Available placeholders:\n- `HOW_MANY_YEARS`: Number of years (e.g., 2)\n- `YEARS`: Localized word for "years" from `locale.years` (or singular "year")\n- `HOW_MANY_MONTHS`: Number of months (e.g., 3)\n- `MONTHS`: Localized word for "months" from `locale.months` (or singular "month")\n\nThe default value is `HOW_MANY_YEARS YEARS HOW_MANY_MONTHS MONTHS`.')
class-attribute
instance-attribute
¶
top_note = pydantic.Field(default='*LAST_UPDATED CURRENT_DATE*', description='Template for the top note. Available placeholders:\n- `LAST_UPDATED`: Localized "last updated" text from `locale.last_updated`\n- `CURRENT_DATE`: Formatted date based on `design.templates.single_date`\n- `NAME`: The CV owner\'s name from `cv.name`\n- `MONTH_NAME`: Full month name (e.g., January)\n- `MONTH_ABBREVIATION`: Abbreviated month name (e.g., Jan)\n- `MONTH`: Month number (e.g., 1)\n- `MONTH_IN_TWO_DIGITS`: Zero-padded month (e.g., 01)\n- `YEAR`: Full year (e.g., 2025)\n- `YEAR_IN_TWO_DIGITS`: Two-digit year (e.g., 25)\n\nThe default value is `*LAST_UPDATED CURRENT_DATE*`.')
class-attribute
instance-attribute
¶
Typography
¶
Bases: BaseModelWithoutExtraKeys
alignment = pydantic.Field(default='justified', description="Text alignment. Options: 'left', 'justified' (spreads text across full width), 'justified-with-no-hyphenation' (justified without word breaks). The default value is `justified`.")
class-attribute
instance-attribute
¶
bold = pydantic.Field(default_factory=Bold, description='Bold styling for different elements.')
class-attribute
instance-attribute
¶
date_and_location_column_alignment = pydantic.Field(default='right', description="Alignment for dates and locations in entries. Options: 'left', 'center', 'right'. The default value is `right`.")
class-attribute
instance-attribute
¶
font_family = pydantic.Field(default_factory=FontFamily, description="The font family. You can provide a single font name as a string (applies to all elements), or a dictionary with keys 'body', 'name', 'headline', 'connections', and 'section_titles' to customize each element. Any system font can be used.")
class-attribute
instance-attribute
¶
font_size = pydantic.Field(default_factory=FontSize, description='Font sizes for different elements.')
class-attribute
instance-attribute
¶
line_spacing = pydantic.Field(default='0.6em', description='Space between lines of text. Larger values create more vertical space. The default value is `0.6em`.')
class-attribute
instance-attribute
¶
model_config = pydantic.ConfigDict(extra='forbid', validate_default=True)
class-attribute
instance-attribute
¶
small_caps = pydantic.Field(default_factory=SmallCaps, description='Small caps styling for different elements.')
class-attribute
instance-attribute
¶
validate_font_family(font_family)
classmethod
¶
Convert string font to FontFamily object with uniform styling.
Why
Users can provide simple string "Latin Modern Roman" for all text, or specify per-element fonts via FontFamily dict. Validator accepts both, expanding strings to full FontFamily objects.
Parameters:
-
font_family(FontFamily | FontFamily) –String font name or FontFamily object.
Returns:
-
FontFamily–FontFamily object with all fields populated.