Get available sessions
This commit is contained in:
		
							parent
							
								
									102fc816f8
								
							
						
					
					
						commit
						a994eacd2d
					
				|  | @ -2,7 +2,7 @@ import json | ||||||
| from pathlib import Path | from pathlib import Path | ||||||
| 
 | 
 | ||||||
| from fastapi import FastAPI | from fastapi import FastAPI | ||||||
| from fastapi.responses import HTMLResponse, RedirectResponse, FileResponse | from fastapi.responses import FileResponse, HTMLResponse, RedirectResponse | ||||||
| from fastapi.staticfiles import StaticFiles | from fastapi.staticfiles import StaticFiles | ||||||
| from starlette.middleware.sessions import SessionMiddleware | from starlette.middleware.sessions import SessionMiddleware | ||||||
| from starlette.requests import Request | from starlette.requests import Request | ||||||
|  |  | ||||||
|  | @ -1,9 +1,9 @@ | ||||||
| from fastapi import APIRouter | from fastapi import APIRouter | ||||||
| from fastapi.responses import PlainTextResponse | from fastapi.responses import PlainTextResponse | ||||||
| 
 | 
 | ||||||
| from hellocomputer.sessions import SessionDB |  | ||||||
| from hellocomputer.db import StorageEngines | from hellocomputer.db import StorageEngines | ||||||
| from hellocomputer.extraction import extract_code_block | from hellocomputer.extraction import extract_code_block | ||||||
|  | from hellocomputer.sessions import SessionDB | ||||||
| 
 | 
 | ||||||
| from ..config import settings | from ..config import settings | ||||||
| from ..models import Chat | from ..models import Chat | ||||||
|  |  | ||||||
|  | @ -2,9 +2,10 @@ from authlib.integrations.starlette_client import OAuth, OAuthError | ||||||
| from fastapi import APIRouter | from fastapi import APIRouter | ||||||
| from fastapi.responses import HTMLResponse, RedirectResponse | from fastapi.responses import HTMLResponse, RedirectResponse | ||||||
| from starlette.requests import Request | from starlette.requests import Request | ||||||
|  | 
 | ||||||
| from hellocomputer.config import settings | from hellocomputer.config import settings | ||||||
| from hellocomputer.users import UserDB |  | ||||||
| from hellocomputer.db import StorageEngines | from hellocomputer.db import StorageEngines | ||||||
|  | from hellocomputer.users import UserDB | ||||||
| 
 | 
 | ||||||
| router = APIRouter() | router = APIRouter() | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -4,9 +4,9 @@ import aiofiles | ||||||
| from fastapi import APIRouter, File, UploadFile | from fastapi import APIRouter, File, UploadFile | ||||||
| from fastapi.responses import JSONResponse | from fastapi.responses import JSONResponse | ||||||
| 
 | 
 | ||||||
| from ..sessions import SessionDB |  | ||||||
| from ..config import settings | from ..config import settings | ||||||
| from ..db import StorageEngines | from ..db import StorageEngines | ||||||
|  | from ..sessions import SessionDB | ||||||
| 
 | 
 | ||||||
| router = APIRouter() | router = APIRouter() | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -3,8 +3,11 @@ from uuid import uuid4 | ||||||
| from fastapi import APIRouter | from fastapi import APIRouter | ||||||
| from fastapi.responses import PlainTextResponse | from fastapi.responses import PlainTextResponse | ||||||
| from starlette.requests import Request | from starlette.requests import Request | ||||||
| from hellocomputer.users import OwnershipDB | from typing import List | ||||||
|  | 
 | ||||||
| from hellocomputer.db import StorageEngines | from hellocomputer.db import StorageEngines | ||||||
|  | from hellocomputer.users import OwnershipDB | ||||||
|  | 
 | ||||||
| from ..config import settings | from ..config import settings | ||||||
| 
 | 
 | ||||||
| # Scheme for the Authorization header | # Scheme for the Authorization header | ||||||
|  | @ -32,3 +35,15 @@ async def get_greeting() -> str: | ||||||
|         "Hi! I'm a helpful assistant. Please upload or select a file " |         "Hi! I'm a helpful assistant. Please upload or select a file " | ||||||
|         "and I'll try to analyze it following your orders" |         "and I'll try to analyze it following your orders" | ||||||
|     ) |     ) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | @router.get("/sessions") | ||||||
|  | async def get_sessions(request: Request) -> List[str]: | ||||||
|  |     user_email = request.session.get("user").get("email") | ||||||
|  |     ownership = OwnershipDB( | ||||||
|  |         StorageEngines.gcs, | ||||||
|  |         gcs_access=settings.gcs_access, | ||||||
|  |         gcs_secret=settings.gcs_secret, | ||||||
|  |         bucket=settings.gcs_bucketname, | ||||||
|  |     ) | ||||||
|  |     return ownership.sessions(user_email) | ||||||
|  |  | ||||||
|  | @ -1,11 +1,12 @@ | ||||||
| import json | import json | ||||||
| import os | import os | ||||||
|  | from datetime import datetime | ||||||
| from pathlib import Path | from pathlib import Path | ||||||
|  | from typing import List | ||||||
| from uuid import UUID, uuid4 | from uuid import UUID, uuid4 | ||||||
| 
 | 
 | ||||||
| import duckdb | import duckdb | ||||||
| import polars as pl | import polars as pl | ||||||
| from datetime import datetime |  | ||||||
| 
 | 
 | ||||||
| from .db import DDB, StorageEngines | from .db import DDB, StorageEngines | ||||||
| 
 | 
 | ||||||
|  | @ -79,7 +80,7 @@ class OwnershipDB(DDB): | ||||||
|               '{sid}' as sid, |               '{sid}' as sid, | ||||||
|               '{now}' as timestamp |               '{now}' as timestamp | ||||||
|           ) |           ) | ||||||
|         TO '{self.path_prefix}/{record_id}.csv' (FORMAT JSON)""" |         TO '{self.path_prefix}/{record_id}.csv'""" | ||||||
| 
 | 
 | ||||||
|         try: |         try: | ||||||
|             self.db.sql(query) |             self.db.sql(query) | ||||||
|  | @ -88,3 +89,18 @@ class OwnershipDB(DDB): | ||||||
|             self.db.sql(query) |             self.db.sql(query) | ||||||
| 
 | 
 | ||||||
|         return sid |         return sid | ||||||
|  | 
 | ||||||
|  |     def sessions(self, user_email: str) -> List[str]: | ||||||
|  |         return ( | ||||||
|  |             self.db.sql(f""" | ||||||
|  |             SELECT | ||||||
|  |                 sid | ||||||
|  |             FROM | ||||||
|  |                 '{self.path_prefix}/*.csv' | ||||||
|  |             WHERE | ||||||
|  |                 email = '{user_email}' | ||||||
|  |         """) | ||||||
|  |             .pl() | ||||||
|  |             .to_series() | ||||||
|  |             .to_list() | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  | @ -1,8 +1,8 @@ | ||||||
| from pathlib import Path | from pathlib import Path | ||||||
| 
 | 
 | ||||||
| import hellocomputer | import hellocomputer | ||||||
| from hellocomputer.sessions import SessionDB |  | ||||||
| from hellocomputer.db import StorageEngines | from hellocomputer.db import StorageEngines | ||||||
|  | from hellocomputer.sessions import SessionDB | ||||||
| 
 | 
 | ||||||
| TEST_STORAGE = StorageEngines.local | TEST_STORAGE = StorageEngines.local | ||||||
| TEST_XLS_PATH = ( | TEST_XLS_PATH = ( | ||||||
|  |  | ||||||
|  | @ -2,11 +2,11 @@ from pathlib import Path | ||||||
| 
 | 
 | ||||||
| import hellocomputer | import hellocomputer | ||||||
| import pytest | import pytest | ||||||
| from hellocomputer.sessions import SessionDB |  | ||||||
| from hellocomputer.config import settings | from hellocomputer.config import settings | ||||||
| from hellocomputer.db import StorageEngines | from hellocomputer.db import StorageEngines | ||||||
| from hellocomputer.extraction import extract_code_block | from hellocomputer.extraction import extract_code_block | ||||||
| from hellocomputer.models import Chat | from hellocomputer.models import Chat | ||||||
|  | from hellocomputer.sessions import SessionDB | ||||||
| 
 | 
 | ||||||
| TEST_XLS_PATH = ( | TEST_XLS_PATH = ( | ||||||
|     Path(hellocomputer.__file__).parents[2] |     Path(hellocomputer.__file__).parents[2] | ||||||
|  |  | ||||||
|  | @ -2,7 +2,7 @@ from pathlib import Path | ||||||
| 
 | 
 | ||||||
| import hellocomputer | import hellocomputer | ||||||
| from hellocomputer.db import StorageEngines | from hellocomputer.db import StorageEngines | ||||||
| from hellocomputer.users import UserDB, OwnershipDB | from hellocomputer.users import OwnershipDB, UserDB | ||||||
| 
 | 
 | ||||||
| TEST_STORAGE = StorageEngines.local | TEST_STORAGE = StorageEngines.local | ||||||
| TEST_OUTPUT_FOLDER = Path(hellocomputer.__file__).parents[2] / "test" / "output" | TEST_OUTPUT_FOLDER = Path(hellocomputer.__file__).parents[2] / "test" / "output" | ||||||
|  | @ -28,7 +28,13 @@ def test_user_exists(): | ||||||
| def test_assign_owner(): | def test_assign_owner(): | ||||||
|     assert ( |     assert ( | ||||||
|         OwnershipDB(storage_engine=TEST_STORAGE, path=TEST_OUTPUT_FOLDER).set_ownersip( |         OwnershipDB(storage_engine=TEST_STORAGE, path=TEST_OUTPUT_FOLDER).set_ownersip( | ||||||
|             "something.something@something", "1234", "test" |             "something.something@something", "testsession", "test" | ||||||
|         ) |         ) | ||||||
|         == "1234" |         == "testsession" | ||||||
|     ) |     ) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def test_get_sessions(): | ||||||
|  |     assert OwnershipDB(storage_engine=TEST_STORAGE, path=TEST_OUTPUT_FOLDER).sessions( | ||||||
|  |         "something.something@something" | ||||||
|  |     ) == ["testsession"] | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue