Source code for geometamaker.utils

from osgeo import gdal
import yaml


def _represent_str(dumper, data):
    scalar = yaml.representer.SafeRepresenter.represent_str(dumper, data)
    if len(data.splitlines()) > 1:
        scalar.style = '|'  # literal style, newline chars will be new lines
    return scalar


class _SafeDumper(yaml.SafeDumper):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # Patch the default string representer to use a literal block
        # style when the data contain newline characters
        self.add_representer(str, _represent_str)

    # https://stackoverflow.com/questions/13518819/avoid-references-in-pyyaml
    def ignore_aliases(self, data):
        """Keep the yaml human-readable by avoiding anchors and aliases."""
        return True


[docs] def yaml_dump(data): return yaml.dump( data, allow_unicode=True, sort_keys=False, Dumper=_SafeDumper)
# GDALGetRATFieldUsageName() and GDALGetRATFieldTypeName() were only added to # GDAL in 3.12, so we can maintain our own lookups. _GFU_INT_TO_STR = { gdal.GFU_Generic: 'Generic', gdal.GFU_PixelCount: 'PixelCount', gdal.GFU_Name: 'Name', gdal.GFU_Min: 'Min', gdal.GFU_Max: 'Max', gdal.GFU_MinMax: 'MinMax', gdal.GFU_Red: 'Red', gdal.GFU_Green: 'Green', gdal.GFU_Blue: 'Blue', gdal.GFU_Alpha: 'Alpha', gdal.GFU_RedMin: 'RedMin', gdal.GFU_GreenMin: 'GreenMin', gdal.GFU_BlueMin: 'BlueMin', gdal.GFU_AlphaMin: 'AlphaMin', gdal.GFU_RedMax: 'RedMax', gdal.GFU_GreenMax: 'GreenMax', gdal.GFU_BlueMax: 'BlueMax', gdal.GFU_AlphaMax: 'AlphaMax', } _GFT_INT_TO_STR = { gdal.GFT_Integer: 'Integer', gdal.GFT_Real: 'Real', gdal.GFT_String: 'String', 3: 'Boolean', # gdal.GFT_Boolean (not available until GDAL 3.12) 4: 'DateTime', # gdal.GFT_DateTime 5: 'WKBGeometry', # gdal.GFT_WKBGeometry } _GRTT_INT_TO_STR = { gdal.GRTT_THEMATIC: 'Thematic', gdal.GRTT_ATHEMATIC: 'Athematic' }