Spaces:
Sleeping
Sleeping
File size: 3,304 Bytes
b7d08bd 0adfcb9 b7d08bd efbda21 b7d08bd 9d283dd 67111f2 9d283dd 67111f2 9d283dd 0e6629c 9d283dd 67111f2 0e6629c 9d283dd 67111f2 0e6629c 67111f2 9d283dd f213592 9d283dd 67111f2 b7d08bd f213592 b7d08bd efbda21 9d283dd 67111f2 9d283dd 67111f2 9d283dd 67111f2 b7d08bd cb6a777 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
from flask import Flask, render_template, request, jsonify
import os
import base64 # Add this import
import requests
import logging
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
# Configure logging
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
app = Flask(__name__)
# Configuration
UPLOAD_FOLDER = 'static/captures'
os.makedirs(UPLOAD_FOLDER, exist_ok=True)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
# Zapier webhook settings
ZAPIER_WEBHOOK_URL = os.getenv('ZAPIER_WEBHOOK_URL') # Load webhook URL from environment variable
def send_to_zapier(image_path):
if not ZAPIER_WEBHOOK_URL:
logging.error("Zapier webhook URL not set.")
return {"error": "Zapier webhook URL not set. Please set the ZAPIER_WEBHOOK_URL environment variable."}
try:
payload = {
'image_url': request.url_root + image_path,
'filename': os.path.basename(image_path),
'content_type': 'image/jpeg'
}
session = requests.Session()
retries = Retry(total=3, backoff_factor=1, status_forcelist=[502, 503, 504])
session.mount('https://', HTTPAdapter(max_retries=retries))
logging.debug(f"Sending image URL to Zapier webhook: {ZAPIER_WEBHOOK_URL}")
response = session.post(ZAPIER_WEBHOOK_URL, json=payload, timeout=10)
response.raise_for_status()
logging.debug("Image URL sent to Zapier successfully.")
return {"status": "success"}
except requests.exceptions.RequestException as e:
logging.error(f"Failed to send to Zapier: {str(e)}")
if e.response is not None:
logging.error(f"Response details: {e.response.text}")
return {"error": f"Failed to send to Zapier: {str(e)}"}
@app.route('/')
def index():
return render_template('index.html')
@app.route('/capture', methods=['POST'])
def capture():
try:
data = request.form['image']
header, encoded = data.split(",", 1)
binary_data = base64.b64decode(encoded)
filename = f"capture_{len(os.listdir(app.config['UPLOAD_FOLDER'])) + 1}.jpg"
filepath = os.path.join(app.config['UPLOAD_FOLDER'], filename)
with open(filepath, "wb") as f:
f.write(binary_data)
image_url = f"/{filepath}"
return jsonify({
'status': 'success',
'image_url': image_url
})
except Exception as e:
logging.error(f"Error in capture: {str(e)}")
return jsonify({'status': 'error', 'message': str(e)})
@app.route('/upload_zapier', methods=['POST'])
def upload_zapier():
try:
image_url = request.form['image_url']
if not image_url.startswith('/static/captures/'):
return jsonify({'status': 'error', 'message': 'Invalid image path.'})
result = send_to_zapier(image_url.lstrip('/'))
if 'error' in result:
return jsonify({'status': 'error', 'message': result['error']})
return jsonify({'status': 'success'})
except Exception as e:
logging.error(f"Error in upload_zapier: {str(e)}")
return jsonify({'status': 'error', 'message': str(e)})
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=7860) |