data-sourcerer 0.8.0__tar.gz → 0.8.1__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 (137) hide show
  1. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/PKG-INFO +1 -1
  2. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/__init__.py +1 -1
  3. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/domain/settings/entities.py +3 -0
  4. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/infrastructure/storage_provider/services/azure.py +3 -1
  5. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/infrastructure/storage_provider/services/gcp.py +3 -1
  6. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/infrastructure/storage_provider/services/s3.py +3 -1
  7. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/main/main.py +5 -0
  8. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/settings/main.py +19 -0
  9. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/utils.py +5 -1
  10. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/settings.py +1 -0
  11. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/.gitignore +0 -0
  12. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/LICENSE +0 -0
  13. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/README.md +0 -0
  14. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/pyproject.toml +0 -0
  15. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/domain/__init__.py +0 -0
  16. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/domain/access_credentials/__init__.py +0 -0
  17. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/domain/access_credentials/entities.py +0 -0
  18. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/domain/access_credentials/exceptions.py +0 -0
  19. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/domain/access_credentials/repositories.py +0 -0
  20. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/domain/access_credentials/services.py +0 -0
  21. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/domain/file_system/__init__.py +0 -0
  22. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/domain/file_system/entities.py +0 -0
  23. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/domain/file_system/exceptions.py +0 -0
  24. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/domain/file_system/services.py +0 -0
  25. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/domain/package_meta/__init__.py +0 -0
  26. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/domain/package_meta/entities.py +0 -0
  27. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/domain/package_meta/services.py +0 -0
  28. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/domain/settings/__init__.py +0 -0
  29. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/domain/settings/repositories.py +0 -0
  30. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/domain/settings/services.py +0 -0
  31. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/domain/shared/__init__.py +0 -0
  32. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/domain/shared/entities.py +0 -0
  33. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/domain/storage/__init__.py +0 -0
  34. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/domain/storage/entities.py +0 -0
  35. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/domain/storage/repositories.py +0 -0
  36. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/domain/storage_provider/__init__.py +0 -0
  37. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/domain/storage_provider/entities.py +0 -0
  38. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/domain/storage_provider/exceptions.py +0 -0
  39. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/domain/storage_provider/services.py +0 -0
  40. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/infrastructure/__init__.py +0 -0
  41. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/infrastructure/access_credentials/__init__.py +0 -0
  42. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/infrastructure/access_credentials/exceptions.py +0 -0
  43. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/infrastructure/access_credentials/registry.py +0 -0
  44. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/infrastructure/access_credentials/repositories.py +0 -0
  45. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/infrastructure/access_credentials/services.py +0 -0
  46. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/infrastructure/db/__init__.py +0 -0
  47. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/infrastructure/db/config.py +0 -0
  48. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/infrastructure/db/models.py +0 -0
  49. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/infrastructure/file_system/__init__.py +0 -0
  50. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/infrastructure/file_system/exceptions.py +0 -0
  51. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/infrastructure/file_system/services.py +0 -0
  52. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/infrastructure/package_meta/__init__.py +0 -0
  53. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/infrastructure/package_meta/services.py +0 -0
  54. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/infrastructure/settings/__init__.py +0 -0
  55. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/infrastructure/settings/repositories.py +0 -0
  56. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/infrastructure/settings/services.py +0 -0
  57. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/infrastructure/storage/__init__.py +0 -0
  58. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/infrastructure/storage/repositories.py +0 -0
  59. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/infrastructure/storage/services.py +0 -0
  60. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/infrastructure/storage_provider/__init__.py +0 -0
  61. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/infrastructure/storage_provider/exceptions.py +0 -0
  62. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/infrastructure/storage_provider/registry.py +0 -0
  63. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/infrastructure/storage_provider/services/__init__.py +0 -0
  64. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/infrastructure/utils.py +0 -0
  65. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/__init__.py +0 -0
  66. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/app.py +0 -0
  67. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/di_container.py +0 -0
  68. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/__init__.py +0 -0
  69. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/about/__init__.py +0 -0
  70. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/about/main.py +0 -0
  71. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/about/styles.tcss +0 -0
  72. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/critical_error/__init__.py +0 -0
  73. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/critical_error/main.py +0 -0
  74. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/critical_error/styles.tcss +0 -0
  75. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/file_system_finder/__init__.py +0 -0
  76. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/file_system_finder/main.py +0 -0
  77. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/file_system_finder/styles.tcss +0 -0
  78. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/file_system_finder/widgets/__init__.py +0 -0
  79. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/file_system_finder/widgets/file_system_navigator.py +0 -0
  80. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/main/__init__.py +0 -0
  81. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/main/messages/__init__.py +0 -0
  82. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/main/messages/delete_request.py +0 -0
  83. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/main/messages/download_request.py +0 -0
  84. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/main/messages/presign_url_request.py +0 -0
  85. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/main/messages/preview_request.py +0 -0
  86. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/main/messages/refresh_storages_list_request.py +0 -0
  87. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/main/messages/resizing_rule.py +0 -0
  88. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/main/messages/select_storage_item.py +0 -0
  89. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/main/messages/uncheck_files_request.py +0 -0
  90. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/main/messages/upload_request.py +0 -0
  91. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/main/mixins/__init__.py +0 -0
  92. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/main/mixins/resize_containers_watcher_mixin.py +0 -0
  93. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/main/styles.tcss +0 -0
  94. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/main/widgets/__init__.py +0 -0
  95. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/main/widgets/gradient.py +0 -0
  96. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/main/widgets/resizing_rule.py +0 -0
  97. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/main/widgets/storage_content.py +0 -0
  98. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/main/widgets/storage_list_sidebar.py +0 -0
  99. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/preview_content/__init__.py +0 -0
  100. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/preview_content/main.py +0 -0
  101. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/preview_content/styles.tcss +0 -0
  102. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/preview_content/text_area_style.py +0 -0
  103. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/provider_creds_list/__init__.py +0 -0
  104. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/provider_creds_list/main.py +0 -0
  105. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/provider_creds_list/messages/__init__.py +0 -0
  106. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/provider_creds_list/messages/reload_credentials_request.py +0 -0
  107. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/provider_creds_list/styles.tcss +0 -0
  108. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/provider_creds_registration/__init__.py +0 -0
  109. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/provider_creds_registration/main.py +0 -0
  110. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/provider_creds_registration/styles.tcss +0 -0
  111. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/question/__init__.py +0 -0
  112. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/question/main.py +0 -0
  113. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/question/styles.tcss +0 -0
  114. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/settings/__init__.py +0 -0
  115. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/settings/styles.tcss +0 -0
  116. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/shared/__init__.py +0 -0
  117. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/shared/containers.py +0 -0
  118. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/shared/modal_screens.py +0 -0
  119. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/shared/widgets/__init__.py +0 -0
  120. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/shared/widgets/button.py +0 -0
  121. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/shared/widgets/labeled_input.py +0 -0
  122. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/shared/widgets/spinner.py +0 -0
  123. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/storage_action_progress/__init__.py +0 -0
  124. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/storage_action_progress/main.py +0 -0
  125. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/storage_action_progress/styles.tcss +0 -0
  126. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/storages_list/__init__.py +0 -0
  127. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/storages_list/main.py +0 -0
  128. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/storages_list/messages/__init__.py +0 -0
  129. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/storages_list/messages/reload_storages_request.py +0 -0
  130. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/storages_list/styles.tcss +0 -0
  131. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/storages_registration/__init__.py +0 -0
  132. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/storages_registration/main.py +0 -0
  133. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/screens/storages_registration/styles.tcss +0 -0
  134. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/settings.py +0 -0
  135. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/themes/__init__.py +0 -0
  136. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/presentation/themes/github_dark.py +0 -0
  137. {data_sourcerer-0.8.0 → data_sourcerer-0.8.1}/sourcerer/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: data-sourcerer
