Index: generated/googleapis_beta/lib/appengine/v1beta4.dart |
diff --git a/generated/googleapis_beta/lib/appengine/v1beta4.dart b/generated/googleapis_beta/lib/appengine/v1beta4.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3e26c8fd670bb8d8da9f1ba9ffc57e9c2e1b1205 |
--- /dev/null |
+++ b/generated/googleapis_beta/lib/appengine/v1beta4.dart |
@@ -0,0 +1,2759 @@ |
+// This is a generated file (see the discoveryapis_generator project). |
+ |
+library googleapis_beta.appengine.v1beta4; |
+ |
+import 'dart:core' as core; |
+import 'dart:async' as async; |
+import 'dart:convert' as convert; |
+ |
+import 'package:_discoveryapis_commons/_discoveryapis_commons.dart' as commons; |
+import 'package:http/http.dart' as http; |
+ |
+export 'package:_discoveryapis_commons/_discoveryapis_commons.dart' show |
+ ApiRequestError, DetailedApiRequestError; |
+ |
+const core.String USER_AGENT = 'dart-api-client appengine/v1beta4'; |
+ |
+/** |
+ * The App Engine Admin API enables developers to provision and manage their App |
+ * Engine applications. |
+ */ |
+class AppengineApi { |
+ /** View and manage your data across Google Cloud Platform services */ |
+ static const CloudPlatformScope = "https://www.googleapis.com/auth/cloud-platform"; |
+ |
+ |
+ final commons.ApiRequester _requester; |
+ |
+ AppsResourceApi get apps => new AppsResourceApi(_requester); |
+ |
+ AppengineApi(http.Client client, {core.String rootUrl: "https://appengine.googleapis.com/", core.String servicePath: ""}) : |
+ _requester = new commons.ApiRequester(client, rootUrl, servicePath, USER_AGENT); |
+} |
+ |
+ |
+class AppsResourceApi { |
+ final commons.ApiRequester _requester; |
+ |
+ AppsModulesResourceApi get modules => new AppsModulesResourceApi(_requester); |
+ AppsOperationsResourceApi get operations => new AppsOperationsResourceApi(_requester); |
+ |
+ AppsResourceApi(commons.ApiRequester client) : |
+ _requester = client; |
+ |
+ /** |
+ * Gets information about an application. |
+ * |
+ * Request parameters: |
+ * |
+ * [appsId] - Part of `name`. Name of the application to get. For example: |
+ * "apps/myapp". |
+ * |
+ * [ensureResourcesExist] - Certain resources associated with an application |
+ * are created on-demand. Controls whether these resources should be created |
+ * when performing the `GET` operation. If specified and any resources cloud |
+ * not be created, the request will fail with an error code. |
+ * |
+ * Completes with a [Application]. |
+ * |
+ * Completes with a [commons.ApiRequestError] if the API endpoint returned an |
+ * error. |
+ * |
+ * If the used [http.Client] completes with an error when making a REST call, |
+ * this method will complete with the same error. |
+ */ |
+ async.Future<Application> get(core.String appsId, {core.bool ensureResourcesExist}) { |
+ var _url = null; |
+ var _queryParams = new core.Map(); |
+ var _uploadMedia = null; |
+ var _uploadOptions = null; |
+ var _downloadOptions = commons.DownloadOptions.Metadata; |
+ var _body = null; |
+ |
+ if (appsId == null) { |
+ throw new core.ArgumentError("Parameter appsId is required."); |
+ } |
+ if (ensureResourcesExist != null) { |
+ _queryParams["ensureResourcesExist"] = ["${ensureResourcesExist}"]; |
+ } |
+ |
+ _url = 'v1beta4/apps/' + commons.Escaper.ecapeVariable('$appsId'); |
+ |
+ var _response = _requester.request(_url, |
+ "GET", |
+ body: _body, |
+ queryParams: _queryParams, |
+ uploadOptions: _uploadOptions, |
+ uploadMedia: _uploadMedia, |
+ downloadOptions: _downloadOptions); |
+ return _response.then((data) => new Application.fromJson(data)); |
+ } |
+ |
+} |
+ |
+ |
+class AppsModulesResourceApi { |
+ final commons.ApiRequester _requester; |
+ |
+ AppsModulesVersionsResourceApi get versions => new AppsModulesVersionsResourceApi(_requester); |
+ |
+ AppsModulesResourceApi(commons.ApiRequester client) : |
+ _requester = client; |
+ |
+ /** |
+ * Deletes a module and all enclosed versions. |
+ * |
+ * Request parameters: |
+ * |
+ * [appsId] - Part of `name`. Name of the resource requested. For example: |
+ * "apps/myapp/modules/default". |
+ * |
+ * [modulesId] - Part of `name`. See documentation of `appsId`. |
+ * |
+ * Completes with a [Operation]. |
+ * |
+ * Completes with a [commons.ApiRequestError] if the API endpoint returned an |
+ * error. |
+ * |
+ * If the used [http.Client] completes with an error when making a REST call, |
+ * this method will complete with the same error. |
+ */ |
+ async.Future<Operation> delete(core.String appsId, core.String modulesId) { |
+ var _url = null; |
+ var _queryParams = new core.Map(); |
+ var _uploadMedia = null; |
+ var _uploadOptions = null; |
+ var _downloadOptions = commons.DownloadOptions.Metadata; |
+ var _body = null; |
+ |
+ if (appsId == null) { |
+ throw new core.ArgumentError("Parameter appsId is required."); |
+ } |
+ if (modulesId == null) { |
+ throw new core.ArgumentError("Parameter modulesId is required."); |
+ } |
+ |
+ _url = 'v1beta4/apps/' + commons.Escaper.ecapeVariable('$appsId') + '/modules/' + commons.Escaper.ecapeVariable('$modulesId'); |
+ |
+ var _response = _requester.request(_url, |
+ "DELETE", |
+ body: _body, |
+ queryParams: _queryParams, |
+ uploadOptions: _uploadOptions, |
+ uploadMedia: _uploadMedia, |
+ downloadOptions: _downloadOptions); |
+ return _response.then((data) => new Operation.fromJson(data)); |
+ } |
+ |
+ /** |
+ * Gets the current configuration of the module. |
+ * |
+ * Request parameters: |
+ * |
+ * [appsId] - Part of `name`. Name of the resource requested. For example: |
+ * "/apps/myapp/modules/default". |
+ * |
+ * [modulesId] - Part of `name`. See documentation of `appsId`. |
+ * |
+ * Completes with a [Module]. |
+ * |
+ * Completes with a [commons.ApiRequestError] if the API endpoint returned an |
+ * error. |
+ * |
+ * If the used [http.Client] completes with an error when making a REST call, |
+ * this method will complete with the same error. |
+ */ |
+ async.Future<Module> get(core.String appsId, core.String modulesId) { |
+ var _url = null; |
+ var _queryParams = new core.Map(); |
+ var _uploadMedia = null; |
+ var _uploadOptions = null; |
+ var _downloadOptions = commons.DownloadOptions.Metadata; |
+ var _body = null; |
+ |
+ if (appsId == null) { |
+ throw new core.ArgumentError("Parameter appsId is required."); |
+ } |
+ if (modulesId == null) { |
+ throw new core.ArgumentError("Parameter modulesId is required."); |
+ } |
+ |
+ _url = 'v1beta4/apps/' + commons.Escaper.ecapeVariable('$appsId') + '/modules/' + commons.Escaper.ecapeVariable('$modulesId'); |
+ |
+ var _response = _requester.request(_url, |
+ "GET", |
+ body: _body, |
+ queryParams: _queryParams, |
+ uploadOptions: _uploadOptions, |
+ uploadMedia: _uploadMedia, |
+ downloadOptions: _downloadOptions); |
+ return _response.then((data) => new Module.fromJson(data)); |
+ } |
+ |
+ /** |
+ * Lists all the modules in the application. |
+ * |
+ * Request parameters: |
+ * |
+ * [appsId] - Part of `name`. Name of the resource requested. For example: |
+ * "/apps/myapp". |
+ * |
+ * [pageSize] - Maximum results to return per page. |
+ * |
+ * [pageToken] - Continuation token for fetching the next page of results. |
+ * |
+ * Completes with a [ListModulesResponse]. |
+ * |
+ * Completes with a [commons.ApiRequestError] if the API endpoint returned an |
+ * error. |
+ * |
+ * If the used [http.Client] completes with an error when making a REST call, |
+ * this method will complete with the same error. |
+ */ |
+ async.Future<ListModulesResponse> list(core.String appsId, {core.int pageSize, core.String pageToken}) { |
+ var _url = null; |
+ var _queryParams = new core.Map(); |
+ var _uploadMedia = null; |
+ var _uploadOptions = null; |
+ var _downloadOptions = commons.DownloadOptions.Metadata; |
+ var _body = null; |
+ |
+ if (appsId == null) { |
+ throw new core.ArgumentError("Parameter appsId is required."); |
+ } |
+ if (pageSize != null) { |
+ _queryParams["pageSize"] = ["${pageSize}"]; |
+ } |
+ if (pageToken != null) { |
+ _queryParams["pageToken"] = [pageToken]; |
+ } |
+ |
+ _url = 'v1beta4/apps/' + commons.Escaper.ecapeVariable('$appsId') + '/modules'; |
+ |
+ var _response = _requester.request(_url, |
+ "GET", |
+ body: _body, |
+ queryParams: _queryParams, |
+ uploadOptions: _uploadOptions, |
+ uploadMedia: _uploadMedia, |
+ downloadOptions: _downloadOptions); |
+ return _response.then((data) => new ListModulesResponse.fromJson(data)); |
+ } |
+ |
+ /** |
+ * Updates the configuration of the specified module. |
+ * |
+ * [request] - The metadata request object. |
+ * |
+ * Request parameters: |
+ * |
+ * [appsId] - Part of `name`. Name of the resource to update. For example: |
+ * "apps/myapp/modules/default". |
+ * |
+ * [modulesId] - Part of `name`. See documentation of `appsId`. |
+ * |
+ * [mask] - Standard field mask for the set of fields to be updated. |
+ * |
+ * [migrateTraffic] - Whether to use Traffic Migration to shift traffic |
+ * gradually. Traffic can only be migrated from a single version to another |
+ * single version. |
+ * |
+ * Completes with a [Operation]. |
+ * |
+ * Completes with a [commons.ApiRequestError] if the API endpoint returned an |
+ * error. |
+ * |
+ * If the used [http.Client] completes with an error when making a REST call, |
+ * this method will complete with the same error. |
+ */ |
+ async.Future<Operation> patch(Module request, core.String appsId, core.String modulesId, {core.String mask, core.bool migrateTraffic}) { |
+ var _url = null; |
+ var _queryParams = new core.Map(); |
+ var _uploadMedia = null; |
+ var _uploadOptions = null; |
+ var _downloadOptions = commons.DownloadOptions.Metadata; |
+ var _body = null; |
+ |
+ if (request != null) { |
+ _body = convert.JSON.encode((request).toJson()); |
+ } |
+ if (appsId == null) { |
+ throw new core.ArgumentError("Parameter appsId is required."); |
+ } |
+ if (modulesId == null) { |
+ throw new core.ArgumentError("Parameter modulesId is required."); |
+ } |
+ if (mask != null) { |
+ _queryParams["mask"] = [mask]; |
+ } |
+ if (migrateTraffic != null) { |
+ _queryParams["migrateTraffic"] = ["${migrateTraffic}"]; |
+ } |
+ |
+ _url = 'v1beta4/apps/' + commons.Escaper.ecapeVariable('$appsId') + '/modules/' + commons.Escaper.ecapeVariable('$modulesId'); |
+ |
+ var _response = _requester.request(_url, |
+ "PATCH", |
+ body: _body, |
+ queryParams: _queryParams, |
+ uploadOptions: _uploadOptions, |
+ uploadMedia: _uploadMedia, |
+ downloadOptions: _downloadOptions); |
+ return _response.then((data) => new Operation.fromJson(data)); |
+ } |
+ |
+} |
+ |
+ |
+class AppsModulesVersionsResourceApi { |
+ final commons.ApiRequester _requester; |
+ |
+ AppsModulesVersionsResourceApi(commons.ApiRequester client) : |
+ _requester = client; |
+ |
+ /** |
+ * Deploys new code and resource files to a version. |
+ * |
+ * [request] - The metadata request object. |
+ * |
+ * Request parameters: |
+ * |
+ * [appsId] - Part of `name`. Name of the resource to update. For example: |
+ * "apps/myapp/modules/default". |
+ * |
+ * [modulesId] - Part of `name`. See documentation of `appsId`. |
+ * |
+ * Completes with a [Operation]. |
+ * |
+ * Completes with a [commons.ApiRequestError] if the API endpoint returned an |
+ * error. |
+ * |
+ * If the used [http.Client] completes with an error when making a REST call, |
+ * this method will complete with the same error. |
+ */ |
+ async.Future<Operation> create(Version request, core.String appsId, core.String modulesId) { |
+ var _url = null; |
+ var _queryParams = new core.Map(); |
+ var _uploadMedia = null; |
+ var _uploadOptions = null; |
+ var _downloadOptions = commons.DownloadOptions.Metadata; |
+ var _body = null; |
+ |
+ if (request != null) { |
+ _body = convert.JSON.encode((request).toJson()); |
+ } |
+ if (appsId == null) { |
+ throw new core.ArgumentError("Parameter appsId is required."); |
+ } |
+ if (modulesId == null) { |
+ throw new core.ArgumentError("Parameter modulesId is required."); |
+ } |
+ |
+ _url = 'v1beta4/apps/' + commons.Escaper.ecapeVariable('$appsId') + '/modules/' + commons.Escaper.ecapeVariable('$modulesId') + '/versions'; |
+ |
+ var _response = _requester.request(_url, |
+ "POST", |
+ body: _body, |
+ queryParams: _queryParams, |
+ uploadOptions: _uploadOptions, |
+ uploadMedia: _uploadMedia, |
+ downloadOptions: _downloadOptions); |
+ return _response.then((data) => new Operation.fromJson(data)); |
+ } |
+ |
+ /** |
+ * Deletes an existing version. |
+ * |
+ * Request parameters: |
+ * |
+ * [appsId] - Part of `name`. Name of the resource requested. For example: |
+ * "apps/myapp/modules/default/versions/v1". |
+ * |
+ * [modulesId] - Part of `name`. See documentation of `appsId`. |
+ * |
+ * [versionsId] - Part of `name`. See documentation of `appsId`. |
+ * |
+ * Completes with a [Operation]. |
+ * |
+ * Completes with a [commons.ApiRequestError] if the API endpoint returned an |
+ * error. |
+ * |
+ * If the used [http.Client] completes with an error when making a REST call, |
+ * this method will complete with the same error. |
+ */ |
+ async.Future<Operation> delete(core.String appsId, core.String modulesId, core.String versionsId) { |
+ var _url = null; |
+ var _queryParams = new core.Map(); |
+ var _uploadMedia = null; |
+ var _uploadOptions = null; |
+ var _downloadOptions = commons.DownloadOptions.Metadata; |
+ var _body = null; |
+ |
+ if (appsId == null) { |
+ throw new core.ArgumentError("Parameter appsId is required."); |
+ } |
+ if (modulesId == null) { |
+ throw new core.ArgumentError("Parameter modulesId is required."); |
+ } |
+ if (versionsId == null) { |
+ throw new core.ArgumentError("Parameter versionsId is required."); |
+ } |
+ |
+ _url = 'v1beta4/apps/' + commons.Escaper.ecapeVariable('$appsId') + '/modules/' + commons.Escaper.ecapeVariable('$modulesId') + '/versions/' + commons.Escaper.ecapeVariable('$versionsId'); |
+ |
+ var _response = _requester.request(_url, |
+ "DELETE", |
+ body: _body, |
+ queryParams: _queryParams, |
+ uploadOptions: _uploadOptions, |
+ uploadMedia: _uploadMedia, |
+ downloadOptions: _downloadOptions); |
+ return _response.then((data) => new Operation.fromJson(data)); |
+ } |
+ |
+ /** |
+ * Gets application deployment information. |
+ * |
+ * Request parameters: |
+ * |
+ * [appsId] - Part of `name`. Name of the resource requested. For example: |
+ * "apps/myapp/modules/default/versions/v1". |
+ * |
+ * [modulesId] - Part of `name`. See documentation of `appsId`. |
+ * |
+ * [versionsId] - Part of `name`. See documentation of `appsId`. |
+ * |
+ * [view] - Controls the set of fields returned in the `Get` response. |
+ * Possible string values are: |
+ * - "BASIC" : A BASIC. |
+ * - "FULL" : A FULL. |
+ * |
+ * Completes with a [Version]. |
+ * |
+ * Completes with a [commons.ApiRequestError] if the API endpoint returned an |
+ * error. |
+ * |
+ * If the used [http.Client] completes with an error when making a REST call, |
+ * this method will complete with the same error. |
+ */ |
+ async.Future<Version> get(core.String appsId, core.String modulesId, core.String versionsId, {core.String view}) { |
+ var _url = null; |
+ var _queryParams = new core.Map(); |
+ var _uploadMedia = null; |
+ var _uploadOptions = null; |
+ var _downloadOptions = commons.DownloadOptions.Metadata; |
+ var _body = null; |
+ |
+ if (appsId == null) { |
+ throw new core.ArgumentError("Parameter appsId is required."); |
+ } |
+ if (modulesId == null) { |
+ throw new core.ArgumentError("Parameter modulesId is required."); |
+ } |
+ if (versionsId == null) { |
+ throw new core.ArgumentError("Parameter versionsId is required."); |
+ } |
+ if (view != null) { |
+ _queryParams["view"] = [view]; |
+ } |
+ |
+ _url = 'v1beta4/apps/' + commons.Escaper.ecapeVariable('$appsId') + '/modules/' + commons.Escaper.ecapeVariable('$modulesId') + '/versions/' + commons.Escaper.ecapeVariable('$versionsId'); |
+ |
+ var _response = _requester.request(_url, |
+ "GET", |
+ body: _body, |
+ queryParams: _queryParams, |
+ uploadOptions: _uploadOptions, |
+ uploadMedia: _uploadMedia, |
+ downloadOptions: _downloadOptions); |
+ return _response.then((data) => new Version.fromJson(data)); |
+ } |
+ |
+ /** |
+ * Lists the versions of a module. |
+ * |
+ * Request parameters: |
+ * |
+ * [appsId] - Part of `name`. Name of the resource requested. For example: |
+ * "apps/myapp/modules/default". |
+ * |
+ * [modulesId] - Part of `name`. See documentation of `appsId`. |
+ * |
+ * [view] - Controls the set of fields returned in the `List` response. |
+ * Possible string values are: |
+ * - "BASIC" : A BASIC. |
+ * - "FULL" : A FULL. |
+ * |
+ * [pageSize] - Maximum results to return per page. |
+ * |
+ * [pageToken] - Continuation token for fetching the next page of results. |
+ * |
+ * Completes with a [ListVersionsResponse]. |
+ * |
+ * Completes with a [commons.ApiRequestError] if the API endpoint returned an |
+ * error. |
+ * |
+ * If the used [http.Client] completes with an error when making a REST call, |
+ * this method will complete with the same error. |
+ */ |
+ async.Future<ListVersionsResponse> list(core.String appsId, core.String modulesId, {core.String view, core.int pageSize, core.String pageToken}) { |
+ var _url = null; |
+ var _queryParams = new core.Map(); |
+ var _uploadMedia = null; |
+ var _uploadOptions = null; |
+ var _downloadOptions = commons.DownloadOptions.Metadata; |
+ var _body = null; |
+ |
+ if (appsId == null) { |
+ throw new core.ArgumentError("Parameter appsId is required."); |
+ } |
+ if (modulesId == null) { |
+ throw new core.ArgumentError("Parameter modulesId is required."); |
+ } |
+ if (view != null) { |
+ _queryParams["view"] = [view]; |
+ } |
+ if (pageSize != null) { |
+ _queryParams["pageSize"] = ["${pageSize}"]; |
+ } |
+ if (pageToken != null) { |
+ _queryParams["pageToken"] = [pageToken]; |
+ } |
+ |
+ _url = 'v1beta4/apps/' + commons.Escaper.ecapeVariable('$appsId') + '/modules/' + commons.Escaper.ecapeVariable('$modulesId') + '/versions'; |
+ |
+ var _response = _requester.request(_url, |
+ "GET", |
+ body: _body, |
+ queryParams: _queryParams, |
+ uploadOptions: _uploadOptions, |
+ uploadMedia: _uploadMedia, |
+ downloadOptions: _downloadOptions); |
+ return _response.then((data) => new ListVersionsResponse.fromJson(data)); |
+ } |
+ |
+} |
+ |
+ |
+class AppsOperationsResourceApi { |
+ final commons.ApiRequester _requester; |
+ |
+ AppsOperationsResourceApi(commons.ApiRequester client) : |
+ _requester = client; |
+ |
+ /** |
+ * Gets the latest state of a long-running operation. Clients can use this |
+ * method to poll the operation result at intervals as recommended by the API |
+ * service. |
+ * |
+ * Request parameters: |
+ * |
+ * [appsId] - Part of `name`. The name of the operation resource. |
+ * |
+ * [operationsId] - Part of `name`. See documentation of `appsId`. |
+ * |
+ * Completes with a [Operation]. |
+ * |
+ * Completes with a [commons.ApiRequestError] if the API endpoint returned an |
+ * error. |
+ * |
+ * If the used [http.Client] completes with an error when making a REST call, |
+ * this method will complete with the same error. |
+ */ |
+ async.Future<Operation> get(core.String appsId, core.String operationsId) { |
+ var _url = null; |
+ var _queryParams = new core.Map(); |
+ var _uploadMedia = null; |
+ var _uploadOptions = null; |
+ var _downloadOptions = commons.DownloadOptions.Metadata; |
+ var _body = null; |
+ |
+ if (appsId == null) { |
+ throw new core.ArgumentError("Parameter appsId is required."); |
+ } |
+ if (operationsId == null) { |
+ throw new core.ArgumentError("Parameter operationsId is required."); |
+ } |
+ |
+ _url = 'v1beta4/apps/' + commons.Escaper.ecapeVariable('$appsId') + '/operations/' + commons.Escaper.ecapeVariable('$operationsId'); |
+ |
+ var _response = _requester.request(_url, |
+ "GET", |
+ body: _body, |
+ queryParams: _queryParams, |
+ uploadOptions: _uploadOptions, |
+ uploadMedia: _uploadMedia, |
+ downloadOptions: _downloadOptions); |
+ return _response.then((data) => new Operation.fromJson(data)); |
+ } |
+ |
+ /** |
+ * Lists operations that match the specified filter in the request. If the |
+ * server doesn't support this method, it returns `UNIMPLEMENTED`. NOTE: the |
+ * `name` binding below allows API services to override the binding to use |
+ * different resource name schemes, such as `users / * /operations`. |
+ * |
+ * Request parameters: |
+ * |
+ * [appsId] - Part of `name`. The name of the operation collection. |
+ * |
+ * [filter] - The standard List filter. |
+ * |
+ * [pageSize] - The standard List page size. |
+ * |
+ * [pageToken] - The standard List page token. |
+ * |
+ * Completes with a [ListOperationsResponse]. |
+ * |
+ * Completes with a [commons.ApiRequestError] if the API endpoint returned an |
+ * error. |
+ * |
+ * If the used [http.Client] completes with an error when making a REST call, |
+ * this method will complete with the same error. |
+ */ |
+ async.Future<ListOperationsResponse> list(core.String appsId, {core.String filter, core.int pageSize, core.String pageToken}) { |
+ var _url = null; |
+ var _queryParams = new core.Map(); |
+ var _uploadMedia = null; |
+ var _uploadOptions = null; |
+ var _downloadOptions = commons.DownloadOptions.Metadata; |
+ var _body = null; |
+ |
+ if (appsId == null) { |
+ throw new core.ArgumentError("Parameter appsId is required."); |
+ } |
+ if (filter != null) { |
+ _queryParams["filter"] = [filter]; |
+ } |
+ if (pageSize != null) { |
+ _queryParams["pageSize"] = ["${pageSize}"]; |
+ } |
+ if (pageToken != null) { |
+ _queryParams["pageToken"] = [pageToken]; |
+ } |
+ |
+ _url = 'v1beta4/apps/' + commons.Escaper.ecapeVariable('$appsId') + '/operations'; |
+ |
+ var _response = _requester.request(_url, |
+ "GET", |
+ body: _body, |
+ queryParams: _queryParams, |
+ uploadOptions: _uploadOptions, |
+ uploadMedia: _uploadMedia, |
+ downloadOptions: _downloadOptions); |
+ return _response.then((data) => new ListOperationsResponse.fromJson(data)); |
+ } |
+ |
+} |
+ |
+ |
+ |
+/** API Serving configuration for Cloud Endpoints. */ |
+class ApiConfigHandler { |
+ /** |
+ * For users not logged in, how to handle access to resources with required |
+ * login. Defaults to "redirect". |
+ * Possible string values are: |
+ * - "AUTH_FAIL_ACTION_UNSPECIFIED" : A AUTH_FAIL_ACTION_UNSPECIFIED. |
+ * - "AUTH_FAIL_ACTION_REDIRECT" : A AUTH_FAIL_ACTION_REDIRECT. |
+ * - "AUTH_FAIL_ACTION_UNAUTHORIZED" : A AUTH_FAIL_ACTION_UNAUTHORIZED. |
+ */ |
+ core.String authFailAction; |
+ /** |
+ * What level of login is required to access this resource. Default is |
+ * "optional". |
+ * Possible string values are: |
+ * - "LOGIN_UNSPECIFIED" : A LOGIN_UNSPECIFIED. |
+ * - "LOGIN_OPTIONAL" : A LOGIN_OPTIONAL. |
+ * - "LOGIN_ADMIN" : A LOGIN_ADMIN. |
+ * - "LOGIN_REQUIRED" : A LOGIN_REQUIRED. |
+ */ |
+ core.String login; |
+ /** Specifies the path to the script from the application root directory. */ |
+ core.String script; |
+ /** |
+ * Configures whether security (HTTPS) should be enforced for this URL. |
+ * Possible string values are: |
+ * - "SECURE_UNSPECIFIED" : A SECURE_UNSPECIFIED. |
+ * - "SECURE_DEFAULT" : A SECURE_DEFAULT. |
+ * - "SECURE_NEVER" : A SECURE_NEVER. |
+ * - "SECURE_OPTIONAL" : A SECURE_OPTIONAL. |
+ * - "SECURE_ALWAYS" : A SECURE_ALWAYS. |
+ */ |
+ core.String securityLevel; |
+ /** URL to serve the endpoint at. */ |
+ core.String url; |
+ |
+ ApiConfigHandler(); |
+ |
+ ApiConfigHandler.fromJson(core.Map _json) { |
+ if (_json.containsKey("authFailAction")) { |
+ authFailAction = _json["authFailAction"]; |
+ } |
+ if (_json.containsKey("login")) { |
+ login = _json["login"]; |
+ } |
+ if (_json.containsKey("script")) { |
+ script = _json["script"]; |
+ } |
+ if (_json.containsKey("securityLevel")) { |
+ securityLevel = _json["securityLevel"]; |
+ } |
+ if (_json.containsKey("url")) { |
+ url = _json["url"]; |
+ } |
+ } |
+ |
+ core.Map toJson() { |
+ var _json = new core.Map(); |
+ if (authFailAction != null) { |
+ _json["authFailAction"] = authFailAction; |
+ } |
+ if (login != null) { |
+ _json["login"] = login; |
+ } |
+ if (script != null) { |
+ _json["script"] = script; |
+ } |
+ if (securityLevel != null) { |
+ _json["securityLevel"] = securityLevel; |
+ } |
+ if (url != null) { |
+ _json["url"] = url; |
+ } |
+ return _json; |
+ } |
+} |
+ |
+/** Use Google Cloud Endpoints to handle requests. */ |
+class ApiEndpointHandler { |
+ /** Specifies the path to the script from the application root directory. */ |
+ core.String scriptPath; |
+ |
+ ApiEndpointHandler(); |
+ |
+ ApiEndpointHandler.fromJson(core.Map _json) { |
+ if (_json.containsKey("scriptPath")) { |
+ scriptPath = _json["scriptPath"]; |
+ } |
+ } |
+ |
+ core.Map toJson() { |
+ var _json = new core.Map(); |
+ if (scriptPath != null) { |
+ _json["scriptPath"] = scriptPath; |
+ } |
+ return _json; |
+ } |
+} |
+ |
+/** |
+ * An Application contains the top-level configuration of an App Engine |
+ * application. |
+ */ |
+class Application { |
+ /** |
+ * A Google Cloud Storage bucket which can be used for storing files |
+ * associated with an application. This bucket is associated with the |
+ * application and can be used by the gcloud deployment commands. @OutputOnly |
+ */ |
+ core.String codeBucket; |
+ /** |
+ * HTTP path dispatch rules for requests to the app that do not explicitly |
+ * target a module or version. The rules are order-dependent. |
+ */ |
+ core.List<UrlDispatchRule> dispatchRules; |
+ /** |
+ * The relative name/path of the application. Example: "myapp". @OutputOnly |
+ */ |
+ core.String id; |
+ /** |
+ * The location from which the application will be run. Choices are "us" for |
+ * United States and "eu" for European Union. Application instances will run |
+ * out of data centers in the chosen location and all of the application's End |
+ * User Content will be stored at rest in the chosen location. The default is |
+ * "us". |
+ */ |
+ core.String location; |
+ /** |
+ * The full path to the application in the API. Example: "apps/myapp". |
+ * @OutputOnly |
+ */ |
+ core.String name; |
+ |
+ Application(); |
+ |
+ Application.fromJson(core.Map _json) { |
+ if (_json.containsKey("codeBucket")) { |
+ codeBucket = _json["codeBucket"]; |
+ } |
+ if (_json.containsKey("dispatchRules")) { |
+ dispatchRules = _json["dispatchRules"].map((value) => new UrlDispatchRule.fromJson(value)).toList(); |
+ } |
+ if (_json.containsKey("id")) { |
+ id = _json["id"]; |
+ } |
+ if (_json.containsKey("location")) { |
+ location = _json["location"]; |
+ } |
+ if (_json.containsKey("name")) { |
+ name = _json["name"]; |
+ } |
+ } |
+ |
+ core.Map toJson() { |
+ var _json = new core.Map(); |
+ if (codeBucket != null) { |
+ _json["codeBucket"] = codeBucket; |
+ } |
+ if (dispatchRules != null) { |
+ _json["dispatchRules"] = dispatchRules.map((value) => (value).toJson()).toList(); |
+ } |
+ if (id != null) { |
+ _json["id"] = id; |
+ } |
+ if (location != null) { |
+ _json["location"] = location; |
+ } |
+ if (name != null) { |
+ _json["name"] = name; |
+ } |
+ return _json; |
+ } |
+} |
+ |
+/** |
+ * Automatic scaling is the scaling policy that App Engine has used since its |
+ * inception. It is based on request rate, response latencies, and other |
+ * application metrics. |
+ */ |
+class AutomaticScaling { |
+ /** |
+ * The amount of time that the |
+ * [Autoscaler](https://cloud.google.com/compute/docs/autoscaler/) should wait |
+ * between changes to the number of virtual machines. Applies only to the VM |
+ * runtime. |
+ */ |
+ core.String coolDownPeriod; |
+ /** Target scaling by CPU usage. */ |
+ CpuUtilization cpuUtilization; |
+ /** |
+ * The number of concurrent requests an automatic scaling instance can accept |
+ * before the scheduler spawns a new instance. Default value is chosen based |
+ * on the runtime. |
+ */ |
+ core.int maxConcurrentRequests; |
+ /** |
+ * The maximum number of idle instances that App Engine should maintain for |
+ * this version. |
+ */ |
+ core.int maxIdleInstances; |
+ /** |
+ * The maximum amount of time that App Engine should allow a request to wait |
+ * in the pending queue before starting a new instance to handle it. |
+ */ |
+ core.String maxPendingLatency; |
+ /** |
+ * Max number of instances that App Engine should start to handle requests. |
+ */ |
+ core.int maxTotalInstances; |
+ /** |
+ * The minimum number of idle instances that App Engine should maintain for |
+ * this version. Only applies to the default version of a module, since other |
+ * versions are not expected to receive significant traffic. |
+ */ |
+ core.int minIdleInstances; |
+ /** |
+ * The minimum amount of time that App Engine should allow a request to wait |
+ * in the pending queue before starting a new instance to handle it. |
+ */ |
+ core.String minPendingLatency; |
+ /** Minimum number of instances that App Engine should maintain. */ |
+ core.int minTotalInstances; |
+ |
+ AutomaticScaling(); |
+ |
+ AutomaticScaling.fromJson(core.Map _json) { |
+ if (_json.containsKey("coolDownPeriod")) { |
+ coolDownPeriod = _json["coolDownPeriod"]; |
+ } |
+ if (_json.containsKey("cpuUtilization")) { |
+ cpuUtilization = new CpuUtilization.fromJson(_json["cpuUtilization"]); |
+ } |
+ if (_json.containsKey("maxConcurrentRequests")) { |
+ maxConcurrentRequests = _json["maxConcurrentRequests"]; |
+ } |
+ if (_json.containsKey("maxIdleInstances")) { |
+ maxIdleInstances = _json["maxIdleInstances"]; |
+ } |
+ if (_json.containsKey("maxPendingLatency")) { |
+ maxPendingLatency = _json["maxPendingLatency"]; |
+ } |
+ if (_json.containsKey("maxTotalInstances")) { |
+ maxTotalInstances = _json["maxTotalInstances"]; |
+ } |
+ if (_json.containsKey("minIdleInstances")) { |
+ minIdleInstances = _json["minIdleInstances"]; |
+ } |
+ if (_json.containsKey("minPendingLatency")) { |
+ minPendingLatency = _json["minPendingLatency"]; |
+ } |
+ if (_json.containsKey("minTotalInstances")) { |
+ minTotalInstances = _json["minTotalInstances"]; |
+ } |
+ } |
+ |
+ core.Map toJson() { |
+ var _json = new core.Map(); |
+ if (coolDownPeriod != null) { |
+ _json["coolDownPeriod"] = coolDownPeriod; |
+ } |
+ if (cpuUtilization != null) { |
+ _json["cpuUtilization"] = (cpuUtilization).toJson(); |
+ } |
+ if (maxConcurrentRequests != null) { |
+ _json["maxConcurrentRequests"] = maxConcurrentRequests; |
+ } |
+ if (maxIdleInstances != null) { |
+ _json["maxIdleInstances"] = maxIdleInstances; |
+ } |
+ if (maxPendingLatency != null) { |
+ _json["maxPendingLatency"] = maxPendingLatency; |
+ } |
+ if (maxTotalInstances != null) { |
+ _json["maxTotalInstances"] = maxTotalInstances; |
+ } |
+ if (minIdleInstances != null) { |
+ _json["minIdleInstances"] = minIdleInstances; |
+ } |
+ if (minPendingLatency != null) { |
+ _json["minPendingLatency"] = minPendingLatency; |
+ } |
+ if (minTotalInstances != null) { |
+ _json["minTotalInstances"] = minTotalInstances; |
+ } |
+ return _json; |
+ } |
+} |
+ |
+/** |
+ * A module with basic scaling will create an instance when the application |
+ * receives a request. The instance will be turned down when the app becomes |
+ * idle. Basic scaling is ideal for work that is intermittent or driven by user |
+ * activity. |
+ */ |
+class BasicScaling { |
+ /** |
+ * The instance will be shut down this amount of time after receiving its last |
+ * request. |
+ */ |
+ core.String idleTimeout; |
+ /** |
+ * The maximum number of instances for App Engine to create for this version. |
+ */ |
+ core.int maxInstances; |
+ |
+ BasicScaling(); |
+ |
+ BasicScaling.fromJson(core.Map _json) { |
+ if (_json.containsKey("idleTimeout")) { |
+ idleTimeout = _json["idleTimeout"]; |
+ } |
+ if (_json.containsKey("maxInstances")) { |
+ maxInstances = _json["maxInstances"]; |
+ } |
+ } |
+ |
+ core.Map toJson() { |
+ var _json = new core.Map(); |
+ if (idleTimeout != null) { |
+ _json["idleTimeout"] = idleTimeout; |
+ } |
+ if (maxInstances != null) { |
+ _json["maxInstances"] = maxInstances; |
+ } |
+ return _json; |
+ } |
+} |
+ |
+/** |
+ * A Docker (container) image which should be used to start the application. |
+ */ |
+class ContainerInfo { |
+ /** |
+ * Reference to a hosted container image. Must be a URI to a resource in a |
+ * Docker repository. Must be fully qualified, including tag or digest. e.g. |
+ * gcr.io/my-project/image:tag or gcr.io/my-project/image@digest |
+ */ |
+ core.String image; |
+ /** The SHA256 hash of the image in hex. */ |
+ core.String sha256; |
+ |
+ ContainerInfo(); |
+ |
+ ContainerInfo.fromJson(core.Map _json) { |
+ if (_json.containsKey("image")) { |
+ image = _json["image"]; |
+ } |
+ if (_json.containsKey("sha256")) { |
+ sha256 = _json["sha256"]; |
+ } |
+ } |
+ |
+ core.Map toJson() { |
+ var _json = new core.Map(); |
+ if (image != null) { |
+ _json["image"] = image; |
+ } |
+ if (sha256 != null) { |
+ _json["sha256"] = sha256; |
+ } |
+ return _json; |
+ } |
+} |
+ |
+/** Target scaling by CPU usage. */ |
+class CpuUtilization { |
+ /** The period of time over which CPU utilization is calculated. */ |
+ core.String aggregationWindowLength; |
+ /** Target (0-1) CPU utilization ratio to maintain when scaling. */ |
+ core.double targetUtilization; |
+ |
+ CpuUtilization(); |
+ |
+ CpuUtilization.fromJson(core.Map _json) { |
+ if (_json.containsKey("aggregationWindowLength")) { |
+ aggregationWindowLength = _json["aggregationWindowLength"]; |
+ } |
+ if (_json.containsKey("targetUtilization")) { |
+ targetUtilization = _json["targetUtilization"]; |
+ } |
+ } |
+ |
+ core.Map toJson() { |
+ var _json = new core.Map(); |
+ if (aggregationWindowLength != null) { |
+ _json["aggregationWindowLength"] = aggregationWindowLength; |
+ } |
+ if (targetUtilization != null) { |
+ _json["targetUtilization"] = targetUtilization; |
+ } |
+ return _json; |
+ } |
+} |
+ |
+/** Code and application artifacts used to deploy a version to App Engine. */ |
+class Deployment { |
+ /** |
+ * If supplied, a docker (container) image which should be used to start the |
+ * application. Only applicable to the 'vm' runtime. |
+ */ |
+ ContainerInfo container; |
+ /** |
+ * A manifest of files stored in Google Cloud Storage which should be included |
+ * as part of this application. All files must be readable using the |
+ * credentials supplied with this call. |
+ */ |
+ core.Map<core.String, FileInfo> files; |
+ /** |
+ * The origin of the source code for this deployment. There can be more than |
+ * one source reference per Version if source code is distributed among |
+ * multiple repositories. |
+ */ |
+ core.List<SourceReference> sourceReferences; |
+ |
+ Deployment(); |
+ |
+ Deployment.fromJson(core.Map _json) { |
+ if (_json.containsKey("container")) { |
+ container = new ContainerInfo.fromJson(_json["container"]); |
+ } |
+ if (_json.containsKey("files")) { |
+ files = commons.mapMap(_json["files"], (item) => new FileInfo.fromJson(item)); |
+ } |
+ if (_json.containsKey("sourceReferences")) { |
+ sourceReferences = _json["sourceReferences"].map((value) => new SourceReference.fromJson(value)).toList(); |
+ } |
+ } |
+ |
+ core.Map toJson() { |
+ var _json = new core.Map(); |
+ if (container != null) { |
+ _json["container"] = (container).toJson(); |
+ } |
+ if (files != null) { |
+ _json["files"] = commons.mapMap(files, (item) => (item).toJson()); |
+ } |
+ if (sourceReferences != null) { |
+ _json["sourceReferences"] = sourceReferences.map((value) => (value).toJson()).toList(); |
+ } |
+ return _json; |
+ } |
+} |
+ |
+/** A custom static error page to be served when an error occurs. */ |
+class ErrorHandler { |
+ /** |
+ * The error condition this handler applies to. |
+ * Possible string values are: |
+ * - "ERROR_CODE_UNSPECIFIED" : A ERROR_CODE_UNSPECIFIED. |
+ * - "ERROR_CODE_DEFAULT" : A ERROR_CODE_DEFAULT. |
+ * - "ERROR_CODE_OVER_QUOTA" : A ERROR_CODE_OVER_QUOTA. |
+ * - "ERROR_CODE_DOS_API_DENIAL" : A ERROR_CODE_DOS_API_DENIAL. |
+ * - "ERROR_CODE_TIMEOUT" : A ERROR_CODE_TIMEOUT. |
+ */ |
+ core.String errorCode; |
+ /** MIME type of file. If unspecified, "text/html" is assumed. */ |
+ core.String mimeType; |
+ /** Static file content to be served for this error. */ |
+ core.String staticFile; |
+ |
+ ErrorHandler(); |
+ |
+ ErrorHandler.fromJson(core.Map _json) { |
+ if (_json.containsKey("errorCode")) { |
+ errorCode = _json["errorCode"]; |
+ } |
+ if (_json.containsKey("mimeType")) { |
+ mimeType = _json["mimeType"]; |
+ } |
+ if (_json.containsKey("staticFile")) { |
+ staticFile = _json["staticFile"]; |
+ } |
+ } |
+ |
+ core.Map toJson() { |
+ var _json = new core.Map(); |
+ if (errorCode != null) { |
+ _json["errorCode"] = errorCode; |
+ } |
+ if (mimeType != null) { |
+ _json["mimeType"] = mimeType; |
+ } |
+ if (staticFile != null) { |
+ _json["staticFile"] = staticFile; |
+ } |
+ return _json; |
+ } |
+} |
+ |
+/** Field represents a single field of a message type. */ |
+class Field { |
+ /** |
+ * The field cardinality, i.e. optional/required/repeated. |
+ * Possible string values are: |
+ * - "CARDINALITY_UNKNOWN" : A CARDINALITY_UNKNOWN. |
+ * - "CARDINALITY_OPTIONAL" : A CARDINALITY_OPTIONAL. |
+ * - "CARDINALITY_REQUIRED" : A CARDINALITY_REQUIRED. |
+ * - "CARDINALITY_REPEATED" : A CARDINALITY_REPEATED. |
+ */ |
+ core.String cardinality; |
+ /** The JSON name for this field. */ |
+ core.String jsonName; |
+ /** |
+ * The field kind. |
+ * Possible string values are: |
+ * - "TYPE_UNKNOWN" : A TYPE_UNKNOWN. |
+ * - "TYPE_DOUBLE" : A TYPE_DOUBLE. |
+ * - "TYPE_FLOAT" : A TYPE_FLOAT. |
+ * - "TYPE_INT64" : A TYPE_INT64. |
+ * - "TYPE_UINT64" : A TYPE_UINT64. |
+ * - "TYPE_INT32" : A TYPE_INT32. |
+ * - "TYPE_FIXED64" : A TYPE_FIXED64. |
+ * - "TYPE_FIXED32" : A TYPE_FIXED32. |
+ * - "TYPE_BOOL" : A TYPE_BOOL. |
+ * - "TYPE_STRING" : A TYPE_STRING. |
+ * - "TYPE_GROUP" : A TYPE_GROUP. |
+ * - "TYPE_MESSAGE" : A TYPE_MESSAGE. |
+ * - "TYPE_BYTES" : A TYPE_BYTES. |
+ * - "TYPE_UINT32" : A TYPE_UINT32. |
+ * - "TYPE_ENUM" : A TYPE_ENUM. |
+ * - "TYPE_SFIXED32" : A TYPE_SFIXED32. |
+ * - "TYPE_SFIXED64" : A TYPE_SFIXED64. |
+ * - "TYPE_SINT32" : A TYPE_SINT32. |
+ * - "TYPE_SINT64" : A TYPE_SINT64. |
+ */ |
+ core.String kind; |
+ /** The field name. */ |
+ core.String name; |
+ /** The proto field number. */ |
+ core.int number; |
+ /** Index in Type.oneofs. Starts at 1. Zero means no oneof mapping. */ |
+ core.int oneofIndex; |
+ /** The proto options. */ |
+ core.List<Option> options; |
+ /** Whether to use alternative packed wire representation. */ |
+ core.bool packed; |
+ /** |
+ * The type URL (without the scheme) when the type is MESSAGE or ENUM, such as |
+ * `type.googleapis.com/google.protobuf.Empty`. |
+ */ |
+ core.String typeUrl; |
+ |
+ Field(); |
+ |
+ Field.fromJson(core.Map _json) { |
+ if (_json.containsKey("cardinality")) { |
+ cardinality = _json["cardinality"]; |
+ } |
+ if (_json.containsKey("jsonName")) { |
+ jsonName = _json["jsonName"]; |
+ } |
+ if (_json.containsKey("kind")) { |
+ kind = _json["kind"]; |
+ } |
+ if (_json.containsKey("name")) { |
+ name = _json["name"]; |
+ } |
+ if (_json.containsKey("number")) { |
+ number = _json["number"]; |
+ } |
+ if (_json.containsKey("oneofIndex")) { |
+ oneofIndex = _json["oneofIndex"]; |
+ } |
+ if (_json.containsKey("options")) { |
+ options = _json["options"].map((value) => new Option.fromJson(value)).toList(); |
+ } |
+ if (_json.containsKey("packed")) { |
+ packed = _json["packed"]; |
+ } |
+ if (_json.containsKey("typeUrl")) { |
+ typeUrl = _json["typeUrl"]; |
+ } |
+ } |
+ |
+ core.Map toJson() { |
+ var _json = new core.Map(); |
+ if (cardinality != null) { |
+ _json["cardinality"] = cardinality; |
+ } |
+ if (jsonName != null) { |
+ _json["jsonName"] = jsonName; |
+ } |
+ if (kind != null) { |
+ _json["kind"] = kind; |
+ } |
+ if (name != null) { |
+ _json["name"] = name; |
+ } |
+ if (number != null) { |
+ _json["number"] = number; |
+ } |
+ if (oneofIndex != null) { |
+ _json["oneofIndex"] = oneofIndex; |
+ } |
+ if (options != null) { |
+ _json["options"] = options.map((value) => (value).toJson()).toList(); |
+ } |
+ if (packed != null) { |
+ _json["packed"] = packed; |
+ } |
+ if (typeUrl != null) { |
+ _json["typeUrl"] = typeUrl; |
+ } |
+ return _json; |
+ } |
+} |
+ |
+/** A single source file which is part of the application to be deployed. */ |
+class FileInfo { |
+ /** |
+ * The MIME type of the file; if unspecified, the value from Google Cloud |
+ * Storage will be used. |
+ */ |
+ core.String mimeType; |
+ /** The SHA1 (160 bits) hash of the file in hex. */ |
+ core.String sha1Sum; |
+ /** |
+ * The URL source to use to fetch this file. Must be a URL to a resource in |
+ * Google Cloud Storage. |
+ */ |
+ core.String sourceUrl; |
+ |
+ FileInfo(); |
+ |
+ FileInfo.fromJson(core.Map _json) { |
+ if (_json.containsKey("mimeType")) { |
+ mimeType = _json["mimeType"]; |
+ } |
+ if (_json.containsKey("sha1Sum")) { |
+ sha1Sum = _json["sha1Sum"]; |
+ } |
+ if (_json.containsKey("sourceUrl")) { |
+ sourceUrl = _json["sourceUrl"]; |
+ } |
+ } |
+ |
+ core.Map toJson() { |
+ var _json = new core.Map(); |
+ if (mimeType != null) { |
+ _json["mimeType"] = mimeType; |
+ } |
+ if (sha1Sum != null) { |
+ _json["sha1Sum"] = sha1Sum; |
+ } |
+ if (sourceUrl != null) { |
+ _json["sourceUrl"] = sourceUrl; |
+ } |
+ return _json; |
+ } |
+} |
+ |
+/** |
+ * Configure health checking for the VM instances. Unhealthy VM instances will |
+ * be killed and replaced with new instances. |
+ */ |
+class HealthCheck { |
+ /** The interval between health checks. */ |
+ core.String checkInterval; |
+ /** Whether to explicitly disable health checks for this instance. */ |
+ core.bool disableHealthCheck; |
+ /** |
+ * The number of consecutive successful health checks before receiving |
+ * traffic. |
+ */ |
+ core.int healthyThreshold; |
+ /** |
+ * The host header to send when performing an HTTP health check (e.g. |
+ * myapp.appspot.com) |
+ */ |
+ core.String host; |
+ /** |
+ * The number of consecutive failed health checks before an instance is |
+ * restarted. |
+ */ |
+ core.int restartThreshold; |
+ /** The amount of time before the health check is considered failed. */ |
+ core.String timeout; |
+ /** |
+ * The number of consecutive failed health checks before removing traffic. |
+ */ |
+ core.int unhealthyThreshold; |
+ |
+ HealthCheck(); |
+ |
+ HealthCheck.fromJson(core.Map _json) { |
+ if (_json.containsKey("checkInterval")) { |
+ checkInterval = _json["checkInterval"]; |
+ } |
+ if (_json.containsKey("disableHealthCheck")) { |
+ disableHealthCheck = _json["disableHealthCheck"]; |
+ } |
+ if (_json.containsKey("healthyThreshold")) { |
+ healthyThreshold = _json["healthyThreshold"]; |
+ } |
+ if (_json.containsKey("host")) { |
+ host = _json["host"]; |
+ } |
+ if (_json.containsKey("restartThreshold")) { |
+ restartThreshold = _json["restartThreshold"]; |
+ } |
+ if (_json.containsKey("timeout")) { |
+ timeout = _json["timeout"]; |
+ } |
+ if (_json.containsKey("unhealthyThreshold")) { |
+ unhealthyThreshold = _json["unhealthyThreshold"]; |
+ } |
+ } |
+ |
+ core.Map toJson() { |
+ var _json = new core.Map(); |
+ if (checkInterval != null) { |
+ _json["checkInterval"] = checkInterval; |
+ } |
+ if (disableHealthCheck != null) { |
+ _json["disableHealthCheck"] = disableHealthCheck; |
+ } |
+ if (healthyThreshold != null) { |
+ _json["healthyThreshold"] = healthyThreshold; |
+ } |
+ if (host != null) { |
+ _json["host"] = host; |
+ } |
+ if (restartThreshold != null) { |
+ _json["restartThreshold"] = restartThreshold; |
+ } |
+ if (timeout != null) { |
+ _json["timeout"] = timeout; |
+ } |
+ if (unhealthyThreshold != null) { |
+ _json["unhealthyThreshold"] = unhealthyThreshold; |
+ } |
+ return _json; |
+ } |
+} |
+ |
+/** A Python runtime third-party library required by the application. */ |
+class Library { |
+ /** The name of the library, e.g. "PIL" or "django". */ |
+ core.String name; |
+ /** The version of the library to select, or "latest". */ |
+ core.String version; |
+ |
+ Library(); |
+ |
+ Library.fromJson(core.Map _json) { |
+ if (_json.containsKey("name")) { |
+ name = _json["name"]; |
+ } |
+ if (_json.containsKey("version")) { |
+ version = _json["version"]; |
+ } |
+ } |
+ |
+ core.Map toJson() { |
+ var _json = new core.Map(); |
+ if (name != null) { |
+ _json["name"] = name; |
+ } |
+ if (version != null) { |
+ _json["version"] = version; |
+ } |
+ return _json; |
+ } |
+} |
+ |
+/** Response message for `Modules.ListModules`. */ |
+class ListModulesResponse { |
+ /** The modules belonging to the requested application. */ |
+ core.List<Module> modules; |
+ /** Continuation token for fetching the next page of results. */ |
+ core.String nextPageToken; |
+ |
+ ListModulesResponse(); |
+ |
+ ListModulesResponse.fromJson(core.Map _json) { |
+ if (_json.containsKey("modules")) { |
+ modules = _json["modules"].map((value) => new Module.fromJson(value)).toList(); |
+ } |
+ if (_json.containsKey("nextPageToken")) { |
+ nextPageToken = _json["nextPageToken"]; |
+ } |
+ } |
+ |
+ core.Map toJson() { |
+ var _json = new core.Map(); |
+ if (modules != null) { |
+ _json["modules"] = modules.map((value) => (value).toJson()).toList(); |
+ } |
+ if (nextPageToken != null) { |
+ _json["nextPageToken"] = nextPageToken; |
+ } |
+ return _json; |
+ } |
+} |
+ |
+/** |
+ * The response message for |
+ * [Operations.ListOperations][google.longrunning.Operations.ListOperations]. |
+ */ |
+class ListOperationsResponse { |
+ /** The standard List next-page token. */ |
+ core.String nextPageToken; |
+ /** A list of operations that matches the specified filter in the request. */ |
+ core.List<Operation> operations; |
+ |
+ ListOperationsResponse(); |
+ |
+ ListOperationsResponse.fromJson(core.Map _json) { |
+ if (_json.containsKey("nextPageToken")) { |
+ nextPageToken = _json["nextPageToken"]; |
+ } |
+ if (_json.containsKey("operations")) { |
+ operations = _json["operations"].map((value) => new Operation.fromJson(value)).toList(); |
+ } |
+ } |
+ |
+ core.Map toJson() { |
+ var _json = new core.Map(); |
+ if (nextPageToken != null) { |
+ _json["nextPageToken"] = nextPageToken; |
+ } |
+ if (operations != null) { |
+ _json["operations"] = operations.map((value) => (value).toJson()).toList(); |
+ } |
+ return _json; |
+ } |
+} |
+ |
+/** Response message for `Versions.ListVersions`. */ |
+class ListVersionsResponse { |
+ /** Continuation token for fetching the next page of results. */ |
+ core.String nextPageToken; |
+ /** The versions belonging to the requested application module. */ |
+ core.List<Version> versions; |
+ |
+ ListVersionsResponse(); |
+ |
+ ListVersionsResponse.fromJson(core.Map _json) { |
+ if (_json.containsKey("nextPageToken")) { |
+ nextPageToken = _json["nextPageToken"]; |
+ } |
+ if (_json.containsKey("versions")) { |
+ versions = _json["versions"].map((value) => new Version.fromJson(value)).toList(); |
+ } |
+ } |
+ |
+ core.Map toJson() { |
+ var _json = new core.Map(); |
+ if (nextPageToken != null) { |
+ _json["nextPageToken"] = nextPageToken; |
+ } |
+ if (versions != null) { |
+ _json["versions"] = versions.map((value) => (value).toJson()).toList(); |
+ } |
+ return _json; |
+ } |
+} |
+ |
+/** |
+ * A module with manual scaling runs continuously, allowing you to perform |
+ * complex initialization and rely on the state of its memory over time. |
+ */ |
+class ManualScaling { |
+ /** |
+ * The number of instances to assign to the module at the start. This number |
+ * can later be altered by using the [Modules |
+ * API](https://cloud.google.com/appengine/docs/python/modules/functions) |
+ * `set_num_instances()` function. |
+ */ |
+ core.int instances; |
+ |
+ ManualScaling(); |
+ |
+ ManualScaling.fromJson(core.Map _json) { |
+ if (_json.containsKey("instances")) { |
+ instances = _json["instances"]; |
+ } |
+ } |
+ |
+ core.Map toJson() { |
+ var _json = new core.Map(); |
+ if (instances != null) { |
+ _json["instances"] = instances; |
+ } |
+ return _json; |
+ } |
+} |
+ |
+/** |
+ * A module is a component of an application that provides a single service or |
+ * configuration. A module has a collection of versions that define a specific |
+ * set of code used to implement the functionality of that module. |
+ */ |
+class Module { |
+ /** |
+ * The relative name/path of the module within the application. Example: |
+ * "default" @OutputOnly |
+ */ |
+ core.String id; |
+ /** |
+ * The full path to the Module resource in the API. Example: |
+ * "apps/myapp/modules/default" @OutputOnly |
+ */ |
+ core.String name; |
+ /** |
+ * A mapping that defines fractional HTTP traffic diversion to different |
+ * versions within the module. |
+ */ |
+ TrafficSplit split; |
+ |
+ Module(); |
+ |
+ Module.fromJson(core.Map _json) { |
+ if (_json.containsKey("id")) { |
+ id = _json["id"]; |
+ } |
+ if (_json.containsKey("name")) { |
+ name = _json["name"]; |
+ } |
+ if (_json.containsKey("split")) { |
+ split = new TrafficSplit.fromJson(_json["split"]); |
+ } |
+ } |
+ |
+ core.Map toJson() { |
+ var _json = new core.Map(); |
+ if (id != null) { |
+ _json["id"] = id; |
+ } |
+ if (name != null) { |
+ _json["name"] = name; |
+ } |
+ if (split != null) { |
+ _json["split"] = (split).toJson(); |
+ } |
+ return _json; |
+ } |
+} |
+ |
+/** Used to specify extra network settings (for VM runtimes only). */ |
+class Network { |
+ /** |
+ * A list of ports (or port pairs) to forward from the VM into the app |
+ * container. |
+ */ |
+ core.List<core.String> forwardedPorts; |
+ /** A tag to apply to the VM instance during creation. */ |
+ core.String instanceTag; |
+ /** |
+ * The Google Compute Engine network where the VMs will be created. If not |
+ * specified, or empty, the network named 'default' will be used. (The short |
+ * name should be specified, not the resource path.) |
+ */ |
+ core.String name; |
+ |
+ Network(); |
+ |
+ Network.fromJson(core.Map _json) { |
+ if (_json.containsKey("forwardedPorts")) { |
+ forwardedPorts = _json["forwardedPorts"]; |
+ } |
+ if (_json.containsKey("instanceTag")) { |
+ instanceTag = _json["instanceTag"]; |
+ } |
+ if (_json.containsKey("name")) { |
+ name = _json["name"]; |
+ } |
+ } |
+ |
+ core.Map toJson() { |
+ var _json = new core.Map(); |
+ if (forwardedPorts != null) { |
+ _json["forwardedPorts"] = forwardedPorts; |
+ } |
+ if (instanceTag != null) { |
+ _json["instanceTag"] = instanceTag; |
+ } |
+ if (name != null) { |
+ _json["name"] = name; |
+ } |
+ return _json; |
+ } |
+} |
+ |
+/** |
+ * This resource represents a long-running operation that is the result of a |
+ * network API call. |
+ */ |
+class Operation { |
+ /** |
+ * If the value is `false`, it means the operation is still in progress. If |
+ * true, the operation is completed and the `result` is available. |
+ */ |
+ core.bool done; |
+ /** The error result of the operation in case of failure. */ |
+ Status error; |
+ /** |
+ * Service-specific metadata associated with the operation. It typically |
+ * contains progress information and common metadata such as create time. Some |
+ * services might not provide such metadata. Any method that returns a |
+ * long-running operation should document the metadata type, if any. |
+ * |
+ * The values for Object must be JSON objects. It can consist of `num`, |
+ * `String`, `bool` and `null` as well as `Map` and `List` values. |
+ */ |
+ core.Map<core.String, core.Object> metadata; |
+ /** |
+ * The server-assigned name, which is only unique within the same service that |
+ * originally returns it. If you use the default HTTP mapping above, the |
+ * `name` should have the format of `operations/some/unique/name`. |
+ */ |
+ core.String name; |
+ /** |
+ * The normal response of the operation in case of success. If the original |
+ * method returns no data on success, such as `Delete`, the response is |
+ * `google.protobuf.Empty`. If the original method is standard |
+ * `Get`/`Create`/`Update`, the response should be the resource. For other |
+ * methods, the response should have the type `XxxResponse`, where `Xxx` is |
+ * the original method name. For example, if the original method name is |
+ * `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`. |
+ * |
+ * The values for Object must be JSON objects. It can consist of `num`, |
+ * `String`, `bool` and `null` as well as `Map` and `List` values. |
+ */ |
+ core.Map<core.String, core.Object> response; |
+ |
+ Operation(); |
+ |
+ Operation.fromJson(core.Map _json) { |
+ if (_json.containsKey("done")) { |
+ done = _json["done"]; |
+ } |
+ if (_json.containsKey("error")) { |
+ error = new Status.fromJson(_json["error"]); |
+ } |
+ if (_json.containsKey("metadata")) { |
+ metadata = _json["metadata"]; |
+ } |
+ if (_json.containsKey("name")) { |
+ name = _json["name"]; |
+ } |
+ if (_json.containsKey("response")) { |
+ response = _json["response"]; |
+ } |
+ } |
+ |
+ core.Map toJson() { |
+ var _json = new core.Map(); |
+ if (done != null) { |
+ _json["done"] = done; |
+ } |
+ if (error != null) { |
+ _json["error"] = (error).toJson(); |
+ } |
+ if (metadata != null) { |
+ _json["metadata"] = metadata; |
+ } |
+ if (name != null) { |
+ _json["name"] = name; |
+ } |
+ if (response != null) { |
+ _json["response"] = response; |
+ } |
+ return _json; |
+ } |
+} |
+ |
+/** |
+ * Metadata for the given |
+ * [google.longrunning.Operation][google.longrunning.Operation]. |
+ */ |
+class OperationMetadata { |
+ /** |
+ * Timestamp that this operation was completed. (Not present if the operation |
+ * is still in progress.) @OutputOnly |
+ */ |
+ core.String endTime; |
+ /** Timestamp that this operation was received. @OutputOnly */ |
+ core.String insertTime; |
+ /** The type of the operation, e.g. 'deployment'. @OutputOnly */ |
+ core.String operationType; |
+ /** The user who requested this operation. @OutputOnly */ |
+ core.String user; |
+ |
+ OperationMetadata(); |
+ |
+ OperationMetadata.fromJson(core.Map _json) { |
+ if (_json.containsKey("endTime")) { |
+ endTime = _json["endTime"]; |
+ } |
+ if (_json.containsKey("insertTime")) { |
+ insertTime = _json["insertTime"]; |
+ } |
+ if (_json.containsKey("operationType")) { |
+ operationType = _json["operationType"]; |
+ } |
+ if (_json.containsKey("user")) { |
+ user = _json["user"]; |
+ } |
+ } |
+ |
+ core.Map toJson() { |
+ var _json = new core.Map(); |
+ if (endTime != null) { |
+ _json["endTime"] = endTime; |
+ } |
+ if (insertTime != null) { |
+ _json["insertTime"] = insertTime; |
+ } |
+ if (operationType != null) { |
+ _json["operationType"] = operationType; |
+ } |
+ if (user != null) { |
+ _json["user"] = user; |
+ } |
+ return _json; |
+ } |
+} |
+ |
+/** Proto option attached to messages/fields/enums etc. */ |
+class Option { |
+ /** Proto option name. */ |
+ core.String name; |
+ /** |
+ * Proto option value. |
+ * |
+ * The values for Object must be JSON objects. It can consist of `num`, |
+ * `String`, `bool` and `null` as well as `Map` and `List` values. |
+ */ |
+ core.Map<core.String, core.Object> value; |
+ |
+ Option(); |
+ |
+ Option.fromJson(core.Map _json) { |
+ if (_json.containsKey("name")) { |
+ name = _json["name"]; |
+ } |
+ if (_json.containsKey("value")) { |
+ value = _json["value"]; |
+ } |
+ } |
+ |
+ core.Map toJson() { |
+ var _json = new core.Map(); |
+ if (name != null) { |
+ _json["name"] = name; |
+ } |
+ if (value != null) { |
+ _json["value"] = value; |
+ } |
+ return _json; |
+ } |
+} |
+ |
+/** Used to specify how many machine resources an app version needs. */ |
+class Resources { |
+ /** How many CPU cores an app version needs. */ |
+ core.double cpu; |
+ /** How much disk size, in GB, an app version needs. */ |
+ core.double diskGb; |
+ /** How much memory, in GB, an app version needs. */ |
+ core.double memoryGb; |
+ |
+ Resources(); |
+ |
+ Resources.fromJson(core.Map _json) { |
+ if (_json.containsKey("cpu")) { |
+ cpu = _json["cpu"]; |
+ } |
+ if (_json.containsKey("diskGb")) { |
+ diskGb = _json["diskGb"]; |
+ } |
+ if (_json.containsKey("memoryGb")) { |
+ memoryGb = _json["memoryGb"]; |
+ } |
+ } |
+ |
+ core.Map toJson() { |
+ var _json = new core.Map(); |
+ if (cpu != null) { |
+ _json["cpu"] = cpu; |
+ } |
+ if (diskGb != null) { |
+ _json["diskGb"] = diskGb; |
+ } |
+ if (memoryGb != null) { |
+ _json["memoryGb"] = memoryGb; |
+ } |
+ return _json; |
+ } |
+} |
+ |
+/** Executes a script to handle the request that matches the URL pattern. */ |
+class ScriptHandler { |
+ /** Specifies the path to the script from the application root directory. */ |
+ core.String scriptPath; |
+ |
+ ScriptHandler(); |
+ |
+ ScriptHandler.fromJson(core.Map _json) { |
+ if (_json.containsKey("scriptPath")) { |
+ scriptPath = _json["scriptPath"]; |
+ } |
+ } |
+ |
+ core.Map toJson() { |
+ var _json = new core.Map(); |
+ if (scriptPath != null) { |
+ _json["scriptPath"] = scriptPath; |
+ } |
+ return _json; |
+ } |
+} |
+ |
+/** |
+ * `SourceContext` represents information about the source of a protobuf |
+ * element, like the file in which it is defined. |
+ */ |
+class SourceContext { |
+ /** |
+ * The path-qualified name of the .proto file that contained the associated |
+ * protobuf element. For example: `"google/protobuf/source.proto"`. |
+ */ |
+ core.String fileName; |
+ |
+ SourceContext(); |
+ |
+ SourceContext.fromJson(core.Map _json) { |
+ if (_json.containsKey("fileName")) { |
+ fileName = _json["fileName"]; |
+ } |
+ } |
+ |
+ core.Map toJson() { |
+ var _json = new core.Map(); |
+ if (fileName != null) { |
+ _json["fileName"] = fileName; |
+ } |
+ return _json; |
+ } |
+} |
+ |
+/** |
+ * A reference to a particular snapshot of the source tree used to build and |
+ * deploy the application. |
+ */ |
+class SourceReference { |
+ /** |
+ * Optional. A URI string identifying the repository. Example: |
+ * "https://source.developers.google.com/p/app-123/r/default" |
+ */ |
+ core.String repository; |
+ /** |
+ * The canonical (and persistent) identifier of the deployed revision, i.e. |
+ * any kind of aliases including tags or branch names are not allowed. Example |
+ * (git): "2198322f89e0bb2e25021667c2ed489d1fd34e6b" |
+ */ |
+ core.String revisionId; |
+ |
+ SourceReference(); |
+ |
+ SourceReference.fromJson(core.Map _json) { |
+ if (_json.containsKey("repository")) { |
+ repository = _json["repository"]; |
+ } |
+ if (_json.containsKey("revisionId")) { |
+ revisionId = _json["revisionId"]; |
+ } |
+ } |
+ |
+ core.Map toJson() { |
+ var _json = new core.Map(); |
+ if (repository != null) { |
+ _json["repository"] = repository; |
+ } |
+ if (revisionId != null) { |
+ _json["revisionId"] = revisionId; |
+ } |
+ return _json; |
+ } |
+} |
+ |
+/** |
+ * Files served directly to the user for a given URL, such as images, CSS |
+ * stylesheets, or JavaScript source files. Static directory handlers make it |
+ * easy to serve the entire contents of a directory as static files. |
+ */ |
+class StaticDirectoryHandler { |
+ /** |
+ * By default, files declared in static file handlers are uploaded as static |
+ * data and are only served to end users, they cannot be read by an |
+ * application. If this field is set to true, the files are also uploaded as |
+ * code data so your application can read them. Both uploads are charged |
+ * against your code and static data storage resource quotas. |
+ */ |
+ core.bool applicationReadable; |
+ /** |
+ * The path to the directory containing the static files, from the application |
+ * root directory. Everything after the end of the matched url pattern is |
+ * appended to static_dir to form the full path to the requested file. |
+ */ |
+ core.String directory; |
+ /** |
+ * The length of time a static file served by this handler ought to be cached |
+ * by web proxies and browsers. |
+ */ |
+ core.String expiration; |
+ /** HTTP headers to use for all responses from these URLs. */ |
+ core.Map<core.String, core.String> httpHeaders; |
+ /** |
+ * If specified, all files served by this handler will be served using the |
+ * specified MIME type. If not specified, the MIME type for a file will be |
+ * derived from the file's filename extension. |
+ */ |
+ core.String mimeType; |
+ /** |
+ * If true, this UrlMap entry does not match the request unless the file |
+ * referenced by the handler also exists. If no such file exists, processing |
+ * will continue with the next UrlMap that matches the requested URL. |
+ */ |
+ core.bool requireMatchingFile; |
+ |
+ StaticDirectoryHandler(); |
+ |
+ StaticDirectoryHandler.fromJson(core.Map _json) { |
+ if (_json.containsKey("applicationReadable")) { |
+ applicationReadable = _json["applicationReadable"]; |
+ } |
+ if (_json.containsKey("directory")) { |
+ directory = _json["directory"]; |
+ } |
+ if (_json.containsKey("expiration")) { |
+ expiration = _json["expiration"]; |
+ } |
+ if (_json.containsKey("httpHeaders")) { |
+ httpHeaders = _json["httpHeaders"]; |
+ } |
+ if (_json.containsKey("mimeType")) { |
+ mimeType = _json["mimeType"]; |
+ } |
+ if (_json.containsKey("requireMatchingFile")) { |
+ requireMatchingFile = _json["requireMatchingFile"]; |
+ } |
+ } |
+ |
+ core.Map toJson() { |
+ var _json = new core.Map(); |
+ if (applicationReadable != null) { |
+ _json["applicationReadable"] = applicationReadable; |
+ } |
+ if (directory != null) { |
+ _json["directory"] = directory; |
+ } |
+ if (expiration != null) { |
+ _json["expiration"] = expiration; |
+ } |
+ if (httpHeaders != null) { |
+ _json["httpHeaders"] = httpHeaders; |
+ } |
+ if (mimeType != null) { |
+ _json["mimeType"] = mimeType; |
+ } |
+ if (requireMatchingFile != null) { |
+ _json["requireMatchingFile"] = requireMatchingFile; |
+ } |
+ return _json; |
+ } |
+} |
+ |
+/** |
+ * Files served directly to the user for a given URL, such as images, CSS |
+ * stylesheets, or JavaScript source files. Static file handlers describe which |
+ * files in the application directory are static files, and which URLs serve |
+ * them. |
+ */ |
+class StaticFilesHandler { |
+ /** |
+ * By default, files declared in static file handlers are uploaded as static |
+ * data and are only served to end users, they cannot be read by an |
+ * application. If this field is set to true, the files are also uploaded as |
+ * code data so your application can read them. Both uploads are charged |
+ * against your code and static data storage resource quotas. |
+ */ |
+ core.bool applicationReadable; |
+ /** |
+ * The length of time a static file served by this handler ought to be cached |
+ * by web proxies and browsers. |
+ */ |
+ core.String expiration; |
+ /** HTTP headers to use for all responses from these URLs. */ |
+ core.Map<core.String, core.String> httpHeaders; |
+ /** |
+ * If specified, all files served by this handler will be served using the |
+ * specified MIME type. If not specified, the MIME type for a file will be |
+ * derived from the file's filename extension. |
+ */ |
+ core.String mimeType; |
+ /** |
+ * The path to the static files matched by the URL pattern, from the |
+ * application root directory. The path can refer to text matched in groupings |
+ * in the URL pattern. |
+ */ |
+ core.String path; |
+ /** |
+ * If true, this [UrlMap][google.appengine.v1beta4.UrlMap] entry does not |
+ * match the request unless the file referenced by the handler also exists. If |
+ * no such file exists, processing will continue with the next |
+ * [UrlMap][google.appengine.v1beta4.UrlMap] that matches the requested URL. |
+ */ |
+ core.bool requireMatchingFile; |
+ /** |
+ * A regular expression that matches the file paths for all files that will be |
+ * referenced by this handler. |
+ */ |
+ core.String uploadPathRegex; |
+ |
+ StaticFilesHandler(); |
+ |
+ StaticFilesHandler.fromJson(core.Map _json) { |
+ if (_json.containsKey("applicationReadable")) { |
+ applicationReadable = _json["applicationReadable"]; |
+ } |
+ if (_json.containsKey("expiration")) { |
+ expiration = _json["expiration"]; |
+ } |
+ if (_json.containsKey("httpHeaders")) { |
+ httpHeaders = _json["httpHeaders"]; |
+ } |
+ if (_json.containsKey("mimeType")) { |
+ mimeType = _json["mimeType"]; |
+ } |
+ if (_json.containsKey("path")) { |
+ path = _json["path"]; |
+ } |
+ if (_json.containsKey("requireMatchingFile")) { |
+ requireMatchingFile = _json["requireMatchingFile"]; |
+ } |
+ if (_json.containsKey("uploadPathRegex")) { |
+ uploadPathRegex = _json["uploadPathRegex"]; |
+ } |
+ } |
+ |
+ core.Map toJson() { |
+ var _json = new core.Map(); |
+ if (applicationReadable != null) { |
+ _json["applicationReadable"] = applicationReadable; |
+ } |
+ if (expiration != null) { |
+ _json["expiration"] = expiration; |
+ } |
+ if (httpHeaders != null) { |
+ _json["httpHeaders"] = httpHeaders; |
+ } |
+ if (mimeType != null) { |
+ _json["mimeType"] = mimeType; |
+ } |
+ if (path != null) { |
+ _json["path"] = path; |
+ } |
+ if (requireMatchingFile != null) { |
+ _json["requireMatchingFile"] = requireMatchingFile; |
+ } |
+ if (uploadPathRegex != null) { |
+ _json["uploadPathRegex"] = uploadPathRegex; |
+ } |
+ return _json; |
+ } |
+} |
+ |
+/** |
+ * The `Status` defines a logical error model that is suitable for different |
+ * programming environments, including REST APIs and RPC APIs. It is used by |
+ * [gRPC](https://github.com/grpc). The error model is designed to be: - Simple |
+ * to use and understand for most users. - Flexible enough to meet unexpected |
+ * needs. # Overview The `Status` message contains 3 pieces of data: error code, |
+ * error message, and error details. The error code should be an enum value of |
+ * [google.rpc.Code][google.rpc.Code], but it may accept additional error codes |
+ * if needed. The error message should be a developer-facing English message |
+ * that helps developers *understand* and *resolve* the error. If a localized |
+ * user-facing error message is needed, it can be sent in the error details or |
+ * localized by the client. The optional error details may contain arbitrary |
+ * information about the error. There is a predefined set of error detail types |
+ * in the package `google.rpc` which can be used for common error conditions. # |
+ * Language mapping The `Status` message is the logical representation of the |
+ * error model, but it is not necessarily the actual wire format. When the |
+ * `Status` message is exposed in different client libraries and different wire |
+ * protocols, it can be mapped differently. For example, it will likely be |
+ * mapped to some exceptions in Java, but more likely mapped to some error codes |
+ * in C. # Other uses The error model and the `Status` message can be used in a |
+ * variety of environments - either with or without APIs - to provide consistent |
+ * developer experience across different environments. Example uses of this |
+ * error model include: - Partial errors. If a service needs to return partial |
+ * errors to the client, it may embed the `Status` in the normal response to |
+ * indicate the partial errors. - Workflow errors. A typical workflow has |
+ * multiple steps. Each step may have a `Status` message for error reporting |
+ * purpose. - Batch operations. If a client uses batch request and batch |
+ * response, the `Status` message should be used directly inside batch response, |
+ * one for each error sub-response. - Asynchronous operations. If an API call |
+ * embeds asynchronous operation results in its response, the status of those |
+ * operations should be represented directly using the `Status` message. - |
+ * Logging. If some API errors are stored in logs, the message `Status` could be |
+ * used directly after any stripping needed for security/privacy reasons. |
+ */ |
+class Status { |
+ /** |
+ * The status code, which should be an enum value of |
+ * [google.rpc.Code][google.rpc.Code]. |
+ */ |
+ core.int code; |
+ /** |
+ * A list of messages that carry the error details. There will be a common set |
+ * of message types for APIs to use. |
+ * |
+ * The values for Object must be JSON objects. It can consist of `num`, |
+ * `String`, `bool` and `null` as well as `Map` and `List` values. |
+ */ |
+ core.List<core.Map<core.String, core.Object>> details; |
+ /** |
+ * A developer-facing error message, which should be in English. Any |
+ * user-facing error message should be localized and sent in the |
+ * [google.rpc.Status.details][google.rpc.Status.details] field, or localized |
+ * by the client. |
+ */ |
+ core.String message; |
+ |
+ Status(); |
+ |
+ Status.fromJson(core.Map _json) { |
+ if (_json.containsKey("code")) { |
+ code = _json["code"]; |
+ } |
+ if (_json.containsKey("details")) { |
+ details = _json["details"]; |
+ } |
+ if (_json.containsKey("message")) { |
+ message = _json["message"]; |
+ } |
+ } |
+ |
+ core.Map toJson() { |
+ var _json = new core.Map(); |
+ if (code != null) { |
+ _json["code"] = code; |
+ } |
+ if (details != null) { |
+ _json["details"] = details; |
+ } |
+ if (message != null) { |
+ _json["message"] = message; |
+ } |
+ return _json; |
+ } |
+} |
+ |
+/** |
+ * Configuration for traffic splitting for versions within a single module. |
+ * Traffic splitting allows traffic directed to the module to be assigned to one |
+ * of several versions in a fractional way, enabling experiments and canarying |
+ * new builds, for example. |
+ */ |
+class TrafficSplit { |
+ /** |
+ * Mapping from module version IDs within the module to fractional (0.000, 1] |
+ * allocations of traffic for that version. Each version may only be specified |
+ * once, but some versions in the module may not have any traffic allocation. |
+ * Modules that have traffic allocated in this field may not be deleted until |
+ * the module is deleted, or their traffic allocation is removed. Allocations |
+ * must sum to 1. Supports precision up to two decimal places for IP-based |
+ * splits and up to three decimal places for cookie-based splits. |
+ */ |
+ core.Map<core.String, core.double> allocations; |
+ /** |
+ * Which mechanism should be used as a selector when choosing a version to |
+ * send a request to. The traffic selection algorithm will be stable for |
+ * either type until allocations are changed. |
+ * Possible string values are: |
+ * - "UNSPECIFIED" : A UNSPECIFIED. |
+ * - "COOKIE" : A COOKIE. |
+ * - "IP" : A IP. |
+ */ |
+ core.String shardBy; |
+ |
+ TrafficSplit(); |
+ |
+ TrafficSplit.fromJson(core.Map _json) { |
+ if (_json.containsKey("allocations")) { |
+ allocations = _json["allocations"]; |
+ } |
+ if (_json.containsKey("shardBy")) { |
+ shardBy = _json["shardBy"]; |
+ } |
+ } |
+ |
+ core.Map toJson() { |
+ var _json = new core.Map(); |
+ if (allocations != null) { |
+ _json["allocations"] = allocations; |
+ } |
+ if (shardBy != null) { |
+ _json["shardBy"] = shardBy; |
+ } |
+ return _json; |
+ } |
+} |
+ |
+/** A light-weight descriptor for a proto message type. */ |
+class Type { |
+ /** The list of fields. */ |
+ core.List<Field> fields; |
+ /** The fully qualified message name. */ |
+ core.String name; |
+ /** |
+ * The list of oneof definitions. The list of oneofs declared in this Type |
+ */ |
+ core.List<core.String> oneofs; |
+ /** The proto options. */ |
+ core.List<Option> options; |
+ /** The source context. */ |
+ SourceContext sourceContext; |
+ /** |
+ * The source syntax. |
+ * Possible string values are: |
+ * - "SYNTAX_PROTO2" : A SYNTAX_PROTO2. |
+ * - "SYNTAX_PROTO3" : A SYNTAX_PROTO3. |
+ */ |
+ core.String syntax; |
+ |
+ Type(); |
+ |
+ Type.fromJson(core.Map _json) { |
+ if (_json.containsKey("fields")) { |
+ fields = _json["fields"].map((value) => new Field.fromJson(value)).toList(); |
+ } |
+ if (_json.containsKey("name")) { |
+ name = _json["name"]; |
+ } |
+ if (_json.containsKey("oneofs")) { |
+ oneofs = _json["oneofs"]; |
+ } |
+ if (_json.containsKey("options")) { |
+ options = _json["options"].map((value) => new Option.fromJson(value)).toList(); |
+ } |
+ if (_json.containsKey("sourceContext")) { |
+ sourceContext = new SourceContext.fromJson(_json["sourceContext"]); |
+ } |
+ if (_json.containsKey("syntax")) { |
+ syntax = _json["syntax"]; |
+ } |
+ } |
+ |
+ core.Map toJson() { |
+ var _json = new core.Map(); |
+ if (fields != null) { |
+ _json["fields"] = fields.map((value) => (value).toJson()).toList(); |
+ } |
+ if (name != null) { |
+ _json["name"] = name; |
+ } |
+ if (oneofs != null) { |
+ _json["oneofs"] = oneofs; |
+ } |
+ if (options != null) { |
+ _json["options"] = options.map((value) => (value).toJson()).toList(); |
+ } |
+ if (sourceContext != null) { |
+ _json["sourceContext"] = (sourceContext).toJson(); |
+ } |
+ if (syntax != null) { |
+ _json["syntax"] = syntax; |
+ } |
+ return _json; |
+ } |
+} |
+ |
+/** Rules to match an HTTP request and dispatch that request to a module. */ |
+class UrlDispatchRule { |
+ /** |
+ * The domain name to match on. Supports '*' (glob) wildcarding on the |
+ * left-hand side of a '.'. If empty, all domains will be matched (the same as |
+ * '*'). |
+ */ |
+ core.String domain; |
+ /** |
+ * The resource id of a Module in this application that should service the |
+ * matched request. The Module must already exist. Example: "default". |
+ */ |
+ core.String module; |
+ /** |
+ * The pathname within the host. This must start with a '/'. A single '*' |
+ * (glob) can be included at the end of the path. The sum of the lengths of |
+ * the domain and path may not exceed 100 characters. |
+ */ |
+ core.String path; |
+ |
+ UrlDispatchRule(); |
+ |
+ UrlDispatchRule.fromJson(core.Map _json) { |
+ if (_json.containsKey("domain")) { |
+ domain = _json["domain"]; |
+ } |
+ if (_json.containsKey("module")) { |
+ module = _json["module"]; |
+ } |
+ if (_json.containsKey("path")) { |
+ path = _json["path"]; |
+ } |
+ } |
+ |
+ core.Map toJson() { |
+ var _json = new core.Map(); |
+ if (domain != null) { |
+ _json["domain"] = domain; |
+ } |
+ if (module != null) { |
+ _json["module"] = module; |
+ } |
+ if (path != null) { |
+ _json["path"] = path; |
+ } |
+ return _json; |
+ } |
+} |
+ |
+/** |
+ * A URL pattern and description of how it should be handled. App Engine can |
+ * handle URLs by executing application code, or by serving static files |
+ * uploaded with the code, such as images, CSS or JavaScript. |
+ */ |
+class UrlMap { |
+ /** Use API Endpoints to handle requests. */ |
+ ApiEndpointHandler apiEndpoint; |
+ /** |
+ * For users not logged in, how to handle access to resources with required |
+ * login. Defaults to "redirect". |
+ * Possible string values are: |
+ * - "AUTH_FAIL_ACTION_UNSPECIFIED" : A AUTH_FAIL_ACTION_UNSPECIFIED. |
+ * - "AUTH_FAIL_ACTION_REDIRECT" : A AUTH_FAIL_ACTION_REDIRECT. |
+ * - "AUTH_FAIL_ACTION_UNAUTHORIZED" : A AUTH_FAIL_ACTION_UNAUTHORIZED. |
+ */ |
+ core.String authFailAction; |
+ /** |
+ * What level of login is required to access this resource. |
+ * Possible string values are: |
+ * - "LOGIN_UNSPECIFIED" : A LOGIN_UNSPECIFIED. |
+ * - "LOGIN_OPTIONAL" : A LOGIN_OPTIONAL. |
+ * - "LOGIN_ADMIN" : A LOGIN_ADMIN. |
+ * - "LOGIN_REQUIRED" : A LOGIN_REQUIRED. |
+ */ |
+ core.String login; |
+ /** |
+ * `30x` code to use when performing redirects for the `secure` field. A `302` |
+ * is used by default. |
+ * Possible string values are: |
+ * - "REDIRECT_HTTP_RESPONSE_CODE_UNSPECIFIED" : A |
+ * REDIRECT_HTTP_RESPONSE_CODE_UNSPECIFIED. |
+ * - "REDIRECT_HTTP_RESPONSE_CODE_301" : A REDIRECT_HTTP_RESPONSE_CODE_301. |
+ * - "REDIRECT_HTTP_RESPONSE_CODE_302" : A REDIRECT_HTTP_RESPONSE_CODE_302. |
+ * - "REDIRECT_HTTP_RESPONSE_CODE_303" : A REDIRECT_HTTP_RESPONSE_CODE_303. |
+ * - "REDIRECT_HTTP_RESPONSE_CODE_307" : A REDIRECT_HTTP_RESPONSE_CODE_307. |
+ */ |
+ core.String redirectHttpResponseCode; |
+ /** Executes a script to handle the request that matches the URL pattern. */ |
+ ScriptHandler script; |
+ /** |
+ * Configures whether security (HTTPS) should be enforced for this URL. |
+ * Possible string values are: |
+ * - "SECURE_UNSPECIFIED" : A SECURE_UNSPECIFIED. |
+ * - "SECURE_DEFAULT" : A SECURE_DEFAULT. |
+ * - "SECURE_NEVER" : A SECURE_NEVER. |
+ * - "SECURE_OPTIONAL" : A SECURE_OPTIONAL. |
+ * - "SECURE_ALWAYS" : A SECURE_ALWAYS. |
+ */ |
+ core.String securityLevel; |
+ /** |
+ * Serves the entire contents of a directory as static files. This attribute |
+ * is deprecated. You can mimic the behavior of static directories using |
+ * static files. |
+ */ |
+ StaticDirectoryHandler staticDirectory; |
+ /** Returns the contents of a file, such as an image, as the response. */ |
+ StaticFilesHandler staticFiles; |
+ /** |
+ * A URL prefix. This value uses regular expression syntax (and so regexp |
+ * special characters must be escaped), but it should not contain groupings. |
+ * All URLs that begin with this prefix are handled by this handler, using the |
+ * portion of the URL after the prefix as part of the file path. This is |
+ * always required. |
+ */ |
+ core.String urlRegex; |
+ |
+ UrlMap(); |
+ |
+ UrlMap.fromJson(core.Map _json) { |
+ if (_json.containsKey("apiEndpoint")) { |
+ apiEndpoint = new ApiEndpointHandler.fromJson(_json["apiEndpoint"]); |
+ } |
+ if (_json.containsKey("authFailAction")) { |
+ authFailAction = _json["authFailAction"]; |
+ } |
+ if (_json.containsKey("login")) { |
+ login = _json["login"]; |
+ } |
+ if (_json.containsKey("redirectHttpResponseCode")) { |
+ redirectHttpResponseCode = _json["redirectHttpResponseCode"]; |
+ } |
+ if (_json.containsKey("script")) { |
+ script = new ScriptHandler.fromJson(_json["script"]); |
+ } |
+ if (_json.containsKey("securityLevel")) { |
+ securityLevel = _json["securityLevel"]; |
+ } |
+ if (_json.containsKey("staticDirectory")) { |
+ staticDirectory = new StaticDirectoryHandler.fromJson(_json["staticDirectory"]); |
+ } |
+ if (_json.containsKey("staticFiles")) { |
+ staticFiles = new StaticFilesHandler.fromJson(_json["staticFiles"]); |
+ } |
+ if (_json.containsKey("urlRegex")) { |
+ urlRegex = _json["urlRegex"]; |
+ } |
+ } |
+ |
+ core.Map toJson() { |
+ var _json = new core.Map(); |
+ if (apiEndpoint != null) { |
+ _json["apiEndpoint"] = (apiEndpoint).toJson(); |
+ } |
+ if (authFailAction != null) { |
+ _json["authFailAction"] = authFailAction; |
+ } |
+ if (login != null) { |
+ _json["login"] = login; |
+ } |
+ if (redirectHttpResponseCode != null) { |
+ _json["redirectHttpResponseCode"] = redirectHttpResponseCode; |
+ } |
+ if (script != null) { |
+ _json["script"] = (script).toJson(); |
+ } |
+ if (securityLevel != null) { |
+ _json["securityLevel"] = securityLevel; |
+ } |
+ if (staticDirectory != null) { |
+ _json["staticDirectory"] = (staticDirectory).toJson(); |
+ } |
+ if (staticFiles != null) { |
+ _json["staticFiles"] = (staticFiles).toJson(); |
+ } |
+ if (urlRegex != null) { |
+ _json["urlRegex"] = urlRegex; |
+ } |
+ return _json; |
+ } |
+} |
+ |
+/** |
+ * A Version is a specific set of source code and configuration files deployed |
+ * to a module. |
+ */ |
+class Version { |
+ /** |
+ * Serving configuration for Google Cloud Endpoints. Only returned in `GET` |
+ * requests if `view=FULL` is set. May only be set on create requests; once |
+ * created, is immutable. |
+ */ |
+ ApiConfigHandler apiConfig; |
+ /** |
+ * Automatic scaling is the scaling policy that App Engine has used since its |
+ * inception. It is based on request rate, response latencies, and other |
+ * application metrics. |
+ */ |
+ AutomaticScaling automaticScaling; |
+ /** |
+ * A module with basic scaling will create an instance when the application |
+ * receives a request. The instance will be turned down when the app becomes |
+ * idle. Basic scaling is ideal for work that is intermittent or driven by |
+ * user activity. |
+ */ |
+ BasicScaling basicScaling; |
+ /** Beta settings supplied to the application via metadata. */ |
+ core.Map<core.String, core.String> betaSettings; |
+ /** |
+ * The length of time a static file served by a static file handler ought to |
+ * be cached by web proxies and browsers, if the handler does not specify its |
+ * own expiration. Only returned in `GET` requests if `view=FULL` is set. May |
+ * only be set on create requests; once created, is immutable. |
+ */ |
+ core.String defaultExpiration; |
+ /** |
+ * Code and application artifacts that make up this version. Only returned in |
+ * `GET` requests if `view=FULL` is set. May only be set on create requests; |
+ * once created, is immutable. |
+ */ |
+ Deployment deployment; |
+ /** |
+ * Environment variables made available to the application. Only returned in |
+ * `GET` requests if `view=FULL` is set. May only be set on create requests; |
+ * once created, is immutable. |
+ */ |
+ core.Map<core.String, core.String> envVariables; |
+ /** |
+ * Custom static error pages instead of these generic error pages, (limit 10 |
+ * KB/page) Only returned in `GET` requests if `view=FULL` is set. May only be |
+ * set on create requests; once created, is immutable. |
+ */ |
+ core.List<ErrorHandler> errorHandlers; |
+ /** |
+ * An ordered list of URL Matching patterns that should be applied to incoming |
+ * requests. The first matching URL consumes the request, and subsequent |
+ * handlers are not attempted. Only returned in `GET` requests if `view=FULL` |
+ * is set. May only be set on create requests; once created, is immutable. |
+ */ |
+ core.List<UrlMap> handlers; |
+ /** |
+ * Configure health checking for the VM instances. Unhealthy VM instances will |
+ * be stopped and replaced with new instances. Only returned in `GET` requests |
+ * if `view=FULL` is set. May only be set on create requests; once created, is |
+ * immutable. |
+ */ |
+ HealthCheck healthCheck; |
+ /** The relative name/path of the Version within the module. Example: "v1" */ |
+ core.String id; |
+ /** |
+ * Before an application can receive email or XMPP messages, the application |
+ * must be configured to enable the service. |
+ */ |
+ core.List<core.String> inboundServices; |
+ /** |
+ * The frontend instance class to use to run this app. Valid values are `[F1, |
+ * F2, F4, F4_1G]`. |
+ */ |
+ core.String instanceClass; |
+ /** |
+ * Configuration for Python runtime third-party libraries required by the |
+ * application. Only returned in `GET` requests if `view=FULL` is set. May |
+ * only be set on create requests; once created, is immutable. |
+ */ |
+ core.List<Library> libraries; |
+ /** |
+ * A module with manual scaling runs continuously, allowing you to perform |
+ * complex initialization and rely on the state of its memory over time. |
+ */ |
+ ManualScaling manualScaling; |
+ /** |
+ * The full path to the Version resource in the API. Example: |
+ * "apps/myapp/modules/default/versions/v1". @OutputOnly |
+ */ |
+ core.String name; |
+ /** Used to specify extra network settings (for VM runtimes only). */ |
+ Network network; |
+ /** |
+ * Go only. Files that match this pattern will not be built into the app. May |
+ * only be set on create requests. |
+ */ |
+ core.String nobuildFilesRegex; |
+ /** |
+ * Used to specify how many machine resources an app version needs (for VM |
+ * runtimes only). |
+ */ |
+ Resources resources; |
+ /** The desired runtime. Values can include python27, java7, go, etc. */ |
+ core.String runtime; |
+ /** If true, multiple requests can be dispatched to the app at once. */ |
+ core.bool threadsafe; |
+ /** Whether to deploy this app in a VM container. */ |
+ core.bool vm; |
+ |
+ Version(); |
+ |
+ Version.fromJson(core.Map _json) { |
+ if (_json.containsKey("apiConfig")) { |
+ apiConfig = new ApiConfigHandler.fromJson(_json["apiConfig"]); |
+ } |
+ if (_json.containsKey("automaticScaling")) { |
+ automaticScaling = new AutomaticScaling.fromJson(_json["automaticScaling"]); |
+ } |
+ if (_json.containsKey("basicScaling")) { |
+ basicScaling = new BasicScaling.fromJson(_json["basicScaling"]); |
+ } |
+ if (_json.containsKey("betaSettings")) { |
+ betaSettings = _json["betaSettings"]; |
+ } |
+ if (_json.containsKey("defaultExpiration")) { |
+ defaultExpiration = _json["defaultExpiration"]; |
+ } |
+ if (_json.containsKey("deployment")) { |
+ deployment = new Deployment.fromJson(_json["deployment"]); |
+ } |
+ if (_json.containsKey("envVariables")) { |
+ envVariables = _json["envVariables"]; |
+ } |
+ if (_json.containsKey("errorHandlers")) { |
+ errorHandlers = _json["errorHandlers"].map((value) => new ErrorHandler.fromJson(value)).toList(); |
+ } |
+ if (_json.containsKey("handlers")) { |
+ handlers = _json["handlers"].map((value) => new UrlMap.fromJson(value)).toList(); |
+ } |
+ if (_json.containsKey("healthCheck")) { |
+ healthCheck = new HealthCheck.fromJson(_json["healthCheck"]); |
+ } |
+ if (_json.containsKey("id")) { |
+ id = _json["id"]; |
+ } |
+ if (_json.containsKey("inboundServices")) { |
+ inboundServices = _json["inboundServices"]; |
+ } |
+ if (_json.containsKey("instanceClass")) { |
+ instanceClass = _json["instanceClass"]; |
+ } |
+ if (_json.containsKey("libraries")) { |
+ libraries = _json["libraries"].map((value) => new Library.fromJson(value)).toList(); |
+ } |
+ if (_json.containsKey("manualScaling")) { |
+ manualScaling = new ManualScaling.fromJson(_json["manualScaling"]); |
+ } |
+ if (_json.containsKey("name")) { |
+ name = _json["name"]; |
+ } |
+ if (_json.containsKey("network")) { |
+ network = new Network.fromJson(_json["network"]); |
+ } |
+ if (_json.containsKey("nobuildFilesRegex")) { |
+ nobuildFilesRegex = _json["nobuildFilesRegex"]; |
+ } |
+ if (_json.containsKey("resources")) { |
+ resources = new Resources.fromJson(_json["resources"]); |
+ } |
+ if (_json.containsKey("runtime")) { |
+ runtime = _json["runtime"]; |
+ } |
+ if (_json.containsKey("threadsafe")) { |
+ threadsafe = _json["threadsafe"]; |
+ } |
+ if (_json.containsKey("vm")) { |
+ vm = _json["vm"]; |
+ } |
+ } |
+ |
+ core.Map toJson() { |
+ var _json = new core.Map(); |
+ if (apiConfig != null) { |
+ _json["apiConfig"] = (apiConfig).toJson(); |
+ } |
+ if (automaticScaling != null) { |
+ _json["automaticScaling"] = (automaticScaling).toJson(); |
+ } |
+ if (basicScaling != null) { |
+ _json["basicScaling"] = (basicScaling).toJson(); |
+ } |
+ if (betaSettings != null) { |
+ _json["betaSettings"] = betaSettings; |
+ } |
+ if (defaultExpiration != null) { |
+ _json["defaultExpiration"] = defaultExpiration; |
+ } |
+ if (deployment != null) { |
+ _json["deployment"] = (deployment).toJson(); |
+ } |
+ if (envVariables != null) { |
+ _json["envVariables"] = envVariables; |
+ } |
+ if (errorHandlers != null) { |
+ _json["errorHandlers"] = errorHandlers.map((value) => (value).toJson()).toList(); |
+ } |
+ if (handlers != null) { |
+ _json["handlers"] = handlers.map((value) => (value).toJson()).toList(); |
+ } |
+ if (healthCheck != null) { |
+ _json["healthCheck"] = (healthCheck).toJson(); |
+ } |
+ if (id != null) { |
+ _json["id"] = id; |
+ } |
+ if (inboundServices != null) { |
+ _json["inboundServices"] = inboundServices; |
+ } |
+ if (instanceClass != null) { |
+ _json["instanceClass"] = instanceClass; |
+ } |
+ if (libraries != null) { |
+ _json["libraries"] = libraries.map((value) => (value).toJson()).toList(); |
+ } |
+ if (manualScaling != null) { |
+ _json["manualScaling"] = (manualScaling).toJson(); |
+ } |
+ if (name != null) { |
+ _json["name"] = name; |
+ } |
+ if (network != null) { |
+ _json["network"] = (network).toJson(); |
+ } |
+ if (nobuildFilesRegex != null) { |
+ _json["nobuildFilesRegex"] = nobuildFilesRegex; |
+ } |
+ if (resources != null) { |
+ _json["resources"] = (resources).toJson(); |
+ } |
+ if (runtime != null) { |
+ _json["runtime"] = runtime; |
+ } |
+ if (threadsafe != null) { |
+ _json["threadsafe"] = threadsafe; |
+ } |
+ if (vm != null) { |
+ _json["vm"] = vm; |
+ } |
+ return _json; |
+ } |
+} |