You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
api/app/stub.py

157 lines
4.7 KiB

import pymongo
from datetime import datetime
from config import MONGODB_URL, MONGODB_USERNAME, MONGODB_PASSWORD, MONGODB_DATABASE
from utils import get_password_hash
from PIL import Image
import io
import os
import uuid
client = pymongo.MongoClient(MONGODB_URL, username=MONGODB_USERNAME, password=MONGODB_PASSWORD)
db = client[MONGODB_DATABASE]
# Créer le dossier pour stocker les images s'il n'existe pas
IMAGES_DIR = "images"
if not os.path.exists(IMAGES_DIR):
os.makedirs(IMAGES_DIR)
def create_test_image(color='red', size=(100, 100)):
img = Image.new('RGB', size, color=color)
img_byte_arr = io.BytesIO()
img.save(img_byte_arr, format='JPEG')
img_byte_arr.seek(0)
return img_byte_arr
def save_image(image_data, filename):
filepath = os.path.join(IMAGES_DIR, filename)
with open(filepath, 'wb') as f:
f.write(image_data.getvalue())
return filepath
def populate_data():
users_collection = db["users"]
pins_collection = db["pins"]
images_collection = db["images"]
# Créer les utilisateurs
user1_id = users_collection.insert_one({
"username": "string",
"password": get_password_hash("string")
}).inserted_id
user2_id = users_collection.insert_one({
"username": "test",
"password": get_password_hash("test")
}).inserted_id
# Créer d'abord les pins
pin_a = pins_collection.insert_one({
"title": "Tour Eiffel",
"description": "Description A",
"location": [48.858296, 2.294526],
"files": [],
"user_id": str(user1_id)
})
pin_b = pins_collection.insert_one({
"title": "Mont St Michel",
"description": "Description B",
"location": [48.636111, -1.511389],
"files": [],
"user_id": str(user1_id)
})
pin_x = pins_collection.insert_one({
"title": "Eiffel Tower",
"description": "Description X",
"location": [48.858296, 2.294526],
"files": [],
"user_id": str(user2_id)
})
pin_y = pins_collection.insert_one({
"title": "Mont Saint Michel",
"description": "Description Y",
"location": [48.636111, -1.511389],
"files": [],
"user_id": str(user2_id)
})
# Créer les images de test
image_a = create_test_image(color='red')
image_b = create_test_image(color='blue')
image_x = create_test_image(color='green')
image_y = create_test_image(color='yellow')
# Sauvegarder les images dans le système de fichiers
image_a_path = save_image(image_a, f"{uuid.uuid4()}.jpg")
image_b_path = save_image(image_b, f"{uuid.uuid4()}.jpg")
image_x_path = save_image(image_x, f"{uuid.uuid4()}.jpg")
image_y_path = save_image(image_y, f"{uuid.uuid4()}.jpg")
# Insérer les métadonnées des images dans la base de données avec leur pin_id
image_a_id = images_collection.insert_one({
"path": image_a_path,
"content_type": "image/jpeg",
"exif_date": datetime.now(),
"caption": "Tour Eiffel",
"user_id": str(user1_id),
"pin_id": str(pin_a.inserted_id)
}).inserted_id
image_b_id = images_collection.insert_one({
"path": image_b_path,
"content_type": "image/jpeg",
"exif_date": datetime.now(),
"caption": "Mont St Michel",
"user_id": str(user1_id),
"pin_id": str(pin_b.inserted_id)
}).inserted_id
image_x_id = images_collection.insert_one({
"path": image_x_path,
"content_type": "image/jpeg",
"exif_date": datetime.now(),
"caption": "Eiffel Tower",
"user_id": str(user2_id),
"pin_id": str(pin_x.inserted_id)
}).inserted_id
image_y_id = images_collection.insert_one({
"path": image_y_path,
"content_type": "image/jpeg",
"exif_date": datetime.now(),
"caption": "Mont Saint Michel",
"user_id": str(user2_id),
"pin_id": str(pin_y.inserted_id)
}).inserted_id
# Mettre à jour les pins avec les IDs des images
pins_collection.update_one(
{"_id": pin_a.inserted_id},
{"$set": {"files": [str(image_a_id)]}}
)
pins_collection.update_one(
{"_id": pin_b.inserted_id},
{"$set": {"files": [str(image_b_id)]}}
)
pins_collection.update_one(
{"_id": pin_x.inserted_id},
{"$set": {"files": [str(image_x_id)]}}
)
pins_collection.update_one(
{"_id": pin_y.inserted_id},
{"$set": {"files": [str(image_y_id)]}}
)
friends_collection = db["friends"]
friends_collection.insert_one({
"user_id": str(user1_id),
"friend_user_id": str(user2_id),
"status": "accepted"
})
if __name__ == "__main__":
populate_data()
print("Data inserted.")