Skip to content

Commit

Permalink
Implement bash translator (#674)
Browse files Browse the repository at this point in the history
* Implement bash translator

* tests for BashTranslator
  • Loading branch information
kdm9 authored Aug 14, 2022
1 parent 77ba9c4 commit 1323836
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 0 deletions.
46 changes: 46 additions & 0 deletions papermill/tests/test_translators.py
Original file line number Diff line number Diff line change
Expand Up @@ -601,3 +601,49 @@ class MyNewTranslator(translators.Translator):

with pytest.raises(NotImplementedError):
MyNewTranslator.comment("foo")


# Bash/sh section
@pytest.mark.parametrize(
"test_input,expected",
[
("foo", "foo"),
("foo space", "'foo space'"),
("foo's apostrophe", "'foo'\"'\"'s apostrophe'"),
("shell ( is ) <dumb>", "'shell ( is ) <dumb>'"),
(12345, '12345'),
(-54321, '-54321'),
(1.2345, '1.2345'),
(-5432.1, '-5432.1'),
(True, 'true'),
(False, 'false'),
(None, ''),
],
)
def test_translate_type_sh(test_input, expected):
assert translators.BashTranslator.translate(test_input) == expected


@pytest.mark.parametrize(
"test_input,expected", [("", '#'), ("foo", '# foo'), ("['best effort']", "# ['best effort']")]
)
def test_translate_comment_sh(test_input, expected):
assert translators.BashTranslator.comment(test_input) == expected


@pytest.mark.parametrize(
"parameters,expected",
[
({"foo": "bar"}, '# Parameters\nfoo=bar\n'),
({"foo": "shell ( is ) <dumb>"}, "# Parameters\nfoo='shell ( is ) <dumb>'\n"),
({"foo": True}, '# Parameters\nfoo=true\n'),
({"foo": 5}, '# Parameters\nfoo=5\n'),
({"foo": 1.1}, '# Parameters\nfoo=1.1\n'),
(
OrderedDict([['foo', 'bar'], ['baz', '$dumb(shell)']]),
"# Parameters\nfoo=bar\nbaz='$dumb(shell)'\n",
),
],
)
def test_translate_codify_sh(parameters, expected):
assert translators.BashTranslator.codify(parameters) == expected
29 changes: 29 additions & 0 deletions papermill/translators.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import logging
import math
import re
import shlex
import sys

from .exceptions import PapermillException
Expand Down Expand Up @@ -541,6 +542,33 @@ def assign(cls, name, str_val):
return '${} = {}'.format(name, str_val)


class BashTranslator(Translator):
@classmethod
def translate_none(cls, val):
return ''

@classmethod
def translate_bool(cls, val):
return 'true' if val else 'false'

@classmethod
def translate_escaped_str(cls, str_val):
return shlex.quote(str(str_val))

@classmethod
def translate_list(cls, val):
escaped = ' '.join([cls.translate(v) for v in val])
return '({})'.format(escaped)

@classmethod
def comment(cls, cmt_str):
return '# {}'.format(cmt_str).strip()

@classmethod
def assign(cls, name, str_val):
return '{}={}'.format(name, str_val)


# Instantiate a PapermillIO instance and register Handlers.
papermill_translators = PapermillTranslators()
papermill_translators.register("python", PythonTranslator)
Expand All @@ -554,6 +582,7 @@ def assign(cls, name, str_val):
papermill_translators.register("pysparkkernel", PythonTranslator)
papermill_translators.register("sparkkernel", ScalaTranslator)
papermill_translators.register("sparkrkernel", RTranslator)
papermill_translators.register("bash", BashTranslator)


def translate_parameters(kernel_name, language, parameters, comment='Parameters'):
Expand Down

0 comments on commit 1323836

Please sign in to comment.