{"id":25176206,"url":"https://github.com/redturtle/redturtle.volto","last_synced_at":"2025-05-06T23:18:47.622Z","repository":{"id":39891548,"uuid":"265870176","full_name":"RedTurtle/redturtle.volto","owner":"RedTurtle","description":"Helper package to setup a RedTurtle's Plone site ready to work with Volto","archived":false,"fork":false,"pushed_at":"2025-05-06T11:53:36.000Z","size":865,"stargazers_count":1,"open_issues_count":11,"forks_count":1,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-05-06T12:56:12.883Z","etag":null,"topics":["hacktoberfest"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RedTurtle.png","metadata":{"files":{"readme":"README.rst","changelog":"CHANGES.rst","contributing":null,"funding":null,"license":"LICENSE.GPL","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-05-21T14:29:49.000Z","updated_at":"2025-03-20T15:35:46.000Z","dependencies_parsed_at":"2023-09-26T11:05:04.057Z","dependency_job_id":"475f7d89-2aa2-404d-a5c2-4e72b41621cd","html_url":"https://github.com/RedTurtle/redturtle.volto","commit_stats":{"total_commits":383,"total_committers":11,"mean_commits":34.81818181818182,"dds":"0.17754569190600522","last_synced_commit":"cd9868e06492798ae1be87bd399b749221f3ec37"},"previous_names":[],"tags_count":109,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RedTurtle%2Fredturtle.volto","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RedTurtle%2Fredturtle.volto/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RedTurtle%2Fredturtle.volto/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RedTurtle%2Fredturtle.volto/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RedTurtle","download_url":"https://codeload.github.com/RedTurtle/redturtle.volto/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252782910,"owners_count":21803418,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hacktoberfest"],"created_at":"2025-02-09T13:16:38.265Z","updated_at":"2025-05-06T23:18:47.604Z","avatar_url":"https://github.com/RedTurtle.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":".. This README is meant for consumption by humans and pypi. Pypi can render rst files so please do not use Sphinx features.\n   If you want to learn more about writing documentation, please check out: http://docs.plone.org/about/documentation_styleguide.html\n   This text does not appear on pypi or github. It is a comment.\n\n===============\nredturtle.volto\n===============\n\nThis is an helper package that setup a RedTurtle's Plone site ready to work with Volto.\n\n\n|python| |version| |ci| |coverage| |downloads| |license|\n\n.. |python| image:: https://img.shields.io/pypi/pyversions/redturtle.volto.svg\n  :target: https://pypi.python.org/pypi/redturtle.volto/\n\n.. |version| image:: http://img.shields.io/pypi/v/redturtle.volto.svg\n  :target: https://pypi.python.org/pypi/redturtle.volto\n\n.. |ci| image:: https://github.com/RedTurtle/redturtle.volto/actions/workflows/tests.yml/badge.svg\n  :target: https://github.com/RedTurtle/redturtle.volto/actions\n\n.. |downloads| image:: https://img.shields.io/pypi/dm/redturtle.volto.svg\n   :target: https://pypi.org/project/redturtle.volto/\n\n.. |license| image:: https://img.shields.io/pypi/l/redturtle.volto.svg\n    :target: https://pypi.org/project/redturtle.volto/\n    :alt: License\n\n.. |coverage| image:: https://coveralls.io/repos/github/RedTurtle/redturtle.volto/badge.svg?branch=master\n    :target: https://coveralls.io/github/RedTurtle/redturtle.volto?branch=master\n    :alt: Coverage\n\nFeatures\n========\n\nContent-types\n-------------\n\n- News Item and Event can only contain **Links**, **Images** and **Files**\n\nBlocks\n------\n\n**volto.blocks** behavior is enabled by default for these content-types:\n\n- Document\n- News Item\n- Event\n\nThere are also some adapters registered for **IBlockSearchableText** to index some common blocks.\n\nLinks\n-----\n\nThere is a custom adapter for TextLine field that return the proper widget for **remoteUrl**.\n\nCustom blocks transformers\n--------------------------\n\nThere are custom transformers for serializer and deserializer to better manage resolveuids.\n\nIf a block refers to some internal content, on deserialization we only store its UID, and in serialization\nwe \"expand\" informations with the summary-serialized content.\n\n@context-navigation endpoint\n----------------------------\n\nplone.restapi's **@navigation** endpoint always return the navigation tree from the site root.\n\nThere is a **@context-navigation** endpoint that returns the contextual navigation tree:\n\n    \u003e curl -i http://localhost:8080/Plone/folder?context-navigation -H 'Accept: application/json'\n\nThis is the result::\n\n    {\n        '@id': 'http://localhost:8080/Plone/folder',\n        'items': [\n            {'@id': 'http://localhost:8080/Plone/folder/folder-a',\n                'description': '',\n                'title': 'Folder A'},\n            {'@id': 'http://localhost:8080/Plone/folder/folder-b',\n                'description': '',\n                'title': 'Folder B'},\n            {'@id': 'http://localhost:8080/Plone/folder/folder-c',\n                'description': '',\n                'title': 'Folder C'}\n        ]\n    }\n\nBy default only first level is shown.\nYou can pass an **expand.navigation.depth** parameter to set the depth::\n\n    \u003e curl -i http://localhost:8080/Plone/folder?context-navigation?expand.navigation.depth=2 -H 'Accept: application/json'\n\nAnd this is the result::\n\n    {\n        '@id': 'http://localhost:8080/Plone/folder',\n        'items': [\n            {\n                '@id': 'http://localhost:8080/Plone/folder/folder-a',\n                'description': '',\n                'items': [\n                    {\n                        '@id': 'http://localhost:8080/Plone/folder/folder-a/folder-aa',\n                        'description': '',\n                        'title': 'Folder AA',\n                    },\n                    {\n                        '@id': 'http://localhost:8080/Plone/folder/folder-a/folder-ab',\n                        'description': '',\n                        'title': 'Folder AB',\n                    },\n                ],\n                'title': 'Folder A',\n            },\n            {\n                '@id': 'http://localhost:8080/Plone/folder/folder-b',\n                'description': '',\n                'title': 'Folder B',\n            },\n            {\n                '@id': 'http://localhost:8080/Plone/folder/folder-c',\n                'description': '',\n                'title': 'Folder C',\n            },\n        ],\n    }\n\n@site-search endpoint\n---------------------\n\nThis endpoint works exactly like **@search** but take care of types not searchable settings.\n\n\n@sitemap-settings\n-----------------\n\nEndpoint that returns sitemap settings for anonymous users (that can't access registry entries).\n\nReturns a data structure like this::\n\n    {\n        'depth': 3,\n    }\n\n\n@search endpoint\n----------------\n\nWe customized @search endpoint for that bug: https://github.com/plone/plone.restapi/pull/1066\n\n@querystring-search endpoint customization\n------------------------------------------\n\nIf we are searching only for `Event` types, do a special search using **get_events** method to search events: that method handle recurrences and avoid wrong results.\n\nOtherwise, perform a default querystring-search.\n\n\nDisallow bot indexing\n---------------------\n\nThere is a custom viewlet that add a \u003cmeta\u003e tag in the \u003chead\u003e section to prevent bot indexing.\n\nFor reference: https://developers.google.com/search/docs/advanced/crawling/block-indexing?visit_id=637489966041845317-1328107746\u0026rd=1\n\nRestapi Search Limits\n---------------------\n\nSearch results length is limited to 500 items by default, but you can change this limit\nusing the environment variable `REDTURTLE_VOLTO_MAX_LIMIT_SEARCH`\n\nPatches\n=======\n\nProducts.PortalTransforms\n-------------------------\n\nSee https://github.com/plone/Products.PortalTransforms/pull/43\n\nThere is a monkeypatch to apply that changes.\n\nEvents recurrence\n-----------------\n\nThere is a monkeypatch for Events recurrences that fix their duration.\n\nIf it works well, we can make a pr in p.a.event.\n\nThere is another monkeypatch for Events recurrences to change the default behavior of start index serializer.\nNow it keeps all dates even if the single date is already passed.\n\n\nRespect locally allowed types on paste\n--------------------------------------\n\nDisallow paste items that are not allowed into destination folder.\n\n\nDateTime field serializer/deserializer\n--------------------------------------\n\nCustomized these adapters to correctly set effective and expires dates.\n\nWithout this change, these dates will be stored with UTC hour and not with the current timezone's hour\nbecause behavior's `setter/getter \u003chttps://github.com/plone/plone.app.dexterity/blob/master/plone/app/dexterity/behaviors/metadata.py#L278\u003e`_ strip timezone from the value.\n\nWith this patch we will send to the setter the date with already localized hour, so even if the setter strip timezone info, we are going to save the correct date.\n\nDefault ISerializeToJsonSummary adapter\n---------------------------------------\n\nThis is a patch for backward compatibility for old volto templates that need a full image scales object.\n\nAuthentication Header\n---------------------\n\nThere is a custom event handler for IPubStart that set authorization bearer header from auth_token cookie.\nFor details see the `pull-request \u003chttps://github.com/RedTurtle/redturtle.volto/pull/69\u003e`_.\n\nThis patch is not enabled by default. You need to set an environment variable to `true`: *PROXY_BEARER_AUTH*.\n\nConditionally search for similar if nonexistent site path passed\n----------------------------------------------------------------\n\nplone.app.redirector.FourOhFourView.search_for_similar method patched to return an empty list if\nthe `REDTURTLE_VOLTO_ENABLE_SEARCH_FOR_SIMILAR` environment variable is set.\n\nNew Criteria\n============\n\nThere is one new criteria for Collections and Listing blocks that search on **exclude_from_nav** index.\n\n\nCaching controlpanel\n====================\n\nAfter installation the caching control panel is populated with custom policies while caching is globally enabled by default. Please, set the caching proxies properly.\n\n\n@vocabularies permissions\n=========================\n\nAccording to new plone.restapi implementation, @vocabularies endpoint will check some permissions to make a vocabulary available or not.\n\nWe patched PERMISSIONS variable in __init__ file to allow Keywords vocabulary to be available for anonymous users.\n\nReference: https://github.com/plone/plone.restapi/pull/1258#issuecomment-980628982\n\nRamCache in tersecaching\n------------------------\n\nWe disabled ramcache for tersecaching (plone.app.caching.terseCaching.plone.content.dynamic.ramCache) because\nit seems not correctly purged when there are more instances and a content has been modified.\n\nWe need to check why it's not purged and fix it.\n\n\nTemplate overrides\n==================\n\nRSS.pt Template\n---------------\nThere is a customization of the Products.CMFPlone.browser.syndication.templates.RSS.pt\ntemplate to add enclosure tag to feed items.\nA record has also been added to the registry to be able to set the miniature to be\ndisplayed with the RSS item. This record is named redturtle.volto.rss_image_miniature\n\nFix internal links\n==================\n\nThere is a view **@@fix-links** that will check internal links into blocks and fix some links that refs to a staging\nor local development environment.\n\nFind blocks\n===========\n\nThere is a view **@@find-blocks** that will return contents that have at least one block of the given type.\n\nFind broken links\n=================\n\nThere is a view **@@find-broken-links** that will return a csv file with a list of contents with broken internal links in blocks.\n\nStringinterp adapters\n=====================\n\nThere is a new stringinterp adapter that can be used for example in content rules: **{volto_url}**\n\nThis adapter will remove \"/api\" from the content's absolute_url.\n\n\nSitemap.xml.gz view customization\n=================================\n\nThere is a custom view **sitemap.xml.gz** that will return a sitemap.xml.gz file.\n\nThis is a copy of the original view from plone.app.layout.sitemap.sitemap\n\nThe only difference is that:\n\n    * we restrict level of depth to `plone.sitemap_depth` registry setting (default 3)\n\n    * we add content modified in the last week\n\nWith Volto, for serve this file, we need to add a line like this in apache config::\n\n    RewriteRule ^/+(sitemap.xml.gz) http://127.0.0.1:8080/VirtualHostBase/https/%{SERVER_NAME}:443/Plone/VirtualHostRoot/$1 [L,P]\n\n\nInstallation\n============\n\nInstall redturtle.volto by adding it to your buildout::\n\n    [buildout]\n\n    ...\n\n    eggs =\n        redturtle.volto\n\n\nand then running ``bin/buildout``\n\n\n\nContribute\n==========\n\n- Issue Tracker: https://github.com/RedTurtle/redturtle.volto/issues\n- Source Code: https://github.com/RedTurtle/redturtle.volto\n\n\nLicense\n=======\n\nThe project is licensed under the GPLv2.\n\nAuthors\n=======\n\nThis product was developed by **RedTurtle Technology** team.\n\n.. image:: https://avatars1.githubusercontent.com/u/1087171?s=100\u0026v=4\n   :alt: RedTurtle Technology Site\n   :target: http://www.redturtle.it/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fredturtle%2Fredturtle.volto","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fredturtle%2Fredturtle.volto","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fredturtle%2Fredturtle.volto/lists"}