diff --git a/.vscode/settings.json b/.vscode/settings.json index 7e68766ae..deb21d509 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,8 @@ { - "python-envs.pythonProjects": [] + "python-envs.pythonProjects": [], + "python.analysis.extraPaths": [ + "./backend/app/core", + "./src/obesitrack/db", + "./src/obesitrack" + ] } \ No newline at end of file diff --git a/alembic.ini b/alembic.ini new file mode 100644 index 000000000..079181673 --- /dev/null +++ b/alembic.ini @@ -0,0 +1,147 @@ +# A generic, single database configuration. + +[alembic] +# path to migration scripts. +# this is typically a path given in POSIX (e.g. forward slashes) +# format, relative to the token %(here)s which refers to the location of this +# ini file +script_location = %(here)s/alembic + +# template used to generate migration file names; The default value is %%(rev)s_%%(slug)s +# Uncomment the line below if you want the files to be prepended with date and time +# see https://alembic.sqlalchemy.org/en/latest/tutorial.html#editing-the-ini-file +# for all available tokens +# file_template = %%(year)d_%%(month).2d_%%(day).2d_%%(hour).2d%%(minute).2d-%%(rev)s_%%(slug)s + +# sys.path path, will be prepended to sys.path if present. +# defaults to the current working directory. for multiple paths, the path separator +# is defined by "path_separator" below. +prepend_sys_path = . + + +# timezone to use when rendering the date within the migration file +# as well as the filename. +# If specified, requires the python>=3.9 or backports.zoneinfo library and tzdata library. +# Any required deps can installed by adding `alembic[tz]` to the pip requirements +# string value is passed to ZoneInfo() +# leave blank for localtime +# timezone = + +# max length of characters to apply to the "slug" field +# truncate_slug_length = 40 + +# set to 'true' to run the environment during +# the 'revision' command, regardless of autogenerate +# revision_environment = false + +# set to 'true' to allow .pyc and .pyo files without +# a source .py file to be detected as revisions in the +# versions/ directory +# sourceless = false + +# version location specification; This defaults +# to /versions. When using multiple version +# directories, initial revisions must be specified with --version-path. +# The path separator used here should be the separator specified by "path_separator" +# below. +# version_locations = %(here)s/bar:%(here)s/bat:%(here)s/alembic/versions + +# path_separator; This indicates what character is used to split lists of file +# paths, including version_locations and prepend_sys_path within configparser +# files such as alembic.ini. +# The default rendered in new alembic.ini files is "os", which uses os.pathsep +# to provide os-dependent path splitting. +# +# Note that in order to support legacy alembic.ini files, this default does NOT +# take place if path_separator is not present in alembic.ini. If this +# option is omitted entirely, fallback logic is as follows: +# +# 1. Parsing of the version_locations option falls back to using the legacy +# "version_path_separator" key, which if absent then falls back to the legacy +# behavior of splitting on spaces and/or commas. +# 2. Parsing of the prepend_sys_path option falls back to the legacy +# behavior of splitting on spaces, commas, or colons. +# +# Valid values for path_separator are: +# +# path_separator = : +# path_separator = ; +# path_separator = space +# path_separator = newline +# +# Use os.pathsep. Default configuration used for new projects. +path_separator = os + +# set to 'true' to search source files recursively +# in each "version_locations" directory +# new in Alembic version 1.10 +# recursive_version_locations = false + +# the output encoding used when revision files +# are written from script.py.mako +# output_encoding = utf-8 + +# database URL. This is consumed by the user-maintained env.py script only. +# other means of configuring database URLs may be customized within the env.py +# file. +sqlalchemy.url = driver://user:pass@localhost/dbname + + +[post_write_hooks] +# post_write_hooks defines scripts or Python functions that are run +# on newly generated revision scripts. See the documentation for further +# detail and examples + +# format using "black" - use the console_scripts runner, against the "black" entrypoint +# hooks = black +# black.type = console_scripts +# black.entrypoint = black +# black.options = -l 79 REVISION_SCRIPT_FILENAME + +# lint with attempts to fix using "ruff" - use the module runner, against the "ruff" module +# hooks = ruff +# ruff.type = module +# ruff.module = ruff +# ruff.options = check --fix REVISION_SCRIPT_FILENAME + +# Alternatively, use the exec runner to execute a binary found on your PATH +# hooks = ruff +# ruff.type = exec +# ruff.executable = ruff +# ruff.options = check --fix REVISION_SCRIPT_FILENAME + +# Logging configuration. This is also consumed by the user-maintained +# env.py script only. +[loggers] +keys = root,sqlalchemy,alembic + +[handlers] +keys = console + +[formatters] +keys = generic + +[logger_root] +level = WARNING +handlers = console +qualname = + +[logger_sqlalchemy] +level = WARNING +handlers = +qualname = sqlalchemy.engine + +[logger_alembic] +level = INFO +handlers = +qualname = alembic + +[handler_console] +class = StreamHandler +args = (sys.stderr,) +level = NOTSET +formatter = generic + +[formatter_generic] +format = %(levelname)-5.5s [%(name)s] %(message)s +datefmt = %H:%M:%S diff --git a/alembic/README b/alembic/README new file mode 100644 index 000000000..98e4f9c44 --- /dev/null +++ b/alembic/README @@ -0,0 +1 @@ +Generic single-database configuration. \ No newline at end of file diff --git a/alembic/env.py b/alembic/env.py new file mode 100644 index 000000000..36112a3c6 --- /dev/null +++ b/alembic/env.py @@ -0,0 +1,78 @@ +from logging.config import fileConfig + +from sqlalchemy import engine_from_config +from sqlalchemy import pool + +from alembic import context + +# this is the Alembic Config object, which provides +# access to the values within the .ini file in use. +config = context.config + +# Interpret the config file for Python logging. +# This line sets up loggers basically. +if config.config_file_name is not None: + fileConfig(config.config_file_name) + +# add your model's MetaData object here +# for 'autogenerate' support +# from myapp import mymodel +# target_metadata = mymodel.Base.metadata +target_metadata = None + +# other values from the config, defined by the needs of env.py, +# can be acquired: +# my_important_option = config.get_main_option("my_important_option") +# ... etc. + + +def run_migrations_offline() -> None: + """Run migrations in 'offline' mode. + + This configures the context with just a URL + and not an Engine, though an Engine is acceptable + here as well. By skipping the Engine creation + we don't even need a DBAPI to be available. + + Calls to context.execute() here emit the given string to the + script output. + + """ + url = config.get_main_option("sqlalchemy.url") + context.configure( + url=url, + target_metadata=target_metadata, + literal_binds=True, + dialect_opts={"paramstyle": "named"}, + ) + + with context.begin_transaction(): + context.run_migrations() + + +def run_migrations_online() -> None: + """Run migrations in 'online' mode. + + In this scenario we need to create an Engine + and associate a connection with the context. + + """ + connectable = engine_from_config( + config.get_section(config.config_ini_section, {}), + prefix="sqlalchemy.", + poolclass=pool.NullPool, + ) + + with connectable.connect() as connection: + context.configure( + connection=connection, target_metadata=target_metadata + ) + + with context.begin_transaction(): + context.run_migrations() + + +if context.is_offline_mode(): + run_migrations_offline() +else: + run_migrations_online() diff --git a/alembic/script.py.mako b/alembic/script.py.mako new file mode 100644 index 000000000..11016301e --- /dev/null +++ b/alembic/script.py.mako @@ -0,0 +1,28 @@ +"""${message} + +Revision ID: ${up_revision} +Revises: ${down_revision | comma,n} +Create Date: ${create_date} + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa +${imports if imports else ""} + +# revision identifiers, used by Alembic. +revision: str = ${repr(up_revision)} +down_revision: Union[str, Sequence[str], None] = ${repr(down_revision)} +branch_labels: Union[str, Sequence[str], None] = ${repr(branch_labels)} +depends_on: Union[str, Sequence[str], None] = ${repr(depends_on)} + + +def upgrade() -> None: + """Upgrade schema.""" + ${upgrades if upgrades else "pass"} + + +def downgrade() -> None: + """Downgrade schema.""" + ${downgrades if downgrades else "pass"} diff --git a/backend/app/api/auth.py b/backend/app/api/auth.py index 9bac1356c..230a06b37 100644 --- a/backend/app/api/auth.py +++ b/backend/app/api/auth.py @@ -1,5 +1,5 @@ from fastapi import APIRouter, HTTPException, Depends -from sqlmodel import select +from sqlalchemy import select from app.schemas.pydantic_models import UserCreate, Token from app.db.session import async_session from app.db.models import User diff --git a/backend/app/api/deps.py b/backend/app/api/deps.py index ecb35ff53..4dd013e44 100644 --- a/backend/app/api/deps.py +++ b/backend/app/api/deps.py @@ -1,8 +1,8 @@ from fastapi import Depends, HTTPException from fastapi.security import OAuth2PasswordBearer +from sqlalchemy import select from app.core.security import decode_access_token from app.db.session import async_session -from sqlmodel import select from app.db.models import User oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/auth/login") diff --git a/backend/app/api/users.py b/backend/app/api/users.py index 44ba9a3b6..1d36f639a 100644 --- a/backend/app/api/users.py +++ b/backend/app/api/users.py @@ -1,6 +1,7 @@ + from fastapi import APIRouter, Depends, HTTPException +from sqlalchemy import select from app.api.deps import get_current_user -from sqlmodel import select from app.db.session import async_session from app.db.models import User diff --git a/backend/app/core/security.py b/backend/app/core/security.py index 1e6298a24..9c41f4d81 100644 --- a/backend/app/core/security.py +++ b/backend/app/core/security.py @@ -1,5 +1,6 @@ +from datetime import timedelta +import datetime from passlib.context import CryptContext -from datetime import datetime, timedelta from jose import jwt, JWTError from typing import Optional from app.core.config import settings diff --git a/backend/app/db/models.py b/backend/app/db/models.py index b6d256699..7b6d12d75 100644 --- a/backend/app/db/models.py +++ b/backend/app/db/models.py @@ -1,4 +1,4 @@ -from sqlmodel import SQLModel, Field, Column, JSON + from typing import Optional from datetime import datetime from sqlalchemy import Column, Integer, String, DateTime, ForeignKey, DECIMAL diff --git a/backend/app/db/session.py b/backend/app/db/session.py index 6bcfd3b57..c539208a7 100644 --- a/backend/app/db/session.py +++ b/backend/app/db/session.py @@ -1,9 +1,10 @@ +from sqlite3 import SQLITE_LIMIT_COMPOUND_SELECT from sqlalchemy.ext.asyncio import create_async_engine, AsyncEngine from sqlalchemy.orm import sessionmaker from obesitrack.db.database import SessionLocal from app.core.config import settings from session import AsyncSession -from sqlmodel import SQLModel + DATABASE_URL = settings.DATABASE_URL @@ -15,7 +16,7 @@ async def init_db(): async with engine.begin() as conn: - await conn.run_sync(SQLModel.metadata.create_all) + await conn.run_sync(SQLITE_LIMIT_COMPOUND_SELECT.metadata.create_all) def get_db(): db = SessionLocal() diff --git a/backend/app/main.py b/backend/app/main.py index 91554ce7e..fb0bfe74f 100644 --- a/backend/app/main.py +++ b/backend/app/main.py @@ -4,6 +4,7 @@ # Import des routes from app.api import auth, users, predictions +from backend.app.services import predictor from obesitrack.db.session import init_db # Définir les métadonnées pour la doc Swagger @@ -48,7 +49,7 @@ # Inclure les routes app.include_router(auth.router, prefix="/auth", tags=["Auth"]) app.include_router(users.router, prefix="/users", tags=["Users"]) -app.include_router(predictions.router, prefix="/predictions", tags=["Predictions"]) +app.include_router(predictor.router, prefix="/predictions", tags=["Predictions"]) app.include_router(metrics.router, prefix="/metrics", tags=["Metrics"]) diff --git a/backend/app/services/predictor.py b/backend/app/services/predictor.py index a4c035d79..4ef77fbd2 100644 --- a/backend/app/services/predictor.py +++ b/backend/app/services/predictor.py @@ -1,9 +1,21 @@ import random -from typing import Tuple, Dict, Any +from typing import Dict, Tuple + def predict(payload: dict) -> Tuple[str, Dict[str, float]]: - # Mock: remplace par modèle sklearn chargé via pickle ou joblib + """ + Simule une prédiction binaire avec des probabilités. + À remplacer par un vrai modèle (pickle / joblib). + + Args: + payload (dict): Les données d'entrée (ex: âge, poids, etc.) + + Returns: + Tuple[str, Dict[str, float]]: (étiquette, probabilités) + """ p_positive = round(random.uniform(0, 1), 3) p_negative = round(1 - p_positive, 3) - label = "Diabète probable" if p_positive >= 0.5 else "Diabète improbable" + + label = "Obésité probable" if p_positive >= 0.5 else "Obésité improbable" + return label, {"positive": p_positive, "negative": p_negative} diff --git a/backend/requirements.txt b/backend/requirements.txt new file mode 100644 index 000000000..fc5a4fce1 Binary files /dev/null and b/backend/requirements.txt differ diff --git a/frontend/add_patient.html b/frontend/add_patient.html new file mode 100644 index 000000000..6c9018eb6 --- /dev/null +++ b/frontend/add_patient.html @@ -0,0 +1,34 @@ + + + + + Nouvelle Prédiction - Détection Diabète + + + +
+

