mirror of
https://github.com/penpot/penpot-mcp.git
synced 2026-04-25 11:18:37 +00:00
Add API docs processing script (conversion from HTML to markdown)
This commit is contained in:
parent
5ab14ffb9e
commit
068817709e
2
prepare-api-docs/.gitattributes
vendored
Normal file
2
prepare-api-docs/.gitattributes
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
# SCM syntax highlighting
|
||||
pixi.lock linguist-language=YAML linguist-generated=true
|
||||
4
prepare-api-docs/.gitignore
vendored
Normal file
4
prepare-api-docs/.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
|
||||
# pixi environments
|
||||
.pixi
|
||||
*.egg-info
|
||||
536
prepare-api-docs/pixi.lock
generated
Normal file
536
prepare-api-docs/pixi.lock
generated
Normal file
@ -0,0 +1,536 @@
|
||||
version: 6
|
||||
environments:
|
||||
default:
|
||||
channels:
|
||||
- url: https://conda.anaconda.org/conda-forge/
|
||||
indexes:
|
||||
- https://pypi.org/simple
|
||||
packages:
|
||||
win-64:
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.13.5-pyha770c72_0.conda
|
||||
- conda: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.1.0-py311h3e6a449_4.conda
|
||||
- conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_8.conda
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.8.3-h4c7d964_0.conda
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.8.3-pyhd8ed1ab_0.conda
|
||||
- conda: https://conda.anaconda.org/conda-forge/win-64/cffi-2.0.0-py311h3485c13_0.conda
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.3-pyhd8ed1ab_0.conda
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda
|
||||
- conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.1-hac47afa_0.conda
|
||||
- conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.6-h537db12_1.conda
|
||||
- conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.1-h2466b09_2.conda
|
||||
- conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.50.4-hf5d6505_0.conda
|
||||
- conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/markdownify-1.1.0-pyhd8ed1ab_1.conda
|
||||
- conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.5.3-h725018a_1.conda
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/pixi-pycharm-0.0.9-win_hba80fca_0.conda
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda
|
||||
- conda: https://conda.anaconda.org/conda-forge/win-64/python-3.11.13-h3f84c4b_0_cpython.conda
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.11-8_cp311.conda
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhd8ed1ab_0.conda
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8-pyhd8ed1ab_0.conda
|
||||
- conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h2c6b04d_2.conda
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda
|
||||
- conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda
|
||||
- conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h41ae7f8_31.conda
|
||||
- conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_31.conda
|
||||
- conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_31.conda
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_8.conda
|
||||
- conda: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.25.0-py311hf893f09_0.conda
|
||||
- conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-hbeecb71_2.conda
|
||||
- pypi: https://files.pythonhosted.org/packages/ad/d5/62a0e693230bace8e9a767d6d187a4d9421a7c6ee4b48551f8ff7bd1629a/sensai_utils-1.5.0-py3-none-any.whl
|
||||
packages:
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.13.5-pyha770c72_0.conda
|
||||
sha256: d2124c0ea13527c7f54582269b3ae19541141a3740d6d779e7aa95aa82eaf561
|
||||
md5: de0fd9702fd4c1186e930b8c35af6b6b
|
||||
depends:
|
||||
- python >=3.10
|
||||
- soupsieve >=1.2
|
||||
- typing-extensions
|
||||
license: MIT
|
||||
license_family: MIT
|
||||
purls:
|
||||
- pkg:pypi/beautifulsoup4?source=compressed-mapping
|
||||
size: 88278
|
||||
timestamp: 1756094375546
|
||||
- conda: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.1.0-py311h3e6a449_4.conda
|
||||
sha256: d524edc172239fec70ad946e3b2fa1b9d7eea145ad80e9e66da25a4d815770ea
|
||||
md5: 21d3a7fa95d27938158009cd08e461f2
|
||||
depends:
|
||||
- python >=3.11,<3.12.0a0
|
||||
- python_abi 3.11.* *_cp311
|
||||
- ucrt >=10.0.20348.0
|
||||
- vc >=14.3,<15
|
||||
- vc14_runtime >=14.44.35208
|
||||
constrains:
|
||||
- libbrotlicommon 1.1.0 hfd05255_4
|
||||
license: MIT
|
||||
license_family: MIT
|
||||
purls:
|
||||
- pkg:pypi/brotli?source=hash-mapping
|
||||
size: 323289
|
||||
timestamp: 1756600106141
|
||||
- conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_8.conda
|
||||
sha256: d882712855624641f48aa9dc3f5feea2ed6b4e6004585d3616386a18186fe692
|
||||
md5: 1077e9333c41ff0be8edd1a5ec0ddace
|
||||
depends:
|
||||
- ucrt >=10.0.20348.0
|
||||
- vc >=14.3,<15
|
||||
- vc14_runtime >=14.44.35208
|
||||
license: bzip2-1.0.6
|
||||
license_family: BSD
|
||||
purls: []
|
||||
size: 55977
|
||||
timestamp: 1757437738856
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.8.3-h4c7d964_0.conda
|
||||
sha256: 3b82f62baad3fd33827b01b0426e8203a2786c8f452f633740868296bcbe8485
|
||||
md5: c9e0c0f82f6e63323827db462b40ede8
|
||||
depends:
|
||||
- __win
|
||||
license: ISC
|
||||
purls: []
|
||||
size: 154489
|
||||
timestamp: 1754210967212
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.8.3-pyhd8ed1ab_0.conda
|
||||
sha256: a1ad5b0a2a242f439608f22a538d2175cac4444b7b3f4e2b8c090ac337aaea40
|
||||
md5: 11f59985f49df4620890f3e746ed7102
|
||||
depends:
|
||||
- python >=3.9
|
||||
license: ISC
|
||||
purls:
|
||||
- pkg:pypi/certifi?source=compressed-mapping
|
||||
size: 158692
|
||||
timestamp: 1754231530168
|
||||
- conda: https://conda.anaconda.org/conda-forge/win-64/cffi-2.0.0-py311h3485c13_0.conda
|
||||
sha256: 12f5d72b95dbd417367895a92c35922b24bb016d1497f24f3a243224ec6cb81b
|
||||
md5: 573fd072e80c1a334e19a1f95024d94d
|
||||
depends:
|
||||
- pycparser
|
||||
- python >=3.11,<3.12.0a0
|
||||
- python_abi 3.11.* *_cp311
|
||||
- ucrt >=10.0.20348.0
|
||||
- vc >=14.3,<15
|
||||
- vc14_runtime >=14.44.35208
|
||||
license: MIT
|
||||
license_family: MIT
|
||||
purls:
|
||||
- pkg:pypi/cffi?source=compressed-mapping
|
||||
size: 298353
|
||||
timestamp: 1758716437777
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.3-pyhd8ed1ab_0.conda
|
||||
sha256: 838d5a011f0e7422be6427becba3de743c78f3874ad2743c341accbba9bb2624
|
||||
md5: 7e7d5ef1b9ed630e4a1c358d6bc62284
|
||||
depends:
|
||||
- python >=3.9
|
||||
license: MIT
|
||||
license_family: MIT
|
||||
purls:
|
||||
- pkg:pypi/charset-normalizer?source=hash-mapping
|
||||
size: 51033
|
||||
timestamp: 1754767444665
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda
|
||||
sha256: 84c64443368f84b600bfecc529a1194a3b14c3656ee2e832d15a20e0329b6da3
|
||||
md5: 164fc43f0b53b6e3a7bc7dce5e4f1dc9
|
||||
depends:
|
||||
- python >=3.10
|
||||
- hyperframe >=6.1,<7
|
||||
- hpack >=4.1,<5
|
||||
- python
|
||||
license: MIT
|
||||
license_family: MIT
|
||||
purls:
|
||||
- pkg:pypi/h2?source=compressed-mapping
|
||||
size: 95967
|
||||
timestamp: 1756364871835
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda
|
||||
sha256: 6ad78a180576c706aabeb5b4c8ceb97c0cb25f1e112d76495bff23e3779948ba
|
||||
md5: 0a802cb9888dd14eeefc611f05c40b6e
|
||||
depends:
|
||||
- python >=3.9
|
||||
license: MIT
|
||||
license_family: MIT
|
||||
purls:
|
||||
- pkg:pypi/hpack?source=hash-mapping
|
||||
size: 30731
|
||||
timestamp: 1737618390337
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda
|
||||
sha256: 77af6f5fe8b62ca07d09ac60127a30d9069fdc3c68d6b256754d0ffb1f7779f8
|
||||
md5: 8e6923fc12f1fe8f8c4e5c9f343256ac
|
||||
depends:
|
||||
- python >=3.9
|
||||
license: MIT
|
||||
license_family: MIT
|
||||
purls:
|
||||
- pkg:pypi/hyperframe?source=hash-mapping
|
||||
size: 17397
|
||||
timestamp: 1737618427549
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda
|
||||
sha256: d7a472c9fd479e2e8dcb83fb8d433fce971ea369d704ece380e876f9c3494e87
|
||||
md5: 39a4f67be3286c86d696df570b1201b7
|
||||
depends:
|
||||
- python >=3.9
|
||||
license: BSD-3-Clause
|
||||
license_family: BSD
|
||||
purls:
|
||||
- pkg:pypi/idna?source=hash-mapping
|
||||
size: 49765
|
||||
timestamp: 1733211921194
|
||||
- conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.1-hac47afa_0.conda
|
||||
sha256: 8432ca842bdf8073ccecf016ccc9140c41c7114dc4ec77ca754551c01f780845
|
||||
md5: 3608ffde260281fa641e70d6e34b1b96
|
||||
depends:
|
||||
- ucrt >=10.0.20348.0
|
||||
- vc >=14.3,<15
|
||||
- vc14_runtime >=14.44.35208
|
||||
constrains:
|
||||
- expat 2.7.1.*
|
||||
license: MIT
|
||||
license_family: MIT
|
||||
purls: []
|
||||
size: 141322
|
||||
timestamp: 1752719767870
|
||||
- conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.6-h537db12_1.conda
|
||||
sha256: d3b0b8812eab553d3464bbd68204f007f1ebadf96ce30eb0cbc5159f72e353f5
|
||||
md5: 85d8fa5e55ed8f93f874b3b23ed54ec6
|
||||
depends:
|
||||
- ucrt >=10.0.20348.0
|
||||
- vc >=14.2,<15
|
||||
- vc14_runtime >=14.29.30139
|
||||
license: MIT
|
||||
license_family: MIT
|
||||
purls: []
|
||||
size: 44978
|
||||
timestamp: 1743435053850
|
||||
- conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.1-h2466b09_2.conda
|
||||
sha256: 55764956eb9179b98de7cc0e55696f2eff8f7b83fc3ebff5e696ca358bca28cc
|
||||
md5: c15148b2e18da456f5108ccb5e411446
|
||||
depends:
|
||||
- ucrt >=10.0.20348.0
|
||||
- vc >=14.2,<15
|
||||
- vc14_runtime >=14.29.30139
|
||||
constrains:
|
||||
- xz 5.8.1.*
|
||||
license: 0BSD
|
||||
purls: []
|
||||
size: 104935
|
||||
timestamp: 1749230611612
|
||||
- conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.50.4-hf5d6505_0.conda
|
||||
sha256: 5dc4f07b2d6270ac0c874caec53c6984caaaa84bc0d3eb593b0edf3dc8492efa
|
||||
md5: ccb20d946040f86f0c05b644d5eadeca
|
||||
depends:
|
||||
- ucrt >=10.0.20348.0
|
||||
- vc >=14.3,<15
|
||||
- vc14_runtime >=14.44.35208
|
||||
license: blessing
|
||||
purls: []
|
||||
size: 1288499
|
||||
timestamp: 1753948889360
|
||||
- conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda
|
||||
sha256: ba945c6493449bed0e6e29883c4943817f7c79cbff52b83360f7b341277c6402
|
||||
md5: 41fbfac52c601159df6c01f875de31b9
|
||||
depends:
|
||||
- ucrt >=10.0.20348.0
|
||||
- vc >=14.2,<15
|
||||
- vc14_runtime >=14.29.30139
|
||||
constrains:
|
||||
- zlib 1.3.1 *_2
|
||||
license: Zlib
|
||||
license_family: Other
|
||||
purls: []
|
||||
size: 55476
|
||||
timestamp: 1727963768015
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/markdownify-1.1.0-pyhd8ed1ab_1.conda
|
||||
sha256: 127f040a4ec203d0e9af708600113fcb7641948f0f0f790c6906738397efa947
|
||||
md5: 4792499afa7a0fdfcff1533cab5564b3
|
||||
depends:
|
||||
- beautifulsoup4 >=4.9,<5
|
||||
- python >=3.8
|
||||
- six >=1.15,<2
|
||||
license: MIT
|
||||
license_family: MIT
|
||||
purls:
|
||||
- pkg:pypi/markdownify?source=hash-mapping
|
||||
size: 19359
|
||||
timestamp: 1756304996346
|
||||
- conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.5.3-h725018a_1.conda
|
||||
sha256: 72dc204b0d59a7262bc77ca0e86cba11cbc6706cb9b4d6656fe7fab9593347c9
|
||||
md5: c84884e2c1f899de9a895a1f0b7c9cd8
|
||||
depends:
|
||||
- ca-certificates
|
||||
- ucrt >=10.0.20348.0
|
||||
- vc >=14.3,<15
|
||||
- vc14_runtime >=14.44.35208
|
||||
license: Apache-2.0
|
||||
license_family: Apache
|
||||
purls: []
|
||||
size: 9276051
|
||||
timestamp: 1758599639304
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/pixi-pycharm-0.0.9-win_hba80fca_0.conda
|
||||
sha256: 22c6fedb771249e8b9723a916a3dc558b74681d3d8c2f118667cba81851f2002
|
||||
md5: de239ce0ba6c1b8d4bdd791650d8067c
|
||||
depends:
|
||||
- __win
|
||||
- python >=3.8
|
||||
license: BSD-3-Clause
|
||||
purls: []
|
||||
size: 6687
|
||||
timestamp: 1758810287418
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda
|
||||
sha256: 79db7928d13fab2d892592223d7570f5061c192f27b9febd1a418427b719acc6
|
||||
md5: 12c566707c80111f9799308d9e265aef
|
||||
depends:
|
||||
- python >=3.9
|
||||
- python
|
||||
license: BSD-3-Clause
|
||||
license_family: BSD
|
||||
purls:
|
||||
- pkg:pypi/pycparser?source=hash-mapping
|
||||
size: 110100
|
||||
timestamp: 1733195786147
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda
|
||||
sha256: d016e04b0e12063fbee4a2d5fbb9b39a8d191b5a0042f0b8459188aedeabb0ca
|
||||
md5: e2fd202833c4a981ce8a65974fe4abd1
|
||||
depends:
|
||||
- __win
|
||||
- python >=3.9
|
||||
- win_inet_pton
|
||||
license: BSD-3-Clause
|
||||
license_family: BSD
|
||||
purls:
|
||||
- pkg:pypi/pysocks?source=hash-mapping
|
||||
size: 21784
|
||||
timestamp: 1733217448189
|
||||
- conda: https://conda.anaconda.org/conda-forge/win-64/python-3.11.13-h3f84c4b_0_cpython.conda
|
||||
sha256: 723dbca1384f30bd2070f77dd83eefd0e8d7e4dda96ac3332fbf8fe5573a8abb
|
||||
md5: bedbb6f7bb654839719cd528f9b298ad
|
||||
depends:
|
||||
- bzip2 >=1.0.8,<2.0a0
|
||||
- libexpat >=2.7.0,<3.0a0
|
||||
- libffi >=3.4.6,<3.5.0a0
|
||||
- liblzma >=5.8.1,<6.0a0
|
||||
- libsqlite >=3.50.0,<4.0a0
|
||||
- libzlib >=1.3.1,<2.0a0
|
||||
- openssl >=3.5.0,<4.0a0
|
||||
- tk >=8.6.13,<8.7.0a0
|
||||
- tzdata
|
||||
- ucrt >=10.0.20348.0
|
||||
- vc >=14.2,<15
|
||||
- vc14_runtime >=14.29.30139
|
||||
constrains:
|
||||
- python_abi 3.11.* *_cp311
|
||||
license: Python-2.0
|
||||
purls: []
|
||||
size: 18242669
|
||||
timestamp: 1749048351218
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.11-8_cp311.conda
|
||||
build_number: 8
|
||||
sha256: fddf123692aa4b1fc48f0471e346400d9852d96eeed77dbfdd746fa50a8ff894
|
||||
md5: 8fcb6b0e2161850556231336dae58358
|
||||
constrains:
|
||||
- python 3.11.* *_cpython
|
||||
license: BSD-3-Clause
|
||||
license_family: BSD
|
||||
purls: []
|
||||
size: 7003
|
||||
timestamp: 1752805919375
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhd8ed1ab_0.conda
|
||||
sha256: 8dc54e94721e9ab545d7234aa5192b74102263d3e704e6d0c8aa7008f2da2a7b
|
||||
md5: db0c6b99149880c8ba515cf4abe93ee4
|
||||
depends:
|
||||
- certifi >=2017.4.17
|
||||
- charset-normalizer >=2,<4
|
||||
- idna >=2.5,<4
|
||||
- python >=3.9
|
||||
- urllib3 >=1.21.1,<3
|
||||
constrains:
|
||||
- chardet >=3.0.2,<6
|
||||
license: Apache-2.0
|
||||
license_family: APACHE
|
||||
purls:
|
||||
- pkg:pypi/requests?source=hash-mapping
|
||||
size: 59263
|
||||
timestamp: 1755614348400
|
||||
- pypi: https://files.pythonhosted.org/packages/ad/d5/62a0e693230bace8e9a767d6d187a4d9421a7c6ee4b48551f8ff7bd1629a/sensai_utils-1.5.0-py3-none-any.whl
|
||||
name: sensai-utils
|
||||
version: 1.5.0
|
||||
sha256: c23c51d23d353e7a9b77c70aa8ba7f2d0a8fe4e67ee5bc1ef41c69dba5e4befb
|
||||
requires_dist:
|
||||
- typing-extensions>=4.6
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda
|
||||
sha256: 458227f759d5e3fcec5d9b7acce54e10c9e1f4f4b7ec978f3bfd54ce4ee9853d
|
||||
md5: 3339e3b65d58accf4ca4fb8748ab16b3
|
||||
depends:
|
||||
- python >=3.9
|
||||
- python
|
||||
license: MIT
|
||||
license_family: MIT
|
||||
purls:
|
||||
- pkg:pypi/six?source=hash-mapping
|
||||
size: 18455
|
||||
timestamp: 1753199211006
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8-pyhd8ed1ab_0.conda
|
||||
sha256: c978576cf9366ba576349b93be1cfd9311c00537622a2f9e14ba2b90c97cae9c
|
||||
md5: 18c019ccf43769d211f2cf78e9ad46c2
|
||||
depends:
|
||||
- python >=3.10
|
||||
license: MIT
|
||||
license_family: MIT
|
||||
purls:
|
||||
- pkg:pypi/soupsieve?source=hash-mapping
|
||||
size: 37803
|
||||
timestamp: 1756330614547
|
||||
- conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h2c6b04d_2.conda
|
||||
sha256: e3614b0eb4abcc70d98eae159db59d9b4059ed743ef402081151a948dce95896
|
||||
md5: ebd0e761de9aa879a51d22cc721bd095
|
||||
depends:
|
||||
- ucrt >=10.0.20348.0
|
||||
- vc >=14.2,<15
|
||||
- vc14_runtime >=14.29.30139
|
||||
license: TCL
|
||||
license_family: BSD
|
||||
purls: []
|
||||
size: 3466348
|
||||
timestamp: 1748388121356
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda
|
||||
sha256: 7c2df5721c742c2a47b2c8f960e718c930031663ac1174da67c1ed5999f7938c
|
||||
md5: edd329d7d3a4ab45dcf905899a7a6115
|
||||
depends:
|
||||
- typing_extensions ==4.15.0 pyhcf101f3_0
|
||||
license: PSF-2.0
|
||||
license_family: PSF
|
||||
purls: []
|
||||
size: 91383
|
||||
timestamp: 1756220668932
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda
|
||||
sha256: 032271135bca55aeb156cee361c81350c6f3fb203f57d024d7e5a1fc9ef18731
|
||||
md5: 0caa1af407ecff61170c9437a808404d
|
||||
depends:
|
||||
- python >=3.10
|
||||
- python
|
||||
license: PSF-2.0
|
||||
license_family: PSF
|
||||
purls:
|
||||
- pkg:pypi/typing-extensions?source=hash-mapping
|
||||
size: 51692
|
||||
timestamp: 1756220668932
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda
|
||||
sha256: 5aaa366385d716557e365f0a4e9c3fca43ba196872abbbe3d56bb610d131e192
|
||||
md5: 4222072737ccff51314b5ece9c7d6f5a
|
||||
license: LicenseRef-Public-Domain
|
||||
purls: []
|
||||
size: 122968
|
||||
timestamp: 1742727099393
|
||||
- conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda
|
||||
sha256: 3005729dce6f3d3f5ec91dfc49fc75a0095f9cd23bab49efb899657297ac91a5
|
||||
md5: 71b24316859acd00bdb8b38f5e2ce328
|
||||
constrains:
|
||||
- vc14_runtime >=14.29.30037
|
||||
- vs2015_runtime >=14.29.30037
|
||||
license: LicenseRef-MicrosoftWindowsSDK10
|
||||
purls: []
|
||||
size: 694692
|
||||
timestamp: 1756385147981
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda
|
||||
sha256: 4fb9789154bd666ca74e428d973df81087a697dbb987775bc3198d2215f240f8
|
||||
md5: 436c165519e140cb08d246a4472a9d6a
|
||||
depends:
|
||||
- brotli-python >=1.0.9
|
||||
- h2 >=4,<5
|
||||
- pysocks >=1.5.6,<2.0,!=1.5.7
|
||||
- python >=3.9
|
||||
- zstandard >=0.18.0
|
||||
license: MIT
|
||||
license_family: MIT
|
||||
purls:
|
||||
- pkg:pypi/urllib3?source=hash-mapping
|
||||
size: 101735
|
||||
timestamp: 1750271478254
|
||||
- conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h41ae7f8_31.conda
|
||||
sha256: cb357591d069a1e6cb74199a8a43a7e3611f72a6caed9faa49dbb3d7a0a98e0b
|
||||
md5: 28f4ca1e0337d0f27afb8602663c5723
|
||||
depends:
|
||||
- vc14_runtime >=14.44.35208
|
||||
track_features:
|
||||
- vc14
|
||||
license: BSD-3-Clause
|
||||
license_family: BSD
|
||||
purls: []
|
||||
size: 18249
|
||||
timestamp: 1753739241465
|
||||
- conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_31.conda
|
||||
sha256: af4b4b354b87a9a8d05b8064ff1ea0b47083274f7c30b4eb96bc2312c9b5f08f
|
||||
md5: 603e41da40a765fd47995faa021da946
|
||||
depends:
|
||||
- ucrt >=10.0.20348.0
|
||||
- vcomp14 14.44.35208 h818238b_31
|
||||
constrains:
|
||||
- vs2015_runtime 14.44.35208.* *_31
|
||||
license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime
|
||||
license_family: Proprietary
|
||||
purls: []
|
||||
size: 682424
|
||||
timestamp: 1753739239305
|
||||
- conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_31.conda
|
||||
sha256: 67b317b64f47635415776718d25170a9a6f9a1218c0f5a6202bfd687e07b6ea4
|
||||
md5: a6b1d5c1fc3cb89f88f7179ee6a9afe3
|
||||
depends:
|
||||
- ucrt >=10.0.20348.0
|
||||
constrains:
|
||||
- vs2015_runtime 14.44.35208.* *_31
|
||||
license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime
|
||||
license_family: Proprietary
|
||||
purls: []
|
||||
size: 113963
|
||||
timestamp: 1753739198723
|
||||
- conda: https://conda.anaconda.org/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_8.conda
|
||||
sha256: 93807369ab91f230cf9e6e2a237eaa812492fe00face5b38068735858fba954f
|
||||
md5: 46e441ba871f524e2b067929da3051c2
|
||||
depends:
|
||||
- __win
|
||||
- python >=3.9
|
||||
license: LicenseRef-Public-Domain
|
||||
purls:
|
||||
- pkg:pypi/win-inet-pton?source=hash-mapping
|
||||
size: 9555
|
||||
timestamp: 1733130678956
|
||||
- conda: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.25.0-py311hf893f09_0.conda
|
||||
sha256: 3b66d3cb738a9993e8432d1a03402d207128166c4ef0c928e712958e51aff325
|
||||
md5: d26077d20b4bba54f4c718ed1313805f
|
||||
depends:
|
||||
- python
|
||||
- cffi >=1.11
|
||||
- zstd >=1.5.7,<1.5.8.0a0
|
||||
- vc >=14.3,<15
|
||||
- vc14_runtime >=14.44.35208
|
||||
- ucrt >=10.0.20348.0
|
||||
- vc >=14.3,<15
|
||||
- vc14_runtime >=14.44.35208
|
||||
- ucrt >=10.0.20348.0
|
||||
- zstd >=1.5.7,<1.6.0a0
|
||||
- python_abi 3.11.* *_cp311
|
||||
license: BSD-3-Clause
|
||||
license_family: BSD
|
||||
purls:
|
||||
- pkg:pypi/zstandard?source=hash-mapping
|
||||
size: 375866
|
||||
timestamp: 1757930134099
|
||||
- conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-hbeecb71_2.conda
|
||||
sha256: bc64864377d809b904e877a98d0584f43836c9f2ef27d3d2a1421fa6eae7ca04
|
||||
md5: 21f56217d6125fb30c3c3f10c786d751
|
||||
depends:
|
||||
- libzlib >=1.3.1,<2.0a0
|
||||
- ucrt >=10.0.20348.0
|
||||
- vc >=14.2,<15
|
||||
- vc14_runtime >=14.29.30139
|
||||
license: BSD-3-Clause
|
||||
license_family: BSD
|
||||
purls: []
|
||||
size: 354697
|
||||
timestamp: 1742433568506
|
||||
19
prepare-api-docs/pixi.toml
Normal file
19
prepare-api-docs/pixi.toml
Normal file
@ -0,0 +1,19 @@
|
||||
[project]
|
||||
authors = ["Dominik Jain <dominik.jain@outlook.com>"]
|
||||
channels = ["conda-forge"]
|
||||
description = "Add a short description here"
|
||||
name = "prepare-api-docs"
|
||||
platforms = ["win-64"]
|
||||
version = "0.1.0"
|
||||
|
||||
[tasks]
|
||||
|
||||
[dependencies]
|
||||
python = "3.11.*"
|
||||
pixi-pycharm = ">=0.0.9,<0.0.10"
|
||||
beautifulsoup4 = ">=4.13.5,<5"
|
||||
markdownify = ">=1.1.0,<2"
|
||||
requests = ">=2.32.5,<3"
|
||||
|
||||
[pypi-dependencies]
|
||||
sensai-utils = ">=1.5.0, <2"
|
||||
119
prepare-api-docs/prepare_api_docs.py
Normal file
119
prepare-api-docs/prepare_api_docs.py
Normal file
@ -0,0 +1,119 @@
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
import requests
|
||||
from bs4 import BeautifulSoup
|
||||
from markdownify import MarkdownConverter
|
||||
from sensai.util import logging
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class PenpotAPIContentMarkdownConverter(MarkdownConverter):
|
||||
"""
|
||||
Markdown converter for Penpot API docs, specifically for the .col-content element
|
||||
"""
|
||||
def process_tag(self, node, parent_tags=None):
|
||||
soup = BeautifulSoup(str(node), "html.parser")
|
||||
|
||||
# skip breadcrumbs
|
||||
if "class" in node.attrs and "tsd-breadcrumb" in node.attrs["class"]:
|
||||
return ""
|
||||
|
||||
# convert h3 and h4 to plain text
|
||||
if node.name in ["h5", "h4"]:
|
||||
return soup.get_text()
|
||||
|
||||
text = soup.get_text()
|
||||
|
||||
# convert tags for "Readonly" and "Optional" designations
|
||||
if node.name == "code" and "class" in node.attrs and "tsd-tag" in node.attrs["class"]:
|
||||
return ""
|
||||
|
||||
# skip buttons (e.g. "Copy")
|
||||
if node.name == "button":
|
||||
return ""
|
||||
|
||||
# skip links to definitions in <li> elements
|
||||
if node.name == "li" and text.startswith("Defined in"):
|
||||
return ""
|
||||
|
||||
# for links, just return the text
|
||||
if node.name == "a":
|
||||
return text
|
||||
|
||||
# skip inheritance information
|
||||
if node.name == "p" and text.startswith("Inherited from"):
|
||||
return ""
|
||||
|
||||
# remove index with links
|
||||
if "class" in node.attrs and "tsd-index-content" in node.attrs["class"]:
|
||||
return ""
|
||||
|
||||
# convert <pre> blocks to markdown code blocks
|
||||
if node.name == "pre":
|
||||
return f"\n```\n{text.strip()}\n```\n\n"
|
||||
|
||||
# convert tsd-signature elements to code blocks, converting <br> to newlines
|
||||
if "class" in node.attrs and "tsd-signature" in node.attrs["class"]:
|
||||
for br in soup.find_all("br"):
|
||||
br.replace_with("\n")
|
||||
return f"\n```\n{soup.get_text()}\n```\n\n"
|
||||
|
||||
# other cases: use the default processing
|
||||
return super().process_tag(node, parent_tags=parent_tags)
|
||||
|
||||
|
||||
class PenpotAPIDocsProcessor:
|
||||
def __init__(self):
|
||||
self.md_converter = PenpotAPIContentMarkdownConverter()
|
||||
self.base_url = "https://penpot-plugins-api-doc.pages.dev"
|
||||
self.pages = {}
|
||||
|
||||
def run(self, target_dir: str):
|
||||
os.makedirs(target_dir, exist_ok=True)
|
||||
|
||||
# find links
|
||||
modules_page = self._fetch("modules")
|
||||
soup = BeautifulSoup(modules_page, "html.parser")
|
||||
content = soup.find(attrs={"class": "col-content"})
|
||||
links = content.find_all("a", href=True)
|
||||
|
||||
# process each link, converting interface and type pages to markdown
|
||||
for link in links:
|
||||
href = link['href']
|
||||
if href.startswith("interfaces/") or href.startswith("types/"):
|
||||
page_name = href.split("/")[-1].replace(".html", "")
|
||||
log.info("Processing page: %s", page_name)
|
||||
page_md = self._process_page(href)
|
||||
|
||||
# save to md file
|
||||
md_path = os.path.abspath(os.path.join(target_dir, f"{page_name}.md"))
|
||||
log.info("Writing %s", md_path)
|
||||
with open(md_path, "w", encoding="utf-8") as f:
|
||||
f.write(page_md)
|
||||
|
||||
def _fetch(self, rel_url: str) -> str:
|
||||
response = requests.get(f"{self.base_url}/{rel_url}")
|
||||
if response.status_code != 200:
|
||||
raise Exception(f"Failed to retrieve page: {response.status_code}")
|
||||
html_content = response.text
|
||||
return html_content
|
||||
|
||||
def _process_page(self, rel_url: str):
|
||||
html_content = self._fetch(rel_url)
|
||||
soup = BeautifulSoup(html_content, "html.parser")
|
||||
|
||||
content = soup.find(attrs={"class": "col-content"})
|
||||
|
||||
markdown = self.md_converter.convert(str(content))
|
||||
return markdown
|
||||
|
||||
|
||||
def main():
|
||||
target_dir = Path(__file__).parent.parent / "mcp-server" / "data" / "api"
|
||||
PenpotAPIDocsProcessor().run(target_dir=str(target_dir))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
logging.run_main(main)
|
||||
Loading…
x
Reference in New Issue
Block a user