Skip to content

Commit bf46679

Browse files
d-w-moorealanking
authored andcommitted
[#584] load settings from environment even without use of config file
1 parent 7af55af commit bf46679

3 files changed

Lines changed: 32 additions & 5 deletions

File tree

irods/client_configuration/__init__.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -327,21 +327,30 @@ def _existing_config(path):
327327
_load_config_line(root, match.group('key'), match.group('value'))
328328

329329
if use_environment_variables:
330-
for key, variable in _calculate_overriding_environment_variables().items():
331-
value = os.environ.get(variable)
332-
if value is not None:
333-
_load_config_line(root, key, value)
330+
_load_settings_from_environment(root)
331+
334332
finally:
335333
if _file:
336334
_file.close()
337335

336+
338337
default_config_dict = {}
339338

339+
def _load_settings_from_environment(root = None):
340+
if root is None:
341+
root = sys.modules[__name__]
342+
for key, variable in _calculate_overriding_environment_variables().items():
343+
value = os.environ.get(variable)
344+
if value is not None:
345+
_load_config_line(root, key, value)
346+
340347
def preserve_defaults():
341348
default_config_dict.update((k,copy.deepcopy(v)) for k,v in globals().items() if isinstance(v,iRODSConfiguration))
342349

343350
def autoload(_file_to_load):
344-
if _file_to_load is not None:
351+
if _file_to_load is None:
352+
_load_settings_from_environment()
353+
else:
345354
load(file = _file_to_load, use_environment_variables = True)
346355

347356
def new_default_config():

irods/test/data_obj_test.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2086,6 +2086,20 @@ def test_settings_load_and_save_471(self):
20862086
config.load(**load_logging_options)
20872087
self.assertTrue(config.data_objects.auto_close, RANDOM_VALUE - i - 1)
20882088

2089+
@unittest.skipIf(os.environ.get("PYTHON_IRODSCLIENT_CONFIGURATION_PATH",None) is not None,"test will not run if configuration file set.")
2090+
def test_setting_xml_parser_choice_by_environment_only__issue_584(self):
2091+
program = os.path.join(test_modules.__path__[0], 'test_xml_parser.py')
2092+
xml_parser_control_var = 'PYTHON_IRODSCLIENT_CONFIG__CONNECTIONS__XML_PARSER_DEFAULT'
2093+
with helpers.environment_variable_backed_up(xml_parser_control_var):
2094+
for alternate_setting in ('QUASI_XML', 'STANDARD_XML', 'SECURE_XML'):
2095+
# Set xml parser for the process to be spawned.
2096+
os.environ[xml_parser_control_var]="'{alternate_setting}'".format(**locals())
2097+
# Run a simple script that imports PRC and prints which XML parser is the active default.
2098+
p = subprocess.Popen([sys.executable,program], stdout=subprocess.PIPE)
2099+
parser_id = p.communicate()[0].decode().strip()
2100+
# Assert the printed result is as expected.
2101+
self.assertEqual(parser_id, alternate_setting)
2102+
20892103
def test_append_mode_will_append_to_data_object__issue_495(self):
20902104
append_string = b'to_be_written'.lower()
20912105
reverse_bytes = lambda s: ''.join(reversed(s)) if six.PY2 else bytes(reversed(s))
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import irods
2+
# Used in test of:
3+
# irods.test.data_obj_test.TestDataObjOps.test_setting_xml_parser_choice_by_environment_only__issue_584
4+
print(irods.client_configuration.connections.xml_parser_default)

0 commit comments

Comments
 (0)