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.
Files changed (67) hide show
  1. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/PKG-INFO +1 -1
  2. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/storage/__init__.py +2 -0
  3. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/storage/media.py +4 -0
  4. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/storage/routes.py +26 -2
  5. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/pyproject.toml +1 -1
  6. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/LICENSE +0 -0
  7. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/README.md +0 -0
  8. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/__init__.py +0 -0
  9. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/api/__init__.py +0 -0
  10. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/api/common.py +0 -0
  11. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/api/error_handlers.py +0 -0
  12. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/api/exceptions.py +0 -0
  13. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/api/rate_limit.py +0 -0
  14. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/api/route_loader.py +0 -0
  15. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/authenticated_user.py +0 -0
  16. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/bootstrap/__init__.py +0 -0
  17. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/bootstrap/configuration.py +0 -0
  18. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/bootstrap/seeders.py +0 -0
  19. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/bootstrap/startup.py +0 -0
  20. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/contracts/__init__.py +0 -0
  21. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/contracts/repository.py +0 -0
  22. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/contracts/view_repository.py +0 -0
  23. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/py.typed +0 -0
  24. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository/__init__.py +0 -0
  25. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository/dynamodb_repo/dynamodb_mapper.py +0 -0
  26. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository/dynamodb_repo/dynamodb_repo.py +0 -0
  27. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository/filter_ops.py +0 -0
  28. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository/memory_repo/__init__.py +0 -0
  29. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository/memory_repo/memory_repo.py +0 -0
  30. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository/mongo_repo/__init__.py +0 -0
  31. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository/mongo_repo/mongo_mapper.py +0 -0
  32. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository/mongo_repo/mongo_repo.py +0 -0
  33. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository/sqlalchemy_repo/__init__.py +0 -0
  34. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository/sqlalchemy_repo/schema_evolve.py +0 -0
  35. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository/sqlalchemy_repo/sqlalchemy_dataclass_mapper.py +0 -0
  36. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository/sqlalchemy_repo/sqlalchemy_engine.py +0 -0
  37. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository/sqlalchemy_repo/sqlalchemy_repo.py +0 -0
  38. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository/sqlalchemy_repo/table_factory.py +0 -0
  39. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository_factory/__init__.py +0 -0
  40. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository_factory/factory/__init__.py +0 -0
  41. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository_factory/factory/repository_factory.py +0 -0
  42. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository_factory/registry/__init__.py +0 -0
  43. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository_factory/registry/entity_registry.py +0 -0
  44. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository_factory/view/__init__.py +0 -0
  45. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/repository_factory/view/populating_repository.py +0 -0
  46. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/security/__init__.py +0 -0
  47. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/security/factory.py +0 -0
  48. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/security/ports.py +0 -0
  49. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/security/providers/__init__.py +0 -0
  50. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/security/providers/cognito_identity_provider.py +0 -0
  51. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/security/providers/memory_security_provider.py +0 -0
  52. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/security/registration.py +0 -0
  53. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/security/token_verifiers/__init__.py +0 -0
  54. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/security/token_verifiers/cognito_jwt_verifier.py +0 -0
  55. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/security/token_verifiers/memory_jwt_verifier.py +0 -0
  56. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/settings/__init__.py +0 -0
  57. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/settings/app_settings.py +0 -0
  58. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/settings/constants.py +0 -0
  59. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/settings/parsers.py +0 -0
  60. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/settings/repo_settings.py +0 -0
  61. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/storage/contracts.py +0 -0
  62. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/storage/errors.py +0 -0
  63. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/storage/factory.py +0 -0
  64. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/storage/local.py +0 -0
  65. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/storage/s3.py +0 -0
  66. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/utils/__init__.py +0 -0
  67. {persistence_kit-3.3.0 → persistence_kit-3.4.0}/persistence_kit/utils/upsert.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: persistence-kit
3
- Version: 3.3.0
3
+ Version: 3.4.0
4
4
  Summary: Reusable persistence and repository toolkit
5
5
  License: MIT
6
6
  License-File: LICENSE
@@ -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)
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "persistence-kit"
3
- version = "3.3.0"
3
+ version = "3.4.0"
4
4
  description = "Reusable persistence and repository toolkit"
5
5
  authors = ["Andres Felipe Serrano Barrios <andresfserrano1@gmail.com>"]
6
6
  readme = "README.md"
File without changes