cvme 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 (212) hide show
  1. cvme-0.1.0/.gitignore +10 -0
  2. cvme-0.1.0/LICENSE +21 -0
  3. cvme-0.1.0/PKG-INFO +773 -0
  4. cvme-0.1.0/README.md +729 -0
  5. cvme-0.1.0/docs/implementation-plan.md +1100 -0
  6. cvme-0.1.0/docs/job-sources.md +158 -0
  7. cvme-0.1.0/docs/linkedin-sync.md +343 -0
  8. cvme-0.1.0/docs/machine-readability.md +103 -0
  9. cvme-0.1.0/docs/releasing.md +57 -0
  10. cvme-0.1.0/pyproject.toml +94 -0
  11. cvme-0.1.0/scripts/fetch_fonts.py +128 -0
  12. cvme-0.1.0/src/cvme/__init__.py +3 -0
  13. cvme-0.1.0/src/cvme/__main__.py +4 -0
  14. cvme-0.1.0/src/cvme/ats/__init__.py +7 -0
  15. cvme-0.1.0/src/cvme/ats/check.py +308 -0
  16. cvme-0.1.0/src/cvme/cli/__init__.py +0 -0
  17. cvme-0.1.0/src/cvme/cli/app.py +102 -0
  18. cvme-0.1.0/src/cvme/cli/apps.py +460 -0
  19. cvme-0.1.0/src/cvme/cli/ats.py +76 -0
  20. cvme-0.1.0/src/cvme/cli/convert.py +37 -0
  21. cvme-0.1.0/src/cvme/cli/digest.py +156 -0
  22. cvme-0.1.0/src/cvme/cli/errors.py +38 -0
  23. cvme-0.1.0/src/cvme/cli/init.py +46 -0
  24. cvme-0.1.0/src/cvme/cli/job.py +124 -0
  25. cvme-0.1.0/src/cvme/cli/linkedin.py +327 -0
  26. cvme-0.1.0/src/cvme/cli/prep.py +512 -0
  27. cvme-0.1.0/src/cvme/cli/render.py +186 -0
  28. cvme-0.1.0/src/cvme/cli/send.py +114 -0
  29. cvme-0.1.0/src/cvme/cli/tailor.py +136 -0
  30. cvme-0.1.0/src/cvme/cli/verify.py +71 -0
  31. cvme-0.1.0/src/cvme/config.py +250 -0
  32. cvme-0.1.0/src/cvme/convert/__init__.py +39 -0
  33. cvme-0.1.0/src/cvme/convert/pdftext.py +251 -0
  34. cvme-0.1.0/src/cvme/convert/structure.py +402 -0
  35. cvme-0.1.0/src/cvme/errors.py +60 -0
  36. cvme-0.1.0/src/cvme/generate/__init__.py +0 -0
  37. cvme-0.1.0/src/cvme/generate/agent.py +134 -0
  38. cvme-0.1.0/src/cvme/generate/agents.toml +30 -0
  39. cvme-0.1.0/src/cvme/generate/bundle.py +116 -0
  40. cvme-0.1.0/src/cvme/generate/naming.py +51 -0
  41. cvme-0.1.0/src/cvme/generate/produce.py +134 -0
  42. cvme-0.1.0/src/cvme/generate/prompts/_rules.md +78 -0
  43. cvme-0.1.0/src/cvme/generate/prompts/cover_letter.md +23 -0
  44. cvme-0.1.0/src/cvme/generate/prompts/report.md +79 -0
  45. cvme-0.1.0/src/cvme/generate/prompts/resume.md +22 -0
  46. cvme-0.1.0/src/cvme/hunt/__init__.py +1 -0
  47. cvme-0.1.0/src/cvme/hunt/culture.py +191 -0
  48. cvme-0.1.0/src/cvme/hunt/culture.toml +331 -0
  49. cvme-0.1.0/src/cvme/hunt/index.py +120 -0
  50. cvme-0.1.0/src/cvme/hunt/layout.py +189 -0
  51. cvme-0.1.0/src/cvme/hunt/lexicon.toml +152 -0
  52. cvme-0.1.0/src/cvme/hunt/pay.py +255 -0
  53. cvme-0.1.0/src/cvme/hunt/report.py +162 -0
  54. cvme-0.1.0/src/cvme/hunt/score.py +294 -0
  55. cvme-0.1.0/src/cvme/hunt/store.py +454 -0
  56. cvme-0.1.0/src/cvme/hunt/wants.py +124 -0
  57. cvme-0.1.0/src/cvme/jobs/__init__.py +0 -0
  58. cvme-0.1.0/src/cvme/jobs/ats.py +141 -0
  59. cvme-0.1.0/src/cvme/jobs/cache.py +35 -0
  60. cvme-0.1.0/src/cvme/jobs/discovery.py +175 -0
  61. cvme-0.1.0/src/cvme/jobs/htmltext.py +65 -0
  62. cvme-0.1.0/src/cvme/jobs/jsonld.py +153 -0
  63. cvme-0.1.0/src/cvme/jobs/match.py +87 -0
  64. cvme-0.1.0/src/cvme/jobs/models.py +92 -0
  65. cvme-0.1.0/src/cvme/jobs/rate.py +30 -0
  66. cvme-0.1.0/src/cvme/jobs/salary.py +11 -0
  67. cvme-0.1.0/src/cvme/jobs/sitehtml.py +116 -0
  68. cvme-0.1.0/src/cvme/jobs/sources.py +134 -0
  69. cvme-0.1.0/src/cvme/jobs/store.py +160 -0
  70. cvme-0.1.0/src/cvme/jobs/writer.py +77 -0
  71. cvme-0.1.0/src/cvme/linkedin/__init__.py +6 -0
  72. cvme-0.1.0/src/cvme/linkedin/audit.py +191 -0
  73. cvme-0.1.0/src/cvme/linkedin/browser.py +209 -0
  74. cvme-0.1.0/src/cvme/linkedin/capture.py +125 -0
  75. cvme-0.1.0/src/cvme/linkedin/dates.py +101 -0
  76. cvme-0.1.0/src/cvme/linkedin/diff.py +204 -0
  77. cvme-0.1.0/src/cvme/linkedin/dom.py +404 -0
  78. cvme-0.1.0/src/cvme/linkedin/export.py +235 -0
  79. cvme-0.1.0/src/cvme/linkedin/live.py +99 -0
  80. cvme-0.1.0/src/cvme/linkedin/model.py +286 -0
  81. cvme-0.1.0/src/cvme/linkedin/overlay.py +87 -0
  82. cvme-0.1.0/src/cvme/linkedin/pdfprofile.py +133 -0
  83. cvme-0.1.0/src/cvme/linkedin/project.py +290 -0
  84. cvme-0.1.0/src/cvme/linkedin/review.py +165 -0
  85. cvme-0.1.0/src/cvme/linkedin/state.py +86 -0
  86. cvme-0.1.0/src/cvme/linkedin/sync.py +97 -0
  87. cvme-0.1.0/src/cvme/md/GRAMMAR.md +97 -0
  88. cvme-0.1.0/src/cvme/md/__init__.py +0 -0
  89. cvme-0.1.0/src/cvme/md/inline.py +141 -0
  90. cvme-0.1.0/src/cvme/md/parse.py +211 -0
  91. cvme-0.1.0/src/cvme/models.py +144 -0
  92. cvme-0.1.0/src/cvme/py.typed +0 -0
  93. cvme-0.1.0/src/cvme/render/__init__.py +0 -0
  94. cvme-0.1.0/src/cvme/render/engine.py +101 -0
  95. cvme-0.1.0/src/cvme/render/fit.py +245 -0
  96. cvme-0.1.0/src/cvme/render/fonts/Carlito-Italic.ttf +0 -0
  97. cvme-0.1.0/src/cvme/render/fonts/Carlito-Regular.ttf +0 -0
  98. cvme-0.1.0/src/cvme/render/fonts/Carlito-SemiBold.ttf +0 -0
  99. cvme-0.1.0/src/cvme/render/fonts/EBGaramond-Italic.ttf +0 -0
  100. cvme-0.1.0/src/cvme/render/fonts/EBGaramond-Regular.ttf +0 -0
  101. cvme-0.1.0/src/cvme/render/fonts/EBGaramond-SemiBold.ttf +0 -0
  102. cvme-0.1.0/src/cvme/render/fonts/FiraCode-SemiBold.ttf +0 -0
  103. cvme-0.1.0/src/cvme/render/fonts/IBMPlexMono-SemiBold.ttf +0 -0
  104. cvme-0.1.0/src/cvme/render/fonts/IBMPlexSans-Italic.ttf +0 -0
  105. cvme-0.1.0/src/cvme/render/fonts/IBMPlexSans-Regular.ttf +0 -0
  106. cvme-0.1.0/src/cvme/render/fonts/IBMPlexSans-SemiBold.ttf +0 -0
  107. cvme-0.1.0/src/cvme/render/fonts/Inter-Italic.ttf +0 -0
  108. cvme-0.1.0/src/cvme/render/fonts/Inter-Regular.ttf +0 -0
  109. cvme-0.1.0/src/cvme/render/fonts/Inter-SemiBold.ttf +0 -0
  110. cvme-0.1.0/src/cvme/render/fonts/JetBrainsMono-SemiBold.ttf +0 -0
  111. cvme-0.1.0/src/cvme/render/fonts/LICENSE.Carlito +93 -0
  112. cvme-0.1.0/src/cvme/render/fonts/LICENSE.EbGaramond +93 -0
  113. cvme-0.1.0/src/cvme/render/fonts/LICENSE.FiraCode +93 -0
  114. cvme-0.1.0/src/cvme/render/fonts/LICENSE.IbmPlexMono +93 -0
  115. cvme-0.1.0/src/cvme/render/fonts/LICENSE.IbmPlexSans +93 -0
  116. cvme-0.1.0/src/cvme/render/fonts/LICENSE.Inter +93 -0
  117. cvme-0.1.0/src/cvme/render/fonts/LICENSE.JetbrainsMono +93 -0
  118. cvme-0.1.0/src/cvme/render/fonts/LICENSE.SourceSans3 +93 -0
  119. cvme-0.1.0/src/cvme/render/fonts/LICENSE.SourceSerif4 +93 -0
  120. cvme-0.1.0/src/cvme/render/fonts/README.md +34 -0
  121. cvme-0.1.0/src/cvme/render/fonts/SourceSans3-Italic.ttf +0 -0
  122. cvme-0.1.0/src/cvme/render/fonts/SourceSans3-Regular.ttf +0 -0
  123. cvme-0.1.0/src/cvme/render/fonts/SourceSans3-SemiBold.ttf +0 -0
  124. cvme-0.1.0/src/cvme/render/fonts/SourceSerif4-Italic.ttf +0 -0
  125. cvme-0.1.0/src/cvme/render/fonts/SourceSerif4-Regular.ttf +0 -0
  126. cvme-0.1.0/src/cvme/render/fonts/SourceSerif4-SemiBold.ttf +0 -0
  127. cvme-0.1.0/src/cvme/render/fonts.py +59 -0
  128. cvme-0.1.0/src/cvme/render/templates/_common.typ +168 -0
  129. cvme-0.1.0/src/cvme/render/templates/cover_letter.typ +64 -0
  130. cvme-0.1.0/src/cvme/render/templates/resume.typ +137 -0
  131. cvme-0.1.0/src/cvme/starters/base/cover_letter.md +26 -0
  132. cvme-0.1.0/src/cvme/starters/base/linkedin.md.example +32 -0
  133. cvme-0.1.0/src/cvme/starters/base/resume.md +35 -0
  134. cvme-0.1.0/src/cvme/starters/cvme.toml +133 -0
  135. cvme-0.1.0/src/cvme/starters/facts/metrics.md +14 -0
  136. cvme-0.1.0/src/cvme/starters/facts/skills.md +12 -0
  137. cvme-0.1.0/src/cvme/style/__init__.py +0 -0
  138. cvme-0.1.0/src/cvme/style/color.py +86 -0
  139. cvme-0.1.0/src/cvme/style/presets/airy.toml +15 -0
  140. cvme-0.1.0/src/cvme/style/presets/compact.toml +15 -0
  141. cvme-0.1.0/src/cvme/style/presets/letter.toml +15 -0
  142. cvme-0.1.0/src/cvme/style/presets/sans.toml +57 -0
  143. cvme-0.1.0/src/cvme/style/presets/serif.toml +50 -0
  144. cvme-0.1.0/src/cvme/style/presets/standard.toml +13 -0
  145. cvme-0.1.0/src/cvme/style/schema.py +187 -0
  146. cvme-0.1.0/src/cvme/verify/__init__.py +0 -0
  147. cvme-0.1.0/src/cvme/verify/check.py +170 -0
  148. cvme-0.1.0/src/cvme/verify/corpus.py +101 -0
  149. cvme-0.1.0/src/cvme/verify/numbers.py +254 -0
  150. cvme-0.1.0/src/cvme/verify/prose.py +134 -0
  151. cvme-0.1.0/src/cvme/verify/report.py +57 -0
  152. cvme-0.1.0/src/cvme/verify/rules.toml +69 -0
  153. cvme-0.1.0/tests/__init__.py +0 -0
  154. cvme-0.1.0/tests/conftest.py +33 -0
  155. cvme-0.1.0/tests/fixtures/cover_letter.md +34 -0
  156. cvme-0.1.0/tests/fixtures/facts/metrics.md +13 -0
  157. cvme-0.1.0/tests/fixtures/facts/skills.md +8 -0
  158. cvme-0.1.0/tests/fixtures/jobs/ashby.json +26 -0
  159. cvme-0.1.0/tests/fixtures/jobs/greenhouse.json +11 -0
  160. cvme-0.1.0/tests/fixtures/jobs/indeed_page.html +10 -0
  161. cvme-0.1.0/tests/fixtures/jobs/jsonld_page.html +19 -0
  162. cvme-0.1.0/tests/fixtures/jobs/lever.json +13 -0
  163. cvme-0.1.0/tests/fixtures/jobs/linkedin_4453268982.html +53 -0
  164. cvme-0.1.0/tests/fixtures/jobs/linkedin_4457172708.html +50 -0
  165. cvme-0.1.0/tests/fixtures/jobs/linkedin_page.html +11 -0
  166. cvme-0.1.0/tests/fixtures/jobs/plain_page.html +12 -0
  167. cvme-0.1.0/tests/fixtures/linkedin/foreign.html +19 -0
  168. cvme-0.1.0/tests/fixtures/linkedin/lazy.html +40 -0
  169. cvme-0.1.0/tests/fixtures/linkedin/profile.html +109 -0
  170. cvme-0.1.0/tests/fixtures/resume.md +72 -0
  171. cvme-0.1.0/tests/fixtures/resume_bad.md +23 -0
  172. cvme-0.1.0/tests/fixtures/resume_long.md +91 -0
  173. cvme-0.1.0/tests/geometry.py +86 -0
  174. cvme-0.1.0/tests/test_accent.py +106 -0
  175. cvme-0.1.0/tests/test_ats.py +152 -0
  176. cvme-0.1.0/tests/test_cli.py +54 -0
  177. cvme-0.1.0/tests/test_config.py +95 -0
  178. cvme-0.1.0/tests/test_convert.py +243 -0
  179. cvme-0.1.0/tests/test_cover_letter.py +103 -0
  180. cvme-0.1.0/tests/test_digest.py +217 -0
  181. cvme-0.1.0/tests/test_fit.py +119 -0
  182. cvme-0.1.0/tests/test_fonts.py +18 -0
  183. cvme-0.1.0/tests/test_generate.py +247 -0
  184. cvme-0.1.0/tests/test_hunt_culture.py +83 -0
  185. cvme-0.1.0/tests/test_hunt_index.py +82 -0
  186. cvme-0.1.0/tests/test_hunt_layout.py +89 -0
  187. cvme-0.1.0/tests/test_hunt_pay.py +88 -0
  188. cvme-0.1.0/tests/test_hunt_score.py +135 -0
  189. cvme-0.1.0/tests/test_hunt_store.py +141 -0
  190. cvme-0.1.0/tests/test_init.py +52 -0
  191. cvme-0.1.0/tests/test_inline.py +75 -0
  192. cvme-0.1.0/tests/test_job_cli.py +137 -0
  193. cvme-0.1.0/tests/test_jobs.py +454 -0
  194. cvme-0.1.0/tests/test_linkedin_audit.py +324 -0
  195. cvme-0.1.0/tests/test_linkedin_browser.py +189 -0
  196. cvme-0.1.0/tests/test_linkedin_cli.py +242 -0
  197. cvme-0.1.0/tests/test_linkedin_dom.py +229 -0
  198. cvme-0.1.0/tests/test_linkedin_pdf.py +184 -0
  199. cvme-0.1.0/tests/test_linkedin_project.py +207 -0
  200. cvme-0.1.0/tests/test_linkedin_sync.py +232 -0
  201. cvme-0.1.0/tests/test_machine_readable.py +103 -0
  202. cvme-0.1.0/tests/test_naming.py +38 -0
  203. cvme-0.1.0/tests/test_parse.py +89 -0
  204. cvme-0.1.0/tests/test_prep_cli.py +454 -0
  205. cvme-0.1.0/tests/test_render_date_gutter.py +226 -0
  206. cvme-0.1.0/tests/test_render_geometry.py +109 -0
  207. cvme-0.1.0/tests/test_render_style.py +155 -0
  208. cvme-0.1.0/tests/test_send_cli.py +79 -0
  209. cvme-0.1.0/tests/test_tailor_cli.py +198 -0
  210. cvme-0.1.0/tests/test_verify.py +227 -0
  211. cvme-0.1.0/tests/test_verify_cli.py +64 -0
  212. cvme-0.1.0/tests/test_wants.py +110 -0
cvme-0.1.0/.gitignore ADDED
@@ -0,0 +1,10 @@
1
+ __pycache__/
2
+ *.py[cod]
3
+ .venv/
4
+ .cvme/
5
+ spike_out*
6
+ *.egg-info/
7
+ .pytest_cache/
8
+ .ruff_cache/
9
+ out/
10
+ dist/
cvme-0.1.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Jeff Brennan
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.