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.
8import os
9import shutil
10import stat
11import sys
12
13SRC_DIR = os.path.join(sys.path[0], os.pardir, os.pardir, os.pardir, os.pardir,
14    os.pardir)
15THIRD_PARTY_DIR = os.path.join(SRC_DIR, 'third_party')
16LOCAL_THIRD_PARTY_DIR = os.path.join(sys.path[0], 'third_party')
17TOOLS_DIR = os.path.join(SRC_DIR, 'tools')
18SCHEMA_COMPILER_FILES = ['memoize.py',
19                         'model.py',
20                         'idl_schema.py',
21                         'schema_util.py',
22                         'json_parse.py',
23                         'json_schema.py']
24
25def 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
30def OnError(function, path, excinfo):
31  os.chmod(path, stat.S_IWUSR)
32  function(path)
33
34def 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
50def 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
88if __name__ == '__main__':
89  main()
90