Sindbad~EG File Manager

Current Path : /home/numerotech/workshops.numerotech.com/common_workshop_reg/core/library/
Upload File :
Current File : //home/numerotech/workshops.numerotech.com/common_workshop_reg/core/library/Awsupload.py

from core import app
from flask import Flask, request, Blueprint, jsonify, redirect, url_for,flash, render_template,session,Response,jsonify,json
from werkzeug.utils import secure_filename
from os.path import join, dirname,isfile, realpath
import datetime
from datetime import timedelta,date,datetime
from .. import Helper
import os
import boto3, botocore
from botocore.exceptions import ClientError

import base64
from PIL import Image
from io import StringIO
import io
from flask import Response
import ast

from core.model.BOModel import BOModel
from core.model.UserModel import UserModel
import requests
class AWSUpload:

	def AwsFileUpload(self,user_id,file,image_name,foldername):
		now             = datetime.now()
		curr_dt         = now.strftime("%Y-%m-%d %H:%M:%S")
		pg_cert_name    = None
		pg_cert_path    = None
		bucket          = "delegateapp"
		try:
			if file:
				if file.filename:
					filename        = secure_filename(file.filename)
					split_tup       = os.path.splitext(filename)
					file_name       = split_tup[0]
					file_extension  = split_tup[1]
					filename_str    = str(image_name)+ datetime.now().strftime("%Y%m%d-%H%M%S") +file_extension
					if " " in filename_str :
						filename_str = filename_str.replace(" ","")

					user_id      = str(user_id) if user_id else None
					acl          = "public-read"
					s3           = boto3.client("s3",aws_access_key_id='AKIAILLDAQ7NFUMVOYLQ',aws_secret_access_key='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')
					response     = s3.upload_fileobj(file, bucket,foldername + filename_str, ExtraArgs={"ACL": acl,"ContentType": file.content_type})
					data_1       = {'bucketname' : bucket,'foldername':foldername,'file_name':filename_str+"?"+str(Helper.getcurrenttimestamp()),'msg':'Image successfully uploded','file_extension':file_extension,'status':1} 
					file_path    = "https://delegateapp.s3.ap-southeast-1.amazonaws.com/"+foldername
					pg_cert_path = file_path	
					pg_cert_name = filename_str
					
					msg = "success"
					return_data = { "pg_cert_name" : pg_cert_name,"pg_cert_path" : pg_cert_path,  "msg" : msg, "status" : 1 }	

					
				else :
					msg = "File name is not exists."
					return_data = { "pg_cert_name" : pg_cert_name,"pg_cert_path" : pg_cert_path,  "msg" : msg, "status" : 2 }			
					
				return json.dumps(return_data,default =str)
				
					
			else :
				msg = "File not exists. Please try again"
				return_data = { "pg_cert_name" : pg_cert_name,"pg_cert_path" : pg_cert_path,  "msg" : msg, "status" : 3 }	
			
			return json.dumps(return_data,default =str)
		except ClientError as e:
			return_data = { "pg_cert_name" : pg_cert_name,"pg_cert_path" : pg_cert_path,  "msg" : str(e), "status" : 401 }
			return json.dumps(return_data,default =str)
			
			
	# AWS delegate photo file  upload start
	def AwsDelegatePhotoFileUpload(self,delegate_id,full_name,image_data,conf_key,image_data_ext):
		now             = datetime.now()
		curr_dt         = now.strftime("%Y-%m-%d %H:%M:%S")
		image_name      = None
		image_path      = None
		bucket          = "delegateapp"
		try:
			if image_data:
				file_extension  = image_data_ext if '.' in image_data_ext else '.'+image_data_ext
				filename_str    = str(delegate_id)+"-"+str(full_name)+"-"+datetime.now().strftime("%Y%m%d-%H%M%S") +str(file_extension)
				
				if " " in filename_str :
					filename_str = filename_str.replace(" ","")

				foldername   = "delegate_photo/"+str(conf_key)+"/"
				acl          = "public-read"
				s3           = boto3.client("s3",aws_access_key_id='AKIAILLDAQ7NFUMVOYLQ',aws_secret_access_key='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')
				

				image_data = base64.b64decode(image_data.split(',')[1])
				image      = Image.open(io.BytesIO(image_data))

				if image.mode == 'RGBA':
					image = image.convert('RGB')

				image.save(os.path.join('core/static/temp_images', filename_str))
				img_path = os.path.join('core/static/temp_images/'+ filename_str)
				with open(img_path, 'rb') as f:
					response = s3.upload_fileobj(f,bucket,foldername+filename_str, ExtraArgs={"ACL": acl, "ContentType": "image/jpeg"})
				os.remove('core/static/temp_images/'+ filename_str) 
				data_1     = {'bucketname' : bucket,'foldername':foldername,'file_name':filename_str+"?"+str(Helper.getcurrenttimestamp()),'msg':'Image successfully uploded','file_extension':file_extension,'status':1} 
				foldername   = "delegate_photo/"+str(conf_key)
				file_path  = "https://delegateapp.s3.ap-southeast-1.amazonaws.com/"+foldername

				image_path = file_path	
				image_name = filename_str
				
				msg = "Added Successfully"
				return_data = { "image_name" : image_name,"image_path" : image_path,  "msg" : msg, "status" : 1 }	

				
			else :
				msg = "File name is not exists."
				return_data = { "image_name" : image_name,"image_path" : image_path,  "msg" : msg, "status" : 2 }			
			return return_data


			return return_data
		except ClientError as e:
			return_data = { "image_name" : image_name,"image_path" : image_path,  "msg" : str(e), "status" : 401 }
			return return_data
			
			
	# AWS File upload start

	def DelegateImageUpload(self,conf,user_id,delegate_id,full_name,image_data,conf_key,image_data_ext,delegate_image_from_member):
		if image_data is None:
			file_upload = None	
		else:
			file_upload = AWSUpload().AwsDelegatePhotoFileUpload(delegate_id,full_name,image_data,conf_key,image_data_ext)
	
		# If  file upload function call then this block will execute					
		if  file_upload :
			file_upload_msg    = file_upload["msg"]
			file_upload_status = file_upload["status"]
			if file_upload_status  == 1 :
				now           = datetime.now()
				curr_dt       = now.strftime("%Y-%m-%d %H:%M:%S")
				image_path    = file_upload["image_path"] or None
				image_name    = file_upload["image_name"] or None
				file_name     = image_path + image_name
				updated_data  = {'del_img_path':image_path,'del_img_filename':image_name,'updated_at':curr_dt} 
				UserModel().update_delegateUserModel(delegate_id,updated_data)
				# if int(delegate_image_from_member or 0) == 0:
				# # 	pass
				# 	AWSUpload().CallUserProfileUpdateAPI(conf.get('society_id'),user_id,image_name,image_path)
				return "Successfully added"
			else :
				return file_upload_msg
	
	def DeleteDelegateImage(self,delegate_id,conf_key):
		now      = datetime.now()
		curr_dt  = now.strftime("%Y-%m-%d %H:%M:%S")
		da       = UserModel().get_delegate(delegate_id)
		if da is None:
			data = {'msg':'Deleted','status' : 1}
		else:
			if da['del_img_path'] and da['del_img_filename']:
				filepath        = da['del_img_path']
				filename        = da['del_img_filename']
				foldername      = filepath+filename
				foldername      = foldername.replace("https://delegateapp.s3.ap-southeast-1.amazonaws.com/", "")
				s3              = boto3.resource("s3",aws_access_key_id='AKIAILLDAQ7NFUMVOYLQ',aws_secret_access_key='EEudWCsWeCIt/J9/z5m5htmUdGFJNzWFPvNQBIp/')
				response        = s3.Object("delegateapp", foldername).delete()
				updated_data    = {'del_img_path' : None,'del_img_filename':None,'updated_at':curr_dt}
				UserModel().update_delegateUserModel(delegate_id,updated_data)
				data            = {'msg':'Deleted','status' : 1}
			else:
				data = {'msg':'No Record','status':1 }	
		json_data   = json.dumps(data)
		return json_data
		
		
	def CallUserProfileUpdateAPI(self,society_id,user_id,image_name,image_path):
		if int(user_id or 0) > 0:
			url = f"http://profile.numerotech.com/api/profile_photo/{society_id}/{user_id}"
			payload = {'attach_file_name': image_name,'attach_path': image_path}
			files=[]
			headers = {}
			response = requests.request("POST", url, headers=headers, data=payload, files=files)
			print(response.text)
			return "success"
		else:
			return "no user"

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists