def tableSpeciesObsText(request): """ """ # Check if pagination. pagination_page = request.GET.get('page', None) pagination_size = request.GET.get('per_page', 100) # Default 100. # header_language = request.GET.get('header_language', 'darwin_core') data_header = sharkdata_core.SpeciesObsUtils().getHeaders() translated_headers = sharkdata_core.SpeciesObsUtils().translateHeaders(data_header, language = header_language) # db_filter_dict = {} url_param_list = [] forms.parse_filter_params(request.GET, db_filter_dict, url_param_list) # # Only show ACTIVE rows, if not all status is requested. if request.GET.get('view_deleted', 'false') != 'true': db_filter_dict['status__iexact'] = 'ACTIVE' # data_rows = models.SpeciesObs.objects.values_list(*data_header).filter(**db_filter_dict) # if pagination_page: pag = paginator.Paginator(data_rows, pagination_size) try: data_rows = pag.page(pagination_page) except paginator.EmptyPage: # If page is out of range, return header only. data_rows = [] # response = HttpResponse(content_type = 'text/plain; charset=utf8') response['Content-Disposition'] = 'attachment; filename=species_observations.txt' response.write('\t'.join(translated_headers) + '\r\n') # Tab separated. for row in data_rows: response.write('\t'.join(row) + '\r\n') # Tab separated. return response
def tableSpeciesObsJson(request): """ """ # Check if pagination. pagination_page = request.GET.get('page', None) pagination_size = request.GET.get('per_page', 100) # Default 100. # header_language = request.GET.get('header_language', 'darwin_core') data_header = sharkdata_core.SpeciesObsUtils().getHeaders() translated_headers = sharkdata_core.SpeciesObsUtils().translateHeaders( data_header, language=header_language) # db_filter_dict = {} url_param_list = [] forms.parse_filter_params(request.GET, db_filter_dict, url_param_list) # # Only show ACTIVE rows, if not all status is requested. if request.GET.get('view_deleted', 'false') != 'true': db_filter_dict['status__iexact'] = 'ACTIVE' # data_rows = models.SpeciesObs.objects.values_list(*data_header).filter( **db_filter_dict) # if pagination_page: pag = paginator.Paginator(data_rows, pagination_size) try: data_rows = pag.page(pagination_page) except paginator.EmptyPage: # If page is out of range, return header only. data_rows = [] # response = HttpResponse(content_type='application/json; charset=utf8') response[ 'Content-Disposition'] = 'attachment; filename=species_observations.json' response.write('{') if pagination_page and pag: response.write('"page": ' + str(pagination_page) + ', ') response.write('"pages": ' + str(pag.num_pages) + ', ') response.write('"per_page": ' + str(pagination_size) + ', ') response.write('"total": ' + str(pag.count) + ', ') response.write('"header": ["') response.write('", "'.join(translated_headers) + '"], ') # Tab separated. response.write('"rows": [') row_delimiter = '' for row in data_rows: response.write(row_delimiter + '["' + '", "'.join(row) + '"]') row_delimiter = ', ' response.write(']') response.write('}') return response
def tableSpeciesObsJson(request): """ """ # Check if pagination. pagination_page = request.GET.get('page', None) pagination_size = request.GET.get('per_page', 100) # Default 100. # header_language = request.GET.get('header_language', 'darwin_core') data_header = sharkdata_core.SpeciesObsUtils().getHeaders() translated_headers = sharkdata_core.SpeciesObsUtils().translateHeaders(data_header, language = header_language) # db_filter_dict = {} url_param_list = [] forms.parse_filter_params(request.GET, db_filter_dict, url_param_list) # # Only show ACTIVE rows, if not all status is requested. if request.GET.get('view_deleted', 'false') != 'true': db_filter_dict['status__iexact'] = 'ACTIVE' # data_rows = models.SpeciesObs.objects.values_list(*data_header).filter(**db_filter_dict) # if pagination_page: pag = paginator.Paginator(data_rows, pagination_size) try: data_rows = pag.page(pagination_page) except paginator.EmptyPage: # If page is out of range, return header only. data_rows = [] # response = HttpResponse(content_type = 'application/json; charset=utf8') response['Content-Disposition'] = 'attachment; filename=species_observations.json' response.write('{') if pagination_page and pag: response.write('"page": ' + unicode(pagination_page) + ', ') response.write('"pages": ' + unicode(pag.num_pages) + ', ') response.write('"per_page": ' + unicode(pagination_size) + ', ') response.write('"total": ' + unicode(pag.count) + ', ') response.write('"header": ["') response.write('", "'.join(translated_headers) + '"], ') # Tab separated. response.write('"rows": [') row_delimiter = '' for row in data_rows: response.write(row_delimiter + '["' + '", "'.join(row) + '"]') row_delimiter = ', ' response.write(']') response.write('}') return response
def mapOpenlayers(request): db_filter_dict = {} url_param_list = [] forms.parse_filter_params(request.GET, db_filter_dict, url_param_list) # url_params = u'' if url_param_list: url_params += u'?' url_params += u'&'.join(url_param_list) kml_link = u'/speciesobs/positions.kml/' + url_params # Only show ACTIVE rows. db_filter_dict[u'status__iexact'] = u'ACTIVE' observations_count = models.SpeciesObs.objects.kml().filter(**db_filter_dict).count() return render_to_response('speciesobs_map.html', {'kml_link' : kml_link, 'location_count' : observations_count})
def positionsKml(request): """ """ db_filter_dict = {} url_param_list = [] forms.parse_filter_params(request.GET, db_filter_dict, url_param_list) # # Only show ACTIVE rows as a part of the KML file. db_filter_dict[u'status__iexact'] = u'ACTIVE' observations = models.SpeciesObs.objects.kml().filter(**db_filter_dict) # # Extract and aggregate data. taxon_pos_dict = {} for obs in observations: taxon_pos_key = (obs.scientific_name, obs.latitude_dd, obs.longitude_dd) if taxon_pos_key not in taxon_pos_dict: taxon_pos_dict[taxon_pos_key] = obs.kml # Geographic point in KML format. # # Reformat to match the template "positions_kml.kml". kml_name = u'SHARKdata: Marine species observations.' kml_description = """ Data source: <a href="http://sharkdata.se">http://sharkdata.se</a> <br> """ # kml_data = [] for key in sorted(taxon_pos_dict.keys()): scientific_name, latitude, longitude = key # kml_descr = u'<p>' kml_descr += u'Scientific name: ' + scientific_name + u'<br>' kml_descr += u'Latitude: ' + latitude + u'<br>' kml_descr += u'Longitude: ' + longitude + u'<br>' kml_descr += u'</p>' # row_dict = {} row_dict[u'kml_name'] = scientific_name row_dict[u'kml_description'] = kml_descr row_dict[u'kml_kml'] = taxon_pos_dict[key] # Geographic point in KML format. kml_data.append(row_dict) return render_to_kml("positions_kml.kml", {'kml_name' : kml_name, 'kml_description' : kml_description, 'kml_data' : kml_data})
def tableSpeciesObsText(request): """ """ # Check if pagination. pagination_page = request.GET.get('page', None) pagination_size = request.GET.get('per_page', 100) # Default 100. # header_language = request.GET.get('header_language', 'darwin_core') data_header = sharkdata_core.SpeciesObsUtils().getHeaders() translated_headers = sharkdata_core.SpeciesObsUtils().translateHeaders( data_header, language=header_language) # db_filter_dict = {} url_param_list = [] forms.parse_filter_params(request.GET, db_filter_dict, url_param_list) # # Only show ACTIVE rows, if not all status is requested. if request.GET.get('view_deleted', 'false') != 'true': db_filter_dict['status__iexact'] = 'ACTIVE' # data_rows = models.SpeciesObs.objects.values_list(*data_header).filter( **db_filter_dict) # if pagination_page: pag = paginator.Paginator(data_rows, pagination_size) try: data_rows = pag.page(pagination_page) except paginator.EmptyPage: # If page is out of range, return header only. data_rows = [] # response = HttpResponse(content_type='text/plain; charset=utf8') response[ 'Content-Disposition'] = 'attachment; filename=species_observations.txt' response.write('\t'.join(translated_headers) + '\r\n') # Tab separated. for row in data_rows: response.write('\t'.join(row) + '\r\n') # Tab separated. return response
def listSpeciesObs(request): """ """ error_message = None # initially. # header_language = request.GET.get('header_language', 'darwin_core') data_header = sharkdata_core.SpeciesObsUtils().getHeaders() translated_headers = sharkdata_core.SpeciesObsUtils().translateHeaders( data_header, language=header_language) # data_rows = None # if request.method == "GET": form = forms.SpeciesObsFilterForm() contextinstance = { 'form': form, 'data_header': None, 'data_rows': None, 'url_table': None, 'error_message': error_message } contextinstance.update(csrf(request)) return render(request, "list_speciesobs.html", contextinstance) elif request.method == "POST": if request.POST['confirm'] == "get_data": form = forms.SpeciesObsFilterForm(request.POST) # db_filter_dict = {} url_param_list = [] forms.parse_filter_params(request.POST, db_filter_dict, url_param_list) # data_rows = [] # Check parameters to avoid too long queries. class_param = '' order_param = '' species_param = '' scientific_name_param = '' if 'class' in request.POST: class_param = request.POST['class'] if 'order' in request.POST: order_param = request.POST['order'] if 'genus' in request.POST: genus_param = request.POST['genus'] # if 'species' in request.POST: # species_param = request.POST['species'] if 'scientific_name' in request.POST: scientific_name_param = request.POST['scientific_name'] # Check for empty or '-'. if ((class_param not in ['All', '-', '']) or (order_param not in ['All', '-', '']) or (genus_param not in ['All', '-', '']) or # (species_param not in ['All', '-', '']) or (scientific_name_param not in ['All', '-', ''])): # # Only show ACTIVE rows as a part of the HTML page. db_filter_dict['status__iexact'] = 'ACTIVE' data_rows = models.SpeciesObs.objects.values_list( *data_header).filter(**db_filter_dict) # if not data_rows: error_message = 'No data found. Please try again...' else: error_message = 'At least one of Scientific name, Class, Order or Genus must be selected. Please select one and try again...' # contextinstance = { 'form': form, 'data_header': data_header, 'data_rows': data_rows, 'url_table': None, 'error_message': error_message } contextinstance.update(csrf(request)) return render(request, "list_speciesobs.html", contextinstance) # if request.POST['confirm'] == "view_url": # db_filter_dict = {} url_param_list = [] forms.parse_filter_params(request.POST, db_filter_dict, url_param_list) url_params = '' if url_param_list: url_params += '?' url_params += '&'.join(url_param_list) # url_table = [] if '?' in url_params: url_table.append('/speciesobs/table.txt/' + url_params + '&page=1&per_page=10') url_table.append('/speciesobs/table.json/' + url_params + '&page=1&per_page=10') url_table.append('/speciesobs/table.json/' + url_params + '&page=1&per_page=10&view_deleted=true') else: url_table.append('/speciesobs/table.txt/' + url_params + '?page=1&per_page=10') url_table.append('/speciesobs/table.json/' + url_params + '?page=1&per_page=10') url_table.append('/speciesobs/table.json/' + url_params + '?page=1&per_page=10&view_deleted=true') url_table.append('---') url_table.append('/speciesobs/table.txt/' + url_params) url_table.append('/speciesobs/table.json/' + url_params) # url_table.append('/speciesobs/positions.kml/' + url_params) # url_table.append('/speciesobs/year_info.kml/' + url_params) # url_table.append('/speciesobs/map/' + url_params) # url_table.append('http://maps.google.se/?q=http://sharkdata.se/speciesobs/positions.kml/' + url_params) # url_table.append('http://maps.google.se/?q=http://sharkdata.se/speciesobs/year_info.kml/' + url_params) # # url_table.append('---') # url_table.append('For development (from http://test.sharkdata.se):') # url_table.append('http://maps.google.se/?q=http://test.sharkdata.se/speciesobs/positions.kml/' + url_params) # url_table.append('http://maps.google.se/?q=http://test.sharkdata.se/speciesobs/year_info.kml/' + url_params) # form = forms.SpeciesObsFilterForm(request.POST) contextinstance = { 'form': form, 'data_header': None, 'data_rows': None, 'url_table': url_table, 'error_message': error_message } contextinstance.update(csrf(request)) return render(request, "list_speciesobs.html", contextinstance) # return HttpResponseRedirect("/speciesobs")
def listSpeciesObs(request): """ """ error_message = None # initially. # header_language = request.GET.get('header_language', 'darwin_core') data_header = sharkdata_core.SpeciesObsUtils().getHeaders() translated_headers = sharkdata_core.SpeciesObsUtils().translateHeaders(data_header, language = header_language) # data_rows = None # if request.method == "GET": form = forms.SpeciesObsFilterForm() contextinstance = {'form': form, 'data_header' : None, 'data_rows' : None, 'url_table' : None, 'error_message' : error_message} contextinstance.update(csrf(request)) return render_to_response("list_speciesobs.html", contextinstance) elif request.method == "POST": if request.POST['confirm'] == "get_data": form = forms.SpeciesObsFilterForm(request.POST) # db_filter_dict = {} url_param_list = [] forms.parse_filter_params(request.POST, db_filter_dict, url_param_list) # data_rows = [] # Check parameters to avoid too long queries. class_param = '' order_param = '' species_param = '' scientific_name_param = '' if 'class' in request.POST: class_param = request.POST['class'] if 'order' in request.POST: order_param = request.POST['order'] if 'genus' in request.POST: genus_param = request.POST['genus'] # if 'species' in request.POST: # species_param = request.POST['species'] if 'scientific_name' in request.POST: scientific_name_param = request.POST['scientific_name'] # Check for empty or '-'. if ((class_param not in ['All', '-', '']) or (order_param not in ['All', '-', '']) or (genus_param not in ['All', '-', '']) or # (species_param not in ['All', '-', '']) or (scientific_name_param not in ['All', '-', ''])): # # Only show ACTIVE rows as a part of the HTML page. db_filter_dict['status__iexact'] = 'ACTIVE' data_rows = models.SpeciesObs.objects.values_list(*data_header).filter(**db_filter_dict) # if not data_rows: error_message = 'No data found. Please try again...' else: error_message = 'At least one of Scientific name, Class, Order or Genus must be selected. Please select one and try again...' # contextinstance = {'form': form, 'data_header' : data_header, 'data_rows' : data_rows, 'url_table' : None, 'error_message' : error_message} contextinstance.update(csrf(request)) return render_to_response("list_speciesobs.html", contextinstance) # if request.POST['confirm'] == "view_url": # db_filter_dict = {} url_param_list = [] forms.parse_filter_params(request.POST, db_filter_dict, url_param_list) url_params = '' if url_param_list: url_params += '?' url_params += '&'.join(url_param_list) # url_table = [] if '?' in url_params: url_table.append('/speciesobs/table.txt/' + url_params + '&page=1&per_page=10') url_table.append('/speciesobs/table.json/' + url_params + '&page=1&per_page=10') url_table.append('/speciesobs/table.json/' + url_params + '&page=1&per_page=10&view_deleted=true') else: url_table.append('/speciesobs/table.txt/' + url_params + '?page=1&per_page=10') url_table.append('/speciesobs/table.json/' + url_params + '?page=1&per_page=10') url_table.append('/speciesobs/table.json/' + url_params + '?page=1&per_page=10&view_deleted=true') url_table.append('---') url_table.append('/speciesobs/table.txt/' + url_params) url_table.append('/speciesobs/table.json/' + url_params) # url_table.append('/speciesobs/positions.kml/' + url_params) # url_table.append('/speciesobs/year_info.kml/' + url_params) # url_table.append('/speciesobs/map/' + url_params) # url_table.append('http://maps.google.se/?q=http://sharkdata.se/speciesobs/positions.kml/' + url_params) # url_table.append('http://maps.google.se/?q=http://sharkdata.se/speciesobs/year_info.kml/' + url_params) # # url_table.append('---') # url_table.append('For development (from http://test.sharkdata.se):') # url_table.append('http://maps.google.se/?q=http://test.sharkdata.se/speciesobs/positions.kml/' + url_params) # url_table.append('http://maps.google.se/?q=http://test.sharkdata.se/speciesobs/year_info.kml/' + url_params) # form = forms.SpeciesObsFilterForm(request.POST) contextinstance = {'form': form, 'data_header' : None, 'data_rows' : None, 'url_table' : url_table, 'error_message' : error_message} contextinstance.update(csrf(request)) return render_to_response("list_speciesobs.html", contextinstance) # return HttpResponseRedirect("/speciesobs")
def yearInfoKml(request): """ """ db_filter_dict = {} url_param_list = [] forms.parse_filter_params(request.GET, db_filter_dict, url_param_list) # # Only show ACTIVE rows as a part of the KML file. db_filter_dict[u'status__iexact'] = u'ACTIVE' observations = models.SpeciesObs.objects.kml().filter(**db_filter_dict) # # Extract and aggregate data. year_datatype_taxon_pos_dict = {} obsdict = None for obs in observations: year_datatype_taxon_pos_key = (obs.sampling_year, obs.data_type, obs.scientific_name, obs.longitude_dd, obs.latitude_dd) if year_datatype_taxon_pos_key not in year_datatype_taxon_pos_dict: obsdict = {} obsdict[u'counter'] = 0 obsdict[u'sampling_month_set'] = set() year_datatype_taxon_pos_dict[year_datatype_taxon_pos_key] = obsdict # obsdict = year_datatype_taxon_pos_dict[year_datatype_taxon_pos_key] obsdict[u'data_type'] = obs.data_type obsdict[u'sampling_year'] = obs.sampling_year obsdict[u'taxon_kingdom'] = obs.taxon_kingdom obsdict[u'taxon_phylum'] = obs.taxon_phylum obsdict[u'taxon_class'] = obs.taxon_class obsdict[u'taxon_order'] = obs.taxon_order obsdict[u'scientific_name'] = obs.scientific_name obsdict[u'latitude_dd'] = obs.latitude_dd obsdict[u'longitude_dd'] = obs.longitude_dd obsdict[u'counter'] += 1 obsdict[u'sampling_month_set'].add(obs.sampling_month) obsdict[u'kml_kml'] = obs.kml # Geographic point in KML format. # # Reformat to match the template "species_kml.kml". kml_name = u'SHARKdata: Marine species observations.' kml_description = """ Data source: <a href="http://sharkdata.se">http://sharkdata.se</a> <br> """ # kml_data = [] last_used_year = None year_dict = {} for key in sorted(year_datatype_taxon_pos_dict.keys()): year_taxon_pos = year_datatype_taxon_pos_dict[key] data_type = year_taxon_pos[u'data_type'] year = year_taxon_pos[u'sampling_year'] taxon_kingdom = year_taxon_pos[u'taxon_kingdom'] taxon_phylum = year_taxon_pos[u'taxon_phylum'] taxon_class = year_taxon_pos[u'taxon_class'] taxon_order = year_taxon_pos[u'taxon_order'] scientific_name = year_taxon_pos[u'scientific_name'] latitude_dd = year_taxon_pos[u'latitude_dd'] longitude_dd = year_taxon_pos[u'longitude_dd'] counter = unicode(year_taxon_pos[u'counter']) sampling_month = u', '.join(sorted(year_taxon_pos[u'sampling_month_set'])) kml_kml = year_taxon_pos[u'kml_kml'] # Geographic point in KML format. # if (last_used_year == None) or (last_used_year != year) : last_used_year = year year_dict = {} year_dict[u'kml_name'] = u'Year: ' + year + u' Category: ' + data_type year_dict[u'rows'] = [] kml_data.append(year_dict) # row_dict = {} row_dict[u'kml_name'] = scientific_name # kml_descr = u'<p>' if data_type: kml_descr += u'Category: ' + data_type + u'<br>' if taxon_kingdom: kml_descr += u'Kingdom: ' + taxon_kingdom + u'<br>' if taxon_phylum: kml_descr += u'Phylum: ' + taxon_phylum + u'<br>' if taxon_class: kml_descr += u'Class: ' + taxon_class + u'<br>' if taxon_order: kml_descr += u'Order: ' + taxon_order + u'<br>' kml_descr += u'Scientific name: ' + scientific_name + u'<br>' kml_descr += u'Year: ' + year + u'<br>' kml_descr += u'Latitude: ' + latitude_dd + u'<br>' kml_descr += u'Longitude: ' + longitude_dd + u'<br>' kml_descr += u'Number of samples: ' + counter + u'<br>' kml_descr += u'Months observed: ' + sampling_month + u'<br>' kml_descr += u'</p>' row_dict[u'kml_description'] = kml_descr row_dict[u'kml_kml'] = kml_kml year_dict[u'rows'].append(row_dict) return render_to_kml("year_info_kml.kml", {'kml_name' : kml_name, 'kml_description' : kml_description, 'kml_data' : kml_data})