this repo has no description

feat: Use pyyaml to parse frontmatter (#1)

authored by

Pavel Zwerschke and committed by
GitHub
dc740058 5989b3c3

+97 -25
+76
pixi.lock
··· 75 75 - conda: https://conda.anaconda.org/conda-forge/noarch/python-build-1.4.0-pyh332efcf_0.conda 76 76 - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.3-h4df99d1_100.conda 77 77 - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda 78 + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py314h67df5f8_1.conda 78 79 - conda: https://conda.anaconda.org/conda-forge/noarch/questionary-2.1.1-pyhd8ed1ab_0.conda 79 80 - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda 80 81 - conda: https://conda.anaconda.org/conda-forge/noarch/readme_renderer-44.0-pyhd8ed1ab_1.conda ··· 96 97 - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda 97 98 - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.5.3-pyhd8ed1ab_0.conda 98 99 - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.46.3-pyhd8ed1ab_0.conda 100 + - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda 99 101 - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda 100 102 - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda 101 103 osx-64: ··· 154 156 - conda: https://conda.anaconda.org/conda-forge/noarch/python-build-1.4.0-pyh332efcf_0.conda 155 157 - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.3-h4df99d1_100.conda 156 158 - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda 159 + - conda: https://conda.anaconda.org/conda-forge/osx-64/pyyaml-6.0.3-py314h10d0514_1.conda 157 160 - conda: https://conda.anaconda.org/conda-forge/noarch/questionary-2.1.1-pyhd8ed1ab_0.conda 158 161 - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h68b038d_0.conda 159 162 - conda: https://conda.anaconda.org/conda-forge/noarch/readme_renderer-44.0-pyhd8ed1ab_1.conda ··· 174 177 - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda 175 178 - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.5.3-pyhd8ed1ab_0.conda 176 179 - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.46.3-pyhd8ed1ab_0.conda 180 + - conda: https://conda.anaconda.org/conda-forge/osx-64/yaml-0.2.5-h4132b18_3.conda 177 181 - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda 178 182 - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda 179 183 osx-arm64: ··· 233 237 - conda: https://conda.anaconda.org/conda-forge/noarch/python-build-1.4.0-pyh332efcf_0.conda 234 238 - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.3-h4df99d1_100.conda 235 239 - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda 240 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py314h6e9b3f0_1.conda 236 241 - conda: https://conda.anaconda.org/conda-forge/noarch/questionary-2.1.1-pyhd8ed1ab_0.conda 237 242 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda 238 243 - conda: https://conda.anaconda.org/conda-forge/noarch/readme_renderer-44.0-pyhd8ed1ab_1.conda ··· 253 258 - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda 254 259 - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.5.3-pyhd8ed1ab_0.conda 255 260 - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.46.3-pyhd8ed1ab_0.conda 261 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda 256 262 - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda 257 263 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda 258 264 win-64: ··· 310 316 - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.3-h4df99d1_100.conda 311 317 - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda 312 318 - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-ctypes-0.2.3-py314h86ab7b2_3.conda 319 + - conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.3-py314h2359020_1.conda 313 320 - conda: https://conda.anaconda.org/conda-forge/noarch/questionary-2.1.1-pyhd8ed1ab_0.conda 314 321 - conda: https://conda.anaconda.org/conda-forge/noarch/readme_renderer-44.0-pyhd8ed1ab_1.conda 315 322 - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda ··· 334 341 - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.5.3-pyhd8ed1ab_0.conda 335 342 - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.46.3-pyhd8ed1ab_0.conda 336 343 - conda: https://conda.anaconda.org/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_8.conda 344 + - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda 337 345 - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda 338 346 - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda 339 347 default: ··· 384 392 - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.3-h32b2ec7_100_cp314.conda 385 393 - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.3-h4df99d1_100.conda 386 394 - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda 395 + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py314h67df5f8_1.conda 387 396 - conda: https://conda.anaconda.org/conda-forge/noarch/questionary-2.1.1-pyhd8ed1ab_0.conda 388 397 - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda 389 398 - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.2-pyhcf101f3_0.conda ··· 398 407 - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda 399 408 - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda 400 409 - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.5.3-pyhd8ed1ab_0.conda 410 + - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda 401 411 - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda 402 412 osx-64: 403 413 - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda ··· 433 443 - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.14.3-h4f44bb5_100_cp314.conda 434 444 - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.3-h4df99d1_100.conda 435 445 - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda 446 + - conda: https://conda.anaconda.org/conda-forge/osx-64/pyyaml-6.0.3-py314h10d0514_1.conda 436 447 - conda: https://conda.anaconda.org/conda-forge/noarch/questionary-2.1.1-pyhd8ed1ab_0.conda 437 448 - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h68b038d_0.conda 438 449 - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.2-pyhcf101f3_0.conda ··· 447 458 - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda 448 459 - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda 449 460 - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.5.3-pyhd8ed1ab_0.conda 461 + - conda: https://conda.anaconda.org/conda-forge/osx-64/yaml-0.2.5-h4132b18_3.conda 450 462 - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda 451 463 osx-arm64: 452 464 - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda ··· 483 495 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.14.3-h4c637c5_100_cp314.conda 484 496 - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.3-h4df99d1_100.conda 485 497 - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda 498 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py314h6e9b3f0_1.conda 486 499 - conda: https://conda.anaconda.org/conda-forge/noarch/questionary-2.1.1-pyhd8ed1ab_0.conda 487 500 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda 488 501 - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.2-pyhcf101f3_0.conda ··· 497 510 - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda 498 511 - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda 499 512 - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.5.3-pyhd8ed1ab_0.conda 513 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda 500 514 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda 501 515 win-64: 502 516 - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda ··· 531 545 - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.14.3-h4b44e0e_100_cp314.conda 532 546 - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.3-h4df99d1_100.conda 533 547 - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda 548 + - conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.3-py314h2359020_1.conda 534 549 - conda: https://conda.anaconda.org/conda-forge/noarch/questionary-2.1.1-pyhd8ed1ab_0.conda 535 550 - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.2-pyhcf101f3_0.conda 536 551 - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_2.conda ··· 548 563 - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_34.conda 549 564 - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_34.conda 550 565 - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.5.3-pyhd8ed1ab_0.conda 566 + - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda 551 567 - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda 552 568 lint: 553 569 channels: ··· 832 848 - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.12-hc97d973_100_cp313.conda 833 849 - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda 834 850 - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda 851 + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py313h3dea7bd_1.conda 835 852 - conda: https://conda.anaconda.org/conda-forge/noarch/questionary-2.1.1-pyhd8ed1ab_0.conda 836 853 - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda 837 854 - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.2-pyhcf101f3_0.conda ··· 846 863 - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda 847 864 - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda 848 865 - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.5.3-pyhd8ed1ab_0.conda 866 + - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda 849 867 - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda 850 868 osx-64: 851 869 - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda ··· 881 899 - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.13.12-h894a449_100_cp313.conda 882 900 - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda 883 901 - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda 902 + - conda: https://conda.anaconda.org/conda-forge/osx-64/pyyaml-6.0.3-py313h7c6a591_1.conda 884 903 - conda: https://conda.anaconda.org/conda-forge/noarch/questionary-2.1.1-pyhd8ed1ab_0.conda 885 904 - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h68b038d_0.conda 886 905 - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.2-pyhcf101f3_0.conda ··· 895 914 - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda 896 915 - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda 897 916 - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.5.3-pyhd8ed1ab_0.conda 917 + - conda: https://conda.anaconda.org/conda-forge/osx-64/yaml-0.2.5-h4132b18_3.conda 898 918 osx-arm64: 899 919 - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda 900 920 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_8.conda ··· 930 950 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.12-h20e6be0_100_cp313.conda 931 951 - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda 932 952 - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda 953 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py313h65a2061_1.conda 933 954 - conda: https://conda.anaconda.org/conda-forge/noarch/questionary-2.1.1-pyhd8ed1ab_0.conda 934 955 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda 935 956 - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.2-pyhcf101f3_0.conda ··· 944 965 - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda 945 966 - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda 946 967 - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.5.3-pyhd8ed1ab_0.conda 968 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda 947 969 win-64: 948 970 - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda 949 971 - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_8.conda ··· 977 999 - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.13.12-h09917c8_100_cp313.conda 978 1000 - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda 979 1001 - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda 1002 + - conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.3-py313hd650c13_1.conda 980 1003 - conda: https://conda.anaconda.org/conda-forge/noarch/questionary-2.1.1-pyhd8ed1ab_0.conda 981 1004 - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.2-pyhcf101f3_0.conda 982 1005 - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_2.conda ··· 994 1017 - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_34.conda 995 1018 - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_34.conda 996 1019 - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.5.3-pyhd8ed1ab_0.conda 1020 + - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda 997 1021 packages: 998 1022 - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 999 1023 sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 ··· 3266 3290 license_family: BSD 3267 3291 size: 58083 3268 3292 timestamp: 1762489935449 3293 + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py313h3dea7bd_1.conda 3294 + sha256: ef7df29b38ef04ec67a8888a4aa039973eaa377e8c4b59a7be0a1c50cd7e4ac6 3295 + md5: f256753e840c3cd3766488c9437a8f8b 3296 + depends: 3297 + - __glibc >=2.17,<3.0.a0 3298 + - libgcc >=14 3299 + - python >=3.13,<3.14.0a0 3300 + - python_abi 3.13.* *_cp313 3301 + - yaml >=0.2.5,<0.3.0a0 3302 + license: MIT 3303 + license_family: MIT 3304 + size: 201616 3305 + timestamp: 1770223543730 3269 3306 - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py314h67df5f8_1.conda 3270 3307 sha256: b318fb070c7a1f89980ef124b80a0b5ccf3928143708a85e0053cde0169c699d 3271 3308 md5: 2035f68f96be30dc60a5dfd7452c7941 ··· 3279 3316 license_family: MIT 3280 3317 size: 202391 3281 3318 timestamp: 1770223462836 3319 + - conda: https://conda.anaconda.org/conda-forge/osx-64/pyyaml-6.0.3-py313h7c6a591_1.conda 3320 + sha256: ab5f6c27d24facd1832481ccd8f432c676472d57596a3feaa77880a1462cdb2a 3321 + md5: 0eaf6cf9939bb465ee62b17d04254f9e 3322 + depends: 3323 + - __osx >=10.13 3324 + - python >=3.13,<3.14.0a0 3325 + - python_abi 3.13.* *_cp313 3326 + - yaml >=0.2.5,<0.3.0a0 3327 + license: MIT 3328 + license_family: MIT 3329 + size: 192051 3330 + timestamp: 1770223971430 3282 3331 - conda: https://conda.anaconda.org/conda-forge/osx-64/pyyaml-6.0.3-py314h10d0514_1.conda 3283 3332 sha256: aef010899d642b24de6ccda3bc49ef008f8fddf7bad15ebce9bdebeae19a4599 3284 3333 md5: ebd224b733573c50d2bfbeacb5449417 ··· 3291 3340 license_family: MIT 3292 3341 size: 191947 3293 3342 timestamp: 1770226344240 3343 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py313h65a2061_1.conda 3344 + sha256: 950725516f67c9691d81bb8dde8419581c5332c5da3da10c9ba8cbb1698b825d 3345 + md5: 5d0c8b92128c93027632ca8f8dc1190f 3346 + depends: 3347 + - __osx >=11.0 3348 + - python >=3.13,<3.14.0a0 3349 + - python >=3.13,<3.14.0a0 *_cp313 3350 + - python_abi 3.13.* *_cp313 3351 + - yaml >=0.2.5,<0.3.0a0 3352 + license: MIT 3353 + license_family: MIT 3354 + size: 188763 3355 + timestamp: 1770224094408 3294 3356 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py314h6e9b3f0_1.conda 3295 3357 sha256: 95f385f9606e30137cf0b5295f63855fd22223a4cf024d306cf9098ea1c4a252 3296 3358 md5: dcf51e564317816cb8d546891019b3ab ··· 3304 3366 license_family: MIT 3305 3367 size: 189475 3306 3368 timestamp: 1770223788648 3369 + - conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.3-py313hd650c13_1.conda 3370 + sha256: dfaed50de8ee72a51096163b87631921688851001e38c78a841eba1ae8b35889 3371 + md5: c1bdb8dd255c79fb9c428ad25cc6ee54 3372 + depends: 3373 + - python >=3.13,<3.14.0a0 3374 + - python_abi 3.13.* *_cp313 3375 + - ucrt >=10.0.20348.0 3376 + - vc >=14.3,<15 3377 + - vc14_runtime >=14.44.35208 3378 + - yaml >=0.2.5,<0.3.0a0 3379 + license: MIT 3380 + license_family: MIT 3381 + size: 180992 3382 + timestamp: 1770223457761 3307 3383 - conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.3-py314h2359020_1.conda 3308 3384 sha256: a2aff34027aa810ff36a190b75002d2ff6f9fbef71ec66e567616ac3a679d997 3309 3385 md5: 0cd9b88826d0f8db142071eb830bce56
+1
pixi.toml
··· 13 13 typer = ">=0.12" 14 14 rich = ">=13" 15 15 questionary = ">=2" 16 + pyyaml = ">=6" 16 17 17 18 [feature.test.dependencies] 18 19 pytest = "*"
+1 -1
pixi_skills/selector.py
··· 54 54 style=CUSTOM_STYLE, 55 55 qmark="◆", 56 56 pointer=">", 57 - instruction="(↑↓ move, space select, a toggle all, enter confirm)", 57 + instruction="(space select, enter confirm, ↑↓ move, a toggle all)", 58 58 ).ask() 59 59 60 60 return selected
+10 -21
pixi_skills/skill.py
··· 5 5 from enum import StrEnum 6 6 from pathlib import Path 7 7 8 + import yaml 9 + 8 10 9 11 class Scope(StrEnum): 10 12 """Scope of a skill - local or global. ··· 81 83 82 84 frontmatter = content[3 : 3 + end_match.start()] 83 85 84 - # Simple YAML parsing for name and description 85 - name = None 86 - description = None 86 + data = yaml.safe_load(frontmatter) 87 + if not isinstance(data, dict): 88 + raise ValueError(f"Invalid YAML frontmatter in {skill_md}") 87 89 88 - for line in frontmatter.split("\n"): 89 - line = line.strip() 90 - if line.startswith("name:"): 91 - name = line[5:].strip().strip("\"'") 92 - elif line.startswith("description:"): 93 - # Handle multiline or quoted descriptions 94 - desc_value = line[12:].strip() 95 - if desc_value.startswith('"'): 96 - # Quoted description 97 - description = desc_value.strip('"') 98 - elif desc_value.startswith("'"): 99 - description = desc_value.strip("'") 100 - elif desc_value.startswith("|") or desc_value.startswith(">"): 101 - # Multiline - for now just use the directory name 102 - description = "" 103 - else: 104 - description = desc_value 90 + name = data.get("name") 91 + if name is not None: 92 + name = str(name) 105 93 94 + description = data.get("description") 106 95 if description is None: 107 96 raise ValueError(f"Missing 'description' in SKILL.md frontmatter: {skill_md}") 108 97 109 - return name, description 98 + return name, str(description) 110 99 111 100 112 101 def discover_local_skills(env: str) -> list[Skill]:
+1 -1
pyproject.toml
··· 14 14 ] 15 15 requires-python = ">=3.13" 16 16 readme = "README.md" 17 - dependencies = ["typer>=0.12", "rich>=13", "questionary>=2"] 17 + dependencies = ["typer>=0.12", "rich>=13", "questionary>=2", "pyyaml >=6"] 18 18 19 19 [project.urls] 20 20 repository = "https://github.com/pavelzw/pixi-skills"
+8 -2
tests/test_skill.py
··· 67 67 md = tmp_path / "SKILL.md" 68 68 md.write_text("---\ndescription: |\n line1\n line2\n---\nBody\n") 69 69 name, desc = parse_skill_md(md) 70 - assert desc == "" 70 + assert desc == "line1\nline2" 71 71 72 72 def test_multiline_description_folded(self, tmp_path: Path) -> None: 73 73 md = tmp_path / "SKILL.md" 74 74 md.write_text("---\ndescription: >\n line1\n line2\n---\nBody\n") 75 75 name, desc = parse_skill_md(md) 76 - assert desc == "" 76 + assert desc == "line1 line2" 77 + 78 + def test_multiline_description_folded_strip(self, tmp_path: Path) -> None: 79 + md = tmp_path / "SKILL.md" 80 + md.write_text("---\ndescription: >-\n line1\n line2\n---\nBody\n") 81 + name, desc = parse_skill_md(md) 82 + assert desc == "line1 line2" 77 83 78 84 def test_missing_frontmatter(self, tmp_path: Path) -> None: 79 85 md = tmp_path / "SKILL.md"