##// END OF EJS Templates
rust-cpython: add panicking version of borrow_mut() and use it...
rust-cpython: add panicking version of borrow_mut() and use it The original borrow_mut() is renamed to try_borrow_mut(). Since leak_immutable() no longer incref the borrow count, the caller should know if the underlying value is borrowed or not. No Python world is involved. That's why we can simply use the panicking borrow_mut().

File last commit:

r44446:de783805 default
r44685:2a24ead0 default
Show More
__init__.py
75 lines | 2.4 KiB | text/x-python | PythonLexer
Gregory Szorc
zstandard: vendor python-zstandard 0.9.0...
r37513 # Copyright (c) 2017-present, Gregory Szorc
# All rights reserved.
#
# This software may be modified and distributed under the terms
# of the BSD license. See the LICENSE file for details.
"""Python interface to the Zstandard (zstd) compression library."""
from __future__ import absolute_import, unicode_literals
# This module serves 2 roles:
#
# 1) Export the C or CFFI "backend" through a central module.
# 2) Implement additional functionality built on top of C or CFFI backend.
import os
import platform
# Some Python implementations don't support C extensions. That's why we have
# a CFFI implementation in the first place. The code here import one of our
# "backends" then re-exports the symbols from this module. For convenience,
# we support falling back to the CFFI backend if the C extension can't be
# imported. But for performance reasons, we only do this on unknown Python
# implementation. Notably, for CPython we require the C extension by default.
# Because someone will inevitably want special behavior, the behavior is
# configurable via an environment variable. A potentially better way to handle
# this is to import a special ``__importpolicy__`` module or something
# defining a variable and `setup.py` could write the file with whatever
# policy was specified at build time. Until someone needs it, we go with
# the hacky but simple environment variable approach.
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446 _module_policy = os.environ.get("PYTHON_ZSTANDARD_IMPORT_POLICY", "default")
Gregory Szorc
zstandard: vendor python-zstandard 0.9.0...
r37513
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446 if _module_policy == "default":
if platform.python_implementation() in ("CPython",):
Gregory Szorc
zstandard: vendor python-zstandard 0.9.0...
r37513 from zstd import *
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446
backend = "cext"
elif platform.python_implementation() in ("PyPy",):
Gregory Szorc
zstandard: vendor python-zstandard 0.11...
r42237 from .cffi import *
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446
backend = "cffi"
Gregory Szorc
zstandard: vendor python-zstandard 0.9.0...
r37513 else:
try:
from zstd import *
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446
backend = "cext"
Gregory Szorc
zstandard: vendor python-zstandard 0.9.0...
r37513 except ImportError:
Gregory Szorc
zstandard: vendor python-zstandard 0.11...
r42237 from .cffi import *
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446
backend = "cffi"
elif _module_policy == "cffi_fallback":
Gregory Szorc
zstandard: vendor python-zstandard 0.9.0...
r37513 try:
from zstd import *
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446
backend = "cext"
Gregory Szorc
zstandard: vendor python-zstandard 0.9.0...
r37513 except ImportError:
Gregory Szorc
zstandard: vendor python-zstandard 0.11...
r42237 from .cffi import *
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446
backend = "cffi"
elif _module_policy == "cext":
Gregory Szorc
zstandard: vendor python-zstandard 0.9.0...
r37513 from zstd import *
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446
backend = "cext"
elif _module_policy == "cffi":
Gregory Szorc
zstandard: vendor python-zstandard 0.11...
r42237 from .cffi import *
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446
backend = "cffi"
Gregory Szorc
zstandard: vendor python-zstandard 0.9.0...
r37513 else:
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446 raise ImportError(
"unknown module import policy: %s; use default, cffi_fallback, "
"cext, or cffi" % _module_policy
)
Gregory Szorc
zstandard: vendor python-zstandard 0.10.1...
r40157
# Keep this in sync with python-zstandard.h.
Gregory Szorc
zstandard: vendor python-zstandard 0.13.0...
r44446 __version__ = "0.13.0"