11"""Builder pattern implementation for MDIO v1 schema models."""
22
3+ from collections .abc import Mapping
34from datetime import UTC
45from datetime import datetime
56from enum import Enum
@@ -53,7 +54,7 @@ class MDIODatasetBuilder:
5354
5455 def __init__ (self , name : str , attributes : dict [str , Any ] | None = None ):
5556 self .name = name
56- self .api_version = "1.0.0" # TODO: Pull from package metadata
57+ self .api_version = "1.0.0" # TODO(BrianMichell, #0) : Pull from package metadata
5758 self .created_on = datetime .now (UTC )
5859 self .attributes = attributes
5960 self ._dimensions : list [NamedDimension ] = []
@@ -62,7 +63,7 @@ def __init__(self, name: str, attributes: dict[str, Any] | None = None):
6263 self ._state = _BuilderState .INITIAL
6364 self ._unnamed_variable_counter = 0
6465
65- def add_dimension (
66+ def add_dimension ( # noqa: PLR0913
6667 self ,
6768 name : str ,
6869 size : int ,
@@ -101,7 +102,7 @@ def add_dimension(
101102 self ._state = _BuilderState .HAS_DIMENSIONS
102103 return self
103104
104- def add_coordinate (
105+ def add_coordinate ( # noqa: PLR0913
105106 self ,
106107 name : str = "" ,
107108 * ,
@@ -112,7 +113,8 @@ def add_coordinate(
112113 ) -> "MDIODatasetBuilder" :
113114 """Add a coordinate after adding at least one dimension."""
114115 if self ._state == _BuilderState .INITIAL :
115- raise ValueError ("Must add at least one dimension before adding coordinates" )
116+ msg = "Must add at least one dimension before adding coordinates"
117+ raise ValueError (msg )
116118
117119 if name == "" :
118120 name = f"coord_{ len (self ._coordinates )} "
@@ -127,7 +129,8 @@ def add_coordinate(
127129 if isinstance (dim , str ):
128130 dim_obj = next ((d for d in self ._dimensions if d .name == dim ), None )
129131 if dim_obj is None :
130- raise ValueError (f"Dimension { dim !r} not found" )
132+ msg = f"Dimension { dim !r} not found"
133+ raise ValueError (msg )
131134 dim_objects .append (dim_obj )
132135 else :
133136 dim_objects .append (dim )
@@ -144,7 +147,7 @@ def add_coordinate(
144147 self ._state = _BuilderState .HAS_COORDINATES
145148 return self
146149
147- def add_variable (
150+ def add_variable ( # noqa: PLR0913
148151 self ,
149152 name : str = "" ,
150153 * ,
@@ -157,7 +160,8 @@ def add_variable(
157160 ) -> "MDIODatasetBuilder" :
158161 """Add a variable after adding at least one dimension."""
159162 if self ._state == _BuilderState .INITIAL :
160- raise ValueError ("Must add at least one dimension before adding variables" )
163+ msg = "Must add at least one dimension before adding variables"
164+ raise ValueError (msg )
161165
162166 if name == "" :
163167 name = f"var_{ self ._unnamed_variable_counter } "
@@ -171,7 +175,8 @@ def add_variable(
171175 if isinstance (dim , str ):
172176 dim_obj = next ((d for d in self ._dimensions if d .name == dim ), None )
173177 if dim_obj is None :
174- raise ValueError (f"Dimension { dim !r} not found" )
178+ msg = f"Dimension { dim !r} not found"
179+ raise ValueError (msg )
175180 dim_objects .append (dim_obj )
176181 else :
177182 dim_objects .append (dim )
@@ -193,7 +198,8 @@ def add_variable(
193198 def build (self ) -> Dataset :
194199 """Build the final dataset."""
195200 if self ._state == _BuilderState .INITIAL :
196- raise ValueError ("Must add at least one dimension before building" )
201+ msg = "Must add at least one dimension before building"
202+ raise ValueError (msg )
197203
198204 metadata = make_dataset_metadata (
199205 self .name , self .api_version , self .created_on , self .attributes
@@ -216,7 +222,11 @@ def build(self) -> Dataset:
216222 return make_dataset (all_variables , metadata )
217223
218224
219- def write_mdio_metadata (mdio_ds : Dataset , store : str , ** kwargs : Any ) -> mdio .Dataset :
225+ def write_mdio_metadata (
226+ mdio_ds : Dataset ,
227+ store : str ,
228+ ** kwargs : Mapping [str , str | int | float | bool ],
229+ ) -> mdio .Dataset :
220230 """Write MDIO metadata to a Zarr store and return the constructed mdio.Dataset.
221231
222232 This function constructs an mdio.Dataset from the MDIO dataset and writes its metadata
@@ -238,7 +248,7 @@ def _generate_encodings() -> dict:
238248 Returns:
239249 Dictionary mapping variable names to their encoding configurations.
240250 """
241- # TODO: Re-enable chunk_key_encoding when supported by xarray
251+ # TODO(Anybody, #10274) : Re-enable chunk_key_encoding when supported by xarray
242252 # dimension_separator_encoding = V2ChunkKeyEncoding(separator="/").to_dict()
243253 global_encodings = {}
244254 for var in mdio_ds .variables :
@@ -250,7 +260,7 @@ def _generate_encodings() -> dict:
250260 chunks = var .metadata .chunk_grid .configuration .chunk_shape
251261 global_encodings [var .name ] = {
252262 "chunks" : chunks ,
253- # TODO: Re-enable chunk_key_encoding when supported by xarray
263+ # TODO(Anybody, #10274) : Re-enable chunk_key_encoding when supported by xarray
254264 # "chunk_key_encoding": dimension_separator_encoding,
255265 "_FillValue" : fill_value ,
256266 "dtype" : var .data_type ,
0 commit comments