예제 #1
0
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
예제 #2
0
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
예제 #3
0
    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
예제 #4
0
    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'))
예제 #5
0
    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
예제 #6
0
    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
예제 #7
0
	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
예제 #8
0
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
예제 #9
0
	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
예제 #10
0
	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
예제 #11
0
	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'))
예제 #12
0
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
예제 #13
0
	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
예제 #14
0
    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
예제 #15
0
    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'))