def get_fac_data():
session = Session()
filter_ = json.loads(request.args.get('filter', '{}'))
query = session.query(Facility)
if filter_:
if filter_.get('group', None) is not None:
query = query.filter(Facility.groups.any(Group.name.like(filter_['group'])))
if filter_.get('latMax', None) is not None:
query = query.filter(Facility.lat_min < float(filter_['latMax']))
if filter_.get('latMin', None) is not None:
query = query.filter(Facility.lat_max > float(filter_['latMin']))
if filter_.get('lonMax', None) is not None:
query = query.filter(Facility.lon_min < float(filter_['lonMax']))
if filter_.get('lonMin', None) is not None:
query = query.filter(Facility.lon_max > float(filter_['lonMin']))
if filter_.get('facility_type', None) is not None:
query = query.filter(Facility.facility_type.like(filter_['facility_type']))
if filter_.get('keywords', None) is not None:
keys_raw = filter_['keywords'].lower().split(',')
keys = [key.strip(' ') for key in keys_raw]
key_filter = [or_(literal(key).contains(func.lower(Facility.name)),
func.lower(Facility.name).contains(key),
func.lower(Facility.description).contains(key)) for key in keys]
query = query.filter(and_(*key_filter))
if filter_.get('count', None) is None:
facs = query.limit(50).all()
else:
all_facs = query.all()
if len(all_facs) > filter_['count'] + 50:
facs = all_facs[filter_['count']:filter_['count'] + 50]
else:
facs = all_facs[filter_['count']:]
dicts = []
for fac in facs:
dict_ = fac.__dict__.copy()
dict_.pop('_sa_instance_state', None)
dicts += [dict_]
Session.remove()
return jsonify(success=True, data=dicts)
评论列表
文章目录