Fix: Windows DLL path lookup with Python >= 3.8
[babeltrace.git] / src / bindings / python / bt2 / bt2 / __init__.py
index 0e4342aa03537c6d57a850d2226f67017b5a7f97..73cc668831e9d33c15df0f23fe26a10e32c13e1b 100644 (file)
 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 # THE SOFTWARE.
 
+import os
 import sys
 
+# With Python ≥ 3.8 on Windows, the DLL lookup mechanism to load native
+# modules doesn't search the `PATH` environment variable like everything
+# else on this platform.
+#
+# See <https://docs.python.org/3/whatsnew/3.8.html#bpo-36085-whatsnew>.
+#
+# Restore this behaviour by doing it manually.
+if os.name == "nt" and sys.version_info >= (3, 8):
+    for path in os.getenv("PATH", "").split(os.pathsep):
+        if os.path.exists(path) and path != ".":
+            os.add_dll_directory(path)
+
+del os
+
 # import all public names
 from bt2.clock_class import ClockClassOffset
 from bt2.clock_snapshot import _ClockSnapshotConst
@@ -49,6 +64,8 @@ from bt2.field import _IntegerField
 from bt2.field import _UnsignedIntegerField
 from bt2.field import _SignedIntegerField
 from bt2.field import _RealField
+from bt2.field import _SinglePrecisionRealField
+from bt2.field import _DoublePrecisionRealField
 from bt2.field import _EnumerationField
 from bt2.field import _UnsignedEnumerationField
 from bt2.field import _SignedEnumerationField
@@ -65,6 +82,8 @@ from bt2.field import _IntegerFieldConst
 from bt2.field import _UnsignedIntegerFieldConst
 from bt2.field import _SignedIntegerFieldConst
 from bt2.field import _RealFieldConst
+from bt2.field import _SinglePrecisionRealFieldConst
+from bt2.field import _DoublePrecisionRealFieldConst
 from bt2.field import _EnumerationFieldConst
 from bt2.field import _UnsignedEnumerationFieldConst
 from bt2.field import _SignedEnumerationFieldConst
@@ -88,14 +107,20 @@ from bt2.field_class import _SignedEnumerationFieldClass
 from bt2.field_class import _StringFieldClass
 from bt2.field_class import _StructureFieldClass
 from bt2.field_class import _OptionFieldClass
+from bt2.field_class import _OptionWithSelectorFieldClass
+from bt2.field_class import _OptionWithBoolSelectorFieldClass
+from bt2.field_class import _OptionWithIntegerSelectorFieldClass
+from bt2.field_class import _OptionWithUnsignedIntegerSelectorFieldClass
+from bt2.field_class import _OptionWithSignedIntegerSelectorFieldClass
 from bt2.field_class import _VariantFieldClass
 from bt2.field_class import _VariantFieldClassWithoutSelector
-from bt2.field_class import _VariantFieldClassWithSelector
-from bt2.field_class import _VariantFieldClassWithUnsignedSelector
-from bt2.field_class import _VariantFieldClassWithSignedSelector
+from bt2.field_class import _VariantFieldClassWithIntegerSelector
+from bt2.field_class import _VariantFieldClassWithUnsignedIntegerSelector
+from bt2.field_class import _VariantFieldClassWithSignedIntegerSelector
 from bt2.field_class import _ArrayFieldClass
 from bt2.field_class import _StaticArrayFieldClass
 from bt2.field_class import _DynamicArrayFieldClass
+from bt2.field_class import _DynamicArrayWithLengthFieldFieldClass
 from bt2.field_class import _BoolFieldClassConst
 from bt2.field_class import _BitArrayFieldClassConst
 from bt2.field_class import _IntegerFieldClassConst
@@ -108,14 +133,20 @@ from bt2.field_class import _SignedEnumerationFieldClassConst
 from bt2.field_class import _StringFieldClassConst
 from bt2.field_class import _StructureFieldClassConst
 from bt2.field_class import _OptionFieldClassConst
+from bt2.field_class import _OptionWithSelectorFieldClassConst
+from bt2.field_class import _OptionWithBoolSelectorFieldClassConst
+from bt2.field_class import _OptionWithIntegerSelectorFieldClassConst
+from bt2.field_class import _OptionWithUnsignedIntegerSelectorFieldClassConst
+from bt2.field_class import _OptionWithSignedIntegerSelectorFieldClassConst
 from bt2.field_class import _VariantFieldClassConst
 from bt2.field_class import _VariantFieldClassWithoutSelectorConst
-from bt2.field_class import _VariantFieldClassWithSelectorConst
-from bt2.field_class import _VariantFieldClassWithUnsignedSelectorConst
-from bt2.field_class import _VariantFieldClassWithSignedSelectorConst
+from bt2.field_class import _VariantFieldClassWithIntegerSelectorConst
+from bt2.field_class import _VariantFieldClassWithUnsignedIntegerSelectorConst
+from bt2.field_class import _VariantFieldClassWithSignedIntegerSelectorConst
 from bt2.field_class import _ArrayFieldClassConst
 from bt2.field_class import _StaticArrayFieldClassConst
 from bt2.field_class import _DynamicArrayFieldClassConst
+from bt2.field_class import _DynamicArrayWithLengthFieldFieldClassConst
 from bt2.field_path import FieldPathScope
 from bt2.field_path import _IndexFieldPathItem
 from bt2.field_path import _CurrentArrayElementFieldPathItem
@@ -125,6 +156,10 @@ from bt2.integer_range_set import SignedIntegerRange
 from bt2.integer_range_set import UnsignedIntegerRange
 from bt2.integer_range_set import SignedIntegerRangeSet
 from bt2.integer_range_set import UnsignedIntegerRangeSet
+from bt2.integer_range_set import _SignedIntegerRangeConst
+from bt2.integer_range_set import _UnsignedIntegerRangeConst
+from bt2.integer_range_set import _SignedIntegerRangeSetConst
+from bt2.integer_range_set import _UnsignedIntegerRangeSetConst
 from bt2.interrupter import Interrupter
 from bt2.logging import LoggingLevel
 from bt2.logging import get_minimal_logging_level
@@ -230,10 +265,10 @@ class _MemoryError(_Error):
 
 
 class UnknownObject(Exception):
-    '''
+    """
     Raised when a component class handles a query for an object it doesn't
     know about.
-    '''
+    """
 
     pass
 
This page took 0.024913 seconds and 4 git commands to generate.