Ejemplo n.º 1
0
    def create_export_printlist(export_objects):
        """
        Creates a result list with FieldLogger format from selected obsids and parameters
        :return: a list with result lines to export to file
        """
        latlons = utils.get_latlon_for_all_obsids()

        parameters_inputtypes_hints = OrderedDict()

        sublocations_locations = OrderedDict()
        sublocations_lat_lon = OrderedDict()
        sublocations_parameters = OrderedDict()

        for export_object in export_objects:
            parameter = export_object.final_parameter_name
            if not parameter:
                utils.MessagebarAndLog.critical(
                    bar_msg=u"Critical: Parameter " + parameter + u' error. See log message panel',
                    log_msg=u'Parameter name not given.')
                continue

            input_type = export_object.input_type
            if not input_type:
                utils.MessagebarAndLog.critical(
                    bar_msg=u"Critical: Parameter " + parameter + u' error. See log message panel',
                    log_msg=u'Input type not given.')
                continue

            if parameter in parameters_inputtypes_hints:
                utils.MessagebarAndLog.warning(bar_msg=u"Warning: Parameter " + parameter + u' error. See log message panel', log_msg=u'The parameter ' + parameter + u' already exists. Only the first occurence one will be written to file.')
                continue

            parameters_inputtypes_hints[parameter] = (input_type, export_object.hint)

            for location, sublocation, obsid in export_object.locations_sublocations_obsids:
                location_exists = sublocations_locations.get(sublocation, None)
                if location != location_exists and location_exists is not None:
                    utils.MessagebarAndLog.warning(bar_msg=u'Warning: sublocation ' + sublocation + u' error, see log message panel', log_msg=u'sublocation ' + sublocation + u' already existed for location ' + location_exists + u' and is duplicated by location ' + location + u'. It will be skipped.')
                    continue

                if sublocation not in sublocations_lat_lon:
                    lat, lon = latlons.get(obsid, [None, None])
                    if any([lat is None, not lat, lon is None, not lon]):
                        utils.MessagebarAndLog.critical(bar_msg=u'Critical: Obsid ' + u' did not have lat-lon coordinates. Check obs_points table')
                        continue
                    sublocations_lat_lon[sublocation] = (returnunicode(lat), returnunicode(lon))
                sublocations_locations[sublocation] = location
                sublocations_parameters.setdefault(sublocation, []).append(parameter)

        comments = [par for par in parameters_inputtypes_hints.keys() if u'comment' in par]
        if not comments:
            utils.MessagebarAndLog.warning(bar_msg=u'Warning: No comment parameter found. Is it forgotten?')

        #Make a flat set of used parameters
        #used_parameters = [item for v in sublocations_parameters.values() for item in v]
        #Remove unused parameters
        #parameters_inputtypes_hints = OrderedDict([(k, v) for k, v in parameters_inputtypes_hints.iteritems() if k in used_parameters])

        printlist = []
        printlist.append(u"FileVersion 1;" + str(len(parameters_inputtypes_hints)))
        printlist.append(u"NAME;INPUTTYPE;HINT")
        printlist.extend([u';'.join([returnunicode(par),
                                     returnunicode(i_h[0]) if i_h[0] else u'',
                                     returnunicode(i_h[1]) if i_h[1] else u''])
                          for par, i_h in parameters_inputtypes_hints.iteritems()])
        printlist.append(u'NAME;sublocation;LAT;LON;INPUTFIELD')

        printlist.extend([u';'.join([returnunicode(location),
                                     returnunicode(sublocation),
                                     returnunicode(sublocations_lat_lon[sublocation][0]),
                                     returnunicode(sublocations_lat_lon[sublocation][1]),
                                     u'|'.join(returnunicode(sublocations_parameters[sublocation], keep_containers=True))])
                          for sublocation, location in sorted(sublocations_locations.iteritems())])

        return printlist
