RestrictedPython


NameRestrictedPython JSON
Version 7.1 PyPI version JSON
download
home_pagehttps://github.com/zopefoundation/RestrictedPython
SummaryRestrictedPython is a defined subset of the Python language which allows to provide a program input into a trusted environment.
upload_time2024-03-14 07:13:52
maintainer
docs_urlNone
authorZope Foundation and Contributors
requires_python>=3.7, <3.13
licenseZPL 2.1
keywords restricted execution security untrusted code
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            .. image:: https://github.com/zopefoundation/RestrictedPython/actions/workflows/tests.yml/badge.svg
    :target: https://github.com/zopefoundation/RestrictedPython/actions/workflows/tests.yml

.. image:: https://coveralls.io/repos/github/zopefoundation/RestrictedPython/badge.svg?branch=master
    :target: https://coveralls.io/github/zopefoundation/RestrictedPython?branch=master

.. image:: https://readthedocs.org/projects/restrictedpython/badge/
    :target: https://restrictedpython.readthedocs.org/
    :alt: Documentation Status

.. image:: https://img.shields.io/pypi/v/RestrictedPython.svg
    :target: https://pypi.org/project/RestrictedPython/
    :alt: Current version on PyPI

.. image:: https://img.shields.io/pypi/pyversions/RestrictedPython.svg
    :target: https://pypi.org/project/RestrictedPython/
    :alt: Supported Python versions

.. image:: https://github.com/zopefoundation/RestrictedPython/raw/master/docs/logo.jpg

================
RestrictedPython
================

RestrictedPython is a tool that helps to define a subset of the Python language which allows to provide a program input into a trusted environment.
RestrictedPython is not a sandbox system or a secured environment, but it helps to define a trusted environment and execute untrusted code inside of it.

.. warning::

   RestrictedPython only supports CPython. It does _not_ support PyPy and other Python implementations as it cannot provide its restrictions there.

For full documentation please see http://restrictedpython.readthedocs.io/.

Example
=======

To give a basic understanding what RestrictedPython does here two examples:

An unproblematic code example
-----------------------------

Python allows you to execute a large set of commands.
This would not harm any system.

.. code-block:: pycon

    >>> from RestrictedPython import compile_restricted
    >>> from RestrictedPython import safe_globals
    >>>
    >>> source_code = """
    ... def example():
    ...     return 'Hello World!'
    ... """
    >>>
    >>> loc = {}
    >>> byte_code = compile_restricted(source_code, '<inline>', 'exec')
    >>> exec(byte_code, safe_globals, loc)
    >>>
    >>> loc['example']()
    'Hello World!'

Problematic code example
------------------------

This example directly executed in Python could harm your system.

.. code-block:: pycon

    >>> from RestrictedPython import compile_restricted
    >>> from RestrictedPython import safe_globals
    >>>
    >>> source_code = """
    ... import os
    ...
    ... os.listdir('/')
    ... """
    >>> byte_code = compile_restricted(source_code, '<inline>', 'exec')
    >>> exec(byte_code, safe_globals, {})
    Traceback (most recent call last):
    ImportError: __import__ not found

Contributing to RestrictedPython
--------------------------------

If you want to help maintain RestrictedPython and contribute, please refer to
the documentation `Contributing page
<https://restrictedpython.readthedocs.io/en/latest/contributing/index.html>`_.

Changes
=======

7.1 (2024-03-14)
----------------

- Add support for the matmul (``@``) operator.


7.0 (2023-11-17)
----------------

Backwards incompatible changes
++++++++++++++++++++++++++++++

- Drop support for Python 3.6.

Features
++++++++

- Officially support Python 3.12.

Fixes
+++++

- Prevent DeprecationWarnings from ``ast.Str`` and ``ast.Num`` on Python 3.12

- Forbid using some attributes providing access to restricted Python internals.
  (CVE-2023-37271)

- Fix information disclosure problems through Python's "format" functionality
  (``format`` and ``format_map`` methods on ``str`` and its instances,
  ``string.Formatter``). (CVE-2023-41039)


6.0 (2022-11-03)
----------------

Backwards incompatible changes
++++++++++++++++++++++++++++++

- Drop support for Python 2.7 and 3.5.

Features
++++++++

- Officially support Python 3.11.

- Allow to use the Python 3.11 feature of exception groups and except\*
  (PEP 654).


5.2 (2021-11-19)
----------------

- Document that ``__name__`` is needed to define classes.