Nouvelle prédiction

+ +
+ +
+
+ + + + + + + + +
+ +
+
+ + + + diff --git a/frontend/admin.html b/frontend/admin.html new file mode 100644 index 000000000..e8979b753 --- /dev/null +++ b/frontend/admin.html @@ -0,0 +1,59 @@ + + + + + + Admin - Gestion Utilisateurs + + + + +
+

Prédiction de l’Obésité - Espace Administrateur

+ +
+ +
+

Liste des utilisateurs

+ + + + + + + + + + + + + + + + + + + + +
IDNomEmailRôleDate créationActions
+ + +
+ + + +
+ +
+ + + + + + + diff --git a/frontend/dashboard.html b/frontend/dashboard.html new file mode 100644 index 000000000..4a3f85274 --- /dev/null +++ b/frontend/dashboard.html @@ -0,0 +1,37 @@ + + + + + Tableau de bord - Détection Diabète + + + +
+

Mon Tableau de Bord

+ +
+ +
+

Historique de mes prédictions

+ + + + + + + + + + + + + +
DateÂgeFCVCRésultatProbabilité
+
+ + + + diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 000000000..153142ca8 --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,26 @@ + + + + + Prédiction de l’Obésité - Accueil + + + +
+

Prédiction de l’Obésité

+
+ +
+

Connexion

+
+ + + +
+ +

Pas encore inscrit ? Créer un compte

+
+ + + + diff --git a/frontend/js/app.js b/frontend/js/app.js new file mode 100644 index 000000000..194b0e43c --- /dev/null +++ b/frontend/js/app.js @@ -0,0 +1,235 @@ +// === URL de l'API FastAPI === +const API_URL = "http://localhost:8000"; + +// === Sauvegarder et récupérer le JWT === +function saveToken(token) { + localStorage.setItem("jwt", token); +} + +function getToken() { + return localStorage.getItem("jwt"); +} + +function clearToken() { + localStorage.removeItem("jwt"); +} + +// === Requête générique avec ou sans JWT === +async function apiRequest(endpoint, method = "GET", data = null, auth = false) { + const headers = { "Content-Type": "application/json" }; + if (auth) { + const token = getToken(); + if (token) { + headers["Authorization"] = `Bearer ${token}`; + } + } + + const response = await fetch(`${API_URL}${endpoint}`, { + method, + headers, + body: data ? JSON.stringify(data) : null + }); + + if (!response.ok) { + throw new Error(`Erreur ${response.status}: ${await response.text()}`); + } + + return response.json(); +} + +// === INSCRIPTION === +async function registerUser(username, password) { + try { + const result = await apiRequest("/auth/register", "POST", { username, password }); + alert("Inscription réussie Vous pouvez maintenant vous connecter."); + return result; + } catch (err) { + alert("Erreur d'inscription : " + err.message); + } +} + +// === CONNEXION === +async function loginUser(username, password) { + try { + const result = await apiRequest("/auth/login", "POST", { username, password }); + saveToken(result.access_token); + alert("Connexion réussie 🎉"); + window.location.href = "dashboard.html"; // redirection après connexion + } catch (err) { + alert("Erreur de connexion : " + err.message); + } +} + +// === DÉCONNEXION === +function logoutUser() { + clearToken(); + alert("Déconnecté ✅"); + window.location.href = "index.html"; +} + +// === ENVOYER DES DONNÉES POUR PREDICTION === +async function sendPrediction(data) { + try { + const result = await apiRequest("/predictions", "POST", data, true); + console.log("Résultat prédiction :", result); + alert(`Prédiction : ${result.prediction} (probabilité : ${result.probability}%)`); + return result; + } catch (err) { + alert("Erreur lors de la prédiction : " + err.message); + } +} + +// === CONSULTER L'HISTORIQUE DES PREDICTIONS === +async function getHistory() { + try { + const result = await apiRequest("/predictions/history", "GET", null, true); + console.log("Historique :", result); + return result; + } catch (err) { + alert("Erreur lors du chargement de l'historique : " + err.message); + } +} + +// === GESTION ADMIN : LISTE DES UTILISATEURS === +async function getUsers() { + try { + const result = await apiRequest("/users", "GET", null, true); + console.log("Utilisateurs :", result); + return result; + } catch (err) { + alert("Erreur lors du chargement des utilisateurs : " + err.message); + } +} + + +// ----------------------------- +// Pagination +// ----------------------------- +let currentPage = 1; +const rowsPerPage = 5; + +// Charger les utilisateurs +async function fetchUsers(dateFilter = null) { + let url = `${API_URL}/users?page=${currentPage}&limit=${rowsPerPage}`; + if (dateFilter) url += `&date=${dateFilter}`; + + const res = await fetch(url, { headers: getAuthHeaders() }); + if (!res.ok) return alert("Erreur lors de la récupération des utilisateurs !"); + const data = await res.json(); + + populateTable(data.users); + document.getElementById('page-info').innerText = `Page ${currentPage} / ${data.total_pages}`; +} + +// Remplir le tableau +function populateTable(users) { + const tbody = document.querySelector('#users-table tbody'); + tbody.innerHTML = ''; + users.forEach(user => { + const tr = document.createElement('tr'); + tr.innerHTML = ` + ${user.id} + ${user.name} + ${user.email} + ${user.role} + ${user.created_at} + + + + + `; + tbody.appendChild(tr); + }); +} + +// ----------------------------- +// Changer rôle utilisateur +// ----------------------------- +async function toggleRole(userId, currentRole) { + if (!confirm("Confirmer le changement de rôle?")) return; + const newRole = currentRole === "admin" ? "user" : "admin"; + + const res = await fetch(`${API_URL}/users/${userId}/role`, { + method: "PATCH", + headers: getAuthHeaders(), + body: JSON.stringify({ role: newRole }) + }); + if (!res.ok) return alert("Erreur lors du changement de rôle !"); + fetchUsers(document.getElementById('filter-date').value); +} + +// ----------------------------- +// Supprimer utilisateur +// ----------------------------- +async function deleteUser(userId) { + if (!confirm("Confirmer la suppression de cet utilisateur?")) return; + + const res = await fetch(`${API_URL}/users/${userId}`, { + method: "DELETE", + headers: getAuthHeaders() + }); + if (!res.ok) return alert("Erreur lors de la suppression !"); + fetchUsers(document.getElementById('filter-date').value); +} + +// ----------------------------- +// Filtre par date +// ----------------------------- +document.getElementById('filter-date').addEventListener('change', (e) => { + currentPage = 1; + fetchUsers(e.target.value); +}); + +// ----------------------------- +// Pagination boutons +// ----------------------------- +document.getElementById('prev-page').addEventListener('click', () => { + if (currentPage > 1) { + currentPage--; + fetchUsers(document.getElementById('filter-date').value); + } +}); +document.getElementById('next-page').addEventListener('click', () => { + currentPage++; + fetchUsers(document.getElementById('filter-date').value); +}); + +// ----------------------------- +// Graphique probabilités +// ----------------------------- +const ctx = document.getElementById('predictionChart').getContext('2d'); +const predictionChart = new Chart(ctx, { + type: 'bar', + data: { + labels: ['Obèse', 'Non Obèse'], + datasets: [{ + label: 'Probabilités', + data: [0.7, 0.3], // à remplacer par l'API + backgroundColor: ['#f87171','#4ade80'] + }] + }, + options: { + responsive: true, + plugins: { legend: { display: false } } + } +}); + +// ----------------------------- +// Logout +// ----------------------------- +function logout() { + localStorage.removeItem('token'); + return true; +} + +// ----------------------------- +// Initialisation +// ----------------------------- +window.addEventListener('DOMContentLoaded', () => { + if (!token) { + alert("Veuillez vous connecter !"); + window.location.href = "/login"; + } + fetchUsers(); +}); + diff --git a/frontend/register.html b/frontend/register.html new file mode 100644 index 000000000..7f9e19172 --- /dev/null +++ b/frontend/register.html @@ -0,0 +1,25 @@ + + + + + Inscription - Prédiction de l’Obésité + + + +
+

Créer un compte

+
+ +
+
+ + + + +
+

Déjà un compte ? Se connecter