3
- Version: 0.8.0
3
+ Version: 0.8.1
4
4
  Summary: Sourcerer is a terminal cloud storage navigator.
5
5
  Author-email: Bohdana Kuzmenko <bohdana.kuzmenko.dev@gmail.com>
6
6
  License: MIT
@@ -14,4 +14,4 @@ The application is structured using a clean architecture approach with:
14
14
 
15
15
  name = "sourcerer"
16
16
  package_name = "data_sourcerer"
17
- __version__ = "0.8.0"
17
+ __version__ = "0.8.1"
@@ -2,6 +2,7 @@ from msgspec._core import Struct
2
2
 
3
3
  from sourcerer.settings import (
4
4
  DEFAULT_DOWNLOAD_CHUNK_SIZE_MB,
5
+ DEFAULT_PRESIGNED_URL_TTL_SECONDS,
5
6
  DEFAULT_UPLOAD_CHUNK_SIZE_MB,
6
7
  )
7
8
 
@@ -11,6 +12,7 @@ class Settings(Struct):
11
12
  group_by_access_credentials: bool = False
12
13
  upload_chunk_size: int = DEFAULT_UPLOAD_CHUNK_SIZE_MB
13
14
  download_chunk_size: int = DEFAULT_DOWNLOAD_CHUNK_SIZE_MB
15
+ presigned_url_ttl_seconds: int = DEFAULT_PRESIGNED_URL_TTL_SECONDS
14
16
 
