Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -22,9 +22,8 @@ app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
|
|
22 |
HF_API_TOKEN = os.getenv('HF_API_TOKEN') # Load token from environment variable
|
23 |
HF_API_URL = "https://api-inference.huggingface.co/models/facebook/detr-resnet-50" # Example model for object detection
|
24 |
|
25 |
-
#
|
26 |
-
|
27 |
-
INSTAGRAM_API_URL = "https://graph.instagram.com/v21.0/me/media"
|
28 |
|
29 |
def query_hugging_face(image_data):
|
30 |
if not HF_API_TOKEN:
|
@@ -32,7 +31,6 @@ def query_hugging_face(image_data):
|
|
32 |
return {"error": "Hugging Face API token not set. Please set the HF_API_TOKEN environment variable."}
|
33 |
try:
|
34 |
session = requests.Session()
|
35 |
-
# Configure retries: 3 attempts, backoff factor of 1s, retry on 502/503/504
|
36 |
retries = Retry(total=3, backoff_factor=1, status_forcelist=[502, 503, 504])
|
37 |
session.mount('https://', HTTPAdapter(max_retries=retries))
|
38 |
headers = {"Authorization": f"Bearer {HF_API_TOKEN}"}
|
@@ -45,37 +43,35 @@ def query_hugging_face(image_data):
|
|
45 |
logging.error(f"Failed to connect to Hugging Face API: {str(e)}")
|
46 |
return {"error": f"Failed to connect to Hugging Face API: {str(e)}"}
|
47 |
|
48 |
-
def
|
49 |
-
if not
|
50 |
-
logging.error("
|
51 |
-
return {"error": "
|
52 |
try:
|
53 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
54 |
session = requests.Session()
|
55 |
retries = Retry(total=3, backoff_factor=1, status_forcelist=[502, 503, 504])
|
56 |
session.mount('https://', HTTPAdapter(max_retries=retries))
|
57 |
-
|
58 |
-
|
59 |
-
logging.debug(f"Sending media creation request to Instagram: {media_url}")
|
60 |
-
response = session.post(media_url, timeout=10)
|
61 |
response.raise_for_status()
|
62 |
-
|
63 |
-
|
64 |
-
if 'id' not in media_data:
|
65 |
-
logging.error(f"Failed to create media: {media_data}")
|
66 |
-
return {"error": f"Failed to create media: {media_data}"}
|
67 |
-
|
68 |
-
# Step 2: Publish media
|
69 |
-
media_id = media_data['id']
|
70 |
-
publish_url = f"https://graph.instagram.com/v21.0/me/media_publish?creation_id={media_id}&access_token={INSTAGRAM_ACCESS_TOKEN}"
|
71 |
-
logging.debug(f"Sending publish request to Instagram: {publish_url}")
|
72 |
-
publish_response = session.post(publish_url, timeout=10)
|
73 |
-
publish_response.raise_for_status()
|
74 |
-
logging.debug("Instagram upload successful.")
|
75 |
return {"status": "success"}
|
76 |
except requests.exceptions.RequestException as e:
|
77 |
-
logging.error(f"Failed to
|
78 |
-
return {"error": f"Failed to
|
79 |
|
80 |
@app.route('/')
|
81 |
def index():
|
@@ -110,19 +106,19 @@ def capture():
|
|
110 |
logging.error(f"Error in capture: {str(e)}")
|
111 |
return jsonify({'status': 'error', 'message': str(e)})
|
112 |
|
113 |
-
@app.route('/
|
114 |
-
def
|
115 |
try:
|
116 |
image_url = request.form['image_url']
|
117 |
if not image_url.startswith('/static/captures/'):
|
118 |
return jsonify({'status': 'error', 'message': 'Invalid image path.'})
|
119 |
|
120 |
-
result =
|
121 |
if 'error' in result:
|
122 |
return jsonify({'status': 'error', 'message': result['error']})
|
123 |
return jsonify({'status': 'success'})
|
124 |
except Exception as e:
|
125 |
-
logging.error(f"Error in
|
126 |
return jsonify({'status': 'error', 'message': str(e)})
|
127 |
|
128 |
@app.route('/test_connectivity')
|
|
|
22 |
HF_API_TOKEN = os.getenv('HF_API_TOKEN') # Load token from environment variable
|
23 |
HF_API_URL = "https://api-inference.huggingface.co/models/facebook/detr-resnet-50" # Example model for object detection
|
24 |
|
25 |
+
# Zapier webhook settings
|
26 |
+
ZAPIER_WEBHOOK_URL = os.getenv('ZAPIER_WEBHOOK_URL') # Load webhook URL from environment variable
|
|
|
27 |
|
28 |
def query_hugging_face(image_data):
|
29 |
if not HF_API_TOKEN:
|
|
|
31 |
return {"error": "Hugging Face API token not set. Please set the HF_API_TOKEN environment variable."}
|
32 |
try:
|
33 |
session = requests.Session()
|
|
|
34 |
retries = Retry(total=3, backoff_factor=1, status_forcelist=[502, 503, 504])
|
35 |
session.mount('https://', HTTPAdapter(max_retries=retries))
|
36 |
headers = {"Authorization": f"Bearer {HF_API_TOKEN}"}
|
|
|
43 |
logging.error(f"Failed to connect to Hugging Face API: {str(e)}")
|
44 |
return {"error": f"Failed to connect to Hugging Face API: {str(e)}"}
|
45 |
|
46 |
+
def send_to_zapier(image_path):
|
47 |
+
if not ZAPIER_WEBHOOK_URL:
|
48 |
+
logging.error("Zapier webhook URL not set.")
|
49 |
+
return {"error": "Zapier webhook URL not set. Please set the ZAPIER_WEBHOOK_URL environment variable."}
|
50 |
try:
|
51 |
+
# Read the image file
|
52 |
+
with open(image_path, "rb") as f:
|
53 |
+
image_data = f.read()
|
54 |
+
encoded_image = base64.b64encode(image_data).decode('utf-8')
|
55 |
+
|
56 |
+
# Prepare data for Zapier
|
57 |
+
payload = {
|
58 |
+
'image': encoded_image,
|
59 |
+
'filename': os.path.basename(image_path),
|
60 |
+
'content_type': 'image/jpeg'
|
61 |
+
}
|
62 |
+
|
63 |
+
# Send to Zapier webhook
|
64 |
session = requests.Session()
|
65 |
retries = Retry(total=3, backoff_factor=1, status_forcelist=[502, 503, 504])
|
66 |
session.mount('https://', HTTPAdapter(max_retries=retries))
|
67 |
+
logging.debug(f"Sending image to Zapier webhook: {ZAPIER_WEBHOOK_URL}")
|
68 |
+
response = session.post(ZAPIER_WEBHOOK_URL, json=payload, timeout=10)
|
|
|
|
|
69 |
response.raise_for_status()
|
70 |
+
logging.debug("Image sent to Zapier successfully.")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
71 |
return {"status": "success"}
|
72 |
except requests.exceptions.RequestException as e:
|
73 |
+
logging.error(f"Failed to send to Zapier: {str(e)}")
|
74 |
+
return {"error": f"Failed to send to Zapier: {str(e)}"}
|
75 |
|
76 |
@app.route('/')
|
77 |
def index():
|
|
|
106 |
logging.error(f"Error in capture: {str(e)}")
|
107 |
return jsonify({'status': 'error', 'message': str(e)})
|
108 |
|
109 |
+
@app.route('/upload_zapier', methods=['POST'])
|
110 |
+
def upload_zapier():
|
111 |
try:
|
112 |
image_url = request.form['image_url']
|
113 |
if not image_url.startswith('/static/captures/'):
|
114 |
return jsonify({'status': 'error', 'message': 'Invalid image path.'})
|
115 |
|
116 |
+
result = send_to_zapier(image_url.lstrip('/'))
|
117 |
if 'error' in result:
|
118 |
return jsonify({'status': 'error', 'message': result['error']})
|
119 |
return jsonify({'status': 'success'})
|
120 |
except Exception as e:
|
121 |
+
logging.error(f"Error in upload_zapier: {str(e)}")
|
122 |
return jsonify({'status': 'error', 'message': str(e)})
|
123 |
|
124 |
@app.route('/test_connectivity')
|