Source code for webdriver_test_tools.project.initialize

"""Functions for creating a new test package."""

import shutil

from webdriver_test_tools.common.files import *
from webdriver_test_tools.__about__ import __version__, __selenium__
from webdriver_test_tools.project import templates


# Project creation functions

# Project Root

[docs]def create_setup_file(target_path, context): """Creates setup.py for test project :param target_path: The path to the outer directory where the package directory is contained :param context: Jinja context used to render template """ target_path = os.path.abspath(target_path) template_path = templates.project_root.get_path() create_file_from_template(template_path, target_path, 'setup.py', context)
[docs]def create_readme(target_path, context): """Create README.rst for test project :param target_path: The path to the outer directory where the package directory is contained :param context: Jinja context used to render template """ target_path = os.path.abspath(target_path) template_path = templates.project_root.get_path() create_file_from_template(template_path, target_path, 'README.rst', context)
[docs]def create_gitignore(target_path): """Create .gitignore file at the root of the test project :param target_path: The path to the outer directory where the package directory is contained """ target_path = os.path.abspath(target_path) source_path = templates.project_root.get_path() shutil.copy(os.path.join(source_path, 'gitignore.j2'), os.path.join(target_path, '.gitignore'))
[docs]def create_package_directory(target_path, package_name): """Creates package directory for test project :param target_path: The path to the outer directory where initialize was called :param package_name: The desired name of the package :return: Path to created package directory """ return create_directory(os.path.abspath(target_path), package_name)
# Package Root
[docs]def create_package_root_modules(target_path, context): """Creates __main__.py, __init__.py, and data.py modules for test package :param target_path: The path to the test package directory :param context: Jinja context used to render template """ template_modules = [ '__main__.py', 'data.py', ] target_path = os.path.abspath(target_path) template_path = templates.package_root.get_path() # Create template modules for template_module in template_modules: create_file_from_template(template_path, target_path, template_module, context) # Create __init__.py create_init(target_path)
[docs]def create_test_directories(target_path): """Creates base directories for test writing that are initially empty. As of version 2.2.0, this method only creates the pages/ directory. :param target_path: The path to the test package directory """ target_path = os.path.abspath(target_path) dir_path = create_directory(target_path, 'pages') create_init(dir_path)
[docs]def create_output_directories(target_path, gitignore_files=True): """Creates log/ and screenshot/ directories and their .gitignore files :param target_path: The path to the test package directory :param gitignore_files: (Default = True) Copy template .gitignore files to log/ and screenshot/ directories if True """ target_path = os.path.abspath(target_path) source_path = templates.log.get_path() output_directories = [ 'log', 'screenshot' ] for directory in output_directories: directory_path = create_directory(target_path, directory) if gitignore_files: # .gitignore files are the same between directories shutil.copy(os.path.join(source_path, 'gitignore.j2'), os.path.join(directory_path, '.gitignore'))
[docs]def create_tests_init(target_path, context): """Creates test package tests/ subdirectory and tests/__init__.py :param target_path: The path to the test package directory :param context: Jinja context used to render template """ target_path = create_directory(os.path.abspath(target_path), 'tests') template_path = templates.tests.get_path() create_file_from_template(template_path, target_path, '__init__.py', context)
[docs]def create_config_files(target_path, context): """Creates test package config directory and config files :param target_path: The path to the test package directory :param context: Jinja context used to render template """ target_path = create_directory(os.path.abspath(target_path), 'config') template_path = templates.config.get_path() template_files = [ '__init__.py', 'browser.py', 'browserstack.py', 'projectfiles.py', 'site.py', 'test.py', 'webdriver.py', ] for template_file in template_files: create_file_from_template(template_path, target_path, template_file, context)
# Helper functions
[docs]def create_init(target_path): """Create an empty __init__.py file in the target path :param target_path: The path to the directory that will contain the new __init__.py file """ # "Touch" __init__.py to create an empty file init_path = os.path.join(target_path, '__init__.py') touch(init_path)
[docs]def generate_context(test_package, project_title=None, version_badge=True): """Returns a jinja context to use for rendering templates :param test_package: Name of the python test package :param project_title: (Default = test_package) Human-readable title for the test project. Defaults to the value of test_package if not provided :param version_badge: (Default = True) Include "generated using webdriver_test_tools <version>" badge on README if True :return: Dictionary to use as a context when rendering Jinja templates """ if project_title is None: project_title = test_package context = { 'test_package': test_package, 'test_tools_version': __version__, 'selenium_version': __selenium__, 'project_title': project_title, 'version_badge': version_badge, } return context
[docs]def initialize(target_path, package_name, project_title, gitignore_files=True, readme_file=True): """Initializes new project package This method assumes parameters have been validated. :func:`main() <webdriver_test_tools.cmd.init.main()>` handles input validation before calling this function :param target_path: Path to directory that will contain test package :param package_name: Name of the test package to create (will be validated) :param project_title: Human readable title of the test project. :param gitignore_files: (Default = True) Copy template .gitignore file to project root directory if True :param readme_file: (Default = True) Render template README file to project root directory if True """ outer_path = os.path.abspath(target_path) context = generate_context(package_name, project_title) # Initialize files in the outer directory create_setup_file(outer_path, context) if readme_file: create_readme(outer_path, context) if gitignore_files: create_gitignore(outer_path) package_path = create_package_directory(outer_path, package_name) # Initialize package files create_package_root_modules(package_path, context) create_test_directories(package_path) create_output_directories(package_path, gitignore_files) create_tests_init(package_path, context) create_config_files(package_path, context)