lattes2pdf 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. lattes2pdf-0.1.0/.gitignore +176 -0
  2. lattes2pdf-0.1.0/CONTRIBUTING.md +74 -0
  3. lattes2pdf-0.1.0/LICENSE +21 -0
  4. lattes2pdf-0.1.0/PKG-INFO +178 -0
  5. lattes2pdf-0.1.0/README.md +164 -0
  6. lattes2pdf-0.1.0/pyproject.toml +45 -0
  7. lattes2pdf-0.1.0/src/lattes2pdf/__init__.py +1 -0
  8. lattes2pdf-0.1.0/src/lattes2pdf/backend.py +91 -0
  9. lattes2pdf-0.1.0/src/lattes2pdf/catalog.json +389 -0
  10. lattes2pdf-0.1.0/src/lattes2pdf/cli.py +434 -0
  11. lattes2pdf-0.1.0/src/lattes2pdf/lattes.py +351 -0
  12. lattes2pdf-0.1.0/src/lattes2pdf/models.py +100 -0
  13. lattes2pdf-0.1.0/src/lattes2pdf/output.py +93 -0
  14. lattes2pdf-0.1.0/src/lattes2pdf/presets/academico.yaml +37 -0
  15. lattes2pdf-0.1.0/src/lattes2pdf/presets/essencial.yaml +33 -0
  16. lattes2pdf-0.1.0/src/lattes2pdf/presets/resumido.yaml +29 -0
  17. lattes2pdf-0.1.0/src/lattes2pdf/rendering.py +1005 -0
  18. lattes2pdf-0.1.0/src/lattes2pdf/sections.py +136 -0
  19. lattes2pdf-0.1.0/src/lattes2pdf/selection.py +362 -0
  20. lattes2pdf-0.1.0/src/lattes2pdf/theme.py +166 -0
  21. lattes2pdf-0.1.0/src/lattes2pdf/themes/garamond/classic/Preamble.j2.typ +17 -0
  22. lattes2pdf-0.1.0/src/lattes2pdf/themes/garamond/classic/SectionBeginning.j2.typ +6 -0
  23. lattes2pdf-0.1.0/src/lattes2pdf/themes/garamond/classic/entries/EducationEntry.j2.typ +19 -0
  24. lattes2pdf-0.1.0/src/lattes2pdf/themes/garamond/classic/entries/ExperienceEntry.j2.typ +37 -0
  25. lattes2pdf-0.1.0/src/lattes2pdf/themes/garamond/classic/entries/PublicationEntry.j2.typ +22 -0
  26. lattes2pdf-0.1.0/src/lattes2pdf/themes/garamond/design.yaml +95 -0
  27. lattes2pdf-0.1.0/src/lattes2pdf/themes/garamond/fonts/EBGaramond-SemiBold.ttf +0 -0
  28. lattes2pdf-0.1.0/src/lattes2pdf/themes/garamond/fonts/EBGaramond-SemiBoldItalic.ttf +0 -0
  29. lattes2pdf-0.1.0/src/lattes2pdf/themes/garamond/fonts/OFL.txt +94 -0
  30. lattes2pdf-0.1.0/tests/conftest.py +8 -0
  31. lattes2pdf-0.1.0/tests/fixtures/academic.xml +42 -0
  32. lattes2pdf-0.1.0/tests/fixtures/articles.xml +31 -0
  33. lattes2pdf-0.1.0/tests/fixtures/authors.xml +28 -0
  34. lattes2pdf-0.1.0/tests/fixtures/bibliography.xml +75 -0
  35. lattes2pdf-0.1.0/tests/fixtures/complementary.xml +155 -0
  36. lattes2pdf-0.1.0/tests/fixtures/context.xml +84 -0
  37. lattes2pdf-0.1.0/tests/fixtures/education.xml +15 -0
  38. lattes2pdf-0.1.0/tests/fixtures/extensions.xml +22 -0
  39. lattes2pdf-0.1.0/tests/fixtures/external-entity.xml +7 -0
  40. lattes2pdf-0.1.0/tests/fixtures/general.xml +102 -0
  41. lattes2pdf-0.1.0/tests/fixtures/latin1.xml +7 -0
  42. lattes2pdf-0.1.0/tests/fixtures/malformed.xml +2 -0
  43. lattes2pdf-0.1.0/tests/fixtures/minimal.xml +5 -0
  44. lattes2pdf-0.1.0/tests/fixtures/other.xml +87 -0
  45. lattes2pdf-0.1.0/tests/fixtures/professional.xml +43 -0
  46. lattes2pdf-0.1.0/tests/fixtures/technical.xml +139 -0
  47. lattes2pdf-0.1.0/tests/fixtures/unknown-namespace.xml +5 -0
  48. lattes2pdf-0.1.0/tests/test_articles.py +195 -0
  49. lattes2pdf-0.1.0/tests/test_authors.py +178 -0
  50. lattes2pdf-0.1.0/tests/test_cli.py +106 -0
  51. lattes2pdf-0.1.0/tests/test_context.py +234 -0
  52. lattes2pdf-0.1.0/tests/test_education.py +198 -0
  53. lattes2pdf-0.1.0/tests/test_lattes.py +140 -0
  54. lattes2pdf-0.1.0/tests/test_pdf.py +524 -0
  55. lattes2pdf-0.1.0/tests/test_presets.py +204 -0
  56. lattes2pdf-0.1.0/tests/test_rendering.py +262 -0
  57. lattes2pdf-0.1.0/tests/test_selection.py +90 -0
  58. lattes2pdf-0.1.0/tests/test_theme.py +322 -0
