45 Commits

Author SHA1 Message Date
Sina Atalay
1d4b87bc42 Fix date validation test to work across Python 3.12-3.14
Python 3.14 changed ValueError messages for invalid dates.
Use broader match patterns that work across all versions.
2026-03-25 16:45:27 +03:00
Sina Atalay
6956f39835 Address code review feedback on Hypothesis and classic_theme changes
- Update hypothesis to latest version (>=6.151.9)
- Remove pythonpath pytest config (was only needed for tests.strategies)
- Consolidate classic_theme.py into single file with all design models
- Move Hypothesis strategies from strategies.py into their test files
- Add noqa: ARG001 to unused yaml_field_override CLI parameter
- Fix lint and type errors across the codebase
2026-03-25 16:28:44 +03:00
Sina Atalay
2df9d2262b Fix placeholder removal eating provided placeholders with overlapping names
The regex in remove_not_provided_placeholders used a bare alternation
without word boundaries, so removing placeholder "AA" would also
destroy "AAA" in the same template. Fix: add \b word boundaries and
sort longest-first.

Also add Hypothesis tests for:
- remove_not_provided_placeholders: provided keys survive removal
- remove_connectors_of_missing_placeholders: connectors removed/preserved
- validate_arbitrary_date: pass-through for valid dates and custom text
- Mastodon URL: domain and username appear in generated URL
2026-03-25 16:28:44 +03:00
Sina Atalay
005d1d835f Remove useless Hypothesis tests that fuzz trivial operations
Removed tests that were running 100 random inputs through string
operations that can never fail regardless of input:
- process_highlights: fuzzing "- " + string prepend
- process_authors: fuzzing ", ".join()
- PublicationEntry DOI URL: fuzzing f"https://doi.org/{doi}"

These tests add execution time without any chance of finding bugs.
2026-03-25 16:28:20 +03:00
Sina Atalay
1704a4be57 Add Hypothesis test for PublicationEntry DOI URL generation
Test that random valid DOI strings always produce the correct
https://doi.org/ URL. Removed the useless test_doi_clears_url that
was just re-verifying a static validator with random irrelevant input.
2026-03-25 16:28:20 +03:00
Sina Atalay
aa4c47e3a1 Move Hypothesis TypstDimension tests to test_typst_dimension.py
They were in the wrong file (test_classic_theme.py). Now they live
alongside the existing parametrized dimension tests.
2026-03-25 16:28:20 +03:00
Sina Atalay
9bf120f07b Add Hypothesis test for bold_keywords deduplication order preservation 2026-03-25 16:28:20 +03:00
Sina Atalay
34d4055aef Add Hypothesis tests for dictionary_key_to_proper_section_title
- snake_case keys always replace underscores with spaces
- keys with spaces returned unchanged
- keys with uppercase letters returned unchanged
2026-03-25 16:28:20 +03:00
Sina Atalay
3728cd5e33 Add Hypothesis tests for BaseEntryWithComplexFields date adjustment logic
- date_only_clears_start_and_end: providing date nullifies start/end
- start_only_implies_present: start without end defaults to "present"
- end_only_becomes_date: end without start treated as single date
2026-03-25 16:28:20 +03:00
Sina Atalay
0f7f6f4f97 Follow test naming conventions for Hypothesis tests
Merge property-based tests into existing test classes per the project
testing rules: multiple tests for the same function belong in a
TestFunctionName class.

- TestEscapeTypstCharactersProperties merged into TestEscapeTypstCharacters
- TestMarkdownToTypstProperties merged into TestMarkdownToTypst
- TestBuildDatePlaceholdersProperties merged into TestBuildDatePlaceholders
- TestComputeTimeSpanStringProperties merged into TestComputeTimeSpanString
- TestGetDateObjectProperties renamed to TestGetDateObject
- TestApplyOverridesProperties merged into TestApplyOverridesToDictionary
- TestUpdateValueByLocationProperties merged into TestUpdateValueByLocation
- TestResolveOutputFolderPlaceholderProperties merged into TestResolveOutputFolderPlaceholder
- TestBuildNameVariantsProperties renamed to TestBuildNameVariants
- TestTypstDimensionProperties renamed to TestTypstDimension
- TestSocialNetworkUsernameProperties merged into TestSocialNetwork
2026-03-25 16:28:20 +03:00
Sina Atalay
5e95eee87d Distribute Hypothesis tests into their respective unit test files
Move all 55 property-based tests from tests/test_hypothesis.py into
the existing test files for each module they test:

