DatasetUpdate / app.py
clone3's picture
Update app.py
cdfb88f verified
raw
history blame
2.44 kB
import os
import json
import shutil
import tempfile
import uvicorn
from datetime import datetime
from flask import Flask, request, jsonify
from huggingface_hub import login, HfApi
from werkzeug.utils import secure_filename
app = Flask(__name__)
# Load environment variables
HF_TOKEN = os.getenv("HF_TOKEN")
REPO_ID = os.getenv("HF_REPO_ID")
# Initialize Hugging Face API
login(token=HF_TOKEN)
api = HfApi()
@app.route('/upload', methods=['POST'])
def upload_image():
try:
# Check if required data is present
if 'image' not in request.files or 'guid' not in request.form or 'ip' not in request.form:
return jsonify({"error": "Missing image, guid, or ip"}), 400
image = request.files['image']
guid = secure_filename(request.form['guid']) # Sanitize GUID
ip = request.form['ip']
# Validate image
if not image or not image.filename:
return jsonify({"error": "No valid image provided"}), 400
# Create temporary directory
with tempfile.TemporaryDirectory() as temp_dir:
# Create images folder
temp_image_dir = os.path.join(temp_dir, "images")
os.makedirs(temp_image_dir, exist_ok=True)
# Save image with guid.jpg extension
temp_image_path = os.path.join(temp_image_dir, f"{guid}.jpg")
image.save(temp_image_path)
# Create metadata
path_in_repo = f"data/{guid}.jpg"
metadata = {
"file_name": path_in_repo,
"guid": guid,
"ip": ip,
"upload_timestamp": datetime.utcnow().isoformat(),
}
# Write metadata to metadata.jsonl
metadata_file = os.path.join(temp_dir, "metadata.jsonl")
with open(metadata_file, "a") as f:
f.write(json.dumps(metadata) + "\n")
# Upload to Hugging Face
api.upload_folder(
folder_path=temp_dir,
path_in_repo="",
repo_id=REPO_ID,
repo_type="dataset"
)
return jsonify({"message": "Image and metadata uploaded successfully"}), 200
except Exception as e:
return jsonify({"error": str(e)}), 500
def start_server(port: int = 7860):
uvicorn.run(
"app:app",
host="0.0.0.0",
port=port,
)
if __name__ == "__main__":
start_server()