From b0edb15dd4745771967a76cd3bb37475d4af2e4c Mon Sep 17 00:00:00 2001 From: justdaksh Date: Wed, 20 Nov 2024 03:23:31 +0530 Subject: [PATCH 1/3] Changing from .md to html indexing in nuclia --- .github/workflows/nuclia_sync.yml | 37 ++-- docs/_static/nuclia_sync.json | 273 +++++++++++++++++++++++++++++- upload.py | 175 ++++++++++++++----- 3 files changed, 414 insertions(+), 71 deletions(-) diff --git a/.github/workflows/nuclia_sync.yml b/.github/workflows/nuclia_sync.yml index d2a2f5f7d..c2e49c7aa 100644 --- a/.github/workflows/nuclia_sync.yml +++ b/.github/workflows/nuclia_sync.yml @@ -1,22 +1,27 @@ name: Nuclia Sync -on: [push] +on: + push: + jobs: sync: runs-on: ubuntu-latest steps: - name: Check out code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - - name: Set up Python - uses: actions/setup-python@v4 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 with: - python-version: "3.10" + python-version: "3.12" + cache: 'pip' - name: Install requirements run: | - pip install -q -r requirements.txt + python -m pip install --upgrade pip + pip install -q -r requirements.txt -c constraints.txt + pip freeze - name: Run Nuclia Sync env: @@ -24,23 +29,3 @@ jobs: DEPLOY_NUCLIA_TOKEN: ${{secrets.DEPLOY_NUCLIA_TOKEN}} run: | python3 upload.py - - - name: Check for changes in nuclia_sync.json - id: check_changes - run: | - CHANGED_FILES=$(git diff --name-only ${{ github.event.before }} ${{ github.sha }}) - echo "Changed files: $CHANGED_FILES" - if echo "$CHANGED_FILES" | grep -q 'nuclia_sync.json'; then - echo "::set-output name=changed::true" - else - echo "::set-output name=changed::false" - fi - - - name: Commit changes - if: steps.check_changes.outputs.changed == 'true' - run: | - git config --global user.name github-actions - git config --global user.email github-actions@github.com - git add . - git commit -m "Nuclia Sync: Updated docs" - git push diff --git a/docs/_static/nuclia_sync.json b/docs/_static/nuclia_sync.json index 6a03509cf..e27e2e0f6 100644 --- a/docs/_static/nuclia_sync.json +++ b/docs/_static/nuclia_sync.json @@ -1 +1,272 @@ -{"docs": {"./docs/glossary.md": "ac82d407c63f43fc25ffff9d82ee5e9b", "./docs/index.md": "f2f1a67ccca3c66e8b33ec43f241a3ed", "./docs/plone-deployment/edit-project.md": "1d44a8ab05a0dc05deed0eb84466aa65", "./docs/plone-deployment/provision.md": "7f975fa16b866a16fd0f0c207d821960", "./docs/plone-deployment/plone-docker-images.md": "4d916aa83fb2c1ec5b3263d78d3b3b4d", "./docs/plone-deployment/deploy.md": "d1a2e0bbc52066066039598ea0206a21", "./docs/plone-deployment/setup.md": "2ddcb6cf42073e47ddecc26633d06edb", "./docs/plone-deployment/new-project.md": "b4a732d2aa0b37d853ae088332b741fd", "./docs/plone-deployment/index.md": "7a04bea1d5f87b2b9d83a43b19164389", "./docs/plone-deployment/plone-stack.md": "0fc06c46f4cba8786e6feef2f7d16a9a", "./docs/plone-deployment/intro.md": "c83cf1eba8549a018d89a866913e7324", "./docs/effective-volto/testing.md": "35844140ce905816244a40eca6481619", "./docs/effective-volto/architecture.md": "72d9e92bf956af7be087046a1b7f4147", "./docs/effective-volto/deployment.md": "4715c93e5f52286f4d95247300fbe516", "./docs/effective-volto/about_effective_volto.md": "fcb5d0d832f25bbbdc29d43af382ec01", "./docs/effective-volto/addons.md": "3c19f5218854ba905e7eac8234bc3a85", "./docs/effective-volto/getting-started.md": "e9a4fce1ec7c0137fe01a8ff17ef1035", "./docs/effective-volto/index.md": "892588a9c259434f434f2ca7bc8729f3", "./docs/effective-volto/backend.md": "739ae1469c3e4ee23aeb6a777d9edbbf", "./docs/effective-volto/development.md": "6df1650ff09f4e845d45bedaf924886f", "./docs/effective-volto/testing/acceptance.md": "2ddf1ad4051b688129bb00a79f6a86b7", "./docs/effective-volto/testing/storybook.md": "645be5af958f04324f4ecfb581ac9961", "./docs/effective-volto/testing/jest.md": "f3068c156d6308d130eb7308c689e583", "./docs/effective-volto/testing/unit.md": "515b58ca4e3f06c0e6e52146511a1061", "./docs/effective-volto/testing/addons.md": "dfac81046eebf034850b72f02e1576e0", "./docs/effective-volto/deployment/releaseit.md": "4e0204631b61e3bc212778c7e808977e", "./docs/effective-volto/deployment/seamlessmode.md": "98b9d635cc6e7739dd3a7f6fafb30a77", "./docs/effective-volto/deployment/docker.md": "2668d234ba8a9361306b1f31dbc3e27a", "./docs/effective-volto/deployment/simple.md": "c6825dfad7297bf4467590e67e8f7852", "./docs/effective-volto/getting-started/roadmap.md": "3ba32464d37d24a9f7c0c39d3a4fb779", "./docs/effective-volto/getting-started/add-on.md": "04d1a848be62452f631ed4f0c5c268be", "./docs/effective-volto/getting-started/project.md": "080e76726917a221b713ea732a45380b", "./docs/effective-volto/addons/block-extensions.md": "84bb102c7d918e17fc1fa71917614ee4", "./docs/effective-volto/addons/asyncconnect.md": "39cef99b3c54c7032fffb6ae436f2186", "./docs/effective-volto/addons/i18n.md": "35211a71c5a32cb21402d0fbf421dd41", "./docs/effective-volto/addons/block-styling.md": "047f9948faeb9c7dbea14f2924c82f57", "./docs/effective-volto/addons/use-repo-addon.md": "7267a7cf116401b031bead939a1816c6", "./docs/effective-volto/addons/dependencies.md": "84ab118df1cbdc826bae2e738c17713c", "./docs/effective-volto/addons/use-released-addon.md": "bfe030ca30225b11bc1d58449cc70abd", "./docs/effective-volto/addons/views.md": "0bfcebde02b0edcd6f2bace3ed0edbf5", "./docs/effective-volto/addons/bootstrap.md": "a722d9f1e3a10a82a045ba03548091b4", "./docs/effective-volto/addons/what-is-an-addon.md": "8ad0869cee75c4a84107cb0f726a7e86", "./docs/effective-volto/addons/semanticui.md": "54aa961e31d4b6bf79a2767b8a389f3c", "./docs/effective-volto/addons/theme.md": "f76c0b79240c36af6820d3839f484713", "./docs/effective-volto/addons/webpack.md": "586b62b86261ed466ac31d8081111848", "./docs/effective-volto/addons/how-an-add-on-works.md": "9c56ad21f35da90d0e7820a345511826", "./docs/effective-volto/addons/blockslayout.md": "952c29aa3051b6e4add7016e116c2525", "./docs/effective-volto/addons/blockdataform.md": "43924be023ff6dd3beacfa81db0d8381", "./docs/effective-volto/addons/customlistingtemplate.md": "9b9872e252688d72a7b06a8050b0c454", "./docs/effective-volto/addons/pipeline.md": "40c01d0a641f4aba53aec6c6002a3a86", "./docs/effective-volto/backend/express-middleware.md": "1467c1700caff650d768b0ec48e3632f", "./docs/effective-volto/backend/plone-restapi-endpoints.md": "d61a983c0b6a5ea019ec6650ba5c7492", "./docs/effective-volto/backend/writing-endpoint.md": "957a2c159e95ad6940c2b48db3f4339e", "./docs/effective-volto/backend/writing-content-expansion.md": "b239fa46edd16234c9a080de56861bef", "./docs/effective-volto/backend/block-field-as-searchableText.md": "28123d5b598f8dcc017fdebac1e42b27", "./docs/effective-volto/backend/block-linkintegrity.md": "c6f2093cc30323fbf802672056d02d6d", "./docs/effective-volto/backend/writing-block-transforms.md": "5b444a2add2aa76645191b4aa4abd85c", "./docs/effective-volto/backend/writing-serializer-deserializer.md": "ff6fe3f5c5ffc6d57fd9a339bd3f6683", "./docs/effective-volto/development/shortcuts.md": "3baab4e08ea6df5fb8fa479121316889", "./docs/effective-volto/development/criticalCSS.md": "f5f9e3f3b1baf28305c174ea1a63ac79", "./docs/effective-volto/development/husky-lint-staged.md": "af161a74d9ec4c841ad95832d7a87443", "./docs/effective-volto/development/vim.md": "c1d0c2602dbf0a94caf4328fae565c04", "./docs/effective-volto/development/i18n.md": "b92c83534bb0f427aa6923f6ae3276a8", "./docs/effective-volto/development/vscode.md": "0bc687a23c5c6cf0949c6632f711816b", "./docs/effective-volto/development/environmentvariables.md": "8e81556f3532f202cfbf1ae036746d28", "./docs/effective-volto/development/icons.md": "38fc9218fbbc4ca91f8b8db4861a717a", "./docs/effective-volto/development/lazyloading.md": "3badb3529229e0f52cc4e2fdeebd33e0", "./docs/effective-volto/development/component-registry.md": "54ab1fb3fc50c9b66b51f98e22a57b92", "./docs/effective-volto/development/debugging.md": "12ee478c6fd02f3413090a6435b76a3e", "./docs/effective-volto/development/setup.md": "b00fc778f7e6211706a028d43eebffbe", "./docs/effective-volto/development/linters.md": "a6a312307b0e97c9044dd8fc6c6aaddc", "./docs/effective-volto/development/bundle-analyzing.md": "3bb769560efee39bccd169a948e7353b", "./docs/effective-volto/architecture/webpack-loaders.md": "2de22206f0a3ebd00aeb1c4aee9429c5", "./docs/effective-volto/architecture/configuration.md": "7dd3f9242590cbdc63a23df899aee228", "./docs/effective-volto/architecture/bootstrap-volto.md": "4baa7d74c81c409d32c2133eb91c4864", "./docs/effective-volto/architecture/redux.md": "2c67f4a131644baa7eb080b9e5b294d8", "./docs/effective-volto/architecture/razzle.md": "a248e61fe7dfbc0e377a5a4d56496385", "./docs/effective-volto/architecture/blocks.md": "212fdd71531f289d564c30ac46416fcc", "./docs/effective-volto/architecture/anatomy.md": "353775bec0015dc0865dc41a05abe2c2", "./docs/effective-volto/architecture/CORS.md": "a1580a3f025ea523773e0762e33d4d86", "./docs/effective-volto/architecture/babel.md": "1979cb87b59cef21e3ad81ede9da0ecf", "./docs/effective-volto/architecture/webpack.md": "01f8899af44a1f0359ba41aa6c8469be", "./docs/effective-volto/architecture/multilingual.md": "29abd9dd3b71d63078969fe7738906b9", "./docs/effective-volto/architecture/client-ssr.md": "d8475f64cdc6ced0f543b861bde50c2c", "./docs/migrations/inplace.md": "276011eef09dffb22b40684daa2b6b19", "./docs/migrations/migrate-to-plone.md": "b4f384d36804f8a26227e12bf9e8a380", "./docs/migrations/exportimport.md": "f8abf533430cacf926d58d20b90110f8", "./docs/migrations/migrations.md": "743034c9f9a1b06a8f5e41a00c3e46a7", "./docs/migrations/volto.md": "4c6bd895c419c7c8cb913d26fb0ee498", "./docs/migrations/index.md": "9083d3b7fbe32c1f86e811b025f8b8ad", "./docs/contributing/authors.md": "2f11a756c8c1751cf89c2b95c617a524", "./docs/contributing/setup-build.md": "50b423b082ea013ab4cf63bd12452211", "./docs/contributing/index.md": "43a6848fc1a74dde31bfa730047c1293", "./docs/contributing/writing-docs-guide.md": "ad0f07c384d2ea7746a1bc3932586f2d", "./docs/testing/acceptance.md": "feeace111cdeb9a2004ac77257139fb7", "./docs/testing/continuous_integration.md": "2753422fad1fdb4c6a761e5072bf8cf6", "./docs/testing/testing_setup.md": "b2b384a8db0d25cac83d9faa45713b0a", "./docs/testing/start.md": "0d539e287d6553754729aedfe0297f75", "./docs/testing/summary.md": "6ba974a8c3773280cc3e181d6a6d9f69", "./docs/testing/testing_robot.md": "5d95e43cf997600392d3722d41a8d973", "./docs/testing/unittest.md": "dcf6089ffcccbf1ca910a68cecb1facd", "./docs/testing/intro_to_tests.md": "04b44d8c18dcb171ad010b4d615798a3", "./docs/testing/testing_view.md": "d4cfd7fdd6686ecdc6874a41dce65371", "./docs/testing/theory.md": "861ffc6eee3f5a5d3a85e2db4fdf76d0", "./docs/testing/index.md": "7aa4aed4fa957755c5e11e21bb6c3ad8", "./docs/testing/testing_dexterity.md": "540f9dd22ab78b5e662fab9ce69d19a9", "./docs/workflow/dynamic-roles.md": "57b92e35cbfa939d89f601fba40143a0", "./docs/workflow/placeful-workflow.md": "594adff13e97e0175c918f85a6bc4d48", "./docs/workflow/workflow-chains.md": "6749fe390fa1b0b448329ad23ed595e4", "./docs/workflow/local-roles.md": "0bd36013d7dbb84dccae563f83e03895", "./docs/workflow/workflow-variables.md": "51514bc22f1201a3168438f11c29079f", "./docs/workflow/introduction.md": "9f1ce35c92b5e440ba2a6560e0ef8b74", "./docs/workflow/roles-and-permissions.md": "ea6f4618f75ee840a09d58c971f57da7", "./docs/workflow/generic-setup-export-import.md": "348e5b73b8899d08db70bee91d8249e4", "./docs/workflow/index.md": "ffbf81f0522cbcec4da70761041d6962", "./docs/voltoaddons/05-objectwidget-block-edit.md": "97f7e466239f2c74f5317a4130a5855a", "./docs/voltoaddons/02-block-edit.md": "41a2d87ed69158f21e1cb981c39f3925", "./docs/voltoaddons/04-block-edit-options.md": "2c01e10996b98154b110bc924f37ae67", "./docs/voltoaddons/06-cell-renderer.md": "f403914bc90d8b71b0fb6a50077bdb30", "./docs/voltoaddons/01-addon-basics.md": "d17c6b0939992021bff3708dd40377d3", "./docs/voltoaddons/blocksrestapi.md": "a05ae8a09514581af343c2b18790f4d2", "./docs/voltoaddons/03-block-view.md": "c8cfc6feefae9b63d4337c5fc791cdf9", "./docs/voltoaddons/07-misc-addons.md": "bc9c2ca352f824f2ea8a1a3a8833f8da", "./docs/voltoaddons/index.md": "71321e5b11ccc486fa03fcb944c204bc", "./docs/voltoaddons/intro.md": "dc26ccd0e889219a7926f538047932e6", "./docs/voltoaddons/about/devenvironment.md": "a52f64a539e328d96a44b74fc5c9d9a5", "./docs/voltoaddons/about/jsbasics.md": "c12965ab8badc97102af97f613b847c7", "./docs/voltoaddons/about/index.md": "4dd5c25fb4e2483fdd4cd5d5c0af66e2", "./docs/theming/theme_barceloneta.md": "4ea839ba463540b09bf8ddfadb5ca17a", "./docs/theming/ttw_customizations.md": "ab1ee873621910ac27c39014e4000058", "./docs/theming/theme_scratch.md": "46c9c5f42e5e642d243b39d5fe83d863", "./docs/theming/diazo-notes.md": "95b51108b3c1478ef17292ba3f436d0f", "./docs/theming/index.md": "ab5d01df87af5cc817ba98eda046f4de", "./docs/theming/theme_diazo.md": "7a5e3f6dfc49d6897f463e526f6e3ec6", "./docs/theming/preparation.md": "9ad9575d54217243c11b9d09da4dbc77", "./docs/voltohandson/contenttypeview.md": "f15aa7214a37a7639696d3df82dbb468", "./docs/voltohandson/highlight.md": "1dc0d44f216a67e75f7c33c3ac8407d0", "./docs/voltohandson/contenttypesviews.md": "c5252e0a622bf41fae9ee3cc99adb991", "./docs/voltohandson/starttheming.md": "5f5fb7f49574db13b4532229751f5251", "./docs/voltohandson/quickstart.md": "e53ec781cf7eb9de92dad60db3ae0694", "./docs/voltohandson/blocksedit.md": "b0f3f10957c634a41caf4b77e3f23e91", "./docs/voltohandson/eventlistingtemplate.md": "11567d15de9940eeede088b49a44da53", "./docs/voltohandson/requirements.md": "fd336d75544872c59bbf870b301f3591", "./docs/voltohandson/blocksdownload.md": "7c39c826686962138e81228cbdc5374f", "./docs/voltohandson/breadcrumbs.md": "5d6b8c600c2d22410cc262fe5a22fd3b", "./docs/voltohandson/highlightsblock.md": "fc2a7c00ec7fd7277cf9c022b3eff6a9", "./docs/voltohandson/header.md": "9f859a158067d7587fcf87e1f5acee57", "./docs/voltohandson/introtoblocks.md": "8c424c30d2a0b626fa00da430d0a2b41", "./docs/voltohandson/index.md": "7f9911793073bad0449982f0c7d4f7f0", "./docs/voltohandson/intro.md": "4f5ea0ae0eb799c7f884c5c8728b379a", "./docs/voltohandson/introtovolto.md": "9c29881f166f336c6d1eae6b5f6bf12e", "./docs/voltohandson/configandcleanup.md": "b9e9d0ce72f5b7799b66a121ff14247b", "./docs/voltohandson/footer.md": "87487bf9e1c141cf1a74156331cf24bc", "./docs/teaching/during.md": "cd02b859831dea6236a91bfb08f701cf", "./docs/teaching/before.md": "93836de1ae408ca305b2bce1052c559d", "./docs/teaching/after.md": "a8eab431332ee473e9442a9b53f0ec48", "./docs/teaching/theory.md": "79117c89dd9a7f1a5c2cba19ba923698", "./docs/teaching/index.md": "a365bf34081a940f041ea4921b771045", "./docs/mastering-plone/dexterity_2_talk.md": "1fc5066a15a6a2d2ec5e3142a07ad4f8", "./docs/mastering-plone/upgrade_steps.md": "9fe20d545aa1fc85bec15a0e197b0dda", "./docs/mastering-plone/volto_frontpage.md": "22499531714bb100019641655dd6bce7", "./docs/mastering-plone/deployment_code.md": "1736cf02104ed7e039d341e54b474a72", "./docs/mastering-plone/add-ons.md": "c7bfba484d8b838592c757edd554bf19", "./docs/mastering-plone/configuring_customizing.md": "faf6db17d260109cf98314eea3f7ac8c", "./docs/mastering-plone/events.md": "3b9b1cc7befcf1f80fe02167242ea320", "./docs/mastering-plone/extending.md": "8f02caaa9e72db6a597733168f52aaba", "./docs/mastering-plone/volto_overrides.md": "192b249342349aa4c3b34a19522c0f9e", "./docs/mastering-plone/volto_addon.md": "26bc3b538158231bf3530fa35ace8de6", "./docs/mastering-plone/volto_testing.md": "15a16b7acc14687a29df31b6befbdf3b", "./docs/mastering-plone/dexterity_3.md": "af2a0edf4f45fc981b223213824519da", "./docs/mastering-plone/relations.md": "ebf4df445828039f376a25df4c08d4e5", "./docs/mastering-plone/todos_documentation_mastering_plone_6.md": "46b9d9ae4a54327d5c9d97ed89158415", "./docs/mastering-plone/features.md": "67faf311c170cf3f15eed023165b50cb", "./docs/mastering-plone/thirdparty_behaviors.md": "ec95b6a9733ed42a866fb9338dbdd952", "./docs/mastering-plone/custom_search.md": "eae02a4ec30ab667e3c72a13d49e9c77", "./docs/mastering-plone/user_generated_content.md": "5e72a122e88ea51ec865c6832a1c23c6", "./docs/mastering-plone/volto_talkview.md": "a3350724d45ee9a46ff41d92eb2dcfec", "./docs/mastering-plone/volto_development.md": "fb33c404a22bfce3ba1f9bcecc0906a7", "./docs/mastering-plone/about_mastering.md": "f4841c767143d52343af9db47a9e45a3", "./docs/mastering-plone/what_is_plone.md": "8262738d4969226f93b3aea97942b8f5", "./docs/mastering-plone/volto_components_sponsors.md": "51a9553c737fe40b25e6294cd5a468b8", "./docs/mastering-plone/code.md": "bb95da54d3e014a87a0251243cf9f10d", "./docs/mastering-plone/dexterity.md": "65a8b1c7e8357981b8ce73a1103d94e1", "./docs/mastering-plone/installation.md": "d82a8615f66b54cc211808f540a21ed1", "./docs/mastering-plone/dexterity_reference.md": "3967a24d152d74a173b21706458e9fab", "./docs/mastering-plone/volto_custom_addon2.md": "76d205f727b8d45d9519bec995906f41", "./docs/mastering-plone/behaviors_1.md": "eae048f9de778b303f5678c6838d91f8", "./docs/mastering-plone/volto_custom_addon.md": "26075ce01695c794333bd662bfd62f8b", "./docs/mastering-plone/index.md": "903d8520c71bb29078094a21d0134c65", "./docs/mastering-plone/case.md": "ec932ec5d0c73752951eb129101480f4", "./docs/mastering-plone/intro.md": "5047099b23595a68f33c5507da12df34", "./docs/mastering-plone/trainer.md": "f85196997cdef4e195735a08cc932555", "./docs/mastering-plone/api.md": "11b334d91891c38bb27173ddbd782c7a", "./docs/mastering-plone/timing.md": "c77d9ee424b5935e136d1df2047d5169", "./docs/mastering-plone/registry.md": "918a3754f7b7610cbcff6d44718a9eff", "./docs/mastering-plone/voting-story/volto_actions.md": "af90cea46e7ca78d578a9388f5e4ee19", "./docs/mastering-plone/voting-story/endpoints.md": "ae9e03c5d73b072803b487595077ba02", "./docs/mastering-plone/voting-story/behaviors_2.md": "028637fae520f17f318fcd9e2a4ad5f9", "./docs/mastering-plone/voting-story/index.md": "3a94515a4542cff55055eac60793e862", "./docs/mastering-plone/voting-story/permissions.md": "e59f55cffa917a42cff2b85ad38b8cf1", "./docs/mastering-plone-5/embed.md": "5b702b09965edef4ebb9eb4beda4367a", "./docs/mastering-plone-5/resources.md": "06a20f9c3a0c0de5ba63b44dd4bd06da", "./docs/mastering-plone-5/buildout_1.md": "4a36a2e0902aed59b5beea0552988336", "./docs/mastering-plone-5/testing.md": "bd3b098ad0afbafd26b3b4a84e3aa14d", "./docs/mastering-plone-5/views_2.md": "b8280695fbfe0d95530516af7e79587e", "./docs/mastering-plone-5/deployment_code.md": "62fcb4499c40063c4015abe1671cab4e", "./docs/mastering-plone-5/export_code.md": "f7343012d0601587133d49e3b3a460dd", "./docs/mastering-plone-5/zpt_2.md": "b69e1b08ccfdc5eabfae4045ba443ef8", "./docs/mastering-plone-5/add-ons.md": "9f0e68fef36d340f83710f49aa310430", "./docs/mastering-plone-5/configuring_customizing.md": "830a2beae389b0cca25f6deb1d63a4c1", "./docs/mastering-plone-5/events.md": "0f5b190342f6217eb5ebd609c8d7b3b7", "./docs/mastering-plone-5/viewlets_2.md": "f9f725a687d33b75b2aca1f4d7c97188", "./docs/mastering-plone-5/extending.md": "8bdbdbd7e931352f8bd7362ecd0d9b98", "./docs/mastering-plone-5/plone5.md": "558fe6c1db92474bc4d3e63607421f7a", "./docs/mastering-plone-5/views_1.md": "ff54ca076352e63b9055f469cec59f79", "./docs/mastering-plone-5/theming.md": "d17600d391988356806f595affd783bf", "./docs/mastering-plone-5/eggs1.md": "77a016f4bbdea4786fdf3f0d8c26060d", "./docs/mastering-plone-5/dexterity_3.md": "2368f99fc2a811fe07e425b25b5a07a0", "./docs/mastering-plone-5/relations.md": "a6fcfc1bd7f1f5d49a1daddc1515e766", "./docs/mastering-plone-5/ide.md": "75c78c8c1eecce2f0e14965465cc2b23", "./docs/mastering-plone-5/restapi.md": "e538b0940a4a83a121515272e5560d7f", "./docs/mastering-plone-5/features.md": "5e33db59e7bda77408c6311e3ce7bed5", "./docs/mastering-plone-5/eggs2.md": "0ee5f606be4c780efcaf311af98308d3", "./docs/mastering-plone-5/todos_documentation_mastering_plone_5.md": "436a03be23273df6bde13161e3aff4fe", "./docs/mastering-plone-5/thirdparty_behaviors.md": "fb0c069f55d218fb32ebd6b15ee20caa", "./docs/mastering-plone-5/custom_search.md": "287a4263699dfc8b6baed19c4699789b", "./docs/mastering-plone-5/viewlets_1.md": "89bd8b6f88da27a5e2847c4837c018bf", "./docs/mastering-plone-5/user_generated_content.md": "5a3f72228c627990544fb000e6646824", "./docs/mastering-plone-5/behaviors_2.md": "9235327e1940f90361d8f4f1ad67ec00", "./docs/mastering-plone-5/about_mastering.md": "cf02fcc663e1fc5e925d5d9b25c0b1bd", "./docs/mastering-plone-5/what_is_plone.md": "d3daf0a5b0adb9a733774a180abd762f", "./docs/mastering-plone-5/dexterity_2.md": "cd645b77128c3fd838ad5014d6ff8a76", "./docs/mastering-plone-5/anatomy.md": "d60d7abe9d83d877f791a6bd4a083f0f", "./docs/mastering-plone-5/code.md": "8f613cd7c79053fae8f43d6b510f1ae1", "./docs/mastering-plone-5/dexterity.md": "e270428024a25370d354723d6fd003d4", "./docs/mastering-plone-5/reusable.md": "6c952f134d2f0a9fc8feb5e25182431a", "./docs/mastering-plone-5/installation.md": "bf135fb41e7141e387651d5e90f1c973", "./docs/mastering-plone-5/dexterity_reference.md": "7fbcd1c570bf2252ba75f502df29764c", "./docs/mastering-plone-5/future_of_plone.md": "fd5a784ae16ca73201f249a777d567f7", "./docs/mastering-plone-5/behaviors_1.md": "a0f126b4980c95d10dc3e72c0df94cb1", "./docs/mastering-plone-5/zpt.md": "043f5e6a791e2c3ce634697844cf0787", "./docs/mastering-plone-5/index.md": "92ca015f20111b12def0e12e5c7b54b9", "./docs/mastering-plone-5/case.md": "7dc2abd7581fafe4bc5c78bd310ef9ad", "./docs/mastering-plone-5/intro.md": "30fb84c0bae092603e3247994c963b4f", "./docs/mastering-plone-5/frontpage.md": "de415031acbe627a31f96d97980b100e", "./docs/mastering-plone-5/api.md": "a52bd88e26f1438bd7749e2a76eba053", "./docs/mastering-plone-5/timing.md": "64d7caadd10a9782d5ae676696232bf8", "./docs/mastering-plone-5/registry.md": "951f2b7d5ff7998b343c372e86b46b92", "./docs/mastering-plone-5/deployment_sites.md": "89c9f6f8c9a5461b5fcf9ee47eda312e", "./docs/mastering-plone-5/optional.md": "3a8ca8473ad25f1a4f537ff2cb4244dc", "./docs/mastering-plone-5/views_3.md": "291d0bd2692b05f18bd92e14d726caed"}} \ No newline at end of file +{ + "docs": { + "./_build/html/index.html": "c7d8e8bf97e466be9bedaeb41e380cfd", + "./_build/html/glossary.html": "112021c8b2e35d2942ead096c4ba1eea", + "./_build/html/migrations/index.html": "14b4db54eca6a7b118df4002c546186f", + "./_build/html/migrations/migrations.html": "243199394d4e2134a9d3d072bcece326", + "./_build/html/migrations/exportimport.html": "8f724cbd0a99513f85a68a13149832f8", + "./_build/html/migrations/volto.html": "287d60200a3278344ab1d8aea52215e8", + "./_build/html/migrations/inplace.html": "8c09bbf45cc8099e003c5607ed5bbad3", + "./_build/html/migrations/migrate-to-plone.html": "b7d983b9d5a88965326c2cc04badbe4c", + "./_build/html/mastering-plone-5/dexterity.html": "ae108027294517d816f17f8807887fcb", + "./_build/html/mastering-plone-5/case.html": "a9c23ca3cb40636482be655f5299d447", + "./_build/html/mastering-plone-5/anatomy.html": "b748340d50509bad508c66eaad6f4510", + "./_build/html/mastering-plone-5/views_3.html": "d04a937cd1f11342441a5f07a6fb0523", + "./_build/html/mastering-plone-5/dexterity_2.html": "9af0aa5bce07e32f06f7c6095417728b", + "./_build/html/mastering-plone-5/reusable.html": "0646981fd30c305bec6a507789290b3b", + "./_build/html/mastering-plone-5/deployment_code.html": "782e736d42b140e6d6d8b8d137fa06f6", + "./_build/html/mastering-plone-5/ide.html": "acc9d7e93b61997ce8e84dc9986a4e7c", + "./_build/html/mastering-plone-5/about_mastering.html": "b081478c4349ec8ae8a773e6bb50aeda", + "./_build/html/mastering-plone-5/eggs1.html": "63bc51ac93dd412ee5811aeb98033ddc", + "./_build/html/mastering-plone-5/index.html": "6db20edf1189e5d9e897a484d58a9e07", + "./_build/html/mastering-plone-5/dexterity_3.html": "4d85bda014976b3f09653e7e72b7163f", + "./_build/html/mastering-plone-5/views_2.html": "cc80f11933f427bc2e7bb41721cf8b8c", + "./_build/html/mastering-plone-5/optional.html": "9a5063c704f6c9ea4d7c2c524fa27a6e", + "./_build/html/mastering-plone-5/user_generated_content.html": "39126ab161f2a2aa068ac19772d467be", + "./_build/html/mastering-plone-5/viewlets_2.html": "c5ef42dbcbd5522615322d97031508d4", + "./_build/html/mastering-plone-5/plone5.html": "c39e5563996a48b95d65392a9c020da8", + "./_build/html/mastering-plone-5/dexterity_reference.html": "72f593262c117db1f828f48277fd4f92", + "./_build/html/mastering-plone-5/behaviors_1.html": "603240d9897083d27e140248a7844cba", + "./_build/html/mastering-plone-5/intro.html": "6a5ab35e53aee9413fb2392b014791a4", + "./_build/html/mastering-plone-5/thirdparty_behaviors.html": "cfcf17bb6a748b8fdd05f12527205082", + "./_build/html/mastering-plone-5/resources.html": "4c5bda7630652b81aa93871d61944204", + "./_build/html/mastering-plone-5/behaviors_2.html": "e31fdb4d7c27a575e96b0440ff7a7bb9", + "./_build/html/mastering-plone-5/configuring_customizing.html": "5066c4bebe6183b208ec501a0837b9a3", + "./_build/html/mastering-plone-5/extending.html": "3931df49fd59d44865d2d18a94a7cf44", + "./_build/html/mastering-plone-5/zpt_2.html": "a13bad9aed74de8b39c087ecdcf33ae3", + "./_build/html/mastering-plone-5/export_code.html": "a35346d0137a78f23000c453ccabf1f9", + "./_build/html/mastering-plone-5/add-ons.html": "5e612afe6a669efa16dabad381894ddc", + "./_build/html/mastering-plone-5/theming.html": "d3f63c2d43554eaeb101b106937b8e16", + "./_build/html/mastering-plone-5/deployment_sites.html": "eeba5bc495fc673610bfe519b55322db", + "./_build/html/mastering-plone-5/viewlets_1.html": "f597b2c41085162cce661a2dccbefc81", + "./_build/html/mastering-plone-5/code.html": "a45af9958afaa9b801d09e57871373d2", + "./_build/html/mastering-plone-5/events.html": "f78661a74dd78e2ce8c95839628d4782", + "./_build/html/mastering-plone-5/api.html": "c2c2afa2843d608a310cee571cda2c6b", + "./_build/html/mastering-plone-5/eggs2.html": "ed63e4c2be23afbf96448e2ee73f039e", + "./_build/html/mastering-plone-5/features.html": "d7fb4bde60f6b6f786c471e3d29e3e29", + "./_build/html/mastering-plone-5/frontpage.html": "dd6e6336f9a2a47998ad2f71b3c3c67b", + "./_build/html/mastering-plone-5/restapi.html": "f4b2ba2a0c5cc68ab155342567e8c525", + "./_build/html/mastering-plone-5/testing.html": "3c478f7485a344619beaf77d65b4ef2d", + "./_build/html/mastering-plone-5/installation.html": "bfc710f66eb6830c3ecf6202960a3485", + "./_build/html/mastering-plone-5/views_1.html": "377b0efdafe68e12f08e39e710da07f3", + "./_build/html/mastering-plone-5/timing.html": "831fe0a549684bf91c833b60a8c7499b", + "./_build/html/mastering-plone-5/registry.html": "44c3e6991286b518bd453284ce510ded", + "./_build/html/mastering-plone-5/embed.html": "9d4d9c7309822284f083f95303a79a79", + "./_build/html/mastering-plone-5/buildout_1.html": "4847e9b426d19999b1defae8e7bc1934", + "./_build/html/mastering-plone-5/relations.html": "970ee5a5cf90a98b2b71bb58b629ea89", + "./_build/html/mastering-plone-5/zpt.html": "2285aae77e6220cb0c708038e9bb3e66", + "./_build/html/mastering-plone-5/future_of_plone.html": "5dbf6f7b7ab3ca95593f4016d45f6abd", + "./_build/html/mastering-plone-5/what_is_plone.html": "834ec62ebcf9104553f4820345813ca1", + "./_build/html/mastering-plone-5/instructions_plone5/index.html": "e740976a8e703f41dbe4d460dff822b7", + "./_build/html/mastering-plone-5/instructions_plone5/what_vagrant_does.html": "01c04b6926f973ca983c058997187190", + "./_build/html/contributing/index.html": "b7b1d2a5349788a5121e1757536fe75e", + "./_build/html/contributing/authors.html": "f67591df3d3d5d3d969ef9860ef1c8f8", + "./_build/html/contributing/setup-build.html": "ce80d8d13593201ceeceb0bf6a9a8387", + "./_build/html/contributing/writing-docs-guide.html": "c67b8f7064af5888ac8eba7c9911e96c", + "./_build/html/voltoaddons/index.html": "33ea48778896145dbba29f9c2c034cb9", + "./_build/html/voltoaddons/06-cell-renderer.html": "03e244ee501d8698c08371c85e82fa5b", + "./_build/html/voltoaddons/intro.html": "8c2e32c7800f637341fcfc4a210390f7", + "./_build/html/voltoaddons/02-block-edit.html": "5217971bb8f4a7ffd735243d9cd76a03", + "./_build/html/voltoaddons/05-objectwidget-block-edit.html": "96740f52f10d4fb9828985ec237aab3a", + "./_build/html/voltoaddons/01-addon-basics.html": "85b74c7cb5892770fffdee9b78c53cd2", + "./_build/html/voltoaddons/blocksrestapi.html": "926612f6a98ed5359ee6cf2cd787c6cb", + "./_build/html/voltoaddons/03-block-view.html": "d6eba348ab270e8eefcee0e021d1f783", + "./_build/html/voltoaddons/07-misc-addons.html": "14e303a8153e347d27a73492779899f3", + "./_build/html/voltoaddons/04-block-edit-options.html": "39bda4be9ea9634eb3e908bce636773c", + "./_build/html/voltoaddons/about/jsbasics.html": "38633b7529c8e5522f3df2ea52649b32", + "./_build/html/voltoaddons/about/index.html": "f71f4a9bbd6ffb071d0222c06dd20be2", + "./_build/html/voltoaddons/about/devenvironment.html": "0c184d123f597c144af6a2f9914010fc", + "./_build/html/voltohandson/quickstart.html": "e150ef4eaf89c8da9ad4a9cb200d1e14", + "./_build/html/voltohandson/contenttypeview.html": "1fdbdad81bc89e64a896c21b61178651", + "./_build/html/voltohandson/highlightsblock.html": "ddad89e372502ad8fdcb4b570d912c9f", + "./_build/html/voltohandson/highlight.html": "d666ce92e5ef8efee177b6890d86a100", + "./_build/html/voltohandson/index.html": "8127d38dd55b72558ae4f1f384ac373c", + "./_build/html/voltohandson/introtoblocks.html": "dff81e54c9780be39110c1548e1f69e8", + "./_build/html/voltohandson/releaseblock.html": "00da19dbf9cfa88aeccd8886aaf2e250", + "./_build/html/voltohandson/breadcrumbs.html": "46a80f158521af0936def0a2ea5fa8a3", + "./_build/html/voltohandson/contenttypesviews.html": "cb320b338c8f5bd8b934424903a7a73e", + "./_build/html/voltohandson/internationalization.html": "8ad753345dd00f1a554728f4107caebc", + "./_build/html/voltohandson/intro.html": "8df1ea920d176c353da1eff267b34051", + "./_build/html/voltohandson/blocksedit.html": "71a0c51596f3b12d6398fda29ed0c6bf", + "./_build/html/voltohandson/eventlistingtemplate.html": "c19b3fc20a1dc49328efb51c5767db65", + "./_build/html/voltohandson/slider.html": "532cd0d452a36390d81331bdb07bcf3b", + "./_build/html/voltohandson/blocksdownload.html": "b0fdc967385d0afc8a0fddf7e5e7ecb7", + "./_build/html/voltohandson/footer.html": "1afc600f130d7a12a07c39ed33d5bd2d", + "./_build/html/voltohandson/listinggridvariation.html": "67836c52277853cb972d3451fe918881", + "./_build/html/voltohandson/starttheming.html": "920098f51cc7a84aa97673eb78cbb0a4", + "./_build/html/voltohandson/header.html": "8d70cf072d57d79a000a7ba8ac312922", + "./_build/html/voltohandson/plonereleasetype.html": "c0f1903d4adb67085eb7ac2b516a07a0", + "./_build/html/voltohandson/introtovolto.html": "43486f2e122fede1354a034802da40b2", + "./_build/html/voltohandson/requirements.html": "c2a6159354a0427cfb10943d63fdb401", + "./_build/html/voltohandson/configandcleanup.html": "e650ed89c15d4422c1ff7b1d1ae3a089", + "./_build/html/effective-volto/backend.html": "50313456273829929ca0fff7e1c3f4e2", + "./_build/html/effective-volto/index.html": "71f838f6910f62341fd8434f501d5d59", + "./_build/html/effective-volto/architecture.html": "6cf5f73ebd6b0055c00d0ab78df093b4", + "./_build/html/effective-volto/getting-started.html": "15a3af949ef6f816bfbeee148f66c12c", + "./_build/html/effective-volto/development.html": "3eea5dfd8792f13bf7103435f196d338", + "./_build/html/effective-volto/deployment.html": "8ebcfbc614972dec8945d702e9f9e507", + "./_build/html/effective-volto/testing.html": "cf2b087757328ba773ee562737337336", + "./_build/html/effective-volto/addons.html": "cfde2aeb73b19c3d287fa2fbd512aec2", + "./_build/html/effective-volto/about_effective_volto.html": "854417361fbcd9d46befe7fd9773a3d0", + "./_build/html/effective-volto/development/lazyloading.html": "59cc5c7b87262ecd8243359df03a34fe", + "./_build/html/effective-volto/development/criticalCSS.html": "56ed7e1236e99b017130b4a3e4bfc52a", + "./_build/html/effective-volto/development/husky-lint-staged.html": "0b64575b5cf6913aac9453f7dae5ceed", + "./_build/html/effective-volto/development/debugging.html": "6bad0d1c9c558f4172d0889903562337", + "./_build/html/effective-volto/development/vscode.html": "ed4186ae0dc61c353580a101b00430e1", + "./_build/html/effective-volto/development/linters.html": "67048d4a6d4ed5a6eb8436144b04ebe4", + "./_build/html/effective-volto/development/shortcuts.html": "4f7604ea927db7b69cba328d06329aec", + "./_build/html/effective-volto/development/i18n.html": "b9fb4f914cbe054571a252cbe2a73f0d", + "./_build/html/effective-volto/development/bundle-analyzing.html": "80770cf3c81ce864083587a742e68f77", + "./_build/html/effective-volto/development/icons.html": "c7c0263287c52d8bf03ae56eb78b0f46", + "./_build/html/effective-volto/development/setup.html": "5a9450236518ed06a3687ca1d1ba84c0", + "./_build/html/effective-volto/development/environmentvariables.html": "4f92aa7580c5fdf7efb84881e4c4c5b6", + "./_build/html/effective-volto/development/component-registry.html": "53c94b0861c8ddcf8e4bd3f08924b33e", + "./_build/html/effective-volto/development/vim.html": "6096447211b88cd146ad78c60ba8fccb", + "./_build/html/effective-volto/addons/blockslayout.html": "9657ec9bc21f33b8edab3cc48276093b", + "./_build/html/effective-volto/addons/bootstrap.html": "7075ed7996a94dfe4926f85d7edfa2df", + "./_build/html/effective-volto/addons/pipeline.html": "ac9ca12e9e6dea43b61336343db0b524", + "./_build/html/effective-volto/addons/customlistingtemplate.html": "dd662eb5d22c8d4273eed7ab16d81fee", + "./_build/html/effective-volto/addons/block-extensions.html": "6adff79f68f7ce52d5b53191495d3902", + "./_build/html/effective-volto/addons/use-released-addon.html": "27d925676ae3bf491e32c08131dc595f", + "./_build/html/effective-volto/addons/what-is-an-addon.html": "16002fab7d5df5d02d0aab1a60476288", + "./_build/html/effective-volto/addons/use-repo-addon.html": "bf6e581fbf682a5953bed7a170258989", + "./_build/html/effective-volto/addons/block-styling.html": "49e77d8623ab143e1e427b531ae40336", + "./_build/html/effective-volto/addons/asyncconnect.html": "81f8a7f29144d166947a32e2b0b9a4b2", + "./_build/html/effective-volto/addons/how-an-add-on-works.html": "af764814d9d0ab3ae71212c58303d019", + "./_build/html/effective-volto/addons/blockdataform.html": "5f0097f64717f6f1293665331186314e", + "./_build/html/effective-volto/addons/i18n.html": "741bd2f30794da59f84c1ef19fa9d4b7", + "./_build/html/effective-volto/addons/webpack.html": "efc9f5e270593492e75ac95d84e086a3", + "./_build/html/effective-volto/addons/theme.html": "fc46a52751765fc1d6627a13a65525c3", + "./_build/html/effective-volto/addons/dependencies.html": "c5103af7ae0a6ce8515261dc9ad1f63c", + "./_build/html/effective-volto/addons/semanticui.html": "6b71c5655888b9ec91a66ad949536e1c", + "./_build/html/effective-volto/addons/views.html": "2ba5707deb85dab382a4f9a5d8ea7c7f", + "./_build/html/effective-volto/backend/block-field-as-searchableText.html": "ce971be0e1e66fc92a6663b74124f602", + "./_build/html/effective-volto/backend/writing-content-expansion.html": "e38efa20d520b7f172dd627c8ccc1596", + "./_build/html/effective-volto/backend/plone-restapi-endpoints.html": "596c8d7dc5261e4e1f8c2d2c68c9af9d", + "./_build/html/effective-volto/backend/block-linkintegrity.html": "d0a965ddc2a1d90d52d460bfd8fe69b3", + "./_build/html/effective-volto/backend/writing-block-transforms.html": "03d8cda743e5803f26aa49c583fbd7fb", + "./_build/html/effective-volto/backend/express-middleware.html": "b4ce21ace37ca1dfd6d9c630bb3c856c", + "./_build/html/effective-volto/backend/writing-endpoint.html": "adc4c72f1fd163bad8535ca9be72a374", + "./_build/html/effective-volto/backend/writing-serializer-deserializer.html": "b1e3c3cc1c71574f4aa87ceeeb1e8b6a", + "./_build/html/effective-volto/testing/unit.html": "a674a84743fdc2b5797ef85920617054", + "./_build/html/effective-volto/testing/storybook.html": "321f783b6466a6e78ff84f2cbab262b3", + "./_build/html/effective-volto/testing/acceptance.html": "eec4a41c8a11b7d148b8f13f03a8410f", + "./_build/html/effective-volto/testing/addons.html": "7b014e82ebed0aa1797f3abdea88d9a4", + "./_build/html/effective-volto/testing/jest.html": "df0d11b21b3e4040b4137ff2049efc84", + "./_build/html/effective-volto/architecture/client-ssr.html": "94c9c4e8ec5baebe6edc8172ead81f13", + "./_build/html/effective-volto/architecture/anatomy.html": "0107df32a46163aa1bf672a6f108d221", + "./_build/html/effective-volto/architecture/razzle.html": "88959e2d179ffd39682cd75e265539d2", + "./_build/html/effective-volto/architecture/redux.html": "c1753b484c0f3a7678355934e711baca", + "./_build/html/effective-volto/architecture/configuration.html": "02cad030c657c4e023a926e628a3aada", + "./_build/html/effective-volto/architecture/CORS.html": "2ba3a38d4f3067c3632cf355659123cf", + "./_build/html/effective-volto/architecture/bootstrap-volto.html": "eeed97e44d6d520d8f175a66568ba50f", + "./_build/html/effective-volto/architecture/multilingual.html": "1d6842d193403d61bb08c98e59c31626", + "./_build/html/effective-volto/architecture/blocks.html": "96c79ba399776df974ff6410c05dcf04", + "./_build/html/effective-volto/architecture/webpack.html": "0c503ebf32cd4ca681f8707eb675cf80", + "./_build/html/effective-volto/architecture/babel.html": "bd7a22a5f765c2114c5cde2742a4540c", + "./_build/html/effective-volto/architecture/webpack-loaders.html": "b1d95d5b1fd992fc0531059d67829cea", + "./_build/html/effective-volto/getting-started/add-on.html": "2e4a0a1d6226958b9b1ca811fcd1f602", + "./_build/html/effective-volto/getting-started/project.html": "8a23fe42470d891fa77225dfc93b1db1", + "./_build/html/effective-volto/getting-started/roadmap.html": "efc7fc89204182be3c4d4e833677b092", + "./_build/html/effective-volto/deployment/docker.html": "b102a24224c5fd5ca57a48a7fb4bd879", + "./_build/html/effective-volto/deployment/releaseit.html": "d3d4e31c0cdaabe1fb54a3199877cdb5", + "./_build/html/effective-volto/deployment/seamlessmode.html": "2afa3fa855486d2ffd24bbbf8e7367f0", + "./_build/html/effective-volto/deployment/simple.html": "853e12c633d5700c34d8ad5adafc4d00", + "./_build/html/mastering-plone/dexterity.html": "229178a9a854ae2faf06a5e7d678ca77", + "./_build/html/mastering-plone/volto_addon.html": "aa5f0637e817424414dbd95c18560348", + "./_build/html/mastering-plone/case.html": "e7d0e49b148e60352ef84367eae2cd86", + "./_build/html/mastering-plone/deployment_code.html": "913418da10e250caf92d4b4046834e6e", + "./_build/html/mastering-plone/about_mastering.html": "60a8032f41c1830af22f6ec6c6bc8b2f", + "./_build/html/mastering-plone/index.html": "8c206cc695c7d870932658be3762e8e0", + "./_build/html/mastering-plone/dexterity_3.html": "57ab167862c8ee2eb738f0f14e0ebd1f", + "./_build/html/mastering-plone/user_generated_content.html": "9000c6020d76caa024f1dc56f1067a40", + "./_build/html/mastering-plone/volto_talkview.html": "7e2fa869874d81235ec016ba173fd3ec", + "./_build/html/mastering-plone/dexterity_reference.html": "0bdcfa13144529fee7285ff9ae2e686f", + "./_build/html/mastering-plone/trainer.html": "7c7d5abf7d28eb7cbd17cc6d36fb0731", + "./_build/html/mastering-plone/behaviors_1.html": "a47949b106cbd6f8c65cb9b825affc35", + "./_build/html/mastering-plone/volto_custom_addon2.html": "1eb4fe83b752d735b2df587156cf2144", + "./_build/html/mastering-plone/intro.html": "ebb2ae73454e2dcd86ed61f6e7ffa9c7", + "./_build/html/mastering-plone/volto_custom_addon.html": "645c68b643330089313a9f02ea2972ff", + "./_build/html/mastering-plone/configuring_customizing.html": "88e76234da544bd2a2554b744c182f4f", + "./_build/html/mastering-plone/dexterity_2_talk.html": "3b5c0af53b3a2896dc514bec84e575e2", + "./_build/html/mastering-plone/extending.html": "dfa7d7c72330c0db17be260e9ffd087c", + "./_build/html/mastering-plone/add-ons.html": "61aaeb1263ac995f22db239de1caa588", + "./_build/html/mastering-plone/volto_listing_variation.html": "761844a38ab6ec9410c778441bafdc23", + "./_build/html/mastering-plone/volto_testing.html": "c73ea806b38295b53f1456e59031bdfa", + "./_build/html/mastering-plone/volto_frontpage.html": "4c4e126ecc25c6746be5a042a94e5afe", + "./_build/html/mastering-plone/volto_components_sponsors.html": "f596a06b7aaf95f14734cb21ab7b2a52", + "./_build/html/mastering-plone/code.html": "6f9442beeda520a8a22e9634f3813a99", + "./_build/html/mastering-plone/volto_overrides.html": "94ab0cc405400baa2cde82515f82dce2", + "./_build/html/mastering-plone/upgrade_steps.html": "701b69fa95f2223d639364b11034af83", + "./_build/html/mastering-plone/events.html": "05fc173d06099c00afb5f497464f7b8d", + "./_build/html/mastering-plone/api.html": "612e275593d3d83560a126019ffc6e13", + "./_build/html/mastering-plone/features.html": "c180d3917f058a077ae6427b151b13ee", + "./_build/html/mastering-plone/installation.html": "d6fa92d28a64e51308424aacc2a486bb", + "./_build/html/mastering-plone/registry.html": "084b75f72a30776338dd41d61c9ac72e", + "./_build/html/mastering-plone/searchable.html": "1c9457b52d20f43640cd4c1515d3c2b3", + "./_build/html/mastering-plone/volto_development.html": "ed2a96eb4fe1e7f9010cab627f29e8f5", + "./_build/html/mastering-plone/relations.html": "14a93aaeaf6f708f111de69df74f300a", + "./_build/html/mastering-plone/what_is_plone.html": "91018da8b0db5ee2f7553ab68d09e708", + "./_build/html/mastering-plone/voting-story/endpoints.html": "b088b4f23ce7e563275eb60c0206b54b", + "./_build/html/mastering-plone/voting-story/index.html": "aedce04b1f523862075af8de3ab62f02", + "./_build/html/mastering-plone/voting-story/volto_actions.html": "f8e9462b772976f37b079e6247e17fe7", + "./_build/html/mastering-plone/voting-story/behaviors_2.html": "b0627778cd7bec91cfacf4bcf19df250", + "./_build/html/mastering-plone/voting-story/permissions.html": "678f8f542168cb3836d5115de1562be0", + "./_build/html/testing/testing_robot.html": "5295a69bc150d516548bc04cd3f7a2e3", + "./_build/html/testing/index.html": "8cb822601b1ae1a9476b663301c623b3", + "./_build/html/testing/intro_to_tests.html": "a81958905e14fce5537b32459ada8e04", + "./_build/html/testing/start.html": "6e9288af96cdce7455aaf3bbc7a2babd", + "./_build/html/testing/continuous_integration.html": "9dd188bf44057efc4b3c2f758aa00098", + "./_build/html/testing/unittest.html": "dce81e81c0fb8902e78f6738d1cb72aa", + "./_build/html/testing/theory.html": "5620e085864d4c12126b8abbf2eb4ff9", + "./_build/html/testing/acceptance.html": "5c94ac54de98bf941e6851ec8613d2d4", + "./_build/html/testing/testing_view.html": "2e552ffe3271625076ae8db00677e54b", + "./_build/html/testing/testing_setup.html": "43b1ab51ee5753ce4ec79eb2e7a81729", + "./_build/html/testing/testing_dexterity.html": "5b40264fc58a87e8669f829e3c6ff6c3", + "./_build/html/testing/summary.html": "a829d15d2672c70abdb78994c674de3d", + "./_build/html/theming/theme_scratch.html": "6654a15b3da5dffc8a7270912213249d", + "./_build/html/theming/theme_barceloneta.html": "ff8b7dff56fc3dc305286b40cf3110ad", + "./_build/html/theming/diazo-notes.html": "17670ab6d156959dd63648078c5dc5b3", + "./_build/html/theming/index.html": "c3e8dfac353af7b5091df9d5baa4ae5f", + "./_build/html/theming/ttw_customizations.html": "ac39fdfd30b46f725c1eac460a1e0e22", + "./_build/html/theming/preparation.html": "6c3e5f147a16f9eaba284a47120d903b", + "./_build/html/theming/theme_diazo.html": "d336ec067888c452bf41d812e3cc4081", + "./_build/html/teaching/index.html": "8719ff87deb66f726fe2676944b9dc0c", + "./_build/html/teaching/after.html": "a7faa2dbc961f859f0c7766c565b4f8e", + "./_build/html/teaching/theory.html": "87a0a4e734e44685ffd87265e96df018", + "./_build/html/teaching/before.html": "87f6884c3218017954cf0e892178ac3e", + "./_build/html/teaching/during.html": "3faa143730c63b28b1364e9215679ddb", + "./_build/html/workflow/index.html": "fb0ebcf76b9b780121905feb4693ea53", + "./_build/html/workflow/generic-setup-export-import.html": "fca30890cb7e76e6b52380306ba1b91c", + "./_build/html/workflow/workflow-chains.html": "bdc80c56aecf709bc018c92011a63bb6", + "./_build/html/workflow/dynamic-roles.html": "793362e1f2825cb1f810e8a8a7a488aa", + "./_build/html/workflow/roles-and-permissions.html": "a013bc542b720d215a973bf9ef8e11aa", + "./_build/html/workflow/workflow-variables.html": "2463348cee2042ac9fe69e6cc6adae41", + "./_build/html/workflow/local-roles.html": "addf088755892d9edca080ec7d28d6d2", + "./_build/html/workflow/introduction.html": "ece0c34a4aaf55612bea4400d43e3c2d", + "./_build/html/workflow/placeful-workflow.html": "2b6537b57f127f5a33a60c912d2c8c54", + "./_build/html/plone-deployment/index.html": "bb0ae34bb276490cc94ceb610ce88b54", + "./_build/html/plone-deployment/project-start.html": "d08ea6414afc9ef1d4397379245c35d9", + "./_build/html/plone-deployment/intro.html": "96b965c4a4924a6de175188ac95d70b8", + "./_build/html/plone-deployment/plone-stack.html": "ecc9286ed8a7660d9520c598b505702e", + "./_build/html/plone-deployment/server-setup.html": "d3b69a71884e3508123dc76a5c519d14", + "./_build/html/plone-deployment/deploy.html": "14a2bfeb85ed05c55e224d9029726d05", + "./_build/html/plone-deployment/project-new.html": "30e647e65362cef46f10496097649609", + "./_build/html/plone-deployment/setup.html": "e49db61c36cc31a8f2db6f2592101520", + "./_build/html/plone-deployment/project-edit.html": "d18dbded6b90a90b81bd30b4b7224fc2", + "./_build/html/plone-deployment/plone-docker-images.html": "a9c7ff469e63d772d4cc1cdead285058", + "./_build/html/volto_customization/teaser_variations.html": "82a06e3d00b292d346b10c716e3ac921", + "./_build/html/volto_customization/custom_block.html": "eb94cdfea5ec07c566fc7552ed696245", + "./_build/html/volto_customization/index.html": "2a43b234afe296bc1cf3b77c376b24d2", + "./_build/html/volto_customization/shadowing.html": "10481dacf68f0bd28f511f24d5989e9f", + "./_build/html/volto_customization/schema.html": "8204f7bfc0622ba710548b041c28d4ee", + "./_build/html/volto_customization/data_adapters.html": "ef9390729a4d55cd37c8a5970eafb03b", + "./_build/html/volto_customization/intro.html": "3dfef5018538000b743f02aa1c486175", + "./_build/html/volto_customization/extending_teasers.html": "f7319cc31bebe0a8ba6fabc0be9bf35c", + "./_build/html/volto_customization/blocks.html": "504fddcd56d5ead34a724ee024bee739", + "./_build/html/volto_customization/listing_block.html": "5f60e711f427f058065279758cc51f18", + "./_build/html/volto_customization/styling.html": "2df946ab8e4ace26bf1ec0ad65155937", + "./_build/html/volto_customization/installation.html": "3c95ef9a8659189738943a7c5c4118dd", + "./_build/html/volto_customization/voltosettings.html": "55342a5a1a1d10961afda4d48a693ea1" + } +} \ No newline at end of file diff --git a/upload.py b/upload.py index 583829826..4132f49cf 100644 --- a/upload.py +++ b/upload.py @@ -5,6 +5,7 @@ import hashlib import os import re +from bs4 import BeautifulSoup # that's actually an API key, not a NUA one @@ -15,38 +16,70 @@ def generate_nuclia_sync(): + """ + Generate a dictionary of HTML files and their MD5 hashes. + + Args: + None + + Returns: + dict: A dictionary of HTML files and their MD5 hashes. + """ result = {"docs": {}} - for doc in glob.glob("./docs/**/*.md", recursive=True): + for doc in glob.glob("./_build/html/**/*.html", recursive=True): + + # Skip pages that don't need to be indexed + if any(skip in doc for skip in ['search.html', 'genindex.html','webpack-macros.html']): + continue + hash = hashlib.md5(open(doc, "rb").read()).hexdigest() result["docs"][doc] = hash return result -def extract_first_heading(file_path): +def extract_content(file_path): + """ + Extract title and content from HTML file using BeautifulSoup. + + Args: + file_path (str): The path to the HTML file. + + Returns: + tuple: A tuple containing the title and content. + """ with open(file_path, 'r', encoding='utf-8') as file: - content = file.read() + soup = BeautifulSoup(file.read(), 'html.parser') - # The pattern matches lines starting with one or more hash symbols followed by any non-empty text - pattern = r'^\s*#+\s+(.+)$' - match = re.search(pattern, content, re.MULTILINE) + # Extract title + title = soup.find('h1').get_text() - if match: - # Removing backticks - heading = match.group(1).replace('`', '').strip() - return heading + # Extract content + article = soup.find('article', class_='bd-article') + if not article: + return None, None + + return title, article - # If no heading is found - return None +def get_slug(path): + """ + Extract slug from path. -# re.sub() is used to perform substitution -# r'[\W_]+' matches any non-word characters (including underscores),and replaces them with a single hyphen '-' -# strip('-') removes any leading or trailing hyphens from the resulting string -get_slug = lambda path: re.sub(r'[\W_]+', '-', path.lower().strip()).strip('-') + Args: + path (str): The path to the HTML file. + + Returns: + str: The slug. + """ + path = path.replace('./_build/html/', '') + path = re.sub(r'\.html$', '', path) + slug = re.sub(r'[\W_]+', '-', path.lower().strip()).strip('-') + return slug def normalize_path(path): - return path.replace('.md', '').replace('./docs', '').lstrip('/') + path = path.replace('./_build/html/', '') + return path.replace('.html', '').lstrip('/') def create_url(origin_url, url_path): @@ -54,37 +87,66 @@ def create_url(origin_url, url_path): def generate_breadcrumb_for_path(path): + """ + Generate breadcrumbs for a given HTML file path. + + Args: + path (str): The path to the HTML file. + + Returns: + dict: A dictionary containing breadcrumbs. + """ breadcrumb = [] - temp_path = "./" - path_items = path.split('/')[1:] - - for path_item in path_items: - temp_path = os.path.join(temp_path, path_item) - if temp_path.endswith(".md"): - heading = extract_first_heading(temp_path) - new_data = {"url":create_url( - PUBLIC_URL, normalize_path(temp_path)),"label":heading} + relative_path = path.replace('./_build/html/', '').split('/') + current_path = '' + + for i, path_item in enumerate(relative_path): + is_file = path_item.endswith('.html') and i == len(relative_path) - 1 + + if is_file: + current_path += path_item else: - index_md_path = os.path.join(temp_path, "index.md") - if os.path.exists(index_md_path): - heading = extract_first_heading(index_md_path) - new_data = {"url":create_url( - PUBLIC_URL, normalize_path(temp_path)),"label":heading} + current_path += path_item + '/' + + try: + if not is_file: + index_path = os.path.join('./_build/html/', current_path, 'index.html') else: - continue - # Check if the new_data entry already exists in the breadcrumb - if new_data not in breadcrumb: - breadcrumb.append(new_data) + index_path = os.path.join('./_build/html/', current_path) + + with open(index_path, 'r', encoding='utf-8') as file: + soup = BeautifulSoup(file.read(), 'html.parser') + title = soup.find('h1') + label = title.get_text() if title else path_item + + new_data = { + "url": create_url(PUBLIC_URL, current_path.rstrip('/')), + "label": label + } + + if new_data not in breadcrumb: + breadcrumb.append(new_data) + + except (FileNotFoundError, AttributeError): + continue return {"breadcrumbs": breadcrumb} - def upload_doc(path): + """ + Upload a page to Nuclia Knowledge Base. + + Args: + path (str): Path to the HTML file. + + Returns: + None + """ slug = get_slug(path) - title = extract_first_heading(path) - origin_url = f"{PUBLIC_URL}{path.replace('.md', '').replace('./docs/', '')}" # noqa - sdk.NucliaUpload().text( + title, article = extract_content(path) + origin_url = f"{PUBLIC_URL}{path.replace('./_build/html/', '')}" # noqa + sdk.NucliaUpload().text ( path=path, - format="MARKDOWN", + format="HTML", slug=slug, field="page", title=title, @@ -92,10 +154,20 @@ def upload_doc(path): api_key=API_KEY, origin={"url": origin_url}, extra={"metadata": generate_breadcrumb_for_path(path)}, + metadata={"content": article}, ) def delete_doc(path): + """ + Delete a page from Nuclia Knowledge Base. + + Args: + path (str): Path to the HTML file. + + Returns: + None + """ slug = get_slug(path) print(f"Deleting {slug}") kb = sdk.NucliaKB() @@ -111,9 +183,24 @@ def delete_doc(path): def sync(): - # Get all pages uploaded and last sync - with open("./docs/_static/nuclia_sync.json", "r") as sync_info: - old_data = json.load(sync_info) + """ + Sync Changes with Nuclia Knowledge Base and dump data in nuclia_sync.json + + Args: + None + + Returns: + None + """ + if os.path.exists("./docs/_static/nuclia_sync.json"): + try: + with open("./docs/_static/nuclia_sync.json", "r") as sync_info: + old_data = json.load(sync_info) + except json.JSONDecodeError: + old_data = {"docs": {}} + else: + old_data = {"docs": {}} + new_data = generate_nuclia_sync() to_delete = [] @@ -131,7 +218,7 @@ def sync(): delete_doc(doc) with open("./docs/_static/nuclia_sync.json", "w") as sync_info: - json.dump(new_data, sync_info) + json.dump(new_data, sync_info, indent=4) print("Remember to do a make upload-sync to make sure we update status") From 166692e5b40346d79d28585bf391a43f5e92aeb3 Mon Sep 17 00:00:00 2001 From: justdaksh Date: Wed, 20 Nov 2024 05:42:55 +0530 Subject: [PATCH 2/3] fixing origin url bugs --- .github/workflows/nuclia_sync.yml | 6 +++++- upload.py | 19 ++++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/.github/workflows/nuclia_sync.yml b/.github/workflows/nuclia_sync.yml index c2e49c7aa..934b08c6f 100644 --- a/.github/workflows/nuclia_sync.yml +++ b/.github/workflows/nuclia_sync.yml @@ -2,7 +2,7 @@ name: Nuclia Sync on: push: - + jobs: sync: runs-on: ubuntu-latest @@ -23,6 +23,10 @@ jobs: pip install -q -r requirements.txt -c constraints.txt pip freeze + - name: Building html + run: | + make html + - name: Run Nuclia Sync env: DEPLOY_NUCLIA_URL: ${{secrets.DEPLOY_NUCLIA_URL}} diff --git a/upload.py b/upload.py index 4132f49cf..92b401cf5 100644 --- a/upload.py +++ b/upload.py @@ -85,6 +85,23 @@ def normalize_path(path): def create_url(origin_url, url_path): return f"{origin_url.rstrip('/')}/{url_path}" +def transform_path_to_url(path, base_url): + """ + Transform a file path to a URL, replacing underscores with hyphens in folder names only. + + Args: + path (str): The path to the HTML file. + base_url (str): The base URL. + + Returns: + str: The transformed URL. + """ + transformed_path = '/'.join( + part.replace('_', '-') if '.html' not in part else part + for part in path.replace('./_build/html/', '').split('/') + ) + return f"{base_url.rstrip('/')}/{transformed_path}" + def generate_breadcrumb_for_path(path): """ @@ -143,7 +160,7 @@ def upload_doc(path): """ slug = get_slug(path) title, article = extract_content(path) - origin_url = f"{PUBLIC_URL}{path.replace('./_build/html/', '')}" # noqa + origin_url = transform_path_to_url(path, PUBLIC_URL) sdk.NucliaUpload().text ( path=path, format="HTML", From ca8189eae8f22685e165f72b18f8f21f6be1bceb Mon Sep 17 00:00:00 2001 From: justdaksh Date: Thu, 21 Nov 2024 21:02:07 +0530 Subject: [PATCH 3/3] minor fixes --- .github/workflows/nuclia_sync.yml | 2 +- upload.py | 10 +--------- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/.github/workflows/nuclia_sync.yml b/.github/workflows/nuclia_sync.yml index 934b08c6f..3640656f1 100644 --- a/.github/workflows/nuclia_sync.yml +++ b/.github/workflows/nuclia_sync.yml @@ -11,7 +11,7 @@ jobs: - name: Check out code uses: actions/checkout@v4 - - name: Set up Python ${{ matrix.python-version }} + - name: Set up Python uses: actions/setup-python@v5 with: python-version: "3.12" diff --git a/upload.py b/upload.py index 92b401cf5..1373049d6 100644 --- a/upload.py +++ b/upload.py @@ -77,14 +77,6 @@ def get_slug(path): return slug -def normalize_path(path): - path = path.replace('./_build/html/', '') - return path.replace('.html', '').lstrip('/') - - -def create_url(origin_url, url_path): - return f"{origin_url.rstrip('/')}/{url_path}" - def transform_path_to_url(path, base_url): """ Transform a file path to a URL, replacing underscores with hyphens in folder names only. @@ -137,7 +129,7 @@ def generate_breadcrumb_for_path(path): label = title.get_text() if title else path_item new_data = { - "url": create_url(PUBLIC_URL, current_path.rstrip('/')), + "url": transform_path_to_url(current_path.rstrip('/'),PUBLIC_URL), "label": label }