1- from collections import OrderedDict
21import json
3- import numpy as np
42import os
3+ import shutil
4+ import tempfile
55import unittest
6+ from collections import OrderedDict
67
7- from ncwriter import DatasetTemplate
8+ import numpy as np
9+ from netCDF4 import Dataset
810
11+ from ncwriter import DatasetTemplate
912
1013TEST_ROOT = os .path .dirname (__file__ )
1114TEMPLATE_JSON = os .path .join (TEST_ROOT , 'template1.json' )
@@ -18,6 +21,26 @@ class TestDatasetTemplate(unittest.TestCase):
1821 dimensions = template_dict ['dimensions' ]
1922 variables = template_dict ['variables' ]
2023 global_attributes = template_dict ['global_attributes' ]
24+ values1 = np .array ([1 ], dtype = np .float32 )
25+ values10 = np .arange (10 , dtype = np .float32 )
26+
27+ @property
28+ def temp_dir (self ):
29+ if not hasattr (self , '_temp_dir' ):
30+ self ._temp_dir = tempfile .mkdtemp (prefix = self .__class__ .__name__ )
31+ return self ._temp_dir
32+
33+ @property
34+ def temp_nc_file (self ):
35+ if not hasattr (self , '_temp_nc_file' ):
36+ with tempfile .NamedTemporaryFile (suffix = '.nc' , prefix = self .__class__ .__name__ , dir = self .temp_dir ) as f :
37+ pass
38+ self ._temp_nc_file = f .name
39+ return self ._temp_nc_file
40+
41+ def tearDown (self ):
42+ if hasattr (self , '_temp_dir' ):
43+ shutil .rmtree (self ._temp_dir )
2144
2245 def test_init_empty (self ):
2346 template = DatasetTemplate ()
@@ -93,17 +116,40 @@ def test_add_variable_attributes(self):
93116
94117 def test_set_variable_values (self ):
95118 template = DatasetTemplate .from_json (TEMPLATE_JSON )
96- temp_val = np .arange (10 , dtype = np .float32 )
97- template .variables ['TEMP' ]['values' ] = temp_val
98- self .assertTrue (all (template .variables ['TEMP' ]['values' ] == temp_val ))
119+ template .variables ['TEMP' ]['values' ] = self .values10
120+ self .assertTrue (all (template .variables ['TEMP' ]['values' ] == self .values10 ))
121+
122+ def test_create_empty_file (self ):
123+ template = DatasetTemplate ()
124+ template .create (self .temp_nc_file )
125+ dataset = Dataset (self .temp_nc_file )
126+
127+ def test_create_file (self ):
128+ template = DatasetTemplate .from_json (TEMPLATE_JSON )
129+ template .variables ['TIME' ]['values' ] = self .values10
130+ template .variables ['DEPTH' ]['values' ] = self .values1
131+ template .variables ['TEMP' ]['values' ] = self .values10
132+ template .create (self .temp_nc_file )
133+
134+ dataset = Dataset (self .temp_nc_file )
135+
136+ ds_dimensions = OrderedDict ((k , v .size ) for k , v in dataset .dimensions .iteritems ())
137+ self .assertEqual (self .dimensions , ds_dimensions )
138+
139+ for vname , vdict in self .variables :
140+ ds_var = dataset [vname ]
141+ self .assertEqual (vdict ['dims' ], ds_var .dimensions )
142+ ds_var_attr = OrderedDict ((k , ds_var [k ]) for k in ds_var .ncattrs ())
143+ self .assertEqual (vdict ['attr' ], ds_var_attr )
144+
145+ ds_global_attributes = OrderedDict ((k , dataset [k ]) for k in dataset .ncattrs ())
146+ self .assertEqual (self .global_attributes , ds_global_attributes )
99147
100148# TODO: add data from multiple numpy arrays
101149# e.g. template.add_data(TIME=time_values, TEMP=temp_values, PRES=pres_values)
102150# TODO: add data from Pandas dataframe (later...)
103151# e.g. template.add_data(dataframe)
104152
105- # TODO: create netCDF file
106- # e.g. template.create(filename) # user-specified file name
107153# TODO: create netCDF file with auto-generated file name according to IMOS conventions
108154# e.g. template.create()
109155
0 commit comments