From e3df8be43b675722d6aabfbeabe26b48284983af Mon Sep 17 00:00:00 2001 From: Ivan Kavaliou Date: Mon, 11 Apr 2016 09:47:59 +0300 Subject: [PATCH] #62 correct handling 'root' was implemented --- nextgisbio/models/cards.py | 18 +++++++++--------- nextgisbio/views/cards.py | 14 +++++++------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/nextgisbio/models/cards.py b/nextgisbio/models/cards.py index c0f7ae85..05835a2c 100644 --- a/nextgisbio/models/cards.py +++ b/nextgisbio/models/cards.py @@ -76,12 +76,7 @@ def as_join_list(taxon_list=None, header=True): ''' dbsession = DBSession() - if taxon_list: # выдать карточки-потомки определенных таксонов - species = Taxon.species_by_taxon(taxon_list) - species_id = [t['id'] for t in species] - else: # выдать все карточки - species = dbsession.query(Taxon).all() - species_id = [t.id for t in species if t.is_last_taxon()] + qs = ''' SELECT cards.id, @@ -150,9 +145,14 @@ def as_join_list(taxon_list=None, header=True): inforesources ON cards.inforesources = inforesources.id LEFT OUTER JOIN coord_type ON cards.coord_type = coord_type.id - WHERE - cards.species IN (%s) - ''' % ", ".join([str(num) for num in species_id]) + ''' + + if taxon_list: + species = Taxon.species_by_taxon(taxon_list) + species_id = [t['id'] for t in species] + qs_where = ' WHERE cards.species IN (%s)' % ", ".join([str(num) for num in species_id]) + qs += qs_where + cards = dbsession.query(Cards).from_statement(qs).all() dbsession.close() diff --git a/nextgisbio/views/cards.py b/nextgisbio/views/cards.py index 9c52850c..2eca24cc 100644 --- a/nextgisbio/views/cards.py +++ b/nextgisbio/views/cards.py @@ -94,16 +94,16 @@ def cards_download(request): return Response() try: - #taxon_list -- список, аналогичный querystring в points_text + # taxon_list -- список, аналогичный querystring в points_text # (taxon_id1,taxon_id2) taxons = request.params['taxon_list'] - if taxons == 'root': - taxon_list = None - elif taxons != '': + if taxons != '': taxons = urllib.unquote(taxons) taxons = taxons.split(',') taxons = [t.split('_') for t in taxons] - taxon_list = [id for (t,id) in taxons] + taxon_list = [id for (t, id) in taxons] + if any('root' in s for s in taxon_list): + taxon_list = None else: taxon_list = None except KeyError: @@ -150,8 +150,8 @@ def cards_download(request): print "Creating Name field failed.\n" #Заполним данными - lon_idx, lat_idx = 37, 38 # номера полей lat,lon в cards - for row in cards[1:]: # пропустили загловки + lon_idx, lat_idx = 36, 37 # номера полей lat,lon в cards + for row in cards[1:]: # пропустили загловки row = [try_encode(v, 'cp1251') for v in row] x = row[lon_idx] y = row[lat_idx]