persistence-kit 3.3.0__tar.gz → 3.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/PKG-INFO +1 -1
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/storage/__init__.py +2 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/storage/media.py +4 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/storage/routes.py +26 -2
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/pyproject.toml +1 -1
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/LICENSE +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/README.md +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/__init__.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/api/__init__.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/api/common.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/api/error_handlers.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/api/exceptions.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/api/rate_limit.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/api/route_loader.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/authenticated_user.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/bootstrap/__init__.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/bootstrap/configuration.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/bootstrap/seeders.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/bootstrap/startup.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/contracts/__init__.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/contracts/repository.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/contracts/view_repository.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/py.typed +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository/__init__.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository/dynamodb_repo/dynamodb_mapper.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository/dynamodb_repo/dynamodb_repo.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository/filter_ops.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository/memory_repo/__init__.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository/memory_repo/memory_repo.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository/mongo_repo/__init__.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository/mongo_repo/mongo_mapper.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository/mongo_repo/mongo_repo.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository/sqlalchemy_repo/__init__.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository/sqlalchemy_repo/schema_evolve.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository/sqlalchemy_repo/sqlalchemy_dataclass_mapper.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository/sqlalchemy_repo/sqlalchemy_engine.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository/sqlalchemy_repo/sqlalchemy_repo.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository/sqlalchemy_repo/table_factory.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository_factory/__init__.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository_factory/factory/__init__.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository_factory/factory/repository_factory.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository_factory/registry/__init__.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository_factory/registry/entity_registry.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository_factory/view/__init__.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository_factory/view/populating_repository.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/security/__init__.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/security/factory.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/security/ports.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/security/providers/__init__.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/security/providers/cognito_identity_provider.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/security/providers/memory_security_provider.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/security/registration.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/security/token_verifiers/__init__.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/security/token_verifiers/cognito_jwt_verifier.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/security/token_verifiers/memory_jwt_verifier.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/settings/__init__.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/settings/app_settings.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/settings/constants.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/settings/parsers.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/settings/repo_settings.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/storage/contracts.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/storage/errors.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/storage/factory.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/storage/local.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/storage/s3.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/utils/__init__.py +0 -0
- {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/utils/upsert.py +0 -0
|
@@ -21,6 +21,7 @@ _ROUTE_EXPORTS = {
|
|
|
21
21
|
"ExportDownloadAuthorizer",
|
|
22
22
|
"build_local_export_storage_router",
|
|
23
23
|
"serve_local_export",
|
|
24
|
+
"serve_media_object",
|
|
24
25
|
"guess_export_media_type",
|
|
25
26
|
}
|
|
26
27
|
_S3_EXPORTS = {"S3ObjectStorage", "S3ExportStorageProvider"}
|
|
@@ -48,6 +49,7 @@ __all__ = [
|
|
|
48
49
|
"ExportDownloadAuthorizer",
|
|
49
50
|
"build_local_export_storage_router",
|
|
50
51
|
"serve_local_export",
|
|
52
|
+
"serve_media_object",
|
|
51
53
|
"guess_export_media_type",
|
|
52
54
|
]
|
|
53
55
|
|
|
@@ -44,6 +44,10 @@ class MediaStorage:
|
|
|
44
44
|
def url_prefix(self) -> str:
|
|
45
45
|
return self._url_prefix
|
|
46
46
|
|
|
47
|
+
@property
|
|
48
|
+
def object_storage(self) -> ObjectStorage:
|
|
49
|
+
return self._storage
|
|
50
|
+
|
|
47
51
|
@property
|
|
48
52
|
def allowed_content_types(self) -> tuple[str, ...]:
|
|
49
53
|
return self._allowed_content_types
|
|
@@ -6,13 +6,15 @@ from pathlib import Path
|
|
|
6
6
|
from typing import Any
|
|
7
7
|
|
|
8
8
|
from fastapi import APIRouter, Depends, HTTPException
|
|
9
|
-
from fastapi.responses import FileResponse
|
|
9
|
+
from fastapi.responses import FileResponse, RedirectResponse
|
|
10
10
|
from starlette import status
|
|
11
|
+
from starlette.responses import Response
|
|
11
12
|
|
|
12
13
|
from persistence_kit.settings import PersistenceKitSettings
|
|
13
14
|
from persistence_kit.storage.errors import StorageConfigError
|
|
14
15
|
from persistence_kit.storage.factory import get_export_storage
|
|
15
|
-
from persistence_kit.storage.local import LocalExportStorageProvider
|
|
16
|
+
from persistence_kit.storage.local import LocalExportStorageProvider, LocalObjectStorage
|
|
17
|
+
from persistence_kit.storage.media import MediaStorage
|
|
16
18
|
|
|
17
19
|
SettingsProvider = Callable[[], PersistenceKitSettings]
|
|
18
20
|
CurrentUserDependency = Callable[..., Any]
|
|
@@ -117,3 +119,25 @@ def _get_local_export_storage(
|
|
|
117
119
|
|
|
118
120
|
def _anonymous_current_user() -> None:
|
|
119
121
|
return None
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
async def serve_media_object(
|
|
125
|
+
storage: MediaStorage,
|
|
126
|
+
key: str,
|
|
127
|
+
*,
|
|
128
|
+
media_type: str | None = None,
|
|
129
|
+
) -> Response:
|
|
130
|
+
backend = storage.object_storage
|
|
131
|
+
if isinstance(backend, LocalObjectStorage):
|
|
132
|
+
file_path = backend.get_file_path(key)
|
|
133
|
+
if not file_path.is_file():
|
|
134
|
+
raise HTTPException(
|
|
135
|
+
status_code=status.HTTP_404_NOT_FOUND,
|
|
136
|
+
detail="Archivo no encontrado.",
|
|
137
|
+
)
|
|
138
|
+
return FileResponse(
|
|
139
|
+
path=file_path,
|
|
140
|
+
media_type=media_type or "application/octet-stream",
|
|
141
|
+
)
|
|
142
|
+
presigned_url = await storage.generate_presigned_url(key)
|
|
143
|
+
return RedirectResponse(url=presigned_url)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/contracts/view_repository.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository/memory_repo/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository/mongo_repo/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository/mongo_repo/mongo_repo.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository_factory/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository_factory/view/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/security/providers/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/security/token_verifiers/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|