Skip to content

Commit cc19a2e

Browse files
authored
Integrate changes from Piper (#57)
* Integrate changes from Piper * Add constraint for protobuf version in tox.ini
1 parent 9f29ed0 commit cc19a2e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+318
-2789
lines changed

src/google/appengine/api/__init__.py

Lines changed: 57 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -37,57 +37,79 @@
3737
app.wsgi_app = google.appengine.api.wrap_wsgi_app(app.wsgi_app)
3838
```
3939
"""
40+
4041
import os
41-
from google.appengine.api import full_app_id
42+
from typing import Dict, Optional
4243

4344

45+
def wrap_wsgi_app(app, *, use_deferred=False, **kwargs):
46+
"""Wrap a WSGI app with middlewares required to access App Engine APIs."""
47+
return WSGIAppWrapper().wrap_wsgi_app(
48+
app, use_deferred=use_deferred, **kwargs)
49+
50+
51+
class WSGIAppWrapper():
52+
"""A mechanism for overriding wrap_wsgi_app's defaults."""
53+
54+
def __init__(self, *, legacy_behaviors: Optional[Dict[str, bool]] = None):
55+
self.legacy_behaviors = dict(
56+
use_legacy_context_mode=True,
57+
patch_thread_creation=True)
58+
if legacy_behaviors is not None:
59+
self.legacy_behaviors.update(legacy_behaviors)
60+
61+
62+
63+
def wrap_wsgi_app(self, app, *, use_deferred=False, **kwargs):
64+
"""Wrap a WSGI app with middlewares required to access App Engine APIs."""
65+
66+
67+
self.legacy_behaviors.update(kwargs)
68+
4469

4570

46-
def wrap_wsgi_app(app, use_legacy_context_mode=True, use_deferred=False):
47-
"""Wrap a WSGI app with middlewares required to access App Engine APIs."""
4871

72+
from google.appengine.runtime import initialize
73+
from google.appengine.runtime import middlewares
74+
from google.appengine.runtime import default_api_stub
4975

50-
from google.appengine.runtime import initialize
51-
from google.appengine.runtime import middlewares
52-
from google.appengine.runtime import default_api_stub
5376

77+
if self.legacy_behaviors['patch_thread_creation']:
5478

5579

80+
initialize.InitializeThreadingApis()
5681

57-
initialize.InitializeThreadingApis()
82+
default_api_stub.Register(default_api_stub.DefaultApiStub())
5883

59-
default_api_stub.Register(default_api_stub.DefaultApiStub())
84+
def if_legacy_context_mode(f):
85+
return f() if self.legacy_behaviors['use_legacy_context_mode'] else []
6086

87+
def if_deferred_enabled(f):
88+
return f() if use_deferred else []
6189

6290

63-
full_app_id.normalize()
91+
return middlewares.Wrap(
92+
app,
93+
if_legacy_context_mode(lambda: [
6494

65-
def if_legacy(array):
66-
return array if use_legacy_context_mode else []
6795

68-
def if_deferred_enabled(array):
69-
return array if use_deferred else []
7096

71-
return middlewares.Wrap(
72-
app,
73-
if_legacy([
74-
middlewares.MakeInitLegacyRequestOsEnvironMiddleware(),
75-
]) + [
76-
middlewares.RunInNewContextMiddleware,
77-
middlewares.SetContextFromHeadersMiddleware,
78-
middlewares.CallbackMiddleware,
79-
middlewares.UseRequestSecurityTicketForApiMiddleware,
80-
middlewares.WaitForResponseMiddleware,
81-
middlewares.WsgiEnvSettingMiddleware,
97+
middlewares.MakeInitLegacyRequestOsEnvironMiddleware(),
98+
]) + [
99+
middlewares.RunInNewContextMiddleware,
100+
middlewares.SetContextFromHeadersMiddleware,
101+
middlewares.CallbackMiddleware,
102+
middlewares.WaitForResponseMiddleware,
103+
middlewares.WsgiEnvSettingMiddleware,
82104

83-
middlewares.MakeLegacyWsgiEnvSettingMiddleware(),
84-
] + if_legacy([
85-
middlewares.LegacyWsgiRemoveXAppenginePrefixMiddleware,
86-
middlewares.LegacyCopyWsgiEnvToOsEnvMiddleware,
87-
]) + [
88-
middlewares.ErrorLoggingMiddleware,
89-
middlewares.BackgroundAndShutdownMiddleware,
90-
middlewares.SetNamespaceFromHeader,
91-
] + if_deferred_enabled([
92-
middlewares.AddDeferredMiddleware,
93-
]))
105+
middlewares.MakeLegacyWsgiEnvSettingMiddleware(),
106+
] + if_legacy_context_mode(lambda: [
107+
middlewares.LegacyWsgiRemoveXAppenginePrefixMiddleware,
108+
middlewares.LegacyCopyWsgiEnvToOsEnvMiddleware,
109+
]) + [
110+
middlewares.ErrorLoggingMiddleware,
111+
middlewares.BackgroundAndShutdownMiddleware,
112+
middlewares.SetNamespaceFromHeader,
113+
] + if_deferred_enabled(lambda: [
114+
middlewares.AddDeferredMiddleware,
115+
]))

src/google/appengine/api/api_base_pb2.py

Lines changed: 3 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,9 @@
1818

1919

2020
"""Generated protocol buffer code."""
21+
from google.protobuf.internal import builder as _builder
2122
from google.protobuf import descriptor as _descriptor
2223
from google.protobuf import descriptor_pool as _descriptor_pool
23-
from google.protobuf import message as _message
24-
from google.protobuf import reflection as _reflection
2524
from google.protobuf import symbol_database as _symbol_database
2625

2726

@@ -32,64 +31,8 @@
3231

3332
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n#google/appengine/api/api_base.proto\x12\x15google.appengine.base\"\x1c\n\x0bStringProto\x12\r\n\x05value\x18\x01 \x02(\t\"\x1f\n\x0eInteger32Proto\x12\r\n\x05value\x18\x01 \x02(\x05\"\x1f\n\x0eInteger64Proto\x12\r\n\x05value\x18\x01 \x02(\x03\"\x1a\n\tBoolProto\x12\r\n\x05value\x18\x01 \x02(\x08\"\x1c\n\x0b\x44oubleProto\x12\r\n\x05value\x18\x01 \x02(\x01\"\x1f\n\nBytesProto\x12\x11\n\x05value\x18\x01 \x02(\x0c\x42\x02\x08\x01\"\x0b\n\tVoidProtoB,\n\x1f\x63om.google.google.appengine.apiB\tApiBasePb')
3433

35-
36-
37-
_STRINGPROTO = DESCRIPTOR.message_types_by_name['StringProto']
38-
_INTEGER32PROTO = DESCRIPTOR.message_types_by_name['Integer32Proto']
39-
_INTEGER64PROTO = DESCRIPTOR.message_types_by_name['Integer64Proto']
40-
_BOOLPROTO = DESCRIPTOR.message_types_by_name['BoolProto']
41-
_DOUBLEPROTO = DESCRIPTOR.message_types_by_name['DoubleProto']
42-
_BYTESPROTO = DESCRIPTOR.message_types_by_name['BytesProto']
43-
_VOIDPROTO = DESCRIPTOR.message_types_by_name['VoidProto']
44-
StringProto = _reflection.GeneratedProtocolMessageType('StringProto', (_message.Message,), {
45-
'DESCRIPTOR' : _STRINGPROTO,
46-
'__module__' : 'google.appengine.api.api_base_pb2'
47-
48-
})
49-
_sym_db.RegisterMessage(StringProto)
50-
51-
Integer32Proto = _reflection.GeneratedProtocolMessageType('Integer32Proto', (_message.Message,), {
52-
'DESCRIPTOR' : _INTEGER32PROTO,
53-
'__module__' : 'google.appengine.api.api_base_pb2'
54-
55-
})
56-
_sym_db.RegisterMessage(Integer32Proto)
57-
58-
Integer64Proto = _reflection.GeneratedProtocolMessageType('Integer64Proto', (_message.Message,), {
59-
'DESCRIPTOR' : _INTEGER64PROTO,
60-
'__module__' : 'google.appengine.api.api_base_pb2'
61-
62-
})
63-
_sym_db.RegisterMessage(Integer64Proto)
64-
65-
BoolProto = _reflection.GeneratedProtocolMessageType('BoolProto', (_message.Message,), {
66-
'DESCRIPTOR' : _BOOLPROTO,
67-
'__module__' : 'google.appengine.api.api_base_pb2'
68-
69-
})
70-
_sym_db.RegisterMessage(BoolProto)
71-
72-
DoubleProto = _reflection.GeneratedProtocolMessageType('DoubleProto', (_message.Message,), {
73-
'DESCRIPTOR' : _DOUBLEPROTO,
74-
'__module__' : 'google.appengine.api.api_base_pb2'
75-
76-
})
77-
_sym_db.RegisterMessage(DoubleProto)
78-
79-
BytesProto = _reflection.GeneratedProtocolMessageType('BytesProto', (_message.Message,), {
80-
'DESCRIPTOR' : _BYTESPROTO,
81-
'__module__' : 'google.appengine.api.api_base_pb2'
82-
83-
})
84-
_sym_db.RegisterMessage(BytesProto)
85-
86-
VoidProto = _reflection.GeneratedProtocolMessageType('VoidProto', (_message.Message,), {
87-
'DESCRIPTOR' : _VOIDPROTO,
88-
'__module__' : 'google.appengine.api.api_base_pb2'
89-
90-
})
91-
_sym_db.RegisterMessage(VoidProto)
92-
34+
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
35+
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'google.appengine.api.api_base_pb2', globals())
9336
if _descriptor._USE_C_DESCRIPTORS == False:
9437

9538
DESCRIPTOR._options = None

src/google/appengine/api/api_testutil.py

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818

1919
"""Base class useful for testing with API stubs."""
2020

21-
22-
2321
import os
2422
import shutil
2523

@@ -33,17 +31,16 @@
3331
from google.appengine.datastore import cloud_datastore_v1_remote_stub
3432
from google.appengine.datastore import cloud_datastore_v1_stub
3533
from google.appengine.datastore import datastore_pbs
34+
from google.appengine.datastore import datastore_sqlite_stub
3635
from google.appengine.datastore import datastore_v4_stub
3736

3837

3938

4039

41-
42-
4340
FLAGS = flags.FLAGS
4441

45-
flags.DEFINE_boolean("use_sqlite", False,
46-
"uses the sqlite based datastore stub")
42+
flags.DEFINE_boolean('use_sqlite', False,
43+
'uses the sqlite based datastore stub')
4744

4845
_CLOUD_DATASTORE_ENABLED = datastore_pbs._CLOUD_DATASTORE_ENABLED
4946

@@ -99,10 +96,8 @@ def ConfigureDatastore(self, app_id='app', **kwargs):
9996
os.remove(filename)
10097

10198
if flags.FLAGS.use_sqlite:
102-
103-
104-
105-
99+
self.datastore_stub = datastore_sqlite_stub.DatastoreSqliteStub(
100+
app_id, self.datastore_file, **kwargs)
106101
raise NotImplementedError('datastore_sqlite_stub not supported')
107102
else:
108103

src/google/appengine/api/app_identity/app_identity_service_pb2.py

Lines changed: 3 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,9 @@
1818

1919

2020
"""Generated protocol buffer code."""
21+
from google.protobuf.internal import builder as _builder
2122
from google.protobuf import descriptor as _descriptor
2223
from google.protobuf import descriptor_pool as _descriptor_pool
23-
from google.protobuf import message as _message
24-
from google.protobuf import reflection as _reflection
2524
from google.protobuf import symbol_database as _symbol_database
2625

2726

@@ -32,105 +31,8 @@
3231

3332
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n<google/appengine/api/app_identity/app_identity_service.proto\x12\x10google.appengine\"\xe6\x01\n\x17\x41ppIdentityServiceError\"\xca\x01\n\tErrorCode\x12\x0b\n\x07SUCCESS\x10\x00\x12\x11\n\rUNKNOWN_SCOPE\x10\t\x12\x13\n\x0e\x42LOB_TOO_LARGE\x10\xe8\x07\x12\x16\n\x11\x44\x45\x41\x44LINE_EXCEEDED\x10\xe9\x07\x12\x14\n\x0fNOT_A_VALID_APP\x10\xea\x07\x12\x12\n\rUNKNOWN_ERROR\x10\xeb\x07\x12\x1e\n\x19GAIAMINT_NOT_INITIAILIZED\x10\xec\x07\x12\x10\n\x0bNOT_ALLOWED\x10\xed\x07\x12\x14\n\x0fNOT_IMPLEMENTED\x10\xee\x07\"*\n\x11SignForAppRequest\x12\x15\n\rbytes_to_sign\x18\x01 \x01(\x0c\"?\n\x12SignForAppResponse\x12\x10\n\x08key_name\x18\x01 \x01(\t\x12\x17\n\x0fsignature_bytes\x18\x02 \x01(\x0c\"#\n!GetPublicCertificateForAppRequest\"C\n\x11PublicCertificate\x12\x10\n\x08key_name\x18\x01 \x01(\t\x12\x1c\n\x14x509_certificate_pem\x18\x02 \x01(\t\"\x93\x01\n\"GetPublicCertificateForAppResponse\x12\x44\n\x17public_certificate_list\x18\x01 \x03(\x0b\x32#.google.appengine.PublicCertificate\x12\'\n\x1fmax_client_cache_time_in_second\x18\x02 \x01(\x03\"\x1e\n\x1cGetServiceAccountNameRequest\"=\n\x1dGetServiceAccountNameResponse\x12\x1c\n\x14service_account_name\x18\x01 \x01(\t\"d\n\x15GetAccessTokenRequest\x12\r\n\x05scope\x18\x01 \x03(\t\x12\x1a\n\x12service_account_id\x18\x02 \x01(\x03\x12 \n\x14service_account_name\x18\x03 \x01(\tB\x02\x18\x01\"G\n\x16GetAccessTokenResponse\x12\x14\n\x0c\x61\x63\x63\x65ss_token\x18\x01 \x01(\t\x12\x17\n\x0f\x65xpiration_time\x18\x02 \x01(\x03\" \n\x1eGetDefaultGcsBucketNameRequest\"B\n\x1fGetDefaultGcsBucketNameResponse\x12\x1f\n\x17\x64\x65\x66\x61ult_gcs_bucket_name\x18\x01 \x01(\tB<\n$com.google.appengine.api.appidentityB\x14\x41ppIdentityServicePb')
3433

35-
36-
37-
_APPIDENTITYSERVICEERROR = DESCRIPTOR.message_types_by_name['AppIdentityServiceError']
38-
_SIGNFORAPPREQUEST = DESCRIPTOR.message_types_by_name['SignForAppRequest']
39-
_SIGNFORAPPRESPONSE = DESCRIPTOR.message_types_by_name['SignForAppResponse']
40-
_GETPUBLICCERTIFICATEFORAPPREQUEST = DESCRIPTOR.message_types_by_name['GetPublicCertificateForAppRequest']
41-
_PUBLICCERTIFICATE = DESCRIPTOR.message_types_by_name['PublicCertificate']
42-
_GETPUBLICCERTIFICATEFORAPPRESPONSE = DESCRIPTOR.message_types_by_name['GetPublicCertificateForAppResponse']
43-
_GETSERVICEACCOUNTNAMEREQUEST = DESCRIPTOR.message_types_by_name['GetServiceAccountNameRequest']
44-
_GETSERVICEACCOUNTNAMERESPONSE = DESCRIPTOR.message_types_by_name['GetServiceAccountNameResponse']
45-
_GETACCESSTOKENREQUEST = DESCRIPTOR.message_types_by_name['GetAccessTokenRequest']
46-
_GETACCESSTOKENRESPONSE = DESCRIPTOR.message_types_by_name['GetAccessTokenResponse']
47-
_GETDEFAULTGCSBUCKETNAMEREQUEST = DESCRIPTOR.message_types_by_name['GetDefaultGcsBucketNameRequest']
48-
_GETDEFAULTGCSBUCKETNAMERESPONSE = DESCRIPTOR.message_types_by_name['GetDefaultGcsBucketNameResponse']
49-
_APPIDENTITYSERVICEERROR_ERRORCODE = _APPIDENTITYSERVICEERROR.enum_types_by_name['ErrorCode']
50-
AppIdentityServiceError = _reflection.GeneratedProtocolMessageType('AppIdentityServiceError', (_message.Message,), {
51-
'DESCRIPTOR' : _APPIDENTITYSERVICEERROR,
52-
'__module__' : 'google.appengine.api.app_identity.app_identity_service_pb2'
53-
54-
})
55-
_sym_db.RegisterMessage(AppIdentityServiceError)
56-
57-
SignForAppRequest = _reflection.GeneratedProtocolMessageType('SignForAppRequest', (_message.Message,), {
58-
'DESCRIPTOR' : _SIGNFORAPPREQUEST,
59-
'__module__' : 'google.appengine.api.app_identity.app_identity_service_pb2'
60-
61-
})
62-
_sym_db.RegisterMessage(SignForAppRequest)
63-
64-
SignForAppResponse = _reflection.GeneratedProtocolMessageType('SignForAppResponse', (_message.Message,), {
65-
'DESCRIPTOR' : _SIGNFORAPPRESPONSE,
66-
'__module__' : 'google.appengine.api.app_identity.app_identity_service_pb2'
67-
68-
})
69-
_sym_db.RegisterMessage(SignForAppResponse)
70-
71-
GetPublicCertificateForAppRequest = _reflection.GeneratedProtocolMessageType('GetPublicCertificateForAppRequest', (_message.Message,), {
72-
'DESCRIPTOR' : _GETPUBLICCERTIFICATEFORAPPREQUEST,
73-
'__module__' : 'google.appengine.api.app_identity.app_identity_service_pb2'
74-
75-
})
76-
_sym_db.RegisterMessage(GetPublicCertificateForAppRequest)
77-
78-
PublicCertificate = _reflection.GeneratedProtocolMessageType('PublicCertificate', (_message.Message,), {
79-
'DESCRIPTOR' : _PUBLICCERTIFICATE,
80-
'__module__' : 'google.appengine.api.app_identity.app_identity_service_pb2'
81-
82-
})
83-
_sym_db.RegisterMessage(PublicCertificate)
84-
85-
GetPublicCertificateForAppResponse = _reflection.GeneratedProtocolMessageType('GetPublicCertificateForAppResponse', (_message.Message,), {
86-
'DESCRIPTOR' : _GETPUBLICCERTIFICATEFORAPPRESPONSE,
87-
'__module__' : 'google.appengine.api.app_identity.app_identity_service_pb2'
88-
89-
})
90-
_sym_db.RegisterMessage(GetPublicCertificateForAppResponse)
91-
92-
GetServiceAccountNameRequest = _reflection.GeneratedProtocolMessageType('GetServiceAccountNameRequest', (_message.Message,), {
93-
'DESCRIPTOR' : _GETSERVICEACCOUNTNAMEREQUEST,
94-
'__module__' : 'google.appengine.api.app_identity.app_identity_service_pb2'
95-
96-
})
97-
_sym_db.RegisterMessage(GetServiceAccountNameRequest)
98-
99-
GetServiceAccountNameResponse = _reflection.GeneratedProtocolMessageType('GetServiceAccountNameResponse', (_message.Message,), {
100-
'DESCRIPTOR' : _GETSERVICEACCOUNTNAMERESPONSE,
101-
'__module__' : 'google.appengine.api.app_identity.app_identity_service_pb2'
102-
103-
})
104-
_sym_db.RegisterMessage(GetServiceAccountNameResponse)
105-
106-
GetAccessTokenRequest = _reflection.GeneratedProtocolMessageType('GetAccessTokenRequest', (_message.Message,), {
107-
'DESCRIPTOR' : _GETACCESSTOKENREQUEST,
108-
'__module__' : 'google.appengine.api.app_identity.app_identity_service_pb2'
109-
110-
})
111-
_sym_db.RegisterMessage(GetAccessTokenRequest)
112-
113-
GetAccessTokenResponse = _reflection.GeneratedProtocolMessageType('GetAccessTokenResponse', (_message.Message,), {
114-
'DESCRIPTOR' : _GETACCESSTOKENRESPONSE,
115-
'__module__' : 'google.appengine.api.app_identity.app_identity_service_pb2'
116-
117-
})
118-
_sym_db.RegisterMessage(GetAccessTokenResponse)
119-
120-
GetDefaultGcsBucketNameRequest = _reflection.GeneratedProtocolMessageType('GetDefaultGcsBucketNameRequest', (_message.Message,), {
121-
'DESCRIPTOR' : _GETDEFAULTGCSBUCKETNAMEREQUEST,
122-
'__module__' : 'google.appengine.api.app_identity.app_identity_service_pb2'
123-
124-
})
125-
_sym_db.RegisterMessage(GetDefaultGcsBucketNameRequest)
126-
127-
GetDefaultGcsBucketNameResponse = _reflection.GeneratedProtocolMessageType('GetDefaultGcsBucketNameResponse', (_message.Message,), {
128-
'DESCRIPTOR' : _GETDEFAULTGCSBUCKETNAMERESPONSE,
129-
'__module__' : 'google.appengine.api.app_identity.app_identity_service_pb2'
130-
131-
})
132-
_sym_db.RegisterMessage(GetDefaultGcsBucketNameResponse)
133-
34+
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
35+
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'google.appengine.api.app_identity.app_identity_service_pb2', globals())
13436
if _descriptor._USE_C_DESCRIPTORS == False:
13537

13638
DESCRIPTOR._options = None

0 commit comments

Comments
 (0)