Skip to content

Netcdf

NetCDFExtract

Bases: ExtractionMethod

Description: Opens files with xarray allowing extraction of variable, global, cf, and/or rio attributes

Method name: netcdf

Example configuration

.. code-block:: yaml

- method: netcdf
  inputs:
    input_term: /path/to/file.nc
    global_attributes:
      - key: start_datetime
      - key: end_datetime
        output_key: end

noqa: W605

Source code in extraction_methods/plugins/netcdf.py
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
class NetCDFExtract(ExtractionMethod):
    """
    Description: Opens files with xarray allowing extraction of variable, global, cf, and/or rio attributes

    **Method name:** ``netcdf``

    Example configuration:
        .. code-block:: yaml

            - method: netcdf
              inputs:
                input_term: /path/to/file.nc
                global_attributes:
                  - key: start_datetime
                  - key: end_datetime
                    output_key: end

    # noqa: W605
    """

    input_class = NetCDFInput

    @update_input
    def run(self, body: dict[str, Any]) -> dict[str, Any]:

        dataset = xarray.open_dataset(self.input.input_term, decode_coords="all")

        if self.input.variable_attributes:
            variable = dataset[self.input.variable_id]
            variable_attrs = variable.attrs

            for variable_attribute in self.input.variable_attributes:
                body[variable_attribute.output_key] = variable_attrs.get(
                    variable_attribute.key, None
                )

        if self.input.global_attributes:
            global_attrs = dataset.attrs

            for global_attribute in self.input.global_attributes:
                body[global_attribute.output_key] = global_attrs.get(
                    global_attribute.key, None
                )

        if self.input.cf_attributes:
            cf_attrs = dataset.cf

            for cf_attribute in self.input.cf_attributes:
                try:
                    body[cf_attribute.output_key] = cf_attrs[cf_attribute.key]

                except KeyError:
                    body[cf_attribute.output_key] = None

        if self.input.rio_attributes:
            rio_attrs = dataset.rio

            for rio_attribute in self.input.rio_attributes:
                body[rio_attribute.output_key] = getattr(
                    rio_attrs, rio_attribute.key, None
                )

        return body

NetCDFInput

Bases: Input

Model for NetCDF Input.

Parameters:

Name Type Description Default
input_term str

term for method to run on.

'$uri'
variable_id str

lambda function to be run.

'$uri'
variable_attributes list[KeyOutputKey]

list of variable attributes to extract.

[]
global_attributes list[KeyOutputKey]

list of global attributes to extract.

[]
cf_attributes list[KeyOutputKey]

list of cf attributes to extract.

[]
rio_attributes list[KeyOutputKey]

list of rio attributes to extract.

[]
Source code in extraction_methods/plugins/netcdf.py
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
class NetCDFInput(Input):
    """
    Model for NetCDF Input.
    """

    input_term: str = Field(
        default="$uri",
        description="term for method to run on.",
    )
    variable_id: str = Field(
        default="$uri",
        description="lambda function to be run.",
    )
    variable_attributes: list[KeyOutputKey] = Field(
        default=[],
        description="list of variable attributes to extract.",
    )
    global_attributes: list[KeyOutputKey] = Field(
        default=[],
        description="list of global attributes to extract.",
    )
    cf_attributes: list[KeyOutputKey] = Field(
        default=[],
        description="list of cf attributes to extract.",
    )
    rio_attributes: list[KeyOutputKey] = Field(
        default=[],
        description="list of rio attributes to extract.",
    )