def api_put_citation(capture_id): session = db_session() citation_log = session.query(CitationLog).get(capture_id) if citation_log is None: return jsonify({ 'success': False, 'message': 'Citation not found.' }), 404 delegate(session, citation_log, request.form.get('delegate_to', None, type=int)) verify(session, citation_log, bool_option(request.form.get('verify', None))) dismiss(session, citation_log, bool_option(request.form.get('dismiss', None))) session.add(citation_log) session.commit() return jsonify({ 'success': True, 'citation': citation_log_dump(citation_log) }), 200
def api_get_citations_list(timedelta=datetime.timedelta(days=2), since=(datetime.datetime.now() + datetime.timedelta(days=1))): session = db_session() filter_verified = bool_option(request.args.get('verified', None)) filter_dismissed = bool_option(request.args.get('dismissed', None)) filter_delegator = bool_option(request.args.get('delegator', None)) end_dt = since - timedelta q = session.query(CitationLog).\ join(CitationLog.plate).\ join(PlateLog.capture).\ filter(CaptureLog.timestamp.between(end_dt, since)) if filter_verified is not None: q = q.filter(CitationLog.verified.is_(filter_verified)) if filter_dismissed is not None: q = q.filter(CitationLog.dismissed.is_(filter_dismissed)) if filter_delegator is not None: if filter_delegator: q = q.filter(CitationLog.delegate_id.isnot(None)) else: q = q.filter(CitationLog.delegate_id.is_(None)) citations = q.all() citations_repr = [citation_log_dump(c) for c in citations] return jsonify({'citations': citations_repr}), 200
def get(self): session = db_session() _capture_list = session.query(CaptureLog).all() capture_list = [] for capture in _capture_list: #Get necessary capture info and put it in json format c = {'filename': capture.filename, 'plates': []} #Add necessary information about plates and candidates for plate in capture.plates: p = {'id': plate.id, 'candidates': []} for candidate in plate.candidates: p['candidates'].append({ 'license_plate': candidate.license_plate, 'confidence': candidate.confidence }) c['plates'].append(p) capture_list.append(c) return render_template('index.html', capture_list=capture_list, current_user=current_user), 200
def post(self): session = db_session() form = UsernamePasswordForm() user = session.query(User).filter_by( username=form.username.data).first() if form.validate() and user is not None and bcrypt.check_password_hash( user.password, form.password.data): login_user(user) return redirect(url_for('index')) else: if user is None: form.username.errors.append('Invalid username') elif not bcrypt.check_password_hash(user.password, form.password.data): form.password.errors.append('Incorrect password') user_session['signin_form_errors'] = { 'username': form.username.errors, 'password': form.password.errors } return redirect(url_for('signin'))
def get(self): session = db_session() users = [] for u in session.query(User).all(): users.append(u.toDict()) return render_template('admin.html', users=users, current_user=current_user), 200
def post(self): session = db_session() drone_auth = DroneAuth() session.add(drone_auth) session.commit() # response = make_response(drone_auth.key) # response.headers["Content-Disposition"] = "attachment; filename=key.txt" return jsonify({'key': drone_auth.key}), 200
def api_get_citation(capture_id): session = db_session() citation_log = session.query(CitationLog).get(capture_id) if citation_log is None: return jsonify({}), 404 citation = citation_log_dump(citation_log) return jsonify({ 'success': True, 'citation': citation_log_dump(citation_log) }), 200
def post(self): content = request.get_json() if not content.has_key('username') or not content.has_key('password'): return '', 400 session = db_session() user = User(username=content.get('username'), password=bcrypt.generate_password_hash(content.get('password')), is_admin=False) session.add(user) session.commit() return jsonify(user.toDict()), 200
def get(self, user_id): session = db_session() if userId: u = session.query(User).filter_by(id=user_id) if u: return jsonify(u.first().toDict()), 200 else: return '', 404 else: users = [] for u in session.query(User).all(): users.append(u.toDict()) return jsonify(users), 200
def post(self): session = db_session() form = RegisterForm() if form.validate(): user = User(username=form.username.data, password=bcrypt.generate_password_hash(form.password.data), is_admin=False) session.add(user) session.commit() login_user(user) return redirect(url_for('index')) else: user_session['register_form_errors'] = { 'username': form.username.errors, 'password': form.password.errors, 'confirm' : form.confirm.errors } return redirect(url_for('signin'))
def api_search_citation(): session = db_session() start_datetime = datetime_option(request.args.get('start_datetime', None)) end_datetime = datetime_option(request.args.get('end_datetime', None)) license_plate = upperstring_option(request.args.get('license_plate', None)) if not len( filter(lambda x: x is not None, [start_datetime, end_datetime, license_plate])): return jsonify({ 'success': False, 'message': 'No search parameters found.' }), 400 if ((start_datetime is None and end_datetime is not None) or (start_datetime is not None and end_datetime is None)): return jsonify({ 'success': False, 'message': 'There must be a pair of dates & times or none.' }), 400 q = session.query(CitationLog).\ join(CitationLog.plate).\ join(PlateLog.capture) if start_datetime is not None and end_datetime is not None: q = q.order_by(CaptureLog.timestamp.desc()).\ filter(CaptureLog.timestamp.between(start_datetime, end_datetime)) if license_plate is not None: q = q.join(PlateLog.candidates).\ filter(CandidateLog.license_plate == license_plate) citations = q.all() citations_repr = [citation_log_dump(c) for c in citations] return jsonify({'citations': citations_repr}), 200
def patch(self, user_id): content = request.get_json() session = db_session() user = session.query(User).filter_by(id=user_id) if not user: return '', 404 # Admin shouldn't need to change user passwords or usernames # only allowing admins to make others users admins # Might be better to make this a seperate action if content.has_key('is_admin'): if isinstance(content.get('is_admin'), bool): user = user.first() user.is_admin = content.get('is_admin') session.commit() return '', 200 else: return '', 400 else: return '', 304
def get(self): session = db_session() _capture_list = session.query(CaptureLog).all() capture_list = [] for capture in _capture_list: #Get necessary capture info and put it in json format c = {'filename': capture.filename, 'plates': []} #Add necessary information about plates and candidates for plate in capture.plates: p = {'id': plate.id, 'candidates': []} for candidate in plate.candidates: p['candidates'].append({'license_plate': candidate.license_plate, 'confidence': candidate.confidence}) c['plates'].append(p) capture_list.append(c) return render_template('index.html', capture_list=capture_list, current_user=current_user), 200
def post(self): session = db_session() form = UsernamePasswordForm() user = session.query(User).filter_by(username=form.username.data).first() if form.validate() and user is not None and bcrypt.check_password_hash(user.password, form.password.data): login_user(user) return redirect(url_for('index')) else: if user is None: form.username.errors.append('Invalid username') elif not bcrypt.check_password_hash(user.password, form.password.data): form.password.errors.append('Incorrect password') user_session['signin_form_errors'] = { 'username': form.username.errors, 'password': form.password.errors } return redirect(url_for('signin'))