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
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