Improved YAML configuration parsing (#288)

This commit is contained in:
Chris Caron 2020-09-03 13:25:01 -04:00 committed by GitHub
parent 8cf638ca9b
commit b1373bf428
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 44 additions and 2 deletions

View File

@ -836,6 +836,17 @@ class ConfigBase(URLBase):
# add our results to our global set
results.append(r)
elif isinstance(tokens, dict):
# Copy ourselves a template of our parsed URL as a base to
# work with
r = _results.copy()
# add our result set
r.update(tokens)
# add our results to our global set
results.append(r)
else:
# add our results to our global set
results.append(_results)

View File

@ -28,6 +28,7 @@ import pytest
from apprise.AppriseAsset import AppriseAsset
from apprise.config.ConfigBase import ConfigBase
from apprise import ConfigFormat
from apprise import plugins
import yaml
# Disable logging for a cleaner testing output
@ -564,10 +565,15 @@ urls:
include: http://localhost:8080/notify/apprise
urls:
# The following generates 1 service
- json://localhost:
tag: my-custom-tag, my-other-tag
# The following also generates 1 service
- json://localhost:
- tag: my-custom-tag, my-other-tag
# How to stack multiple entries:
# How to stack multiple entries (this generates 2):
- mailto://user:123abc@yahoo.ca:
- to: test@examle.com
- to: test2@examle.com
@ -593,7 +599,7 @@ urls:
# We expect to parse 4 entries from the above because the tgram:// entry
# would have failed to be loaded
assert isinstance(result, list)
assert len(result) == 5
assert len(result) == 6
assert len(result[0].tags) == 2
# Our single line included
@ -889,6 +895,31 @@ include:
assert 'http://localhost/apprise/cfg03' in config
def test_yaml_vs_text_tagging():
"""
API: ConfigBase YAML vs TEXT tagging
"""
yaml_result, _ = ConfigBase.config_parse_yaml("""
urls:
- mailtos://lead2gold:yesqbrulvaelyxve@gmail.com:
tag: mytag
""")
assert yaml_result
text_result, _ = ConfigBase.config_parse_text("""
mytag=mailtos://lead2gold:yesqbrulvaelyxve@gmail.com
""")
assert text_result
# Now we compare our results and verify they are the same
assert len(yaml_result) == len(text_result)
assert isinstance(yaml_result[0], plugins.NotifyEmail)
assert isinstance(text_result[0], plugins.NotifyEmail)
assert 'mytag' in text_result[0]
assert 'mytag' in yaml_result[0]
# This test fails on CentOS 8.x so it was moved into it's own function
# so it could be bypassed. The ability to use lists in YAML files didn't
# appear to happen until later on; it's certainly not available in v3.12