diff --git a/sysutils/py-rendercv/Makefile b/sysutils/py-rendercv/Makefile index 4eb46c2ca27c..00b0481bc0fe 100644 --- a/sysutils/py-rendercv/Makefile +++ b/sysutils/py-rendercv/Makefile @@ -1,43 +1,43 @@ PORTNAME= rendercv -DISTVERSION= 2.5 +DISTVERSION= 2.6 CATEGORIES= sysutils python MASTER_SITES= PYPI PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} MAINTAINER= dtxdf@FreeBSD.org COMMENT= Typst-based CV/resume generator WWW= https://github.com/rendercv/rendercv \ https://pypi.org/project/rendercv LICENSE= MIT BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}uv-build>=0:devel/py-uv-build@${PY_FLAVOR} RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}Jinja2>=0:devel/py-Jinja2@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}phonenumbers>=0:devel/py-phonenumbers@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}pydantic2>=0:devel/py-pydantic2@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}pydantic-extra-types>=0:devel/py-pydantic-extra-types@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}email-validator>=0:mail/py-email-validator@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}ruamel.yaml>=0:devel/py-ruamel.yaml@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}packaging>=0:devel/py-packaging@${PY_FLAVOR} USES= python USE_PYTHON= autoplist pep517 NO_ARCH= yes OPTIONS_DEFINE= CLI MARKDOWN WATCHDOG TYPST FONT OPTIONS_DEFAULT= CLI MARKDOWN WATCHDOG TYPST FONT CLI_DESC= Enable Command-line interface support MARKDOWN_DESC= Convert Markdown to HTML WATCHDOG_DESC= Monitor files for updates TYPST_DESC= Render PDF from Typst source files FONT_DESC= Font files for RenderCV CLI_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}typer>=0:devel/py-typer@${PY_FLAVOR} MARKDOWN_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}markdown>=0:textproc/py-markdown@${PY_FLAVOR} WATCHDOG_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}watchdog>=0:devel/py-watchdog@${PY_FLAVOR} TYPST_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}typst>=0:textproc/py-typst@${PY_FLAVOR} FONT_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}rendercv-fonts>=0:x11-fonts/py-rendercv-fonts@${PY_FLAVOR} .include diff --git a/sysutils/py-rendercv/distinfo b/sysutils/py-rendercv/distinfo index c6f5b4128d33..28608144575c 100644 --- a/sysutils/py-rendercv/distinfo +++ b/sysutils/py-rendercv/distinfo @@ -1,3 +1,3 @@ -TIMESTAMP = 1766178034 -SHA256 (rendercv-2.5.tar.gz) = 7e5b51c7ed4340fa2e78084a3d74aa4784aa3e42e53d585c3c8433082982434b -SIZE (rendercv-2.5.tar.gz) = 77147 +TIMESTAMP = 1767394584 +SHA256 (rendercv-2.6.tar.gz) = 77e800de17933f451b0c31dc6ade8c61667a7ad7c8e05b8ef8a59321794a1f98 +SIZE (rendercv-2.6.tar.gz) = 77394 diff --git a/sysutils/py-rendercv/files/patch-src_rendercv_cli_error__handler.py b/sysutils/py-rendercv/files/patch-src_rendercv_cli_error__handler.py index 7c8350de5c53..45f2a177fdb2 100644 --- a/sysutils/py-rendercv/files/patch-src_rendercv_cli_error__handler.py +++ b/sysutils/py-rendercv/files/patch-src_rendercv_cli_error__handler.py @@ -1,20 +1,20 @@ ---- src/rendercv/cli/error_handler.py.orig 2025-12-20 00:46:25 UTC +--- src/rendercv/cli/error_handler.py.orig 2026-01-03 20:10:58 UTC +++ src/rendercv/cli/error_handler.py @@ -8,7 +8,7 @@ from rendercv.exception import RenderCVUserError from rendercv.exception import RenderCVUserError -def handle_user_errors[T, **P](function: Callable[P, None]) -> Callable[P, None]: +def handle_user_errors(function): """Decorator that catches user errors and displays friendly messages without stack traces. Why: @@ -33,7 +33,7 @@ def handle_user_errors[T, **P](function: Callable[P, N """ @functools.wraps(function) - def wrapper(*args: P.args, **kwargs: P.kwargs) -> None: + def wrapper(*args, **kwargs) -> None: try: return function(*args, **kwargs) except RenderCVUserError as e: diff --git a/sysutils/py-rendercv/files/patch-src_rendercv_schema_models_cv_section.py b/sysutils/py-rendercv/files/patch-src_rendercv_schema_models_cv_section.py index d2f7a9c12c81..6d8a09d2309d 100644 --- a/sysutils/py-rendercv/files/patch-src_rendercv_schema_models_cv_section.py +++ b/sysutils/py-rendercv/files/patch-src_rendercv_schema_models_cv_section.py @@ -1,46 +1,46 @@ ---- src/rendercv/schema/models/cv/section.py.orig 2025-12-19 21:43:39 UTC +--- src/rendercv/schema/models/cv/section.py.orig 1970-01-01 00:00:00 UTC +++ src/rendercv/schema/models/cv/section.py @@ -21,7 +21,7 @@ from .entries.reversed_numbered import ReversedNumbere # Below needs to be updated when new entry types are added. # str is an entry type (TextEntry) but not a model, so it's not included in EntryModel. -type EntryModel = ( +EntryModel = ( OneLineEntry | NormalEntry | ExperienceEntry @@ -31,13 +31,22 @@ type EntryModel = ( | NumberedEntry | ReversedNumberedEntry ) -type Entry = EntryModel | str +Entry = EntryModel | str ######################################################################################## -available_entry_models: tuple[type[EntryModel], ...] = get_args(EntryModel.__value__) +available_entry_models: tuple[type[EntryModel], ...] = ( + OneLineEntry, + NormalEntry, + ExperienceEntry, + EducationEntry, + PublicationEntry, + BulletEntry, + NumberedEntry, + ReversedNumberedEntry +) available_entry_type_names: tuple[str, ...] = tuple( [entry_type.__name__ for entry_type in available_entry_models] + ["TextEntry"] ) --type ListOfEntries = list[str] | reduce( # pyright: ignore[reportInvalidTypeForm] -+ListOfEntries = list[str] | reduce( # pyright: ignore[reportInvalidTypeForm] +-type ListOfEntries = list[str] | reduce( # ty: ignore[invalid-type-form] ++ListOfEntries = list[str] | reduce( # ty: ignore[invalid-type-form] or_, [list[entry_type] for entry_type in available_entry_models] ) @@ -244,7 +253,7 @@ def validate_section(sections_input: Any) -> Any: # Create a custom type named Section, which is a list of entries. The entries can be any # of the available entry types. The section is validated with the `validate_section` # function. -type Section = Annotated[ +Section = Annotated[ pydantic.json_schema.SkipJsonSchema[Any] | ListOfEntries, pydantic.BeforeValidator(lambda entries: validate_section(entries)), ] diff --git a/sysutils/py-rendercv/files/patch-src_rendercv_schema_models_cv_social__network.py b/sysutils/py-rendercv/files/patch-src_rendercv_schema_models_cv_social__network.py index 50d71355c92c..a6806d71525e 100644 --- a/sysutils/py-rendercv/files/patch-src_rendercv_schema_models_cv_social__network.py +++ b/sysutils/py-rendercv/files/patch-src_rendercv_schema_models_cv_social__network.py @@ -1,20 +1,20 @@ ---- src/rendercv/schema/models/cv/social_network.py.orig 2025-12-19 21:44:26 UTC +--- src/rendercv/schema/models/cv/social_network.py.orig 1970-01-01 00:00:00 UTC +++ src/rendercv/schema/models/cv/social_network.py @@ -10,7 +10,7 @@ url_validator = pydantic.TypeAdapter(pydantic.HttpUrl) from ..base import BaseModelWithoutExtraKeys url_validator = pydantic.TypeAdapter(pydantic.HttpUrl) -type SocialNetworkName = Literal[ +SocialNetworkName = Literal[ "LinkedIn", "GitHub", "GitLab", -@@ -27,7 +27,7 @@ type SocialNetworkName = Literal[ - "Leetcode", +@@ -28,7 +28,7 @@ type SocialNetworkName = Literal[ "X", + "Bluesky", ] -available_social_networks = get_args(SocialNetworkName.__value__) +#available_social_networks = get_args(SocialNetworkName.__value__) url_dictionary: dict[SocialNetworkName, str] = { "LinkedIn": "https://linkedin.com/in/", "GitHub": "https://github.com/", diff --git a/sysutils/py-rendercv/files/patch-src_rendercv_schema_models_design_built__in__design.py b/sysutils/py-rendercv/files/patch-src_rendercv_schema_models_design_built__in__design.py index 2519ce6c6ec4..9aa76a61ecff 100644 --- a/sysutils/py-rendercv/files/patch-src_rendercv_schema_models_design_built__in__design.py +++ b/sysutils/py-rendercv/files/patch-src_rendercv_schema_models_design_built__in__design.py @@ -1,22 +1,22 @@ ---- src/rendercv/schema/models/design/built_in_design.py.orig 2025-12-19 21:32:57 UTC +--- src/rendercv/schema/models/design/built_in_design.py.orig 1970-01-01 00:00:00 UTC +++ src/rendercv/schema/models/design/built_in_design.py @@ -37,14 +37,13 @@ def discover_other_themes() -> list[type[ClassicTheme] return discovered +discovered_other_themes = discover_other_themes() # Build discriminated union dynamically -type BuiltInDesign = Annotated[ -- ClassicTheme | reduce(or_, discover_other_themes()), # pyright: ignore[reportInvalidTypeForm] +- ClassicTheme | reduce(or_, discover_other_themes()), # ty: ignore[invalid-type-form] +BuiltInDesign = Annotated[ -+ ClassicTheme | reduce(or_, discovered_other_themes), # pyright: ignore[reportInvalidTypeForm] ++ ClassicTheme | reduce(or_, discovered_other_themes), # ty: ignore[invalid-type-form] pydantic.Field(discriminator="theme"), ] -available_themes: list[str] = [ - ThemeClass.model_fields["theme"].default - for ThemeClass in get_args(get_args(BuiltInDesign.__value__)[0]) -] +discovered_other_themes.append(ClassicTheme) +available_themes: list[str] = [ThemeClass.model_fields["theme"].default for ThemeClass in discovered_other_themes] built_in_design_adapter = pydantic.TypeAdapter(BuiltInDesign) diff --git a/sysutils/py-rendercv/files/patch-src_rendercv_schema_models_design_font__family.py b/sysutils/py-rendercv/files/patch-src_rendercv_schema_models_design_font__family.py index 0563084ad505..ace6ee4ab4ba 100644 --- a/sysutils/py-rendercv/files/patch-src_rendercv_schema_models_design_font__family.py +++ b/sysutils/py-rendercv/files/patch-src_rendercv_schema_models_design_font__family.py @@ -1,8 +1,8 @@ ---- src/rendercv/schema/models/design/font_family.py.orig 2025-12-19 21:33:15 UTC +--- src/rendercv/schema/models/design/font_family.py.orig 1970-01-01 00:00:00 UTC +++ src/rendercv/schema/models/design/font_family.py @@ -50,4 +50,4 @@ available_font_families = sorted( ) --type FontFamily = SkipJsonSchema[str] | Literal[*tuple(available_font_families)] # pyright: ignore[reportInvalidTypeForm] +-type FontFamily = SkipJsonSchema[str] | Literal[*tuple(available_font_families)] # ty: ignore[invalid-type-form] +FontFamily = SkipJsonSchema[str] | Literal[*tuple(available_font_families)] # pyright: ignore[reportInvalidTypeForm] diff --git a/sysutils/py-rendercv/files/patch-src_rendercv_schema_models_locale_locale.py b/sysutils/py-rendercv/files/patch-src_rendercv_schema_models_locale_locale.py index 78889b6444b0..c6f24dbf6cc7 100644 --- a/sysutils/py-rendercv/files/patch-src_rendercv_schema_models_locale_locale.py +++ b/sysutils/py-rendercv/files/patch-src_rendercv_schema_models_locale_locale.py @@ -1,22 +1,22 @@ ---- src/rendercv/schema/models/locale/locale.py.orig 2025-12-19 21:44:44 UTC +--- src/rendercv/schema/models/locale/locale.py.orig 1970-01-01 00:00:00 UTC +++ src/rendercv/schema/models/locale/locale.py @@ -37,14 +37,13 @@ def discover_other_locales() -> list[type[EnglishLocal return discovered +discovered_other_locales = discover_other_locales() # Build discriminated union dynamically -type Locale = Annotated[ -- EnglishLocale | reduce(or_, discover_other_locales()), # pyright: ignore[reportInvalidTypeForm] +- EnglishLocale | reduce(or_, discover_other_locales()), # ty: ignore[invalid-type-form] +Locale = Annotated[ -+ EnglishLocale | reduce(or_, discovered_other_locales), # pyright: ignore[reportInvalidTypeForm] ++ EnglishLocale | reduce(or_, discovered_other_locales), # ty: ignore[invalid-type-form] pydantic.Field(discriminator="language"), ] -available_locales = [ - LocaleModel.model_fields["language"].default - for LocaleModel in get_args(get_args(Locale.__value__)[0]) -] +discovered_other_locales.append(EnglishLocale) +available_locales = [LocaleModel.model_fields["language"].default for LocaleModel in discovered_other_locales] locale_adapter = pydantic.TypeAdapter(Locale) diff --git a/sysutils/py-rendercv/files/patch-src_rendercv_schema_override__dictionary.py b/sysutils/py-rendercv/files/patch-src_rendercv_schema_override__dictionary.py new file mode 100644 index 000000000000..171d3362c810 --- /dev/null +++ b/sysutils/py-rendercv/files/patch-src_rendercv_schema_override__dictionary.py @@ -0,0 +1,32 @@ +--- src/rendercv/schema/override_dictionary.py.orig 2026-01-03 20:46:35 UTC ++++ src/rendercv/schema/override_dictionary.py +@@ -3,12 +3,12 @@ from rendercv.exception import RenderCVUserError + from rendercv.exception import RenderCVUserError + + +-def update_value_by_location[T: dict | list]( +- dict_or_list: T, ++def update_value_by_location( ++ dict_or_list, + key: str, + value: str, + full_key: str, +-) -> T: ++): + """Navigate nested structure via dotted path and update value. + + Why: +@@ -85,10 +85,10 @@ def update_value_by_location[T: dict | list]( + return dict_or_list + + +-def apply_overrides_to_dictionary[T: dict]( +- dictionary: T, ++def apply_overrides_to_dictionary( ++ dictionary, + overrides: dict[str, str], +-) -> T: ++): + """Apply multiple CLI overrides to dictionary. + + Why: