Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(132)

Side by Side Diff: remoting/webapp/build-webapp.py

Issue 1816653002: Remove app_remoting. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """Creates a directory with with the unpacked contents of the remoting webapp. 6 """Creates a directory with with the unpacked contents of the remoting webapp.
7 7
8 The directory will contain a copy-of or a link-to to all remoting webapp 8 The directory will contain a copy-of or a link-to to all remoting webapp
9 resources. This includes HTML/JS and any plugin binaries. The script also 9 resources. This includes HTML/JS and any plugin binaries. The script also
10 massages resulting files appropriately with host plugin data. Finally, 10 massages resulting files appropriately with host plugin data. Finally,
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 import jinja2 101 import jinja2
102 (template_path, template_name) = os.path.split(input_file) 102 (template_path, template_name) = os.path.split(input_file)
103 include_paths = [template_path] + include_paths 103 include_paths = [template_path] + include_paths
104 env = jinja2.Environment(loader=jinja2.FileSystemLoader(include_paths)) 104 env = jinja2.Environment(loader=jinja2.FileSystemLoader(include_paths))
105 template = env.get_template(template_name) 105 template = env.get_template(template_name)
106 rendered = template.render(context) 106 rendered = template.render(context)
107 io.open(output_file, 'w', encoding='utf-8').write(rendered) 107 io.open(output_file, 'w', encoding='utf-8').write(rendered)
108 108
109 109
110 def buildWebApp(buildtype, version, destination, zip_path, 110 def buildWebApp(buildtype, version, destination, zip_path,
111 manifest_template, webapp_type, appid, app_client_id, app_name, 111 manifest_template, appid, app_client_id, app_name,
112 app_description, app_capabilities, manifest_key, files, 112 app_description, app_capabilities, manifest_key, files,
113 files_listfile, locales_listfile, jinja_paths, 113 files_listfile, locales_listfile, jinja_paths,
114 service_environment, use_gcd): 114 service_environment, use_gcd):
115 """Does the main work of building the webapp directory and zipfile. 115 """Does the main work of building the webapp directory and zipfile.
116 116
117 Args: 117 Args:
118 buildtype: the type of build ("Official", "Release" or "Dev"). 118 buildtype: the type of build ("Official", "Release" or "Dev").
119 destination: A string with path to directory where the webapp will be 119 destination: A string with path to directory where the webapp will be
120 written. 120 written.
121 zipfile: A string with path to the zipfile to create containing the 121 zipfile: A string with path to the zipfile to create containing the
122 contents of |destination|. 122 contents of |destination|.
123 manifest_template: jinja2 template file for manifest. 123 manifest_template: jinja2 template file for manifest.
124 webapp_type: webapp type:
125 For DesktopRemoting: "desktop"
126 For AppRemoting: "app_remoting" or "shared_module"
127 appid: A string with the Remoting Application Id (only used for app 124 appid: A string with the Remoting Application Id (only used for app
128 remoting webapps). If supplied, it defaults to using the 125 remoting webapps). If supplied, it defaults to using the
129 test API server. 126 test API server.
130 app_client_id: The OAuth2 client ID for the webapp. 127 app_client_id: The OAuth2 client ID for the webapp.
131 app_name: A string with the name of the application. 128 app_name: A string with the name of the application.
132 app_description: A string with the description of the application. 129 app_description: A string with the description of the application.
133 app_capabilities: A set of strings naming the capabilities that should be 130 app_capabilities: A set of strings naming the capabilities that should be
134 enabled for this application. 131 enabled for this application.
135 manifest_key: The manifest key for the webapp. 132 manifest_key: The manifest key for the webapp.
136 files: An array of strings listing the paths for resources to include 133 files: An array of strings listing the paths for resources to include
(...skipping 19 matching lines...) Expand all
156 with open(locales_listfile) as input: 153 with open(locales_listfile) as input:
157 for s in input: 154 for s in input:
158 locales.append(s.rstrip()) 155 locales.append(s.rstrip())
159 156
160 # Load the files from the files_listfile. 157 # Load the files from the files_listfile.
161 if files_listfile: 158 if files_listfile:
162 with open(files_listfile) as input: 159 with open(files_listfile) as input:
163 for s in input: 160 for s in input:
164 files.append(s.rstrip()) 161 files.append(s.rstrip())
165 162
166 # Ensure a fresh directory. 163 #Ensure a fresh directory.
167 try: 164 try:
168 shutil.rmtree(destination) 165 shutil.rmtree(destination)
169 except OSError: 166 except OSError:
170 if os.path.exists(destination): 167 if os.path.exists(destination):
171 raise 168 raise
172 else: 169 else:
173 pass 170 pass
174 os.makedirs(destination, 0775) 171 os.makedirs(destination, 0775)
175 172
176 if buildtype != 'Official' and buildtype != 'Release' and buildtype != 'Dev': 173 if buildtype != 'Official' and buildtype != 'Release' and buildtype != 'Dev':
177 raise Exception('Unknown buildtype: ' + buildtype) 174 raise Exception('Unknown buildtype: ' + buildtype)
178 175
179 jinja_context = { 176 jinja_context = {
180 'webapp_type': webapp_type,
181 'buildtype': buildtype, 177 'buildtype': buildtype,
182 } 178 }
183 179
184 # Copy all the files. 180 # Copy all the files.
185 for current_file in files: 181 for current_file in files:
186 destination_file = os.path.join(destination, os.path.basename(current_file)) 182 destination_file = os.path.join(destination, os.path.basename(current_file))
187 183
188 # Process *.jinja2 files as jinja2 templates 184 # Process *.jinja2 files as jinja2 templates
189 if current_file.endswith(".jinja2"): 185 if current_file.endswith(".jinja2"):
190 destination_file = destination_file[:-len(".jinja2")] 186 destination_file = destination_file[:-len(".jinja2")]
(...skipping 16 matching lines...) Expand all
207 os.path.split(current_locale)[1]) 203 os.path.split(current_locale)[1])
208 os.mkdir(destination_dir, 0775) 204 os.mkdir(destination_dir, 0775)
209 shutil.copy2(current_locale, destination_file) 205 shutil.copy2(current_locale, destination_file)
210 elif extension == '.pak': 206 elif extension == '.pak':
211 destination_file = os.path.join(remoting_locales, 207 destination_file = os.path.join(remoting_locales,
212 os.path.split(current_locale)[1]) 208 os.path.split(current_locale)[1])
213 shutil.copy2(current_locale, destination_file) 209 shutil.copy2(current_locale, destination_file)
214 else: 210 else:
215 raise Exception('Unknown extension: ' + current_locale) 211 raise Exception('Unknown extension: ' + current_locale)
216 212
217 is_app_remoting_webapp = webapp_type == 'app_remoting'
218 is_app_remoting_shared_module = webapp_type == 'shared_module'
219 is_app_remoting = is_app_remoting_webapp or is_app_remoting_shared_module
220 is_prod_service_environment = service_environment == 'prod' 213 is_prod_service_environment = service_environment == 'prod'
221 is_desktop_remoting = not is_app_remoting
222 214
223 # Allow host names for google services/apis to be overriden via env vars. 215 # Allow host names for google services/apis to be overriden via env vars.
224 oauth2AccountsHost = os.environ.get( 216 oauth2AccountsHost = os.environ.get(
225 'OAUTH2_ACCOUNTS_HOST', 'https://accounts.google.com') 217 'OAUTH2_ACCOUNTS_HOST', 'https://accounts.google.com')
226 oauth2ApiHost = os.environ.get( 218 oauth2ApiHost = os.environ.get(
227 'OAUTH2_API_HOST', 'https://www.googleapis.com') 219 'OAUTH2_API_HOST', 'https://www.googleapis.com')
228 directoryApiHost = os.environ.get( 220 directoryApiHost = os.environ.get(
229 'DIRECTORY_API_HOST', 'https://www.googleapis.com') 221 'DIRECTORY_API_HOST', 'https://www.googleapis.com')
230 remotingApiHost = os.environ.get( 222 remotingApiHost = os.environ.get(
231 'REMOTING_API_HOST', 'https://remoting-pa.googleapis.com') 223 'REMOTING_API_HOST', 'https://remoting-pa.googleapis.com')
232 224
233 if is_app_remoting:
234 appRemotingApiHost = os.environ.get(
235 'APP_REMOTING_API_HOST', None)
236
237 if is_app_remoting_webapp:
238 appRemotingApplicationId = os.environ.get(
239 'APP_REMOTING_APPLICATION_ID', None)
240
241 # Release/Official builds are special because they are what we will upload
242 # to the web store. The checks below will validate that prod builds are
243 # being generated correctly (no overrides) and with the correct buildtype.
244 # They also verify that folks are not accidentally building dev apps for
245 # Release (no impersonation) instead of Dev.
246 if is_prod_service_environment and buildtype == 'Dev':
247 raise Exception("Prod environment cannot be built for 'dev' builds")
248
249 if buildtype != 'Dev':
250 if not is_prod_service_environment:
251 raise Exception('Invalid service_environment targeted for '
252 + buildtype + ': ' + service_environment)
253 if appid != None:
254 raise Exception('Cannot pass in an appid for '
255 + buildtype + ' builds: ' + service_environment)
256 if appRemotingApiHost != None:
257 raise Exception('Cannot set APP_REMOTING_API_HOST env var for '
258 + buildtype + ' builds')
259 if appRemotingApplicationId != None:
260 raise Exception('Cannot set APP_REMOTING_APPLICATION_ID env var for '
261 + buildtype + ' builds')
262
263 # If an Application ID was set (either from service_environment variable or
264 # from a command line argument), hardcode it, otherwise get it at runtime.
265 effectiveAppId = appRemotingApplicationId or appid
266 if effectiveAppId:
267 appRemotingApplicationId = "'" + effectiveAppId + "'"
268 else:
269 appRemotingApplicationId = "chrome.i18n.getMessage('@@extension_id')"
270 findAndReplace(os.path.join(destination, 'arv_main.js'),
271 "'APP_REMOTING_APPLICATION_ID'", appRemotingApplicationId)
272
273 oauth2BaseUrl = oauth2AccountsHost + '/o/oauth2' 225 oauth2BaseUrl = oauth2AccountsHost + '/o/oauth2'
274 oauth2ApiBaseUrl = oauth2ApiHost + '/oauth2' 226 oauth2ApiBaseUrl = oauth2ApiHost + '/oauth2'
275 directoryApiBaseUrl = directoryApiHost + '/chromoting/v1' 227 directoryApiBaseUrl = directoryApiHost + '/chromoting/v1'
276 telemetryApiBaseUrl = remotingApiHost + '/v1/events' 228 telemetryApiBaseUrl = remotingApiHost + '/v1/events'
277 229
278 if is_app_remoting: 230 replaceBool(destination, 'USE_GCD', use_gcd)
279 # Set the base endpoint url first and then set the endpoint version. 231 replaceString(destination, 'OAUTH2_BASE_URL', oauth2BaseUrl)
280 if not appRemotingApiHost: 232 replaceString(destination, 'OAUTH2_API_BASE_URL', oauth2ApiBaseUrl)
281 if is_prod_service_environment: 233 replaceString(destination, 'DIRECTORY_API_BASE_URL', directoryApiBaseUrl)
282 appRemotingApiHost = 'https://www.googleapis.com' 234 replaceString(destination, 'TELEMETRY_API_BASE_URL', telemetryApiBaseUrl)
283 else:
284 appRemotingApiHost = 'https://www-googleapis-test.sandbox.google.com'
285
286 # TODO(garykac) Currently, the shared module is always set up for the
287 # dev service_environment. Update build so that the dev environment can
288 # be controlled by the app stub rather than hard-coded into the shared
289 # module.
290 if service_environment == 'dev' or is_app_remoting_shared_module:
291 appRemotingServicePath = '/appremoting/v1beta1_dev'
292 elif service_environment == 'prod':
293 appRemotingServicePath = '/appremoting/v1beta1'
294 else:
295 raise Exception('Unknown service environment: ' + service_environment)
296 appRemotingApiBaseUrl = appRemotingApiHost + appRemotingServicePath
297 else:
298 appRemotingApiBaseUrl = ''
299
300 # TODO(garykac) replaceString (et al.) implictly update plugin_settings.js,
301 # which doesn't exist for the app stub. We need to move app-specific
302 # AppRemoting options into arv_main.js.
303 if not is_app_remoting_webapp:
304 replaceBool(destination, 'USE_GCD', use_gcd)
305 replaceString(destination, 'OAUTH2_BASE_URL', oauth2BaseUrl)
306 replaceString(destination, 'OAUTH2_API_BASE_URL', oauth2ApiBaseUrl)
307 replaceString(destination, 'DIRECTORY_API_BASE_URL', directoryApiBaseUrl)
308 replaceString(destination, 'TELEMETRY_API_BASE_URL', telemetryApiBaseUrl)
309 if is_app_remoting:
310 replaceString(destination, 'APP_REMOTING_API_BASE_URL',
311 appRemotingApiBaseUrl)
312 235
313 # Substitute hosts in the manifest's CSP list. 236 # Substitute hosts in the manifest's CSP list.
314 # Ensure we list the API host only once if it's the same for multiple APIs. 237 # Ensure we list the API host only once if it's the same for multiple APIs.
315 googleApiHosts = ' '.join(set([oauth2ApiHost, directoryApiHost])) 238 googleApiHosts = ' '.join(set([oauth2ApiHost, directoryApiHost]))
316 239
317 # WCS and the OAuth trampoline are both hosted on talkgadget. Split them into 240 # WCS and the OAuth trampoline are both hosted on talkgadget. Split them into
318 # separate suffix/prefix variables to allow for wildcards in manifest.json. 241 # separate suffix/prefix variables to allow for wildcards in manifest.json.
319 talkGadgetHostSuffix = os.environ.get( 242 talkGadgetHostSuffix = os.environ.get(
320 'TALK_GADGET_HOST_SUFFIX', 'talkgadget.google.com') 243 'TALK_GADGET_HOST_SUFFIX', 'talkgadget.google.com')
321 talkGadgetHostPrefix = os.environ.get( 244 talkGadgetHostPrefix = os.environ.get(
(...skipping 19 matching lines...) Expand all
341 oauth2RedirectUrlJs = ("'" + oauth2RedirectBaseUrlJs + 264 oauth2RedirectUrlJs = ("'" + oauth2RedirectBaseUrlJs +
342 "/rel/' + chrome.i18n.getMessage('@@extension_id')") 265 "/rel/' + chrome.i18n.getMessage('@@extension_id')")
343 oauth2RedirectUrlJson = oauth2RedirectBaseUrlJson + '/rel/*' 266 oauth2RedirectUrlJson = oauth2RedirectBaseUrlJson + '/rel/*'
344 else: 267 else:
345 oauth2RedirectUrlJs = "'" + oauth2RedirectBaseUrlJs + "/dev'" 268 oauth2RedirectUrlJs = "'" + oauth2RedirectBaseUrlJs + "/dev'"
346 oauth2RedirectUrlJson = oauth2RedirectBaseUrlJson + '/dev*' 269 oauth2RedirectUrlJson = oauth2RedirectBaseUrlJson + '/dev*'
347 thirdPartyAuthUrlJs = oauth2RedirectBaseUrlJs + '/thirdpartyauth' 270 thirdPartyAuthUrlJs = oauth2RedirectBaseUrlJs + '/thirdpartyauth'
348 thirdPartyAuthUrlJson = oauth2RedirectBaseUrlJson + '/thirdpartyauth*' 271 thirdPartyAuthUrlJson = oauth2RedirectBaseUrlJson + '/thirdpartyauth*'
349 xmppServer = os.environ.get('XMPP_SERVER', 'talk.google.com:443') 272 xmppServer = os.environ.get('XMPP_SERVER', 'talk.google.com:443')
350 273
351 if not is_app_remoting_webapp: 274 replaceString(destination, 'TALK_GADGET_URL', talkGadgetBaseUrl)
352 replaceString(destination, 'TALK_GADGET_URL', talkGadgetBaseUrl) 275 findAndReplace(os.path.join(destination, 'plugin_settings.js'),
353 findAndReplace(os.path.join(destination, 'plugin_settings.js'), 276 "'OAUTH2_REDIRECT_URL'", oauth2RedirectUrlJs)
354 "'OAUTH2_REDIRECT_URL'", oauth2RedirectUrlJs)
355 277
356 # Configure xmpp server and directory bot settings in the plugin. 278 # Configure xmpp server and directory bot settings in the plugin.
357 xmpp_server_user_tls = getenvBool('XMPP_SERVER_USE_TLS', True) 279 xmpp_server_user_tls = getenvBool('XMPP_SERVER_USE_TLS', True)
358 if (buildtype != 'Dev' and not xmpp_server_user_tls): 280 if (buildtype != 'Dev' and not xmpp_server_user_tls):
359 raise Exception('TLS can must be enabled in non Dev builds.') 281 raise Exception('TLS can must be enabled in non Dev builds.')
360 282
361 replaceBool( 283 replaceBool(
362 destination, 'XMPP_SERVER_USE_TLS', xmpp_server_user_tls) 284 destination, 'XMPP_SERVER_USE_TLS', xmpp_server_user_tls)
363 replaceString(destination, 'XMPP_SERVER', xmppServer) 285 replaceString(destination, 'XMPP_SERVER', xmppServer)
364 replaceString(destination, 'DIRECTORY_BOT_JID', 286 replaceString(destination, 'DIRECTORY_BOT_JID',
365 os.environ.get('DIRECTORY_BOT_JID', 287 os.environ.get('DIRECTORY_BOT_JID',
366 'remoting@bot.talk.google.com')) 288 'remoting@bot.talk.google.com'))
367 replaceString(destination, 'THIRD_PARTY_AUTH_REDIRECT_URL', 289 replaceString(destination, 'THIRD_PARTY_AUTH_REDIRECT_URL',
368 thirdPartyAuthUrlJs) 290 thirdPartyAuthUrlJs)
369 291
370 # Set the correct API keys. 292 # Set the correct API keys.
371 # For overriding the client ID/secret via env vars, see google_api_keys.py. 293 # For overriding the client ID/secret via env vars, see google_api_keys.py.
372 apiClientId = google_api_keys.GetClientID('REMOTING') 294 apiClientId = google_api_keys.GetClientID('REMOTING')
373 apiClientSecret = google_api_keys.GetClientSecret('REMOTING') 295 apiClientSecret = google_api_keys.GetClientSecret('REMOTING')
374 apiKey = google_api_keys.GetAPIKeyRemoting() 296 apiKey = google_api_keys.GetAPIKeyRemoting()
375 297
376 if is_app_remoting_webapp and buildtype != 'Dev': 298 apiClientIdV2 = os.environ.get(
377 if not app_client_id: 299 'REMOTING_IDENTITY_API_CLIENT_ID',
378 raise Exception('Invalid app_client_id passed in: "' + 300 google_api_keys.GetClientID('REMOTING_IDENTITY_API'))
379 app_client_id + '"')
380 apiClientIdV2 = app_client_id + '.apps.googleusercontent.com'
381 else:
382 apiClientIdV2 = os.environ.get(
383 'REMOTING_IDENTITY_API_CLIENT_ID',
384 google_api_keys.GetClientID('REMOTING_IDENTITY_API'))
385 301
386 if not is_app_remoting_webapp: 302 replaceString(destination, 'API_CLIENT_ID', apiClientId)
387 replaceString(destination, 'API_CLIENT_ID', apiClientId) 303 replaceString(destination, 'API_CLIENT_SECRET', apiClientSecret)
388 replaceString(destination, 'API_CLIENT_SECRET', apiClientSecret) 304 replaceString(destination, 'API_KEY', apiKey)
389 replaceString(destination, 'API_KEY', apiKey)
390 305
391 # Write the application capabilities. 306 # Use a fixed key in the app manifest. For dev builds, this ensures that the
392 if is_app_remoting_webapp: 307 # app can be run directly from the output directory. For official CRD builds,
393 appCapabilities = ','.join(
394 ['remoting.ClientSession.Capability.' + x for x in app_capabilities])
395 findAndReplace(os.path.join(destination, 'arv_main.js'),
396 "'APPLICATION_CAPABILITIES'", appCapabilities)
397
398 # Official AppRemoting builds get the key from the gyp/gn build file. All
399 # other builds use a fixed key. For dev builds, this ensures that the app
400 # can be run directly from the output directory. For official CRD builds,
401 # it allows QA to test the app without uploading it to Chrome Web Store. 308 # it allows QA to test the app without uploading it to Chrome Web Store.
402 if is_app_remoting_webapp and buildtype != 'Dev': 309 manifest_key = 'remotingdevbuild'
403 if not manifest_key:
404 raise Exception('No manifest_key passed in')
405 else:
406 manifest_key = 'remotingdevbuild'
407 310
408 # Generate manifest. 311 # Generate manifest.
409 if manifest_template: 312 if manifest_template:
410 context = { 313 context = {
411 'webapp_type': webapp_type,
412 'FULL_APP_VERSION': version, 314 'FULL_APP_VERSION': version,
413 'MANIFEST_KEY': manifest_key, 315 'MANIFEST_KEY': manifest_key,
414 'OAUTH2_REDIRECT_URL': oauth2RedirectUrlJson, 316 'OAUTH2_REDIRECT_URL': oauth2RedirectUrlJson,
415 'TALK_GADGET_HOST': talkGadgetHostJson, 317 'TALK_GADGET_HOST': talkGadgetHostJson,
416 'THIRD_PARTY_AUTH_REDIRECT_URL': thirdPartyAuthUrlJson, 318 'THIRD_PARTY_AUTH_REDIRECT_URL': thirdPartyAuthUrlJson,
417 'REMOTING_IDENTITY_API_CLIENT_ID': apiClientIdV2, 319 'REMOTING_IDENTITY_API_CLIENT_ID': apiClientIdV2,
418 'OAUTH2_BASE_URL': oauth2BaseUrl, 320 'OAUTH2_BASE_URL': oauth2BaseUrl,
419 'OAUTH2_API_BASE_URL': oauth2ApiBaseUrl, 321 'OAUTH2_API_BASE_URL': oauth2ApiBaseUrl,
420 'DIRECTORY_API_BASE_URL': directoryApiBaseUrl, 322 'DIRECTORY_API_BASE_URL': directoryApiBaseUrl,
421 'TELEMETRY_API_BASE_URL':telemetryApiBaseUrl , 323 'TELEMETRY_API_BASE_URL':telemetryApiBaseUrl ,
422 'APP_REMOTING_API_BASE_URL': appRemotingApiBaseUrl,
423 'CLOUD_PRINT_URL': '', 324 'CLOUD_PRINT_URL': '',
424 'OAUTH2_ACCOUNTS_HOST': oauth2AccountsHost, 325 'OAUTH2_ACCOUNTS_HOST': oauth2AccountsHost,
425 'GOOGLE_API_HOSTS': googleApiHosts, 326 'GOOGLE_API_HOSTS': googleApiHosts,
426 'APP_NAME': app_name, 327 'APP_NAME': app_name,
427 'APP_DESCRIPTION': app_description, 328 'APP_DESCRIPTION': app_description,
428 'OAUTH_CLOUD_PRINT_SCOPE': '', 329 'OAUTH_CLOUD_PRINT_SCOPE': '',
429 'OAUTH_GDRIVE_SCOPE': '', 330 'OAUTH_GDRIVE_SCOPE': '',
430 'USE_GCD': use_gcd, 331 'USE_GCD': use_gcd,
431 'XMPP_SERVER': xmppServer, 332 'XMPP_SERVER': xmppServer,
432 # An URL match pattern that is added to the |permissions| section of the 333 # An URL match pattern that is added to the |permissions| section of the
(...skipping 17 matching lines...) Expand all
450 return 0 351 return 0
451 352
452 353
453 def main(): 354 def main():
454 parser = argparse.ArgumentParser() 355 parser = argparse.ArgumentParser()
455 parser.add_argument('buildtype') 356 parser.add_argument('buildtype')
456 parser.add_argument('version') 357 parser.add_argument('version')
457 parser.add_argument('destination') 358 parser.add_argument('destination')
458 parser.add_argument('zip_path') 359 parser.add_argument('zip_path')
459 parser.add_argument('manifest_template') 360 parser.add_argument('manifest_template')
460 parser.add_argument('webapp_type')
461 parser.add_argument('files', nargs='*', metavar='file', default=[]) 361 parser.add_argument('files', nargs='*', metavar='file', default=[])
462 parser.add_argument('--app_name', metavar='NAME') 362 parser.add_argument('--app_name', metavar='NAME')
463 parser.add_argument('--app_description', metavar='TEXT') 363 parser.add_argument('--app_description', metavar='TEXT')
464 parser.add_argument('--app_capabilities', 364 parser.add_argument('--app_capabilities',
465 nargs='*', default=[], metavar='CAPABILITY') 365 nargs='*', default=[], metavar='CAPABILITY')
466 parser.add_argument('--appid') 366 parser.add_argument('--appid')
467 parser.add_argument('--app_client_id', default='') 367 parser.add_argument('--app_client_id', default='')
468 parser.add_argument('--manifest_key', default='') 368 parser.add_argument('--manifest_key', default='')
469 parser.add_argument('--files_listfile', default='', metavar='PATH') 369 parser.add_argument('--files_listfile', default='', metavar='PATH')
470 parser.add_argument('--locales_listfile', default='', metavar='PATH') 370 parser.add_argument('--locales_listfile', default='', metavar='PATH')
471 parser.add_argument('--jinja_paths', nargs='*', default=[], metavar='PATH') 371 parser.add_argument('--jinja_paths', nargs='*', default=[], metavar='PATH')
472 parser.add_argument('--service_environment', default='', metavar='ENV') 372 parser.add_argument('--service_environment', default='', metavar='ENV')
473 parser.add_argument('--use_gcd', choices=['0', '1'], default='0') 373 parser.add_argument('--use_gcd', choices=['0', '1'], default='0')
474 374
475 args = parser.parse_args() 375 args = parser.parse_args()
476 args.use_gcd = (args.use_gcd != '0') 376 args.use_gcd = (args.use_gcd != '0')
477 args.app_capabilities = set(args.app_capabilities) 377 args.app_capabilities = set(args.app_capabilities)
478 return buildWebApp(**vars(args)) 378 return buildWebApp(**vars(args))
479 379
480 380
481 if __name__ == '__main__': 381 if __name__ == '__main__':
482 sys.exit(main()) 382 sys.exit(main())
OLDNEW
« no previous file with comments | « remoting/webapp/app_remoting/vendor/arv_wcs_sandbox.html ('k') | remoting/webapp/build_template.gni » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698