athena-intelligence 0.1.244__py3-none-any.whl → 0.1.246__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 athena-intelligence might be problematic. Click here for more details.

athena/__init__.py CHANGED
@@ -38,6 +38,7 @@ if typing.TYPE_CHECKING:
38
38
  DataFrameRequestOutDataItemItem,
39
39
  DataFrameRequestOutIndexItem,
40
40
  DataFrameUnknownFormatError,
41
+ DimensionProperties,
41
42
  DocumentChunk,
42
43
  DriveAgentResponse,
43
44
  FileChunkRequestOut,
@@ -50,6 +51,7 @@ if typing.TYPE_CHECKING:
50
51
  GeneralAgentResponseMessage,
51
52
  GeneralAgentResponseMessageKwargs,
52
53
  GetTableResponse,
54
+ GridRange,
53
55
  Id,
54
56
  ImageUrlContent,
55
57
  InputMessage,
@@ -67,6 +69,7 @@ if typing.TYPE_CHECKING:
67
69
  SheetOperationResponse,
68
70
  SqlAgentResponse,
69
71
  StructuredDataExtractorResponse,
72
+ Tabcolor,
70
73
  TableRowData,
71
74
  TextContent,
72
75
  TextFormatModel,
@@ -128,6 +131,7 @@ _dynamic_imports: typing.Dict[str, str] = {
128
131
  "DataFrameRequestOutDataItemItem": ".types",
129
132
  "DataFrameRequestOutIndexItem": ".types",
130
133
  "DataFrameUnknownFormatError": ".types",
134
+ "DimensionProperties": ".types",
131
135
  "DocumentChunk": ".types",
132
136
  "DriveAgentResponse": ".types",
133
137
  "FileChunkRequestOut": ".types",
@@ -140,6 +144,7 @@ _dynamic_imports: typing.Dict[str, str] = {
140
144
  "GeneralAgentResponseMessage": ".types",
141
145
  "GeneralAgentResponseMessageKwargs": ".types",
142
146
  "GetTableResponse": ".types",
147
+ "GridRange": ".types",
143
148
  "Id": ".types",
144
149
  "ImageUrlContent": ".types",
145
150
  "InputMessage": ".types",
@@ -160,6 +165,7 @@ _dynamic_imports: typing.Dict[str, str] = {
160
165
  "SheetOperationResponse": ".types",
161
166
  "SqlAgentResponse": ".types",
162
167
  "StructuredDataExtractorResponse": ".types",
168
+ "Tabcolor": ".types",
163
169
  "TableRowData": ".types",
164
170
  "TextContent": ".types",
165
171
  "TextFormatModel": ".types",
@@ -240,6 +246,7 @@ __all__ = [
240
246
  "DataFrameRequestOutDataItemItem",
241
247
  "DataFrameRequestOutIndexItem",
242
248
  "DataFrameUnknownFormatError",
249
+ "DimensionProperties",
243
250
  "DocumentChunk",
244
251
  "DriveAgentResponse",
245
252
  "FileChunkRequestOut",
@@ -252,6 +259,7 @@ __all__ = [
252
259
  "GeneralAgentResponseMessage",
253
260
  "GeneralAgentResponseMessageKwargs",
254
261
  "GetTableResponse",
262
+ "GridRange",
255
263
  "Id",
256
264
  "ImageUrlContent",
257
265
  "InputMessage",
@@ -272,6 +280,7 @@ __all__ = [
272
280
  "SheetOperationResponse",
273
281
  "SqlAgentResponse",
274
282
  "StructuredDataExtractorResponse",
283
+ "Tabcolor",
275
284
  "TableRowData",
276
285
  "TextContent",
277
286
  "TextFormatModel",
athena/assets/client.py CHANGED
@@ -5,6 +5,7 @@ import typing
5
5
  from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
6
6
  from ..core.request_options import RequestOptions
7
7
  from ..types.paginated_assets_out import PaginatedAssetsOut
8
+ from ..types.public_asset_out import PublicAssetOut
8
9
  from .raw_client import AsyncRawAssetsClient, RawAssetsClient
9
10
 
10
11
 
@@ -76,6 +77,36 @@ class AssetsClient:
76
77
  )
77
78
  return _response.data
78
79
 
80
+ def get(self, asset_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> PublicAssetOut:
81
+ """
82
+ Retrieve a single asset by its ID. Returns comprehensive metadata including creation info, tags, timestamps, media type, and AI-generated summary.
83
+
84
+ Parameters
85
+ ----------
86
+ asset_id : str
87
+
88
+ request_options : typing.Optional[RequestOptions]
89
+ Request-specific configuration.
90
+
91
+ Returns
92
+ -------
93
+ PublicAssetOut
94
+ Successfully retrieved asset
95
+
96
+ Examples
97
+ --------
98
+ from athena import Athena
99
+
100
+ client = Athena(
101
+ api_key="YOUR_API_KEY",
102
+ )
103
+ client.assets.get(
104
+ asset_id="asset_id",
105
+ )
106
+ """
107
+ _response = self._raw_client.get(asset_id, request_options=request_options)
108
+ return _response.data
109
+
79
110
 
80
111
  class AsyncAssetsClient:
81
112
  def __init__(self, *, client_wrapper: AsyncClientWrapper):
@@ -152,3 +183,41 @@ class AsyncAssetsClient:
152
183
  limit=limit, offset=offset, filters=filters, sort=sort, request_options=request_options
153
184
  )
154
185
  return _response.data
186
+
187
+ async def get(self, asset_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> PublicAssetOut:
188
+ """
189
+ Retrieve a single asset by its ID. Returns comprehensive metadata including creation info, tags, timestamps, media type, and AI-generated summary.
190
+
191
+ Parameters
192
+ ----------
193
+ asset_id : str
194
+
195
+ request_options : typing.Optional[RequestOptions]
196
+ Request-specific configuration.
197
+
198
+ Returns
199
+ -------
200
+ PublicAssetOut
201
+ Successfully retrieved asset
202
+
203
+ Examples
204
+ --------
205
+ import asyncio
206
+
207
+ from athena import AsyncAthena
208
+
209
+ client = AsyncAthena(
210
+ api_key="YOUR_API_KEY",
211
+ )
212
+
213
+
214
+ async def main() -> None:
215
+ await client.assets.get(
216
+ asset_id="asset_id",
217
+ )
218
+
219
+
220
+ asyncio.run(main())
221
+ """
222
+ _response = await self._raw_client.get(asset_id, request_options=request_options)
223
+ return _response.data
@@ -6,10 +6,14 @@ from json.decoder import JSONDecodeError
6
6
  from ..core.api_error import ApiError
7
7
  from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
8
8
  from ..core.http_response import AsyncHttpResponse, HttpResponse
9
+ from ..core.jsonable_encoder import jsonable_encoder
9
10
  from ..core.pydantic_utilities import parse_obj_as
10
11
  from ..core.request_options import RequestOptions
12
+ from ..errors.not_found_error import NotFoundError
13
+ from ..errors.unauthorized_error import UnauthorizedError
11
14
  from ..errors.unprocessable_entity_error import UnprocessableEntityError
12
15
  from ..types.paginated_assets_out import PaginatedAssetsOut
16
+ from ..types.public_asset_out import PublicAssetOut
13
17
 
14
18
 
15
19
  class RawAssetsClient:
@@ -87,6 +91,77 @@ class RawAssetsClient:
87
91
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
88
92
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
89
93
 
94
+ def get(
95
+ self, asset_id: str, *, request_options: typing.Optional[RequestOptions] = None
96
+ ) -> HttpResponse[PublicAssetOut]:
97
+ """
98
+ Retrieve a single asset by its ID. Returns comprehensive metadata including creation info, tags, timestamps, media type, and AI-generated summary.
99
+
100
+ Parameters
101
+ ----------
102
+ asset_id : str
103
+
104
+ request_options : typing.Optional[RequestOptions]
105
+ Request-specific configuration.
106
+
107
+ Returns
108
+ -------
109
+ HttpResponse[PublicAssetOut]
110
+ Successfully retrieved asset
111
+ """
112
+ _response = self._client_wrapper.httpx_client.request(
113
+ f"api/v0/assets/{jsonable_encoder(asset_id)}",
114
+ method="GET",
115
+ request_options=request_options,
116
+ )
117
+ try:
118
+ if 200 <= _response.status_code < 300:
119
+ _data = typing.cast(
120
+ PublicAssetOut,
121
+ parse_obj_as(
122
+ type_=PublicAssetOut, # type: ignore
123
+ object_=_response.json(),
124
+ ),
125
+ )
126
+ return HttpResponse(response=_response, data=_data)
127
+ if _response.status_code == 401:
128
+ raise UnauthorizedError(
129
+ headers=dict(_response.headers),
130
+ body=typing.cast(
131
+ typing.Optional[typing.Any],
132
+ parse_obj_as(
133
+ type_=typing.Optional[typing.Any], # type: ignore
134
+ object_=_response.json(),
135
+ ),
136
+ ),
137
+ )
138
+ if _response.status_code == 404:
139
+ raise NotFoundError(
140
+ headers=dict(_response.headers),
141
+ body=typing.cast(
142
+ typing.Optional[typing.Any],
143
+ parse_obj_as(
144
+ type_=typing.Optional[typing.Any], # type: ignore
145
+ object_=_response.json(),
146
+ ),
147
+ ),
148
+ )
149
+ if _response.status_code == 422:
150
+ raise UnprocessableEntityError(
151
+ headers=dict(_response.headers),
152
+ body=typing.cast(
153
+ typing.Optional[typing.Any],
154
+ parse_obj_as(
155
+ type_=typing.Optional[typing.Any], # type: ignore
156
+ object_=_response.json(),
157
+ ),
158
+ ),
159
+ )
160
+ _response_json = _response.json()
161
+ except JSONDecodeError:
162
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
163
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
164
+
90
165
 
91
166
  class AsyncRawAssetsClient:
92
167
  def __init__(self, *, client_wrapper: AsyncClientWrapper):
@@ -162,3 +237,74 @@ class AsyncRawAssetsClient:
162
237
  except JSONDecodeError:
163
238
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
164
239
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
240
+
241
+ async def get(
242
+ self, asset_id: str, *, request_options: typing.Optional[RequestOptions] = None
243
+ ) -> AsyncHttpResponse[PublicAssetOut]:
244
+ """
245
+ Retrieve a single asset by its ID. Returns comprehensive metadata including creation info, tags, timestamps, media type, and AI-generated summary.
246
+
247
+ Parameters
248
+ ----------
249
+ asset_id : str
250
+
251
+ request_options : typing.Optional[RequestOptions]
252
+ Request-specific configuration.
253
+
254
+ Returns
255
+ -------
256
+ AsyncHttpResponse[PublicAssetOut]
257
+ Successfully retrieved asset
258
+ """
259
+ _response = await self._client_wrapper.httpx_client.request(
260
+ f"api/v0/assets/{jsonable_encoder(asset_id)}",
261
+ method="GET",
262
+ request_options=request_options,
263
+ )
264
+ try:
265
+ if 200 <= _response.status_code < 300:
266
+ _data = typing.cast(
267
+ PublicAssetOut,
268
+ parse_obj_as(
269
+ type_=PublicAssetOut, # type: ignore
270
+ object_=_response.json(),
271
+ ),
272
+ )
273
+ return AsyncHttpResponse(response=_response, data=_data)
274
+ if _response.status_code == 401:
275
+ raise UnauthorizedError(
276
+ headers=dict(_response.headers),
277
+ body=typing.cast(
278
+ typing.Optional[typing.Any],
279
+ parse_obj_as(
280
+ type_=typing.Optional[typing.Any], # type: ignore
281
+ object_=_response.json(),
282
+ ),
283
+ ),
284
+ )
285
+ if _response.status_code == 404:
286
+ raise NotFoundError(
287
+ headers=dict(_response.headers),
288
+ body=typing.cast(
289
+ typing.Optional[typing.Any],
290
+ parse_obj_as(
291
+ type_=typing.Optional[typing.Any], # type: ignore
292
+ object_=_response.json(),
293
+ ),
294
+ ),
295
+ )
296
+ if _response.status_code == 422:
297
+ raise UnprocessableEntityError(
298
+ headers=dict(_response.headers),
299
+ body=typing.cast(
300
+ typing.Optional[typing.Any],
301
+ parse_obj_as(
302
+ type_=typing.Optional[typing.Any], # type: ignore
303
+ object_=_response.json(),
304
+ ),
305
+ ),
306
+ )
307
+ _response_json = _response.json()
308
+ except JSONDecodeError:
309
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
310
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
@@ -22,10 +22,10 @@ class BaseClientWrapper:
22
22
 
23
23
  def get_headers(self) -> typing.Dict[str, str]:
24
24
  headers: typing.Dict[str, str] = {
25
- "User-Agent": "athena-intelligence/0.1.244",
25
+ "User-Agent": "athena-intelligence/0.1.246",
26
26
  "X-Fern-Language": "Python",
27
27
  "X-Fern-SDK-Name": "athena-intelligence",
28
- "X-Fern-SDK-Version": "0.1.244",
28
+ "X-Fern-SDK-Version": "0.1.246",
29
29
  **(self.get_custom_headers() or {}),
30
30
  }
31
31
  headers["X-API-KEY"] = self.api_key
athena/types/__init__.py CHANGED
@@ -35,6 +35,7 @@ if typing.TYPE_CHECKING:
35
35
  from .data_frame_request_out_data_item_item import DataFrameRequestOutDataItemItem
36
36
  from .data_frame_request_out_index_item import DataFrameRequestOutIndexItem
37
37
  from .data_frame_unknown_format_error import DataFrameUnknownFormatError
38
+ from .dimension_properties import DimensionProperties
38
39
  from .document_chunk import DocumentChunk
39
40
  from .drive_agent_response import DriveAgentResponse
40
41
  from .file_chunk_request_out import FileChunkRequestOut
@@ -47,6 +48,7 @@ if typing.TYPE_CHECKING:
47
48
  from .general_agent_response_message import GeneralAgentResponseMessage
48
49
  from .general_agent_response_message_kwargs import GeneralAgentResponseMessageKwargs
49
50
  from .get_table_response import GetTableResponse
51
+ from .grid_range import GridRange
50
52
  from .id import Id
51
53
  from .image_url_content import ImageUrlContent
52
54
  from .input_message import InputMessage
@@ -66,6 +68,7 @@ if typing.TYPE_CHECKING:
66
68
  from .sheet_operation_response import SheetOperationResponse
67
69
  from .sql_agent_response import SqlAgentResponse
68
70
  from .structured_data_extractor_response import StructuredDataExtractorResponse
71
+ from .tabcolor import Tabcolor
69
72
  from .table_row_data import TableRowData
70
73
  from .text_content import TextContent
71
74
  from .text_format_model import TextFormatModel
@@ -106,6 +109,7 @@ _dynamic_imports: typing.Dict[str, str] = {
106
109
  "DataFrameRequestOutDataItemItem": ".data_frame_request_out_data_item_item",
107
110
  "DataFrameRequestOutIndexItem": ".data_frame_request_out_index_item",
108
111
  "DataFrameUnknownFormatError": ".data_frame_unknown_format_error",
112
+ "DimensionProperties": ".dimension_properties",
109
113
  "DocumentChunk": ".document_chunk",
110
114
  "DriveAgentResponse": ".drive_agent_response",
111
115
  "FileChunkRequestOut": ".file_chunk_request_out",
@@ -118,6 +122,7 @@ _dynamic_imports: typing.Dict[str, str] = {
118
122
  "GeneralAgentResponseMessage": ".general_agent_response_message",
119
123
  "GeneralAgentResponseMessageKwargs": ".general_agent_response_message_kwargs",
120
124
  "GetTableResponse": ".get_table_response",
125
+ "GridRange": ".grid_range",
121
126
  "Id": ".id",
122
127
  "ImageUrlContent": ".image_url_content",
123
128
  "InputMessage": ".input_message",
@@ -135,6 +140,7 @@ _dynamic_imports: typing.Dict[str, str] = {
135
140
  "SheetOperationResponse": ".sheet_operation_response",
136
141
  "SqlAgentResponse": ".sql_agent_response",
137
142
  "StructuredDataExtractorResponse": ".structured_data_extractor_response",
143
+ "Tabcolor": ".tabcolor",
138
144
  "TableRowData": ".table_row_data",
139
145
  "TextContent": ".text_content",
140
146
  "TextFormatModel": ".text_format_model",
@@ -199,6 +205,7 @@ __all__ = [
199
205
  "DataFrameRequestOutDataItemItem",
200
206
  "DataFrameRequestOutIndexItem",
201
207
  "DataFrameUnknownFormatError",
208
+ "DimensionProperties",
202
209
  "DocumentChunk",
203
210
  "DriveAgentResponse",
204
211
  "FileChunkRequestOut",
@@ -211,6 +218,7 @@ __all__ = [
211
218
  "GeneralAgentResponseMessage",
212
219
  "GeneralAgentResponseMessageKwargs",
213
220
  "GetTableResponse",
221
+ "GridRange",
214
222
  "Id",
215
223
  "ImageUrlContent",
216
224
  "InputMessage",
@@ -228,6 +236,7 @@ __all__ = [
228
236
  "SheetOperationResponse",
229
237
  "SqlAgentResponse",
230
238
  "StructuredDataExtractorResponse",
239
+ "Tabcolor",
231
240
  "TableRowData",
232
241
  "TextContent",
233
242
  "TextFormatModel",
@@ -9,7 +9,11 @@ from .color import Color
9
9
 
10
10
 
11
11
  class BorderModel(UniversalBaseModel):
12
- color: typing.Optional[Color] = None
12
+ color: typing.Optional[Color] = pydantic.Field(default=None)
13
+ """
14
+ Border color. Defaults to theme color 1 (default black). Always set the color if border width and border style is present
15
+ """
16
+
13
17
  style: BorderStyle
14
18
  width: int
15
19
 
@@ -8,10 +8,45 @@ from .border_model import BorderModel
8
8
 
9
9
 
10
10
  class BordersModel(UniversalBaseModel):
11
- bottom: typing.Optional[BorderModel] = None
12
- left: typing.Optional[BorderModel] = None
13
- right: typing.Optional[BorderModel] = None
14
- top: typing.Optional[BorderModel] = None
11
+ """
12
+ Border configuration for spreadsheet cells. Set individual borders (top, right, bottom, left) to apply borders around cells.
13
+
14
+ Common border patterns:
15
+ - All borders: Set all four sides (top, right, bottom, left) to create borders around every cell
16
+ - Outer border only: For a range A1:C3, only the perimeter cells get borders (first row gets top, last row gets bottom, etc.)
17
+ - Inner borders only: Only borders between cells, not on the outer edges
18
+ - Horizontal lines: Set only top and/or bottom borders
19
+ - Vertical lines: Set only left and/or right borders
20
+ - Single side: Set only one border (e.g., just bottom for underline effect)
21
+
22
+ Note: Borders are applied per-cell. Each cell's border properties control which edges of that specific cell have borders. Overlapping borders between adjacent cells will appear as a single line.
23
+
24
+ Examples:
25
+ - Box around range: Set all four borders on all cells in the range
26
+ - Table with grid: Set all four borders to create a complete grid
27
+ - Underline header: Set only bottom border on header row
28
+ - Separate sections: Set bottom border to divide content
29
+ """
30
+
31
+ bottom: typing.Optional[BorderModel] = pydantic.Field(default=None)
32
+ """
33
+ Bottom border of the cell
34
+ """
35
+
36
+ left: typing.Optional[BorderModel] = pydantic.Field(default=None)
37
+ """
38
+ Left border of the cell
39
+ """
40
+
41
+ right: typing.Optional[BorderModel] = pydantic.Field(default=None)
42
+ """
43
+ Right border of the cell
44
+ """
45
+
46
+ top: typing.Optional[BorderModel] = pydantic.Field(default=None)
47
+ """
48
+ Top border of the cell
49
+ """
15
50
 
16
51
  if IS_PYDANTIC_V2:
17
52
  model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
@@ -0,0 +1,49 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ import typing_extensions
7
+ from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
8
+ from ..core.serialization import FieldMetadata
9
+
10
+
11
+ class DimensionProperties(UniversalBaseModel):
12
+ """
13
+ Properties for a row or column dimension in the spreadsheet.
14
+ """
15
+
16
+ hidden_by_filter: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="hiddenByFilter")] = (
17
+ pydantic.Field(default=None)
18
+ )
19
+ """
20
+ True if this row/column is hidden due to a filter being applied. Do not modify directly - managed by filter operations
21
+ """
22
+
23
+ hidden_by_user: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="hiddenByUser")] = (
24
+ pydantic.Field(default=None)
25
+ )
26
+ """
27
+ True if the user explicitly hid this row/column (e.g., right-click > Hide). Set to False to unhide
28
+ """
29
+
30
+ resized_by_user: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="resizedByUser")] = (
31
+ pydantic.Field(default=None)
32
+ )
33
+ """
34
+ True if the user manually resized this dimension (e.g., dragged column border to resize)
35
+ """
36
+
37
+ size: typing.Optional[int] = pydantic.Field(default=None)
38
+ """
39
+ Size in pixels. For columns, this is the width. For rows, this is the height. Default: 100px for columns, 21px for rows
40
+ """
41
+
42
+ if IS_PYDANTIC_V2:
43
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
44
+ else:
45
+
46
+ class Config:
47
+ frozen = True
48
+ smart_union = True
49
+ extra = pydantic.Extra.allow
@@ -0,0 +1,39 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ import typing_extensions
7
+ from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
8
+ from ..core.serialization import FieldMetadata
9
+
10
+
11
+ class GridRange(UniversalBaseModel):
12
+ end_column_index: typing_extensions.Annotated[int, FieldMetadata(alias="endColumnIndex")] = pydantic.Field()
13
+ """
14
+ End column index (1-based, INCLUSIVE). Last column of the range. For range A1:C5, this would be 3. For single columns, equals startColumnIndex.
15
+ """
16
+
17
+ end_row_index: typing_extensions.Annotated[int, FieldMetadata(alias="endRowIndex")] = pydantic.Field()
18
+ """
19
+ End row index (1-based, INCLUSIVE). Last row of the range. For a range A1:A5, this would be 5. For single cells, equals startRowIndex.
20
+ """
21
+
22
+ start_column_index: typing_extensions.Annotated[int, FieldMetadata(alias="startColumnIndex")] = pydantic.Field()
23
+ """
24
+ Start column index (1-based, INCLUSIVE). First column of the range. A=1, B=2, C=3, etc. For range A1:C5, this would be 1.
25
+ """
26
+
27
+ start_row_index: typing_extensions.Annotated[int, FieldMetadata(alias="startRowIndex")] = pydantic.Field()
28
+ """
29
+ Start row index (1-based, INCLUSIVE). First row of the range. For A1 this would be 1, for A5 this would be 5.
30
+ """
31
+
32
+ if IS_PYDANTIC_V2:
33
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
34
+ else:
35
+
36
+ class Config:
37
+ frozen = True
38
+ smart_union = True
39
+ extra = pydantic.Extra.allow
athena/types/sheet.py CHANGED
@@ -6,12 +6,22 @@ import pydantic
6
6
  import typing_extensions
7
7
  from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
8
8
  from ..core.serialization import FieldMetadata
9
+ from .dimension_properties import DimensionProperties
10
+ from .grid_range import GridRange
11
+ from .tabcolor import Tabcolor
9
12
 
10
13
 
11
14
  class Sheet(UniversalBaseModel):
12
15
  column_count: typing_extensions.Annotated[int, FieldMetadata(alias="columnCount")] = pydantic.Field()
13
16
  """
14
- Column count (Default to 100)
17
+ Column count (Defaults to 100)
18
+ """
19
+
20
+ column_metadata: typing_extensions.Annotated[
21
+ typing.Optional[typing.List[typing.Optional[DimensionProperties]]], FieldMetadata(alias="columnMetadata")
22
+ ] = pydantic.Field(default=None)
23
+ """
24
+ Array of column properties, one per column (1-indexed). Each entry defines width, visibility for that column. Use to set custom column widths or hide/show specific columns. Example: columnMetadata[1] controls column A, columnMetadata[2] controls column B, etc. To set column C width to 150px: columnMetadata[3] = DimensionProperties(size=150). To hide column B: columnMetadata[2] = DimensionProperties(hiddenByUser=True). Common use case: Auto-size columns with wide content by setting larger size values
15
25
  """
16
26
 
17
27
  frozen_column_count: typing_extensions.Annotated[typing.Optional[int], FieldMetadata(alias="frozenColumnCount")] = (
@@ -24,9 +34,21 @@ class Sheet(UniversalBaseModel):
24
34
  The order of the new sheet
25
35
  """
26
36
 
37
+ merges: typing.Optional[typing.List[GridRange]] = pydantic.Field(default=None)
38
+ """
39
+ List of merged cell ranges in the sheet. Each merge combines multiple cells into a single cell. The top-left cell (startRowIndex, startColumnIndex) becomes the anchor cell that displays the content. Example: To merge cells A1:C3, use GridRange(startRowIndex=1, endRowIndex=3, startColumnIndex=1, endColumnIndex=3). Defaults to empty list (no merged cells).
40
+ """
41
+
27
42
  row_count: typing_extensions.Annotated[int, FieldMetadata(alias="rowCount")] = pydantic.Field()
28
43
  """
29
- Row count (Defauls to 1000)
44
+ Row count (Defaults to 1000)
45
+ """
46
+
47
+ row_metadata: typing_extensions.Annotated[
48
+ typing.Optional[typing.List[typing.Optional[DimensionProperties]]], FieldMetadata(alias="rowMetadata")
49
+ ] = pydantic.Field(default=None)
50
+ """
51
+ Array of row properties, one per row (1-indexed). Each entry defines height, visibility for that row. Use to set custom row heights or hide/show specific rows. Example: rowMetadata[1] controls row 1, rowMetadata[2] controls row 2, etc. To set row 5 height to 50px: rowMetadata[5] = DimensionProperties(size=50). To hide row 3: rowMetadata[3] = DimensionProperties(hiddenByUser=True)
30
52
  """
31
53
 
32
54
  sheet_id: typing_extensions.Annotated[int, FieldMetadata(alias="sheetId")] = pydantic.Field()
@@ -34,11 +56,12 @@ class Sheet(UniversalBaseModel):
34
56
  Sheet ID (required)
35
57
  """
36
58
 
37
- tab_color: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="tabColor")] = pydantic.Field(
59
+ show_grid_lines: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="showGridLines")] = None
60
+ tab_color: typing_extensions.Annotated[typing.Optional[Tabcolor], FieldMetadata(alias="tabColor")] = pydantic.Field(
38
61
  default=None
39
62
  )
40
63
  """
41
- Tab color in hex format (e.g., '#FF0000' for red)
64
+ Tab color in hex format (e.g., '#FF0000' for red) or as a theme
42
65
  """
43
66
 
44
67
  title: str
@@ -0,0 +1,7 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ from .theme_color import ThemeColor
6
+
7
+ Tabcolor = typing.Union[str, ThemeColor]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: athena-intelligence
3
- Version: 0.1.244
3
+ Version: 0.1.246
4
4
  Summary: Athena Intelligence Python Library
5
5
  Requires-Python: >=3.9,<4.0
6
6
  Classifier: Intended Audience :: Developers
@@ -1,4 +1,4 @@
1
- athena/__init__.py,sha256=athVDySl90A2iyr6U_CSoKen4D5u3ZHZLtjc7d_2pOg,8771
1
+ athena/__init__.py,sha256=STNRCCbbckdPq_mE-66Rdr4r24pajTxp5adeICpoQUU,8987
2
2
  athena/agents/__init__.py,sha256=LqM1Kj7aFzYoFsB7xrYKPDJAnOWmcig1LNE4jAiWpJQ,1166
3
3
  athena/agents/client.py,sha256=b3QvSCRsiHD6UREN7llGY946V-oZdKkhouQ6p_nH1j8,8044
4
4
  athena/agents/drive/__init__.py,sha256=_VhToAyIt_5axN6CLJwtxg3-CO7THa_23pbUzqhXJa4,85
@@ -18,13 +18,13 @@ athena/aop/__init__.py,sha256=_VhToAyIt_5axN6CLJwtxg3-CO7THa_23pbUzqhXJa4,85
18
18
  athena/aop/client.py,sha256=Fg7rNF1k78MIKDELy8GE-DfAaJvHFUUBG5haMR_Vefo,6758
19
19
  athena/aop/raw_client.py,sha256=ZQRtNNirk1xfbkKHADxSCPB0UQjf4HO5l-6z7W936X8,18509
20
20
  athena/assets/__init__.py,sha256=_VhToAyIt_5axN6CLJwtxg3-CO7THa_23pbUzqhXJa4,85
21
- athena/assets/client.py,sha256=d7PrFlPORWRE6M8g7paJ7O45hf7wGUex093FhW1lESE,5395
22
- athena/assets/raw_client.py,sha256=TW6dCb1i68p-0sf4_B2F0H8SK-kk9sIHFAuwfTEg5GQ,7077
21
+ athena/assets/client.py,sha256=yRU6wHLqQpqppqhOKIC-drEp0WJyUjewvqIG3g6qQkU,7335
22
+ athena/assets/raw_client.py,sha256=lXFjKzqHvge7_DBIjoPLYT5URYcBxOZcpD3i3O_ePOE,13132
23
23
  athena/base_client.py,sha256=IlYf1TLV3w-JZPATzyT-b5wSrjKm-fsT_3bC172GpVI,9576
24
24
  athena/client.py,sha256=I-aFsGhcViOdOeaWayhMkaMkV5545Yz2Gb-BoVQvhE4,22317
25
25
  athena/core/__init__.py,sha256=GkNNgA0CeqvpCzo2vVtAafE8YcnGV-VGtbU5op93lbc,3624
26
26
  athena/core/api_error.py,sha256=44vPoTyWN59gonCIZMdzw7M1uspygiLnr3GNFOoVL2Q,614
27
- athena/core/client_wrapper.py,sha256=p_iJjlx0QcnrJj4nHkbFZZqkEUMDf5uPtIjXVk2UXMo,2392
27
+ athena/core/client_wrapper.py,sha256=cBvnQuxCDDwP2ZqXj-K-3_olQGQP6taEUIauitenXpM,2392
28
28
  athena/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
29
29
  athena/core/file.py,sha256=d4NNbX8XvXP32z8KpK2Xovv33nFfruIrpz0QWxlgpZk,2663
30
30
  athena/core/force_multipart.py,sha256=cH981xLy0kZVKiZZkFoeUjgJ2Zuq7KXB2aRAnmHzRDc,477
@@ -76,7 +76,7 @@ athena/tools/tasks/client.py,sha256=c_YZ7OjQNJmPKbeeXJznXj3zo5CRFSv02dLupAdHAyo,
76
76
  athena/tools/tasks/raw_client.py,sha256=Mexzuf_HcRXWNlESDGQkHHv5tC2tAo-AX3PBSuSRO3U,3812
77
77
  athena/tools/types/__init__.py,sha256=EBAoLXAl5YZCDYkI-YPJA0035ZRyGktyW4tspFXOQso,1180
78
78
  athena/tools/types/tools_data_frame_request_columns_item.py,sha256=GA1FUlTV_CfSc-KToTAwFf4Exl0rr4fsweVZupztjw0,138
79
- athena/types/__init__.py,sha256=NznHgVaeeJxftVSPXiz-yKKFLypcENs1i7fi5C8OkP0,9981
79
+ athena/types/__init__.py,sha256=j3rz_viMKkWBpTqWzHo-rMWDBO0V2aqdZfqa0ApcDcs,10285
80
80
  athena/types/aop_async_execute_response_out.py,sha256=Ggs9j5JvLCMaVwaHNyY3whA5gcUffLqc4PwuxYWI-38,1642
81
81
  athena/types/aop_execute_request_in.py,sha256=mEsMKyNN6e90gZra733lJDC6z0bZWdc72af3B-Z5aqE,889
82
82
  athena/types/aop_execute_response_out.py,sha256=_w6_WERRgGEVI0O_4qRfVZPLpcaa8yihWgwB4ZV0Zs8,1847
@@ -84,9 +84,9 @@ athena/types/asset_content_request_out.py,sha256=RYlcY6j6Ju5EQL7UquDwyTe7uqxyuO8
84
84
  athena/types/asset_node.py,sha256=3l7CUK2c_h4QT8ktSq0rFP9veF9G_V9mNe3NZlGl-xQ,804
85
85
  athena/types/asset_screenshot_response_out.py,sha256=tiAt9xnpXWMRUnblWzUEJbXYzB412kdqKkb_02OFFGE,1069
86
86
  athena/types/backgroundcolor.py,sha256=hdedWFf1lzaXAeX2HYxocQGIqeHP-TBQmRFxrU2UyFQ,165
87
- athena/types/border_model.py,sha256=pTHlEw1kZoA7_vOVHyXO0WJmPKuwczr43uylcB8ZMTQ,646
87
+ athena/types/border_model.py,sha256=fwddWJwNQxxgrjItRFLK5tm7wCNSQUe7l3cKhAvHv1U,813
88
88
  athena/types/border_style.py,sha256=-3j_VzGM4SHzljbSyWZc8InthLG9GVqMyVK7uYopLEw,211
89
- athena/types/borders_model.py,sha256=TvQDY5Oa2wz3QGhwuaKhb4vwtA_b0JptiNhZPCY1q5I,729
89
+ athena/types/borders_model.py,sha256=YqVsHbJ8irgO3flFwZyGXTWLpdCRy_sQ_XVksGjM9fs,2163
90
90
  athena/types/cell_format.py,sha256=h4HEh4lsZ2J_yIADVxqDLnfrmP1RtyAmmQI0jglbJK0,2086
91
91
  athena/types/cell_format_horizontal_alignment.py,sha256=UnSTOLSLVUK0zHfcOLGnZb8grjnzbnIhkh7-ikz9rLc,180
92
92
  athena/types/cell_format_vertical_alignment.py,sha256=lvp9Em3mgHmECuUS_iH9tHrP4GcnoB_DTVKJC74tfGs,178
@@ -106,6 +106,7 @@ athena/types/data_frame_request_out_columns_item.py,sha256=9cjzciFv6C8n8Griytt_q
106
106
  athena/types/data_frame_request_out_data_item_item.py,sha256=KMTJRr-1bdKDNMbUericCliwRoPHLGRV-n2bJtxdRW0,144
107
107
  athena/types/data_frame_request_out_index_item.py,sha256=bW7oe912trpkYKodj-I_AiTXXy61yWzliekcsUZkZE0,141
108
108
  athena/types/data_frame_unknown_format_error.py,sha256=yEykbkXCfsxDKYHXps8jOtv6RENOn5vLNKpoKwBVJ5Q,575
109
+ athena/types/dimension_properties.py,sha256=y221yMcIHjx9XMorHHaQyd9-h2h_qmCuRHyAqmYmn24,1709
109
110
  athena/types/document_chunk.py,sha256=Ma7nl0SnTZsshYtpjh37OJhwrNPmSkzw_QUaFChPCD0,651
110
111
  athena/types/drive_agent_response.py,sha256=sxxt3DVibsYrF8bnil9ZKD3GFkD0m2hp9qDfQSaNqcs,639
111
112
  athena/types/file_chunk_request_out.py,sha256=5utKRptaqyizg0D9ogPEM1IPJIUW2NMHNLewYZLNe8Q,665
@@ -118,6 +119,7 @@ athena/types/general_agent_response.py,sha256=G5LYQnZJeFdU3COK9Syyuk8rGvRYd1F_Ne
118
119
  athena/types/general_agent_response_message.py,sha256=P9JpetwgY2z_iSjFbiLZwuSv2Ez7g_hDvRkQo-31Gok,3071
119
120
  athena/types/general_agent_response_message_kwargs.py,sha256=XWMwp6WLAPiArBKU7NuuebTkq0jM8QVlTVfEfoldJOk,2170
120
121
  athena/types/get_table_response.py,sha256=KztIDpd3J4jiUUOz0DAH_SLMA-2uLGWL_lZ345jYdbw,1084
122
+ athena/types/grid_range.py,sha256=nlik_nHiQ3O0AfqdABCx-ACmin4ogcOybzdd-YTMev0,1616
121
123
  athena/types/id.py,sha256=6fnF__LI2KYyDjZwbs8y5sik8HoYPMRF7Ljihn1MBYY,121
122
124
  athena/types/image_url_content.py,sha256=SIlScFxuyfXpSU-xMLypitQK5gu_6ITjZYt64Dq9RYQ,589
123
125
  athena/types/input_message.py,sha256=MwgLCWH9mfUM5NFEV_AVjhS12ruNOxZxSXLcYKQ0rww,854
@@ -129,10 +131,11 @@ athena/types/prompt_message.py,sha256=5WrlKURJuD0DPhMmP3gpBNuRgGfbE9ArY0BW_OSq0P
129
131
  athena/types/public_asset_out.py,sha256=rBPFX3PKM0zxK3Qh8uICE14idg-UkDDob_xFRprO4bo,2775
130
132
  athena/types/research_agent_response.py,sha256=BnBRbDcQEh-qNjLfvjoigTVHtkYZjwdjYU5ONjr-OWQ,656
131
133
  athena/types/save_asset_request_out.py,sha256=_jM8B291p-dilNcrGSt3s26tjrj77c6kLpbxPymjJhA,600
132
- athena/types/sheet.py,sha256=_mR3pXHXSqkYuMGch4CPayrNI5gxivMo9fu2OUQDsOI,1625
134
+ athena/types/sheet.py,sha256=phigygu5RMWbnXCAX420BRqdNNw_H11OYM63o37Z6ow,3669
133
135
  athena/types/sheet_operation_response.py,sha256=w-Nl11a1kii-RHTzgrt9QjpN1nuWfbF4nO4zAO2cCpw,793
134
136
  athena/types/sql_agent_response.py,sha256=qp-VIpsZziEkx8EIF4bdhmlPqqH8a8GaCWLANJxE5kU,765
135
137
  athena/types/structured_data_extractor_response.py,sha256=yFQ0CiFDdlZIq2X8UprEAwOPhNBqG8lzVu9_aDySW2M,1067
138
+ athena/types/tabcolor.py,sha256=_PSGZSD-aFI1GrTz4lKXKg6gsYgONO1Ed96QGw0JLWE,158
136
139
  athena/types/table_row_data.py,sha256=leurR2kOfMxRhv9qVKfpU-iv1iW3400zEahAH9hwMT0,141
137
140
  athena/types/text_content.py,sha256=tcVCPj3tHh5zQcTElr2tdCIjjfx3ZI63rKIlaG8vo64,592
138
141
  athena/types/text_format_model.py,sha256=hV9lpxsS8d206g5SGVbqcFkWz9ILdPBb2jBPNMuwo-s,1032
@@ -142,6 +145,6 @@ athena/types/thread_status_response_out.py,sha256=UuSAvs9woL1i8RwvVRKsFUufN4A9jO
142
145
  athena/types/type.py,sha256=Gvs56nvBMPcQpOZkfPocGNNb7S05PuINianbT309QAQ,146
143
146
  athena/types/wrap_strategy.py,sha256=ykPFCr91HGvzIk9BRppW_UBWoUamFxDhLO_ETzQgVKI,164
144
147
  athena/version.py,sha256=tnXYUugs9zF_pkVdem-QBorKSuhEOOuetkR57dADDxE,86
145
- athena_intelligence-0.1.244.dist-info/METADATA,sha256=fkp8quae-a2Nc7a23o9tO-0qUoW83HKTF-3KdKn1Gc8,5440
146
- athena_intelligence-0.1.244.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
147
- athena_intelligence-0.1.244.dist-info/RECORD,,
148
+ athena_intelligence-0.1.246.dist-info/METADATA,sha256=yizIysunee-ppgqGyaMwOJFUrfQVbAFDqMyb86Hrdzk,5440
149
+ athena_intelligence-0.1.246.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
150
+ athena_intelligence-0.1.246.dist-info/RECORD,,