From e863a333bb1d2f6b56ffcc167fa14a8926b56cc9 Mon Sep 17 00:00:00 2001 From: johnpccd Date: Sat, 24 May 2025 12:06:57 +0200 Subject: [PATCH] folder restructure --- main.py | 4 +- scripts/create_admin.py | 8 +- scripts/generate_dev_key.py | 2 +- scripts/seed_firestore.py | 10 +- scripts/verify_api_key.py | 2 +- src/api/v1/auth.py | 6 +- src/api/v1/teams.py | 4 +- src/{db/models => auth}/__init__.py | 0 src/{core => auth}/security.py | 2 +- src/config/__init__.py | 0 src/{core => config}/config.py | 0 src/db/__init__.py | 200 +++++++++--------- src/db/providers/firestore_provider.py | 10 +- src/db/repositories/__init__.py | 2 +- src/db/repositories/api_key_repository.py | 2 +- .../firestore_api_key_repository.py | 2 +- .../firestore_image_repository.py | 2 +- .../repositories/firestore_team_repository.py | 2 +- .../repositories/firestore_user_repository.py | 2 +- src/db/repositories/image_repository.py | 2 +- src/db/repositories/team_repository.py | 2 +- src/db/repositories/user_repository.py | 2 +- src/models/__init__.py | 0 src/{db => }/models/api_key.py | 2 +- src/{db => }/models/image.py | 2 +- src/{db => }/models/team.py | 0 src/{db => }/models/user.py | 2 +- src/services/embedding_service.py | 2 +- src/services/storage.py | 2 +- src/services/vector_store.py | 2 +- src/utils/__init__.py | 0 src/{core => utils}/logging.py | 2 +- tests/api/conftest.py | 10 +- tests/api/test_auth.py | 4 +- tests/api/test_image_upload.py | 2 +- tests/api/test_images.py | 2 +- tests/api/test_search.py | 2 +- tests/api/test_security.py | 2 +- tests/api/test_teams.py | 2 +- tests/auth/__init__.py | 0 tests/db/test_api_key_model.py | 2 +- tests/db/test_image_model.py | 2 +- tests/db/test_py_object_id.py | 2 +- tests/db/test_team_model.py | 2 +- tests/db/test_user_model.py | 4 +- tests/models/__init__.py | 0 tests/services/test_storage_service.py | 2 +- 47 files changed, 159 insertions(+), 159 deletions(-) rename src/{db/models => auth}/__init__.py (100%) rename src/{core => auth}/security.py (94%) create mode 100644 src/config/__init__.py rename src/{core => config}/config.py (100%) create mode 100644 src/models/__init__.py rename src/{db => }/models/api_key.py (91%) rename src/{db => }/models/image.py (93%) rename src/{db => }/models/team.py (100%) rename src/{db => }/models/user.py (91%) create mode 100644 src/utils/__init__.py rename src/{core => utils}/logging.py (94%) create mode 100644 tests/auth/__init__.py create mode 100644 tests/models/__init__.py diff --git a/main.py b/main.py index 21f0afa..9e46509 100644 --- a/main.py +++ b/main.py @@ -9,8 +9,8 @@ from fastapi.openapi.utils import get_openapi from src.api.v1 import teams, users, images, auth, search # Import configuration and database -from src.core.config import settings -from src.core.logging import setup_logging +from src.config.config import settings +from src.utils.logging import setup_logging from src.db import db from src.db.providers.firestore_provider import firestore_db from src.db.repositories import init_repositories diff --git a/scripts/create_admin.py b/scripts/create_admin.py index 06b32c7..af53110 100644 --- a/scripts/create_admin.py +++ b/scripts/create_admin.py @@ -13,12 +13,12 @@ from src.db.repositories.user_repository import user_repository from src.db.repositories.api_key_repository import api_key_repository # Import models -from src.db.models.team import TeamModel -from src.db.models.user import UserModel -from src.db.models.api_key import ApiKeyModel +from src.models.team import TeamModel +from src.models.user import UserModel +from src.models.api_key import ApiKeyModel # Import security functions -from src.core.security import generate_api_key, calculate_expiry_date +from src.auth.security import generate_api_key, calculate_expiry_date async def create_admin(): # Create a new team diff --git a/scripts/generate_dev_key.py b/scripts/generate_dev_key.py index c0e62bc..8cd3a71 100644 --- a/scripts/generate_dev_key.py +++ b/scripts/generate_dev_key.py @@ -9,7 +9,7 @@ import string sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) # Get the API key secret from environment -from src.core.config import settings +from src.config.config import settings def generate_api_key(team_id="dev-team", user_id="dev-admin"): """ diff --git a/scripts/seed_firestore.py b/scripts/seed_firestore.py index 6aff641..d717cb5 100644 --- a/scripts/seed_firestore.py +++ b/scripts/seed_firestore.py @@ -22,16 +22,16 @@ load_dotenv() # Add the parent directory to the path so we can import from src sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) -from src.db.models.team import TeamModel -from src.db.models.user import UserModel -from src.db.models.api_key import ApiKeyModel -from src.db.models.image import ImageModel +from src.models.team import TeamModel +from src.models.user import UserModel +from src.models.api_key import ApiKeyModel +from src.models.image import ImageModel from src.db.providers.firestore_provider import firestore_db from src.db.repositories.firestore_team_repository import firestore_team_repository from src.db.repositories.firestore_user_repository import firestore_user_repository from src.db.repositories.firestore_api_key_repository import firestore_api_key_repository from src.db.repositories.firestore_image_repository import firestore_image_repository -from src.core.security import hash_api_key as app_hash_api_key +from src.auth.security import hash_api_key as app_hash_api_key # Configure logging logging.basicConfig( diff --git a/scripts/verify_api_key.py b/scripts/verify_api_key.py index 98f62bf..fdb3817 100644 --- a/scripts/verify_api_key.py +++ b/scripts/verify_api_key.py @@ -21,7 +21,7 @@ sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) from src.db.providers.firestore_provider import firestore_db from src.db.repositories.firestore_api_key_repository import firestore_api_key_repository from src.db.repositories.firestore_user_repository import firestore_user_repository -from src.core.security import hash_api_key, verify_api_key +from src.auth.security import hash_api_key, verify_api_key # Configure logging logging.basicConfig( diff --git a/src/api/v1/auth.py b/src/api/v1/auth.py index e05758e..3c2de10 100644 --- a/src/api/v1/auth.py +++ b/src/api/v1/auth.py @@ -8,9 +8,9 @@ from src.db.repositories.api_key_repository import api_key_repository from src.db.repositories.user_repository import user_repository from src.db.repositories.team_repository import team_repository from src.schemas.api_key import ApiKeyCreate, ApiKeyResponse, ApiKeyWithValueResponse, ApiKeyListResponse -from src.core.security import generate_api_key, verify_api_key, calculate_expiry_date, is_expired, hash_api_key -from src.db.models.api_key import ApiKeyModel -from src.core.logging import log_request +from src.auth.security import generate_api_key, verify_api_key, calculate_expiry_date, is_expired, hash_api_key +from src.models.api_key import ApiKeyModel +from src.utils.logging import log_request logger = logging.getLogger(__name__) diff --git a/src/api/v1/teams.py b/src/api/v1/teams.py index ae3284c..0b94f42 100644 --- a/src/api/v1/teams.py +++ b/src/api/v1/teams.py @@ -4,9 +4,9 @@ from bson import ObjectId from src.db.repositories.team_repository import team_repository from src.schemas.team import TeamCreate, TeamUpdate, TeamResponse, TeamListResponse -from src.db.models.team import TeamModel +from src.models.team import TeamModel from src.api.v1.auth import get_current_user -from src.core.logging import log_request +from src.utils.logging import log_request logger = logging.getLogger(__name__) diff --git a/src/db/models/__init__.py b/src/auth/__init__.py similarity index 100% rename from src/db/models/__init__.py rename to src/auth/__init__.py diff --git a/src/core/security.py b/src/auth/security.py similarity index 94% rename from src/core/security.py rename to src/auth/security.py index 550c503..e42d0a2 100644 --- a/src/core/security.py +++ b/src/auth/security.py @@ -6,7 +6,7 @@ import hashlib from datetime import datetime, timedelta from typing import Optional, Tuple -from src.core.config import settings +from src.config.config import settings def generate_api_key(team_id: str, user_id: str) -> Tuple[str, str]: """ diff --git a/src/config/__init__.py b/src/config/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/core/config.py b/src/config/config.py similarity index 100% rename from src/core/config.py rename to src/config/config.py diff --git a/src/db/__init__.py b/src/db/__init__.py index 1b5f77f..3d19fa9 100644 --- a/src/db/__init__.py +++ b/src/db/__init__.py @@ -1,100 +1,100 @@ -import logging -import os -import json -from google.cloud import firestore -from google.oauth2 import service_account -from src.core.config import settings - -logger = logging.getLogger(__name__) - -class Database: - client = None - database_name = None - - def connect_to_database(self): - """Create database connection.""" - try: - # Store database name - self.database_name = settings.FIRESTORE_DATABASE_NAME - - # Print project ID and database name for debugging - logger.info(f"Attempting to connect to Firestore with project ID: {settings.FIRESTORE_PROJECT_ID}, database: {self.database_name}") - - # First try using Application Default Credentials (for Cloud environments) - try: - logger.info("Attempting to connect using Application Default Credentials") - self.client = firestore.Client( - project=settings.FIRESTORE_PROJECT_ID, - database=self.database_name - ) - # Test connection by trying to access a collection - self.client.collection('test').limit(1).get() - logger.info(f"Connected to Firestore project using Application Default Credentials: {settings.FIRESTORE_PROJECT_ID}, database: {self.database_name}") - return - except Exception as adc_error: - logger.error(f"Application Default Credentials failed: {adc_error}", exc_info=True) - - # Fall back to service account file - credentials_path = settings.FIRESTORE_CREDENTIALS_FILE - if not os.path.exists(credentials_path): - logger.error(f"Firestore credentials file not found: {credentials_path}") - raise FileNotFoundError(f"Credentials file not found: {credentials_path}") - - # Print key file contents (without sensitive parts) for debugging - try: - with open(credentials_path, 'r') as f: - key_data = json.load(f) - # Log non-sensitive parts of the key - logger.info(f"Using credentials file with project_id: {key_data.get('project_id')}") - logger.info(f"Client email: {key_data.get('client_email')}") - logger.info(f"Key file type: {key_data.get('type')}") - except Exception as e: - logger.error(f"Error reading key file: {e}") - - # Load credentials - credentials = service_account.Credentials.from_service_account_file(credentials_path) - - # Initialize Firestore client - self.client = firestore.Client( - project=settings.FIRESTORE_PROJECT_ID, - database=self.database_name, - credentials=credentials - ) - - # Test connection by trying to access a collection - self.client.collection('test').limit(1).get() - - logger.info(f"Connected to Firestore project using credentials file: {settings.FIRESTORE_PROJECT_ID}, database: {self.database_name}") - except Exception as e: - logger.error(f"Failed to connect to Firestore: {e}", exc_info=True) - raise - - def close_database_connection(self): - """Close database connection.""" - try: - # No explicit close method needed for Firestore client - self.client = None - logger.info("Closed Firestore connection") - except Exception as e: - logger.error(f"Failed to close Firestore connection: {e}") - - def get_database(self): - """Get the database instance.""" - if self.client is None: - logger.warning("Database client is None. Attempting to reconnect...") - try: - self.connect_to_database() - except Exception as e: - logger.error(f"Failed to reconnect to database: {e}") - # Return None to avoid further errors but log this issue - return None - - # Verify that client is properly initialized - if self.client is None: - logger.error("Database client is still None after reconnect attempt") - return None - - return self.client - -# Create a singleton database instance -db = Database() +import logging +import os +import json +from google.cloud import firestore +from google.oauth2 import service_account +from src.config.config import settings + +logger = logging.getLogger(__name__) + +class Database: + client = None + database_name = None + + def connect_to_database(self): + """Create database connection.""" + try: + # Store database name + self.database_name = settings.FIRESTORE_DATABASE_NAME + + # Print project ID and database name for debugging + logger.info(f"Attempting to connect to Firestore with project ID: {settings.FIRESTORE_PROJECT_ID}, database: {self.database_name}") + + # First try using Application Default Credentials (for Cloud environments) + try: + logger.info("Attempting to connect using Application Default Credentials") + self.client = firestore.Client( + project=settings.FIRESTORE_PROJECT_ID, + database=self.database_name + ) + # Test connection by trying to access a collection + self.client.collection('test').limit(1).get() + logger.info(f"Connected to Firestore project using Application Default Credentials: {settings.FIRESTORE_PROJECT_ID}, database: {self.database_name}") + return + except Exception as adc_error: + logger.error(f"Application Default Credentials failed: {adc_error}", exc_info=True) + + # Fall back to service account file + credentials_path = settings.FIRESTORE_CREDENTIALS_FILE + if not os.path.exists(credentials_path): + logger.error(f"Firestore credentials file not found: {credentials_path}") + raise FileNotFoundError(f"Credentials file not found: {credentials_path}") + + # Print key file contents (without sensitive parts) for debugging + try: + with open(credentials_path, 'r') as f: + key_data = json.load(f) + # Log non-sensitive parts of the key + logger.info(f"Using credentials file with project_id: {key_data.get('project_id')}") + logger.info(f"Client email: {key_data.get('client_email')}") + logger.info(f"Key file type: {key_data.get('type')}") + except Exception as e: + logger.error(f"Error reading key file: {e}") + + # Load credentials + credentials = service_account.Credentials.from_service_account_file(credentials_path) + + # Initialize Firestore client + self.client = firestore.Client( + project=settings.FIRESTORE_PROJECT_ID, + database=self.database_name, + credentials=credentials + ) + + # Test connection by trying to access a collection + self.client.collection('test').limit(1).get() + + logger.info(f"Connected to Firestore project using credentials file: {settings.FIRESTORE_PROJECT_ID}, database: {self.database_name}") + except Exception as e: + logger.error(f"Failed to connect to Firestore: {e}", exc_info=True) + raise + + def close_database_connection(self): + """Close database connection.""" + try: + # No explicit close method needed for Firestore client + self.client = None + logger.info("Closed Firestore connection") + except Exception as e: + logger.error(f"Failed to close Firestore connection: {e}") + + def get_database(self): + """Get the database instance.""" + if self.client is None: + logger.warning("Database client is None. Attempting to reconnect...") + try: + self.connect_to_database() + except Exception as e: + logger.error(f"Failed to reconnect to database: {e}") + # Return None to avoid further errors but log this issue + return None + + # Verify that client is properly initialized + if self.client is None: + logger.error("Database client is still None after reconnect attempt") + return None + + return self.client + +# Create a singleton database instance +db = Database() diff --git a/src/db/providers/firestore_provider.py b/src/db/providers/firestore_provider.py index 68e4b2d..53b5210 100644 --- a/src/db/providers/firestore_provider.py +++ b/src/db/providers/firestore_provider.py @@ -4,11 +4,11 @@ import os from google.cloud import firestore from pydantic import BaseModel -from src.core.config import settings -from src.db.models.team import TeamModel -from src.db.models.user import UserModel -from src.db.models.api_key import ApiKeyModel -from src.db.models.image import ImageModel +from src.config.config import settings +from src.models.team import TeamModel +from src.models.user import UserModel +from src.models.api_key import ApiKeyModel +from src.models.image import ImageModel logger = logging.getLogger(__name__) diff --git a/src/db/repositories/__init__.py b/src/db/repositories/__init__.py index a463ff8..d17da79 100644 --- a/src/db/repositories/__init__.py +++ b/src/db/repositories/__init__.py @@ -1,5 +1,5 @@ import logging -from src.core.config import settings +from src.config.config import settings logger = logging.getLogger(__name__) diff --git a/src/db/repositories/api_key_repository.py b/src/db/repositories/api_key_repository.py index 5d883da..7373c77 100644 --- a/src/db/repositories/api_key_repository.py +++ b/src/db/repositories/api_key_repository.py @@ -4,7 +4,7 @@ from typing import List, Optional from bson import ObjectId from src.db import db -from src.db.models.api_key import ApiKeyModel +from src.models.api_key import ApiKeyModel logger = logging.getLogger(__name__) diff --git a/src/db/repositories/firestore_api_key_repository.py b/src/db/repositories/firestore_api_key_repository.py index 167c24e..a8ce604 100644 --- a/src/db/repositories/firestore_api_key_repository.py +++ b/src/db/repositories/firestore_api_key_repository.py @@ -1,6 +1,6 @@ import logging from src.db.repositories.firestore_repository import FirestoreRepository -from src.db.models.api_key import ApiKeyModel +from src.models.api_key import ApiKeyModel logger = logging.getLogger(__name__) diff --git a/src/db/repositories/firestore_image_repository.py b/src/db/repositories/firestore_image_repository.py index d35aab8..23e5f16 100644 --- a/src/db/repositories/firestore_image_repository.py +++ b/src/db/repositories/firestore_image_repository.py @@ -1,6 +1,6 @@ import logging from src.db.repositories.firestore_repository import FirestoreRepository -from src.db.models.image import ImageModel +from src.models.image import ImageModel logger = logging.getLogger(__name__) diff --git a/src/db/repositories/firestore_team_repository.py b/src/db/repositories/firestore_team_repository.py index 48f4dea..e1d721b 100644 --- a/src/db/repositories/firestore_team_repository.py +++ b/src/db/repositories/firestore_team_repository.py @@ -3,7 +3,7 @@ from typing import List, Optional from bson import ObjectId from src.db.repositories.firestore_repository import FirestoreRepository -from src.db.models.team import TeamModel +from src.models.team import TeamModel logger = logging.getLogger(__name__) diff --git a/src/db/repositories/firestore_user_repository.py b/src/db/repositories/firestore_user_repository.py index 40d5d43..3b6922a 100644 --- a/src/db/repositories/firestore_user_repository.py +++ b/src/db/repositories/firestore_user_repository.py @@ -1,6 +1,6 @@ import logging from src.db.repositories.firestore_repository import FirestoreRepository -from src.db.models.user import UserModel +from src.models.user import UserModel logger = logging.getLogger(__name__) diff --git a/src/db/repositories/image_repository.py b/src/db/repositories/image_repository.py index 97e53b1..249e980 100644 --- a/src/db/repositories/image_repository.py +++ b/src/db/repositories/image_repository.py @@ -4,7 +4,7 @@ from typing import List, Optional, Dict, Any from bson import ObjectId from src.db import db -from src.db.models.image import ImageModel +from src.models.image import ImageModel logger = logging.getLogger(__name__) diff --git a/src/db/repositories/team_repository.py b/src/db/repositories/team_repository.py index 7c60111..cefee75 100644 --- a/src/db/repositories/team_repository.py +++ b/src/db/repositories/team_repository.py @@ -4,7 +4,7 @@ from typing import List, Optional from bson import ObjectId from src.db import db -from src.db.models.team import TeamModel +from src.models.team import TeamModel logger = logging.getLogger(__name__) diff --git a/src/db/repositories/user_repository.py b/src/db/repositories/user_repository.py index 794f828..e6cc5c1 100644 --- a/src/db/repositories/user_repository.py +++ b/src/db/repositories/user_repository.py @@ -4,7 +4,7 @@ from typing import List, Optional from bson import ObjectId from src.db import db -from src.db.models.user import UserModel +from src.models.user import UserModel logger = logging.getLogger(__name__) diff --git a/src/models/__init__.py b/src/models/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/db/models/api_key.py b/src/models/api_key.py similarity index 91% rename from src/db/models/api_key.py rename to src/models/api_key.py index 77d3d69..982fc85 100644 --- a/src/db/models/api_key.py +++ b/src/models/api_key.py @@ -3,7 +3,7 @@ from typing import Optional, ClassVar from pydantic import BaseModel, Field from bson import ObjectId -from src.db.models.team import PyObjectId +from src.models.team import PyObjectId class ApiKeyModel(BaseModel): """Database model for an API key""" diff --git a/src/db/models/image.py b/src/models/image.py similarity index 93% rename from src/db/models/image.py rename to src/models/image.py index 9878fe7..8b90e78 100644 --- a/src/db/models/image.py +++ b/src/models/image.py @@ -3,7 +3,7 @@ from typing import Optional, List, Dict, Any, ClassVar from pydantic import BaseModel, Field, HttpUrl from bson import ObjectId -from src.db.models.team import PyObjectId +from src.models.team import PyObjectId class ImageModel(BaseModel): """Database model for an image""" diff --git a/src/db/models/team.py b/src/models/team.py similarity index 100% rename from src/db/models/team.py rename to src/models/team.py diff --git a/src/db/models/user.py b/src/models/user.py similarity index 91% rename from src/db/models/user.py rename to src/models/user.py index 9aac05d..720b4c1 100644 --- a/src/db/models/user.py +++ b/src/models/user.py @@ -3,7 +3,7 @@ from typing import Optional, List, ClassVar from pydantic import BaseModel, Field, EmailStr from bson import ObjectId -from src.db.models.team import PyObjectId +from src.models.team import PyObjectId class UserModel(BaseModel): """Database model for a user""" diff --git a/src/services/embedding_service.py b/src/services/embedding_service.py index 34b7cbb..369c3b2 100644 --- a/src/services/embedding_service.py +++ b/src/services/embedding_service.py @@ -5,7 +5,7 @@ from typing import List, Dict, Any, Union, Optional import numpy as np from PIL import Image -from src.core.config import settings +from src.config.config import settings logger = logging.getLogger(__name__) diff --git a/src/services/storage.py b/src/services/storage.py index e69b3e7..0611dff 100644 --- a/src/services/storage.py +++ b/src/services/storage.py @@ -10,7 +10,7 @@ from google.cloud import storage from google.oauth2 import service_account from PIL import Image -from src.core.config import settings +from src.config.config import settings logger = logging.getLogger(__name__) diff --git a/src/services/vector_store.py b/src/services/vector_store.py index 51dca5b..c8cc53c 100644 --- a/src/services/vector_store.py +++ b/src/services/vector_store.py @@ -3,7 +3,7 @@ from typing import List, Dict, Any, Optional, Tuple import pinecone from bson import ObjectId -from src.core.config import settings +from src.config.config import settings logger = logging.getLogger(__name__) diff --git a/src/utils/__init__.py b/src/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/core/logging.py b/src/utils/logging.py similarity index 94% rename from src/core/logging.py rename to src/utils/logging.py index af82145..92f23e9 100644 --- a/src/core/logging.py +++ b/src/utils/logging.py @@ -2,7 +2,7 @@ import logging import sys from typing import Dict, Any -from src.core.config import settings +from src.config.config import settings def setup_logging(): """Configure logging settings for the application""" diff --git a/tests/api/conftest.py b/tests/api/conftest.py index d5aab14..5a87546 100644 --- a/tests/api/conftest.py +++ b/tests/api/conftest.py @@ -6,11 +6,11 @@ from bson import ObjectId from fastapi import FastAPI from fastapi.testclient import TestClient -from src.db.models.team import TeamModel -from src.db.models.user import UserModel -from src.db.models.api_key import ApiKeyModel -from src.db.models.image import ImageModel -from src.core.security import generate_api_key +from src.models.team import TeamModel +from src.models.user import UserModel +from src.models.api_key import ApiKeyModel +from src.models.image import ImageModel +from src.auth.security import generate_api_key from src.db.repositories.team_repository import team_repository from src.db.repositories.user_repository import user_repository from src.db.repositories.api_key_repository import api_key_repository diff --git a/tests/api/test_auth.py b/tests/api/test_auth.py index 66e716b..a00b006 100644 --- a/tests/api/test_auth.py +++ b/tests/api/test_auth.py @@ -3,9 +3,9 @@ from fastapi.testclient import TestClient from datetime import datetime, timedelta from bson import ObjectId -from src.db.models.api_key import ApiKeyModel +from src.models.api_key import ApiKeyModel from src.db.repositories.api_key_repository import api_key_repository -from src.core.security import generate_api_key +from src.auth.security import generate_api_key @pytest.mark.asyncio diff --git a/tests/api/test_image_upload.py b/tests/api/test_image_upload.py index 91b7a88..c5c0533 100644 --- a/tests/api/test_image_upload.py +++ b/tests/api/test_image_upload.py @@ -5,7 +5,7 @@ from fastapi.testclient import TestClient from unittest.mock import patch, MagicMock from src.db.repositories.image_repository import ImageRepository, image_repository -from src.db.models.image import ImageModel +from src.models.image import ImageModel from main import app # Hardcoded API key as requested diff --git a/tests/api/test_images.py b/tests/api/test_images.py index e7ee252..5f34d77 100644 --- a/tests/api/test_images.py +++ b/tests/api/test_images.py @@ -3,7 +3,7 @@ from fastapi.testclient import TestClient from datetime import datetime from bson import ObjectId -from src.db.models.image import ImageModel +from src.models.image import ImageModel from src.db.repositories.image_repository import image_repository # Assuming this exists diff --git a/tests/api/test_search.py b/tests/api/test_search.py index 0e09aa1..63da5eb 100644 --- a/tests/api/test_search.py +++ b/tests/api/test_search.py @@ -3,7 +3,7 @@ from fastapi.testclient import TestClient from datetime import datetime from bson import ObjectId -from src.db.models.image import ImageModel +from src.models.image import ImageModel from src.db.repositories.image_repository import image_repository # Assuming this exists diff --git a/tests/api/test_security.py b/tests/api/test_security.py index fb62bc6..eb880b2 100644 --- a/tests/api/test_security.py +++ b/tests/api/test_security.py @@ -1,7 +1,7 @@ import pytest from fastapi.testclient import TestClient from datetime import datetime, timedelta -from src.core.security import generate_api_key, hash_api_key, verify_api_key, calculate_expiry_date, is_expired +from src.auth.security import generate_api_key, hash_api_key, verify_api_key, calculate_expiry_date, is_expired def test_api_key_generation(): diff --git a/tests/api/test_teams.py b/tests/api/test_teams.py index 331903a..0016f7d 100644 --- a/tests/api/test_teams.py +++ b/tests/api/test_teams.py @@ -2,7 +2,7 @@ import pytest from fastapi.testclient import TestClient from bson import ObjectId -from src.db.models.team import TeamModel +from src.models.team import TeamModel from src.db.repositories.team_repository import team_repository diff --git a/tests/auth/__init__.py b/tests/auth/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/db/test_api_key_model.py b/tests/db/test_api_key_model.py index 215201b..427c6fc 100644 --- a/tests/db/test_api_key_model.py +++ b/tests/db/test_api_key_model.py @@ -2,7 +2,7 @@ import pytest from datetime import datetime, timedelta from bson import ObjectId from pydantic import ValidationError -from src.db.models.api_key import ApiKeyModel +from src.models.api_key import ApiKeyModel class TestApiKeyModel: def test_create_api_key(self): diff --git a/tests/db/test_image_model.py b/tests/db/test_image_model.py index 6992ec6..b0c3bec 100644 --- a/tests/db/test_image_model.py +++ b/tests/db/test_image_model.py @@ -2,7 +2,7 @@ import pytest from datetime import datetime from bson import ObjectId from pydantic import ValidationError, HttpUrl -from src.db.models.image import ImageModel +from src.models.image import ImageModel class TestImageModel: def test_create_image(self): diff --git a/tests/db/test_py_object_id.py b/tests/db/test_py_object_id.py index 52ccefd..d53aea9 100644 --- a/tests/db/test_py_object_id.py +++ b/tests/db/test_py_object_id.py @@ -1,7 +1,7 @@ import pytest from bson import ObjectId from pydantic import ValidationError, BaseModel, Field -from src.db.models.team import PyObjectId +from src.models.team import PyObjectId class TestPyObjectId: def test_valid_object_id(self): diff --git a/tests/db/test_team_model.py b/tests/db/test_team_model.py index f43ee61..d3b2615 100644 --- a/tests/db/test_team_model.py +++ b/tests/db/test_team_model.py @@ -1,7 +1,7 @@ import pytest from datetime import datetime from bson import ObjectId -from src.db.models.team import TeamModel, PyObjectId +from src.models.team import TeamModel, PyObjectId class TestTeamModel: def test_create_team(self): diff --git a/tests/db/test_user_model.py b/tests/db/test_user_model.py index 3a4bf3e..3a103aa 100644 --- a/tests/db/test_user_model.py +++ b/tests/db/test_user_model.py @@ -2,8 +2,8 @@ import pytest from datetime import datetime from bson import ObjectId from pydantic import ValidationError -from src.db.models.user import UserModel -from src.db.models.team import PyObjectId +from src.models.user import UserModel +from src.models.team import PyObjectId class TestUserModel: def test_create_user(self): diff --git a/tests/models/__init__.py b/tests/models/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/services/test_storage_service.py b/tests/services/test_storage_service.py index ced1ed7..28b50c4 100644 --- a/tests/services/test_storage_service.py +++ b/tests/services/test_storage_service.py @@ -7,7 +7,7 @@ from io import BytesIO from src.services.storage import StorageService from src.db.repositories.image_repository import ImageRepository, image_repository -from src.db.models.image import ImageModel +from src.models.image import ImageModel # Hardcoded API key as requested API_KEY = "Wwg4eJjJ.d03970d43cf3a454ad4168b3226b423f"