Extends plone.stringinterp functionallity with a generic fallback string substitution adapter that lookup context properties if no explicit named IStringSubstitution is defined.
Main features
Generic string substitution adapter to easily grab custom properties from context
Install
Add eea.stringinterp to your eggs section in your buildout and re-run buildout:
[buildout] eggs += eea.stringinterp
You can download a sample buildout from:
Or via docker:
$ docker run --rm -p 8080:8080 -e ADDONS="eea.stringinterp" plone
Install eea.stringinterp within Site Setup > Add-ons
Usage
Via Site Setup > Dexterity Content Types > Page > Fields Tab add new Field, e.g.: custom_field
Via Site Setup > Content Rules add a rule to send email on Workflow change
Within Message add some Custom: ${custom_field}
Add new Page and fill the custom_field
Publish your Page
Check your email
Code usage
>>> from plone.stringinterp.interfaces import IStringSubstitution >>> substitute = IStringSubstitution(sandbox) >>> substitute <eea.stringinterp.adapters.GenericContextAttributeSubstitution object at...>>>> substitute('title') 'Sandbox'>>> substitute('effective') 'Oct 10, 2021 12:00 AM'>>> substitute('Subject') 'air, pollution'
Buildout installation
Source code
Eggs repository
Plone versions
It has been developed and tested for Plone 4 and 5. See buildouts section above.
How to contribute
Copyright and license
eea.stringinterp (the Original Code) is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
The Initial Owner of the Original Code is European Environment Agency (EEA). Portions created by Eau de Web are Copyright (C) 2009 by European Environment Agency. All Rights Reserved.
Funding
EEA - European Environment Agency (EU)
Secret Scanning
This repository uses the Betterleaks GitHub Action to scan the current repository content on every push and pull request. The scan uses the rules in .gitleaks.toml and uploads a betterleaks-report artifact when a finding is detected.
If the optional SMTP secrets are configured, failed scans also send an email to the last commit committer. The workflow expects these repository or organization secrets:
SMTP_URL
SMTP_PORT (optional, defaults to 25)
SMTP_EMAIL
SMTP_PASSWORD (optional if the SMTP server does not require authentication)
Port 465 is sent with direct TLS; other ports use the default SMTP handshake. The email includes a short finding summary from the redacted Betterleaks report, including the redacted matched line from each finding.
There are three common outcomes:
Everything is OK. The Betterleaks / Scan for secrets check is green and no action is needed. Regular references to runtime values are OK, for example:
token_from_cookie = request.cookies.get("auth_token")A real secret was found. The check is red and the workflow log asks you to download the betterleaks-report artifact. Open the artifact from the GitHub Actions run and check the reported file, line and rule. Remove the committed value, move it to the proper secret store, and rotate it if it was exposed. A report entry looks like this:
{ "RuleID": "secret-literal-assignment", "File": "src/config.py", "StartLine": 12, "Secret": "[REDACTED]" }The finding is a false positive. Keep the value only if it is clearly not sensitive, such as a test fixture, placeholder, or public example. Add betterleaks:allow on the same line and include a short explanation in the pull request:
test_password = "admin" #betterleaks:allow
Do not add betterleaks:allow to real credentials.
Changelog
1.3 - (2026-07-13)
Change: fix: SonarQube report - refs #305404 [avoinea]
1.2 - (2025-11-18)
Change: Replace Python linting to ruff [mihaidobrescu1111 = refs #286821]
Change: Add plone6 tests [mihaidobrescu1111 = refs #293593]
1.1 - (2023-08-31)
remove python_requires from setup.py [valipod - refs #161113]
1.0 - (2021-05-28)
Add ‘Generic string substitution’ adapter to easily grab properties from context [avoinea - refs #134513]
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file eea_stringinterp-1.3.tar.gz.
File metadata
- Download URL: eea_stringinterp-1.3.tar.gz
- Upload date:
- Size: 25.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.25
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
18173e82ec18ae2a3bb438c3753d62dfc150eb63a3fe664edb33607149a271ca
|
|
| MD5 |
d39c95612ff114d5ccb953a31269fd9c
|
|
| BLAKE2b-256 |
46579583d2ee962d5121f8521c94fa84859eda73bad8a48107810b97e3e17f4f
|