diff --git a/src/caoscrawler/converters/converters.py b/src/caoscrawler/converters/converters.py index a8b7e918d234f41a9e3d967048dab8ad17596416..2f0e6b737bee601a817b4f91f9c7de557021e679 100644 --- a/src/caoscrawler/converters/converters.py +++ b/src/caoscrawler/converters/converters.py @@ -188,6 +188,8 @@ out: tuple # @review Florian Spreckelsen 2022-05-13 propunit = None + propvalue = None + collection_mode = None if isinstance(value, dict): if "value" not in value: # TODO: how do we handle this case? Just ignore? @@ -199,40 +201,40 @@ out: tuple # can be "single", "list" or "multiproperty" if "collection_mode" in value: collection_mode = value["collection_mode"] - else: - collection_mode = "single" - elif isinstance(value, str): - propvalue = value - collection_mode = "single" - if propvalue.startswith("+"): - collection_mode = "list" - propvalue = propvalue[1:] - elif propvalue.startswith("*"): - collection_mode = "multiproperty" - propvalue = propvalue[1:] - elif isinstance(value, list): - # TODO: (for review) - # This is a bit dirty right now and needed for - # being able to directly set list values. Semantics is, however, a bit - # different from the two cases above. - collection_mode = "single" - - # variables replacement: - propvalue = list() - for element in value: - # Do the element-wise replacement only, when its type is string: - if isinstance(element, str): - propvalue.append(replace_variables(element, values)) - else: - propvalue.append(element) - - return (propvalue, propunit, collection_mode) else: - # value is another simple type - collection_mode = "single" propvalue = value - # Return it immediately, otherwise variable substitution would be done and fail: - return (propvalue, propunit, collection_mode) + if collection_mode is None: + if isinstance(propvalue, str): + # Determine collection mode from string value + collection_mode = "single" + if propvalue.startswith("+"): + collection_mode = "list" + propvalue = propvalue[1:] + elif propvalue.startswith("*"): + collection_mode = "multiproperty" + propvalue = propvalue[1:] + elif isinstance(propvalue, list): + # TODO: (for review) + # This is a bit dirty right now and needed for + # being able to directly set list values. Semantics is, however, a bit + # different from the two cases above. + collection_mode = "single" + + # variables replacement: + returnvalue = list() + for element in propvalue: + # Do the element-wise replacement only, when its type is string: + if isinstance(element, str): + returnvalue.append(replace_variables(element, values)) + else: + returnvalue.append(element) + + return (returnvalue, propunit, collection_mode) + else: + # value is another simple type + collection_mode = "single" + # Return it immediately, otherwise variable substitution would be done and fail: + return (propvalue, propunit, collection_mode) propvalue = replace_variables(propvalue, values) if propunit: