1"""This is a very stupid backend for testing purposes.
2
3Don't use this for any real code.
4"""
5
6from glob import glob
7from os.path import join as pjoin
8import shutil
9import tarfile
10from zipfile import ZipFile
11
12
13def get_requires_for_build_wheel(config_settings):
14    return ['wheelwright']
15
16
17def get_requires_for_build_editable(config_settings):
18    return ['wheelwright', 'editables']
19
20
21def prepare_metadata_for_build_wheel(metadata_directory, config_settings):
22    for distinfo in glob('*.dist-info'):
23        shutil.copytree(distinfo, pjoin(metadata_directory, distinfo))
24
25
26prepare_metadata_for_build_editable = prepare_metadata_for_build_wheel
27
28
29def prepare_build_wheel_files(build_directory, config_settings):
30    shutil.copy('pyproject.toml', build_directory)
31    for pyfile in glob('*.py'):
32        shutil.copy(pyfile, build_directory)
33    for distinfo in glob('*.dist-info'):
34        shutil.copytree(distinfo, pjoin(build_directory, distinfo))
35
36
37def build_wheel(wheel_directory, config_settings, metadata_directory=None):
38    whl_file = 'pkg1-0.5-py2.py3-none-any.whl'
39    with ZipFile(pjoin(wheel_directory, whl_file), 'w') as zf:
40        for pyfile in glob('*.py'):
41            zf.write(pyfile)
42        for metadata in glob('*.dist-info/*'):
43            zf.write(metadata)
44    return whl_file
45
46
47build_editable = build_wheel
48
49
50def get_requires_for_build_sdist(config_settings):
51    return ['frog']
52
53
54class UnsupportedOperation(Exception):
55    pass
56
57
58def build_sdist(sdist_directory, config_settings):
59    if config_settings.get('test_unsupported', False):
60        raise UnsupportedOperation
61
62    target = 'pkg1-0.5.tar.gz'
63    with tarfile.open(pjoin(sdist_directory, target), 'w:gz',
64                      format=tarfile.PAX_FORMAT) as tf:
65        def _add(relpath):
66            tf.add(relpath, arcname='pkg1-0.5/' + relpath)
67
68        _add('pyproject.toml')
69        for pyfile in glob('*.py'):
70            _add(pyfile)
71
72    return target
73