File tree 5 files changed +107
-25
lines changed
appengine/standard_python37/bigquery 5 files changed +107
-25
lines changed Original file line number Diff line number Diff line change
1
+ # This file specifies files that are *not* uploaded to Google Cloud Platform
2
+ # using gcloud. It follows the same syntax as .gitignore, with the addition of
3
+ # "#!include" directives (which insert the entries of the given .gitignore-style
4
+ # file at that point).
5
+ #
6
+ # For more information, run:
7
+ # $ gcloud topic gcloudignore
8
+ #
9
+ .gcloudignore
10
+ # If you would like to upload your .git directory, .gitignore file or files
11
+ # from your .gitignore file, remove the corresponding line
12
+ # below:
13
+ .git
14
+ .gitignore
15
+
16
+ # Python pycache:
17
+ __pycache__/
18
+ # Ignored by the build system
19
+ /setup.cfg
Original file line number Diff line number Diff line change 13
13
# limitations under the License.
14
14
15
15
# [START gae_python37_bigquery]
16
+ import concurrent .futures
17
+
16
18
from flask import Flask , render_template
17
19
from google .cloud import bigquery
18
20
21
+
19
22
app = Flask (__name__ )
20
23
bigquery_client = bigquery .Client ()
21
24
@@ -34,7 +37,12 @@ def main():
34
37
LIMIT 10
35
38
""" )
36
39
37
- results = query_job .result ()
40
+ try :
41
+ # Set a timeout because queries could take longer than one minute.
42
+ results = query_job .result (timeout = 30 )
43
+ except concurrent .futures .TimeoutError :
44
+ return render_template ('timeout.html' , job_id = query_job .job_id )
45
+
38
46
return render_template ('query_result.html' , results = results )
39
47
40
48
Original file line number Diff line number Diff line change 12
12
# See the License for the specific language governing permissions and
13
13
# limitations under the License.
14
14
15
+ import concurrent .futures
16
+ from unittest import mock
15
17
16
- def test_main ():
18
+ from google .cloud import bigquery
19
+ import pytest
20
+
21
+
22
+ @pytest .fixture
23
+ def flask_client ():
17
24
import main
18
25
19
26
main .app .testing = True
20
- client = main .app .test_client ()
27
+ return main .app .test_client ()
28
+
21
29
22
- r = client .get ('/' )
30
+ def test_main (flask_client ):
31
+ r = flask_client .get ('/' )
23
32
assert r .status_code == 200
24
33
assert 'Query Result' in r .data .decode ('utf-8' )
34
+
35
+
36
+ def test_main_timeout (flask_client , monkeypatch ):
37
+ import main
38
+
39
+ fake_job = mock .create_autospec (bigquery .QueryJob )
40
+ fake_job .result .side_effect = concurrent .futures .TimeoutError ()
41
+
42
+ def fake_query (query ):
43
+ return fake_job
44
+
45
+ monkeypatch .setattr (main .bigquery_client , 'query' , fake_query )
46
+
47
+ r = flask_client .get ('/' )
48
+ assert r .status_code == 200
49
+ assert 'Query Timeout' in r .data .decode ('utf-8' )
Original file line number Diff line number Diff line change 1
- <!doctype <!DOCTYPE html>
2
- < html >
3
- < head >
4
- < meta charset ="utf-8 " />
5
- < title > Query Result</ title >
6
- </ head >
7
- < body >
8
- < table >
9
- < tr >
10
- < th > URL</ th >
11
- < th > View Count</ th >
12
- </ tr >
13
- {% for result in results %}
14
- < tr >
15
- < td > {{ result[0] }}</ td >
16
- < td > {{ result[1] }}</ td >
17
- </ tr >
18
- {% endfor %}
19
- </ table >
20
- </ body >
21
- </ html >
1
+ <!DOCTYPE html>
2
+ {#
3
+ Copyright 2019 Google LLC
4
+
5
+ Licensed under the Apache License, Version 2.0 (the "License");
6
+ you may not use this file except in compliance with the License.
7
+ You may obtain a copy of the License at
8
+
9
+ https://www.apache.org/licenses/LICENSE-2.0
10
+
11
+ Unless required by applicable law or agreed to in writing, software
12
+ distributed under the License is distributed on an "AS IS" BASIS,
13
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ See the License for the specific language governing permissions and
15
+ limitations under the License.
16
+ #}
17
+ < meta charset ="utf-8 " />
18
+ < title > Query Result</ title >
19
+
20
+ < table >
21
+ < tr >
22
+ < th > URL</ th >
23
+ < th > View Count</ th >
24
+ </ tr >
25
+ {% for result in results %}
26
+ < tr >
27
+ < td > {{ result[0] }}</ td >
28
+ < td > {{ result[1] }}</ td >
29
+ </ tr >
30
+ {% endfor %}
31
+ </ table >
Original file line number Diff line number Diff line change
1
+ <!DOCTYPE html>
2
+ {#
3
+ Copyright 2019 Google LLC
4
+
5
+ Licensed under the Apache License, Version 2.0 (the "License");
6
+ you may not use this file except in compliance with the License.
7
+ You may obtain a copy of the License at
8
+
9
+ https://www.apache.org/licenses/LICENSE-2.0
10
+
11
+ Unless required by applicable law or agreed to in writing, software
12
+ distributed under the License is distributed on an "AS IS" BASIS,
13
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ See the License for the specific language governing permissions and
15
+ limitations under the License.
16
+ #}
17
+ < meta charset ="utf-8 " />
18
+ < title > Query Timeout</ title >
19
+
20
+ < p > Query job {{ job_id }} timed out.
You can’t perform that action at this time.
0 commit comments