from __future__ import annotations from pathlib import Path from dotenv import load_dotenv from pymongo.errors import DuplicateKeyError from shared.data_store import connect_minio from shared.mongodb import connect_mongodb from shared.mongodb.classes import VisualCommunication from shared.utils import check_env, setup_logging from web_ui.src.main import NECESSARY_ENV_VAR_LIST if __name__ == '__main__': # load in env file env_path = Path(__file__).parent.parent / 'server.env' assert env_path.exists() load_dotenv(env_path) # ensure env vars set check_env(NECESSARY_ENV_VAR_LIST) # setup logging setup_logging() # connect to minIO minio_client = connect_minio() # connect to MongoDB collection, db, client = connect_mongodb() # get list of image paths ext_img_dir = Path('/Volumes/BW-PSSD/Mixed Methods/') assert ext_img_dir.exists() img_path_list = [ path for path in ext_img_dir.glob( '*.jpg', ) if path.is_file() ] print(f"found {len(img_path_list)} images") # create visual communication objects vis_com_list = [ VisualCommunication.from_file(path, minio_client=minio_client) for path in img_path_list ] print(f"created {len(vis_com_list)} visual communication objects") # upload images for vis_com in vis_com_list: try: result = collection.insert_one(vis_com.model_dump()) except DuplicateKeyError as exc: print('ignoring:\n', exc) else: print(f"inserted document: {result}")