saviialib 1.3.0__py3-none-any.whl → 1.5.0__py3-none-any.whl

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.

Potentially problematic release.


This version of saviialib might be problematic. Click here for more details.

Files changed (64) hide show
  1. saviialib/__init__.py +73 -3
  2. saviialib/general_types/api/__init__.py +0 -3
  3. saviialib/general_types/api/{epii_api_types.py → saviia_api_types.py} +2 -38
  4. saviialib/general_types/api/saviia_backup_api_types.py +24 -0
  5. saviialib/general_types/api/saviia_netcamera_api_types.py +11 -0
  6. saviialib/general_types/api/saviia_shakes_api_types.py +21 -0
  7. saviialib/general_types/api/saviia_thies_api_types.py +31 -0
  8. saviialib/general_types/error_types/api/{epii_api_error_types.py → saviia_api_error_types.py} +8 -0
  9. saviialib/general_types/error_types/api/saviia_netcamera_error_types.py +7 -0
  10. saviialib/general_types/error_types/common/common_types.py +9 -0
  11. saviialib/libs/directory_client/client/os_client.py +1 -1
  12. saviialib/libs/ffmpeg_client/__init__.py +8 -0
  13. saviialib/libs/ffmpeg_client/clients/ffmpeg_asyncio_client.py +101 -0
  14. saviialib/libs/ffmpeg_client/ffmpeg_client.py +25 -0
  15. saviialib/libs/ffmpeg_client/ffmpeg_client_contract.py +12 -0
  16. saviialib/libs/ffmpeg_client/types/ffmpeg_client_types.py +28 -0
  17. saviialib/libs/sftp_client/__init__.py +8 -0
  18. saviialib/libs/sftp_client/clients/asyncssh_sftp_client.py +83 -0
  19. saviialib/libs/sftp_client/sftp_client.py +26 -0
  20. saviialib/libs/sftp_client/sftp_client_contract.py +13 -0
  21. saviialib/libs/sftp_client/types/sftp_client_types.py +24 -0
  22. saviialib/libs/sharepoint_client/clients/sharepoint_rest_api.py +7 -3
  23. saviialib/libs/zero_dependency/utils/strings_utils.py +5 -0
  24. saviialib/services/backup/api.py +36 -0
  25. saviialib/services/{epii → backup}/controllers/types/__init__.py +1 -1
  26. saviialib/services/{epii → backup}/controllers/types/upload_backup_to_sharepoint_types.py +2 -2
  27. saviialib/services/{epii → backup}/controllers/upload_backup_to_sharepoint.py +5 -5
  28. saviialib/services/{epii → backup}/use_cases/types/__init__.py +1 -1
  29. saviialib/services/{epii → backup}/use_cases/types/upload_backup_to_sharepoint_types.py +1 -1
  30. saviialib/services/{epii → backup}/use_cases/upload_backup_to_sharepoint.py +2 -2
  31. saviialib/services/backup/utils/__init__.py +3 -0
  32. saviialib/services/{epii → backup}/utils/upload_backup_to_sharepoint_utils.py +1 -1
  33. saviialib/services/netcamera/api.py +30 -0
  34. saviialib/services/netcamera/controllers/get_media_files.py +40 -0
  35. saviialib/services/netcamera/controllers/types/get_media_files_types.py +16 -0
  36. saviialib/services/netcamera/use_cases/get_media_files.py +76 -0
  37. saviialib/services/netcamera/use_cases/types/get_media_files_types.py +18 -0
  38. saviialib/services/shakes/__init__.py +0 -0
  39. saviialib/services/shakes/api.py +31 -0
  40. saviialib/services/shakes/controllers/get_miniseed_files.py +48 -0
  41. saviialib/services/shakes/controllers/types/get_miniseed_files_types.py +16 -0
  42. saviialib/services/shakes/use_cases/get_miniseed_files.py +79 -0
  43. saviialib/services/shakes/use_cases/types/get_miniseed_files_types.py +18 -0
  44. saviialib/services/shakes/use_cases/utils/get_miniseed_files_utils.py +11 -0
  45. saviialib/services/thies/__init__.py +0 -0
  46. saviialib/services/thies/api.py +35 -0
  47. saviialib/services/{epii → thies}/controllers/types/update_thies_data_types.py +2 -4
  48. saviialib/services/{epii → thies}/controllers/update_thies_data.py +4 -4
  49. saviialib/services/{epii → thies}/use_cases/components/create_thies_statistics_file.py +11 -2
  50. saviialib/services/{epii → thies}/use_cases/types/update_thies_data_types.py +4 -1
  51. saviialib/services/{epii → thies}/use_cases/update_thies_data.py +19 -12
  52. saviialib-1.5.0.dist-info/METADATA +126 -0
  53. saviialib-1.5.0.dist-info/RECORD +87 -0
  54. {saviialib-1.3.0.dist-info → saviialib-1.5.0.dist-info}/WHEEL +1 -1
  55. saviialib/services/epii/api.py +0 -94
  56. saviialib/services/epii/utils/__init__.py +0 -3
  57. saviialib-1.3.0.dist-info/METADATA +0 -122
  58. saviialib-1.3.0.dist-info/RECORD +0 -57
  59. /saviialib/services/{epii → backup}/__init__.py +0 -0
  60. /saviialib/services/{epii → backup}/controllers/__init__.py +0 -0
  61. /saviialib/services/{epii → backup}/use_cases/constants/upload_backup_to_sharepoint_constants.py +0 -0
  62. /saviialib/services/{epii → thies}/use_cases/components/thies_bp.py +0 -0
  63. /saviialib/services/{epii → thies}/utils/update_thies_data_utils.py +0 -0
  64. {saviialib-1.3.0.dist-info → saviialib-1.5.0.dist-info/licenses}/LICENSE +0 -0
