obj_type = 'revision', cooker_name_suffix = 'gitfast', swhid_type = 'rev'
mocker = <pytest_mock.plugin.MockerFixture object at 0x7f1bb92f9a90>
@pytest.mark.parametrize(
"obj_type,cooker_name_suffix,swhid_type",
[("directory", "", "dir"), ("revision", "gitfast", "rev"),],
)
def test_cook_directory(obj_type, cooker_name_suffix, swhid_type, mocker):
storage = object()
mocker.patch("swh.storage.get_storage", return_value=storage)
backend = MagicMock(spec=InMemoryVaultBackend)
backend.fetch.return_value = b"bundle content"
mocker.patch(
"swh.vault.in_memory_backend.InMemoryVaultBackend", return_value=backend
)
cooker = MagicMock(spec=BaseVaultCooker)
cooker_cls = MagicMock(return_value=cooker)
mocker.patch("swh.vault.cookers.get_cooker_cls", return_value=cooker_cls)
runner = click.testing.CliRunner()
with tempfile.NamedTemporaryFile("a", suffix=".yml") as config_fd:
config_fd.write('{"storage": {}}')
config_fd.seek(0)
if cooker_name_suffix:
result = runner.invoke(
vault_cli_group,
[
"cook",
f"swh:1:{swhid_type}:{'0'*40}",
"-",
"-C",
config_fd.name,
"--cooker-type",
cooker_name_suffix,
],
)
else:
result = runner.invoke(
vault_cli_group,
["cook", f"swh:1:{swhid_type}:{'0'*40}", "-", "-C", config_fd.name],
)
if result.exception is not None:
> raise result.exception
.tox/py3/lib/python3.7/site-packages/swh/vault/tests/test_cli.py:92:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.tox/py3/lib/python3.7/site-packages/click/testing.py:329: in invoke
cli.main(args=args or (), prog_name=prog_name, **extra)
.tox/py3/lib/python3.7/site-packages/click/core.py:782: in main
rv = self.invoke(ctx)
.tox/py3/lib/python3.7/site-packages/click/core.py:1259: in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
.tox/py3/lib/python3.7/site-packages/click/core.py:1066: in invoke
return ctx.invoke(self.callback, **ctx.params)
.tox/py3/lib/python3.7/site-packages/click/core.py:610: in invoke
return callback(*args, **kwargs)
.tox/py3/lib/python3.7/site-packages/click/decorators.py:21: in new_func
return f(get_current_context(), *args, **kwargs)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
ctx = <click.core.Context object at 0x7f1bb92f1390>
config_file = '/tmp/tmpc__pkaun.yml'
swhid = CoreSWHID(namespace='swh', scheme_version=1, object_id=b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', object_type=<ObjectType.REVISION: 'rev'>)
outfile = <_io.BytesIO object at 0x7f1bb9cdf728>, cooker_type = 'gitfast'
@vault.command()
@click.option(
"--config-file",
"-C",
default=None,
metavar="CONFIGFILE",
type=click.Path(exists=True, dir_okay=False,),
help="Configuration file.",
)
@click.argument("swhid", type=SwhidParamType())
@click.argument("outfile", type=click.File("wb"))
@click.option(
"--cooker-type",
type=click.Choice(["flat", "gitfast", "git_bare"]),
help="Selects which cooker to use, when there is more than one available "
"for the given object type.",
)
@click.pass_context
def cook(
ctx,
config_file: str,
swhid: CoreSWHID,
outfile: io.RawIOBase,
cooker_type: Optional[str],
):
"""
Runs a vault cooker for a single object (identified by a SWHID),
and outputs it to the given file.
"""
from swh.core import config
from swh.objstorage.factory import get_objstorage
from swh.storage import get_storage
from .cookers import COOKER_TYPES, get_cooker_cls
from .in_memory_backend import InMemoryVaultBackend
conf = config.read(config_file)
supported_object_types = {name.split("_")[0] for name in COOKER_TYPES}
if swhid.object_type.name.lower() not in supported_object_types:
raise click.ClickException(
f"No cooker available for {swhid.object_type.name} objects."
)
cooker_name = swhid.object_type.name.lower()
if cooker_type:
cooker_name = f"{cooker_name}_{cooker_type}"
if cooker_name not in COOKER_TYPES:
raise click.ClickException(
f"{swhid.object_type.name.lower()} objects do not have "
f"a {cooker_type} cooker."
)
else:
if cooker_name not in COOKER_TYPES:
raise click.ClickException(
f"{swhid.object_type.name.lower()} objects need "
f"an explicit --cooker-type."
)
try:
from swh.graph.client import RemoteGraphClient # optional dependency
> graph: Optional[RemoteGraphClient] = RemoteGraphClient(**conf["graph"])
E KeyError: 'graph'
.tox/py3/lib/python3.7/site-packages/swh/vault/cli.py:106: KeyError
TEST RESULT
TEST RESULT
- Run At
- Jun 28 2021, 5:37 PM