- Add support for Python 3.10. Auditing the Python 3.10 change log did not
  reveal any changes which require actions in RestrictedPython.

- Avoid deprecation warnings when using Python 3.8+.
  (`#192 <https://github.com/zopefoundation/RestrictedPython/issues/192>`_)


5.1 (2020-10-07)
----------------

Features
++++++++

- Add support for (Python 3.8+) assignment expressions (i.e. the ``:=`` operator)

- Add support for Python 3.9 after checking the security implications of the
  syntax changes made in that version.

- Add support for the ``bytes`` and ``sorted`` builtins
  (`#186 <https://github.com/zopefoundation/RestrictedPython/issues/186>`_)

Documentation
+++++++++++++

- Document parameter ``mode`` for the ``compile_restricted`` functions
  (`#157 <https://github.com/zopefoundation/RestrictedPython/issues/157>`_)

- Fix documentation for ``compile_restricted_function``
  (`#158 <https://github.com/zopefoundation/RestrictedPython/issues/158>`_)

Fixes
+++++

- Fix ``compile_restricted_function`` with SyntaxErrors that have no text
  (`#181 <https://github.com/zopefoundation/RestrictedPython/issues/181>`_)

- Drop install dependency on ``setuptools``.
  (`#189 <https://github.com/zopefoundation/RestrictedPython/issues/189>`_)


5.0 (2019-09-03)
----------------

Breaking changes
++++++++++++++++

- Revert the allowance of the ``...`` (Ellipsis) statement, as of 4.0. It is
  not needed to support Python 3.8.
  The security implications of the Ellipsis Statement is not 100 % clear and is
  not checked. ``...`` (Ellipsis) is disallowed again.

Features
++++++++

- Add support for f-strings in Python 3.6+.
  (`#123 <https://github.com/zopefoundation/RestrictedPython/issues/123>`_)


4.0 (2019-05-10)
----------------

Changes since 3.6.0:

Breaking changes
++++++++++++++++

- The ``compile_restricted*`` functions now return a
  ``namedtuple CompileResult`` instead of a simple ``tuple``.

- Drop the old implementation of version 3.x: `RCompile.py`,
  `SelectCompiler.py`, `MutatingWorker.py`, `RestrictionMutator.py` and
  `tests/verify.py`.

- Drop support for long-deprecated ``sets`` module.

Security related issues
+++++++++++++++++++++++

- RestrictedPython now ships with a default implementation for
  ``_getattr_`` which prevents from using the ``format()`` method on
  str/unicode as it is not safe, see:
  http://lucumr.pocoo.org/2016/12/29/careful-with-str-format/

  **Caution:** If you do not already have secured the access to this
  ``format()`` method in your ``_getattr_`` implementation use
  ``RestrictedPython.Guards.safer_getattr()`` in your implementation to
  benefit from this fix.

Features
++++++++

- Mostly complete rewrite based on Python AST module.
  [loechel (Alexander Loechel), icemac (Michael Howitz),
  stephan-hof (Stephan Hofmockel), tlotze (Thomas Lotze)]

- Add support for Python 3.5, 3.6, 3.7.

- Add preliminary support for Python 3.8. as of 3.8.0a3 is released.

- Warn when using another Python implementation than CPython as it is not safe
  to use RestrictedPython with other versions than CPyton.
  See https://bitbucket.org/pypy/pypy/issues/2653 for PyPy.

- Allow the ``...`` (Ellipsis) statement. It is needed to support Python 3.8.

- Allow `yield` and `yield from` statements.
  Generator functions would now work in RestrictedPython.

- Allow the following magic methods to be defined on classes.
  (`#104 <https://github.com/zopefoundation/RestrictedPython/issues/104>`_)
  They cannot be called directly but by the built-in way to use them (e. g.
  class instantiation, or comparison):

  + ``__init__``
  + ``__contains__``
  + ``__lt__``
  + ``__le__``
  + ``__eq__``
  + ``__ne__``
  + ``__gt__``
  + ``__ge__``

- Imports like ``from a import *`` (so called star imports) are now forbidden
  as they allow to import names starting with an underscore which could
  override protected build-ins.
  (`#102 <https://github.com/zopefoundation/RestrictedPython/issues/102>`_)

- Allow to use list comprehensions in the default implementation of
  ``RestrictionCapableEval.eval()``.

- Switch to pytest as test runner.

- Bring test coverage to 100 %.

Bug fixes
+++++++++

- Improve `.Guards.safer_getattr` to prevent accessing names starting with
  underscore.
  (`#142 <https://github.com/zopefoundation/RestrictedPython/issues/142>`_)


