Fix: Windows DLL path lookup with Python >= 3.8
[babeltrace.git] / src / bindings / python / bt2 / bt2 / __init__.py
CommitLineData
81447b5b
PP
1# The MIT License (MIT)
2#
f6a5e476 3# Copyright (c) 2017 Philippe Proulx <pproulx@efficios.com>
81447b5b
PP
4#
5# Permission is hereby granted, free of charge, to any person obtaining a copy
6# of this software and associated documentation files (the "Software"), to deal
7# in the Software without restriction, including without limitation the rights
8# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9# copies of the Software, and to permit persons to whom the Software is
10# furnished to do so, subject to the following conditions:
11#
12# The above copyright notice and this permission notice shall be included in
13# all copies or substantial portions of the Software.
14#
15# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21# THE SOFTWARE.
22
578f3d77 23import os
7868a02e
SM
24import sys
25
578f3d77
MJ
26# With Python ≥ 3.8 on Windows, the DLL lookup mechanism to load native
27# modules doesn't search the `PATH` environment variable like everything
28# else on this platform.
29#
30# See <https://docs.python.org/3/whatsnew/3.8.html#bpo-36085-whatsnew>.
31#
32# Restore this behaviour by doing it manually.
33if os.name == "nt" and sys.version_info >= (3, 8):
34 for path in os.getenv("PATH", "").split(os.pathsep):
35 if os.path.exists(path) and path != ".":
36 os.add_dll_directory(path)
37
38del os
39
c946c9de 40# import all public names
d016011d 41from bt2.clock_class import ClockClassOffset
a2519c12 42from bt2.clock_snapshot import _ClockSnapshotConst
d016011d 43from bt2.clock_snapshot import _UnknownClockSnapshot
5265f5e3
FD
44from bt2.component import _SourceComponentClassConst
45from bt2.component import _FilterComponentClassConst
46from bt2.component import _SinkComponentClassConst
47from bt2.component import _SourceComponentConst
48from bt2.component import _FilterComponentConst
49from bt2.component import _SinkComponentConst
d016011d 50from bt2.component import _UserSourceComponent
f6a5e476
PP
51from bt2.component import _UserFilterComponent
52from bt2.component import _UserSinkComponent
71e8e5c5 53from bt2.component_descriptor import ComponentDescriptor
d016011d
PP
54from bt2.error import ComponentClassType
55from bt2.error import _ErrorCause
56from bt2.error import _ComponentErrorCause
57from bt2.error import _ComponentClassErrorCause
58from bt2.error import _MessageIteratorErrorCause
614743a5 59from bt2.error import _Error
d016011d 60from bt2.event_class import EventClassLogLevel
a07f15cb 61from bt2.field import _BoolField
6b29f2d4 62from bt2.field import _BitArrayField
d016011d
PP
63from bt2.field import _IntegerField
64from bt2.field import _UnsignedIntegerField
65from bt2.field import _SignedIntegerField
66from bt2.field import _RealField
76276a81
FD
67from bt2.field import _SinglePrecisionRealField
68from bt2.field import _DoublePrecisionRealField
d016011d
PP
69from bt2.field import _EnumerationField
70from bt2.field import _UnsignedEnumerationField
71from bt2.field import _SignedEnumerationField
72from bt2.field import _StringField
73from bt2.field import _StructureField
84eba0d9 74from bt2.field import _OptionField
d016011d
PP
75from bt2.field import _VariantField
76from bt2.field import _ArrayField
77from bt2.field import _StaticArrayField
78from bt2.field import _DynamicArrayField
9cbe0c59
FD
79from bt2.field import _BoolFieldConst
80from bt2.field import _BitArrayFieldConst
81from bt2.field import _IntegerFieldConst
82from bt2.field import _UnsignedIntegerFieldConst
83from bt2.field import _SignedIntegerFieldConst
84from bt2.field import _RealFieldConst
76276a81
FD
85from bt2.field import _SinglePrecisionRealFieldConst
86from bt2.field import _DoublePrecisionRealFieldConst
9cbe0c59
FD
87from bt2.field import _EnumerationFieldConst
88from bt2.field import _UnsignedEnumerationFieldConst
89from bt2.field import _SignedEnumerationFieldConst
90from bt2.field import _StringFieldConst
91from bt2.field import _StructureFieldConst
92from bt2.field import _OptionFieldConst
93from bt2.field import _VariantFieldConst
94from bt2.field import _ArrayFieldConst
95from bt2.field import _StaticArrayFieldConst
96from bt2.field import _DynamicArrayFieldConst
d016011d 97from bt2.field_class import IntegerDisplayBase
a07f15cb 98from bt2.field_class import _BoolFieldClass
6b29f2d4 99from bt2.field_class import _BitArrayFieldClass
d016011d
PP
100from bt2.field_class import _IntegerFieldClass
101from bt2.field_class import _UnsignedIntegerFieldClass
102from bt2.field_class import _SignedIntegerFieldClass
103from bt2.field_class import _RealFieldClass
104from bt2.field_class import _EnumerationFieldClass
105from bt2.field_class import _UnsignedEnumerationFieldClass
106from bt2.field_class import _SignedEnumerationFieldClass
107from bt2.field_class import _StringFieldClass
108from bt2.field_class import _StructureFieldClass
84eba0d9 109from bt2.field_class import _OptionFieldClass
467673c1
PP
110from bt2.field_class import _OptionWithSelectorFieldClass
111from bt2.field_class import _OptionWithBoolSelectorFieldClass
112from bt2.field_class import _OptionWithIntegerSelectorFieldClass
113from bt2.field_class import _OptionWithUnsignedIntegerSelectorFieldClass
114from bt2.field_class import _OptionWithSignedIntegerSelectorFieldClass
d016011d
PP
115from bt2.field_class import _VariantFieldClass
116from bt2.field_class import _VariantFieldClassWithoutSelector
0822832b
PP
117from bt2.field_class import _VariantFieldClassWithIntegerSelector
118from bt2.field_class import _VariantFieldClassWithUnsignedIntegerSelector
119from bt2.field_class import _VariantFieldClassWithSignedIntegerSelector
d016011d
PP
120from bt2.field_class import _ArrayFieldClass
121from bt2.field_class import _StaticArrayFieldClass
122from bt2.field_class import _DynamicArrayFieldClass
b8ddb4f0 123from bt2.field_class import _DynamicArrayWithLengthFieldFieldClass
9cbe0c59
FD
124from bt2.field_class import _BoolFieldClassConst
125from bt2.field_class import _BitArrayFieldClassConst
126from bt2.field_class import _IntegerFieldClassConst
127from bt2.field_class import _UnsignedIntegerFieldClassConst
128from bt2.field_class import _SignedIntegerFieldClassConst
129from bt2.field_class import _RealFieldClassConst
130from bt2.field_class import _EnumerationFieldClassConst
131from bt2.field_class import _UnsignedEnumerationFieldClassConst
132from bt2.field_class import _SignedEnumerationFieldClassConst
133from bt2.field_class import _StringFieldClassConst
134from bt2.field_class import _StructureFieldClassConst
135from bt2.field_class import _OptionFieldClassConst
467673c1
PP
136from bt2.field_class import _OptionWithSelectorFieldClassConst
137from bt2.field_class import _OptionWithBoolSelectorFieldClassConst
138from bt2.field_class import _OptionWithIntegerSelectorFieldClassConst
139from bt2.field_class import _OptionWithUnsignedIntegerSelectorFieldClassConst
140from bt2.field_class import _OptionWithSignedIntegerSelectorFieldClassConst
9cbe0c59
FD
141from bt2.field_class import _VariantFieldClassConst
142from bt2.field_class import _VariantFieldClassWithoutSelectorConst
0822832b
PP
143from bt2.field_class import _VariantFieldClassWithIntegerSelectorConst
144from bt2.field_class import _VariantFieldClassWithUnsignedIntegerSelectorConst
145from bt2.field_class import _VariantFieldClassWithSignedIntegerSelectorConst
9cbe0c59
FD
146from bt2.field_class import _ArrayFieldClassConst
147from bt2.field_class import _StaticArrayFieldClassConst
148from bt2.field_class import _DynamicArrayFieldClassConst
b8ddb4f0 149from bt2.field_class import _DynamicArrayWithLengthFieldFieldClassConst
056995e5 150from bt2.field_path import FieldPathScope
d016011d
PP
151from bt2.field_path import _IndexFieldPathItem
152from bt2.field_path import _CurrentArrayElementFieldPathItem
84eba0d9 153from bt2.field_path import _CurrentOptionContentFieldPathItem
d016011d
PP
154from bt2.graph import Graph
155from bt2.integer_range_set import SignedIntegerRange
156from bt2.integer_range_set import UnsignedIntegerRange
157from bt2.integer_range_set import SignedIntegerRangeSet
158from bt2.integer_range_set import UnsignedIntegerRangeSet
8d99efe6
FD
159from bt2.integer_range_set import _SignedIntegerRangeConst
160from bt2.integer_range_set import _UnsignedIntegerRangeConst
161from bt2.integer_range_set import _SignedIntegerRangeSetConst
162from bt2.integer_range_set import _UnsignedIntegerRangeSetConst
d016011d
PP
163from bt2.interrupter import Interrupter
164from bt2.logging import LoggingLevel
165from bt2.logging import get_minimal_logging_level
166from bt2.logging import get_global_logging_level
167from bt2.logging import set_global_logging_level
168from bt2.message import _EventMessage
169from bt2.message import _PacketBeginningMessage
170from bt2.message import _PacketEndMessage
171from bt2.message import _StreamBeginningMessage
172from bt2.message import _StreamEndMessage
173from bt2.message import _MessageIteratorInactivityMessage
fa4c33e3
SM
174from bt2.message import _DiscardedEventsMessage
175from bt2.message import _DiscardedPacketsMessage
9cbe0c59
FD
176from bt2.message import _EventMessageConst
177from bt2.message import _PacketBeginningMessageConst
178from bt2.message import _PacketEndMessageConst
179from bt2.message import _StreamBeginningMessageConst
180from bt2.message import _StreamEndMessageConst
181from bt2.message import _MessageIteratorInactivityMessageConst
182from bt2.message import _DiscardedEventsMessageConst
183from bt2.message import _DiscardedPacketsMessageConst
fa4c33e3 184from bt2.message_iterator import _UserMessageIterator
ea307835
PP
185from bt2.mip import get_greatest_operative_mip_version
186from bt2.mip import get_maximal_mip_version
d016011d
PP
187from bt2.plugin import find_plugins_in_path
188from bt2.plugin import find_plugins
189from bt2.plugin import find_plugin
190from bt2.py_plugin import plugin_component_class
191from bt2.py_plugin import register_plugin
192from bt2.query_executor import QueryExecutor
94e72386 193from bt2.trace_collection_message_iterator import AutoSourceComponentSpec
d016011d
PP
194from bt2.trace_collection_message_iterator import ComponentSpec
195from bt2.trace_collection_message_iterator import TraceCollectionMessageIterator
196from bt2.value import create_value
197from bt2.value import BoolValue
68d9d039 198from bt2.value import _IntegerValue
d016011d
PP
199from bt2.value import UnsignedIntegerValue
200from bt2.value import SignedIntegerValue
201from bt2.value import RealValue
202from bt2.value import StringValue
203from bt2.value import ArrayValue
204from bt2.value import MapValue
f19e40a1
FD
205from bt2.value import _BoolValueConst
206from bt2.value import _IntegerValueConst
207from bt2.value import _UnsignedIntegerValueConst
208from bt2.value import _SignedIntegerValueConst
209from bt2.value import _RealValueConst
210from bt2.value import _StringValueConst
211from bt2.value import _ArrayValueConst
212from bt2.value import _MapValueConst
a90c9738 213from bt2.version import __version__
81447b5b 214
7868a02e
SM
215if (sys.version_info.major, sys.version_info.minor) != (3, 4):
216
217 def _del_global_name(name):
218 if name in globals():
219 del globals()[name]
81447b5b 220
7868a02e
SM
221 # remove private module names from the package
222 _del_global_name('_native_bt')
223 _del_global_name('clock_class')
224 _del_global_name('clock_snapshot')
225 _del_global_name('component')
226 _del_global_name('connection')
227 _del_global_name('error')
228 _del_global_name('event')
229 _del_global_name('event_class')
230 _del_global_name('field')
231 _del_global_name('field_class')
232 _del_global_name('field_path')
233 _del_global_name('graph')
234 _del_global_name('integer_range_set')
235 _del_global_name('interrupter')
236 _del_global_name('logging')
237 _del_global_name('message')
238 _del_global_name('message_iterator')
239 _del_global_name('native_bt')
240 _del_global_name('object')
241 _del_global_name('packet')
242 _del_global_name('plugin')
243 _del_global_name('port')
244 _del_global_name('py_plugin')
245 _del_global_name('query_executor')
246 _del_global_name('stream')
247 _del_global_name('stream_class')
248 _del_global_name('trace')
249 _del_global_name('trace_class')
250 _del_global_name('trace_collection_message_iterator')
251 _del_global_name('utils')
252 _del_global_name('value')
253 _del_global_name('version')
c946c9de 254
7868a02e
SM
255 # remove private `_del_global_name` name from the package
256 del _del_global_name
c946c9de 257
c946c9de 258
7868a02e
SM
259# remove sys module name from the package
260del sys
c946c9de
PP
261
262
614743a5 263class _MemoryError(_Error):
493428a0 264 '''Raised when an operation fails due to memory issues.'''
81447b5b
PP
265
266
7dd3e712 267class UnknownObject(Exception):
e30908cf 268 """
7dd3e712
SM
269 Raised when a component class handles a query for an object it doesn't
270 know about.
e30908cf 271 """
7dd3e712 272
1286dcbb
PP
273 pass
274
275
35752b44 276class _OverflowError(_Error, OverflowError):
81447b5b
PP
277 pass
278
279
fb25b9e3 280class TryAgain(Exception):
81447b5b
PP
281 pass
282
283
fb25b9e3
PP
284class Stop(StopIteration):
285 pass
286
287
64e96b5d 288class _IncompleteUserClass(Exception):
f6a5e476
PP
289 pass
290
291
5c8b3186 292def _init_and_register_exit():
c946c9de 293 from bt2 import native_bt
5c8b3186
PP
294 import atexit
295
65e28173
PP
296 atexit.register(native_bt.bt2_exit_handler)
297 native_bt.bt2_init_from_bt2()
5c8b3186
PP
298
299
300_init_and_register_exit()
301
c946c9de
PP
302# remove private `_init_and_register_exit` name from the package
303del _init_and_register_exit
This page took 0.075861 seconds and 4 git commands to generate.