1
+ load ("@bazel_skylib//rules:copy_file.bzl" , "copy_file" )
1
2
load ("@bazel_skylib//rules:expand_template.bzl" , "expand_template" )
2
3
load ("//:build/python_metadata.bzl" , "BUNDLE_VERSION_INFO" )
3
4
load ("//:build/wd_test.bzl" , "wd_test" )
@@ -12,16 +13,29 @@ def _py_wd_test_helper(
12
13
name ,
13
14
src ,
14
15
python_flag ,
15
- make_snapshot ,
16
16
* ,
17
- args = [],
17
+ make_snapshot ,
18
+ use_snapshot ,
19
+ args ,
20
+ data = [],
18
21
** kwargs ):
19
22
name_flag = name + "_" + python_flag
20
23
templated_src = name_flag .replace ("/" , "-" ) + "@template"
21
24
templated_src = "/" .join (src .split ("/" )[:- 1 ] + [templated_src ])
22
25
flags = _get_enable_flags (python_flag )
23
26
feature_flags_txt = "," .join (['"{}"' .format (flag ) for flag in flags ])
24
27
28
+ load_snapshot = None
29
+ if use_snapshot :
30
+ version_info = BUNDLE_VERSION_INFO [python_flag ]
31
+
32
+ snapshot = version_info [use_snapshot + "_snapshot" ]
33
+ data = data + [":python_snapshots" ]
34
+ load_snapshot = snapshot
35
+
36
+ if load_snapshot and not make_snapshot :
37
+ args += ["--python-load-snapshot" , "load_snapshot.bin" ]
38
+
25
39
expand_template (
26
40
name = name_flag + "@rule" ,
27
41
out = templated_src ,
@@ -34,9 +48,56 @@ def _py_wd_test_helper(
34
48
name = name_flag + "@" ,
35
49
args = args ,
36
50
python_snapshot_test = make_snapshot ,
51
+ data = data ,
52
+ load_snapshot = load_snapshot ,
37
53
** kwargs
38
54
)
39
55
56
+ def _snapshot_file (snapshot ):
57
+ if not snapshot :
58
+ return []
59
+ copy_file (
60
+ name = "pyodide-snapshot-%s@copy" % snapshot ,
61
+ src = "@pyodide-snapshot-%s//file" % snapshot ,
62
+ out = snapshot ,
63
+ visibility = ["//visibility:public" ],
64
+ )
65
+ return [":" + snapshot ]
66
+
67
+ def _snapshot_files (
68
+ baseline_snapshot = None ,
69
+ numpy_snapshot = None ,
70
+ fastapi_snapshot = None ,
71
+ ** _kwds ):
72
+ result = []
73
+ result += _snapshot_file (baseline_snapshot )
74
+ result += _snapshot_file (numpy_snapshot )
75
+ result += _snapshot_file (fastapi_snapshot )
76
+ return result
77
+
78
+ def python_test_setup ():
79
+ # pyodide_dev.capnp.bin represents a custom pyodide version "dev" that is generated
80
+ # at build time using the latest contents of the src/pyodide directory.
81
+ # This is used to run tests to ensure that they are always run against the latest build of
82
+ # the Pyodide bundle.
83
+ copy_file (
84
+ name = "pyodide_dev.capnp.bin@rule" ,
85
+ src = "//src/pyodide:pyodide.capnp.bin_cross" ,
86
+ out = "pyodide-bundle-cache/pyodide_dev.capnp.bin" ,
87
+ visibility = ["//visibility:public" ],
88
+ )
89
+ data = []
90
+ for x in BUNDLE_VERSION_INFO .values ():
91
+ if x ["name" ] == "development" :
92
+ continue
93
+ data += _snapshot_files (** x )
94
+
95
+ native .filegroup (
96
+ name = "python_snapshots" ,
97
+ data = data ,
98
+ visibility = ["//visibility:public" ],
99
+ )
100
+
40
101
def py_wd_test (
41
102
directory = None ,
42
103
* ,
@@ -49,12 +110,16 @@ def py_wd_test(
49
110
size = "enormous" ,
50
111
tags = [],
51
112
make_snapshot = True ,
113
+ use_snapshot = None ,
114
+ skip_default_data = False ,
52
115
** kwargs ):
53
116
if python_flags == "all" :
54
117
python_flags = BUNDLE_VERSION_INFO .keys ()
55
118
python_flags = [flag for flag in python_flags if flag not in skip_python_flags and flag in BUNDLE_VERSION_INFO ]
56
- if data == None and directory != None :
57
- data = native .glob (
119
+ if data == None :
120
+ data = []
121
+ if directory and not skip_default_data :
122
+ data += native .glob (
58
123
[
59
124
directory + "/**" ,
60
125
],
@@ -82,8 +147,10 @@ def py_wd_test(
82
147
src ,
83
148
python_flag ,
84
149
make_snapshot = make_snapshot ,
150
+ use_snapshot = use_snapshot ,
85
151
data = data ,
86
152
args = args ,
87
153
size = size ,
88
154
tags = tags ,
155
+ ** kwargs
89
156
)
0 commit comments