3.6.0 (2010-07-09)
------------------

- Add name check for names assigned during imports using the
  ``from x import y`` format.

- Add test for name check when assigning an alias using multiple-context
  ``with`` statements in Python 2.7.

- Add tests for protection of the iterators for dict and set comprehensions
  in Python 2.7.

3.6.0a1 (2010-06-05)
--------------------

- Remove support for ``DocumentTemplate.sequence`` - this is handled in the
  DocumentTemplate package itself.

3.5.2 (2010-04-30)
------------------

- Remove a testing dependency on ``zope.testing``.

3.5.1 (2009-03-17)
------------------

- Add tests for ``Utilities`` module.

- Filter DeprecationWarnings when importing Python's ``sets`` module.

3.5.0 (2009-02-09)
------------------

- Drop legacy support for Python 2.1 / 2.2 (``__future__`` imports
  of ``nested_scopes`` / ``generators``.).

3.4.3 (2008-10-26)
------------------

- Fix deprecation warning: ``with`` is now a reserved keyword on
  Python 2.6. That means RestrictedPython should run on Python 2.6
  now. Thanks to Ranjith Kannikara, GSoC Student for the patch.

- Add tests for ternary if expression and for ``with`` keyword and
  context managers.

3.4.2 (2007-07-28)
------------------

- Changed homepage URL to the PyPI site

- Improve ``README.txt``.

3.4.1 (2007-06-23)
------------------

- Fix http://www.zope.org/Collectors/Zope/2295: Bare conditional in
  a Zope 2 PythonScript followed by a comment causes SyntaxError.

3.4.0 (2007-06-04)
------------------

- RestrictedPython now has its own release cycle as a separate project.

- Synchronized with RestrictedPython from Zope 2 tree.

3.2.0 (2006-01-05)
------------------

- Corresponds to the verison of the RestrictedPython package shipped
  as part of the Zope 3.2.0 release.

- No changes from 3.1.0.

3.1.0 (2005-10-03)
------------------

- Corresponds to the verison of the RestrictedPython package shipped
  as part of the Zope 3.1.0 release.

- Remove unused fossil module, ``SafeMapping``.

- Replaced use of deprecated ``whrandom`` module with ``random`` (aliased
  to ``whrandom`` for backward compatibility).

3.0.0 (2004-11-07)
------------------