15
17
 
16
18
  class SettingsFields:
@@ -18,3 +20,4 @@ class SettingsFields:
18
20
  group_by_access_credentials = "group_by_access_credentials"
19
21
  upload_chunk_size = "upload_chunk_size"
20
22
  download_chunk_size = "download_chunk_size"
23
+ presigned_url_ttl_seconds = "presigned_url_ttl_seconds"
@@ -48,6 +48,7 @@ from sourcerer.infrastructure.storage_provider.registry import storage_provider
48
48
  from sourcerer.infrastructure.utils import generate_uuid, is_text_file, join_non_empty
49
49
  from sourcerer.settings import (
50
50
  DEFAULT_DOWNLOAD_CHUNK_SIZE_MB,
51
+ DEFAULT_PRESIGNED_URL_TTL_SECONDS,
51
52
  DEFAULT_UPLOAD_CHUNK_SIZE_MB,
52
53
  )
53
54
 
@@ -61,6 +62,7 @@ class AzureStorageProviderService(BaseStorageProviderService):
61
62
  credentials: Any,
62
63
  upload_chunk_size=DEFAULT_UPLOAD_CHUNK_SIZE_MB,
63
64
  download_chunk_size=DEFAULT_DOWNLOAD_CHUNK_SIZE_MB,
65
+ presigned_url_ttl_seconds=DEFAULT_PRESIGNED_URL_TTL_SECONDS,
64
66
  ):
65
67
  """
66
68
  Initialize the service with Azure credentials.
@@ -83,7 +85,7 @@ class AzureStorageProviderService(BaseStorageProviderService):
83
85
 
84
86
  self.upload_chunk_size = upload_chunk_size * 1024 * 1024
85
87
  self.download_chunk_size = download_chunk_size * 1024 * 1024
86
- self.presigned_url_expiration_period = 3600
88
+ self.presigned_url_expiration_period = presigned_url_ttl_seconds
87
89
 
88
90
  def get_accounts_client(self) -> StorageManagementClient:
89
91
  """
@@ -37,6 +37,7 @@ from sourcerer.infrastructure.storage_provider.registry import storage_provider
37
37
  from sourcerer.infrastructure.utils import generate_uuid, is_text_file
38
38
  from sourcerer.settings import (
39
39
  DEFAULT_DOWNLOAD_CHUNK_SIZE_MB,
40
+ DEFAULT_PRESIGNED_URL_TTL_SECONDS,
40
41
  DEFAULT_UPLOAD_CHUNK_SIZE_MB,
41
42
  PAGE_SIZE,
42
43
  PATH_DELIMITER,
@@ -57,6 +58,7 @@ class GCPStorageProviderService(BaseStorageProviderService):
57
58
  credentials: Any,
58
59
  upload_chunk_size=DEFAULT_UPLOAD_CHUNK_SIZE_MB,
59
60
  download_chunk_size=DEFAULT_DOWNLOAD_CHUNK_SIZE_MB,
61
+ presigned_url_ttl_seconds=DEFAULT_PRESIGNED_URL_TTL_SECONDS,
60
62
  ):
61
63
  """
62
64
  Initialize the service with GCP credentials.
@@ -69,7 +71,7 @@ class GCPStorageProviderService(BaseStorageProviderService):
69
71
  self.client = credentials
70
72
  self.upload_chunk_size = upload_chunk_size * 1024 * 1024
71
73
  self.download_chunk_size = download_chunk_size * 1024 * 1024
72
- self.presigned_url_expiration_period = 3600
74
+ self.presigned_url_expiration_period = presigned_url_ttl_seconds
73
75
 
74
76
  def list_storages(self) -> list[Storage]:
75
77
  """
@@ -37,6 +37,7 @@ from sourcerer.infrastructure.storage_provider.registry import storage_provider
37
37
  from sourcerer.infrastructure.utils import generate_uuid, is_text_file
38
38
  from sourcerer.settings import (
39
39
  DEFAULT_DOWNLOAD_CHUNK_SIZE_MB,
40
+ DEFAULT_PRESIGNED_URL_TTL_SECONDS,
40
41
  DEFAULT_UPLOAD_CHUNK_SIZE_MB,
41
42
  PAGE_SIZE,
42
43
  PATH_DELIMITER,
@@ -57,6 +58,7 @@ class S3ProviderService(BaseStorageProviderService):
57
58
  credentials: Any,
58
59
  upload_chunk_size=DEFAULT_UPLOAD_CHUNK_SIZE_MB,
59
60
  download_chunk_size=DEFAULT_DOWNLOAD_CHUNK_SIZE_MB,
61
+ presigned_url_ttl_seconds=DEFAULT_PRESIGNED_URL_TTL_SECONDS,
60
62
  ):