@@ -0,0 +1,176 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # PyInstaller
30
+ # Usually these files are written by a python script from a template
31
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
32
+ *.manifest
33
+ *.spec
34
+
35
+ # Installer logs
36
+ pip-log.txt
37
+ pip-delete-this-directory.txt
38
+
39
+ # Unit test / coverage reports
40
+ htmlcov/
41
+ .tox/
42
+ .nox/
43
+ .coverage
44
+ .coverage.*
45
+ .cache
46
+ nosetests.xml
47
+ coverage.xml
48
+ *.cover
49
+ *.py,cover
50
+ .hypothesis/
51
+ .pytest_cache/
52
+ cover/
53
+
54
+ # Translations
55
+ *.mo
56
+ *.pot
57
+
58
+ # Django stuff:
59
+ *.log
60
+ local_settings.py
61
+ db.sqlite3
62
+ db.sqlite3-journal
63
+
64
+ # Flask stuff:
65
+ instance/
66
+ .webassets-cache
67
+
68
+ # Scrapy stuff:
69
+ .scrapy
70
+
71
+ # Sphinx documentation
72
+ docs/_build/
73
+
74
+ # PyBuilder
75
+ .pybuilder/
76
+ target/
77
+
78
+ # Jupyter Notebook
79
+ .ipynb_checkpoints
80
+
81
+ # IPython
82
+ profile_default/
83
+ ipython_config.py
84
+
85
+ # pyenv
86
+ # For a library or package, you might want to ignore these files since the code is
87
+ # intended to run in multiple environments; otherwise, check them in:
88
+ # .python-version
89
+
90
+ # pipenv
91
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
93
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
94
+ # install all needed dependencies.
95
+ #Pipfile.lock
96
+
97
+ # UV
98
+ # Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
99
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
100
+ # commonly ignored for libraries.
101
+ #uv.lock
102
+
103
+ # poetry
104
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
105
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
106
+ # commonly ignored for libraries.
107
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
108
+ #poetry.lock
109
+
110
+ # pdm
111
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
112
+ #pdm.lock
113
+ # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
114
+ # in version control.
115
+ # https://pdm.fming.dev/latest/usage/project/#working-with-version-control
116
+ .pdm.toml
117
+ .pdm-python
118
+ .pdm-build/
119
+
120
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
121
+ __pypackages__/
122
+
123
+ # Celery stuff
124
+ celerybeat-schedule
125
+ celerybeat.pid
126
+
127
+ # SageMath parsed files
128
+ *.sage.py
129
+
130
+ # Environments
131
+ .env
132
+ .venv
133
+ env/
134
+ venv/
135
+ ENV/
136
+ env.bak/
137
+ venv.bak/
138
+
139
+ # Spyder project settings
140
+ .spyderproject
141
+ .spyproject
142
+
143
+ # Rope project settings
144
+ .ropeproject
145
+
146
+ # mkdocs documentation
147
+ /site
148
+
149
+ # mypy
150
+ .mypy_cache/
151
+ .dmypy.json
152
+ dmypy.json
153
+
154
+ # Pyre type checker
155
+ .pyre/
156
+
157
+ # pytype static type analyzer
158
+ .pytype/
159
+
160
+ # Cython debug symbols
161
+ cython_debug/
162
+
163
+ # PyCharm
164
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
165
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
166
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
167
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
168
+ #.idea/
169
+
170
+ # Ruff stuff:
171
+ .ruff_cache/
172
+
173
+ # PyPI configuration file
174
+ .pypirc
175
+
176
+ /.local/
@@ -0,0 +1,74 @@
1
+ # Como contribuir
2
+
3
+ Use Python 3.12 ou superior. Na raiz do repositório, crie um ambiente virtual
4
+ e instale as ferramentas de desenvolvimento:
5
+
6
+ ```bash
7
+ python3.12 -m venv .venv
8
+ source .venv/bin/activate
9
+ python -m pip install --upgrade pip
10
+ python -m pip install -e . --group dev
11
+ ```
12
+
13
+ No Windows, crie o ambiente com `py -3 -m venv .venv` e ative-o pelo PowerShell
14
+ com `.venv\Scripts\Activate.ps1`.
15
+
16
+ ## Alterações e verificações
17
+
18
+ Mantenha cada mudança focada em um problema. Descreva o comportamento alterado
19
+ e como ele foi verificado. Ao corrigir uma falha, acrescente um teste de regressão
20
+ quando ele proteger um comportamento relevante. Use exemplos fictícios ou
21
+ anonimizados para reproduzir problemas de conversão.
22
+
23
+ Use Ruff para formatar e verificar o código:
24
+
25
+ ```bash
26
+ ruff format .
27
+ ruff check .
28
+ ruff format --check .
29
+ pytest
30
+ python -m build
31
+ python -m twine check --strict dist/*
32
+ git diff --check
33
+ ```
34
+
35
+ As configurações ficam no `pyproject.toml`. Consulte `lattes2pdf --help` e
36
+ o `--help` dos subcomandos para explorar a CLI.
37
+
38
+ ## Commits e releases
39
+
40
+ Use [Conventional Commits](https://www.conventionalcommits.org/pt-br/v1.0.0/),
41
+ com mudanças agrupadas de forma lógica. Exemplos:
42
+
43
+ ```text
44
+ feat: adicionar seleção de publicações
45
+ fix: preservar datas sem mês informado
46
+ docs: esclarecer a exportação do Lattes
47
+ ```
48
+
49
+ Tags e títulos de releases devem conter somente a versão no formato `vX.Y.Z`,
50
+ por exemplo, `v0.1.0`. Descreva as mudanças no corpo da release. A versão do
51
+ pacote correspondente é `0.1.0`, sem o prefixo `v`.
52
+
53
+ O CI testa Python 3.12, 3.13 e 3.14 em Linux e macOS. Além da suíte, instala o
54
+ wheel em um ambiente limpo e gera PDFs fora do checkout, incluindo um tema externo
55
+ e a recompilação de um YAML editado. O script `.github/scripts/check_distribution.py`
56
+ também pode ser executado localmente, recebendo o wheel e um XML fictício.
57
+
58
+ ### Publicação
59
+
60
+ Configure Trusted Publishing nas contas do PyPI e do TestPyPI: projeto
61
+ `lattes2pdf`, proprietário `mpds`, repositório `lattes2pdf`, workflow `release.yml`.
62
+ Use o ambiente GitHub `pypi` para PyPI e `testpypi` para TestPyPI. Não são necessários
63
+ tokens de API no repositório.
64
+
65
+ 1. Atualize a versão em `pyproject.toml` e confira as alterações da release.
66
+ 2. Execute manualmente o workflow **Publicação** para ensaiar no TestPyPI.
67
+ 3. Confira a página e a instalação da versão no TestPyPI.
68
+ 4. Crie a release com tag e título `vX.Y.Z`, descrevendo mudanças e limitações no corpo.
69
+
70
+ Publicar a release no GitHub dispara uma nova validação e a publicação no PyPI.
71
+ O workflow confere a versão da tag e publica somente os artefatos que passaram
72
+ nos testes; depois anexa wheel e sdist à release. Cada versão publicada é imutável:
73
+ para mudar seu conteúdo, incremente a versão. Um rascunho de release não publica
74
+ o pacote.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Matheus Müller
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,178 @@
1
+ Metadata-Version: 2.4
2
+ Name: lattes2pdf
3
+ Version: 0.1.0
4
+ Summary: Seleção e conversão de currículos Lattes para RenderCV
5
+ Project-URL: Repository, https://github.com/mpds/lattes2pdf
6
+ Project-URL: Issues, https://github.com/mpds/lattes2pdf/issues
7
+ License-Expression: MIT
8
+ License-File: LICENSE
9
+ Requires-Python: >=3.12
10
+ Requires-Dist: defusedxml<1,>=0.7.1
11
+ Requires-Dist: pyyaml<7,>=6.0.2
12
+ Requires-Dist: rendercv[full]<2.9,>=2.8
13
+ Description-Content-Type: text/markdown
14
+
15
+ # lattes2pdf
16
+
17
+ Transforme seu Currículo Lattes em um CV em PDF, escolhendo o que apresentar e como organizar as informações. Use perfis editáveis para criar versões acadêmicas ou resumidas e temas do [RenderCV](https://rendercv.com) para definir a aparência. O YAML gerado é compatível com o RenderCV e pode ser editado e renderizado diretamente, inclusive com temas personalizados como o [Garamond](https://github.com/mpds/lattes2pdf/tree/main/src/lattes2pdf/themes/garamond), incluído no projeto.
18
+
19
+ Veja exemplos fictícios: [ModernCV](https://github.com/mpds/lattes2pdf/blob/main/examples/pdfs/moderncv.pdf), nativo do RenderCV, e [Garamond](https://github.com/mpds/lattes2pdf/blob/main/examples/pdfs/garamond.pdf), um tema alternativo criado com o RenderCV e incluído no lattes2pdf.
20
+
21
+ ## Instalação
22
+
23
+ Requer Python 3.12 ou superior. No Linux ou macOS, instale em um ambiente virtual:
24
+
25
+ ```bash
26
+ python3 -m venv .venv
27
+ source .venv/bin/activate
28
+ python -m pip install lattes2pdf
29
+ ```
30
+
31
+ O RenderCV é instalado como dependência; a geração usa Typst e não exige uma instalação de LaTeX.
32
+
33
+ ## Do Lattes ao PDF
34
+
35
+ Na [Plataforma Lattes](https://lattes.cnpq.br/), acesse a edição do seu currículo e procure **Exportar**, escolhendo o formato **XML**. Salve o arquivo baixado: o lattes2pdf aceita tanto o XML quanto o ZIP que o contém, sem precisar descompactá-lo.
36
+
37
+ ![Fluxo: XML ou ZIP do Lattes, perfil opcional e tema entram no lattes2pdf; saem PDF, YAML editável do RenderCV e relatório JSON. O YAML pode ser editado e recompilado pelo RenderCV.](https://raw.githubusercontent.com/mpds/lattes2pdf/main/examples/workflow.png)
38
+
39
+ O **perfil** seleciona e organiza o conteúdo. O **tema** define a aparência. Ambos são opcionais.
40
+
41
+ ## Gerar um currículo
42
+
43
+ ```bash
44
+ lattes2pdf render curriculo.xml -o cv.pdf
45
+ ```
46
+
47
+ O comando usa o preset `academico`, com o tema `classic` por padrão. Para incluir todos os detalhes conhecidos do currículo sem aplicar o preset, use `--full`.
48
+
49
+ Isso gera três arquivos:
50
+
51
+ | Arquivo | Para que serve |
52
+ | --- | --- |
53
+ | `cv.pdf` | Currículo pronto para visualizar e compartilhar. |
54
+ | `cv.yaml` | Conteúdo e configuração visual no formato do RenderCV. |
55
+ | `cv.report.json` | Relatório das informações incluídas, omitidas e dos avisos de conversão. |
56
+
57
+ O tema padrão é `classic`. Para experimentar outro, use `--theme garamond` ou um nome listado em `lattes2pdf theme --help`. Use pastas separadas para comparar temas; com temas personalizados, templates e fontes também são copiados junto ao YAML.
58
+
59
+ Para testar sem o seu Lattes, baixe o [XML fictício](https://raw.githubusercontent.com/mpds/lattes2pdf/main/examples/curriculo.xml) e use-o no lugar de `curriculo.xml`.
60
+
61
+ ## Comece com um perfil
62
+
63
+ O preset `academico` já é usado por padrão em `render` e `export`. Para escolher outro ou editar suas preferências, copie um preset e use o arquivo na geração:
64
+
65
+ ```bash
66
+ lattes2pdf profile essencial -o profile.yaml # gera o arquivo de configuração
67
+ lattes2pdf render curriculo.xml --profile profile.yaml -o essencial.pdf # usa o perfil personalizado
68
+ ```
69
+
70
+ | Preset | Ponto de partida |
71
+ | --- | --- |
72
+ | `academico` | Cobertura ampla, incluindo bio e informações do trabalho de formação. |
73
+ | `essencial` | Bio, formação, experiência e principais seções de produção. |
74
+ | `resumido` | Menos seções, sem bio e sem listas de autores. |
75
+
76
+ Os presets são arquivos YAML editáveis, podendo ser modificados conforme a necessidade.
77
+
78
+ ## Editar o resultado no RenderCV
79
+
80
+ Abra o `cv.yaml` gerado, ajuste o texto ou a aparência e compile novamente:
81
+
82
+ ```bash
83
+ rendercv render cv.yaml --pdf-path cv-editado.pdf
84
+ ```
85
+
86
+ O caminho do PDF é relativo à pasta do YAML. Se houver pastas de templates e fontes ao lado dele, mantenha-as junto do arquivo.
87
+
88
+ Essa edição afeta o documento gerado. Para reaplicar escolhas a uma nova exportação do Lattes, salve-as no `profile.yaml`.
89
+
90
+ ## Escolher o que aparece
91
+
92
+ Veja as seções e os registros do seu currículo:
93
+
94
+ ```bash
95
+ lattes2pdf inspect curriculo.xml
96
+ lattes2pdf inspect curriculo.xml --section publications.articles
97
+ ```
98
+
99
+ Por exemplo, a publicação do XML fictício aparece assim:
100
+
101
+ ```text
102
+ publications.articles — Artigos publicados (1)
103
+ publications.articles:5af5a2d20b36 Catálogos abertos & memória digital (2024)
104
+ ```
105
+
106
+ Você pode excluir uma seção inteira ou copiar o ID de um registro específico:
107
+
108
+ ```bash
109
+ lattes2pdf render curriculo.xml --exclude awards -o sem-premios.pdf
110
+ lattes2pdf render curriculo.xml \
111
+ --exclude-id publications.articles:5af5a2d20b36 -o sem-artigo.pdf
112
+ ```
113
+
114
+ Use os IDs retornados pelo seu próprio `inspect`. Eles podem mudar quando o registro é alterado ou ganha duplicatas. As opções `--exclude` e `--exclude-id` podem ser repetidas para remover mais itens.
115
+
116
+ ## Guardar suas preferências
117
+
118
+ Edite o preset copiado ou crie um `profile.yaml` com apenas as escolhas de que precisa:
119
+
120
+ ```yaml
121
+ include: [profile, education, experience, publications]
122
+ exclude: [publications.press]
123
+ order: [profile, experience, education, publications]
124
+ theme: garamond
125
+
126
+ sections:
127
+ education:
128
+ title: Formação acadêmica
129
+ show_advisors: false
130
+ publications.articles:
131
+ show_authors: true
132
+ show_links: true
133
+ ```
134
+
135
+ Para guardar exclusões individuais, acrescente `exclude_ids` com os IDs do `inspect`:
136
+
137
+ ```yaml
138
+ exclude_ids:
139
+ - publications.articles:5af5a2d20b36
140
+ ```
141
+
142
+ Depois, aplique o arquivo:
143
+
144
+ ```bash
145
+ lattes2pdf render curriculo.xml --profile profile.yaml -o personalizado.pdf
146
+ ```
147
+
148
+ Descubra os nomes das seções e as opções disponíveis sem precisar conhecer os atributos internos do XML:
149
+
150
+ ```bash
151
+ lattes2pdf sections
152
+ lattes2pdf sections education
153
+ lattes2pdf sections publications.articles
154
+ ```
155
+
156
+ Um `--profile` explícito substitui o preset padrão. As opções da linha de comando substituem as correspondentes no perfil. Para filtros por ano, ordenação e outros ajustes, consulte `lattes2pdf render --help`. Use `--force` quando quiser substituir saídas existentes.
157
+
158
+ ## Personalizar um tema
159
+
160
+ Copie o Garamond para uma pasta editável:
161
+
162
+ ```bash
163
+ lattes2pdf theme garamond -o meu-tema
164
+ lattes2pdf render curriculo.xml --profile profile.yaml \
165
+ --theme meu-tema/design.yaml -o meu-cv.pdf
166
+ ```
167
+
168
+ Edite `design.yaml` para ajustar fonte, margens e espaçamentos; os templates permitem alterar a composição das entradas. Para usar um tema externo, forneça um YAML com o mapa `design` e mantenha a pasta do tema e suas fontes ao lado dele, conforme a [estrutura de temas do RenderCV](https://docs.rendercv.com/user_guide/how_to/override_default_templates/).
169
+
170
+ Você também pode salvar `theme: meu-tema/design.yaml` no perfil. Nesse caso, o caminho é relativo ao `profile.yaml`.
171
+
172
+ ## Exportação e limites
173
+
174
+ Para gerar somente o YAML e o relatório, use `lattes2pdf export curriculo.xml -o cv.yaml`. O modo `--full` inclui todos os registros e detalhes conhecidos permitidos pela ferramenta, podendo produzir um documento extenso; ele não é um preset de apresentação e não aceita filtros de seleção.
175
+
176
+ Dados privados, como documentos pessoais e endereço residencial, não são exportados. Conteúdo desconhecido e omissões aparecem no relatório; no modo `--full`, campos não mapeados impedem a exportação por padrão.
177
+
178
+ A integração atual usa RenderCV 2.8. Veja [como contribuir](https://github.com/mpds/lattes2pdf/blob/main/CONTRIBUTING.md) e a [licença MIT](https://github.com/mpds/lattes2pdf/blob/main/LICENSE).
@@ -0,0 +1,164 @@
1
+ # lattes2pdf
2
+
3
+ Transforme seu Currículo Lattes em um CV em PDF, escolhendo o que apresentar e como organizar as informações. Use perfis editáveis para criar versões acadêmicas ou resumidas e temas do [RenderCV](https://rendercv.com) para definir a aparência. O YAML gerado é compatível com o RenderCV e pode ser editado e renderizado diretamente, inclusive com temas personalizados como o [Garamond](https://github.com/mpds/lattes2pdf/tree/main/src/lattes2pdf/themes/garamond), incluído no projeto.
4
+
5
+ Veja exemplos fictícios: [ModernCV](https://github.com/mpds/lattes2pdf/blob/main/examples/pdfs/moderncv.pdf), nativo do RenderCV, e [Garamond](https://github.com/mpds/lattes2pdf/blob/main/examples/pdfs/garamond.pdf), um tema alternativo criado com o RenderCV e incluído no lattes2pdf.
6
+
7
+ ## Instalação
8
+
9
+ Requer Python 3.12 ou superior. No Linux ou macOS, instale em um ambiente virtual:
10
+
11
+ ```bash
12
+ python3 -m venv .venv
13
+ source .venv/bin/activate
14
+ python -m pip install lattes2pdf
15
+ ```
16
+
17
+ O RenderCV é instalado como dependência; a geração usa Typst e não exige uma instalação de LaTeX.
18
+
19
+ ## Do Lattes ao PDF
20
+
21
+ Na [Plataforma Lattes](https://lattes.cnpq.br/), acesse a edição do seu currículo e procure **Exportar**, escolhendo o formato **XML**. Salve o arquivo baixado: o lattes2pdf aceita tanto o XML quanto o ZIP que o contém, sem precisar descompactá-lo.
22
+
23
+ ![Fluxo: XML ou ZIP do Lattes, perfil opcional e tema entram no lattes2pdf; saem PDF, YAML editável do RenderCV e relatório JSON. O YAML pode ser editado e recompilado pelo RenderCV.](https://raw.githubusercontent.com/mpds/lattes2pdf/main/examples/workflow.png)
24
+
25
+ O **perfil** seleciona e organiza o conteúdo. O **tema** define a aparência. Ambos são opcionais.
26
+
27
+ ## Gerar um currículo
28
+
29
+ ```bash
30
+ lattes2pdf render curriculo.xml -o cv.pdf
31
+ ```
32
+
33
+ O comando usa o preset `academico`, com o tema `classic` por padrão. Para incluir todos os detalhes conhecidos do currículo sem aplicar o preset, use `--full`.
34
+
35
+ Isso gera três arquivos:
36
+
37
+ | Arquivo | Para que serve |
38
+ | --- | --- |
39
+ | `cv.pdf` | Currículo pronto para visualizar e compartilhar. |
40
+ | `cv.yaml` | Conteúdo e configuração visual no formato do RenderCV. |
41
+ | `cv.report.json` | Relatório das informações incluídas, omitidas e dos avisos de conversão. |
42
+
43
+ O tema padrão é `classic`. Para experimentar outro, use `--theme garamond` ou um nome listado em `lattes2pdf theme --help`. Use pastas separadas para comparar temas; com temas personalizados, templates e fontes também são copiados junto ao YAML.
44
+
45
+ Para testar sem o seu Lattes, baixe o [XML fictício](https://raw.githubusercontent.com/mpds/lattes2pdf/main/examples/curriculo.xml) e use-o no lugar de `curriculo.xml`.
46
+
47
+ ## Comece com um perfil
48
+
49
+ O preset `academico` já é usado por padrão em `render` e `export`. Para escolher outro ou editar suas preferências, copie um preset e use o arquivo na geração:
50
+
51
+ ```bash
52
+ lattes2pdf profile essencial -o profile.yaml # gera o arquivo de configuração
53
+ lattes2pdf render curriculo.xml --profile profile.yaml -o essencial.pdf # usa o perfil personalizado
54
+ ```
55
+
56
+ | Preset | Ponto de partida |
57
+ | --- | --- |
58
+ | `academico` | Cobertura ampla, incluindo bio e informações do trabalho de formação. |
59
+ | `essencial` | Bio, formação, experiência e principais seções de produção. |
60
+ | `resumido` | Menos seções, sem bio e sem listas de autores. |
61
+
62
+ Os presets são arquivos YAML editáveis, podendo ser modificados conforme a necessidade.
63
+
64
+ ## Editar o resultado no RenderCV
65
+
66
+ Abra o `cv.yaml` gerado, ajuste o texto ou a aparência e compile novamente:
67
+
68
+ ```bash
69
+ rendercv render cv.yaml --pdf-path cv-editado.pdf
70
+ ```
71
+
72
+ O caminho do PDF é relativo à pasta do YAML. Se houver pastas de templates e fontes ao lado dele, mantenha-as junto do arquivo.
73
+
74
+ Essa edição afeta o documento gerado. Para reaplicar escolhas a uma nova exportação do Lattes, salve-as no `profile.yaml`.
75
+
76
+ ## Escolher o que aparece
77
+
78
+ Veja as seções e os registros do seu currículo:
79
+
80
+ ```bash
81
+ lattes2pdf inspect curriculo.xml
82
+ lattes2pdf inspect curriculo.xml --section publications.articles
83
+ ```
84
+
85
+ Por exemplo, a publicação do XML fictício aparece assim:
86
+
87
+ ```text
88
+ publications.articles — Artigos publicados (1)
89
+ publications.articles:5af5a2d20b36 Catálogos abertos & memória digital (2024)
90
+ ```
91
+
92
+ Você pode excluir uma seção inteira ou copiar o ID de um registro específico:
93
+
94
+ ```bash
95
+ lattes2pdf render curriculo.xml --exclude awards -o sem-premios.pdf
96
+ lattes2pdf render curriculo.xml \
97
+ --exclude-id publications.articles:5af5a2d20b36 -o sem-artigo.pdf
98
+ ```
99
+
100
+ Use os IDs retornados pelo seu próprio `inspect`. Eles podem mudar quando o registro é alterado ou ganha duplicatas. As opções `--exclude` e `--exclude-id` podem ser repetidas para remover mais itens.
101
+
102
+ ## Guardar suas preferências
103
+
104
+ Edite o preset copiado ou crie um `profile.yaml` com apenas as escolhas de que precisa:
105
+
106
+ ```yaml
107
+ include: [profile, education, experience, publications]
108
+ exclude: [publications.press]
109
+ order: [profile, experience, education, publications]
110
+ theme: garamond
111
+
112
+ sections:
113
+ education:
114
+ title: Formação acadêmica
115
+ show_advisors: false
116
+ publications.articles:
117
+ show_authors: true
118
+ show_links: true
119
+ ```
120
+
121
+ Para guardar exclusões individuais, acrescente `exclude_ids` com os IDs do `inspect`:
122
+
123
+ ```yaml
124
+ exclude_ids:
125
+ - publications.articles:5af5a2d20b36
126
+ ```
127
+
128
+ Depois, aplique o arquivo:
129
+
130
+ ```bash
131
+ lattes2pdf render curriculo.xml --profile profile.yaml -o personalizado.pdf
132
+ ```
133
+
134
+ Descubra os nomes das seções e as opções disponíveis sem precisar conhecer os atributos internos do XML:
135
+
136
+ ```bash
137
+ lattes2pdf sections
138
+ lattes2pdf sections education
139
+ lattes2pdf sections publications.articles
140
+ ```
141
+
142
+ Um `--profile` explícito substitui o preset padrão. As opções da linha de comando substituem as correspondentes no perfil. Para filtros por ano, ordenação e outros ajustes, consulte `lattes2pdf render --help`. Use `--force` quando quiser substituir saídas existentes.
143
+
144
+ ## Personalizar um tema
145
+
146
+ Copie o Garamond para uma pasta editável:
147
+
148
+ ```bash
149
+ lattes2pdf theme garamond -o meu-tema
150
+ lattes2pdf render curriculo.xml --profile profile.yaml \
151
+ --theme meu-tema/design.yaml -o meu-cv.pdf
152
+ ```
153
+
154
+ Edite `design.yaml` para ajustar fonte, margens e espaçamentos; os templates permitem alterar a composição das entradas. Para usar um tema externo, forneça um YAML com o mapa `design` e mantenha a pasta do tema e suas fontes ao lado dele, conforme a [estrutura de temas do RenderCV](https://docs.rendercv.com/user_guide/how_to/override_default_templates/).
155
+
156
+ Você também pode salvar `theme: meu-tema/design.yaml` no perfil. Nesse caso, o caminho é relativo ao `profile.yaml`.
157
+
158
+ ## Exportação e limites
159
+
160
+ Para gerar somente o YAML e o relatório, use `lattes2pdf export curriculo.xml -o cv.yaml`. O modo `--full` inclui todos os registros e detalhes conhecidos permitidos pela ferramenta, podendo produzir um documento extenso; ele não é um preset de apresentação e não aceita filtros de seleção.
161
+
162
+ Dados privados, como documentos pessoais e endereço residencial, não são exportados. Conteúdo desconhecido e omissões aparecem no relatório; no modo `--full`, campos não mapeados impedem a exportação por padrão.
163
+
164
+ A integração atual usa RenderCV 2.8. Veja [como contribuir](https://github.com/mpds/lattes2pdf/blob/main/CONTRIBUTING.md) e a [licença MIT](https://github.com/mpds/lattes2pdf/blob/main/LICENSE).
@@ -0,0 +1,45 @@
1
+ [build-system]
2
+ requires = ["hatchling>=1.27,<2"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "lattes2pdf"
7
+ version = "0.1.0"
8
+ description = "Seleção e conversão de currículos Lattes para RenderCV"
9
+ readme = "README.md"
10
+ requires-python = ">=3.12"
11
+ license = "MIT"
12
+ license-files = ["LICENSE"]
13
+ dependencies = [
14
+ "defusedxml>=0.7.1,<1",
15
+ "PyYAML>=6.0.2,<7",
16
+ "rendercv[full]>=2.8,<2.9",
17
+ ]
18
+
19
+ [project.scripts]
20
+ lattes2pdf = "lattes2pdf.cli:main"
21
+
22
+ [project.urls]
23
+ Repository = "https://github.com/mpds/lattes2pdf"
24
+ Issues = "https://github.com/mpds/lattes2pdf/issues"
25
+
26
+ [tool.hatch.build.targets.wheel]
27
+ packages = ["src/lattes2pdf"]
28
+ core-metadata-version = "2.4"
29
+
30
+ [tool.hatch.build.targets.sdist]
31
+ include = ["/src", "/tests", "/pyproject.toml", "/LICENSE", "/README.md", "/CONTRIBUTING.md"]
32
+ core-metadata-version = "2.4"
33
+
34
+ [dependency-groups]
35
+ dev = ["ruff>=0.15,<0.17", "pytest>=8,<10", "build>=1.2,<2", "pypdf>=6,<7", "twine>=6,<7"]
36
+
37
+ [tool.ruff]
38
+ target-version = "py312"
39
+ extend-exclude = [".local"]
40
+
41
+ [tool.ruff.lint]
42
+ select = ["E4", "E7", "E9", "F", "I"]
43
+
44
+ [tool.pytest.ini_options]
45
+ testpaths = ["tests"]
@@ -0,0 +1 @@
1
+ """Read, select, and export Lattes curricula."""