- Corresponds to the verison of the RestrictedPython package shipped
  as part of the Zope X3.0.0 release.

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/zopefoundation/RestrictedPython",
    "name": "RestrictedPython",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.7, <3.13",
    "maintainer_email": "",
    "keywords": "restricted execution security untrusted code",
    "author": "Zope Foundation and Contributors",
    "author_email": "zope-dev@zope.org",
    "download_url": "https://files.pythonhosted.org/packages/c6/cb/286676b91ad6996df402b8dc2e8e3697c17dc00145d0e93b87f0c46452eb/RestrictedPython-7.1.tar.gz",
    "platform": null,
    "description": ".. image:: https://github.com/zopefoundation/RestrictedPython/actions/workflows/tests.yml/badge.svg\n    :target: https://github.com/zopefoundation/RestrictedPython/actions/workflows/tests.yml\n\n.. image:: https://coveralls.io/repos/github/zopefoundation/RestrictedPython/badge.svg?branch=master\n    :target: https://coveralls.io/github/zopefoundation/RestrictedPython?branch=master\n\n.. image:: https://readthedocs.org/projects/restrictedpython/badge/\n    :target: https://restrictedpython.readthedocs.org/\n    :alt: Documentation Status\n\n.. image:: https://img.shields.io/pypi/v/RestrictedPython.svg\n    :target: https://pypi.org/project/RestrictedPython/\n    :alt: Current version on PyPI\n\n.. image:: https://img.shields.io/pypi/pyversions/RestrictedPython.svg\n    :target: https://pypi.org/project/RestrictedPython/\n    :alt: Supported Python versions\n\n.. image:: https://github.com/zopefoundation/RestrictedPython/raw/master/docs/logo.jpg\n\n================\nRestrictedPython\n================\n\nRestrictedPython is a tool that helps to define a subset of the Python language which allows to provide a program input into a trusted environment.\nRestrictedPython is not a sandbox system or a secured environment, but it helps to define a trusted environment and execute untrusted code inside of it.\n\n.. warning::\n\n   RestrictedPython only supports CPython. It does _not_ support PyPy and other Python implementations as it cannot provide its restrictions there.\n\nFor full documentation please see http://restrictedpython.readthedocs.io/.\n\nExample\n=======\n\nTo give a basic understanding what RestrictedPython does here two examples:\n\nAn unproblematic code example\n-----------------------------\n\nPython allows you to execute a large set of commands.\nThis would not harm any system.\n\n.. code-block:: pycon\n\n    >>> from RestrictedPython import compile_restricted\n    >>> from RestrictedPython import safe_globals\n    >>>\n    >>> source_code = \"\"\"\n    ... def example():\n    ...     return 'Hello World!'\n    ... \"\"\"\n    >>>\n    >>> loc = {}\n    >>> byte_code = compile_restricted(source_code, '<inline>', 'exec')\n    >>> exec(byte_code, safe_globals, loc)\n    >>>\n    >>> loc['example']()\n    'Hello World!'\n\nProblematic code example\n------------------------\n\nThis example directly executed in Python could harm your system.\n\n.. code-block:: pycon\n\n    >>> from RestrictedPython import compile_restricted\n    >>> from RestrictedPython import safe_globals\n    >>>\n    >>> source_code = \"\"\"\n    ... import os\n    ...\n    ... os.listdir('/')\n    ... \"\"\"\n    >>> byte_code = compile_restricted(source_code, '<inline>', 'exec')\n    >>> exec(byte_code, safe_globals, {})\n    Traceback (most recent call last):\n    ImportError: __import__ not found\n\nContributing to RestrictedPython\n--------------------------------\n\nIf you want to help maintain RestrictedPython and contribute, please refer to\nthe documentation `Contributing page\n<https://restrictedpython.readthedocs.io/en/latest/contributing/index.html>`_.\n\nChanges\n=======\n\n7.1 (2024-03-14)\n----------------\n\n- Add support for the matmul (``@``) operator.\n\n\n7.0 (2023-11-17)\n----------------\n\nBackwards incompatible changes\n++++++++++++++++++++++++++++++\n\n- Drop support for Python 3.6.\n\nFeatures\n++++++++\n\n- Officially support Python 3.12.\n\nFixes\n+++++\n\n- Prevent DeprecationWarnings from ``ast.Str`` and ``ast.Num`` on Python 3.12\n\n- Forbid using some attributes providing access to restricted Python internals.\n  (CVE-2023-37271)\n\n- Fix information disclosure problems through Python's \"format\" functionality\n  (``format`` and ``format_map`` methods on ``str`` and its instances,\n  ``string.Formatter``). (CVE-2023-41039)\n\n\n6.0 (2022-11-03)\n----------------\n\nBackwards incompatible changes\n++++++++++++++++++++++++++++++\n\n- Drop support for Python 2.7 and 3.5.\n\nFeatures\n++++++++\n\n- Officially support Python 3.11.\n\n- Allow to use the Python 3.11 feature of exception groups and except\\*\n  (PEP 654).\n\n\n5.2 (2021-11-19)\n----------------\n\n- Document that ``__name__`` is needed to define classes.\n\n- Add support for Python 3.10. Auditing the Python 3.10 change log did not\n  reveal any changes which require actions in RestrictedPython.\n\n- Avoid deprecation warnings when using Python 3.8+.\n  (`#192 <https://github.com/zopefoundation/RestrictedPython/issues/192>`_)\n\n\n5.1 (2020-10-07)\n----------------\n\nFeatures\n++++++++\n\n- Add support for (Python 3.8+) assignment expressions (i.e. the ``:=`` operator)\n\n- Add support for Python 3.9 after checking the security implications of the\n  syntax changes made in that version.\n\n- Add support for the ``bytes`` and ``sorted`` builtins\n  (`#186 <https://github.com/zopefoundation/RestrictedPython/issues/186>`_)\n\nDocumentation\n+++++++++++++\n\n- Document parameter ``mode`` for the ``compile_restricted`` functions\n  (`#157 <https://github.com/zopefoundation/RestrictedPython/issues/157>`_)\n\n- Fix documentation for ``compile_restricted_function``\n  (`#158 <https://github.com/zopefoundation/RestrictedPython/issues/158>`_)\n\nFixes\n+++++\n\n- Fix ``compile_restricted_function`` with SyntaxErrors that have no text\n  (`#181 <https://github.com/zopefoundation/RestrictedPython/issues/181>`_)\n\n- Drop install dependency on ``setuptools``.\n  (`#189 <https://github.com/zopefoundation/RestrictedPython/issues/189>`_)\n\n\n5.0 (2019-09-03)\n----------------\n\nBreaking changes\n++++++++++++++++\n\n- Revert the allowance of the ``...`` (Ellipsis) statement, as of 4.0. It is\n  not needed to support Python 3.8.\n  The security implications of the Ellipsis Statement is not 100 % clear and is\n  not checked. ``...`` (Ellipsis) is disallowed again.\n\nFeatures\n++++++++\n\n- Add support for f-strings in Python 3.6+.\n  (`#123 <https://github.com/zopefoundation/RestrictedPython/issues/123>`_)\n\n\n4.0 (2019-05-10)\n----------------\n\nChanges since 3.6.0:\n\nBreaking changes\n++++++++++++++++\n\n- The ``compile_restricted*`` functions now return a\n  ``namedtuple CompileResult`` instead of a simple ``tuple``.\n\n- Drop the old implementation of version 3.x: `RCompile.py`,\n  `SelectCompiler.py`, `MutatingWorker.py`, `RestrictionMutator.py` and\n  `tests/verify.py`.\n\n- Drop support for long-deprecated ``sets`` module.\n\nSecurity related issues\n+++++++++++++++++++++++\n\n- RestrictedPython now ships with a default implementation for\n  ``_getattr_`` which prevents from using the ``format()`` method on\n  str/unicode as it is not safe, see:\n  http://lucumr.pocoo.org/2016/12/29/careful-with-str-format/\n\n  **Caution:** If you do not already have secured the access to this\n  ``format()`` method in your ``_getattr_`` implementation use\n  ``RestrictedPython.Guards.safer_getattr()`` in your implementation to\n  benefit from this fix.\n\nFeatures\n++++++++\n\n- Mostly complete rewrite based on Python AST module.\n  [loechel (Alexander Loechel), icemac (Michael Howitz),\n  stephan-hof (Stephan Hofmockel), tlotze (Thomas Lotze)]\n\n- Add support for Python 3.5, 3.6, 3.7.\n\n- Add preliminary support for Python 3.8. as of 3.8.0a3 is released.\n\n- Warn when using another Python implementation than CPython as it is not safe\n  to use RestrictedPython with other versions than CPyton.\n  See https://bitbucket.org/pypy/pypy/issues/2653 for PyPy.\n\n- Allow the ``...`` (Ellipsis) statement. It is needed to support Python 3.8.\n\n- Allow `yield` and `yield from` statements.\n  Generator functions would now work in RestrictedPython.\n\n- Allow the following magic methods to be defined on classes.\n  (`#104 <https://github.com/zopefoundation/RestrictedPython/issues/104>`_)\n  They cannot be called directly but by the built-in way to use them (e. g.\n  class instantiation, or comparison):\n\n  + ``__init__``\n  + ``__contains__``\n  + ``__lt__``\n  + ``__le__``\n  + ``__eq__``\n  + ``__ne__``\n  + ``__gt__``\n  + ``__ge__``\n\n- Imports like ``from a import *`` (so called star imports) are now forbidden\n  as they allow to import names starting with an underscore which could\n  override protected build-ins.\n  (`#102 <https://github.com/zopefoundation/RestrictedPython/issues/102>`_)\n\n- Allow to use list comprehensions in the default implementation of\n  ``RestrictionCapableEval.eval()``.\n\n- Switch to pytest as test runner.\n\n- Bring test coverage to 100 %.\n\nBug fixes\n+++++++++\n\n- Improve `.Guards.safer_getattr` to prevent accessing names starting with\n  underscore.\n  (`#142 <https://github.com/zopefoundation/RestrictedPython/issues/142>`_)\n\n\n3.6.0 (2010-07-09)\n------------------\n\n- Add name check for names assigned during imports using the\n  ``from x import y`` format.\n\n- Add test for name check when assigning an alias using multiple-context\n  ``with`` statements in Python 2.7.\n\n- Add tests for protection of the iterators for dict and set comprehensions\n  in Python 2.7.\n\n3.6.0a1 (2010-06-05)\n--------------------\n\n- Remove support for ``DocumentTemplate.sequence`` - this is handled in the\n  DocumentTemplate package itself.\n\n3.5.2 (2010-04-30)\n------------------\n\n- Remove a testing dependency on ``zope.testing``.\n\n3.5.1 (2009-03-17)\n------------------\n\n- Add tests for ``Utilities`` module.\n\n- Filter DeprecationWarnings when importing Python's ``sets`` module.\n\n3.5.0 (2009-02-09)\n------------------\n\n- Drop legacy support for Python 2.1 / 2.2 (``__future__`` imports\n  of ``nested_scopes`` / ``generators``.).\n\n3.4.3 (2008-10-26)\n------------------\n\n- Fix deprecation warning: ``with`` is now a reserved keyword on\n  Python 2.6. That means RestrictedPython should run on Python 2.6\n  now. Thanks to Ranjith Kannikara, GSoC Student for the patch.\n\n- Add tests for ternary if expression and for ``with`` keyword and\n  context managers.\n\n3.4.2 (2007-07-28)\n------------------\n\n- Changed homepage URL to the PyPI site\n\n- Improve ``README.txt``.\n\n3.4.1 (2007-06-23)\n------------------\n\n- Fix http://www.zope.org/Collectors/Zope/2295: Bare conditional in\n  a Zope 2 PythonScript followed by a comment causes SyntaxError.\n\n3.4.0 (2007-06-04)\n------------------\n\n- RestrictedPython now has its own release cycle as a separate project.\n\n- Synchronized with RestrictedPython from Zope 2 tree.\n\n3.2.0 (2006-01-05)\n------------------\n\n- Corresponds to the verison of the RestrictedPython package shipped\n  as part of the Zope 3.2.0 release.\n\n- No changes from 3.1.0.\n\n3.1.0 (2005-10-03)\n------------------\n\n- Corresponds to the verison of the RestrictedPython package shipped\n  as part of the Zope 3.1.0 release.\n\n- Remove unused fossil module, ``SafeMapping``.\n\n- Replaced use of deprecated ``whrandom`` module with ``random`` (aliased\n  to ``whrandom`` for backward compatibility).\n\n3.0.0 (2004-11-07)\n------------------\n\n- Corresponds to the verison of the RestrictedPython package shipped\n  as part of the Zope X3.0.0 release.\n",
    "bugtrack_url": null,
    "license": "ZPL 2.1",
    "summary": "RestrictedPython is a defined subset of the Python language which allows to provide a program input into a trusted environment.",
    "version": "7.1",
    "project_urls": {
        "Documentation": "https://restrictedpython.readthedocs.io/",
        "Homepage": "https://github.com/zopefoundation/RestrictedPython",
        "Source": "https://github.com/zopefoundation/RestrictedPython",
        "Tracker": "https://github.com/zopefoundation/RestrictedPython/issues"
    },
    "split_keywords": [
        "restricted",
        "execution",
        "security",
        "untrusted",
        "code"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8698f9559cdb2b78de54f6986cd796d5aa292c961cdf40b46f8453a2d9bf2de7",
                "md5": "c5a9c052bf5c8f9e027e043ea7939bc7",
                "sha256": "56d0c73e5de1757702053383601b0fcd3fb2e428039ee1df860409ad67b17d2b"
            },
            "downloads": -1,
            "filename": "RestrictedPython-7.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "c5a9c052bf5c8f9e027e043ea7939bc7",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.7, <3.13",
            "size": 26705,
            "upload_time": "2024-03-14T07:13:48",
            "upload_time_iso_8601": "2024-03-14T07:13:48.773599Z",
            "url": "https://files.pythonhosted.org/packages/86/98/f9559cdb2b78de54f6986cd796d5aa292c961cdf40b46f8453a2d9bf2de7/RestrictedPython-7.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c6cb286676b91ad6996df402b8dc2e8e3697c17dc00145d0e93b87f0c46452eb",
                "md5": "1b0a638cd784ca7b06de70a884171855",
                "sha256": "875aeb51c139d78e34cef8605dc65309b449168060dd08551a1fe9edb47cb9a5"
            },
            "downloads": -1,
            "filename": "RestrictedPython-7.1.tar.gz",
            "has_sig": false,
            "md5_digest": "1b0a638cd784ca7b06de70a884171855",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7, <3.13",
            "size": 447327,
            "upload_time": "2024-03-14T07:13:52",
            "upload_time_iso_8601": "2024-03-14T07:13:52.348189Z",
            "url": "https://files.pythonhosted.org/packages/c6/cb/286676b91ad6996df402b8dc2e8e3697c17dc00145d0e93b87f0c46452eb/RestrictedPython-7.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-03-14 07:13:52",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "zopefoundation",
    "github_project": "RestrictedPython",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "tox": true,
    "lcname": "restrictedpython"
}
        
Elapsed time: 0.30292s