@@ -67,19 +67,20 @@ async def list_environments(
6767 return environments
6868 else :
6969 environment = resp .get ("environments" , [])
70- # Extract the 'name' values from the 'environments' list
71- names = [env ["name" ] for env in environment ]
72- # Extract the last value after the last slash for each 'name'
73- last_values = [name .split ("/" )[- 1 ] for name in names ]
74- for env in last_values :
75- name = env
70+ for env in environment :
71+ path = env ["name" ]
72+ name = env ["name" ].split ("/" )[- 1 ]
73+ state = env ["state" ]
74+ pypi_packages = env .get ("config" , {}).get ("softwareConfig" , {}).get ("pypiPackages" , None )
7675 environments .append (
7776 ComposerEnvironment (
7877 name = name ,
7978 label = name ,
8079 description = f"Environment: { name } " ,
80+ state = state ,
8181 file_extensions = ["ipynb" ],
82- metadata = {"path" : env },
82+ metadata = {"path" : path },
83+ pypi_packages = pypi_packages
8384 )
8485 )
8586 return environments
@@ -94,3 +95,47 @@ async def list_environments(
9495 except Exception as e :
9596 self .log .exception (f"Error fetching environments list: { str (e )} " )
9697 return {"Error fetching environments list" : str (e )}
98+
99+ async def get_environment (
100+ self , env_name
101+ ) -> ComposerEnvironment :
102+ try :
103+ environment = {}
104+ composer_url = await urls .gcp_service_url (COMPOSER_SERVICE_NAME )
105+ api_endpoint = f"{ composer_url } /v1/{ env_name } "
106+
107+ headers = self .create_headers ()
108+ async with self .client_session .get (
109+ api_endpoint , headers = headers
110+ ) as response :
111+ if response .status == HTTP_STATUS_OK :
112+ resp = await response .json ()
113+ if not resp :
114+ return environment
115+ else :
116+ path = resp .get ("name" )
117+ name = resp .get ("name" ).split ("/" )[- 1 ]
118+ state = resp .get ("state" )
119+ pypi_packages = resp .get ("config" , {}).get ("softwareConfig" , {}).get ("pypiPackages" , None )
120+ environment = ComposerEnvironment (
121+ name = name ,
122+ label = name ,
123+ description = f"Environment: { name } " ,
124+ state = state ,
125+ file_extensions = ["ipynb" ],
126+ metadata = {"path" : path },
127+ pypi_packages = pypi_packages
128+ )
129+
130+ return environment
131+ elif response .status == HTTP_STATUS_FORBIDDEN :
132+ resp = await response .json ()
133+ return resp
134+ else :
135+ self .log .exception ("Error fetching environment" )
136+ raise Exception (
137+ f"Error getting composer: { response .reason } { await response .text ()} "
138+ )
139+ except Exception as e :
140+ self .log .exception (f"Error fetching environment: { str (e )} " )
141+ return {"Error fetching environment" : str (e )}
0 commit comments