@@ -240,3 +240,82 @@ func NewScript(scriptName string, interpreterOverride string, requirementsOverri
240
240
}
241
241
return script , nil
242
242
}
243
+
244
+ // NewInitCmd creates a new Script instance
245
+ func NewInitCmd (interpreterOverride string , requirementsOverride string ) (* Script , error ) {
246
+ cwd , err := os .Getwd ()
247
+ if err != nil {
248
+ return nil , err
249
+ }
250
+
251
+ // Try to find requirements.txt file for the script
252
+ requirementsFile , err := getRequirementsFileForScript (path .Join (cwd , ".placeholder" ), requirementsOverride )
253
+ if err != nil {
254
+ return nil , err
255
+ }
256
+
257
+ if flagDebug {
258
+ if requirementsFile == "" {
259
+ loggerErr .Println ("No requirements file found" )
260
+ } else {
261
+ loggerErr .Println ("Found requirements file: " , requirementsFile )
262
+ }
263
+ }
264
+
265
+ requirementsHash := ""
266
+ if requirementsFile != "" {
267
+ requirementsHash , err = getFileHash (requirementsFile )
268
+ if err != nil {
269
+ return nil , err
270
+ }
271
+ }
272
+
273
+ if flagDebug {
274
+ loggerErr .Printf ("Requirements file hash: %s\n " , requirementsHash )
275
+ }
276
+
277
+ var pythonInterpreter string
278
+ if interpreterOverride == "" {
279
+ pythonInterpreter = "python"
280
+ } else {
281
+ pythonInterpreter = interpreterOverride
282
+ }
283
+
284
+ // Check if the python interpreter exists in path
285
+ _ , err = exec .LookPath (pythonInterpreter )
286
+ if err != nil && interpreterOverride != "" {
287
+ return nil , fmt .Errorf ("failed to find python interpreter %s: %s" , pythonInterpreter , err )
288
+ } else if err != nil {
289
+ if flagDebug {
290
+ loggerErr .Printf ("Failed to find python interpreter %s: %s, assuming `python`...\n " , pythonInterpreter , err )
291
+ }
292
+ pythonInterpreter = "python"
293
+ _ , err = exec .LookPath (pythonInterpreter )
294
+ if err != nil {
295
+ return nil , fmt .Errorf ("failed to find python interpreter %s: %s" , pythonInterpreter , err )
296
+ }
297
+ }
298
+
299
+ pythonVersion , err := getPythonVersion (pythonInterpreter )
300
+ if err != nil {
301
+ return nil , err
302
+ }
303
+
304
+ if flagDebug {
305
+ loggerErr .Printf ("Using python interpreter: %s\n " , pythonVersion )
306
+ }
307
+
308
+ envDir := ".venv"
309
+
310
+ if flagDebug {
311
+ loggerErr .Println ("Using virtual environment: " , envDir )
312
+ }
313
+
314
+ script := & Script {
315
+ AbsolutePath : cwd ,
316
+ EnvDir : envDir ,
317
+ PythonInterpreter : pythonInterpreter ,
318
+ RequirementsPath : requirementsFile ,
319
+ }
320
+ return script , nil
321
+ }
0 commit comments