Source code for pymt.printers.nc.database

import os

from .ugrid import close as ugrid_close
from .write import field_tofile


[docs]class IDatabase: def __init__(self): pass
[docs] def open(self, path, var_name, **kwds): pass
[docs] def write(self, field, **kwds): pass
[docs] def close(self): pass
[docs]def field_changed_size(field, n_points, n_cells): return n_points != field.get_point_count() or n_cells != field.get_cell_count()
[docs]class Database(IDatabase):
[docs] def open(self, path, var_name, **kwds): self.close() (root, ext) = os.path.splitext(path) self._var_name = var_name self._path = path self._template = f"{root}_%04d{ext}" self._point_count = None self._cell_count = None
[docs] def write(self, field, **kwds): kwds.setdefault("append", True) if kwds["append"]: if self._point_count is not None and self._cell_count is not None: if field_changed_size(field, self._point_count, self._cell_count): self._path = self._next_file_name() self._point_count = field.get_point_count() self._cell_count = field.get_cell_count() else: self._path = self._next_file_name() field_tofile(field, self._path, **kwds)
[docs] def close(self): try: del self._count except AttributeError: pass try: del self._point_count del self._cell_count except AttributeError: pass try: ugrid_close(self._path) except AttributeError: pass
def _next_file_name(self): try: next_file_name = self._template % self._count except AttributeError: self._count = 0 next_file_name = self._template % self._count finally: self._count += 1 return next_file_name