diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..0be2fef8 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "chevron"] + path = chevron + url = https://github.com/taylorjacklespriggs/chevron-1.git diff --git a/Makefile b/Makefile index 533b6b69..d6849614 100644 --- a/Makefile +++ b/Makefile @@ -7,6 +7,8 @@ lint: @./lint update: + @git submodule init + @git submodule update @pip install -r requirements-dev.txt @pip install -r requirements.txt @python setup.py clean --all diff --git a/chevron b/chevron new file mode 160000 index 00000000..e8859eb7 --- /dev/null +++ b/chevron @@ -0,0 +1 @@ +Subproject commit e8859eb7e8672a55d36d923c440bd72eda926518 diff --git a/requirements.txt b/requirements.txt index 0f2856fe..2d44c30c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,7 +3,6 @@ Pint>=0.16.0,<0.17.0 PyYAML==5.4.1,<6.0.0 backoff>=1.10.0,<2.0.0 boto3==1.16.34,<2.0.0 -chevron>=0.14.0,<1.0.0 click>=8.0.0 docker>=4.4.0,<5.0.0 ipython>=5.0.0 diff --git a/sigopt/orchestrate/template/service.py b/sigopt/orchestrate/template/service.py index 3ea42e80..9bb27d1e 100644 --- a/sigopt/orchestrate/template/service.py +++ b/sigopt/orchestrate/template/service.py @@ -1,4 +1,4 @@ -import chevron +from sigopt.vendored import chevron from ..services.base import Service @@ -7,9 +7,6 @@ class TemplateService(Service): def _dockerfile_escape(self, s): return s.replace('\\', '\\\\').replace('\n', '\\\n') - def _escape_args(self, args, escape): - return {k: escape(v) for k, v in args.items()} - def render_dockerfile_template_from_file(self, relative_filename, template_args): return self._raw_render_template_from_file(self._dockerfile_escape, relative_filename, template_args) @@ -23,5 +20,6 @@ def _raw_render_template_from_file(self, escape, relative_filename, template_arg template = self.services.resource_service.read('template', relative_filename).decode("utf-8") return chevron.render( template=template, - data=self._escape_args(template_args, escape), + data=template_args, + escape=escape, ) diff --git a/sigopt/vendored/chevron b/sigopt/vendored/chevron new file mode 120000 index 00000000..0763f13a --- /dev/null +++ b/sigopt/vendored/chevron @@ -0,0 +1 @@ +../../chevron/chevron \ No newline at end of file diff --git a/test/orchestrate/template/service_test.py b/test/orchestrate/template/service_test.py index bfdf9f8a..96bce251 100644 --- a/test/orchestrate/template/service_test.py +++ b/test/orchestrate/template/service_test.py @@ -32,7 +32,6 @@ def test_dockerfile_escape_newline(self, template_service): # Ensure that the newline is preceded by a backslash, so Dockerfile doesn't interpret it as a new command assert 'ENV SIGOPT_HOME "\\\nCOPY ."' in rendered - @pytest.mark.skip(reason="chevron doesn't handle quotes gracefully") def test_dockerfile_escape_backslash(self, template_service): rendered = template_service.render_dockerfile_template_from_file('model_packer/Dockerfile.ms', dict( sigopt_home='echo ""\\', @@ -40,7 +39,6 @@ def test_dockerfile_escape_backslash(self, template_service): # Ensure that the trailing backslash is escaped, and not interpreted as an escape sequence for the newline assert 'ENV SIGOPT_HOME "echo ""\\\\"\n' in rendered - @pytest.mark.skip(reason="chevron doesn't handle quotes gracefully") def test_yaml_escape_quotes(self, template_service): rendered = template_service.render_yaml_template_from_file('test.yml.ms', dict( endpoint_url='"', base64_encoded_ca_cert='"',