Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
"""Load a Group from an NCStream object."""
self._unpack_attrs(group.atts)
self.name = group.name
for dim in group.dims:
new_dim = Dimension(self, dim.name)
self.dimensions[dim.name] = new_dim
new_dim.load_from_stream(dim)
for var in group.vars:
new_var = Variable(self, var.name)
self.variables[var.name] = new_var
new_var.load_from_stream(var)
for grp in group.groups:
new_group = Group(self)
self.groups[grp.name] = new_group
new_group.load_from_stream(grp)
for struct in group.structs:
new_var = Variable(self, struct.name)
self.variables[struct.name] = new_var
new_var.load_from_stream(struct)
if group.enumTypes:
for en in group.enumTypes:
self.types[en.name] = enum.Enum(en.name,
[(typ.value, typ.code) for typ in en.map])
def __init__(self, parent=None):
"""Initialize a Group."""
super(Group, self).__init__()
self.groups = OrderedDict()
self.variables = OrderedDict()
self.dimensions = OrderedDict()
self.types = OrderedDict()
if parent:
self.dataset = parent.dataset
else:
self.dataset = self
if self.variables:
print_groups.append('Variables:')
for var in self.variables.values():
print_groups.append(str(var))
if self.ncattrs():
print_groups.append('Attributes:')
for att in self.ncattrs():
print_groups.append('\t{}: {}'.format(att, getattr(self, att)))
return '\n'.join(print_groups)
__repr__ = __str__
class Dataset(Group):
"""Abstract away access to the remote dataset."""
def __init__(self, url):
"""Initialize the dataset."""
super(Dataset, self).__init__()
self.cdmr = CDMRemote(url)
self.url = url
self._read_header()
def _read_header(self):
messages = self.cdmr.fetch_header()
if len(messages) != 1:
log.warning('Receive %d messages for header!', len(messages))
self._header = messages[0]
self.load_from_stream(self._header.root)