1# Copyright The OpenTelemetry Authors
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14
15from functools import cache
16
17# FIXME: Use importlib.metadata (not importlib_metadata)
18# when support for 3.11 is dropped if the rest of
19# the supported versions at that time have the same API.
20from importlib_metadata import ( # type: ignore
21 Distribution,
22 EntryPoint,
23 EntryPoints,
24 PackageNotFoundError,
25 distributions,
26 requires,
27 version,
28)
29from importlib_metadata import (
30 entry_points as original_entry_points,
31)
32
33
34@cache
35def _original_entry_points_cached():
36 return original_entry_points()
37
38
39def entry_points(**params):
40 """Replacement for importlib_metadata.entry_points that caches getting all the entry points.
41
42 That part can be very slow, and OTel uses this function many times."""
43 return _original_entry_points_cached().select(**params)
44
45
46__all__ = [
47 "entry_points",
48 "version",
49 "EntryPoint",
50 "EntryPoints",
51 "requires",
52 "Distribution",
53 "distributions",
54 "PackageNotFoundError",
55]