Skip to content
Snippets Groups Projects
Commit 88d416ff authored by Dave Welsh's avatar Dave Welsh
Browse files

Added files from upload service.

parent 74baa23f
No related branches found
No related tags found
No related merge requests found
from flask import Flask
from flask import jsonify
from flask import request
from flask import render_template
from s3provider import Provider
from fake_model import LearningModel as Model
import uuid
app = Flask(__name__)
app.config['MAX_CONTENT_LENGTH'] = 1024 * 1024 * 1000 * 20
app.config['JSON_SORT_KEYS'] = False
VALID_EXTENSIONS = [
'tiff',
'png',
'tif'
]
PREFIX = 'dpath'
@app.route(f'/{PREFIX}/ping', methods=['GET'])
def ping() :
return 'pong'
@app.route(f'/{PREFIX}/')
def home():
return render_template('home.html')
@app.route(f'/{PREFIX}/report/<int:report_id>')
def get_report(report_id) :
return jsonify(provider.get_report(report_id))
@app.route(f'/{PREFIX}/report/image', methods=['POST'])
def upload_image():
response = validate_request(request)
if response.status_code == 400:
return response
provider = Provider()
id = uuid.uuid1()
provider.save_binary(request.files['file'], id)
response = jsonify(Model(id).start())
response.status_code = 201
return response
def validate_request(request):
response = jsonify({'message' : 'File successfully uploaded'})
response.status_code = 201
if 'file' not in request.files:
response = jsonify({'message' : 'No file part in the request'})
response.status_code = 400
return response
file = file = request.files['file']
if invalid_extension(file.filename.rsplit('.', 1)[1].lower()):
response = jsonify({'message' : 'Allowed file types are png, tiff'})
response.status_code = 400
return response
if invalid_filename(file):
response = jsonify({'message' : 'No file selected for uploading'})
response.status_code = 400
return response
def invalid_extension(extension) :
return extension not in VALID_EXTENSIONS
def invalid_filename(file):
return file.filename == ''
from datetime import datetime
from collections import OrderedDict
import random
class LearningModel:
def __init__(self, file_path):
self.file_path = file_path
def start(self):
now = datetime.now()
predictions = self.__predictions()
diagnosis = 'Severe' if predictions['severe'] > predictions['mild'] else 'Mild'
response = OrderedDict()
response['id'] = self.file_path
response['runDate'] = now.strftime("%d/%m/%Y %H:%M:%S")
response['diagnosis'] = diagnosis
response['chipPredictions'] = predictions
print(response)
return response
def __predictions(self):
mild = random.randint(0, 1000)
severe = random.randint(0, 1000)
return {
"mild": mild,
"severe": severe
}
\ No newline at end of file
import boto3
BUCKET_NAME = 'digpath-cache'
FOLDER_NAME = 'uploadedImages'
class Provider:
def save_binary(self, data, id):
s3 = boto3.resource('s3')
object = s3.Object(BUCKET_NAME, f'{FOLDER_NAME}/{id}')
object.put(Body=data)
def save_local_file(self, file_path):
s3 = boto3.client('s3')
file_name = file_path.split('/')[-1]
new_report = s3.upload_object(file_path, BUCKET_NAME, FOLDER_NAME + '/' + file_name)
result = new_report.put()
return result
if __name__ == "__main__":
provider = Provider()
provider.save_local_file('/home/ec2-user/efs/repos/upload-service/reportImage1234.png')
\ No newline at end of file
from faker import Faker
fake = Faker()
def create_report(s3_path):
report = {
"id": id,
"matchRate" : 75.89,
"status": "Running",
"runDate": fake.date_between(start_date='-30d', end_date='today')
}
return report
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment