Refactored setting of env vars passed via the env flag.

This commit is contained in:
cwandrews
2017-10-08 19:50:15 -04:00
parent 21a38686f6
commit 2de72b52bd

View File

@ -1,3 +1,4 @@
import codecs
import os import os
import bonobo import bonobo
@ -41,7 +42,7 @@ def _install_requirements(requirements):
def read(filename, module, install=False, quiet=False, verbose=False, env=None): def read(filename, module, install=False, quiet=False, verbose=False, env=None):
import re
import runpy import runpy
from bonobo import Graph, settings from bonobo import Graph, settings
@ -52,10 +53,21 @@ def read(filename, module, install=False, quiet=False, verbose=False, env=None):
settings.DEBUG.set(True) settings.DEBUG.set(True)
if env: if env:
quote_killer = re.compile('["\']') __escape_decoder = codecs.getdecoder('unicode_escape')
def decode_escaped(escaped):
return __escape_decoder(escaped)[0]
for e in env: for e in env:
var_name, var_value = e.split('=') ename, evalue = e.split('=', 1)
os.environ[var_name] = quote_killer.sub('', var_value)
if len(evalue) > 0:
quoted = evalue[0] == evalue[len(evalue) - 1] in ['"', "'"]
if quoted:
evalue = decode_escaped(evalue[1:-1])
os.environ[ename] = evalue
if filename: if filename:
if os.path.isdir(filename): if os.path.isdir(filename):