Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
parser = reqparse.RequestParser()
parser.add_argument('num', type=int, default=1,
help='Number of return results cannot be parsed')
parser.add_argument('near', type=GeoPoint,
help='Near argument could not be parsed')
parser.add_argument('assign', type=int, default=1,
help='Assign could not be parsed')
args = parser.parse_args()
# By default, we return a single task, but no more than 10
num = min(args['num'], 10)
assign = args['assign']
near = args['near']
coordWKT = 'POINT(%s %s)' % (near.lat, near.lon)
if near:
task_query = Task.query.filter(Task.location.ST_Intersects(
ST_Buffer(coordWKT, app.config["NEARBUFFER"]))).limit(num)
task_list = [task for task in task_query
if challenge._get_task_available(task)]
else:
task_list = [get_random_task(challenge) for i in range(num)]
task_list = [task for task in task_list if task]
if assign:
for task in task_list:
action = Action(task.id, "assigned", osmid)
task.current_state = action
db.session.add(action)
db.session.add(task)
db.session.commit()
tasks = [{'id': task.identifier,
'location': dumps(to_shape(task.location)),
'manifest': task.manifest} for task in task_list]
for query in get_debug_queries():
def generate_geom_filters(geometry, Pois):
filters, geom = [], None
if 'bbox' in geometry and 'geom' not in geometry:
geom = geometry['bbox'].wkt
filters.append(
geo_func.ST_DWithin(geo_func.ST_Buffer(type_coerce(geom, Geography), geometry['buffer']), Pois.geom, 0))
elif 'bbox' in geometry and 'geom' in geometry:
geom_bbox = geometry['bbox'].wkt
geom = geometry['geom'].wkt
filters.append( # in bbox
geo_func.ST_DWithin(
geo_func.ST_Intersection(geo_func.ST_Buffer(type_coerce(geom, Geography), geometry['buffer']),
type_coerce(geom_bbox, Geography)), Pois.geom, 0))
elif 'bbox' not in geometry and 'geom' in geometry:
geom = geometry['geom'].wkt
filters.append( # buffer around geom
geo_func.ST_DWithin(geo_func.ST_Buffer(type_coerce(geom, Geography), geometry['buffer']), Pois.geom, 0)
)
return filters, geom
help='longitude could not be parsed')
parser.add_argument('lat', type=float,
help='longitude could not be parsed')
parser.add_argument('assign', type=int, default=1,
help='Assign could not be parsed')
args = parser.parse_args()
osmid = session.get('osm_id')
assign = args['assign']
lon = args['lon']
lat = args['lat']
task = None
if lon and lat:
coordWKT = 'POINT(%s %s)' % (lat, lon)
task = Task.query.filter(Task.location.ST_Intersects(
ST_Buffer(coordWKT, app.config["NEARBUFFER"]))).first()
if task is None: # we did not get a lon/lat or there was no task close
# If no location is specified, or no tasks were found, gather
# random tasks
task = get_random_task(challenge)
# If no tasks are found with this method, then this challenge
# is complete
if task is None:
if not user_area_is_defined():
# send email and deactivate challenge only when
# there are no more tasks for the entire challenge,
# not if the user has defined an area to work on.
subject = "Challenge {} is complete".format(challenge.slug)
body = "{challenge} has no remaining tasks"
" on server {server}".format(
challenge=challenge.title,
server=url_for('index', _external=True))
# Try to get difficulty from argument, or users preference
difficulty = args.get('difficulty')
lon = args.get('lon')
lat = args.get('lat')
radius = args.get('radius')
# get the list of challenges meeting the criteria
query = db.session.query(Challenge)
if difficulty is not None:
query = query.filter_by(difficulty=difficulty)
if lon is not None and lat is not None and radius is not None:
print "got lon, lat, rad: {lon}, {lat}, {rad}".format(lon=lon, lat=lat, rad=radius)
query = query.filter(
Challenge.polygon.ST_Contains(
ST_Buffer('POINT({lon} {lat})'.format(lon=lon, lat=lat),
radius)))
challenges = query.all()
return challenges