Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions .openapi-generator/FILES
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ docs/ApiErrorDetail.md
docs/ApiErrorResponse.md
docs/AsyncQueryResponse.md
docs/AttachDatabaseCatalogRequest.md
docs/BatchCreateUploadRequest.md
docs/BatchCreateUploadResponse.md
docs/BooleanProfileDetail.md
docs/CategoricalProfileDetail.md
docs/CategoryValueInfo.md
Expand Down Expand Up @@ -37,6 +39,7 @@ docs/CreateIndexRequest.md
docs/CreateSavedQueryRequest.md
docs/CreateSecretRequest.md
docs/CreateSecretResponse.md
docs/CreateUploadRequest.md
docs/CreateWorkspaceRequest.md
docs/CreateWorkspaceResponse.md
docs/DatabaseAttachmentInfo.md
Expand All @@ -52,6 +55,9 @@ docs/EmbeddingProviderResponse.md
docs/EmbeddingProvidersApi.md
docs/Error.md
docs/ExecuteSavedQueryRequest.md
docs/FinalizeUploadPart.md
docs/FinalizeUploadRequest.md
docs/FinalizeUploadResponse.md
docs/GetConnectionResponse.md
docs/GetDatabaseContextResponse.md
docs/GetResultResponse.md
Expand Down Expand Up @@ -120,6 +126,7 @@ docs/UpdateSecretRequest.md
docs/UpdateSecretResponse.md
docs/UploadInfo.md
docs/UploadResponse.md
docs/UploadSessionResponse.md
docs/UploadsApi.md
docs/UpsertDatabaseContextRequest.md
docs/UpsertDatabaseContextResponse.md
Expand Down Expand Up @@ -159,6 +166,8 @@ hotdata/models/api_error_detail.py
hotdata/models/api_error_response.py
hotdata/models/async_query_response.py
hotdata/models/attach_database_catalog_request.py
hotdata/models/batch_create_upload_request.py
hotdata/models/batch_create_upload_response.py
hotdata/models/boolean_profile_detail.py
hotdata/models/categorical_profile_detail.py
hotdata/models/category_value_info.py
Expand Down Expand Up @@ -186,6 +195,7 @@ hotdata/models/create_index_request.py
hotdata/models/create_saved_query_request.py
hotdata/models/create_secret_request.py
hotdata/models/create_secret_response.py
hotdata/models/create_upload_request.py
hotdata/models/create_workspace_request.py
hotdata/models/create_workspace_response.py
hotdata/models/database_attachment_info.py
Expand All @@ -198,6 +208,9 @@ hotdata/models/discovery_status.py
hotdata/models/embedding_provider_response.py
hotdata/models/error.py
hotdata/models/execute_saved_query_request.py
hotdata/models/finalize_upload_part.py
hotdata/models/finalize_upload_request.py
hotdata/models/finalize_upload_response.py
hotdata/models/get_connection_response.py
hotdata/models/get_database_context_response.py
hotdata/models/get_result_response.py
Expand Down Expand Up @@ -257,6 +270,7 @@ hotdata/models/update_secret_request.py
hotdata/models/update_secret_response.py
hotdata/models/upload_info.py
hotdata/models/upload_response.py
hotdata/models/upload_session_response.py
hotdata/models/upsert_database_context_request.py
hotdata/models/upsert_database_context_response.py
hotdata/models/workspace_detail.py
Expand All @@ -273,6 +287,8 @@ test/test_api_error_detail.py
test/test_api_error_response.py
test/test_async_query_response.py
test/test_attach_database_catalog_request.py
test/test_batch_create_upload_request.py
test/test_batch_create_upload_response.py
test/test_boolean_profile_detail.py
test/test_categorical_profile_detail.py
test/test_category_value_info.py
Expand Down Expand Up @@ -302,6 +318,7 @@ test/test_create_index_request.py
test/test_create_saved_query_request.py
test/test_create_secret_request.py
test/test_create_secret_response.py
test/test_create_upload_request.py
test/test_create_workspace_request.py
test/test_create_workspace_response.py
test/test_database_attachment_info.py
Expand All @@ -317,6 +334,9 @@ test/test_embedding_provider_response.py
test/test_embedding_providers_api.py
test/test_error.py
test/test_execute_saved_query_request.py
test/test_finalize_upload_part.py
test/test_finalize_upload_request.py
test/test_finalize_upload_response.py
test/test_get_connection_response.py
test/test_get_database_context_response.py
test/test_get_result_response.py
Expand Down Expand Up @@ -385,6 +405,7 @@ test/test_update_secret_request.py
test/test_update_secret_response.py
test/test_upload_info.py
test/test_upload_response.py
test/test_upload_session_response.py
test/test_uploads_api.py
test/test_upsert_database_context_request.py
test/test_upsert_database_context_response.py
Expand Down
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Changed

