Skip to content

Commit e22adbd

Browse files
author
Pinja Pessi
committed
Fix backend env loading order
* env loading moved to cli * command line args are added last
1 parent 06d9964 commit e22adbd

2 files changed

Lines changed: 30 additions & 21 deletions

File tree

apluslms_roman/builder.py

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from os import environ, getuid, getegid, mkdir
1+
from os import getuid, getegid, mkdir
22
from os.path import isdir
33
from shutil import rmtree
44

@@ -62,17 +62,9 @@ def __init__(self, backend):
6262

6363

6464
class Engine:
65-
def __init__(self, backend_class=None, settings=None):
66-
backend_name = None
65+
def __init__(self, backend_class=None, env=None):
6766
if backend_class is None:
68-
if settings and 'backend' in settings:
69-
backend_class = settings['backend']
70-
if 'backends' in settings and backend_class in settings['backends']:
71-
backend_name = backend_class
72-
if 'type' in settings['backends'][backend_name]:
73-
backend_class = settings['backends'][backend_name]['type']
74-
else:
75-
from .backends.docker import DockerBackend as backend_class
67+
from .backends.docker import DockerBackend as backend_class
7668
if isinstance(backend_class, str):
7769
if '.' not in backend_class:
7870
backend_class = BACKENDS.get(backend_class, backend_class)
@@ -82,14 +74,6 @@ def __init__(self, backend_class=None, settings=None):
8274
raise BackendError(backend_class)
8375
self._backend_class = backend_class
8476

85-
name = getattr(backend_class, 'name', None) or backend_class.__name__
86-
env_prefix = name.upper() + '_'
87-
env = {k: v for k, v in environ.items() if k.startswith(env_prefix)}
88-
if backend_name is not None:
89-
env.update({env_prefix + k.replace('-', '_').upper(): v
90-
for k, v in settings['backends'][backend_name].items()
91-
if k != 'type'})
92-
9377
self._environment = Environment(getuid(), getegid(), env)
9478

9579
@cached_property

apluslms_roman/cli.py

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from functools import partial
55
from glob import glob
66
from itertools import chain
7-
from os import chdir, getcwd
7+
from os import chdir, environ, getcwd
88
from os.path import abspath, expanduser, expandvars, join as path_join
99
from sys import exit as _exit, stderr, stdout
1010

@@ -364,8 +364,33 @@ def main(*, args=None):
364364
# action utils
365365

366366
def get_engine(context):
367+
settings = context.settings
368+
backend_class = backend_name = None
369+
if 'backend' in settings:
370+
backend_class = settings['backend']
371+
if 'backends' in settings and backend_class in settings['backends']:
372+
backend_name = backend_class
373+
if 'type' in settings['backends'][backend_name]:
374+
backend_class = settings['backends'][backend_name]['type']
375+
if not backend_class:
376+
backend_class = 'docker'
377+
378+
env_prefix = backend_class.upper() + '_'
379+
env = {}
380+
# config
381+
if backend_name is not None:
382+
env.update({env_prefix + k.replace('-', '_').upper(): v
383+
for k, v in settings['backends'][backend_name].items()
384+
if k != 'type'})
385+
# environment
386+
env.update({k: v for k, v in environ.items() if k.startswith(env_prefix)})
387+
# command line
388+
if backend_class == 'docker' and 'docker' in settings:
389+
env.update({env_prefix + k.replace('-', '_').upper(): v
390+
for k, v in settings['docker'].items()})
391+
367392
try:
368-
return Engine(settings=context.settings)
393+
return Engine(backend_class, env)
369394
except BackendError as err:
370395
exit(1, _("ERROR: Unable to find backend '{}'.").format(err.backend))
371396

0 commit comments

Comments
 (0)