@@ -2,6 +2,7 @@ package core
22
33import (
44 "context"
5+ "errors"
56 "io"
67 "net/http"
78 "os"
@@ -50,71 +51,121 @@ func InjectMeta(ctx context.Context, meta *Meta) context.Context {
5051 return context .WithValue (ctx , metaContextKey , meta )
5152}
5253
53- // extractMeta extracts Meta from a given context.
54- func extractMeta (ctx context.Context ) * Meta {
55- return ctx .Value (metaContextKey ).(* Meta )
54+ // ExtractMeta extracts Meta from a given context.
55+ func ExtractMeta (ctx context.Context ) * Meta {
56+ if meta , ok := ctx .Value (metaContextKey ).(* Meta ); ok {
57+ return meta
58+ }
59+
60+ return nil
5661}
5762
5863// injectSDKConfig add config to a Meta context
5964func InjectConfig (ctx context.Context , config * scw.Config ) {
60- extractMeta (ctx ).Platform .SetScwConfig (config )
65+ meta := ExtractMeta (ctx )
66+ if meta != nil && meta .Platform != nil {
67+ meta .Platform .SetScwConfig (config )
68+ }
6169}
6270
6371func extractConfig (ctx context.Context ) * scw.Config {
64- m := extractMeta (ctx )
65- if m .Platform != nil {
72+ m := ExtractMeta (ctx )
73+ if m != nil && m .Platform != nil {
6674 return m .Platform .ScwConfig ()
6775 }
6876
6977 return nil
7078}
7179
7280func ExtractCommands (ctx context.Context ) * Commands {
73- return extractMeta (ctx ).Commands
81+ meta := ExtractMeta (ctx )
82+ if meta == nil {
83+ return nil
84+ }
85+
86+ return meta .Commands
7487}
7588
7689func ExtractCliConfig (ctx context.Context ) * cliConfig.Config {
77- return extractMeta (ctx ).CliConfig
90+ meta := ExtractMeta (ctx )
91+ if meta == nil {
92+ return nil
93+ }
94+
95+ return meta .CliConfig
7896}
7997
8098func ExtractAliases (ctx context.Context ) * alias.Config {
81- return ExtractCliConfig (ctx ).Alias
99+ cliConfig := ExtractCliConfig (ctx )
100+ if cliConfig == nil {
101+ return nil
102+ }
103+
104+ return cliConfig .Alias
82105}
83106
84107func GetOrganizationIDFromContext (ctx context.Context ) string {
85108 client := ExtractClient (ctx )
109+ if client == nil {
110+ return ""
111+ }
86112 organizationID , _ := client .GetDefaultOrganizationID ()
87113
88114 return organizationID
89115}
90116
91117func GetProjectIDFromContext (ctx context.Context ) string {
92118 client := ExtractClient (ctx )
119+ if client == nil {
120+ return ""
121+ }
93122 projectID , _ := client .GetDefaultProjectID ()
94123
95124 return projectID
96125}
97126
98127func ExtractClient (ctx context.Context ) * scw.Client {
99- return extractMeta (ctx ).Client
128+ meta := ExtractMeta (ctx )
129+ if meta == nil {
130+ return nil
131+ }
132+
133+ return meta .Client
100134}
101135
102136func ExtractLogger (ctx context.Context ) * Logger {
103- return extractMeta (ctx ).Logger
137+ meta := ExtractMeta (ctx )
138+ if meta == nil {
139+ return nil
140+ }
141+
142+ return meta .Logger
104143}
105144
106145func ExtractBuildInfo (ctx context.Context ) * BuildInfo {
107- return extractMeta (ctx ).BuildInfo
146+ meta := ExtractMeta (ctx )
147+ if meta == nil {
148+ return nil
149+ }
150+
151+ return meta .BuildInfo
108152}
109153
110154func ExtractBetaMode (ctx context.Context ) bool {
111- return extractMeta (ctx ).BetaMode
155+ meta := ExtractMeta (ctx )
156+ if meta == nil {
157+ return false
158+ }
159+
160+ return meta .BetaMode
112161}
113162
114163func ExtractEnv (ctx context.Context , envKey string ) string {
115- meta := extractMeta (ctx )
116- if value , exist := meta .OverrideEnv [envKey ]; exist {
117- return value
164+ meta := ExtractMeta (ctx )
165+ if meta != nil {
166+ if value , exist := meta .OverrideEnv [envKey ]; exist {
167+ return value
168+ }
118169 }
119170
120171 if envKey == "HOME" {
@@ -140,17 +191,28 @@ func ExtractCacheDir(ctx context.Context) string {
140191}
141192
142193func ExtractBinaryName (ctx context.Context ) string {
143- return extractMeta (ctx ).BinaryName
194+ meta := ExtractMeta (ctx )
195+ if meta == nil {
196+ return ""
197+ }
198+
199+ return meta .BinaryName
144200}
145201
146202func ExtractStdin (ctx context.Context ) io.Reader {
147- return extractMeta (ctx ).stdin
203+ meta := ExtractMeta (ctx )
204+ if meta == nil {
205+ return nil
206+ }
207+
208+ return meta .stdin
148209}
149210
150211func ExtractProfileName (ctx context.Context ) string {
212+ meta := ExtractMeta (ctx )
151213 // Handle profile flag -p
152- if extractMeta ( ctx ) .ProfileFlag != "" {
153- return extractMeta ( ctx ) .ProfileFlag
214+ if meta != nil && meta .ProfileFlag != "" {
215+ return meta .ProfileFlag
154216 }
155217
156218 // Handle SCW_PROFILE env variable
@@ -170,13 +232,21 @@ func ExtractProfileName(ctx context.Context) string {
170232}
171233
172234func ExtractHTTPClient (ctx context.Context ) * http.Client {
173- return extractMeta (ctx ).httpClient
235+ meta := ExtractMeta (ctx )
236+ if meta == nil {
237+ return nil
238+ }
239+
240+ return meta .httpClient
174241}
175242
176243func ExtractConfigPath (ctx context.Context ) string {
177- meta := extractMeta (ctx )
244+ meta := ExtractMeta (ctx )
245+ if meta == nil {
246+ return scw .GetConfigPath ()
247+ }
178248 if meta .ConfigPathFlag != "" {
179- return extractMeta ( ctx ) .ConfigPathFlag
249+ return meta .ConfigPathFlag
180250 }
181251 // This is only useful for test when we override home environment variable
182252 if home := meta .OverrideEnv ["HOME" ]; home != "" {
@@ -187,7 +257,12 @@ func ExtractConfigPath(ctx context.Context) string {
187257}
188258
189259func ExtractCliConfigPath (ctx context.Context ) string {
190- meta := extractMeta (ctx )
260+ meta := ExtractMeta (ctx )
261+ if meta == nil {
262+ configPath , _ := cliConfig .FilePath ()
263+
264+ return configPath
265+ }
191266 // This is only useful for test when we override home environment variable
192267 if home := meta .OverrideEnv ["HOME" ]; home != "" {
193268 return path .Join (home , ".config" , "scw" , cliConfig .DefaultConfigFileName )
@@ -198,8 +273,11 @@ func ExtractCliConfigPath(ctx context.Context) string {
198273}
199274
200275func ReloadClient (ctx context.Context ) error {
276+ meta := ExtractMeta (ctx )
277+ if meta == nil {
278+ return errors .New ("cannot reload client: meta not found in context" )
279+ }
201280 var err error
202- meta := extractMeta (ctx )
203281 meta .Client , err = meta .Platform .CreateClient (
204282 meta .httpClient ,
205283 ExtractConfigPath (ctx ),
@@ -210,11 +288,21 @@ func ReloadClient(ctx context.Context) error {
210288}
211289
212290func ExtractConfigPathFlag (ctx context.Context ) string {
213- return extractMeta (ctx ).ConfigPathFlag
291+ meta := ExtractMeta (ctx )
292+ if meta == nil {
293+ return ""
294+ }
295+
296+ return meta .ConfigPathFlag
214297}
215298
216299func ExtractProfileFlag (ctx context.Context ) string {
217- return extractMeta (ctx ).ProfileFlag
300+ meta := ExtractMeta (ctx )
301+ if meta == nil {
302+ return ""
303+ }
304+
305+ return meta .ProfileFlag
218306}
219307
220308// GetDocGenContext returns a minimal context that can be used by scw-doc-gen
0 commit comments