- feat(uploads): add file upload endpoints
- docs: remove stale datasets references, refresh MCP + CLI reference
- feat(tables): add csv and json file format support for table loads
- Regenerate the client from the updated Hotdata OpenAPI spec
Expand Down
30 changes: 30 additions & 0 deletions docs/BatchCreateUploadRequest.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# BatchCreateUploadRequest

Request body for `POST /v1/uploads/batch`: create several upload sessions in one call. Each entry is planned independently; the response returns one session per request, in the same order.

## Properties

Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**uploads** | [**List[CreateUploadRequest]**](CreateUploadRequest.md) | |

## Example

```python
from hotdata.models.batch_create_upload_request import BatchCreateUploadRequest

# TODO update the JSON string below
json = "{}"
# create an instance of BatchCreateUploadRequest from a JSON string
batch_create_upload_request_instance = BatchCreateUploadRequest.from_json(json)
# print the JSON string representation of the object
print(BatchCreateUploadRequest.to_json())

# convert the object into a dict
batch_create_upload_request_dict = batch_create_upload_request_instance.to_dict()
# create an instance of BatchCreateUploadRequest from a dict
batch_create_upload_request_from_dict = BatchCreateUploadRequest.from_dict(batch_create_upload_request_dict)
```
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)


30 changes: 30 additions & 0 deletions docs/BatchCreateUploadResponse.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# BatchCreateUploadResponse

Response body for `POST /v1/uploads/batch`: one created session per requested file, in request order.

## Properties

Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**uploads** | [**List[UploadSessionResponse]**](UploadSessionResponse.md) | |

## Example

```python
from hotdata.models.batch_create_upload_response import BatchCreateUploadResponse

# TODO update the JSON string below
json = "{}"
# create an instance of BatchCreateUploadResponse from a JSON string
batch_create_upload_response_instance = BatchCreateUploadResponse.from_json(json)
# print the JSON string representation of the object
print(BatchCreateUploadResponse.to_json())

# convert the object into a dict
batch_create_upload_response_dict = batch_create_upload_response_instance.to_dict()
# create an instance of BatchCreateUploadResponse from a dict
batch_create_upload_response_from_dict = BatchCreateUploadResponse.from_dict(batch_create_upload_response_dict)
```
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)


36 changes: 36 additions & 0 deletions docs/CreateUploadRequest.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# CreateUploadRequest

Request body for `POST /v1/uploads` and for each entry of `POST /v1/uploads/batch`. Describes a single file you intend to upload directly to storage. The service chooses where the bytes are stored and returns a short-lived URL to `PUT` them to; you do not pick the storage location. The declared size is validated against the bytes you actually upload when you finalize.

## Properties

Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**checksum_algo** | **str** | Integrity checksum algorithm you are volunteering for this file. Currently only `sha256` is accepted. Optional; pair with `checksum_value`. | [optional]
**checksum_value** | **str** | Integrity checksum value, paired with `checksum_algo`. Optional. | [optional]
**content_encoding** | **str** | Content encoding to record for the uploaded file (for example `gzip`). Optional. | [optional]
**content_type** | **str** | Content type to record for the uploaded file (for example the Parquet, CSV, or JSON MIME type). Optional. | [optional]
**declared_size_bytes** | **int** | The exact size, in bytes, of the file you will upload. Validated at create time against the maximum allowed size, and again at finalize against the bytes actually stored — a mismatch fails the finalize. |
**filename** | **str** | Original file name, recorded with the upload for your own bookkeeping. Optional and advisory — it does not affect where the bytes are stored or how they are loaded. | [optional]
**part_size** | **int** | Preferred size, in bytes, of each part for a large (multi-part) upload. Optional hint — the service clamps it to the allowed part-size range and to the maximum number of parts, and ignores it for small files uploaded with a single `PUT`. Omit to let the service choose. | [optional]

## Example

```python
from hotdata.models.create_upload_request import CreateUploadRequest

# TODO update the JSON string below
json = "{}"
# create an instance of CreateUploadRequest from a JSON string
create_upload_request_instance = CreateUploadRequest.from_json(json)
# print the JSON string representation of the object
print(CreateUploadRequest.to_json())

# convert the object into a dict
create_upload_request_dict = create_upload_request_instance.to_dict()
# create an instance of CreateUploadRequest from a dict
create_upload_request_from_dict = CreateUploadRequest.from_dict(create_upload_request_dict)
```
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)


31 changes: 31 additions & 0 deletions docs/FinalizeUploadPart.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# FinalizeUploadPart

One part of a multi-part upload, supplied at finalize. Reserved for a future multi-part mode; single-`PUT` uploads have no parts.

## Properties

Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**e_tag** | **str** | The entity tag (ETag) storage returned for the uploaded part. |
**part_number** | **int** | 1-based part number, as reported by storage for the part. |

## Example

