scripts/build_edot_bootstrap_instrumentations.py (31 lines of code) (raw):

# Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one # or more contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright # ownership. Elasticsearch B.V. licenses this file to you under # the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import ast # this requires python 3.11 import tomllib from pathlib import Path root_dir = Path(__file__).parent.parent instrumentations_repo_dir = root_dir.parent / "elastic-otel-python-instrumentations" instrumentations_dir = instrumentations_repo_dir / "instrumentation" pyprojects = instrumentations_dir.glob("*/pyproject.toml") instrumentations = [] for pyproject in pyprojects: with pyproject.open("rb") as f: data = tomllib.load(f) instrumentation_name = data["project"]["name"] instruments = data["project"]["optional-dependencies"]["instruments"] version = None for version_module in pyproject.parent.glob("src/opentelemetry/instrumentation/*/version.py"): with version_module.open("rb") as vf: for line in vf: if line.startswith(b"__version__"): tree = ast.parse(line) assignment_value = tree.body[0].value version = assignment_value.value break break # not a fan of creating multiple entries is we require more than one library but that's the status # see https://github.com/open-telemetry/opentelemetry-python-contrib/pull/2409 for instrument in instruments: instrumentations.append( { "library": instrument, "instrumentation": f"{instrumentation_name}=={version}", } ) print(instrumentations)