taskcluster/translations_taskgraph/transforms/marian_args.py (26 lines of code) (raw):
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
# This is a simple transform sequence that takes the `marian_args` referenced
# in a job, turns its key/value pairs into standard unix command line
# options, and makes them available to `task-context` substitutions as
# `marian_args`. For example:
# If the `marian_args` input resolves to: `{"beam-size": "12", "mini-batch-words": "2000"}`
# Then `marian_args` in `task-context` will be: `--beam-size 12 --mini-batch-words 2000`
from taskgraph.transforms.base import TransformSequence
from taskgraph.util.schema import Schema
from voluptuous import ALLOW_EXTRA, Required
from translations_taskgraph.util.dict_helpers import deep_get
SCHEMA = Schema(
{
Required("marian-args"): {
Required("from-parameters"): str,
},
},
extra=ALLOW_EXTRA,
)
transforms = TransformSequence()
transforms.add_validate(SCHEMA)
@transforms.add
def render_command(config, jobs):
for job in jobs:
marian_args = ""
for name, value in deep_get(
config.params, job.pop("marian-args")["from-parameters"]
).items():
marian_args = marian_args + f" --{name} {value}"
if "from-object" not in job["task-context"]:
job["task-context"]["from-object"] = {}
job["task-context"]["from-object"]["marian_args"] = marian_args
yield job