-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathenv.go
67 lines (54 loc) · 1.8 KB
/
env.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package skyenv
import (
"errors"
"os"
"github.com/google/skylark"
)
func init() {
skylark.Universe["getenv"] = skylark.NewBuiltin("getnev", getenv)
skylark.Universe["setenv"] = skylark.NewBuiltin("setnev", setenv)
skylark.Universe["unsetenv"] = skylark.NewBuiltin("unsetnev", unsetenv)
}
func getenv(thread *skylark.Thread, fn *skylark.Builtin, args skylark.Tuple, kwargs []skylark.Tuple) (skylark.Value, error) {
if len(args) != 1 {
return skylark.None, errors.New("not enough arguments in call to getenv")
}
key, ok := skylark.AsString(args[0])
if !ok {
return skylark.None, errors.New("type string in argument to getenv")
}
env := os.Getenv(key)
return skylark.String(env), nil
}
func setenv(thread *skylark.Thread, fn *skylark.Builtin, args skylark.Tuple, kwargs []skylark.Tuple) (skylark.Value, error) {
if len(args) != 2 {
return skylark.None, errors.New("not enough arguments in call to setenv")
}
key, ok := skylark.AsString(args[0])
if !ok {
return skylark.None, errors.New("type string in argument to setenv")
}
val, ok := skylark.AsString(args[1])
if !ok {
return skylark.None, errors.New("type string in argument to setenv")
}
if err := os.Setenv(key, val); err != nil {
return skylark.None, err
}
return skylark.None, nil
}
func unsetenv(thread *skylark.Thread, fn *skylark.Builtin, args skylark.Tuple, kwargs []skylark.Tuple) (skylark.Value, error) {
if len(args) == 0 {
return skylark.None, errors.New("not enough arguments in call to unsetenv")
} else if 2 <= len(args) {
return skylark.None, errors.New("too many arguments in call to unsetenv")
}
key, ok := skylark.AsString(args[0])
if !ok {
return skylark.None, errors.New("type string in argument to unsetenv")
}
if err := os.Unsetenv(key); err != nil {
return skylark.None, err
}
return skylark.None, nil
}