- test_string_processor.py: keyword bolding, placeholder, URL, pattern
- test_markdown_parser.py: Typst escaping, markdown-to-typst
- test_date.py: date parsing, placeholders, time spans
- test_override_dictionary.py: immutability, path traversal
- test_path_resolver.py: name variants, OUTPUT_FOLDER resolution
- test_classic_theme.py: Typst dimension validation
- test_social_network.py: username format validation

Reusable Hypothesis strategies live in tests/strategies.py. Added
pythonpath=["."] to pyproject.toml so tests can import the strategies
module.
2026-03-25 16:28:20 +03:00
Sina Atalay
43b255eff7 Split classic_theme.py into focused modules
Extract three modules from classic_theme.py (845 lines) to improve
navigability:

- templates.py: entry template option models and Templates class
- typography.py: Typography, FontFamily config, FontSize, SmallCaps, Bold
- header.py: Header, Connections, Links, PhoneNumberFormatType

classic_theme.py retains Page, Colors, Sections, Entries, and
ClassicTheme. All imports use absolute paths so the custom theme
generator (which copies classic_theme.py as text) continues to work.

Template entry option classes renamed from e.g. OneLineEntry to
OneLineEntryTemplate to avoid name collision with CV entry models.
2026-03-25 16:28:20 +03:00
Sina Atalay
1ffb4c4890 Add flag_emoji property to locale model
Add a cached_property that maps each language to its primary country's
flag emoji using regional indicator symbols, with tests and updated
developer guide.
2026-03-23 03:20:53 +03:00
Sina Atalay
70d9efcb66 Fix #595: Auto-create intermediate dicts for CLI overrides on missing keys
When using CLI overrides like `--design.theme "moderncv"` with a separate
design file, `update_value_by_location` crashed with `KeyError: 'design'`
because intermediate dictionary keys were not auto-created during traversal.
Now missing intermediate keys are initialized as empty dicts, allowing
overrides to work regardless of whether the target section exists in the
main YAML.
2026-03-21 01:03:32 +03:00
Sina Atalay
d9864d9495 Revert "Fix #689: Allow arbitrary font names in JSON schema while keeping enum suggestions"
This reverts commit 9ebcebd3ccc6abee3c71c07c884488614044b958.
2026-03-21 01:03:32 +03:00
Sina Atalay
847e4f9ea3 Fix #689: Allow arbitrary font names in JSON schema while keeping enum suggestions
The FontFamily JSON schema used a strict enum that rejected custom and system
fonts like Georgia. Changed from SkipJsonSchema[str] to plain str in the union
type, so the generated schema uses anyOf with both the known font enum (for
editor autocomplete) and a generic string type (for arbitrary fonts).
2026-03-21 01:03:32 +03:00
Sina Atalay
021c9fbde3 Add RenderCV skill with eval framework and auto-generated docs/llms.txt
- Add SKILL.md for AI agents: YAML schema reference, entry type field
  tables, design samples per theme, CLI reference, and important patterns
  (YAML quoting, phone validation, bullet characters)
- Add Jinja2 template and generate.py that auto-generates SKILL.md and
  docs/llms.txt from live Pydantic models and sample generators
- Add promptfoo eval suite (15 tests across 4 files): cv_generation,
  pdf_parsing, design, and cli_workflow
- Add deterministic grader that validates LLM output through RenderCV's
  own pydantic pipeline (not jsonschema)