Ejemplo n.º 2
0
    def create_export_printlist(parameter_groups):
        """
        Creates a result list with FieldLogger format from selected obsids and parameters
        :return: a list with result lines to export to file
        """
        latlons = utils.get_latlon_for_all_obsids()

        sublocations_locations = {}
        locations_sublocations = OrderedDict()
        locations_lat_lon = OrderedDict()
        sublocations_parameters = OrderedDict()

        parameters_inputtypes_hints = OrderedDict()

        #Check for duplicates in sublocation suffixes
        all_sublocations = [l_s_o[1] for parameter_group in parameter_groups for l_s_o in parameter_group.locations_sublocations_obsids if parameter_group.parameter_list]
        if len(all_sublocations) != len(set(all_sublocations)):
            utils.MessagebarAndLog.critical(bar_msg=u'Critical: Combination of obsid, locationsuffix and sublocation suffix must be unique')
            return

        for index, parameter_group in enumerate(parameter_groups):
            _parameters_inputtypes_hints = parameter_group.parameter_list
            if not _parameters_inputtypes_hints:
                utils.MessagebarAndLog.warning(
                    bar_msg=u"Warning: Empty parameter list for group nr " + str(index + 1))
                continue

            for location, sublocation, obsid in parameter_group.locations_sublocations_obsids:
                lat, lon = [None, None]

                if sublocation in sublocations_locations:
                    if sublocations_locations[sublocation] != location:
                        utils.MessagebarAndLog.warning(bar_msg=u'Warning: Sublocation ' + sublocation + u' error, see log message panel', log_msg=u'Sublocation ' + sublocation + u' already existed for location ' + location + u'.\n Duplications not allowd. It will be skipped.')
                        continue

                if location not in locations_lat_lon:
                    lat, lon = latlons.get(obsid, [None, None])
                    if any([lat is None, not lat, lon is None, not lon]):
                        utils.MessagebarAndLog.critical(bar_msg=u'Critical: Obsid ' + obsid + u' did not have lat-lon coordinates. Check obs_points table')
                        continue

                #sublocations_parameters.setdefault(sublocation, []).extend([par.split(u';')[0] for par in _parameters_inputtypes_hints])

                for _parameter_inputtype_hint in _parameters_inputtypes_hints:
                    _parameter = _parameter_inputtype_hint.split(u';')[0]
                    existed_param = parameters_inputtypes_hints.get(_parameter, None)
                    if existed_param is not None and existed_param != _parameter_inputtype_hint:
                        utils.MessagebarAndLog.critical(bar_msg=u'Critical: Parameter error, see log message panel', log_msg=u'The parameter ' + _parameter_inputtype_hint + u'already existed as ' + existed_param + u'. Skipping it!')
                    else:
                        parameters_inputtypes_hints[_parameter] = _parameter_inputtype_hint

                    existed = sublocations_parameters.get(sublocation, [])
                    if _parameter not in existed:
                        sublocations_parameters.setdefault(sublocation, []).append(_parameter)

                if sublocations_parameters.get(sublocation, []):
                    if location not in locations_lat_lon:
                        locations_lat_lon[location] = (returnunicode(lat), returnunicode(lon))
                    locations_sublocations.setdefault(location, []).append(sublocation)
                    if sublocation not in sublocations_locations:
                        sublocations_locations[sublocation] = location

        printlist = []
        printlist.append(u"FileVersion 1;" + str(len(parameters_inputtypes_hints)))
        printlist.append(u"NAME;INPUTTYPE;HINT")
        #Add a space after the parameter rows just to be sure that there will always be a hint (it needs to be.
        printlist.extend([p_i_h + u' ' if not p_i_h.endswith(u' ') else p_i_h for p_i_h in parameters_inputtypes_hints.values()])

        printlist.append(u'NAME;SUBNAME;LAT;LON;INPUTFIELD')

        for location, sublocations in sorted(locations_sublocations.iteritems()):
            lat, lon = locations_lat_lon[location]

            for sublocation in sorted(sublocations):

                parameters = u'|'.join(sublocations_parameters[sublocation])
                printrow = u';'.join([location, sublocation, lat, lon, parameters])
                #This test is really bad and is due to some logical error above.
                if printrow not in printlist:
                    printlist.append(printrow)

        return printlist