Skip to content

Commit

Permalink
Do not allow module loading by default at all, add docstring.
Browse files Browse the repository at this point in the history
  • Loading branch information
scoder authored Nov 2, 2023
1 parent 6d1e877 commit b082b23
Showing 1 changed file with 13 additions and 9 deletions.
22 changes: 13 additions & 9 deletions lupa/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,18 @@

@contextmanager
def allow_lua_module_loading():
"""
A context manager for enabling binary Lua module loading when importing Lua.
This can only be used once within a Python runtime and must wrap the import of the
``lupa.*`` Lua module, e.g.::
with lupa.allow_lua_module_loading()
from lupa import lua54
lua = lua54.LuaRuntime()
lua.require('cjson')
"""
try:
from os import RTLD_NOW, RTLD_GLOBAL
except ImportError:
Expand Down Expand Up @@ -51,15 +63,7 @@ def _import_newest_lib():
# prefer Lua over LuaJIT and high versions over low versions.
module_name = max(modules, key=lambda m: (m[1] == 'lua', tuple(map(int, m[2] or '0'))))

# Allowing module loading using dlopenflags by default doesn't work when there are multiple
# Lua modules because the symbols collide with each other when loaded with RTLD_GLOBAL.
# Enable this by default only if there is exactly one lua module available.
if len(modules) == 1:
with allow_lua_module_loading():
_newest_lib = __import__(module_name[0], level=1, fromlist="*", globals=globals())
else:
_newest_lib = __import__(module_name[0], level=1, fromlist="*", globals=globals())

_newest_lib = __import__(module_name[0], level=1, fromlist="*", globals=globals())
return _newest_lib


Expand Down

0 comments on commit b082b23

Please sign in to comment.