コード例 #1
0
def _json_dump_recursion_helper(metadata):
    """See _get_json_dump docstring."""
    if isinstance(metadata, list):
        return [_json_dump_recursion_helper(item) for item in metadata]

    if not isinstance(metadata, dict):
        return resource_util.convert_to_json_parsable_type(metadata)

    # Sort by key to make sure dictionary always prints in correct order.
    formatted_dict = collections.OrderedDict(sorted(metadata.items()))
    for key, value in formatted_dict.items():
        if isinstance(value, dict):
            # Recursively handle dictionaries.
            formatted_dict[key] = _json_dump_recursion_helper(value)
        elif isinstance(value, list):
            # Recursively handled lists, which may contain more dicts, like ACLs.
            formatted_list = [
                _json_dump_recursion_helper(item) for item in value
            ]
            if formatted_list:
                # Ignore empty lists.
                formatted_dict[key] = formatted_list
        elif value or resource_util.should_preserve_falsy_metadata_value(
                value):
            formatted_dict[key] = resource_util.convert_to_json_parsable_type(
                value)

    return formatted_dict
コード例 #2
0
def _json_dump_recursion_helper(metadata):
    """See _get_json_dump docstring."""
    if isinstance(metadata, list):
        return [_json_dump_recursion_helper(item) for item in metadata]

    if not isinstance(metadata, messages.Message):
        # Recursive function down the stack may have been processing a list.
        return resource_util.convert_to_json_parsable_type(metadata)

    # Construct dictionary from Apitools object.
    formatted_dict = collections.OrderedDict()
    # Similar to Apitools messages.py Message __repr__ implementation.
    for field in sorted(metadata.all_fields(), key=lambda f: f.name):
        value = metadata.get_assigned_value(field.name)
        if isinstance(value, messages.Message):
            # Recursively handled nested Apitools objects.
            formatted_dict[field.name] = _json_dump_recursion_helper(value)
        elif isinstance(value, list):
            # Recursively handled lists, which may contain Apitools objects.
            # Example: ACL list.
            formatted_list = [
                _json_dump_recursion_helper(item) for item in value
            ]
            if formatted_list:
                # Ignore empty lists.
                formatted_dict[field.name] = formatted_list
        elif value or resource_util.should_preserve_falsy_metadata_value(
                value):
            # 0, 0.0, and False are acceptables Falsy-types. Lists handled later.
            formatted_dict[field.name] = (
                resource_util.convert_to_json_parsable_type(value))
    return formatted_dict
コード例 #3
0
 def test_preserves_false_metadata(self):
     self.assertTrue(
         resource_util.should_preserve_falsy_metadata_value(False))
コード例 #4
0
 def test_does_not_preserve_unexpected_falsy_metadata(self):
     self.assertFalse(resource_util.should_preserve_falsy_metadata_value(
         []))
コード例 #5
0
 def test_preserves_zero_float_metadata(self):
     self.assertTrue(
         resource_util.should_preserve_falsy_metadata_value(0.0))