Skip to main content
https://github.com/zopefoundation/Products.PythonScripts/actions/workflows/tests.yml/badge.svg https://coveralls.io/repos/github/zopefoundation/Products.PythonScripts/badge.svg?branch=master Current version on PyPI Supported Python versions

Products.PythonScripts

The Python Scripts product provides support for restricted execution of Python scripts, exposing them as callable objects within the Zope environment.

Providing access to extra modules

Python script objects have a limited number of “safe” modules available to them by default. In the course of working with Zope, you will probably wish to make other modules available to script objects.

Allowing additional modules is risky. Do not do this if untrusted users are allowed to add or edit scripts. You may expose your deployment to full compromise, including filesystem access on the host!

The AccessControl package products provides a simple way to make modules available for use by script objects on a site-wide basis. Before making a module available to Python scripts, you should carefully consider the potential for abuse or misuse of the module, since all users with permission to create and edit Python scripts will be able to use any functions and classes defined in the module. In some cases, you may want to create a custom module that just imports a subset of names from another module and make that custom module available to reduce the risk of abuse.

The easiest way to make modules available to Python scripts on your site is to create a new directory in your Products directory containing an __init__.py file. At Zope startup time, this “product” will be imported, and any module assertions you make in the __init__.py will take effect. Here’s how to do it:

  • In your Products directory (either in lib/python of your Zope installation or in the root of your Zope install, depending on your deployment model), create a new directory with a name like “GlobalModules”.

  • In the new directory, create a file named __init__.py.

  • Edit the __init__.py file, and add calls to the ‘allow_module’ function (located in the AccessControl.SecurityInfo module), passing the names of modules to be enabled for use by scripts. For example:

    # Global module assertions for Python scripts
    from AccessControl.SecurityInfo import allow_module
    
    allow_module('base64')
    allow_module('re')
    allow_module('DateTime.DateTime')

    This example adds the modules ‘base64’, ‘re’ and the ‘DateTime’ module in the ‘DateTime’ package for use by Python scripts. Note that for packages (dotted names), each module in the package path will become available to script objects.

  • Restart your Zope server. After restarting, the modules you enabled in your custom product will be available to Python scripts.

Placing security assertions within the package/module you are trying to import will not work unless that package/module is located in your Products directory.

This is because that package/module would have to be imported for its included security assertions to take effect, but to do that would require importing a module without any security declarations, which defeats the point of the restricted Python environment.

Products work differently as they are imported at Zope startup. By placing a package/module in your Products directory, you are asserting, among other things, that it is safe for Zope to check that package/module for security assertions. As a result, please be careful when place packages or modules that are not Zope Products in the Products directory.

Changelog

5.4 (2026-10-28)

  • Deprecate BBB shims for allow_class and allow_module

  • Add support for Python 3.15.

  • Drop support for Python 3.10.

5.3.1 (2026-08-20)

  • Switch to PyPI Trusted Publishing.

5.3 (2026-08-20)

  • Add support for Python 3.15.

  • Move package metadata from setup.py to pyproject.toml.

5.2 (2025-11-20)

  • Switch to PEP 420 native namespace.

  • Add support for Python 3.14.

  • Drop support for Python 3.8 and 3.9.

5.1 (2024-10-16)

  • Fix behavior when uploading no file in Zope >= 5.8.1.

  • Add support for Python 3.12 and 3.13

  • Drop support for Python 3.7.

  • Show Python Scripts source code in tracebacks. #64

5.0 (2023-02-01)

  • Drop support for Python 2.7, 3.5, 3.6.

4.15 (2022-12-16)

  • Fix insidious buildout configuration bug for tests against Zope 4.

  • Add support for Python 3.11.

4.14 (2022-07-13)

  • Add support for Python 3.10.

  • Remove unused classes SecurityManager and RivilegedUser from .tests.testBindings.

4.13 (2021-07-02)

  • Make sure “Manager” users can always modify proxy roles (#50)

  • Add support for Python 3.9.

  • Update configuration for version 5 of isort.

4.12 (2020-06-03)

  • Add a file parameter to factory function manage_addPythonScript (#45)

  • Fix TypeError when updating an existing script from a file (#43)

4.11 (2020-02-11)

  • Fix PUT issues with string encoding.

4.10 (2020-02-11)

  • Override manage_DAVget to get correct editable sources (#40)

4.9 (2019-10-09)

  • Prevent ResourceWarning/Error by closing default contents file (#39)

4.8 (2019-09-04)

  • Show proper error message for not allowed identifiers. (#33)

  • Restore History ZMI tab as Zope is supporting it again. (#38)

4.7 (2019-05-21)

  • Make sure a template’s _body attribute is a native string in Python 3 (#30)

4.6 (2019-04-15)

  • Fix a serious error that prevents page templates from compiling (#27)

4.5 (2019-04-07)

  • Provide a single default script content template for Python 2 and 3

  • Prevent deprecation warning by using importlib instead of imp (#24)

  • Prevent syntax warning due to outdated default script content (#26)

  • Allow for entering a title when adding a Python Script (#25)

  • adding badges to the README for GitHub and PyPI

  • Package metadata cleanups

  • cleaned up tox test configuration

4.4 (2019-03-08)

  • Specify supported Python versions using python_requires in setup.py (Zope#481)

  • Add support for Python 3.8

4.3 (2019-02-09)

  • Show a message instead of exception for empty file upload (#21)

4.2 (2018-10-11)

  • Add support for Python 3.7.

  • Drop support for Python 3.4.

  • Force recompilation of scripts as the compiled code is now stored on __code__ instead of func_code.

  • Add a Python 3 compatible default script. (#10)

  • Fix security declaration for Products.PythonScripts.standard which was broken since version 3.0. (Zope#209)

  • Fix HTTP-500 error which occurred when entering code containing a syntax error in a PythonScript. It is now rendered as error message like other errors. (#11)

  • Update the tests to RestrictedPython >= 4.0b4, thus requiring at lest this version. (#17)

  • Update HTML code of ZMI for Bootstrap ZMI. (#16)

  • Drop support for historical versions which no longer exist since Zope 4.0a2.

4.1 (2017-06-19)

  • Add support for Python 3.4 up to 3.6.

4.0.1 (2017-02-06)

  • Remove bobobase_modification_time from edit template.

4.0 (2016-08-06)

  • Add compatibility with webdav changes in Zope 4.0a2.

3.0 (2016-07-18)

  • Remove HelpSys support.

2.13.2 (2012-09-09)

  • Correct module security declaration for our standard module.

2.13.1 (2012-09-09)

  • LP #1047318: Adjust tests.

2.13.0 (2010-07-10)

  • Released as separate package.

Metadata

Release files for Products.PythonScripts 5.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for Products.PythonScripts 5.4
File Size Uploaded Provenance
products_pythonscripts-5.4.tar.gz 30.6 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for Products.PythonScripts 5.4
File Interpreter ABI Platform
products_pythonscripts-5.4-py3-none-any.whl Python 3 none any Details

Total release size: 64.4 kB

Release files / products_pythonscripts-5.4.tar.gz

Download URL products_pythonscripts-5.4.tar.gz
Size 30.6 kB
Tags Source
SHA-256 checksum
How to use checksums
a0320c14c6e181639540dfd3bbc90e61c1a4739c155eecf63901f661dd9dca1a
BLAKE2b-256 checksum
How to use checksums
5977f53002ed8615d3e43a7322a04d175e2d848343ec86a2248cba24e8c2ea16
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 28, 2026.

Transparency log

Release files / products_pythonscripts-5.4-py3-none-any.whl

Download URL products_pythonscripts-5.4-py3-none-any.whl
Size 33.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2dbf1bdc730c4665df24ee7a5aab53266eb13ea85fa8006c5b68312ff4e8c68a
BLAKE2b-256 checksum
How to use checksums
dadbe5f913bb83c9d3d2a2f702fc409bb00a8850ef9a3ae45db73386d17d57dd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 28, 2026.

Transparency log

Security for Products.PythonScripts 5.4

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for products_pythonscripts-5.4.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 28, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page