Commit 82f781c4 authored by Herman Andersen Dyrkorn's avatar Herman Andersen Dyrkorn
Browse files

renamed file to edit salamander, combined editsalamander and image endpoint

parent 4a65aeb2
......@@ -11,7 +11,7 @@ app = Flask(__name__)
app.config['SECRET_KEY'] = 'randomchangethisshit'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database/database.db'
app.config['JWT_AUTH_USERNAME_KEY'] = 'email'
app.config['JWT_ACCESS_TOKEN_EXPIRES'] = 5 * 3600
app.config['JWT_ACCESS_TOKEN_EXPIRES'] = 12 * 3600
db = SQLAlchemy(app)
jwt = JWTManager(app)
bcrypt = Bcrypt(app)
......@@ -24,13 +24,12 @@ from api.endpoints.user import UserEndpoint
from api.endpoints.location import LocationEndpoint
from api.endpoints.manageuser import AdminManageUser
from api.endpoints.verifypassword import VerifyPassword
from api.endpoints.pendingusers import AdminPendingUsers
from api.endpoints.salamander import SalamanderEndpoint
from api.endpoints.salamanders import SalamandersEndpoint
from api.endpoints.salamanderimageid import SalamanderImageEndpoint
from api.endpoints.editsalamander import EditSalamander
from api.endpoints.pendingusers import AdminPendingUsers
from api.endpoints.matchsalamander import MatchSalamander
from api.endpoints.salamanders import SalamandersEndpoint
from api.endpoints.findsalamanderinfo import FindSalamanderInfo
from api.endpoints.salamanderclass import SalamanderClass
api.add_resource(Login, "/login")
......@@ -39,9 +38,8 @@ api.add_resource(LocationEndpoint, "/location")
api.add_resource(AdminManageUser, "/manageUsers")
api.add_resource(VerifyPassword, "/verifyPassword")
api.add_resource(AdminPendingUsers, "/pendingUsers")
api.add_resource(SalamandersEndpoint, "/salamanders/<location_name>")
api.add_resource(SalamanderEndpoint, "/salamander/<salamander_id>")
api.add_resource(SalamanderImageEndpoint, "/salamanderImage/<salamander_id>/<image_id>")
api.add_resource(MatchSalamander, "/matchSalamander")
api.add_resource(FindSalamanderInfo, "/findSalamanderInfo")
api.add_resource(SalamanderClass, "/editSalamander")
api.add_resource(SalamanderEndpoint, "/salamander/<salamander_id>")
api.add_resource(SalamandersEndpoint, "/salamanders/<location_name>")
api.add_resource(EditSalamander, "/editSalamander", "/editSalamander/<salamander_id>/<image_id>")
......@@ -9,11 +9,66 @@ from api.endpoints.matchsalamander import sanitize_number_str
import glob
from shutil import move
from path_constants import _ACCESS_DATABASE
from image_encoder.image_encoder import *
import cv2
class SalamanderClass(Resource):
class EditSalamander(Resource):
decorators = [limiter.limit("60/minute")]
@staticmethod
@jwt_required
def get(salamander_id, image_id):
user_id = get_jwt_identity()
user = db.session.query(User).filter_by(id=user_id).first()
if user.admin:
with _ACCESS_DATABASE:
salamander = db.session.query(Salamander).filter_by(id=salamander_id).first()
salamander_growth = db.session.query(SalamanderGrowth).filter_by(salamander_id=salamander.id,
image_id=image_id).first()
if salamander and salamander_growth:
location = db.session.query(Location).filter_by(id=salamander.location_id).first()
salamander_images = []
path_to_salamander_images = os.path.join("./images", location.name, salamander.species,
salamander.sex, str(salamander.id))
list_of_paths = glob.glob(os.path.join(path_to_salamander_images, '*.*'))
for path in list_of_paths:
basename = os.path.basename(path)
if basename.__contains__(str(image_id)):
image = cv2.imread(path)
if not basename.__contains__("str"): # Scale only original to set size
height, width, _ = image.shape
desired_long_side = 320
scaling_factor = 1
if width > height:
scaling_factor = desired_long_side / width
else:
scaling_factor = desired_long_side / height
new_dim = (int(width * scaling_factor), int(height * scaling_factor))
# resize image
image = cv2.resize(image, new_dim, interpolation=cv2.INTER_AREA)
_, buffer = cv2.imencode('.jpg', image)
encoded = base64.b64encode(buffer)
image_data = {"url": "data:image/png;base64," + encoded.decode()}
salamander_images.append(image_data)
return jsonify({"images": salamander_images, "length": salamander_growth.length,
"weight": salamander_growth.weight, "imageId": image_id, "location": location.name,
"salamanderId": salamander.id, "sex": salamander.sex, "species": salamander.species,
'status': 200})
else:
return jsonify({"message": "no salamander with this id or no growth data", 'status': 400})
else:
return jsonify({"message": "no access to this endpoint", 'status': 400})
@staticmethod
@jwt_required
def delete():
......
import sys
from flask import jsonify
from flask_jwt_extended import jwt_required, get_jwt_identity
from flask_restful import Resource
from api import db, limiter
from api.models.dbmodels import Location, User, Salamander, SalamanderGrowth
import os
import glob
import cv2
import sys
from image_encoder.image_encoder import *
from path_constants import _ACCESS_DATABASE
import cv2
# get one specific image on a specific salamander based on s_id and i_id
class SalamanderImageEndpoint(Resource):
decorators = [limiter.limit("60/minute")]
@staticmethod
@jwt_required
def get(salamander_id, image_id):
user_id = get_jwt_identity()
user = db.session.query(User).filter_by(id=user_id).first()
if user.admin:
with _ACCESS_DATABASE:
salamander = db.session.query(Salamander).filter_by(id=salamander_id).first()
salamander_growth = db.session.query(SalamanderGrowth).filter_by(salamander_id=salamander.id,
image_id=image_id).first()
if salamander and salamander_growth:
location = db.session.query(Location).filter_by(id=salamander.location_id).first()
salamander_images = []
path_to_salamander_images = os.path.join("./images", location.name, salamander.species,
salamander.sex, str(salamander.id))
list_of_paths = glob.glob(os.path.join(path_to_salamander_images, '*.*'))
for path in list_of_paths:
basename = os.path.basename(path)
if basename.__contains__(str(image_id)):
image = cv2.imread(path)
if not basename.__contains__("str"): #Scale only original to set size
height, width, _ = image.shape
print(sys.getsizeof(image))
desired_long_side = 320
scaling_factor = 1
if width > height:
scaling_factor = desired_long_side/width
else:
scaling_factor = desired_long_side/height
new_dim = (int(width*scaling_factor), int(height*scaling_factor))
# resize image
image = cv2.resize(image, new_dim, interpolation=cv2.INTER_AREA)
print(sys.getsizeof(image))
_, buffer = cv2.imencode('.jpg', image)
encoded = base64.b64encode(buffer)
image_data = {"url": "data:image/png;base64," + encoded.decode()}
salamander_images.append(image_data)
return jsonify({"images": salamander_images, "length": salamander_growth.length,
"weight": salamander_growth.weight, "imageId": image_id, "location": location.name,
"salamanderId": salamander.id, "sex": salamander.sex, "species": salamander.species,
'status': 200})
else:
return jsonify({"message": "no salamander with this id or no growth data", 'status': 400})
else:
return jsonify({"message": "no access to this endpoint", 'status': 400})
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment