def build(package, path, pyname, pypath, universal, name, build_dir, clean_first): """Builds a project, producing a source distribution and a wheel. The path to the project is derived in the following order: \b 1. The optional argument, which should be the name of a package that was installed via `hatch install -l` or `pip install -e`. 2. The option --path, which can be a relative or absolute path. 3. The current directory. The path must contain a `setup.py` file. """ if package: path = get_editable_package_location(package) if not path: click.echo('`{}` is not an editable package.'.format(package)) sys.exit(1) elif path: relative_path = os.path.join(os.getcwd(), basepath(path)) if os.path.exists(relative_path): path = relative_path elif not os.path.exists(path): click.echo('Directory `{}` does not exist.'.format(path)) sys.exit(1) else: path = os.getcwd() if pyname: try: settings = load_settings() except FileNotFoundError: click.echo('Unable to locate config file. Try `hatch config --restore`.') sys.exit(1) pypath = settings.get('pypaths', {}).get(pyname, None) if not pypath: click.echo('Python path named `{}` does not exist or is invalid.'.format(pyname)) sys.exit(1) if clean_first: clean_package(path, editable=package) sys.exit(build_package(path, universal, name, build_dir, pypath))
def clean(package, path, compiled_only, verbose): """Removes a project's build artifacts. The path to the project is derived in the following order: \b 1. The optional argument, which should be the name of a package that was installed via `hatch install -l` or `pip install -e`. 2. The option --path, which can be a relative or absolute path. 3. The current directory. All `*.pyc`/`*.pyd` files and `__pycache__` directories will be removed. Additionally, the following patterns will be removed from the root of the path: `.cache`, `.coverage`, `.eggs`, `.tox`, `build`, `dist`, and `*.egg-info`. If the path was derived from the optional package argument, the pattern `*.egg-info` will not be applied so as to not break that installation. """ if package: path = get_editable_package_location(package) if not path: click.echo('`{}` is not an editable package.'.format(package)) sys.exit(1) elif path: relative_path = os.path.join(os.getcwd(), basepath(path)) if os.path.exists(relative_path): path = relative_path elif not os.path.exists(path): click.echo('Directory `{}` does not exist.'.format(path)) sys.exit(1) else: path = os.getcwd() if compiled_only: removed_paths = remove_compiled_scripts(path) else: removed_paths = clean_package(path, editable=package) if verbose: if removed_paths: click.echo('Removed paths:') for p in removed_paths: click.echo(p)
def build(package, local, path, pyname, pypath, universal, name, build_dir, clean_first, verbose): """Builds a project, producing a source distribution and a wheel. The path to the project is derived in the following order: \b 1. The optional argument, which should be the name of a package that was installed via `hatch install -l` or `pip install -e`. 2. The --local flag. 3. The option --path, which can be a relative or absolute path. 4. The current directory. The path must contain a `setup.py` file. """ if package: echo_waiting('Locating package...') path = get_editable_package_location(package) if not path: echo_failure('`{}` is not an editable package.'.format(package)) sys.exit(1) elif local: echo_waiting('Locating package...') name, path = get_editable_package_location() if not name: if path is None: echo_failure('There are no local packages available.') sys.exit(1) else: echo_failure( 'There are multiple local packages available. Select ' 'one with the optional argument.') sys.exit(1) echo_info('Package `{}` has been selected.'.format(name)) elif path: possible_path = resolve_path(path) if not possible_path: echo_failure('Directory `{}` does not exist.'.format(path)) sys.exit(1) path = possible_path else: path = os.getcwd() if build_dir: build_dir = os.path.abspath(build_dir) else: build_dir = os.path.join(path, 'dist') if pyname: try: settings = load_settings() except FileNotFoundError: echo_failure( 'Unable to locate config file. Try `hatch config --restore`.') sys.exit(1) pypath = settings.get('pypaths', {}).get(pyname, None) if not pypath: echo_failure( 'Python path named `{}` does not exist or is invalid.'.format( pyname)) sys.exit(1) if clean_first: echo_waiting('Removing build artifacts...') clean_package(path, editable=package or local, detect_project=True) return_code = build_package(path, build_dir, universal, name, pypath, verbose) if os.path.isdir(build_dir): echo_success('Files found in `{}`:\n'.format(build_dir)) for file in sorted(os.listdir(build_dir)): if os.path.isfile(os.path.join(build_dir, file)): echo_info(file) sys.exit(return_code)
def clean(package, local, path, compiled_only, no_detect, verbose): """Removes a project's build artifacts. The path to the project is derived in the following order: \b 1. The optional argument, which should be the name of a package that was installed via `hatch install -l` or `pip install -e`. 2. The --local flag. 3. The option --path, which can be a relative or absolute path. 4. The current directory. All `*.pyc`/`*.pyd`/`*.pyo` files and `__pycache__` directories will be removed. Additionally, the following patterns will be removed from the root of the path: `.cache`, `.coverage`, `.eggs`, `.tox`, `build`, `dist`, and `*.egg-info`. If the path was derived from the optional package argument, the pattern `*.egg-info` will not be applied so as to not break that installation. """ if package: echo_waiting('Locating package...') path = get_editable_package_location(package) if not path: echo_failure('`{}` is not an editable package.'.format(package)) sys.exit(1) elif local: echo_waiting('Locating package...') name, path = get_editable_package_location() if not name: if path is None: echo_failure('There are no local packages available.') sys.exit(1) else: echo_failure( 'There are multiple local packages available. Select ' 'one with the optional argument.' ) sys.exit(1) echo_info('Package `{}` has been selected.'.format(name)) elif path: possible_path = resolve_path(path) if not possible_path: echo_failure('Directory `{}` does not exist.'.format(path)) sys.exit(1) path = possible_path else: path = os.getcwd() if compiled_only: removed_paths = remove_compiled_scripts(path, detect_project=not no_detect) else: removed_paths = clean_package(path, editable=package or local, detect_project=not no_detect) if verbose: if removed_paths: echo_success('Removed paths:') for p in removed_paths: echo_info(p) if removed_paths: echo_success('Cleaned!') else: echo_success('Already clean!')