@@ -1,4 +1,4 @@
1
- from saviialib.general_types.error_types.api.epii_api_error_types import (
1
+ from saviialib.general_types.error_types.api.saviia_api_error_types import (
2
2
  SharePointFetchingError,
3
3
  SharePointDirectoryError,
4
4
  SharePointUploadError,
@@ -26,16 +26,17 @@ from saviialib.libs.sharepoint_client import (
26
26
  from saviialib.libs.directory_client import DirectoryClient, DirectoryClientArgs
27
27
 
28
28
  from saviialib.libs.files_client import FilesClient, FilesClientInitArgs, WriteArgs
29
- from saviialib.services.epii.use_cases.types import (
29
+ from saviialib.services.backup.use_cases.types import (
30
30
  FtpClientConfig,
31
31
  SharepointConfig,
32
32
  UpdateThiesDataUseCaseInput,
33
33
  )
34
- from saviialib.services.epii.utils import (
34
+ from saviialib.services.backup.utils import (
35
35
  parse_execute_response,
36
36
  )
37
37
  from saviialib.libs.zero_dependency.utils.datetime_utils import today, datetime_to_str
38
38
  from .components.create_thies_statistics_file import create_thies_daily_statistics_file
39
+ from typing import Set, Dict, List
39
40
 
40
41
 
41
42
  class UpdateThiesDataUseCase:
@@ -95,7 +96,7 @@ class UpdateThiesDataUseCase:
95
96
  reason=f"The current folder '{folder_name}' doesn't exist."
96
97
  )
97
98
 
98
- async def fetch_cloud_file_names(self) -> set[str]:
99
+ async def fetch_cloud_file_names(self) -> Set[str]:
99
100
  """Fetch file names from the RCER cloud."""
100
101
  await self._validate_sharepoint_current_folders()
101
102
  try:
@@ -113,7 +114,7 @@ class UpdateThiesDataUseCase:
113
114
  except Exception as error:
114
115
  raise SharePointFetchingError(reason=error)
115
116
 
116
- async def fetch_thies_file_names(self) -> set[str]:
117
+ async def fetch_thies_file_names(self) -> Set[str]:
117
118
  """Fetch file names from the THIES FTP server."""
118
119
  try:
119
120
  thies_files = set()
@@ -131,7 +132,7 @@ class UpdateThiesDataUseCase:
131
132
  except ConnectionAbortedError as error:
132
133
  raise ThiesFetchingError(reason=error)
133
134
 
134
- async def fetch_thies_file_content(self) -> dict[str, bytes]:
135
+ async def fetch_thies_file_content(self) -> Dict[str, bytes]:
135
136
  """Fetch the content of files from the THIES FTP server."""
136
137
  try:
137
138
  content_files = {}
@@ -165,8 +166,8 @@ class UpdateThiesDataUseCase:
165
166
  raise ThiesFetchingError(reason=error)
166
167
 
167
168
  async def upload_thies_files_to_sharepoint(
168
- self, files: dict
169
- ) -> dict[str, list[str]]:
169
+ self, files: Dict
170
+ ) -> Dict[str, List[str]]:
170
171
  """Upload files to SharePoint and categorize the results."""
171
172
  upload_results = {"failed_files": [], "new_files": []}
172
173
 
@@ -269,7 +270,15 @@ class UpdateThiesDataUseCase:
269
270
  FtpReadFileArgs(file_path)
270
271
  )
271
272
  except FileNotFoundError as error:
272
- raise ThiesFetchingError(reason=str(error))
273
+ reason = (
274
+ str(error) + ". The file might not be available yet for statistics."
275
+ )
276
+ self.logger.warning("[thies_synchronization_lib] Warning: %s", reason)
277
+ self.logger.warning(
278
+ "[thies_synchronization_lib] Skipping the creation of daily statistics %s",
279
+ filename,
280
+ )
281
+ return
273
282
  # Destination local folder
274
283
  self.logger.debug(file_path)
275
284
 
@@ -305,9 +314,7 @@ class UpdateThiesDataUseCase:
305
314
  dest_folder,
306
315
  )
307
316
  # Read the files with ThiesDayData class
308
- await create_thies_daily_statistics_file(
309
- self.os_client, self.logger, daily_files
310
- )
317
+ await create_thies_daily_statistics_file(self.os_client, self.logger)
311
318
 
312
319
  async def execute(self):
313
320
  """Synchronize data from the THIES Center to the cloud."""
@@ -0,0 +1,126 @@
1
+ Metadata-Version: 2.4
2
+ Name: saviialib
3
+ Version: 1.5.0
4
+ Summary: A client library for IoT projects in the RCER initiative
5
+ License: MIT
6
+ License-File: LICENSE
7
+ Author: pedropablozavalat
8
+ Requires-Python: >=3.11,<4.0
9
+ Classifier: License :: OSI Approved :: MIT License
10
+ Classifier: Programming Language :: Python :: 3
11
+ Classifier: Programming Language :: Python :: 3.11
12
+ Classifier: Programming Language :: Python :: 3.12
13
+ Classifier: Programming Language :: Python :: 3.13
14
+ Classifier: Programming Language :: Python :: 3.14
15
+ Requires-Dist: aiofiles
16
+ Requires-Dist: aioftp
17
+ Requires-Dist: aiohttp
18
+ Requires-Dist: asyncssh (==2.21.1)
19
+ Requires-Dist: bitarray
20
+ Requires-Dist: build
21
+ Requires-Dist: certifi
22
+ Requires-Dist: dotenv (>=0.9.9,<0.10.0)
23
+ Requires-Dist: ffmpeg-asyncio (==0.1.3)
24
+ Requires-Dist: numpy (>=2.2.0,<2.4.0)
25
+ Requires-Dist: pandas (>=2.2.3,<2.3.1)
26
+ Description-Content-Type: text/markdown
27
+
28
+ # SAVIIA Library
29
+ *Sistema de Administración y Visualización de Información para la Investigación y Análisis*
30
+
31
+ [![GitHub release (latest by date)](https://img.shields.io/github/v/release/pedrozavalat/saviia-lib?style=for-the-badge)](https://github.com/pedrozavalat/saviia-lib/releases)
32
+
33
+
34
+ ## Installation
35
+ This library is designed for use with the SAVIIA Home Assistant Integration. It provides an API to retrieve files from a THIES Data Logger via an FTP server and upload them to a Microsoft SharePoint folder using the SharePoint REST API.
36
+
37
+ ```bash
38
+ pip install saviialib
39
+ ```
40
+
41
+ ## Saviia API Client Usage
42
+
43
+ ### Initialize the Saviia API Client
44
+ Import the necessary classes from the library.
45
+ ```python
46
+ from saviialib import SaviiaAPI, SaviiaAPIConfig
47
+ ```
48
+
49
+ To start using the library, you need to create an `SaviiaAPI` client instance with its configuration class `SaviiaAPIConfig`. Provide the required parameters such as FTP server details and SharePoint credentials:
50
+ ```python
51
+ config = SaviiaAPIConfig(
52
+ ftp_port=FTP_PORT,
53
+ ftp_host=FTP_HOST,
54
+ ftp_user=FTP_USER,
55
+ ftp_password=FTP_PASSWORD,
56
+ sharepoint_client_id=SHAREPOINT_CLIENT_ID,
57
+ sharepoint_client_secret=SHAREPOINT_CLIENT_SECRET,
58
+ sharepoint_tenant_id=SHAREPOINT_TENANT_ID,
59
+ sharepoint_tenant_name=SHAREPOINT_TENANT_NAME,
60
+ sharepoint_site_name=SHAREPOINT_SITE_NAME
61
+ )
62
+ ```
63
+ ```python
64
+ api_client = SaviiaAPI(config)
65
+ ```
66
+ **Notes:**
67
+ - Store sensitive data like `FTP_PASSWORD`, `FTP_USER`, and SharePoint credentials securely. Use environment variables or a secrets management tool to avoid hardcoding sensitive information in your codebase.
68
+
69
+ ### Access THIES Data Logger Services
70
+ To interact with the THIES Data Logger services, you can access the `thies` attribute of the `SaviiaAPI` instance:
71
+ ```python
72
+ thies_client = api_client.get('thies')
73
+ ```
74
+ This instance provides methods to interact with the THIES Data Logger. Currently, it includes the main method for extracting files from the FTP server and uploading them to SharePoint.
75
+
76
+ #### THIES files extraction and synchronization
77
+ The library provides a method to extract and synchronize THIES Data Logger files with the Microsoft SharePoint client. This method downloads files from the FTP server and uploads them to the specified SharePoint folder:
78
+ ```python
79
+ import asyncio
80
+ async def main():
81
+ # Before calling this method, you must have initialised the THIES service class ...
82
+ response = await thies_client.update_thies_data()
83
+ return response
84
+
85
+ asyncio.run(main())
86
+ ```
87
+
88
+ ### Access Backup Services
89
+ To interact with the Backup services, you can access the `backup` attribute of the `SaviiaAPI` instance:
90
+ ```python
91
+ backup_client = api_client.get('backup')
92
+ ```
93
+ This instance provides methods to interact with the Backup services. Currently, it includes the main method for creating backups of specified directories in a local folder from Home Assistant environment. Then each backup file is uploaded to a Microsoft SharePoint folder.
94
+
95
+ #### Create Backup
96
+ The library provides a method which creates a backup of a specified directory in a local folder from Home Assistant environment. Then each backup file is uploaded to a Microsoft SharePoint folder:
97
+
98
+ ```python
99
+ import asyncio
100
+ async def main():
101
+ # Before calling this method, you must have initialised the Backup service class ...
102
+ response = await backup_client.upload_backup_to_sharepoint(
103
+ local_backup_path=LOCAL_BACKUP_PATH,
104
+ sharepoint_folder_path=SHAREPOINT_FOLDER_PATH
105
+ )
106
+ return response
107
+ asyncio.run(main())
108
+ ```
109
+ **Notes:**
110
+ - Ensure that the `local_backup_path` exists and contains the files you want to back up. It is a relative path from the Home Assistant configuration directory.
111
+ - The `sharepoint_folder_path` should be the path to the folder in SharePoint where you want to upload the backup files. For example, if your url is `https://yourtenant.sharepoint.com/sites/yoursite/Shared Documents/Backups`, the folder path would be `sites/yoursite/Shared Documents/Backups`.
112
+
113
+
114
+
115
+
116
+
117
+
118
+
119
+ ## Contributing
120
+ If you're interested in contributing to this project, please follow the contributing guidelines. By contributing to this project, you agree to abide by its terms.
121
+ Contributions are welcome and appreciated!
122
+
123
+ ## License
124
+
125
+ `saviialib` was created by Pedro Pablo Zavala Tejos. It is licensed under the terms of the MIT license.
126
+
@@ -0,0 +1,87 @@
1
+ saviialib/__init__.py,sha256=pn4KYFwPsVe43mw1e0svWiqA0StzM2B5Cr0iPc481I0,3074
2
+ saviialib/general_types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ saviialib/general_types/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
+ saviialib/general_types/api/saviia_api_types.py,sha256=kX45V3KQb48S1jEstXcAtbiemVUgemJE_XK5qP7BJm0,1318
5
+ saviialib/general_types/api/saviia_backup_api_types.py,sha256=mtXRxFjBOqfUBWWtgLZxNq-vb_mBkCUS9fxoFRJfoYE,791
6
+ saviialib/general_types/api/saviia_netcamera_api_types.py,sha256=WVA3VP_FiTGPhtTl8GCG2RAVo7YDS5TTyl-0I5rUK4Y,208
7
+ saviialib/general_types/api/saviia_shakes_api_types.py,sha256=XlLwfCyFeQXk9kH7H0EcUJHIigj9edFKgn3wKGJ1Z94,623
8
+ saviialib/general_types/api/saviia_thies_api_types.py,sha256=ueqOFjHvRuT-N8H1UZEVXErgK1S1iRw0AXeO8bTdBts,1017
9
+ saviialib/general_types/error_types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
+ saviialib/general_types/error_types/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
+ saviialib/general_types/error_types/api/saviia_api_error_types.py,sha256=BcDhteS4KsFNCm3L9ZQJTQKs0bKRXq3LgM4mfxsW-HY,3270
12
+ saviialib/general_types/error_types/api/saviia_netcamera_error_types.py,sha256=ipdY8PDJOFLxjgUIWc09cuaiHzPtBvAb7YKoosTL0wY,246
13
+ saviialib/general_types/error_types/common/__init__.py,sha256=yOBLZbt64Ki9Q0IJ0tMAubgq7PtrQ7XQ3RgtAzyOjiE,170
14
+ saviialib/general_types/error_types/common/common_types.py,sha256=2w790TQNRLc4UskXNHAh8RMZIJLA8FYyQbVxkPp89UA,717
15
+ saviialib/libs/directory_client/__init__.py,sha256=ys07nzp74fHew2mUkbGpntp5w4t_PnhZIS6D4_mJw2A,162
16
+ saviialib/libs/directory_client/client/os_client.py,sha256=mBIQc8ek8mDY6GMCX-cPNLleM4RbFdqoiuw5Ccoe3YA,763
17
+ saviialib/libs/directory_client/directory_client.py,sha256=5HmB1Pt9M8Tk18WKzfh3Fwr8gKa_RZCdAqvbU0rg7mw,1086
18
+ saviialib/libs/directory_client/directory_client_contract.py,sha256=wtNaUak1a7r6t9OI1L2ou7XMMJFXWpQFb7WyT6X7fCQ,479
19
+ saviialib/libs/directory_client/types/directory_client_types.py,sha256=ncMwVs_o6EYMuypXXmVInsjVDKJsdxVkmwj1M-LEInA,109
20
+ saviialib/libs/ffmpeg_client/__init__.py,sha256=KjOP--Uv0Z-qvoJI9IwwBrU3ZrroaC55zDG7fm9DEts,207
21
+ saviialib/libs/ffmpeg_client/clients/ffmpeg_asyncio_client.py,sha256=eqm7sNm4BY3WaxobXbeoS39DfzfwtICgmQAm9UE7yZw,3639
22
+ saviialib/libs/ffmpeg_client/ffmpeg_client.py,sha256=evqhjQeT9VejtJ8Gb7A3Vjxoj0PT4n7JnbbsuO7-35U,870
23
+ saviialib/libs/ffmpeg_client/ffmpeg_client_contract.py,sha256=mvGrGYkikExz4VyAErcSu6Sd2utYYm9bqxJj1N22z2U,324
24
+ saviialib/libs/ffmpeg_client/types/ffmpeg_client_types.py,sha256=Vo062LHqfTLgRbwLloZMRkC36CO3r9tFqY97nVxr8vE,444
25
+ saviialib/libs/files_client/__init__.py,sha256=sIi9ne7Z3EfxnqGTaSmH-cZ8QsKyu0hoOz61GyA3njs,192
26
+ saviialib/libs/files_client/clients/aiofiles_client.py,sha256=Mu5pSnnEa3dT3GONmt1O-lCQstuQNXHtJHM3D2L6TU8,1107
27
+ saviialib/libs/files_client/clients/csv_client.py,sha256=Rk4QbiKlVKrYxYtxQt-Pmkp9QoB_dNgs5r36JB9hU0o,1478
28
+ saviialib/libs/files_client/files_client.py,sha256=oWfaMLA_Lw91H1_pPirFtFbdJh4abSyZp91qBsAiePs,950
29
+ saviialib/libs/files_client/files_client_contract.py,sha256=fYvd68IMpc1OFkxbzNSmRUoTWVctf3hkNVQ7QZV0m6I,304
30
+ saviialib/libs/files_client/types/files_client_types.py,sha256=GOTM5fBY304-EX6IiUnWmt2JpsyQ6Nmb_Tp0wingt0M,755
31
+ saviialib/libs/ftp_client/__init__.py,sha256=dW2Yutgc7mJJJzgKLhWKXMgQ6KIWJYfFa1sGpjHH5xU,191
32
+ saviialib/libs/ftp_client/clients/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
+ saviialib/libs/ftp_client/clients/aioftp_client.py,sha256=5sgr3PMETgaBRlKeu_avxHIh6tr1gb7t2mkxmpRas_k,1925
34
+ saviialib/libs/ftp_client/clients/ftplib_client.py,sha256=VcpAn23r03iyCUAj35xHU_AVNrll_45uHFN8Z9OnBkE,2203
35
+ saviialib/libs/ftp_client/ftp_client.py,sha256=Naj9p0yYWlXt9um0zKfvuHSoycM8JZg2SPBm8110pYk,1008
36
+ saviialib/libs/ftp_client/ftp_client_contract.py,sha256=tymkugDzsJ5PzUXIaSkwX1h7T0naR15qAkjrqswqDyM,338
37
+ saviialib/libs/ftp_client/types/__init__.py,sha256=syfwf9feP4QK7fkCTfl4j8l11ic-jHtfi1DE2chaWbs,155
38
+ saviialib/libs/ftp_client/types/ftp_client_types.py,sha256=e4SmYkewldulaD8ms2q75zVgLFXyBxBqoa_L-IQOmso,256
39
+ saviialib/libs/sftp_client/__init__.py,sha256=f51sFOd_XIhhd6x6AZ3ZdbJ86hO1xnqAk9MmEjwRJ-c,229
40
+ saviialib/libs/sftp_client/clients/asyncssh_sftp_client.py,sha256=vqCKHIx3K6QFujQP5DIAB5EYOz1zAdhi825LTRvhG20,3469
41
+ saviialib/libs/sftp_client/sftp_client.py,sha256=_5HRYSBPadxZEdHuHSpQ_VrwerBfu24izNRg-pvLzlU,918
42
+ saviialib/libs/sftp_client/sftp_client_contract.py,sha256=JWWxIfNBXcsBd8z3gQHGpeRASRjtP9WGkznoMfP0IZc,365
43
+ saviialib/libs/sftp_client/types/sftp_client_types.py,sha256=NzUZVq6yeGKkO7KF-v4Cc-rwaWeOgFCUGVPL1YBbYgA,446
44
+ saviialib/libs/sharepoint_client/__init__.py,sha256=6RbEzFtCfMrrY8F0JOCVcK6Gqt1FBJ09m0NuWHMCmCI,384
45
+ saviialib/libs/sharepoint_client/clients/sharepoint_rest_api.py,sha256=I3OfZ5M4uR86hLIBOlOQzGNyTzQRy1yckrLF1ne7F1g,6319
46
+ saviialib/libs/sharepoint_client/sharepoint_client.py,sha256=gXFisWWCk6pKhoEeaNN8dcHA5ywrGDLqfiKjchrHRy0,1816
47
+ saviialib/libs/sharepoint_client/sharepoint_client_contract.py,sha256=H-WsXR5f50jy5RRYNlgV61y_YGjOUq4U_E1DWUUrDYw,612
48
+ saviialib/libs/sharepoint_client/types/sharepoint_client_types.py,sha256=JruUCn6o16w00t4zxDrxmv_Bxa52UyShGYmwUFfBCCQ,482
49
+ saviialib/libs/zero_dependency/utils/datetime_utils.py,sha256=c2H_JpUKpunCzDw6I4alDWNftEqaciWGtEUklPepm_s,759
50
+ saviialib/libs/zero_dependency/utils/strings_utils.py,sha256=XqEukvCLkQ0PhjjPm9FTjrzbwBYMejs-0uSoLwSxhPo,133
51
+ saviialib/services/backup/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
52
+ saviialib/services/backup/api.py,sha256=S1dMGyyjYzVyo-E8FMttHZMOO2TtQoAMaLp-oquW46g,1408
53
+ saviialib/services/backup/controllers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
+ saviialib/services/backup/controllers/types/__init__.py,sha256=0zIWXQb6YQVIIbb5b_FeL-D9Zy_d1GqR8kVz3hen4IU,222
55
+ saviialib/services/backup/controllers/types/upload_backup_to_sharepoint_types.py,sha256=AzoHx3AWrVCM8LjmlEovDlRe4kJPJBbRoMToG8QK_Nw,464
56
+ saviialib/services/backup/controllers/upload_backup_to_sharepoint.py,sha256=rW8FmcalRO1Ip8rhOsfpJIKRVYyn8oO-_jJSiS7MJOk,3827
57
+ saviialib/services/backup/use_cases/constants/upload_backup_to_sharepoint_constants.py,sha256=erkn-3E8YwBMFs25o7exXoK7s73NdgP9IYDXeWzALcI,98
58
+ saviialib/services/backup/use_cases/types/__init__.py,sha256=uVfu-L3-2QGnki0-rL2fOVTj4hVMvykyqKEv7kQHNvE,224
59
+ saviialib/services/backup/use_cases/types/upload_backup_to_sharepoint_types.py,sha256=QSZ32Fsan-jGpmGFpip86N3S16oWaeIxri5at2x46nw,322
60
+ saviialib/services/backup/use_cases/upload_backup_to_sharepoint.py,sha256=tBAfztcXdr3pmJqhwdHKc6AbddajZubs_wkL93Wajv4,11890
61
+ saviialib/services/backup/utils/__init__.py,sha256=Khz07TAC17xGBbkSgNcOXSjzeFm6-NiQadNJ3R7tRgg,112
62
+ saviialib/services/backup/utils/upload_backup_to_sharepoint_utils.py,sha256=J2PkLvNFHqka4NLW4lrAdaK5pRgHnU3ZSOflO43uu78,3530
63
+ saviialib/services/netcamera/api.py,sha256=W8ZKfh_iGEvfE36yGXYH9RlveUUtHoxQI_E3__YGfq0,1182
64
+ saviialib/services/netcamera/controllers/get_media_files.py,sha256=CEfZ7YRhXBcuGeK3HWB3Bpp-i-pIvAs70krreCHL_eA,1507
65
+ saviialib/services/netcamera/controllers/types/get_media_files_types.py,sha256=40V0ARqtloRM16KYYxzeq5aQU-mrghEK7FfkeFoSmbk,417
66
+ saviialib/services/netcamera/use_cases/get_media_files.py,sha256=ct_MOOgxzqCURQo2JJx1ioBaO-Qq-Gj-27Y4JAdZbeo,2801
67
+ saviialib/services/netcamera/use_cases/types/get_media_files_types.py,sha256=XCpodI-WdZYbhd3DD1LkKDgLTSRKlXkHClbhwT8zXm8,333
68
+ saviialib/services/shakes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
69
+ saviialib/services/shakes/api.py,sha256=WvmOJ35lPdJuqSEl9-q9VOGNxqkqvzfBUmkp-G8WKj4,1230
70
+ saviialib/services/shakes/controllers/get_miniseed_files.py,sha256=k55QiIQoNHyMQsgW939IbrPY4tHy8cFMg51LDVQQSgs,1934
71
+ saviialib/services/shakes/controllers/types/get_miniseed_files_types.py,sha256=LZ8LZxpjPYrl-EIuwQixXl8z4Ygl81DgodoHyxzvIxY,366
72
+ saviialib/services/shakes/use_cases/get_miniseed_files.py,sha256=HD6VphToOF8eq-J281qOg9AgeD6hFAsVfScwvP5c9jc,3033
73
+ saviialib/services/shakes/use_cases/types/get_miniseed_files_types.py,sha256=bb5XurP08pHhhNK80dvgoSP_OmHFEdKhT-jzyd8w5kk,385
74
+ saviialib/services/shakes/use_cases/utils/get_miniseed_files_utils.py,sha256=6TEdu9MglnM0_FTuxs9BETneXqQBUGb-Q1rDKhvRLvg,288
75
+ saviialib/services/thies/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
76
+ saviialib/services/thies/api.py,sha256=ibXBSzs_LJjZbC9LWh1EcHMWUp5qWTz-P_qOIb3rx6Y,1365
77
+ saviialib/services/thies/controllers/types/update_thies_data_types.py,sha256=YSLd0HgkeB7auTXFjZVYz_g9jv2hY2vaK7x6VLZ2BK4,439
78
+ saviialib/services/thies/controllers/update_thies_data.py,sha256=j_orYJfom4lo8xm8Jsru1h8JjDFI4xAfUL2oSM_XpcE,4890
79
+ saviialib/services/thies/use_cases/components/create_thies_statistics_file.py,sha256=_1wY_yI_Lg2QTOGag4lVZBWM3B1gp2Duz7ore-kOHhQ,5575
80
+ saviialib/services/thies/use_cases/components/thies_bp.py,sha256=1Iq5Wz3kqzJfQNawV_v8ORr_Pl-PoamFp_2Xo8DjvmI,15042
81
+ saviialib/services/thies/use_cases/types/update_thies_data_types.py,sha256=S9_oS4Laygh_XIQoKWzaLd9QrAjVajyHcgJgbzEFPww,554
82
+ saviialib/services/thies/use_cases/update_thies_data.py,sha256=6l3AvFRwDMTCChJfMR_f1Y6ejDNiy9eKlD1mfxqFjPw,14962
83
+ saviialib/services/thies/utils/update_thies_data_utils.py,sha256=EpjYWXqyHxJ-dO3MHhdXp-rGV7WyUckeFko-nnfnNac,555
84
+ saviialib-1.5.0.dist-info/METADATA,sha256=gp3HoVlafLCIXXrjex5UmaJHV-2a8uBYpap7EzpkAEk,5235
85
+ saviialib-1.5.0.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
86
+ saviialib-1.5.0.dist-info/licenses/LICENSE,sha256=NWpf6b38xgBWPBo5HZsCbdfp9hZSliEbRqWQgm0fkOo,1076
87
+ saviialib-1.5.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.1.3
2
+ Generator: poetry-core 2.2.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -1,94 +0,0 @@
1
- from typing import Any, Dict, List
2
-
3
- from .controllers.types.update_thies_data_types import UpdateThiesDataControllerInput
4
- from .controllers.types.upload_backup_to_sharepoint_types import (
5
- UploadBackupToSharepointControllerInput,
6
- )
7
- from .controllers.update_thies_data import UpdateThiesDataController
8
- from .controllers.upload_backup_to_sharepoint import UploadBackupToSharepointController
9
- from saviialib.general_types.api.epii_api_types import (
10
- EpiiUpdateThiesConfig,
11
- EpiiSharepointBackupConfig,
12
- EpiiAPIConfig,
13
- )
14
-
15
-
16
- class EpiiAPI:
17
- """
18
- EpiiAPI is a service class that provides methods to interact with Patagonia Center system.
19
- """
20
-
21
- def __init__(self, config: EpiiAPIConfig):
22
- self.ftp_port = config.ftp_port
23
- self.ftp_host = config.ftp_host
24
- self.ftp_user = config.ftp_user
25
- self.ftp_password = config.ftp_password
26
- self.sharepoint_client_id = config.sharepoint_client_id
27
- self.sharepoint_client_secret = config.sharepoint_client_secret
28
- self.sharepoint_tenant_id = config.sharepoint_tenant_id
29
- self.sharepoint_tenant_name = config.sharepoint_tenant_name
30
- self.sharepoint_site_name = config.sharepoint_site_name
31
- self.logger = config.logger
32
-
33
- async def update_thies_data(
34
- self, sharepoint_folders_path: List[str], ftp_server_folders_path: List[str]
35
- ) -> Dict[str, Any]:
36
- """Updates data from a THIES Data Logger by connecting to an FTP server
37
- and transferring data to specified Sharepoint folders.
38
-
39
- Args:
40
- sharepoint_folders_path (list): List of Sharepoint folder paths for AVG and EXT data.
41
- The AVG path must be the first element.
42
- ftp_server_folders_path (list): List of FTP server folder paths for AVG and EXT data.
43
- The AVG path must be the first element.
44
-
45
- Returns:
46
- dict: A dictionary representation of the API response.
47
- """
48
- config = EpiiUpdateThiesConfig(
49
- ftp_port=self.ftp_port,
50
- ftp_host=self.ftp_host,
51
- ftp_user=self.ftp_user,
52
- ftp_password=self.ftp_password,
53
- sharepoint_client_id=self.sharepoint_client_id,
54
- sharepoint_client_secret=self.sharepoint_client_secret,
55
- sharepoint_site_name=self.sharepoint_site_name,
56
- sharepoint_tenant_id=self.sharepoint_tenant_id,
57
- sharepoint_tenant_name=self.sharepoint_tenant_name,
58
- logger=self.logger,
59
- )
60
- controller = UpdateThiesDataController(
61
- UpdateThiesDataControllerInput(
62
- config, sharepoint_folders_path, ftp_server_folders_path
63
- )
64
- )
65
- response = await controller.execute()
66
- return response.__dict__
67
-
68
- async def upload_backup_to_sharepoint(
69
- self, local_backup_source_path: str, sharepoint_destination_path: str
70
- ) -> Dict[str, Any]:
71
- """Migrate a backup folder from Home assistant to Sharepoint directory.
72
- Args:
73
- local_backup_source_path (str): Local path to backup.
74
- Returns:
75
- response (dict): A dictionary containing the response from the upload operation.
76
- This dictionary will typically include information about the success or
77
- failure of the upload, as well as any relevant metadata.
78
- """
79
- config = EpiiSharepointBackupConfig(
80
- sharepoint_client_id=self.sharepoint_client_id,
81
- sharepoint_client_secret=self.sharepoint_client_secret,
82
- sharepoint_site_name=self.sharepoint_site_name,
83
- sharepoint_tenant_id=self.sharepoint_tenant_id,
84
- sharepoint_tenant_name=self.sharepoint_tenant_name,
85
- logger=self.logger,
86
- )
87
-
88
- controller = UploadBackupToSharepointController(
89
- UploadBackupToSharepointControllerInput(
90
- config, local_backup_source_path, sharepoint_destination_path
91
- )
92
- )
93
- response = await controller.execute()
94
- return response.__dict__
@@ -1,3 +0,0 @@
1
- from .update_thies_data_utils import parse_execute_response
2
-
3
- __all__ = ["parse_execute_response"]
@@ -1,122 +0,0 @@
1
- Metadata-Version: 2.3
2
- Name: saviialib
3
- Version: 1.3.0
4
- Summary: A client library for IoT projects in the RCER initiative
5
- License: MIT
6
- Author: pedropablozavalat
7
- Requires-Python: >=3.11,<4.0
8
- Classifier: License :: OSI Approved :: MIT License
9
- Classifier: Programming Language :: Python :: 3
10
- Classifier: Programming Language :: Python :: 3.11
11
- Classifier: Programming Language :: Python :: 3.12
12
- Classifier: Programming Language :: Python :: 3.13
13
- Requires-Dist: aiofiles
14
- Requires-Dist: aioftp
15
- Requires-Dist: aiohttp
16
- Requires-Dist: bitarray
17
- Requires-Dist: build
18
- Requires-Dist: dotenv (>=0.9.9,<0.10.0)
19
- Requires-Dist: numpy (>=2.2.0,<2.4.0)
20
- Requires-Dist: pandas (>=2.2.3,<2.3.1)
21
- Requires-Dist: pytest-cov (>=6.1.1,<7.0.0)
22
- Description-Content-Type: text/markdown
23
-
24
- # SAVIIA Library
25
- *Sistema de Administración y Visualización de Información para la Investigación y Análisis*
26
-
27
- [![GitHub release (latest by date)](https://img.shields.io/github/v/release/pedrozavalat/saviia-lib?style=for-the-badge)](https://github.com/pedrozavalat/saviia-lib/releases)
28
-
29
-
30
- ## Installation
31
- This library is designed for use with the SAVIIA Home Assistant Integration. It provides an API to retrieve files from a THIES Data Logger via an FTP server and upload them to a Microsoft SharePoint folder using the SharePoint REST API.
32
-
33
- ```bash
34
- pip install saviialib
35
- ```
36
-
37
- ## Usage
38
-
39
- ### Initialize the EPii API Client
40
- To start using the library, you need to create an `EpiiAPI` client instance with its configuration class:
41
-
42
- ```python
43
- from saviialib import EpiiAPI, EpiiAPIConfig
44
- config = EpiiAPIConfig(
45
- ftp_port=FTP_PORT,
46
- ftp_host=FTP_HOST,
47
- ftp_user=FTP_USER,
48
- ftp_password=FTP_PASSWORD,
49
- sharepoint_client_id=SHAREPOINT_CLIENT_ID,
50
- sharepoint_client_secret=SHAREPOINT_CLIENT_SECRET,
51
- sharepoint_tenant_id=SHAREPOINT_TENANT_ID,
52
- sharepoint_tenant_name=SHAREPOINT_TENANT_NAME,
53
- sharepoint_site_name=SHAREPOINT_SITE_NAME
54
- )
55
- api_client = EpiiAPI(config)
56
- ```
57
- **Notes:**
58
- - Store sensitive data like `FTP_PASSWORD`, `FTP_USER`, and SharePoint credentials securely. Use environment variables or a secrets management tool to avoid hardcoding sensitive information in your codebase.
59
-
60
- ### Update THIES Data Logger Files
61
- The library provides a method to synchronize THIES Data Logger files with the RCER SharePoint client. This method updates the folder containing binary files with meteorological data:
62
-
63
- ```python
64
- from saviialib import EpiiUpdateThiesConfig
65
- import asyncio
66
-
67
- async def main():
68
- # Before calling this method, you must have initialised the api class ...
69
- response = await api_client.update_thies_data()
70
- return response
71
-
72
- asyncio.run(main())
73
- ```
74
-
75
- ## Development
76
-
77
- This project includes a `Makefile` to simplify common tasks. Below are the available commands:
78
-
79
- ### Install Basic Dependencies
80
- To install the basic dependencies required for the project, run the following command:
81
-
82
- ```bash
83
- make install-deps
84
- ```
85
-
86
- This will ensure that all necessary libraries and tools are installed for the project to function properly.
87
-
88
- ### Install Development Requirements
89
- For setting up a development environment with additional tools and libraries, execute:
90
-
91
- ```bash
92
- make dev
93
- ```
94
-
95
- This command installs all the dependencies needed for development, including testing and linting tools.
96
-
97
- ### Run Tests
98
- To verify that the code is functioning as expected, you can run the test suite using:
99
-
100
- ```bash
101
- make test
102
- ```
103
-
104
- This will execute all the tests in the project and provide a summary of the results.
105
-
106
- ### Lint the Code
107
- To ensure that the code adheres to the project's style guidelines and is free of common errors, run:
108
-
109
- ```bash
110
- make lint
111
- ```
112
-
113
- This command checks the codebase for linting issues and outputs any problems that need to be addressed.
114
-
115
- ## Contributing
116
- If you're interested in contributing to this project, please follow the contributing guidelines. By contributing to this project, you agree to abide by its terms.
117
- Contributions are welcome and appreciated!
118
-
119
- ## License
120
-
121
- `saviialib` was created by Pedro Pablo Zavala Tejos. It is licensed under the terms of the MIT license.
122
-
@@ -1,57 +0,0 @@
1
- saviialib/__init__.py,sha256=TMsEY8OOjo9KOz-0jf3QBh6WFOhCY07Rd7W2PK7C-1A,253
2
- saviialib/general_types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- saviialib/general_types/api/__init__.py,sha256=jXhoMlbSv7UCizW_Fm2mqR_3n99qkocVwg6CF7s3w7w,145
4
- saviialib/general_types/api/epii_api_types.py,sha256=jspp5tDN06qx27O3ubRyPfZ3i9ybvn2HLxjh3UTFNcY,2345
5
- saviialib/general_types/error_types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
- saviialib/general_types/error_types/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
- saviialib/general_types/error_types/api/epii_api_error_types.py,sha256=iprpNvVoNA3vakMm7-dQdjCv7ZrRs6tRiXK1uaV3DNU,3049
8
- saviialib/general_types/error_types/common/__init__.py,sha256=yOBLZbt64Ki9Q0IJ0tMAubgq7PtrQ7XQ3RgtAzyOjiE,170
9
- saviialib/general_types/error_types/common/common_types.py,sha256=n5yuw-gVtkrtNfmaZ83ZkYxYHGl4jynOLUB9C8Tr32w,474
10
- saviialib/libs/directory_client/__init__.py,sha256=ys07nzp74fHew2mUkbGpntp5w4t_PnhZIS6D4_mJw2A,162
11
- saviialib/libs/directory_client/client/os_client.py,sha256=TgDnIQvgMP7sIVjn5kAKEJ5BYET7pN-FIQP0lvFMl4Q,763
12
- saviialib/libs/directory_client/directory_client.py,sha256=5HmB1Pt9M8Tk18WKzfh3Fwr8gKa_RZCdAqvbU0rg7mw,1086
13
- saviialib/libs/directory_client/directory_client_contract.py,sha256=wtNaUak1a7r6t9OI1L2ou7XMMJFXWpQFb7WyT6X7fCQ,479
14
- saviialib/libs/directory_client/types/directory_client_types.py,sha256=ncMwVs_o6EYMuypXXmVInsjVDKJsdxVkmwj1M-LEInA,109
15
- saviialib/libs/files_client/__init__.py,sha256=sIi9ne7Z3EfxnqGTaSmH-cZ8QsKyu0hoOz61GyA3njs,192
16
- saviialib/libs/files_client/clients/aiofiles_client.py,sha256=Mu5pSnnEa3dT3GONmt1O-lCQstuQNXHtJHM3D2L6TU8,1107
17
- saviialib/libs/files_client/clients/csv_client.py,sha256=Rk4QbiKlVKrYxYtxQt-Pmkp9QoB_dNgs5r36JB9hU0o,1478
18
- saviialib/libs/files_client/files_client.py,sha256=oWfaMLA_Lw91H1_pPirFtFbdJh4abSyZp91qBsAiePs,950
19
- saviialib/libs/files_client/files_client_contract.py,sha256=fYvd68IMpc1OFkxbzNSmRUoTWVctf3hkNVQ7QZV0m6I,304
20
- saviialib/libs/files_client/types/files_client_types.py,sha256=GOTM5fBY304-EX6IiUnWmt2JpsyQ6Nmb_Tp0wingt0M,755
21
- saviialib/libs/ftp_client/__init__.py,sha256=dW2Yutgc7mJJJzgKLhWKXMgQ6KIWJYfFa1sGpjHH5xU,191
22
- saviialib/libs/ftp_client/clients/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
- saviialib/libs/ftp_client/clients/aioftp_client.py,sha256=5sgr3PMETgaBRlKeu_avxHIh6tr1gb7t2mkxmpRas_k,1925
24
- saviialib/libs/ftp_client/clients/ftplib_client.py,sha256=VcpAn23r03iyCUAj35xHU_AVNrll_45uHFN8Z9OnBkE,2203
25
- saviialib/libs/ftp_client/ftp_client.py,sha256=Naj9p0yYWlXt9um0zKfvuHSoycM8JZg2SPBm8110pYk,1008
26
- saviialib/libs/ftp_client/ftp_client_contract.py,sha256=tymkugDzsJ5PzUXIaSkwX1h7T0naR15qAkjrqswqDyM,338
27
- saviialib/libs/ftp_client/types/__init__.py,sha256=syfwf9feP4QK7fkCTfl4j8l11ic-jHtfi1DE2chaWbs,155
28
- saviialib/libs/ftp_client/types/ftp_client_types.py,sha256=e4SmYkewldulaD8ms2q75zVgLFXyBxBqoa_L-IQOmso,256
29
- saviialib/libs/sharepoint_client/__init__.py,sha256=6RbEzFtCfMrrY8F0JOCVcK6Gqt1FBJ09m0NuWHMCmCI,384
30
- saviialib/libs/sharepoint_client/clients/sharepoint_rest_api.py,sha256=Gq__zrYtSyiwi5NguMYCqJ5Bbs84UqzC9L5qvOMhfVI,6100
31
- saviialib/libs/sharepoint_client/sharepoint_client.py,sha256=gXFisWWCk6pKhoEeaNN8dcHA5ywrGDLqfiKjchrHRy0,1816
32
- saviialib/libs/sharepoint_client/sharepoint_client_contract.py,sha256=H-WsXR5f50jy5RRYNlgV61y_YGjOUq4U_E1DWUUrDYw,612
33
- saviialib/libs/sharepoint_client/types/sharepoint_client_types.py,sha256=JruUCn6o16w00t4zxDrxmv_Bxa52UyShGYmwUFfBCCQ,482
34
- saviialib/libs/zero_dependency/utils/datetime_utils.py,sha256=c2H_JpUKpunCzDw6I4alDWNftEqaciWGtEUklPepm_s,759
35
- saviialib/services/epii/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
- saviialib/services/epii/api.py,sha256=99G-iC8Nz8vv9TuNPpdFsHxDAH8DXVCHnUQzwAUO9Ao,4036
37
- saviialib/services/epii/controllers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
- saviialib/services/epii/controllers/types/__init__.py,sha256=xzky-oTSojLNkWETp_k8a4dcXYvYSQY0VhWo23Yhb8U,195
39
- saviialib/services/epii/controllers/types/update_thies_data_types.py,sha256=kmt18vq7RLEAfIJj9MYz62fJH9etuU1WqZJ5MYmjiIg,448
40
- saviialib/services/epii/controllers/types/upload_backup_to_sharepoint_types.py,sha256=5mDMLy3J5grACl1ezBGYZPOyhIkWYeIWWBOklaP2IlQ,471
41
- saviialib/services/epii/controllers/update_thies_data.py,sha256=8TV420d4VWTvCW18M6sAguHZrX5VODXscgrUfhwO1fs,4884
42
- saviialib/services/epii/controllers/upload_backup_to_sharepoint.py,sha256=7-ABo89yXhrWv-iOFjCkBGX-y_I62eFaOi1LtO5Gb4k,3817
43
- saviialib/services/epii/use_cases/components/create_thies_statistics_file.py,sha256=G9K5UpsUYPM_w2sbusiyRWnZwbumSh5rYgil-rt8EB8,5171
44
- saviialib/services/epii/use_cases/components/thies_bp.py,sha256=1Iq5Wz3kqzJfQNawV_v8ORr_Pl-PoamFp_2Xo8DjvmI,15042
45
- saviialib/services/epii/use_cases/constants/upload_backup_to_sharepoint_constants.py,sha256=erkn-3E8YwBMFs25o7exXoK7s73NdgP9IYDXeWzALcI,98
46
- saviialib/services/epii/use_cases/types/__init__.py,sha256=u6fyodOEJE2j6FMqJux40Xf9ccYAi-UUYxqT-Kzc0kE,199
47
- saviialib/services/epii/use_cases/types/update_thies_data_types.py,sha256=3lJzG1nuZoP1mqFlvQ0-aFJp80SECaeiROlvucVhaSY,539
48
- saviialib/services/epii/use_cases/types/upload_backup_to_sharepoint_types.py,sha256=J_sGhqSaPoMZA0GIrzCx6pmgSKgIkGi0uyrsltU_H8w,320
49
- saviialib/services/epii/use_cases/update_thies_data.py,sha256=moB4fz_aOiKBqQixjm5uS0hyvpF9ufLIMWbVxwXqICc,14591
50
- saviialib/services/epii/use_cases/upload_backup_to_sharepoint.py,sha256=-0MvCzkFM7T2y7XLgFevWAXmqAsthzuY68ReiiL2zDU,11886
51
- saviialib/services/epii/utils/__init__.py,sha256=cYt2tvq65_OMjFaqb8-CCC7IGCQgFd4ziEUWJV7s1iY,98
52
- saviialib/services/epii/utils/update_thies_data_utils.py,sha256=EpjYWXqyHxJ-dO3MHhdXp-rGV7WyUckeFko-nnfnNac,555
53
- saviialib/services/epii/utils/upload_backup_to_sharepoint_utils.py,sha256=hEeV4_kcG8YL6t_3V8AlhgDHtHiUNsdYpilfgTLaQMc,3528
54
- saviialib-1.3.0.dist-info/LICENSE,sha256=NWpf6b38xgBWPBo5HZsCbdfp9hZSliEbRqWQgm0fkOo,1076
55
- saviialib-1.3.0.dist-info/METADATA,sha256=-qovhCVP7ZvvgeEKiFLSEo2OhlcVselpsLdvW82umIc,4113
56
- saviialib-1.3.0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
57
- saviialib-1.3.0.dist-info/RECORD,,
File without changes