airia 0.1.36__tar.gz → 0.1.38__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.
- {airia-0.1.36 → airia-0.1.38}/PKG-INFO +1 -1
- {airia-0.1.36 → airia-0.1.38}/airia/client/async_client.py +2 -0
- airia-0.1.38/airia/client/data_store/__init__.py +4 -0
- airia-0.1.38/airia/client/data_store/async_data_store.py +15 -0
- airia-0.1.38/airia/client/data_store/store/async_store.py +114 -0
- airia-0.1.38/airia/client/data_store/store/base_store.py +73 -0
- airia-0.1.38/airia/client/data_store/store/sync_store.py +114 -0
- airia-0.1.38/airia/client/data_store/sync_data_store.py +15 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/models/async_models.py +68 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/models/base_models.py +34 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/models/sync_models.py +68 -0
- airia-0.1.38/airia/client/store/__init__.py +4 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/sync_client.py +2 -0
- {airia-0.1.36 → airia-0.1.38}/airia/types/api/__init__.py +1 -0
- airia-0.1.38/airia/types/api/data_store/__init__.py +3 -0
- airia-0.1.38/airia/types/api/data_store/store/__init__.py +11 -0
- airia-0.1.38/airia/types/api/data_store/store/_get_files_and_folders.py +80 -0
- {airia-0.1.36 → airia-0.1.38}/airia.egg-info/PKG-INFO +1 -1
- {airia-0.1.36 → airia-0.1.38}/airia.egg-info/SOURCES.txt +10 -0
- {airia-0.1.36 → airia-0.1.38}/pyproject.toml +1 -1
- {airia-0.1.36 → airia-0.1.38}/LICENSE +0 -0
- {airia-0.1.36 → airia-0.1.38}/README.md +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/__init__.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/__init__.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/_request_handler/__init__.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/_request_handler/async_request_handler.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/_request_handler/base_request_handler.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/_request_handler/sync_request_handler.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/attachments/__init__.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/attachments/async_attachments.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/attachments/base_attachments.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/attachments/sync_attachments.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/base_client.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/conversations/__init__.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/conversations/async_conversations.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/conversations/base_conversations.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/conversations/sync_conversations.py +0 -0
- {airia-0.1.36/airia/client → airia-0.1.38/airia/client/data_store}/store/__init__.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/data_vector_search/__init__.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/data_vector_search/async_data_vector_search.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/data_vector_search/base_data_vector_search.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/data_vector_search/sync_data_vector_search.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/deployments/__init__.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/deployments/async_deployments.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/deployments/base_deployments.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/deployments/sync_deployments.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/library/__init__.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/library/async_library.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/library/base_library.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/library/sync_library.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/models/__init__.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/pipeline_execution/__init__.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/pipeline_execution/async_pipeline_execution.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/pipeline_execution/base_pipeline_execution.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/pipeline_execution/sync_pipeline_execution.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/pipeline_import/__init__.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/pipeline_import/async_pipeline_import.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/pipeline_import/base_pipeline_import.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/pipeline_import/sync_pipeline_import.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/pipelines_config/__init__.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/pipelines_config/async_pipelines_config.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/pipelines_config/base_pipelines_config.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/pipelines_config/sync_pipelines_config.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/project/__init__.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/project/async_project.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/project/base_project.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/project/sync_project.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/store/async_store.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/store/base_store.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/store/sync_store.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/tools/__init__.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/tools/async_tools.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/tools/base_tools.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/client/tools/sync_tools.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/constants.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/exceptions.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/logs.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/types/__init__.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/types/_api_version.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/types/_request_data.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/types/_structured_output.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/types/api/attachments/__init__.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/types/api/attachments/upload_file.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/types/api/conversations/__init__.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/types/api/conversations/_conversations.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/types/api/data_vector_search/__init__.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/types/api/data_vector_search/get_file_chunks.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/types/api/deployments/__init__.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/types/api/deployments/get_deployment.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/types/api/deployments/get_deployments.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/types/api/library/__init__.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/types/api/library/_library_models.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/types/api/models/__init__.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/types/api/models/list_models.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/types/api/pipeline_execution/__init__.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/types/api/pipeline_execution/_pipeline_execution.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/types/api/pipeline_execution/get_pipeline_execution.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/types/api/pipeline_import/__init__.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/types/api/pipeline_import/create_agent_from_pipeline_definition.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/types/api/pipelines_config/__init__.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/types/api/pipelines_config/export_pipeline_definition.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/types/api/pipelines_config/get_pipeline_config.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/types/api/pipelines_config/get_pipelines_config.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/types/api/project/__init__.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/types/api/project/get_projects.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/types/api/store/__init__.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/types/api/store/get_file.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/types/api/store/get_files.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/types/api/tools/__init__.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/types/api/tools/_tools.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/types/sse/__init__.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/types/sse/sse_messages.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia/utils/sse_parser.py +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia.egg-info/dependency_links.txt +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia.egg-info/requires.txt +0 -0
- {airia-0.1.36 → airia-0.1.38}/airia.egg-info/top_level.txt +0 -0
- {airia-0.1.36 → airia-0.1.38}/setup.cfg +0 -0
|
@@ -11,6 +11,7 @@ from ._request_handler import AsyncRequestHandler
|
|
|
11
11
|
from .attachments import AsyncAttachments
|
|
12
12
|
from .base_client import AiriaBaseClient
|
|
13
13
|
from .conversations import AsyncConversations
|
|
14
|
+
from .data_store import AsyncDataStore
|
|
14
15
|
from .data_vector_search import AsyncDataVectorSearch
|
|
15
16
|
from .deployments import AsyncDeployments
|
|
16
17
|
from .library import AsyncLibrary
|
|
@@ -70,6 +71,7 @@ class AiriaAsyncClient(AiriaBaseClient):
|
|
|
70
71
|
self.project = AsyncProject(self._request_handler)
|
|
71
72
|
self.conversations = AsyncConversations(self._request_handler)
|
|
72
73
|
self.store = AsyncStore(self._request_handler)
|
|
74
|
+
self.data_store = AsyncDataStore(self._request_handler)
|
|
73
75
|
self.deployments = AsyncDeployments(self._request_handler)
|
|
74
76
|
self.data_vector_search = AsyncDataVectorSearch(self._request_handler)
|
|
75
77
|
self.library = AsyncLibrary(self._request_handler)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from .._request_handler import AsyncRequestHandler
|
|
2
|
+
from .store import AsyncStore
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class AsyncDataStore:
|
|
6
|
+
"""Async Data Store client for browsing files and folders in store connectors."""
|
|
7
|
+
|
|
8
|
+
def __init__(self, request_handler: AsyncRequestHandler):
|
|
9
|
+
"""
|
|
10
|
+
Initialize the AsyncDataStore client.
|
|
11
|
+
|
|
12
|
+
Args:
|
|
13
|
+
request_handler: The async request handler for making API calls
|
|
14
|
+
"""
|
|
15
|
+
self.store = AsyncStore(request_handler)
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
|
|
3
|
+
from ....types.api.data_store.store import GetFilesAndFoldersResponse
|
|
4
|
+
from ..._request_handler import AsyncRequestHandler
|
|
5
|
+
from .base_store import BaseStore
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class AsyncStore(BaseStore):
|
|
9
|
+
"""Async Store client for browsing files and folders."""
|
|
10
|
+
|
|
11
|
+
def __init__(self, request_handler: AsyncRequestHandler):
|
|
12
|
+
super().__init__(request_handler)
|
|
13
|
+
|
|
14
|
+
async def get_files_and_folders(
|
|
15
|
+
self,
|
|
16
|
+
store_connector_id: str,
|
|
17
|
+
project_id: str,
|
|
18
|
+
folder_id: Optional[str] = None,
|
|
19
|
+
page_number: Optional[int] = None,
|
|
20
|
+
page_size: Optional[int] = None,
|
|
21
|
+
sort_by: Optional[str] = None,
|
|
22
|
+
sort_order: Optional[str] = None,
|
|
23
|
+
filter_by: Optional[str] = None,
|
|
24
|
+
filter_value: Optional[str] = None,
|
|
25
|
+
correlation_id: Optional[str] = None,
|
|
26
|
+
) -> GetFilesAndFoldersResponse:
|
|
27
|
+
"""
|
|
28
|
+
Retrieve files and folders from a store connector in the Airia data store.
|
|
29
|
+
|
|
30
|
+
This method retrieves information about files and folders in the specified
|
|
31
|
+
store connector, with optional navigation into specific folders and support
|
|
32
|
+
for pagination, sorting, and filtering.
|
|
33
|
+
|
|
34
|
+
Args:
|
|
35
|
+
store_connector_id: The unique identifier of the store connector (GUID format)
|
|
36
|
+
project_id: The unique identifier of the project (GUID format)
|
|
37
|
+
folder_id: Optional folder ID to browse within a specific folder (GUID format).
|
|
38
|
+
If not provided, retrieves items from the root level.
|
|
39
|
+
page_number: Page number for pagination (1-indexed)
|
|
40
|
+
page_size: Number of items per page
|
|
41
|
+
sort_by: Field to sort by (e.g., "lastSyncAt", "name")
|
|
42
|
+
sort_order: Sort order ("ASC" or "DESC")
|
|
43
|
+
filter_by: Field to filter by
|
|
44
|
+
filter_value: Value to filter by
|
|
45
|
+
correlation_id: Optional correlation ID for request tracing
|
|
46
|
+
|
|
47
|
+
Returns:
|
|
48
|
+
GetFilesAndFoldersResponse: List of files and folders with metadata and total count
|
|
49
|
+
|
|
50
|
+
Raises:
|
|
51
|
+
AiriaAPIError: If the API request fails, including cases where:
|
|
52
|
+
- The store_connector_id doesn't exist (404)
|
|
53
|
+
- The project_id doesn't exist (404)
|
|
54
|
+
- The folder_id is invalid (404)
|
|
55
|
+
- Authentication fails (401)
|
|
56
|
+
- Access is forbidden (403)
|
|
57
|
+
- Server errors (5xx)
|
|
58
|
+
ValueError: If required parameters are missing or invalid
|
|
59
|
+
|
|
60
|
+
Example:
|
|
61
|
+
```python
|
|
62
|
+
from airia import AiriaAsyncClient
|
|
63
|
+
|
|
64
|
+
async with AiriaAsyncClient(api_key="your_api_key") as client:
|
|
65
|
+
# Get files and folders from root level
|
|
66
|
+
response = await client.data_store.store.get_files_and_folders(
|
|
67
|
+
store_connector_id="02b2ef8b-8bff-42c3-9ddb-e325c893176e",
|
|
68
|
+
project_id="0196162b-1553-71b2-8ebf-44594717936e"
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
# Browse a specific folder with pagination and sorting
|
|
72
|
+
response = await client.data_store.store.get_files_and_folders(
|
|
73
|
+
store_connector_id="02b2ef8b-8bff-42c3-9ddb-e325c893176e",
|
|
74
|
+
project_id="0196162b-1553-71b2-8ebf-44594717936e",
|
|
75
|
+
folder_id="3292db69-f365-4bb6-a2b6-a017a187fb77",
|
|
76
|
+
page_number=1,
|
|
77
|
+
page_size=50,
|
|
78
|
+
sort_by="lastSyncAt",
|
|
79
|
+
sort_order="DESC"
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
# Access the results
|
|
83
|
+
if response.files_and_folders:
|
|
84
|
+
for item in response.files_and_folders:
|
|
85
|
+
print(f"{item.name} ({item.type})")
|
|
86
|
+
if item.type == "folder":
|
|
87
|
+
print(f" Contains {item.file_count} files, {item.folder_count} folders")
|
|
88
|
+
|
|
89
|
+
print(f"Total items: {response.total_count}")
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Note:
|
|
93
|
+
The response includes:
|
|
94
|
+
- files_and_folders: List of file and folder objects with metadata
|
|
95
|
+
- total_count: Total number of items (useful for pagination)
|
|
96
|
+
"""
|
|
97
|
+
request_data = self._pre_get_files_and_folders(
|
|
98
|
+
store_connector_id=store_connector_id,
|
|
99
|
+
project_id=project_id,
|
|
100
|
+
folder_id=folder_id,
|
|
101
|
+
page_number=page_number,
|
|
102
|
+
page_size=page_size,
|
|
103
|
+
sort_by=sort_by,
|
|
104
|
+
sort_order=sort_order,
|
|
105
|
+
filter_by=filter_by,
|
|
106
|
+
filter_value=filter_value,
|
|
107
|
+
correlation_id=correlation_id,
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
response = await self._request_handler.make_request(
|
|
111
|
+
"GET", request_data, return_json=True
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
return GetFilesAndFoldersResponse(**response)
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
from typing import Optional, Union
|
|
2
|
+
from urllib.parse import urljoin
|
|
3
|
+
|
|
4
|
+
from ..._request_handler import AsyncRequestHandler, RequestHandler
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class BaseStore:
|
|
8
|
+
def __init__(self, request_handler: Union[RequestHandler, AsyncRequestHandler]):
|
|
9
|
+
self._request_handler = request_handler
|
|
10
|
+
|
|
11
|
+
def _pre_get_files_and_folders(
|
|
12
|
+
self,
|
|
13
|
+
store_connector_id: str,
|
|
14
|
+
project_id: str,
|
|
15
|
+
folder_id: Optional[str] = None,
|
|
16
|
+
page_number: Optional[int] = None,
|
|
17
|
+
page_size: Optional[int] = None,
|
|
18
|
+
sort_by: Optional[str] = None,
|
|
19
|
+
sort_order: Optional[str] = None,
|
|
20
|
+
filter_by: Optional[str] = None,
|
|
21
|
+
filter_value: Optional[str] = None,
|
|
22
|
+
correlation_id: Optional[str] = None,
|
|
23
|
+
):
|
|
24
|
+
"""
|
|
25
|
+
Prepare request data for get files and folders endpoint.
|
|
26
|
+
|
|
27
|
+
This internal method constructs the URL and query parameters for
|
|
28
|
+
retrieving files and folders from a store connector.
|
|
29
|
+
|
|
30
|
+
Args:
|
|
31
|
+
store_connector_id: ID of the store connector
|
|
32
|
+
project_id: ID of the project
|
|
33
|
+
folder_id: Optional folder ID to browse within a specific folder
|
|
34
|
+
page_number: Page number for pagination
|
|
35
|
+
page_size: Number of items per page
|
|
36
|
+
sort_by: Field to sort by
|
|
37
|
+
sort_order: Sort order (ASC or DESC)
|
|
38
|
+
filter_by: Field to filter by
|
|
39
|
+
filter_value: Value to filter by
|
|
40
|
+
correlation_id: Optional correlation ID for tracing
|
|
41
|
+
|
|
42
|
+
Returns:
|
|
43
|
+
RequestData: Prepared request data for the get files and folders endpoint
|
|
44
|
+
"""
|
|
45
|
+
# Build URL with optional folder_id
|
|
46
|
+
if folder_id:
|
|
47
|
+
url_path = f"datastore/v1/store/{store_connector_id}/folders/{folder_id}"
|
|
48
|
+
else:
|
|
49
|
+
url_path = f"datastore/v1/store/{store_connector_id}/folders/"
|
|
50
|
+
|
|
51
|
+
url = urljoin(self._request_handler.base_url, url_path)
|
|
52
|
+
|
|
53
|
+
# Build query parameters
|
|
54
|
+
params = {"projectId": project_id}
|
|
55
|
+
|
|
56
|
+
if page_number is not None:
|
|
57
|
+
params["pagingParameters.pageNumber"] = page_number
|
|
58
|
+
if page_size is not None:
|
|
59
|
+
params["pagingParameters.pageSize"] = page_size
|
|
60
|
+
if sort_by is not None:
|
|
61
|
+
params["sortingParameters.sortBy"] = sort_by
|
|
62
|
+
if sort_order is not None:
|
|
63
|
+
params["sortingParameters.sortOrder"] = sort_order
|
|
64
|
+
if filter_by is not None:
|
|
65
|
+
params["filteringParameters.filterBy"] = filter_by
|
|
66
|
+
if filter_value is not None:
|
|
67
|
+
params["filteringParameters.filterValue"] = filter_value
|
|
68
|
+
|
|
69
|
+
request_data = self._request_handler.prepare_request(
|
|
70
|
+
url, params=params, payload=None, correlation_id=correlation_id
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
return request_data
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
|
|
3
|
+
from ....types.api.data_store.store import GetFilesAndFoldersResponse
|
|
4
|
+
from ..._request_handler import RequestHandler
|
|
5
|
+
from .base_store import BaseStore
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class Store(BaseStore):
|
|
9
|
+
"""Store client for browsing files and folders."""
|
|
10
|
+
def __init__(self, request_handler: RequestHandler):
|
|
11
|
+
super().__init__(request_handler)
|
|
12
|
+
|
|
13
|
+
def get_files_and_folders(
|
|
14
|
+
self,
|
|
15
|
+
store_connector_id: str,
|
|
16
|
+
project_id: str,
|
|
17
|
+
folder_id: Optional[str] = None,
|
|
18
|
+
page_number: Optional[int] = None,
|
|
19
|
+
page_size: Optional[int] = None,
|
|
20
|
+
sort_by: Optional[str] = None,
|
|
21
|
+
sort_order: Optional[str] = None,
|
|
22
|
+
filter_by: Optional[str] = None,
|
|
23
|
+
filter_value: Optional[str] = None,
|
|
24
|
+
correlation_id: Optional[str] = None,
|
|
25
|
+
) -> GetFilesAndFoldersResponse:
|
|
26
|
+
"""
|
|
27
|
+
Retrieve files and folders from a store connector in the Airia data store.
|
|
28
|
+
|
|
29
|
+
This method retrieves information about files and folders in the specified
|
|
30
|
+
store connector, with optional navigation into specific folders and support
|
|
31
|
+
for pagination, sorting, and filtering.
|
|
32
|
+
|
|
33
|
+
Args:
|
|
34
|
+
store_connector_id: The unique identifier of the store connector (GUID format)
|
|
35
|
+
project_id: The unique identifier of the project (GUID format)
|
|
36
|
+
folder_id: Optional folder ID to browse within a specific folder (GUID format).
|
|
37
|
+
If not provided, retrieves items from the root level.
|
|
38
|
+
page_number: Page number for pagination (1-indexed)
|
|
39
|
+
page_size: Number of items per page
|
|
40
|
+
sort_by: Field to sort by (e.g., "lastSyncAt", "name")
|
|
41
|
+
sort_order: Sort order ("ASC" or "DESC")
|
|
42
|
+
filter_by: Field to filter by
|
|
43
|
+
filter_value: Value to filter by
|
|
44
|
+
correlation_id: Optional correlation ID for request tracing
|
|
45
|
+
|
|
46
|
+
Returns:
|
|
47
|
+
GetFilesAndFoldersResponse: List of files and folders with metadata and total count
|
|
48
|
+
|
|
49
|
+
Raises:
|
|
50
|
+
AiriaAPIError: If the API request fails, including cases where:
|
|
51
|
+
- The store_connector_id doesn't exist (404)
|
|
52
|
+
- The project_id doesn't exist (404)
|
|
53
|
+
- The folder_id is invalid (404)
|
|
54
|
+
- Authentication fails (401)
|
|
55
|
+
- Access is forbidden (403)
|
|
56
|
+
- Server errors (5xx)
|
|
57
|
+
ValueError: If required parameters are missing or invalid
|
|
58
|
+
|
|
59
|
+
Example:
|
|
60
|
+
```python
|
|
61
|
+
from airia import AiriaClient
|
|
62
|
+
|
|
63
|
+
client = AiriaClient(api_key="your_api_key")
|
|
64
|
+
|
|
65
|
+
# Get files and folders from root level
|
|
66
|
+
response = client.data_store.store.get_files_and_folders(
|
|
67
|
+
store_connector_id="02b2ef8b-8bff-42c3-9ddb-e325c893176e",
|
|
68
|
+
project_id="0196162b-1553-71b2-8ebf-44594717936e"
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
# Browse a specific folder with pagination and sorting
|
|
72
|
+
response = client.data_store.store.get_files_and_folders(
|
|
73
|
+
store_connector_id="02b2ef8b-8bff-42c3-9ddb-e325c893176e",
|
|
74
|
+
project_id="0196162b-1553-71b2-8ebf-44594717936e",
|
|
75
|
+
folder_id="3292db69-f365-4bb6-a2b6-a017a187fb77",
|
|
76
|
+
page_number=1,
|
|
77
|
+
page_size=50,
|
|
78
|
+
sort_by="lastSyncAt",
|
|
79
|
+
sort_order="DESC"
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
# Access the results
|
|
83
|
+
if response.files_and_folders:
|
|
84
|
+
for item in response.files_and_folders:
|
|
85
|
+
print(f"{item.name} ({item.type})")
|
|
86
|
+
if item.type == "folder":
|
|
87
|
+
print(f" Contains {item.file_count} files, {item.folder_count} folders")
|
|
88
|
+
|
|
89
|
+
print(f"Total items: {response.total_count}")
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Note:
|
|
93
|
+
The response includes:
|
|
94
|
+
- files_and_folders: List of file and folder objects with metadata
|
|
95
|
+
- total_count: Total number of items (useful for pagination)
|
|
96
|
+
"""
|
|
97
|
+
request_data = self._pre_get_files_and_folders(
|
|
98
|
+
store_connector_id=store_connector_id,
|
|
99
|
+
project_id=project_id,
|
|
100
|
+
folder_id=folder_id,
|
|
101
|
+
page_number=page_number,
|
|
102
|
+
page_size=page_size,
|
|
103
|
+
sort_by=sort_by,
|
|
104
|
+
sort_order=sort_order,
|
|
105
|
+
filter_by=filter_by,
|
|
106
|
+
filter_value=filter_value,
|
|
107
|
+
correlation_id=correlation_id,
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
response = self._request_handler.make_request(
|
|
111
|
+
"GET", request_data, return_json=True
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
return GetFilesAndFoldersResponse(**response)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from .._request_handler import RequestHandler
|
|
2
|
+
from .store import Store
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class DataStore:
|
|
6
|
+
"""Data Store client for browsing files and folders in store connectors."""
|
|
7
|
+
|
|
8
|
+
def __init__(self, request_handler: RequestHandler):
|
|
9
|
+
"""
|
|
10
|
+
Initialize the DataStore client.
|
|
11
|
+
|
|
12
|
+
Args:
|
|
13
|
+
request_handler: The request handler for making API calls
|
|
14
|
+
"""
|
|
15
|
+
self.store = Store(request_handler)
|
|
@@ -95,6 +95,74 @@ class AsyncModels(BaseModels):
|
|
|
95
95
|
|
|
96
96
|
return [ModelItem(**item) for item in resp["items"]]
|
|
97
97
|
|
|
98
|
+
async def get_model(
|
|
99
|
+
self,
|
|
100
|
+
model_id: str,
|
|
101
|
+
correlation_id: Optional[str] = None,
|
|
102
|
+
) -> ModelItem:
|
|
103
|
+
"""
|
|
104
|
+
Retrieve a model by its ID.
|
|
105
|
+
|
|
106
|
+
This method fetches detailed information about a specific model, including
|
|
107
|
+
its configuration, pricing, capabilities, and associated project details.
|
|
108
|
+
|
|
109
|
+
Args:
|
|
110
|
+
model_id (str): The unique identifier of the model to retrieve.
|
|
111
|
+
correlation_id (str, optional): A unique identifier for request tracing
|
|
112
|
+
and logging. If not provided, one will be automatically generated.
|
|
113
|
+
|
|
114
|
+
Returns:
|
|
115
|
+
ModelItem: A ModelItem object containing comprehensive model information
|
|
116
|
+
including configuration, pricing, capabilities, and project associations.
|
|
117
|
+
|
|
118
|
+
Raises:
|
|
119
|
+
AiriaAPIError: If the API request fails, including cases where:
|
|
120
|
+
- Model not found (404)
|
|
121
|
+
- Authentication fails (401)
|
|
122
|
+
- Access is forbidden (403)
|
|
123
|
+
- Server errors (5xx)
|
|
124
|
+
|
|
125
|
+
Example:
|
|
126
|
+
```python
|
|
127
|
+
from airia import AiriaAsyncClient
|
|
128
|
+
|
|
129
|
+
client = AiriaAsyncClient(api_key="your_api_key")
|
|
130
|
+
|
|
131
|
+
# Get a specific model
|
|
132
|
+
model = await client.models.get_model(
|
|
133
|
+
model_id="447589d8-f82f-4a0c-ad15-215a2eaee7b8"
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
print(f"Model: {model.display_name}")
|
|
137
|
+
print(f"Provider: {model.provider}")
|
|
138
|
+
print(f"Model Name: {model.model_name}")
|
|
139
|
+
print(f"Has tool support: {model.has_tool_support}")
|
|
140
|
+
print(f"Has stream support: {model.has_stream_support}")
|
|
141
|
+
|
|
142
|
+
# Access pricing information
|
|
143
|
+
if model.user_provided_details:
|
|
144
|
+
print(f"Input token price: {model.user_provided_details.input_token_price}")
|
|
145
|
+
print(f"Output token price: {model.user_provided_details.output_token_price}")
|
|
146
|
+
|
|
147
|
+
# Get model with correlation ID for tracking
|
|
148
|
+
model = await client.models.get_model(
|
|
149
|
+
model_id="447589d8-f82f-4a0c-ad15-215a2eaee7b8",
|
|
150
|
+
correlation_id="my-correlation-id"
|
|
151
|
+
)
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Note:
|
|
155
|
+
The model must be accessible to the authenticated user. Users will only
|
|
156
|
+
be able to retrieve models they have been granted access to.
|
|
157
|
+
"""
|
|
158
|
+
request_data = self._pre_get_model(
|
|
159
|
+
model_id=model_id,
|
|
160
|
+
correlation_id=correlation_id,
|
|
161
|
+
api_version=ApiVersion.V1.value,
|
|
162
|
+
)
|
|
163
|
+
resp = await self._request_handler.make_request("GET", request_data)
|
|
164
|
+
return ModelItem(**resp)
|
|
165
|
+
|
|
98
166
|
async def delete_model(
|
|
99
167
|
self,
|
|
100
168
|
model_id: str,
|
|
@@ -67,6 +67,40 @@ class BaseModels:
|
|
|
67
67
|
|
|
68
68
|
return request_data
|
|
69
69
|
|
|
70
|
+
def _pre_get_model(
|
|
71
|
+
self,
|
|
72
|
+
model_id: str,
|
|
73
|
+
correlation_id: Optional[str] = None,
|
|
74
|
+
api_version: str = ApiVersion.V1.value,
|
|
75
|
+
):
|
|
76
|
+
"""
|
|
77
|
+
Prepare request data for retrieving a single model.
|
|
78
|
+
|
|
79
|
+
Args:
|
|
80
|
+
model_id: The ID of the model to retrieve
|
|
81
|
+
correlation_id: Optional correlation ID for tracing
|
|
82
|
+
api_version: API version to use for the request
|
|
83
|
+
|
|
84
|
+
Returns:
|
|
85
|
+
RequestData: Prepared request data for the get endpoint
|
|
86
|
+
|
|
87
|
+
Raises:
|
|
88
|
+
ValueError: If an invalid API version is provided
|
|
89
|
+
"""
|
|
90
|
+
if api_version not in ApiVersion.as_list():
|
|
91
|
+
raise ValueError(
|
|
92
|
+
f"Invalid API version: {api_version}. Valid versions are: {', '.join(ApiVersion.as_list())}"
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
url = urljoin(
|
|
96
|
+
self._request_handler.base_url,
|
|
97
|
+
f"{api_version}/Models/{model_id}",
|
|
98
|
+
)
|
|
99
|
+
request_data = self._request_handler.prepare_request(
|
|
100
|
+
url, correlation_id=correlation_id
|
|
101
|
+
)
|
|
102
|
+
return request_data
|
|
103
|
+
|
|
70
104
|
def _pre_delete_model(
|
|
71
105
|
self,
|
|
72
106
|
model_id: str,
|
|
@@ -95,6 +95,74 @@ class Models(BaseModels):
|
|
|
95
95
|
|
|
96
96
|
return [ModelItem(**item) for item in resp["items"]]
|
|
97
97
|
|
|
98
|
+
def get_model(
|
|
99
|
+
self,
|
|
100
|
+
model_id: str,
|
|
101
|
+
correlation_id: Optional[str] = None,
|
|
102
|
+
) -> ModelItem:
|
|
103
|
+
"""
|
|
104
|
+
Retrieve a model by its ID.
|
|
105
|
+
|
|
106
|
+
This method fetches detailed information about a specific model, including
|
|
107
|
+
its configuration, pricing, capabilities, and associated project details.
|
|
108
|
+
|
|
109
|
+
Args:
|
|
110
|
+
model_id (str): The unique identifier of the model to retrieve.
|
|
111
|
+
correlation_id (str, optional): A unique identifier for request tracing
|
|
112
|
+
and logging. If not provided, one will be automatically generated.
|
|
113
|
+
|
|
114
|
+
Returns:
|
|
115
|
+
ModelItem: A ModelItem object containing comprehensive model information
|
|
116
|
+
including configuration, pricing, capabilities, and project associations.
|
|
117
|
+
|
|
118
|
+
Raises:
|
|
119
|
+
AiriaAPIError: If the API request fails, including cases where:
|
|
120
|
+
- Model not found (404)
|
|
121
|
+
- Authentication fails (401)
|
|
122
|
+
- Access is forbidden (403)
|
|
123
|
+
- Server errors (5xx)
|
|
124
|
+
|
|
125
|
+
Example:
|
|
126
|
+
```python
|
|
127
|
+
from airia import AiriaClient
|
|
128
|
+
|
|
129
|
+
client = AiriaClient(api_key="your_api_key")
|
|
130
|
+
|
|
131
|
+
# Get a specific model
|
|
132
|
+
model = client.models.get_model(
|
|
133
|
+
model_id="447589d8-f82f-4a0c-ad15-215a2eaee7b8"
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
print(f"Model: {model.display_name}")
|
|
137
|
+
print(f"Provider: {model.provider}")
|
|
138
|
+
print(f"Model Name: {model.model_name}")
|
|
139
|
+
print(f"Has tool support: {model.has_tool_support}")
|
|
140
|
+
print(f"Has stream support: {model.has_stream_support}")
|
|
141
|
+
|
|
142
|
+
# Access pricing information
|
|
143
|
+
if model.user_provided_details:
|
|
144
|
+
print(f"Input token price: {model.user_provided_details.input_token_price}")
|
|
145
|
+
print(f"Output token price: {model.user_provided_details.output_token_price}")
|
|
146
|
+
|
|
147
|
+
# Get model with correlation ID for tracking
|
|
148
|
+
model = client.models.get_model(
|
|
149
|
+
model_id="447589d8-f82f-4a0c-ad15-215a2eaee7b8",
|
|
150
|
+
correlation_id="my-correlation-id"
|
|
151
|
+
)
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Note:
|
|
155
|
+
The model must be accessible to the authenticated user. Users will only
|
|
156
|
+
be able to retrieve models they have been granted access to.
|
|
157
|
+
"""
|
|
158
|
+
request_data = self._pre_get_model(
|
|
159
|
+
model_id=model_id,
|
|
160
|
+
correlation_id=correlation_id,
|
|
161
|
+
api_version=ApiVersion.V1.value,
|
|
162
|
+
)
|
|
163
|
+
resp = self._request_handler.make_request("GET", request_data)
|
|
164
|
+
return ModelItem(**resp)
|
|
165
|
+
|
|
98
166
|
def delete_model(
|
|
99
167
|
self,
|
|
100
168
|
model_id: str,
|
|
@@ -11,6 +11,7 @@ from ._request_handler import RequestHandler
|
|
|
11
11
|
from .attachments import Attachments
|
|
12
12
|
from .base_client import AiriaBaseClient
|
|
13
13
|
from .conversations import Conversations
|
|
14
|
+
from .data_store import DataStore
|
|
14
15
|
from .data_vector_search import DataVectorSearch
|
|
15
16
|
from .deployments import Deployments
|
|
16
17
|
from .library import Library
|
|
@@ -70,6 +71,7 @@ class AiriaClient(AiriaBaseClient):
|
|
|
70
71
|
self.project = Project(self._request_handler)
|
|
71
72
|
self.conversations = Conversations(self._request_handler)
|
|
72
73
|
self.store = Store(self._request_handler)
|
|
74
|
+
self.data_store = DataStore(self._request_handler)
|
|
73
75
|
self.deployments = Deployments(self._request_handler)
|
|
74
76
|
self.data_vector_search = DataVectorSearch(self._request_handler)
|
|
75
77
|
self.library = Library(self._request_handler)
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Pydantic models for data store file and folder listing API responses.
|
|
3
|
+
|
|
4
|
+
This module defines data structures for browsing files and folders within
|
|
5
|
+
store connectors on the Airia platform.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from typing import List, Optional
|
|
9
|
+
|
|
10
|
+
from pydantic import BaseModel, Field
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class IngestionProcessingStatus(BaseModel):
|
|
14
|
+
"""Status information for file ingestion processing.
|
|
15
|
+
|
|
16
|
+
Contains details about how a file is being processed during ingestion,
|
|
17
|
+
including processing mode, status, and any errors encountered.
|
|
18
|
+
|
|
19
|
+
Attributes:
|
|
20
|
+
table_document_processing_mode: Mode used for processing table documents
|
|
21
|
+
user_errors: List of user-facing error messages
|
|
22
|
+
system_errors: List of system error messages
|
|
23
|
+
status: Current processing status
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
table_document_processing_mode: Optional[str] = Field(
|
|
27
|
+
None, alias="tableDocumentProcessingMode"
|
|
28
|
+
)
|
|
29
|
+
user_errors: Optional[List[str]] = Field(None, alias="userErrors")
|
|
30
|
+
system_errors: Optional[List[str]] = Field(None, alias="systemErrors")
|
|
31
|
+
status: Optional[str] = None
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class FileOrFolder(BaseModel):
|
|
35
|
+
"""Individual file or folder entry in a store connector.
|
|
36
|
+
|
|
37
|
+
Represents a single item (file or folder) within the data store,
|
|
38
|
+
including metadata, status, and nested content counts for folders.
|
|
39
|
+
|
|
40
|
+
Attributes:
|
|
41
|
+
id: Unique identifier for the file or folder
|
|
42
|
+
name: Name of the file or folder
|
|
43
|
+
type: Type of the item (e.g., 'file' or 'folder')
|
|
44
|
+
size: Size in bytes (for files)
|
|
45
|
+
mime_type: MIME type (for files)
|
|
46
|
+
file_count: Number of files (for folders)
|
|
47
|
+
folder_count: Number of subfolders (for folders)
|
|
48
|
+
file_last_updated_at: Timestamp of last update (ISO format)
|
|
49
|
+
status: Current status of the file or folder
|
|
50
|
+
ingestion_processing_statuses: List of ingestion processing status information
|
|
51
|
+
additional_metadata_json: Additional metadata as JSON string
|
|
52
|
+
"""
|
|
53
|
+
|
|
54
|
+
id: Optional[str] = None
|
|
55
|
+
name: Optional[str] = None
|
|
56
|
+
type: Optional[str] = None
|
|
57
|
+
size: Optional[int] = None
|
|
58
|
+
mime_type: Optional[str] = Field(None, alias="mimeType")
|
|
59
|
+
file_count: Optional[int] = Field(None, alias="fileCount")
|
|
60
|
+
folder_count: Optional[int] = Field(None, alias="folderCount")
|
|
61
|
+
file_last_updated_at: Optional[str] = Field(None, alias="fileLastUpdatedAt")
|
|
62
|
+
status: Optional[str] = None
|
|
63
|
+
ingestion_processing_statuses: Optional[List[IngestionProcessingStatus]] = Field(
|
|
64
|
+
None, alias="ingestionProcessingStatuses"
|
|
65
|
+
)
|
|
66
|
+
additional_metadata_json: Optional[str] = Field(None, alias="additionalMetadataJson")
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
class GetFilesAndFoldersResponse(BaseModel):
|
|
70
|
+
"""Response model for getting files and folders from a store connector.
|
|
71
|
+
|
|
72
|
+
Contains a list of files and folders along with pagination information.
|
|
73
|
+
|
|
74
|
+
Attributes:
|
|
75
|
+
files_and_folders: List of file and folder objects
|
|
76
|
+
total_count: Total number of items available (may be greater than items returned)
|
|
77
|
+
"""
|
|
78
|
+
|
|
79
|
+
files_and_folders: Optional[List[FileOrFolder]] = Field(None, alias="filesAndFolders")
|
|
80
|
+
total_count: Optional[int] = Field(None, alias="totalCount")
|
|
@@ -26,6 +26,13 @@ airia/client/conversations/__init__.py
|
|
|
26
26
|
airia/client/conversations/async_conversations.py
|
|
27
27
|
airia/client/conversations/base_conversations.py
|
|
28
28
|
airia/client/conversations/sync_conversations.py
|
|
29
|
+
airia/client/data_store/__init__.py
|
|
30
|
+
airia/client/data_store/async_data_store.py
|
|
31
|
+
airia/client/data_store/sync_data_store.py
|
|
32
|
+
airia/client/data_store/store/__init__.py
|
|
33
|
+
airia/client/data_store/store/async_store.py
|
|
34
|
+
airia/client/data_store/store/base_store.py
|
|
35
|
+
airia/client/data_store/store/sync_store.py
|
|
29
36
|
airia/client/data_vector_search/__init__.py
|
|
30
37
|
airia/client/data_vector_search/async_data_vector_search.py
|
|
31
38
|
airia/client/data_vector_search/base_data_vector_search.py
|
|
@@ -75,6 +82,9 @@ airia/types/api/attachments/__init__.py
|
|
|
75
82
|
airia/types/api/attachments/upload_file.py
|
|
76
83
|
airia/types/api/conversations/__init__.py
|
|
77
84
|
airia/types/api/conversations/_conversations.py
|
|
85
|
+
airia/types/api/data_store/__init__.py
|
|
86
|
+
airia/types/api/data_store/store/__init__.py
|
|
87
|
+
airia/types/api/data_store/store/_get_files_and_folders.py
|
|
78
88
|
airia/types/api/data_vector_search/__init__.py
|
|
79
89
|
airia/types/api/data_vector_search/get_file_chunks.py
|
|
80
90
|
airia/types/api/deployments/__init__.py
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
{airia-0.1.36 → airia-0.1.38}/airia/types/api/pipelines_config/export_pipeline_definition.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
|
|
File without changes
|
|
File without changes
|