```python
from hotdata.models.finalize_upload_part import FinalizeUploadPart

# TODO update the JSON string below
json = "{}"
# create an instance of FinalizeUploadPart from a JSON string
finalize_upload_part_instance = FinalizeUploadPart.from_json(json)
# print the JSON string representation of the object
print(FinalizeUploadPart.to_json())

# convert the object into a dict
finalize_upload_part_dict = finalize_upload_part_instance.to_dict()
# create an instance of FinalizeUploadPart from a dict
finalize_upload_part_from_dict = FinalizeUploadPart.from_dict(finalize_upload_part_dict)
```
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)


30 changes: 30 additions & 0 deletions docs/FinalizeUploadRequest.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# FinalizeUploadRequest

Request body for `POST /v1/uploads/{upload_id}/finalize`. Finalizing confirms the bytes were uploaded and makes the upload usable as managed-table contents. The request body is optional for single-`PUT` uploads; send `parts` only for a future multi-part upload.

## Properties

Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**parts** | [**List[FinalizeUploadPart]**](FinalizeUploadPart.md) | Parts to assemble, for a multi-part upload. Omit for single-`PUT` uploads (the common case). | [optional]

## Example

```python
from hotdata.models.finalize_upload_request import FinalizeUploadRequest

# TODO update the JSON string below
json = "{}"
# create an instance of FinalizeUploadRequest from a JSON string
finalize_upload_request_instance = FinalizeUploadRequest.from_json(json)
# print the JSON string representation of the object
print(FinalizeUploadRequest.to_json())

# convert the object into a dict
finalize_upload_request_dict = finalize_upload_request_instance.to_dict()
# create an instance of FinalizeUploadRequest from a dict
finalize_upload_request_from_dict = FinalizeUploadRequest.from_dict(finalize_upload_request_dict)
```
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)


34 changes: 34 additions & 0 deletions docs/FinalizeUploadResponse.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# FinalizeUploadResponse

Response body for `POST /v1/uploads/{upload_id}/finalize`: the finalized upload, ready to be loaded into a managed table.

## Properties

Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**content_type** | **str** | | [optional]
**created_at** | **datetime** | |
**size_bytes** | **int** | The validated size of the uploaded file in bytes. |
**status** | **str** | |
**upload_id** | **str** | |

## Example

```python
from hotdata.models.finalize_upload_response import FinalizeUploadResponse

# TODO update the JSON string below
json = "{}"
# create an instance of FinalizeUploadResponse from a JSON string
finalize_upload_response_instance = FinalizeUploadResponse.from_json(json)
# print the JSON string representation of the object
print(FinalizeUploadResponse.to_json())

# convert the object into a dict
finalize_upload_response_dict = finalize_upload_response_instance.to_dict()
# create an instance of FinalizeUploadResponse from a dict
finalize_upload_response_from_dict = FinalizeUploadResponse.from_dict(finalize_upload_response_dict)
```
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)


36 changes: 36 additions & 0 deletions docs/UploadSessionResponse.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# UploadSessionResponse

A created upload session: everything needed to upload the bytes directly to storage and later finalize the upload.

## Properties

Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**finalize_token** | **str** | One-time token that authorizes finalizing this upload. Returned exactly once at create time — store it; it cannot be retrieved again. |
**headers** | **Dict[str, str]** | Headers you must send verbatim with each `PUT`. Currently always empty; present so a future mode can require signed headers without changing the response shape. |
**mode** | **str** | Upload mode: `single` (upload the whole file with one `PUT` to `url`) or `multipart` (upload each part with one `PUT` to the matching entry in `part_urls`). Modeled as a string so additional modes can be added later without breaking clients. |
**part_size** | **int** | For a `multipart` upload, the size in bytes to split the file into: send bytes `[(i-1) * part_size, i * part_size)` to `part_urls[i - 1]`, with the last part carrying the remainder. Slice by this value — do **not** divide the file evenly by `part_urls.len()`, which can make a non-final part smaller than the 5 MiB minimum that storage requires (the upload then fails at finalize). Absent for `single` uploads. | [optional]
**part_urls** | **List[str]** | For a `multipart` upload, the per-part URLs in ascending part order: `PUT` your file's part *i* (1-based) to `part_urls[i - 1]` and keep each response's `ETag`, then pass the `{part_number, e_tag}` list to finalize. Absent for `single` uploads. | [optional]
**upload_id** | **str** | Identifier for this upload. Pass it to the finalize endpoint and to the managed-table load endpoint once finalized. |
**url** | **str** | The URL to `PUT` the raw file bytes to, for a `single` upload. Short-lived — upload promptly and finalize. Absent for `multipart` uploads (use `part_urls`). | [optional]

## Example

```python
from hotdata.models.upload_session_response import UploadSessionResponse

# TODO update the JSON string below
json = "{}"
# create an instance of UploadSessionResponse from a JSON string
upload_session_response_instance = UploadSessionResponse.from_json(json)
# print the JSON string representation of the object
print(UploadSessionResponse.to_json())

# convert the object into a dict
upload_session_response_dict = upload_session_response_instance.to_dict()
# create an instance of UploadSessionResponse from a dict
upload_session_response_from_dict = UploadSessionResponse.from_dict(upload_session_response_dict)
```
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)


Loading