+
+ + + + diff --git a/frontend/styles.css b/frontend/styles.css new file mode 100644 index 000000000..fcae2b62f --- /dev/null +++ b/frontend/styles.css @@ -0,0 +1,156 @@ +/* ==== RESET DE BASE ==== */ +* { + margin: 0; + padding: 0; + box-sizing: border-box; + font-family: 'Segoe UI', Roboto, Arial, sans-serif; +} + +body { + background: #f0f4fa; + color: #2c3e50; + line-height: 1.6; + min-height: 100vh; + display: flex; + flex-direction: column; +} + +/* ==== HEADER / NAVBAR ==== */ +header { + background: linear-gradient(90deg, #005fa3, #0077cc); + color: white; + padding: 15px 30px; + display: flex; + justify-content: space-between; + align-items: center; + box-shadow: 0 5px 15px rgba(0,0,0,0.15); +} + +header h1 { + font-size: 1.6rem; + font-weight: 700; + letter-spacing: 1px; +} + +header nav a { + color: white; + margin-left: 20px; + text-decoration: none; + font-weight: 600; + transition: 0.3s; +} + +header nav a:hover { + text-decoration: underline; +} + +/* ==== CONTAINER PRINCIPAL ==== */ +main { + max-width: 900px; + margin: 40px auto; + padding: 25px; + background: white; + border-radius: 12px; + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.08); +} + +/* ==== FORMULAIRES ==== */ +form { + display: flex; + flex-direction: column; + gap: 15px; +} + +form input, form select { + padding: 12px; + border: 1px solid #ccc; + border-radius: 8px; + font-size: 1rem; + transition: 0.2s; +} + +form input:focus, form select:focus { + border-color: #0077cc; + outline: none; + box-shadow: 0 0 5px rgba(0, 119, 204, 0.3); +} + +button { + background: #0077cc; + color: white; + padding: 12px; + border: none; + border-radius: 8px; + font-weight: 600; + cursor: pointer; + transition: all 0.3s ease; +} + +button:hover { + background: #005fa3; + transform: translateY(-2px); +} + +/* ==== TABLEAUX ==== */ +table { + width: 100%; + border-collapse: collapse; + margin-top: 20px; + border-radius: 10px; + overflow: hidden; +} + +table thead { + background: #0077cc; + color: white; +} + +table th, table td { + padding: 12px 15px; + border-bottom: 1px solid #ddd; + text-align: left; +} + +table tbody tr:hover { + background: #f5faff; +} + +/* ==== LIENS ==== */ +a { + color: #0077cc; + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +/* ==== FOOTER ==== */ +footer { + text-align: center; + padding: 20px; + margin-top: auto; + font-size: 0.9rem; + color: #6c7a91; + border-top: 1px solid #dde3ec; +} + +/* ==== RESPONSIVE ==== */ +@media (max-width: 700px) { + main { + margin: 20px; + padding: 15px; + } + + header { + flex-direction: column; + align-items: flex-start; + gap: 10px; + } + + header nav { + display: flex; + flex-wrap: wrap; + gap: 10px; + } +} diff --git a/requirements.txt b/requirements.txt index 0e86e86ce..fc5a4fce1 100644 Binary files a/requirements.txt and b/requirements.txt differ diff --git a/src/obesitrack/db/database.py b/src/obesitrack/db/database.py index 4f596b5a3..610cbf5ee 100644 --- a/src/obesitrack/db/database.py +++ b/src/obesitrack/db/database.py @@ -1,3 +1,6 @@ +from dataclasses import Field +import datetime +from typing import Optional import pandas as pd import os from sqlalchemy import create_engine, text @@ -30,4 +33,9 @@ # Création de la table si elle n’existe pas - +class User(SQLModel, table=True): + id: Optional[int] = Field(default=None, primary_key=True) + email: str + hashed_password: str + role: str = "user" + created_at: datetime = Field(default_factory=datetime.utcnow) diff --git a/src/obesitrack/db/models.py b/src/obesitrack/db/models.py deleted file mode 100644 index 4b4e71e0b..000000000 --- a/src/obesitrack/db/models.py +++ /dev/null @@ -1,10 +0,0 @@ -from dataclasses import Field -from typing import Optional -from datetime import datetime - -class User(SQLModel, table=True): - id: Optional[int] = Field(default=None, primary_key=True) - email: str - hashed_password: str - role: str = "user" - created_at: datetime = Field(default_factory=datetime.utcnow) diff --git a/templates/admin.html b/templates/admin.html deleted file mode 100644 index 653bb3385..000000000 --- a/templates/admin.html +++ /dev/null @@ -1,54 +0,0 @@ - - - - Gestion Utilisateurs - ObesiTrack - - -

Liste des utilisateurs

- - - - - - - - - - - - {% for user in users %} - - - - - - - - {% endfor %} - -
IDNomEmailRôleActions
{{ user.id }}{{ user.name }}{{ user.email }}{{ user.role }} - - -
- - - - diff --git a/templates/assets/js/Chart.js b/templates/assets/js/Chart.js deleted file mode 100644 index e69de29bb..000000000 diff --git a/templates/assets/js/admin.js b/templates/assets/js/admin.js deleted file mode 100644 index e69de29bb..000000000 diff --git a/templates/assets/js/css/inst.md b/templates/assets/js/css/inst.md deleted file mode 100644 index eb43ecbc7..000000000 --- a/templates/assets/js/css/inst.md +++ /dev/null @@ -1,34 +0,0 @@ - diff --git a/templates/assets/js/history.js b/templates/assets/js/history.js deleted file mode 100644 index e69de29bb..000000000 diff --git a/templates/assets/js/login.js b/templates/assets/js/login.js deleted file mode 100644 index 1dd6a04d2..000000000 --- a/templates/assets/js/login.js +++ /dev/null @@ -1,17 +0,0 @@ -const form = document.getElementById('login-form'); -form.addEventListener('submit', async (e) => { - e.preventDefault(); - const data = Object.fromEntries(new FormData(form)); - const res = await fetch('/auth/token', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify(data) - }); - const json = await res.json(); - if(json.access_token){ - localStorage.setItem('jwt', json.access_token); - window.location.href = 'predict.html'; - } else { - document.getElementById('message').textContent = json.detail || "Erreur de connexion"; - } -}); diff --git a/templates/assets/js/predict.js b/templates/assets/js/predict.js deleted file mode 100644 index e69de29bb..000000000 diff --git a/templates/assets/js/register.js b/templates/assets/js/register.js deleted file mode 100644 index e69de29bb..000000000 diff --git a/templates/history.html b/templates/history.html deleted file mode 100644 index 2f5b5c3c8..000000000 --- a/templates/history.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - Historique ObesiTrack - - -

Mon historique de prédictions

- - - - - - - - - - - - - {% for pred in predictions %} - - - - - - - - - {% endfor %} - -
DateÂgeTaillePoidsLabelProbabilités
{{ pred.created_at }}{{ pred.age }}{{ pred.height }}{{ pred.weight }}{{ pred.label }}{{ pred.probabilities }}
- - diff --git a/templates/login.html b/templates/login.html deleted file mode 100644 index 8c04b2df8..000000000 --- a/templates/login.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - -ObesiTrack - Login - - - -
-

Se connecter

-
- - - -
-

-
- - - diff --git a/templates/predict.html b/templates/predict.html deleted file mode 100644 index 26c7ef910..000000000 --- a/templates/predict.html +++ /dev/null @@ -1,52 +0,0 @@ - - - - Prédiction ObesiTrack - - - -

Soumettre vos données

-
- - - - - -
- -

Résultat :

- - - - - diff --git a/templates/register.html b/templates/register.html deleted file mode 100644 index 9101ced88..000000000 --- a/templates/register.html +++ /dev/null @@ -1,70 +0,0 @@ - - - - - ObesiTrack - Inscription - - - -
-