2026-03-20 20:15:09 +03:00
Sina Atalay
bc87090b96 Add tests for uncovered edge cases in pdf_png and sample_generator 2026-03-20 18:30:02 +03:00
Sina Atalay
da2e657416 Increase test coverage 2026-03-03 16:39:23 +03:00
Sina Atalay
eb3cc3406c Remove ex unit from TypstDimension 2026-03-02 19:08:26 +03:00
Sina Atalay
1bd0277edb Allow empty sections 2026-03-02 18:36:52 +03:00
Sina Atalay
6097889a5b Enforce all fields to be defined in other locales folder 2026-03-02 17:37:50 +03:00
Sina Atalay
b4bea9e948 Allow URLs for cv.photo field 2026-03-02 17:35:30 +03:00
Sina Atalay
314dbb89f2 Remove common system font families from the schema 2026-03-02 16:59:51 +03:00
Sina Atalay
b1db1bb31f Remove llms.txt and add more sample generators 2026-02-19 14:53:15 +03:00
Sina Atalay
01eab150e5 Add Hebrew and Persian locales 2026-02-18 17:24:42 +03:00
Sina Atalay
87c7640322 Fix settings.current_date issues 2026-02-18 15:46:06 +03:00
Sina Atalay
fd5409c142 Support "today" in settings.current_date 2026-02-18 02:38:41 +03:00
Sina Atalay
f974b6d9e9 Better YAML error handling 2026-02-17 18:42:08 +03:00
Diorcet Yann
d0b2e12b3b Add settings.pdf_title field in order to customize the title of produced documents (#624)
* cv section: add title field in order to customize the title of produced documents

* Sync branch with origin/main

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Implement

* Use NAME - CV as pdf_title

---------

Co-authored-by: Sina Atalay <79940989+sinaatalay@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 14:48:40 +03:00
husam515
4a9083c117 Add Arabic locale support (#591)
* feat: Add Arabic locale support and update Typst preamble template.

* feat: add rtl support for the Full.html template

* fix: change  "'s CV" hardcoded word in the html/md outputs and make it changeable to support different languages.

* test: add tests for RTL support

* test: add tests for RTL support

* Improve implementation

* Update testdata

* Fix merge issues

* Simplify

* Add test and use type hints with type adapters

* Fix `just check` errors

---------

Co-authored-by: Khalid <khalid.pro.968@gmail.com>
Co-authored-by: Sina Atalay <79940989+sinaatalay@users.noreply.github.com>
2026-02-17 14:19:11 +03:00
Jordan Bradford
a7b6e9a2d5 feat: Add Reddit social network (#658)
* Add Reddit social network

* Run `pre-commit`
2026-02-16 14:33:21 +03:00
Sina Atalay
2f9e8ad476 Improve Pydantic error handling for multiple YAML sources 2026-02-16 04:32:34 +03:00
Sina Atalay
04bd9197cd Improve schema model builder 2026-02-16 03:57:54 +03:00
Tanmay Pathak
d6fcf1d390 fix: 🐛 design file not applying with settings file (#642)
* test: 🧪 design file applies with settings file

* fix: preserve design/locale paths when using --settings flag

* test: 🧪 skipping render commands works

* fix: ensure render_command settings are initialized in build_rendercv_dictionary

* fix: prefix unused variable with underscore to satisfy ruff RUF059
2026-02-16 02:23:26 +03:00
Sina Atalay
f1ae13c95d Make path serialization more robust 2026-02-06 00:47:25 +03:00
Matías Zapata Contreras
1d9deda101 Fix Unicode corruption in sample YAML name generation (#570)
* fix(sample-generator): remove unnecessary unicode-escape decoding for name

* test(sample-generator): add test for creating model with unicode name
2025-12-23 19:36:50 +03:00
Sina Atalay
43312b9076 Fix tests 2025-12-22 22:33:59 +03:00
Sina Atalay
ca1616381c Test invalid Bluesky username 2025-12-22 18:22:53 +03:00
Sina Atalay
b524e377fe Switch from pyright to ty (https://github.com/astral-sh/ty) 2025-12-22 16:54:22 +03:00
Jordan Bradford
17114e03b2 Add Bluesky (#560) 2025-12-21 23:18:13 +03:00
Sina Atalay
1e04ab0d25 Fix settings field issues 2025-12-12 22:27:12 +03:00
Sina Atalay
0dfe129040 Increase test coverage 2025-12-10 00:59:06 +03:00
Sina Atalay
72b6ed3cd9 Add invalid whatsapp username test 2025-12-10 00:03:20 +03:00
Sina Atalay
5cc5fbdf9e Massive Refactor: Architecture Redesign and Technical Debt Cleanup (#528)
* Rename `data` folder with schema

* Start refactoring data models

* Work on entry models

* Keep working on entries

* Keep working on data models

* Push old data files

* Keep working on data models

* First draft of schema.cv

* Keep working on schema

* Keep working on schema

* Improve schema.models

* Keep working on rendercv.schema

* Work on schema.design

* Keep working on rendercv.schema

* Complete variant_class_generator

* Keep working rendercv.schema

* Keep working on rendercv.schema

* Final touches to rendercv.schema

* Improve json schema descriptions in rendercv.schema

* Start working on rendercv.schema tests

* Keep implementing rendercv.schema tests

* Add more tests for rendercv.schema

* Improve rendercv.schema

* Improve docstrings and comments in rendercv.schema

* Implement better pydantic error handling in `rendercv.schema`

* Improve variant class system

* Fix rendercv.schema tests

* Start working on rendercv.templater

* Update template names

* Switching to new rendercv typst template soon

* Work on new templater

* Rename renderer with renderer_old

* Don't use utils in rendercv.schema

* Complete connections

* Update renderer folder structure

* Work on new renderer

* Work on new renderer

* Date processing on new renderer

* Improve date processing, support multiple emails, phones, and websites

* Improve markdown to Typst

* Complete entry template processing

* Time span computation in new renderer

* Better entry templates

* Setup new templates

* Improve rendercv.schema

* Start adding tests for rendercv.renderer

* New markdown parser!

* Improve markdown to typst conversion

* Finalize markdown parser

* Add new test files for rendercv.renderer

* Fix cv and connections

* Add connections test

* Improve connection tests

* Improve entry templates

* Add model processor tests

* Improve templater

* Rename old folders

* Improve schema

* Add file generation logic to renderer

* Fix naming issues

* Fix schema tests

* Add path type tests

* Add font family and typst dimension type tests

* Rename old tests

* Fix design tests

* Start integration testing of renderer

* Improve entry tempates

* Handle nested highlights properly

* Finalize Typst preamble template

* Start working on new CLI

* Remove old test files

* Implement override dictionary in new schema

* Start working on new CLI

* Better prints on render command

* New structure

* New render printer

* Add all the commands to new CLI

* Work on new command in new cli

* Improve new command

* Add error handler to new cli

* Work on create theme command

* Complete create theme command

* Remove old source files

* Improve exceptions

* Create new docs

* Add writing tests guide

* Fix cli printer and write tests

* Test copy templates

* Add app tests

* Bring back accidentally removed files

* Imporve cli and tests

* Fix path issues

* Improve

* Improve

* Add reference file comparison tests

* Fix path resolver

* Start working on test_pdf_png

* Implement comparison of multiple files (png)

* Start testing typst

* Fix templating issues

* Fix header and entry templates issues

* Implement short second rows

* Fix date issues

* Fix nested bullets and add summary

* Update testdata

* Implement footer

* Update testdata

* Reimagined design and locale schema, first iteration

* Reimagined design and locale second iteration

* Update design and locale schemas

* Adapt templater to the new design and locale

* Fix tests

* Update lib.typ and testdata for the new locale and design

* Implement proper tests with all combinations of entries

* Remove some docstrings

* fix connections logic

* Improve

* Start working on examples

* Update testdata

* Fix long second row issue

* fix templating issues

* Fix lib.typ issues

* Update testdata

* Fix clean_trailing_parts

* Update test cv

* update test cv

* Update theme defaults

* update schema and fix moderncv

* Fix moderncv issues

* Update testdata

* Update testdata and examples

* Fix issues about photo

* Fix typst photo path issues

* improve entry templates from yaml

* add new locale

* Rename writing tests doc

* Update writing tests

* Improve tests

* Add more cli tests

* Increase test coverage

* Rename variant pydantic model generator

* Improve tests

* Update testdata and improve tests

* Format, fix pre-commit errors

* Fix scripts and update entry figures

* Improve tests

* Write docstrings of schema

* Write schema docstrings

* Setup api reference

* Start working on new docs

* Work on docs

* Improve progress panel of render command

* Finalize new docs index

* Complete CLI docs

* Work on YAML input structure page

* Finalize user guide

* Start working on developer guide

* Improve api reference

* Improve developer guide

* Improve developer guide

* Improve developer gide

* Improve developer guide

* Improve developer guide

* Update developer guide

* Improve developer guide

* Improve developer guide

* Improve developer guide

* Developer guide first draft

* update developer guide

* Update examples

* Update testdata

* Handle wrong installation (rendercv instead of rendercv[full])

* Remove unnecessary files

* Write set up vs code page

* Update README.md

* Change docs description

* Compress design options gif

* minor updates

* Polish all the json schema descriptions

* Update testdata and examples

* Remove some emdashed from docs

* Add whatsapp support

* Add TestEscapeTypstCharacters to tests

* Implement custom connections

* Add page break before sections feature

* Revert page break before sections feature

* Rebase to main

* Fix social network tests, update schema
2025-12-09 17:03:56 +03:00