summaryrefslogtreecommitdiffstats
path: root/src/ansiblelint/_vendor
diff options
context:
space:
mode:
Diffstat (limited to 'src/ansiblelint/_vendor')
-rw-r--r--src/ansiblelint/_vendor/__init__.py48
l---------src/ansiblelint/_vendor/ansible_compat1
2 files changed, 49 insertions, 0 deletions
diff --git a/src/ansiblelint/_vendor/__init__.py b/src/ansiblelint/_vendor/__init__.py
new file mode 100644
index 0000000..9cd4ee3
--- /dev/null
+++ b/src/ansiblelint/_vendor/__init__.py
@@ -0,0 +1,48 @@
+import os
+import pkgutil
+import sys
+import warnings
+
+# This package exists to host vendored top-level Python packages for downstream packaging. Any Python packages
+# installed beneath this one will be masked from the Ansible loader, and available from the front of sys.path.
+# It is expected that the vendored packages will be loaded very early, so a warning will be fired on import of
+# the top-level ansible package if any packages beneath this are already loaded at that point.
+#
+# Python packages may be installed here during downstream packaging using something like:
+# pip install --upgrade -t (path to this dir) cryptography pyyaml packaging jinja2
+
+# mask vendored content below this package from being accessed as a subpackage
+__path__ = []
+
+
+def _ensure_vendored_path_entry() -> None:
+ """
+ Ensure that any downstream-bundled content beneath this package is available at the top of sys.path
+ """
+ # patch our vendored dir onto sys.path
+ vendored_path_entry = os.path.dirname(__file__)
+ vendored_module_names = {
+ m[1] for m in pkgutil.iter_modules([vendored_path_entry], "")
+ } # m[1] == m.name
+
+ if vendored_module_names:
+ # patch us early to load vendored deps transparently
+ if vendored_path_entry in sys.path:
+ # handle reload case by removing the existing entry, wherever it might be
+ sys.path.remove(vendored_path_entry)
+ sys.path.insert(0, vendored_path_entry)
+
+ already_loaded_vendored_modules = set(sys.modules.keys()).intersection(
+ vendored_module_names
+ )
+
+ if already_loaded_vendored_modules:
+ warnings.warn(
+ "One or more Python packages bundled by this ansible-lint distribution were already "
+ "loaded ({}). This may result in undefined behavior.".format(
+ ", ".join(sorted(already_loaded_vendored_modules))
+ )
+ )
+
+
+_ensure_vendored_path_entry()
diff --git a/src/ansiblelint/_vendor/ansible_compat b/src/ansiblelint/_vendor/ansible_compat
new file mode 120000
index 0000000..cd5012a
--- /dev/null
+++ b/src/ansiblelint/_vendor/ansible_compat
@@ -0,0 +1 @@
+../../../.projects/ansible-compat/src/ansible_compat \ No newline at end of file