Skip to content

Commit b77e116

Browse files
committed
WIP: add tests for creating the netCDF file
1 parent a308567 commit b77e116

2 files changed

Lines changed: 62 additions & 11 deletions

File tree

test_ncwriter/template1.json

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
{
22
"dimensions": {
33
"TIME": 0,
4-
"DEPTH": null,
5-
"LATITUDE": 100,
6-
"LONGITUDE": 100
4+
"DEPTH": null
75
},
86
"variables": {
97
"TIME": {
@@ -13,6 +11,13 @@
1311
"type": "float64",
1412
"attr": null
1513
},
14+
"DEPTH": {
15+
"dims": [
16+
"DEPTH"
17+
],
18+
"type": "float32",
19+
"attr": null
20+
},
1621
"TEMP": {
1722
"dims": [
1823
"TIME",

test_ncwriter/test_template.py

Lines changed: 54 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
1-
from collections import OrderedDict
21
import json
3-
import numpy as np
42
import os
3+
import shutil
4+
import tempfile
55
import 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

1013
TEST_ROOT = os.path.dirname(__file__)
1114
TEMPLATE_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

Comments
 (0)