Home | History | Annotate | Download | only in server2
      1 #!/usr/bin/env python
      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
      4 # found in the LICENSE file.
      5 
      6 # This script is used to copy all dependencies into the local directory.
      7 # The package of files can then be uploaded to App Engine.
      8 import os
      9 import shutil
     10 import stat
     11 import sys
     12 
     13 SRC_DIR = os.path.join(sys.path[0], os.pardir, os.pardir, os.pardir, os.pardir,
     14     os.pardir)
     15 THIRD_PARTY_DIR = os.path.join(SRC_DIR, 'third_party')
     16 LOCAL_THIRD_PARTY_DIR = os.path.join(sys.path[0], 'third_party')
     17 TOOLS_DIR = os.path.join(SRC_DIR, 'tools')
     18 SCHEMA_COMPILER_FILES = ['memoize.py',
     19                          'model.py',
     20                          'idl_schema.py',
     21                          'schema_util.py',
     22                          'json_parse.py',
     23                          'json_schema.py']
     24 
     25 def MakeInit(path):
     26   path = os.path.join(path, '__init__.py')
     27   with open(os.path.join(path), 'w') as f:
     28     os.utime(os.path.join(path), None)
     29 
     30 def OnError(function, path, excinfo):
     31   os.chmod(path, stat.S_IWUSR)
     32   function(path)
     33 
     34 def CopyThirdParty(src, dest, files=None, make_init=True):
     35   dest_path = os.path.join(LOCAL_THIRD_PARTY_DIR, dest)
     36   if not files:
     37     shutil.copytree(src, dest_path)
     38     if make_init:
     39       MakeInit(dest_path)
     40     return
     41   try:
     42     os.makedirs(dest_path)
     43   except Exception:
     44     pass
     45   if make_init:
     46     MakeInit(dest_path)
     47   for filename in files:
     48     shutil.copy(os.path.join(src, filename), os.path.join(dest_path, filename))
     49 
     50 def main():
     51   if os.path.isdir(LOCAL_THIRD_PARTY_DIR):
     52     try:
     53       shutil.rmtree(LOCAL_THIRD_PARTY_DIR, False, OnError)
     54     except OSError:
     55       print('*-------------------------------------------------------------*\n'
     56             '| If you are receiving an upload error, try removing          |\n'
     57             '| chrome/common/extensions/docs/server2/third_party manually. |\n'
     58             '*-------------------------------------------------------------*\n')
     59 
     60 
     61   CopyThirdParty(os.path.join(THIRD_PARTY_DIR, 'motemplate'), 'motemplate')
     62   CopyThirdParty(os.path.join(THIRD_PARTY_DIR, 'markdown'), 'markdown',
     63                  make_init=False)
     64   CopyThirdParty(os.path.join(SRC_DIR, 'ppapi', 'generators'),
     65                  'json_schema_compiler')
     66   CopyThirdParty(os.path.join(THIRD_PARTY_DIR, 'ply'),
     67                  os.path.join('json_schema_compiler', 'ply'))
     68   CopyThirdParty(os.path.join(TOOLS_DIR, 'json_schema_compiler'),
     69                  'json_schema_compiler',
     70                  SCHEMA_COMPILER_FILES)
     71   CopyThirdParty(os.path.join(TOOLS_DIR, 'json_comment_eater'),
     72                  'json_schema_compiler',
     73                  ['json_comment_eater.py'])
     74   CopyThirdParty(os.path.join(THIRD_PARTY_DIR, 'simplejson'),
     75                  os.path.join('json_schema_compiler', 'simplejson'),
     76                  make_init=False)
     77   MakeInit(LOCAL_THIRD_PARTY_DIR)
     78 
     79   CopyThirdParty(os.path.join(THIRD_PARTY_DIR, 'google_appengine_cloudstorage',
     80                  'cloudstorage'), 'cloudstorage')
     81 
     82   # To be able to use the Motemplate class we need this import in __init__.py.
     83   with open(os.path.join(LOCAL_THIRD_PARTY_DIR,
     84                          'motemplate',
     85                          '__init__.py'), 'a') as f:
     86     f.write('from motemplate import Motemplate\n')
     87 
     88 if __name__ == '__main__':
     89   main()
     90