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

Unified Diff: infra/tools/new_tool/new_tool.py

Issue 1172053003: Created infra/tools/new_tool (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: More tests Created 5 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « infra/tools/new_tool/__main__.py ('k') | infra/tools/new_tool/templates/main.template » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: infra/tools/new_tool/new_tool.py
diff --git a/infra/tools/new_tool/new_tool.py b/infra/tools/new_tool/new_tool.py
new file mode 100644
index 0000000000000000000000000000000000000000..2318d6ec4341cc3f28f9753e082f2fd5e69e61d5
--- /dev/null
+++ b/infra/tools/new_tool/new_tool.py
@@ -0,0 +1,100 @@
+# Copyright 2015 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import datetime
+import os
+
+# infra subdirectory containing tools.
+TOOL_DIR = os.path.dirname(os.path.dirname(__file__))
+TEMPLATE_DIR = os.path.join(os.path.dirname(__file__), 'templates')
+
+COPYRIGHT_NOTICE = """\
+# Copyright %s The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+""" % datetime.datetime.now().strftime('%Y')
+
+
+def add_argparse_options(parser):
+ parser.add_argument(
+ 'name', metavar='name', type=str, nargs=1,
+ help='The name of the new tool.')
+
+ parser.add_argument('--base-dir', default=TOOL_DIR,
+ help='Directory where to create the tool. Default: '
+ '%(default)s')
+
+
+def generate_python_file(dirpath, filename, template,
+ template_dir=TEMPLATE_DIR, **kwargs):
+ """Generate a python file based on a template.
+
+ This function does nothing if the target file already exists.
+
+ Args:
+ dirpath (str): directory where to create the file.
+ filename (str): base name of file to generate.
+ template (str): name of the template file (without extension)
+
+ Keywords Args:
+ template_dir (str): path to the directory where templates are stored.
+ kwargs (dict): passed to the template.
+
+ Return:
+ filename (str): path to the file that has been generated.
+ """
+ file_path = os.path.join(dirpath, filename + '.py')
+ if os.path.isfile(file_path):
+ print 'Skipping existing file %s' % file_path
+ return file_path
+
+ if template:
+ with open(os.path.join(template_dir, template + '.template'), 'r') as f:
+ MAIN_CONTENT = f.read().format(**kwargs)
+ else:
+ MAIN_CONTENT = ''
+
+ with open(file_path, 'w') as f:
+ f.write(COPYRIGHT_NOTICE)
+ f.write(MAIN_CONTENT)
+ return file_path
+
+
+def generate_tool_files(toolname, base_dir):
+ """Generate a stub tool from template files.
+
+ Args:
+ toolname (str): name of the tool. This is also the name of the directory
+ generated.
+ base_dir (str): path to the directory where to create the files.
+
+ Return:
+ tool_path (str or None): directory created or None is nothing has been done.
+ """
+
+ if not os.path.isdir(base_dir):
+ print 'Destination directory does not exist'
+ return 1
+
+ tool_dir = os.path.join(base_dir, toolname)
+ if os.path.exists(tool_dir):
+ print 'Tool seems to already exists: %s\nAborting.' % tool_dir
+ return 1
+
+ print 'Generating %s...' % tool_dir
+ os.mkdir(tool_dir)
+ generate_python_file(tool_dir, '__init__', None)
+ generate_python_file(tool_dir, '__main__', 'main',
+ toolname=toolname,
+ Toolname=toolname.capitalize())
+ generate_python_file(tool_dir, toolname, 'tool',
+ Toolname=toolname.capitalize())
+
+ test_dir = os.path.join(tool_dir, 'test')
+ os.mkdir(test_dir)
+ generate_python_file(test_dir, '__init__', None)
+ generate_python_file(test_dir, toolname + '_test', 'test',
+ toolname=toolname,
+ tested_file=toolname)
+ print 'Done.'
« no previous file with comments | « infra/tools/new_tool/__main__.py ('k') | infra/tools/new_tool/templates/main.template » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698