1- # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 
2- # SPDX-License-Identifier: Apache-2.0 
1+ #!/usr/bin/env python3 
32
3+ import  sys 
44import  os 
55import  re 
6- import  sys 
7- 
86import  requests 
97
10- # Dependencies that use the opentelemetry-python  version number 
8+ # Dependencies that use the first  version number (opentelemetry-python)  
119PYTHON_CORE_DEPS  =  [
12-     " opentelemetry-api" 
13-     " opentelemetry-sdk" 
14-     " opentelemetry-exporter-otlp" 
15-     " opentelemetry-exporter-otlp-proto-grpc" 
16-     " opentelemetry-exporter-otlp-proto-http" 
17-     " opentelemetry-propagator-b3" 
18-     " opentelemetry-propagator-jaeger" 
19-     " opentelemetry-exporter-otlp-proto-common" 
10+     ' opentelemetry-api' 
11+     ' opentelemetry-sdk' 
12+     ' opentelemetry-exporter-otlp' 
13+     ' opentelemetry-exporter-otlp-proto-grpc' 
14+     ' opentelemetry-exporter-otlp-proto-http' 
15+     ' opentelemetry-propagator-b3' 
16+     ' opentelemetry-propagator-jaeger' 
17+     ' opentelemetry-exporter-otlp-proto-common' 
2018]
2119
22- # Dependencies that use the opentelemetry-python-contrib version number  
20+ # Dependencies that use the second version number ( opentelemetry-python-contrib)  
2321CONTRIB_DEPS  =  [
24-     " opentelemetry-distro" 
25-     " opentelemetry-processor-baggage" 
26-     " opentelemetry-propagator-ot-trace" 
27-     " opentelemetry-instrumentation" 
28-     " opentelemetry-instrumentation-aws-lambda" 
29-     " opentelemetry-instrumentation-aio-pika" 
30-     " opentelemetry-instrumentation-aiohttp-client" 
31-     " opentelemetry-instrumentation-aiopg" 
32-     " opentelemetry-instrumentation-asgi" 
33-     " opentelemetry-instrumentation-asyncpg" 
34-     " opentelemetry-instrumentation-boto" 
35-     " opentelemetry-instrumentation-boto3sqs" 
36-     " opentelemetry-instrumentation-botocore" 
37-     " opentelemetry-instrumentation-celery" 
38-     " opentelemetry-instrumentation-confluent-kafka" 
39-     " opentelemetry-instrumentation-dbapi" 
40-     " opentelemetry-instrumentation-django" 
41-     " opentelemetry-instrumentation-elasticsearch" 
42-     " opentelemetry-instrumentation-falcon" 
43-     " opentelemetry-instrumentation-fastapi" 
44-     " opentelemetry-instrumentation-flask" 
45-     " opentelemetry-instrumentation-grpc" 
46-     " opentelemetry-instrumentation-httpx" 
47-     " opentelemetry-instrumentation-jinja2" 
48-     " opentelemetry-instrumentation-kafka-python" 
49-     " opentelemetry-instrumentation-logging" 
50-     " opentelemetry-instrumentation-mysql" 
51-     " opentelemetry-instrumentation-mysqlclient" 
52-     " opentelemetry-instrumentation-pika" 
53-     " opentelemetry-instrumentation-psycopg2" 
54-     " opentelemetry-instrumentation-pymemcache" 
55-     " opentelemetry-instrumentation-pymongo" 
56-     " opentelemetry-instrumentation-pymysql" 
57-     " opentelemetry-instrumentation-pyramid" 
58-     " opentelemetry-instrumentation-redis" 
59-     " opentelemetry-instrumentation-remoulade" 
60-     " opentelemetry-instrumentation-requests" 
61-     " opentelemetry-instrumentation-sqlalchemy" 
62-     " opentelemetry-instrumentation-sqlite3" 
63-     " opentelemetry-instrumentation-starlette" 
64-     " opentelemetry-instrumentation-system-metrics" 
65-     " opentelemetry-instrumentation-tornado" 
66-     " opentelemetry-instrumentation-tortoiseorm" 
67-     " opentelemetry-instrumentation-urllib" 
68-     " opentelemetry-instrumentation-urllib3" 
69-     " opentelemetry-instrumentation-wsgi" 
70-     " opentelemetry-instrumentation-cassandra" 
22+     ' opentelemetry-distro' 
23+     ' opentelemetry-processor-baggage' 
24+     ' opentelemetry-propagator-ot-trace' 
25+     ' opentelemetry-instrumentation' 
26+     ' opentelemetry-instrumentation-aws-lambda' 
27+     ' opentelemetry-instrumentation-aio-pika' 
28+     ' opentelemetry-instrumentation-aiohttp-client' 
29+     ' opentelemetry-instrumentation-aiopg' 
30+     ' opentelemetry-instrumentation-asgi' 
31+     ' opentelemetry-instrumentation-asyncpg' 
32+     ' opentelemetry-instrumentation-boto' 
33+     ' opentelemetry-instrumentation-boto3sqs' 
34+     ' opentelemetry-instrumentation-botocore' 
35+     ' opentelemetry-instrumentation-celery' 
36+     ' opentelemetry-instrumentation-confluent-kafka' 
37+     ' opentelemetry-instrumentation-dbapi' 
38+     ' opentelemetry-instrumentation-django' 
39+     ' opentelemetry-instrumentation-elasticsearch' 
40+     ' opentelemetry-instrumentation-falcon' 
41+     ' opentelemetry-instrumentation-fastapi' 
42+     ' opentelemetry-instrumentation-flask' 
43+     ' opentelemetry-instrumentation-grpc' 
44+     ' opentelemetry-instrumentation-httpx' 
45+     ' opentelemetry-instrumentation-jinja2' 
46+     ' opentelemetry-instrumentation-kafka-python' 
47+     ' opentelemetry-instrumentation-logging' 
48+     ' opentelemetry-instrumentation-mysql' 
49+     ' opentelemetry-instrumentation-mysqlclient' 
50+     ' opentelemetry-instrumentation-pika' 
51+     ' opentelemetry-instrumentation-psycopg2' 
52+     ' opentelemetry-instrumentation-pymemcache' 
53+     ' opentelemetry-instrumentation-pymongo' 
54+     ' opentelemetry-instrumentation-pymysql' 
55+     ' opentelemetry-instrumentation-pyramid' 
56+     ' opentelemetry-instrumentation-redis' 
57+     ' opentelemetry-instrumentation-remoulade' 
58+     ' opentelemetry-instrumentation-requests' 
59+     ' opentelemetry-instrumentation-sqlalchemy' 
60+     ' opentelemetry-instrumentation-sqlite3' 
61+     ' opentelemetry-instrumentation-starlette' 
62+     ' opentelemetry-instrumentation-system-metrics' 
63+     ' opentelemetry-instrumentation-tornado' 
64+     ' opentelemetry-instrumentation-tortoiseorm' 
65+     ' opentelemetry-instrumentation-urllib' 
66+     ' opentelemetry-instrumentation-urllib3' 
67+     ' opentelemetry-instrumentation-wsgi' 
68+     ' opentelemetry-instrumentation-cassandra' 
7169]
7270
73- # packages with independent versioning 
71+ # AWS-specific  packages with independent versioning 
7472AWS_DEPS  =  [
75-     " opentelemetry-sdk-extension-aws" 
76-     " opentelemetry-propagator-aws-xray" 
73+     ' opentelemetry-sdk-extension-aws' 
74+     ' opentelemetry-propagator-aws-xray' 
7775]
7876
79- 
8077def  get_latest_version (package_name ):
8178    """Get the latest version of a package from PyPI.""" 
8279    try :
83-         response  =  requests .get (f" https://pypi.org/pypi/{ package_name } "  )
80+         response  =  requests .get (f' https://pypi.org/pypi/{ package_name } '  ,  timeout = 30 )
8481        response .raise_for_status ()
8582        data  =  response .json ()
86-         return  data [" info" ][ " version" 
87-     except  Exception  as  e :
88-         print (f"Warning: Could not get latest version for { package_name } { e }  )
83+         return  data [' info' ][ ' version' 
84+     except  requests . RequestException  as  request_error :
85+         print (f"Warning: Could not get latest version for { package_name } { request_error }  )
8986        return  None 
9087
91- 
9288def  main ():
93-     otel_python_version  =  os .environ .get (" OTEL_PYTHON_VERSION" 
94-     otel_contrib_version  =  os .environ .get (" OTEL_CONTRIB_VERSION" 
95- 
89+     otel_python_version  =  os .environ .get (' OTEL_PYTHON_VERSION' 
90+     otel_contrib_version  =  os .environ .get (' OTEL_CONTRIB_VERSION' 
91+      
9692    if  not  otel_python_version  or  not  otel_contrib_version :
9793        print ("Error: OTEL_PYTHON_VERSION and OTEL_CONTRIB_VERSION environment variables required" )
9894        sys .exit (1 )
99- 
100-     pyproject_path  =  " aws-opentelemetry-distro/pyproject.toml" 
101- 
95+      
96+     pyproject_path  =  ' aws-opentelemetry-distro/pyproject.toml' 
97+      
10298    try :
103-         with  open (pyproject_path , "r" ) as  f :
104-             content  =  f .read ()
105- 
99+         with  open (pyproject_path , 'r' ,  encoding = 'utf-8' ) as  input_file :
100+             content  =  input_file .read ()
101+          
106102        updated  =  False 
107- 
103+          
108104        # Update opentelemetry-python dependencies 
109105        for  dep  in  PYTHON_CORE_DEPS :
110106            pattern  =  rf'"{ re .escape (dep )}  
111107            replacement  =  f'"{ dep } { otel_python_version }  
112108            if  re .search (pattern , content ):
113109                content  =  re .sub (pattern , replacement , content )
114110                updated  =  True 
115- 
116-         # Update opentelemetry-python-contrib dependencies 
111+          
112+         # Update opentelemetry-python-contrib dependencies    
117113        for  dep  in  CONTRIB_DEPS :
118114            pattern  =  rf'"{ re .escape (dep )}  
119115            replacement  =  f'"{ dep } { otel_contrib_version }  
120116            if  re .search (pattern , content ):
121117                content  =  re .sub (pattern , replacement , content )
122118                updated  =  True 
123- 
119+          
124120        # Update dependencies with independent versioning 
125121        for  dep  in  AWS_DEPS :
126122            latest_version  =  get_latest_version (dep )
@@ -131,18 +127,17 @@ def main():
131127                    content  =  re .sub (pattern , replacement , content )
132128                    updated  =  True 
133129                    print (f"Updated { dep } { latest_version }  )
134- 
130+          
135131        if  updated :
136-             with  open (pyproject_path , "w" ) as  f :
137-                 f .write (content )
138-             print (f" Dependencies updated to Python { otel_python_version } { otel_contrib_version } "  )
132+             with  open (pyproject_path , 'w' ,  encoding = 'utf-8' ) as  output_file :
133+                 output_file .write (content )
134+             print (f' Dependencies updated to Python { otel_python_version } { otel_contrib_version } '  )
139135        else :
140-             print (" No OpenTelemetry dependencies found to update" 
141- 
142-     except  Exception   as  e :
143-         print (f"Error updating dependencies: { e }  )
136+             print (' No OpenTelemetry dependencies found to update' 
137+              
138+     except  ( OSError ,  IOError )  as  file_error :
139+         print (f"Error updating dependencies: { file_error }  )
144140        sys .exit (1 )
145141
146- 
147- if  __name__  ==  "__main__" :
142+ if  __name__  ==  '__main__' :
148143    main ()
0 commit comments