Example #1
0
class NetCDFConverter(object):
    def __init__(self, metadataFile, csvFile, ncOutput):
        Log().set_log_info("[Begin] conversion to NetCDF of: " + metadataFile +
                           "  " + csvFile + "  " + ncOutput)
        self.init_elements(metadataFile, csvFile, ncOutput)
        if not os.path.exists(self.ncOutput):
            try:
                self.ncFile = Dataset(self.ncOutput,
                                      'w',
                                      format='NETCDF' + self.version)
            except:
                Log().set_log_error(
                    "The netCDF_version is wrong. Assigning the default value(netCDF4_CLASSIC) to "
                    "netCDF_version")
                self.version = '4_CLASSIC'
                self.ncFile = Dataset(self.ncOutput,
                                      'w',
                                      format='NETCDF' + self.version)
            self.create_netcdf()
        else:  # Append start
            self.ncFile = Dataset(self.ncOutput, 'r+')
            self.append_netcdf()
        self.metadata.globalAttributes.max_min_attribute(self.ncFile)
        self.ncFile.close()
        Log().set_log_info("[Finished] conversion to NetCDF of : " +
                           metadataFile + "  " + csvFile + "  " + ncOutput)

    def init_elements(self, metadataFile, csvFile, ncOutput):
        self.ncOutput = ncOutput
        self.ncOutput = Checker().check_source(metadataFile, csvFile, ncOutput)
        self.metadata = Metadata(metadataFile)
        self.metadataData = self.metadata.get_metadata()
        self.data = Data(csvFile)
        self.ncOutput = self.ncOutput + self.metadata.get_global_attributes(
        ).get_id() + ".nc"
        self.version = self.metadata.get_global_attributes(
        ).get_netcdf_version()
        self.temporalAppendPosition = {}
        self.globalAttributes = Metadata(metadataFile).get_global_attributes()
        self.dimensions = self.metadata.get_dimensions()
        self.naming_authority = self.globalAttributes.attributesList[
            'naming_authority']

        if self.naming_authority == 'EGO':
            self.data_ego = Data_ego(csvFile)
            self.ego_standard_metadata = EgoReaderStandardMetadata()
            self.dimensionsEgo = self.ego_standard_metadata.get_dimensions()
            self.metadata.change_variable()

    def create_netcdf(self):
        self.globalAttributes.write_attributes(self.ncFile)
        self.dimensions.write_dimensions(self.ncFile)

        if self.naming_authority == 'EGO':
            self.dimensionsEgo.write_dimensions(self.ncFile)

            self.variables = self.ego_standard_metadata.get_glider_characteristics_variables(
            )
            writer = writer_ego_standard(
                self.dimensions.get_metadata_dimension())
            writer.write(self.variables,
                         self.metadataData['glider_characteristics'],
                         self.ncFile)
            #self.writer.write_variables_data(self.metadataData['glider_characteristics'], self.variables, self.version)

            self.variables = self.ego_standard_metadata.get_glider_deployment_variables(
            )
            writer = writer_ego_standard(
                self.dimensions.get_metadata_dimension())
            writer.write(self.variables,
                         self.metadataData['glider_deployment'], self.ncFile)

            self.variables = self.metadata.get_variables()
            self.writer_ego = writer_ego(self.data_ego, self.dimensions,
                                         self.ncFile)
            self.writer_ego.write_variables_data(
                self.metadataData['variables'], self.variables, self.version)

        else:
            self.variables = self.metadata.get_variables()
            self.writer = Writer(self.data, self.dimensions, self.ncFile)
            self.writer.write_variables_data(self.metadataData['variables'],
                                             self.variables, self.version)

    def append_netcdf(self):
        self.dimensions.set_dimensions_by_netcdf(self.ncFile.dimensions)
        self.writer = Writer(self.data, self.dimensions, self.ncFile)
        self.writer.write_append_variables_data(self.metadata.get_variables())