Créer un compte

-
- - - - -
-

-
- - - - - - - - - ObesiTrack - Inscription - - - -
-

Créer un compte

-
- - - - -
-

-
- - - - diff --git a/test.html b/test.html new file mode 100644 index 000000000..0e86e86ce --- /dev/null +++ b/test.html @@ -0,0 +1,31 @@ +fastapi==0.115.0 +uvicorn[standard]==0.30.6 +python-multipart==0.0.9 +pydantic==2.8.2 +scikit-learn==1.5.2 +pandas==2.2.2 +numpy==2.0.1 +joblib==1.4.2 +python-jose[cryptography]==3.3.0 +passlib[bcrypt]==1.7.4 +slowapi==0.1.9 +starlette==0.38.5 +loguru==0.7.2 +httpx==0.27.2 +pytest==8.3.2 +python-dotenv==1.0.1 + +opentelemetry-api +opentelemetry-sdk +opentelemetry-instrumentation-fastapi +opentelemetry-exporter-otlp +opentelemetry-instrumentation-psycopg2 +prometheus-client +opentelemetry-instrumentation-logging + + +shap==0.41.0 +joblib + +evidently==0.3.6 +pandas diff --git a/tests/conftest.py b/tests/conftest.py index 5a4397bdf..15374c856 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,8 +1,10 @@ import pytest from fastapi.testclient import TestClient -from obesitrack.main import app -client = TestClient(app) +import api + + +client = TestClient(api.app) @pytest.fixture def auth_headers(): diff --git a/tests/test_drift.py b/tests/test_drift.py index b84f105c4..f3871d53d 100644 --- a/tests/test_drift.py +++ b/tests/test_drift.py @@ -1,8 +1,10 @@ import pytest from fastapi.testclient import TestClient -from obesitrack.main import app -client = TestClient(app) +import api + + +client = TestClient(api.app) @pytest.fixture(autouse=True) def mock_drift(monkeypatch): diff --git a/tests/test_explain.py b/tests/test_explain.py index 41fcb168c..d3606d5e8 100644 --- a/tests/test_explain.py +++ b/tests/test_explain.py @@ -1,8 +1,10 @@ import pytest from fastapi.testclient import TestClient -from obesitrack.main import app -client = TestClient(app) +import api + + +client = TestClient(api.app) @pytest.fixture(autouse=True) def mock_shap(monkeypatch): diff --git a/venv/Lib/site-packages/anyio/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/anyio/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..830afadce Binary files /dev/null and b/venv/Lib/site-packages/anyio/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/anyio/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.24728 b/venv/Lib/site-packages/anyio/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.24728 new file mode 100644 index 000000000..830afadce Binary files /dev/null and b/venv/Lib/site-packages/anyio/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.24728 differ diff --git a/venv/Lib/site-packages/anyio/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.24848 b/venv/Lib/site-packages/anyio/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.24848 new file mode 100644 index 000000000..830afadce Binary files /dev/null and b/venv/Lib/site-packages/anyio/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.24848 differ diff --git a/venv/Lib/site-packages/anyio/__pycache__/from_thread.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/anyio/__pycache__/from_thread.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..d67fa2eed Binary files /dev/null and b/venv/Lib/site-packages/anyio/__pycache__/from_thread.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/anyio/__pycache__/lowlevel.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/anyio/__pycache__/lowlevel.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..92cbd7a70 Binary files /dev/null and b/venv/Lib/site-packages/anyio/__pycache__/lowlevel.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/anyio/__pycache__/pytest_plugin.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/anyio/__pycache__/pytest_plugin.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..e1d6ca535 Binary files /dev/null and b/venv/Lib/site-packages/anyio/__pycache__/pytest_plugin.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/anyio/__pycache__/to_thread.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/anyio/__pycache__/to_thread.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..569dc7565 Binary files /dev/null and b/venv/Lib/site-packages/anyio/__pycache__/to_thread.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/anyio/__pycache__/to_thread.cpython-312-pytest-8.3.2.pyc.24728 b/venv/Lib/site-packages/anyio/__pycache__/to_thread.cpython-312-pytest-8.3.2.pyc.24728 new file mode 100644 index 000000000..569dc7565 Binary files /dev/null and b/venv/Lib/site-packages/anyio/__pycache__/to_thread.cpython-312-pytest-8.3.2.pyc.24728 differ diff --git a/venv/Lib/site-packages/anyio/_core/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/anyio/_core/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..4ebf7fd47 Binary files /dev/null and b/venv/Lib/site-packages/anyio/_core/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/anyio/_core/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.24728 b/venv/Lib/site-packages/anyio/_core/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.24728 new file mode 100644 index 000000000..4ebf7fd47 Binary files /dev/null and b/venv/Lib/site-packages/anyio/_core/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.24728 differ diff --git a/venv/Lib/site-packages/anyio/_core/__pycache__/_contextmanagers.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/anyio/_core/__pycache__/_contextmanagers.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..1042497dc Binary files /dev/null and b/venv/Lib/site-packages/anyio/_core/__pycache__/_contextmanagers.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/anyio/_core/__pycache__/_eventloop.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/anyio/_core/__pycache__/_eventloop.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..075b4496a Binary files /dev/null and b/venv/Lib/site-packages/anyio/_core/__pycache__/_eventloop.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/anyio/_core/__pycache__/_eventloop.cpython-312-pytest-8.3.2.pyc.24728 b/venv/Lib/site-packages/anyio/_core/__pycache__/_eventloop.cpython-312-pytest-8.3.2.pyc.24728 new file mode 100644 index 000000000..075b4496a Binary files /dev/null and b/venv/Lib/site-packages/anyio/_core/__pycache__/_eventloop.cpython-312-pytest-8.3.2.pyc.24728 differ diff --git a/venv/Lib/site-packages/anyio/_core/__pycache__/_exceptions.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/anyio/_core/__pycache__/_exceptions.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..832b62c93 Binary files /dev/null and b/venv/Lib/site-packages/anyio/_core/__pycache__/_exceptions.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/anyio/_core/__pycache__/_exceptions.cpython-312-pytest-8.3.2.pyc.24848 b/venv/Lib/site-packages/anyio/_core/__pycache__/_exceptions.cpython-312-pytest-8.3.2.pyc.24848 new file mode 100644 index 000000000..832b62c93 Binary files /dev/null and b/venv/Lib/site-packages/anyio/_core/__pycache__/_exceptions.cpython-312-pytest-8.3.2.pyc.24848 differ diff --git a/venv/Lib/site-packages/anyio/_core/__pycache__/_fileio.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/anyio/_core/__pycache__/_fileio.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..43ab64895 Binary files /dev/null and b/venv/Lib/site-packages/anyio/_core/__pycache__/_fileio.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/anyio/_core/__pycache__/_resources.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/anyio/_core/__pycache__/_resources.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..851443149 Binary files /dev/null and b/venv/Lib/site-packages/anyio/_core/__pycache__/_resources.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/anyio/_core/__pycache__/_resources.cpython-312-pytest-8.3.2.pyc.24728 b/venv/Lib/site-packages/anyio/_core/__pycache__/_resources.cpython-312-pytest-8.3.2.pyc.24728 new file mode 100644 index 000000000..851443149 Binary files /dev/null and b/venv/Lib/site-packages/anyio/_core/__pycache__/_resources.cpython-312-pytest-8.3.2.pyc.24728 differ diff --git a/venv/Lib/site-packages/anyio/_core/__pycache__/_signals.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/anyio/_core/__pycache__/_signals.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..1bbbe0474 Binary files /dev/null and b/venv/Lib/site-packages/anyio/_core/__pycache__/_signals.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/anyio/_core/__pycache__/_sockets.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/anyio/_core/__pycache__/_sockets.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..927c9456d Binary files /dev/null and b/venv/Lib/site-packages/anyio/_core/__pycache__/_sockets.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/anyio/_core/__pycache__/_sockets.cpython-312-pytest-8.3.2.pyc.24848 b/venv/Lib/site-packages/anyio/_core/__pycache__/_sockets.cpython-312-pytest-8.3.2.pyc.24848 new file mode 100644 index 000000000..927c9456d Binary files /dev/null and b/venv/Lib/site-packages/anyio/_core/__pycache__/_sockets.cpython-312-pytest-8.3.2.pyc.24848 differ diff --git a/venv/Lib/site-packages/anyio/_core/__pycache__/_streams.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/anyio/_core/__pycache__/_streams.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..83af8a724 Binary files /dev/null and b/venv/Lib/site-packages/anyio/_core/__pycache__/_streams.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/anyio/_core/__pycache__/_subprocesses.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/anyio/_core/__pycache__/_subprocesses.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..f4f10358a Binary files /dev/null and b/venv/Lib/site-packages/anyio/_core/__pycache__/_subprocesses.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/anyio/_core/__pycache__/_subprocesses.cpython-312-pytest-8.3.2.pyc.24848 b/venv/Lib/site-packages/anyio/_core/__pycache__/_subprocesses.cpython-312-pytest-8.3.2.pyc.24848 new file mode 100644 index 000000000..f4f10358a Binary files /dev/null and b/venv/Lib/site-packages/anyio/_core/__pycache__/_subprocesses.cpython-312-pytest-8.3.2.pyc.24848 differ diff --git a/venv/Lib/site-packages/anyio/_core/__pycache__/_synchronization.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/anyio/_core/__pycache__/_synchronization.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..9c1a502d4 Binary files /dev/null and b/venv/Lib/site-packages/anyio/_core/__pycache__/_synchronization.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/anyio/_core/__pycache__/_synchronization.cpython-312-pytest-8.3.2.pyc.24728 b/venv/Lib/site-packages/anyio/_core/__pycache__/_synchronization.cpython-312-pytest-8.3.2.pyc.24728 new file mode 100644 index 000000000..9c1a502d4 Binary files /dev/null and b/venv/Lib/site-packages/anyio/_core/__pycache__/_synchronization.cpython-312-pytest-8.3.2.pyc.24728 differ diff --git a/venv/Lib/site-packages/anyio/_core/__pycache__/_synchronization.cpython-312-pytest-8.3.2.pyc.24848 b/venv/Lib/site-packages/anyio/_core/__pycache__/_synchronization.cpython-312-pytest-8.3.2.pyc.24848 new file mode 100644 index 000000000..9c1a502d4 Binary files /dev/null and b/venv/Lib/site-packages/anyio/_core/__pycache__/_synchronization.cpython-312-pytest-8.3.2.pyc.24848 differ diff --git a/venv/Lib/site-packages/anyio/_core/__pycache__/_tasks.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/anyio/_core/__pycache__/_tasks.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..15eae852f Binary files /dev/null and b/venv/Lib/site-packages/anyio/_core/__pycache__/_tasks.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/anyio/_core/__pycache__/_tempfile.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/anyio/_core/__pycache__/_tempfile.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..c6b55a141 Binary files /dev/null and b/venv/Lib/site-packages/anyio/_core/__pycache__/_tempfile.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/anyio/_core/__pycache__/_tempfile.cpython-312-pytest-8.3.2.pyc.24848 b/venv/Lib/site-packages/anyio/_core/__pycache__/_tempfile.cpython-312-pytest-8.3.2.pyc.24848 new file mode 100644 index 000000000..c6b55a141 Binary files /dev/null and b/venv/Lib/site-packages/anyio/_core/__pycache__/_tempfile.cpython-312-pytest-8.3.2.pyc.24848 differ diff --git a/venv/Lib/site-packages/anyio/_core/__pycache__/_testing.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/anyio/_core/__pycache__/_testing.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..0ed3ccc37 Binary files /dev/null and b/venv/Lib/site-packages/anyio/_core/__pycache__/_testing.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/anyio/_core/__pycache__/_typedattr.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/anyio/_core/__pycache__/_typedattr.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..57e395b3c Binary files /dev/null and b/venv/Lib/site-packages/anyio/_core/__pycache__/_typedattr.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/anyio/_core/__pycache__/_typedattr.cpython-312-pytest-8.3.2.pyc.24728 b/venv/Lib/site-packages/anyio/_core/__pycache__/_typedattr.cpython-312-pytest-8.3.2.pyc.24728 new file mode 100644 index 000000000..57e395b3c Binary files /dev/null and b/venv/Lib/site-packages/anyio/_core/__pycache__/_typedattr.cpython-312-pytest-8.3.2.pyc.24728 differ diff --git a/venv/Lib/site-packages/anyio/_core/__pycache__/_typedattr.cpython-312-pytest-8.3.2.pyc.24848 b/venv/Lib/site-packages/anyio/_core/__pycache__/_typedattr.cpython-312-pytest-8.3.2.pyc.24848 new file mode 100644 index 000000000..57e395b3c Binary files /dev/null and b/venv/Lib/site-packages/anyio/_core/__pycache__/_typedattr.cpython-312-pytest-8.3.2.pyc.24848 differ diff --git a/venv/Lib/site-packages/anyio/abc/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/anyio/abc/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..7902e1c80 Binary files /dev/null and b/venv/Lib/site-packages/anyio/abc/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/anyio/abc/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.24848 b/venv/Lib/site-packages/anyio/abc/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.24848 new file mode 100644 index 000000000..7902e1c80 Binary files /dev/null and b/venv/Lib/site-packages/anyio/abc/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.24848 differ diff --git a/venv/Lib/site-packages/anyio/abc/__pycache__/_eventloop.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/anyio/abc/__pycache__/_eventloop.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..aa97a2128 Binary files /dev/null and b/venv/Lib/site-packages/anyio/abc/__pycache__/_eventloop.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/anyio/abc/__pycache__/_resources.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/anyio/abc/__pycache__/_resources.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..a8add3bb8 Binary files /dev/null and b/venv/Lib/site-packages/anyio/abc/__pycache__/_resources.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/anyio/abc/__pycache__/_resources.cpython-312-pytest-8.3.2.pyc.24848 b/venv/Lib/site-packages/anyio/abc/__pycache__/_resources.cpython-312-pytest-8.3.2.pyc.24848 new file mode 100644 index 000000000..a8add3bb8 Binary files /dev/null and b/venv/Lib/site-packages/anyio/abc/__pycache__/_resources.cpython-312-pytest-8.3.2.pyc.24848 differ diff --git a/venv/Lib/site-packages/anyio/abc/__pycache__/_sockets.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/anyio/abc/__pycache__/_sockets.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..d13be948f Binary files /dev/null and b/venv/Lib/site-packages/anyio/abc/__pycache__/_sockets.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/anyio/abc/__pycache__/_sockets.cpython-312-pytest-8.3.2.pyc.24848 b/venv/Lib/site-packages/anyio/abc/__pycache__/_sockets.cpython-312-pytest-8.3.2.pyc.24848 new file mode 100644 index 000000000..d13be948f Binary files /dev/null and b/venv/Lib/site-packages/anyio/abc/__pycache__/_sockets.cpython-312-pytest-8.3.2.pyc.24848 differ diff --git a/venv/Lib/site-packages/anyio/abc/__pycache__/_streams.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/anyio/abc/__pycache__/_streams.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..2f28ce781 Binary files /dev/null and b/venv/Lib/site-packages/anyio/abc/__pycache__/_streams.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/anyio/abc/__pycache__/_subprocesses.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/anyio/abc/__pycache__/_subprocesses.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..7de736432 Binary files /dev/null and b/venv/Lib/site-packages/anyio/abc/__pycache__/_subprocesses.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/anyio/abc/__pycache__/_tasks.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/anyio/abc/__pycache__/_tasks.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..f6ed049f7 Binary files /dev/null and b/venv/Lib/site-packages/anyio/abc/__pycache__/_tasks.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/anyio/abc/__pycache__/_testing.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/anyio/abc/__pycache__/_testing.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..b22c2603f Binary files /dev/null and b/venv/Lib/site-packages/anyio/abc/__pycache__/_testing.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/anyio/abc/__pycache__/_testing.cpython-312-pytest-8.3.2.pyc.14552 b/venv/Lib/site-packages/anyio/abc/__pycache__/_testing.cpython-312-pytest-8.3.2.pyc.14552 new file mode 100644 index 000000000..b22c2603f Binary files /dev/null and b/venv/Lib/site-packages/anyio/abc/__pycache__/_testing.cpython-312-pytest-8.3.2.pyc.14552 differ diff --git a/venv/Lib/site-packages/anyio/abc/__pycache__/_testing.cpython-312-pytest-8.3.2.pyc.24728 b/venv/Lib/site-packages/anyio/abc/__pycache__/_testing.cpython-312-pytest-8.3.2.pyc.24728 new file mode 100644 index 000000000..b22c2603f Binary files /dev/null and b/venv/Lib/site-packages/anyio/abc/__pycache__/_testing.cpython-312-pytest-8.3.2.pyc.24728 differ diff --git a/venv/Lib/site-packages/anyio/streams/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/anyio/streams/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..d0de8783d Binary files /dev/null and b/venv/Lib/site-packages/anyio/streams/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/anyio/streams/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.24728 b/venv/Lib/site-packages/anyio/streams/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.24728 new file mode 100644 index 000000000..d0de8783d Binary files /dev/null and b/venv/Lib/site-packages/anyio/streams/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.24728 differ diff --git a/venv/Lib/site-packages/anyio/streams/__pycache__/memory.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/anyio/streams/__pycache__/memory.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..f9212e67f Binary files /dev/null and b/venv/Lib/site-packages/anyio/streams/__pycache__/memory.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/anyio/streams/__pycache__/stapled.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/anyio/streams/__pycache__/stapled.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..316982542 Binary files /dev/null and b/venv/Lib/site-packages/anyio/streams/__pycache__/stapled.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/anyio/streams/__pycache__/tls.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/anyio/streams/__pycache__/tls.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..db02acd26 Binary files /dev/null and b/venv/Lib/site-packages/anyio/streams/__pycache__/tls.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/anyio/streams/__pycache__/tls.cpython-312-pytest-8.3.2.pyc.14552 b/venv/Lib/site-packages/anyio/streams/__pycache__/tls.cpython-312-pytest-8.3.2.pyc.14552 new file mode 100644 index 000000000..db02acd26 Binary files /dev/null and b/venv/Lib/site-packages/anyio/streams/__pycache__/tls.cpython-312-pytest-8.3.2.pyc.14552 differ diff --git a/venv/Lib/site-packages/faker/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..ef0e990c9 Binary files /dev/null and b/venv/Lib/site-packages/faker/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/__pycache__/config.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/__pycache__/config.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..8270a3db1 Binary files /dev/null and b/venv/Lib/site-packages/faker/__pycache__/config.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/__pycache__/exceptions.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/__pycache__/exceptions.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..f589c9878 Binary files /dev/null and b/venv/Lib/site-packages/faker/__pycache__/exceptions.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/__pycache__/factory.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/__pycache__/factory.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..664eb3653 Binary files /dev/null and b/venv/Lib/site-packages/faker/__pycache__/factory.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/__pycache__/factory.cpython-312-pytest-8.3.2.pyc.14552 b/venv/Lib/site-packages/faker/__pycache__/factory.cpython-312-pytest-8.3.2.pyc.14552 new file mode 100644 index 000000000..664eb3653 Binary files /dev/null and b/venv/Lib/site-packages/faker/__pycache__/factory.cpython-312-pytest-8.3.2.pyc.14552 differ diff --git a/venv/Lib/site-packages/faker/__pycache__/generator.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/__pycache__/generator.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..c08db9411 Binary files /dev/null and b/venv/Lib/site-packages/faker/__pycache__/generator.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/__pycache__/proxy.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/__pycache__/proxy.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..51ef0b946 Binary files /dev/null and b/venv/Lib/site-packages/faker/__pycache__/proxy.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/__pycache__/typing.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/__pycache__/typing.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..7a1740a10 Binary files /dev/null and b/venv/Lib/site-packages/faker/__pycache__/typing.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/contrib/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/contrib/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..830503d71 Binary files /dev/null and b/venv/Lib/site-packages/faker/contrib/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/contrib/pytest/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/contrib/pytest/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..24905fee6 Binary files /dev/null and b/venv/Lib/site-packages/faker/contrib/pytest/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/contrib/pytest/__pycache__/plugin.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/contrib/pytest/__pycache__/plugin.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..85d539e67 Binary files /dev/null and b/venv/Lib/site-packages/faker/contrib/pytest/__pycache__/plugin.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/decode/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/decode/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..9de468665 Binary files /dev/null and b/venv/Lib/site-packages/faker/decode/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/decode/__pycache__/codes.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/decode/__pycache__/codes.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..118b873e9 Binary files /dev/null and b/venv/Lib/site-packages/faker/decode/__pycache__/codes.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/providers/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/providers/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..9207c1d50 Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/providers/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.24848 b/venv/Lib/site-packages/faker/providers/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.24848 new file mode 100644 index 000000000..9207c1d50 Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.24848 differ diff --git a/venv/Lib/site-packages/faker/providers/address/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/providers/address/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..0b79e3395 Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/address/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/providers/address/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.24848 b/venv/Lib/site-packages/faker/providers/address/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.24848 new file mode 100644 index 000000000..0b79e3395 Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/address/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.24848 differ diff --git a/venv/Lib/site-packages/faker/providers/automotive/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/providers/automotive/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..7d347213d Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/automotive/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/providers/bank/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/providers/bank/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..1ef64c97c Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/bank/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/providers/bank/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.14552 b/venv/Lib/site-packages/faker/providers/bank/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.14552 new file mode 100644 index 000000000..1ef64c97c Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/bank/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.14552 differ diff --git a/venv/Lib/site-packages/faker/providers/barcode/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/providers/barcode/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..d0460ca8c Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/barcode/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/providers/barcode/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.24848 b/venv/Lib/site-packages/faker/providers/barcode/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.24848 new file mode 100644 index 000000000..d0460ca8c Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/barcode/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.24848 differ diff --git a/venv/Lib/site-packages/faker/providers/color/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/providers/color/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..6c6e760cd Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/color/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/providers/color/__pycache__/color.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/providers/color/__pycache__/color.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..e3c2c0ad2 Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/color/__pycache__/color.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/providers/color/__pycache__/color.cpython-312-pytest-8.3.2.pyc.24728 b/venv/Lib/site-packages/faker/providers/color/__pycache__/color.cpython-312-pytest-8.3.2.pyc.24728 new file mode 100644 index 000000000..e3c2c0ad2 Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/color/__pycache__/color.cpython-312-pytest-8.3.2.pyc.24728 differ diff --git a/venv/Lib/site-packages/faker/providers/company/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/providers/company/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..3f23136f9 Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/company/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/providers/company/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.24728 b/venv/Lib/site-packages/faker/providers/company/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.24728 new file mode 100644 index 000000000..3f23136f9 Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/company/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.24728 differ diff --git a/venv/Lib/site-packages/faker/providers/credit_card/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/providers/credit_card/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..093628648 Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/credit_card/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/providers/currency/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/providers/currency/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..b1036e70f Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/currency/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/providers/currency/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.14552 b/venv/Lib/site-packages/faker/providers/currency/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.14552 new file mode 100644 index 000000000..b1036e70f Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/currency/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.14552 differ diff --git a/venv/Lib/site-packages/faker/providers/date_time/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/providers/date_time/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..3197c603a Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/date_time/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/providers/doi/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/providers/doi/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..0353de05a Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/doi/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/providers/doi/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.24728 b/venv/Lib/site-packages/faker/providers/doi/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.24728 new file mode 100644 index 000000000..0353de05a Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/doi/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.24728 differ diff --git a/venv/Lib/site-packages/faker/providers/emoji/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/providers/emoji/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..0598cde7c Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/emoji/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/providers/file/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/providers/file/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..9c293e4eb Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/file/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/providers/file/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.14552 b/venv/Lib/site-packages/faker/providers/file/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.14552 new file mode 100644 index 000000000..9c293e4eb Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/file/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.14552 differ diff --git a/venv/Lib/site-packages/faker/providers/geo/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/providers/geo/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..3b75021c7 Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/geo/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/providers/internet/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/providers/internet/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..72ce4323f Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/internet/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/providers/isbn/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/providers/isbn/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..122292cd0 Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/isbn/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/providers/isbn/__pycache__/isbn.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/providers/isbn/__pycache__/isbn.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..2a2103333 Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/isbn/__pycache__/isbn.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/providers/job/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/providers/job/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..ff45793f6 Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/job/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/providers/lorem/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/providers/lorem/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..18053c02e Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/lorem/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/providers/lorem/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.24848 b/venv/Lib/site-packages/faker/providers/lorem/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.24848 new file mode 100644 index 000000000..18053c02e Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/lorem/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.24848 differ diff --git a/venv/Lib/site-packages/faker/providers/lorem/en_US/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/providers/lorem/en_US/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..6afc2ca61 Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/lorem/en_US/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/providers/misc/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/providers/misc/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..6ee75ec26 Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/misc/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/providers/passport/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/providers/passport/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..3bcae8bf0 Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/passport/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/providers/person/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/providers/person/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..8ee015ab2 Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/person/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/providers/phone_number/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/providers/phone_number/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..a8c54ee4f Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/phone_number/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/providers/profile/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/providers/profile/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..dadfc03d3 Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/profile/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/providers/python/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/providers/python/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..440b88751 Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/python/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/providers/sbn/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/providers/sbn/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..daf2f7177 Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/sbn/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/providers/sbn/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.24728 b/venv/Lib/site-packages/faker/providers/sbn/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.24728 new file mode 100644 index 000000000..daf2f7177 Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/sbn/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc.24728 differ diff --git a/venv/Lib/site-packages/faker/providers/sbn/__pycache__/rules.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/providers/sbn/__pycache__/rules.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..245ee2c07 Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/sbn/__pycache__/rules.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/providers/sbn/__pycache__/rules.cpython-312-pytest-8.3.2.pyc.14552 b/venv/Lib/site-packages/faker/providers/sbn/__pycache__/rules.cpython-312-pytest-8.3.2.pyc.14552 new file mode 100644 index 000000000..245ee2c07 Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/sbn/__pycache__/rules.cpython-312-pytest-8.3.2.pyc.14552 differ diff --git a/venv/Lib/site-packages/faker/providers/sbn/__pycache__/rules.cpython-312-pytest-8.3.2.pyc.24848 b/venv/Lib/site-packages/faker/providers/sbn/__pycache__/rules.cpython-312-pytest-8.3.2.pyc.24848 new file mode 100644 index 000000000..245ee2c07 Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/sbn/__pycache__/rules.cpython-312-pytest-8.3.2.pyc.24848 differ diff --git a/venv/Lib/site-packages/faker/providers/sbn/__pycache__/sbn.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/providers/sbn/__pycache__/sbn.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..eaa16ef2d Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/sbn/__pycache__/sbn.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/providers/sbn/__pycache__/sbn.cpython-312-pytest-8.3.2.pyc.24848 b/venv/Lib/site-packages/faker/providers/sbn/__pycache__/sbn.cpython-312-pytest-8.3.2.pyc.24848 new file mode 100644 index 000000000..eaa16ef2d Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/sbn/__pycache__/sbn.cpython-312-pytest-8.3.2.pyc.24848 differ diff --git a/venv/Lib/site-packages/faker/providers/ssn/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/providers/ssn/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..fa3166987 Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/ssn/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/providers/user_agent/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/providers/user_agent/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..c53dc4b14 Binary files /dev/null and b/venv/Lib/site-packages/faker/providers/user_agent/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/utils/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/utils/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..93ddee090 Binary files /dev/null and b/venv/Lib/site-packages/faker/utils/__pycache__/__init__.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/utils/__pycache__/datasets.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/utils/__pycache__/datasets.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..b8e9052a5 Binary files /dev/null and b/venv/Lib/site-packages/faker/utils/__pycache__/datasets.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/utils/__pycache__/decorators.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/utils/__pycache__/decorators.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..23a0d45a8 Binary files /dev/null and b/venv/Lib/site-packages/faker/utils/__pycache__/decorators.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/utils/__pycache__/distribution.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/utils/__pycache__/distribution.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..52f870aad Binary files /dev/null and b/venv/Lib/site-packages/faker/utils/__pycache__/distribution.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/utils/__pycache__/loading.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/utils/__pycache__/loading.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..3a103afe8 Binary files /dev/null and b/venv/Lib/site-packages/faker/utils/__pycache__/loading.cpython-312-pytest-8.3.2.pyc differ diff --git a/venv/Lib/site-packages/faker/utils/__pycache__/loading.cpython-312-pytest-8.3.2.pyc.14552 b/venv/Lib/site-packages/faker/utils/__pycache__/loading.cpython-312-pytest-8.3.2.pyc.14552 new file mode 100644 index 000000000..3a103afe8 Binary files /dev/null and b/venv/Lib/site-packages/faker/utils/__pycache__/loading.cpython-312-pytest-8.3.2.pyc.14552 differ diff --git a/venv/Lib/site-packages/faker/utils/__pycache__/text.cpython-312-pytest-8.3.2.pyc b/venv/Lib/site-packages/faker/utils/__pycache__/text.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 000000000..b3e9116ac Binary files /dev/null and b/venv/Lib/site-packages/faker/utils/__pycache__/text.cpython-312-pytest-8.3.2.pyc differ