61
63
  """
62
64
  Initialize the service with AWS credentials.
@@ -69,7 +71,7 @@ class S3ProviderService(BaseStorageProviderService):
69
71
  self.credentials = credentials
70
72
  self.upload_chunk_size = upload_chunk_size * 1024 * 1024
71
73
  self.download_chunk_size = download_chunk_size * 1024 * 1024
72
- self.presigned_url_expiration_period = 3600
74
+ self.presigned_url_expiration_period = presigned_url_ttl_seconds
73
75
 
74
76
  @property
75
77
  def client(self):
@@ -289,6 +289,11 @@ class Sourcerer(App, ResizeContainersWatcherMixin):
289
289
  SettingsFields.download_chunk_size, download_chunk_size
290
290
  )
291
291
 
292
+ if presigned_url_ttl := settings.get(SettingsFields.presigned_url_ttl_seconds):
293
+ self.settings_service.set_setting(
294
+ SettingsFields.presigned_url_ttl_seconds, presigned_url_ttl
295
+ )
296
+
292
297
  self.settings = self.settings_service.load_settings()
293
298
 
294
299
  def modal_screen_callback(self, requires_storage_refresh: bool | None = True):
@@ -57,6 +57,16 @@ class SettingsScreen(ExitBoundModalScreen):
57
57
  Number(minimum=1, maximum=1000),
58
58
  ],
59
59
  )
60
+ with Horizontal():
61
+ yield Static("Presigned url ttl (sec):")
62
+ yield Input(
63
+ type="integer",
64
+ id="presigned_url_ttl_seconds",
65
+ value=str(self.settings.presigned_url_ttl_seconds),
66
+ validators=[
67
+ Number(minimum=1, maximum=604800),
68
+ ],
69
+ )
60
70
 
61
71
  yield Rule()
62
72
  with Horizontal(id="controls"):
@@ -73,6 +83,9 @@ class SettingsScreen(ExitBoundModalScreen):
73
83
  download_chunk_size = self.query_one(
74
84
  "Input#download_chunk_size", Input
75
85
  ).value
86
+ presigned_url_ttl_seconds = self.query_one(
87
+ "Input#presigned_url_ttl_seconds", Input
88
+ ).value
76
89
 
77
90
  if not upload_chunk_size.isdigit():
78
91
  self.notify("Invalid upload chunk size", severity="error")
@@ -80,6 +93,9 @@ class SettingsScreen(ExitBoundModalScreen):
80
93
  if not download_chunk_size.isdigit():
81
94
  self.notify("Invalid download chunk size", severity="error")
82
95
  return
96
+ if not presigned_url_ttl_seconds.isdigit():
97
+ self.notify("Invalid presigned url ttl", severity="error")
98
+ return
83
99
 
84
100
  self.dismiss(
85
101
  {
@@ -89,6 +105,9 @@ class SettingsScreen(ExitBoundModalScreen):
89
105
  ).value,
90
106
  SettingsFields.upload_chunk_size: int(upload_chunk_size),
91
107
  SettingsFields.download_chunk_size: int(download_chunk_size),
108
+ SettingsFields.presigned_url_ttl_seconds: int(
109
+ presigned_url_ttl_seconds
110
+ ),
92
111
  }
93
112
  )
94
113
 
@@ -48,6 +48,7 @@ def _provider_service_cache_lru_key(credentials, settings: Settings):
48
48
  credentials.uuid,
49
49
  str(settings.upload_chunk_size),
50
50
  str(settings.download_chunk_size),
51
+ str(settings.presigned_url_ttl_seconds),
51
52
  ]
52
53
  )
53
54
 
@@ -106,7 +107,10 @@ def get_provider_service_by_access_credentials(
106
107
  except CredentialsAuthError:
107
108
  return None
108
109
  service = provider_service_class(
109
- auth_credentials, settings.upload_chunk_size, settings.download_chunk_size
110
+ auth_credentials,
111
+ settings.upload_chunk_size,
112
+ settings.download_chunk_size,
113
+ settings.presigned_url_ttl_seconds,
110
114
  )
111
115
  with _provider_service_cache_lock:
112
116
  _provider_service_cache[cache_key] = service
@@ -82,3 +82,4 @@ MAX_CREDENTIALS_CACHE_SIZE = 30
82
82
 
83
83
  DEFAULT_UPLOAD_CHUNK_SIZE_MB = 30
84
84
  DEFAULT_DOWNLOAD_CHUNK_SIZE_MB = 30
85
+ DEFAULT_PRESIGNED_URL_TTL_SECONDS = 3600
File without changes
File without changes