unstructured-ingest 0.3.2__py3-none-any.whl → 0.3.3__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 unstructured-ingest might be problematic. Click here for more details.
- test/integration/connectors/test_lancedb.py +7 -7
- test/integration/connectors/test_milvus.py +34 -6
- test/integration/connectors/weaviate/test_cloud.py +34 -0
- test/unit/test_utils.py +21 -1
- unstructured_ingest/__version__.py +1 -1
- unstructured_ingest/utils/string_and_date_utils.py +10 -0
- unstructured_ingest/v2/processes/connectors/astradb.py +16 -0
- unstructured_ingest/v2/processes/connectors/lancedb/__init__.py +17 -4
- unstructured_ingest/v2/processes/connectors/lancedb/aws.py +7 -7
- unstructured_ingest/v2/processes/connectors/lancedb/cloud.py +42 -0
- unstructured_ingest/v2/processes/connectors/milvus.py +9 -3
- unstructured_ingest/v2/processes/connectors/weaviate/cloud.py +4 -3
- {unstructured_ingest-0.3.2.dist-info → unstructured_ingest-0.3.3.dist-info}/METADATA +14 -12
- {unstructured_ingest-0.3.2.dist-info → unstructured_ingest-0.3.3.dist-info}/RECORD +18 -16
- {unstructured_ingest-0.3.2.dist-info → unstructured_ingest-0.3.3.dist-info}/LICENSE.md +0 -0
- {unstructured_ingest-0.3.2.dist-info → unstructured_ingest-0.3.3.dist-info}/WHEEL +0 -0
- {unstructured_ingest-0.3.2.dist-info → unstructured_ingest-0.3.3.dist-info}/entry_points.txt +0 -0
- {unstructured_ingest-0.3.2.dist-info → unstructured_ingest-0.3.3.dist-info}/top_level.txt +0 -0
|
@@ -14,9 +14,9 @@ from upath import UPath
|
|
|
14
14
|
from test.integration.connectors.utils.constants import DESTINATION_TAG
|
|
15
15
|
from unstructured_ingest.v2.interfaces.file_data import FileData, SourceIdentifiers
|
|
16
16
|
from unstructured_ingest.v2.processes.connectors.lancedb.aws import (
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
LanceDBAwsAccessConfig,
|
|
18
|
+
LanceDBAwsConnectionConfig,
|
|
19
|
+
LanceDBAwsUploader,
|
|
20
20
|
)
|
|
21
21
|
from unstructured_ingest.v2.processes.connectors.lancedb.azure import (
|
|
22
22
|
LanceDBAzureAccessConfig,
|
|
@@ -156,7 +156,7 @@ def _get_uri(target: Literal["local", "s3", "gcs", "az"], local_base_path: Path)
|
|
|
156
156
|
|
|
157
157
|
def _get_uploader(
|
|
158
158
|
uri: str,
|
|
159
|
-
) -> Union[LanceDBAzureUploader, LanceDBAzureUploader,
|
|
159
|
+
) -> Union[LanceDBAzureUploader, LanceDBAzureUploader, LanceDBAwsUploader, LanceDBGSPUploader]:
|
|
160
160
|
target = uri.split("://", maxsplit=1)[0] if uri.startswith(("s3", "az", "gs")) else "local"
|
|
161
161
|
if target == "az":
|
|
162
162
|
azure_connection_string = os.getenv("AZURE_DEST_CONNECTION_STR")
|
|
@@ -170,10 +170,10 @@ def _get_uploader(
|
|
|
170
170
|
)
|
|
171
171
|
|
|
172
172
|
elif target == "s3":
|
|
173
|
-
return
|
|
173
|
+
return LanceDBAwsUploader(
|
|
174
174
|
upload_config=LanceDBUploaderConfig(table_name=TABLE_NAME),
|
|
175
|
-
connection_config=
|
|
176
|
-
access_config=
|
|
175
|
+
connection_config=LanceDBAwsConnectionConfig(
|
|
176
|
+
access_config=LanceDBAwsAccessConfig(
|
|
177
177
|
aws_access_key_id=os.getenv("S3_INGEST_TEST_ACCESS_KEY"),
|
|
178
178
|
aws_secret_access_key=os.getenv("S3_INGEST_TEST_SECRET_KEY"),
|
|
179
179
|
),
|
|
@@ -15,6 +15,7 @@ from pymilvus.milvus_client import IndexParams
|
|
|
15
15
|
from test.integration.connectors.utils.constants import DESTINATION_TAG, env_setup_path
|
|
16
16
|
from test.integration.connectors.utils.docker import healthcheck_wait
|
|
17
17
|
from test.integration.connectors.utils.docker_compose import docker_compose_context
|
|
18
|
+
from unstructured_ingest.error import DestinationConnectionError
|
|
18
19
|
from unstructured_ingest.v2.interfaces import FileData, SourceIdentifiers
|
|
19
20
|
from unstructured_ingest.v2.processes.connectors.milvus import (
|
|
20
21
|
CONNECTOR_TYPE,
|
|
@@ -24,9 +25,10 @@ from unstructured_ingest.v2.processes.connectors.milvus import (
|
|
|
24
25
|
MilvusUploadStager,
|
|
25
26
|
)
|
|
26
27
|
|
|
27
|
-
DB_URI = "http://localhost:19530"
|
|
28
28
|
DB_NAME = "test_database"
|
|
29
|
-
|
|
29
|
+
EXISTENT_COLLECTION_NAME = "test_collection"
|
|
30
|
+
NONEXISTENT_COLLECTION_NAME = "nonexistent_collection"
|
|
31
|
+
DB_URI = "http://localhost:19530"
|
|
30
32
|
|
|
31
33
|
|
|
32
34
|
def get_schema() -> CollectionSchema:
|
|
@@ -55,7 +57,9 @@ def get_index_params() -> IndexParams:
|
|
|
55
57
|
return index_params
|
|
56
58
|
|
|
57
59
|
|
|
58
|
-
|
|
60
|
+
# NOTE: Precheck tests are read-only so they don't interfere with destination test,
|
|
61
|
+
# using scope="module" we can limit number of times the docker-compose has to be run
|
|
62
|
+
@pytest.fixture(scope="module")
|
|
59
63
|
def collection():
|
|
60
64
|
docker_client = docker.from_env()
|
|
61
65
|
with docker_compose_context(docker_compose_path=env_setup_path / "milvus"):
|
|
@@ -73,10 +77,10 @@ def collection():
|
|
|
73
77
|
schema = get_schema()
|
|
74
78
|
index_params = get_index_params()
|
|
75
79
|
collection_resp = milvus_client.create_collection(
|
|
76
|
-
collection_name=
|
|
80
|
+
collection_name=EXISTENT_COLLECTION_NAME, schema=schema, index_params=index_params
|
|
77
81
|
)
|
|
78
|
-
print(f"Created collection {
|
|
79
|
-
yield
|
|
82
|
+
print(f"Created collection {EXISTENT_COLLECTION_NAME}: {collection_resp}")
|
|
83
|
+
yield EXISTENT_COLLECTION_NAME
|
|
80
84
|
finally:
|
|
81
85
|
milvus_client.close()
|
|
82
86
|
|
|
@@ -139,3 +143,27 @@ async def test_milvus_destination(
|
|
|
139
143
|
uploader.run(path=staged_filepath, file_data=file_data)
|
|
140
144
|
with uploader.get_client() as client:
|
|
141
145
|
validate_count(client=client, expected_count=expected_count)
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
@pytest.mark.tags(CONNECTOR_TYPE, DESTINATION_TAG)
|
|
149
|
+
def test_precheck_succeeds(collection: str):
|
|
150
|
+
uploader = MilvusUploader(
|
|
151
|
+
connection_config=MilvusConnectionConfig(uri=DB_URI),
|
|
152
|
+
upload_config=MilvusUploaderConfig(db_name=DB_NAME, collection_name=collection),
|
|
153
|
+
)
|
|
154
|
+
uploader.precheck()
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
@pytest.mark.tags(CONNECTOR_TYPE, DESTINATION_TAG)
|
|
158
|
+
def test_precheck_fails_on_nonexistent_collection(collection: str):
|
|
159
|
+
uploader = MilvusUploader(
|
|
160
|
+
connection_config=MilvusConnectionConfig(uri=DB_URI),
|
|
161
|
+
upload_config=MilvusUploaderConfig(
|
|
162
|
+
db_name=DB_NAME, collection_name=NONEXISTENT_COLLECTION_NAME
|
|
163
|
+
),
|
|
164
|
+
)
|
|
165
|
+
with pytest.raises(
|
|
166
|
+
DestinationConnectionError,
|
|
167
|
+
match=f"Collection '{NONEXISTENT_COLLECTION_NAME}' does not exist",
|
|
168
|
+
):
|
|
169
|
+
uploader.precheck()
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import pytest
|
|
2
|
+
from pydantic import ValidationError
|
|
3
|
+
|
|
4
|
+
from unstructured_ingest.v2.processes.connectors.weaviate.cloud import (
|
|
5
|
+
CloudWeaviateAccessConfig,
|
|
6
|
+
CloudWeaviateConnectionConfig,
|
|
7
|
+
)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def test_weaviate_failing_connection_config():
|
|
11
|
+
with pytest.raises(ValidationError):
|
|
12
|
+
CloudWeaviateConnectionConfig(
|
|
13
|
+
access_config=CloudWeaviateAccessConfig(api_key="my key", password="password"),
|
|
14
|
+
username="username",
|
|
15
|
+
cluster_url="clusterurl",
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def test_weaviate_connection_config_happy_path():
|
|
20
|
+
CloudWeaviateConnectionConfig(
|
|
21
|
+
access_config=CloudWeaviateAccessConfig(
|
|
22
|
+
api_key="my key",
|
|
23
|
+
),
|
|
24
|
+
cluster_url="clusterurl",
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def test_weaviate_connection_config_anonymous():
|
|
29
|
+
CloudWeaviateConnectionConfig(
|
|
30
|
+
access_config=CloudWeaviateAccessConfig(api_key="my key", password="password"),
|
|
31
|
+
username="username",
|
|
32
|
+
anonymous=True,
|
|
33
|
+
cluster_url="clusterurl",
|
|
34
|
+
)
|
test/unit/test_utils.py
CHANGED
|
@@ -8,7 +8,11 @@ import pytz
|
|
|
8
8
|
|
|
9
9
|
from unstructured_ingest.cli.utils import extract_config
|
|
10
10
|
from unstructured_ingest.interfaces import BaseConfig
|
|
11
|
-
from unstructured_ingest.utils.string_and_date_utils import
|
|
11
|
+
from unstructured_ingest.utils.string_and_date_utils import (
|
|
12
|
+
ensure_isoformat_datetime,
|
|
13
|
+
json_to_dict,
|
|
14
|
+
truncate_string_bytes,
|
|
15
|
+
)
|
|
12
16
|
|
|
13
17
|
|
|
14
18
|
@dataclass
|
|
@@ -162,3 +166,19 @@ def test_ensure_isoformat_datetime_fails_on_string():
|
|
|
162
166
|
def test_ensure_isoformat_datetime_fails_on_int():
|
|
163
167
|
with pytest.raises(TypeError):
|
|
164
168
|
ensure_isoformat_datetime(1111)
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
def test_truncate_string_bytes_return_truncated_string():
|
|
172
|
+
test_string = "abcdef안녕하세요ghijklmn방갑습니opqrstu 더 길어지면 안되는 문자열vwxyz"
|
|
173
|
+
max_bytes = 11
|
|
174
|
+
result = truncate_string_bytes(test_string, max_bytes)
|
|
175
|
+
assert result == "abcdef안"
|
|
176
|
+
assert len(result.encode("utf-8")) <= max_bytes
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
def test_truncate_string_bytes_return_untouched_string():
|
|
180
|
+
test_string = "abcdef"
|
|
181
|
+
max_bytes = 11
|
|
182
|
+
result = truncate_string_bytes(test_string, max_bytes)
|
|
183
|
+
assert result == "abcdef"
|
|
184
|
+
assert len(result.encode("utf-8")) <= max_bytes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "0.3.
|
|
1
|
+
__version__ = "0.3.3" # pragma: no cover
|
|
@@ -37,3 +37,13 @@ def ensure_isoformat_datetime(timestamp: t.Union[datetime, str]) -> str:
|
|
|
37
37
|
raise ValueError(f"String '{timestamp}' could not be parsed as a datetime.") from e
|
|
38
38
|
else:
|
|
39
39
|
raise TypeError(f"Expected input type datetime or str, but got {type(timestamp)}.")
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def truncate_string_bytes(string: str, max_bytes: int, encoding: str = "utf-8") -> str:
|
|
43
|
+
"""
|
|
44
|
+
Truncates a string to a specified maximum number of bytes.
|
|
45
|
+
"""
|
|
46
|
+
encoded_string = str(string).encode(encoding)
|
|
47
|
+
if len(encoded_string) <= max_bytes:
|
|
48
|
+
return string
|
|
49
|
+
return encoded_string[:max_bytes].decode(encoding, errors="ignore")
|
|
@@ -19,6 +19,7 @@ from unstructured_ingest.error import (
|
|
|
19
19
|
)
|
|
20
20
|
from unstructured_ingest.utils.data_prep import batch_generator
|
|
21
21
|
from unstructured_ingest.utils.dep_check import requires_dependencies
|
|
22
|
+
from unstructured_ingest.utils.string_and_date_utils import truncate_string_bytes
|
|
22
23
|
from unstructured_ingest.v2.constants import RECORD_ID_LABEL
|
|
23
24
|
from unstructured_ingest.v2.interfaces import (
|
|
24
25
|
AccessConfig,
|
|
@@ -50,6 +51,8 @@ if TYPE_CHECKING:
|
|
|
50
51
|
|
|
51
52
|
CONNECTOR_TYPE = "astradb"
|
|
52
53
|
|
|
54
|
+
MAX_CONTENT_PARAM_BYTE_SIZE = 8000
|
|
55
|
+
|
|
53
56
|
|
|
54
57
|
class AstraDBAccessConfig(AccessConfig):
|
|
55
58
|
token: str = Field(description="Astra DB Token with access to the database.")
|
|
@@ -301,7 +304,20 @@ class AstraDBUploadStager(UploadStager):
|
|
|
301
304
|
default_factory=lambda: AstraDBUploadStagerConfig()
|
|
302
305
|
)
|
|
303
306
|
|
|
307
|
+
def truncate_dict_elements(self, element_dict: dict) -> None:
|
|
308
|
+
text = element_dict.pop("text", None)
|
|
309
|
+
if text is not None:
|
|
310
|
+
element_dict["text"] = truncate_string_bytes(text, MAX_CONTENT_PARAM_BYTE_SIZE)
|
|
311
|
+
metadata = element_dict.get("metadata")
|
|
312
|
+
if metadata is not None and isinstance(metadata, dict):
|
|
313
|
+
text_as_html = element_dict["metadata"].pop("text_as_html", None)
|
|
314
|
+
if text_as_html is not None:
|
|
315
|
+
element_dict["metadata"]["text_as_html"] = truncate_string_bytes(
|
|
316
|
+
text_as_html, MAX_CONTENT_PARAM_BYTE_SIZE
|
|
317
|
+
)
|
|
318
|
+
|
|
304
319
|
def conform_dict(self, element_dict: dict, file_data: FileData) -> dict:
|
|
320
|
+
self.truncate_dict_elements(element_dict)
|
|
305
321
|
return {
|
|
306
322
|
"$vector": element_dict.pop("embeddings", None),
|
|
307
323
|
"content": element_dict.pop("text", None),
|
|
@@ -6,12 +6,25 @@ from .aws import CONNECTOR_TYPE as LANCEDB_S3_CONNECTOR_TYPE
|
|
|
6
6
|
from .aws import lancedb_aws_destination_entry
|
|
7
7
|
from .azure import CONNECTOR_TYPE as LANCEDB_AZURE_CONNECTOR_TYPE
|
|
8
8
|
from .azure import lancedb_azure_destination_entry
|
|
9
|
+
from .cloud import CONNECTOR_TYPE as LANCEDB_CLOUD_CONNECTOR_TYPE
|
|
10
|
+
from .cloud import lancedb_cloud_destination_entry
|
|
9
11
|
from .gcp import CONNECTOR_TYPE as LANCEDB_GCS_CONNECTOR_TYPE
|
|
10
12
|
from .gcp import lancedb_gcp_destination_entry
|
|
11
13
|
from .local import CONNECTOR_TYPE as LANCEDB_LOCAL_CONNECTOR_TYPE
|
|
12
14
|
from .local import lancedb_local_destination_entry
|
|
13
15
|
|
|
14
|
-
add_destination_entry(
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
add_destination_entry(
|
|
16
|
+
add_destination_entry(
|
|
17
|
+
destination_type=LANCEDB_S3_CONNECTOR_TYPE, entry=lancedb_aws_destination_entry
|
|
18
|
+
)
|
|
19
|
+
add_destination_entry(
|
|
20
|
+
destination_type=LANCEDB_AZURE_CONNECTOR_TYPE, entry=lancedb_azure_destination_entry
|
|
21
|
+
)
|
|
22
|
+
add_destination_entry(
|
|
23
|
+
destination_type=LANCEDB_GCS_CONNECTOR_TYPE, entry=lancedb_gcp_destination_entry
|
|
24
|
+
)
|
|
25
|
+
add_destination_entry(
|
|
26
|
+
destination_type=LANCEDB_LOCAL_CONNECTOR_TYPE, entry=lancedb_local_destination_entry
|
|
27
|
+
)
|
|
28
|
+
add_destination_entry(
|
|
29
|
+
destination_type=LANCEDB_CLOUD_CONNECTOR_TYPE, entry=lancedb_cloud_destination_entry
|
|
30
|
+
)
|
|
@@ -15,28 +15,28 @@ from unstructured_ingest.v2.processes.connectors.lancedb.lancedb import (
|
|
|
15
15
|
CONNECTOR_TYPE = "lancedb_aws"
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
class
|
|
18
|
+
class LanceDBAwsAccessConfig(AccessConfig):
|
|
19
19
|
aws_access_key_id: str = Field(description="The AWS access key ID to use.")
|
|
20
20
|
aws_secret_access_key: str = Field(description="The AWS secret access key to use.")
|
|
21
21
|
|
|
22
22
|
|
|
23
|
-
class
|
|
24
|
-
access_config: Secret[
|
|
23
|
+
class LanceDBAwsConnectionConfig(LanceDBRemoteConnectionConfig):
|
|
24
|
+
access_config: Secret[LanceDBAwsAccessConfig]
|
|
25
25
|
|
|
26
26
|
def get_storage_options(self) -> dict:
|
|
27
27
|
return {**self.access_config.get_secret_value().model_dump(), "timeout": self.timeout}
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
@dataclass
|
|
31
|
-
class
|
|
31
|
+
class LanceDBAwsUploader(LanceDBUploader):
|
|
32
32
|
upload_config: LanceDBUploaderConfig
|
|
33
|
-
connection_config:
|
|
33
|
+
connection_config: LanceDBAwsConnectionConfig
|
|
34
34
|
connector_type: str = CONNECTOR_TYPE
|
|
35
35
|
|
|
36
36
|
|
|
37
37
|
lancedb_aws_destination_entry = DestinationRegistryEntry(
|
|
38
|
-
connection_config=
|
|
39
|
-
uploader=
|
|
38
|
+
connection_config=LanceDBAwsConnectionConfig,
|
|
39
|
+
uploader=LanceDBAwsUploader,
|
|
40
40
|
uploader_config=LanceDBUploaderConfig,
|
|
41
41
|
upload_stager_config=LanceDBUploadStagerConfig,
|
|
42
42
|
upload_stager=LanceDBUploadStager,
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
|
|
3
|
+
from pydantic import Field, Secret
|
|
4
|
+
|
|
5
|
+
from unstructured_ingest.v2.interfaces.connector import AccessConfig
|
|
6
|
+
from unstructured_ingest.v2.processes.connector_registry import DestinationRegistryEntry
|
|
7
|
+
from unstructured_ingest.v2.processes.connectors.lancedb.lancedb import (
|
|
8
|
+
LanceDBRemoteConnectionConfig,
|
|
9
|
+
LanceDBUploader,
|
|
10
|
+
LanceDBUploaderConfig,
|
|
11
|
+
LanceDBUploadStager,
|
|
12
|
+
LanceDBUploadStagerConfig,
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
CONNECTOR_TYPE = "lancedb_cloud"
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class LanceDBCloudAccessConfig(AccessConfig):
|
|
19
|
+
api_key: str = Field(description="Api key associated with LanceDb cloud")
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class LanceDBCloudConnectionConfig(LanceDBRemoteConnectionConfig):
|
|
23
|
+
access_config: Secret[LanceDBCloudAccessConfig]
|
|
24
|
+
|
|
25
|
+
def get_storage_options(self) -> dict:
|
|
26
|
+
return {**self.access_config.get_secret_value().model_dump(), "timeout": self.timeout}
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
@dataclass
|
|
30
|
+
class LanceDBCloudUploader(LanceDBUploader):
|
|
31
|
+
upload_config: LanceDBUploaderConfig
|
|
32
|
+
connection_config: LanceDBCloudConnectionConfig
|
|
33
|
+
connector_type: str = CONNECTOR_TYPE
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
lancedb_cloud_destination_entry = DestinationRegistryEntry(
|
|
37
|
+
connection_config=LanceDBCloudConnectionConfig,
|
|
38
|
+
uploader=LanceDBCloudUploader,
|
|
39
|
+
uploader_config=LanceDBUploaderConfig,
|
|
40
|
+
upload_stager_config=LanceDBUploadStagerConfig,
|
|
41
|
+
upload_stager=LanceDBUploadStager,
|
|
42
|
+
)
|
|
@@ -8,7 +8,7 @@ import pandas as pd
|
|
|
8
8
|
from dateutil import parser
|
|
9
9
|
from pydantic import Field, Secret
|
|
10
10
|
|
|
11
|
-
from unstructured_ingest.error import WriteError
|
|
11
|
+
from unstructured_ingest.error import DestinationConnectionError, WriteError
|
|
12
12
|
from unstructured_ingest.utils.data_prep import flatten_dict
|
|
13
13
|
from unstructured_ingest.utils.dep_check import requires_dependencies
|
|
14
14
|
from unstructured_ingest.v2.constants import RECORD_ID_LABEL
|
|
@@ -66,7 +66,6 @@ class MilvusConnectionConfig(ConnectionConfig):
|
|
|
66
66
|
|
|
67
67
|
|
|
68
68
|
class MilvusUploadStagerConfig(UploadStagerConfig):
|
|
69
|
-
|
|
70
69
|
fields_to_include: Optional[list[str]] = None
|
|
71
70
|
"""If set - list of fields to include in the output.
|
|
72
71
|
Unspecified fields are removed from the elements.
|
|
@@ -174,6 +173,14 @@ class MilvusUploader(Uploader):
|
|
|
174
173
|
upload_config: MilvusUploaderConfig
|
|
175
174
|
connector_type: str = CONNECTOR_TYPE
|
|
176
175
|
|
|
176
|
+
@DestinationConnectionError.wrap
|
|
177
|
+
def precheck(self):
|
|
178
|
+
with self.get_client() as client:
|
|
179
|
+
if not client.has_collection(self.upload_config.collection_name):
|
|
180
|
+
raise DestinationConnectionError(
|
|
181
|
+
f"Collection '{self.upload_config.collection_name}' does not exist"
|
|
182
|
+
)
|
|
183
|
+
|
|
177
184
|
@contextmanager
|
|
178
185
|
def get_client(self) -> Generator["MilvusClient", None, None]:
|
|
179
186
|
client = self.connection_config.get_client()
|
|
@@ -218,7 +225,6 @@ class MilvusUploader(Uploader):
|
|
|
218
225
|
f"db in collection {self.upload_config.collection_name}"
|
|
219
226
|
)
|
|
220
227
|
with self.get_client() as client:
|
|
221
|
-
|
|
222
228
|
try:
|
|
223
229
|
res = client.insert(collection_name=self.upload_config.collection_name, data=data)
|
|
224
230
|
except MilvusException as milvus_exception:
|
|
@@ -55,10 +55,11 @@ class CloudWeaviateConnectionConfig(WeaviateConnectionConfig):
|
|
|
55
55
|
"client_secret": access_config.client_secret is not None,
|
|
56
56
|
"client_password": access_config.password is not None and self.username is not None,
|
|
57
57
|
}
|
|
58
|
-
|
|
58
|
+
existing_auths = [auth_method for auth_method, flag in auths.items() if flag]
|
|
59
|
+
|
|
60
|
+
if len(existing_auths) == 0:
|
|
59
61
|
raise ValueError("No auth values provided and anonymous is False")
|
|
60
|
-
if len(
|
|
61
|
-
existing_auths = [auth_method for auth_method, flag in auths.items() if flag]
|
|
62
|
+
if len(existing_auths) > 1:
|
|
62
63
|
raise ValueError(
|
|
63
64
|
"Multiple auth values provided, only one approach can be used: {}".format(
|
|
64
65
|
", ".join(existing_auths)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: unstructured-ingest
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.3
|
|
4
4
|
Summary: A library that prepares raw documents for downstream ML tasks.
|
|
5
5
|
Home-page: https://github.com/Unstructured-IO/unstructured-ingest
|
|
6
6
|
Author: Unstructured Technologies
|
|
@@ -22,20 +22,20 @@ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
|
22
22
|
Requires-Python: >=3.9.0,<3.13
|
|
23
23
|
Description-Content-Type: text/markdown
|
|
24
24
|
License-File: LICENSE.md
|
|
25
|
-
Requires-Dist:
|
|
25
|
+
Requires-Dist: dataclasses-json
|
|
26
26
|
Requires-Dist: pydantic>=2.7
|
|
27
|
-
Requires-Dist: opentelemetry-sdk
|
|
28
|
-
Requires-Dist: click
|
|
29
|
-
Requires-Dist: tqdm
|
|
30
27
|
Requires-Dist: pandas
|
|
31
|
-
Requires-Dist:
|
|
28
|
+
Requires-Dist: tqdm
|
|
29
|
+
Requires-Dist: python-dateutil
|
|
30
|
+
Requires-Dist: click
|
|
31
|
+
Requires-Dist: opentelemetry-sdk
|
|
32
32
|
Provides-Extra: airtable
|
|
33
33
|
Requires-Dist: pyairtable; extra == "airtable"
|
|
34
34
|
Provides-Extra: astradb
|
|
35
35
|
Requires-Dist: astrapy; extra == "astradb"
|
|
36
36
|
Provides-Extra: azure
|
|
37
|
-
Requires-Dist: fsspec; extra == "azure"
|
|
38
37
|
Requires-Dist: adlfs; extra == "azure"
|
|
38
|
+
Requires-Dist: fsspec; extra == "azure"
|
|
39
39
|
Provides-Extra: azure-ai-search
|
|
40
40
|
Requires-Dist: azure-search-documents; extra == "azure-ai-search"
|
|
41
41
|
Provides-Extra: bedrock
|
|
@@ -78,8 +78,8 @@ Requires-Dist: sentence-transformers; extra == "embed-huggingface"
|
|
|
78
78
|
Provides-Extra: embed-mixedbreadai
|
|
79
79
|
Requires-Dist: mixedbread-ai; extra == "embed-mixedbreadai"
|
|
80
80
|
Provides-Extra: embed-octoai
|
|
81
|
-
Requires-Dist: tiktoken; extra == "embed-octoai"
|
|
82
81
|
Requires-Dist: openai; extra == "embed-octoai"
|
|
82
|
+
Requires-Dist: tiktoken; extra == "embed-octoai"
|
|
83
83
|
Provides-Extra: embed-vertexai
|
|
84
84
|
Requires-Dist: vertexai; extra == "embed-vertexai"
|
|
85
85
|
Provides-Extra: embed-voyageai
|
|
@@ -91,8 +91,8 @@ Requires-Dist: bs4; extra == "gcs"
|
|
|
91
91
|
Requires-Dist: gcsfs; extra == "gcs"
|
|
92
92
|
Requires-Dist: fsspec; extra == "gcs"
|
|
93
93
|
Provides-Extra: github
|
|
94
|
-
Requires-Dist: requests; extra == "github"
|
|
95
94
|
Requires-Dist: pygithub>1.58.0; extra == "github"
|
|
95
|
+
Requires-Dist: requests; extra == "github"
|
|
96
96
|
Provides-Extra: gitlab
|
|
97
97
|
Requires-Dist: python-gitlab; extra == "gitlab"
|
|
98
98
|
Provides-Extra: google-drive
|
|
@@ -106,6 +106,8 @@ Provides-Extra: kafka
|
|
|
106
106
|
Requires-Dist: confluent-kafka; extra == "kafka"
|
|
107
107
|
Provides-Extra: kdbai
|
|
108
108
|
Requires-Dist: kdbai-client>=1.4.0; extra == "kdbai"
|
|
109
|
+
Provides-Extra: lancedb
|
|
110
|
+
Requires-Dist: lancedb; extra == "lancedb"
|
|
109
111
|
Provides-Extra: md
|
|
110
112
|
Requires-Dist: unstructured[md]; extra == "md"
|
|
111
113
|
Provides-Extra: milvus
|
|
@@ -122,12 +124,12 @@ Requires-Dist: httpx; extra == "notion"
|
|
|
122
124
|
Provides-Extra: odt
|
|
123
125
|
Requires-Dist: unstructured[odt]; extra == "odt"
|
|
124
126
|
Provides-Extra: onedrive
|
|
125
|
-
Requires-Dist: bs4; extra == "onedrive"
|
|
126
127
|
Requires-Dist: msal; extra == "onedrive"
|
|
127
128
|
Requires-Dist: Office365-REST-Python-Client; extra == "onedrive"
|
|
129
|
+
Requires-Dist: bs4; extra == "onedrive"
|
|
128
130
|
Provides-Extra: openai
|
|
129
|
-
Requires-Dist: tiktoken; extra == "openai"
|
|
130
131
|
Requires-Dist: openai; extra == "openai"
|
|
132
|
+
Requires-Dist: tiktoken; extra == "openai"
|
|
131
133
|
Provides-Extra: opensearch
|
|
132
134
|
Requires-Dist: opensearch-py; extra == "opensearch"
|
|
133
135
|
Provides-Extra: org
|
|
@@ -171,8 +173,8 @@ Requires-Dist: singlestoredb; extra == "singlestore"
|
|
|
171
173
|
Provides-Extra: slack
|
|
172
174
|
Requires-Dist: slack-sdk[optional]; extra == "slack"
|
|
173
175
|
Provides-Extra: snowflake
|
|
174
|
-
Requires-Dist: psycopg2-binary; extra == "snowflake"
|
|
175
176
|
Requires-Dist: snowflake-connector-python; extra == "snowflake"
|
|
177
|
+
Requires-Dist: psycopg2-binary; extra == "snowflake"
|
|
176
178
|
Provides-Extra: togetherai
|
|
177
179
|
Requires-Dist: together; extra == "togetherai"
|
|
178
180
|
Provides-Extra: tsv
|
|
@@ -10,8 +10,8 @@ test/integration/connectors/test_azure_ai_search.py,sha256=dae4GifRiKue5YpsxworD
|
|
|
10
10
|
test/integration/connectors/test_confluence.py,sha256=xcPmZ_vi_pkCt-tUPn10P49FH9i_9YUbrAPO6fYk5rU,3521
|
|
11
11
|
test/integration/connectors/test_delta_table.py,sha256=GSzWIkbEUzOrRPt2F1uO0dabcp7kTFDj75BhhI2y-WU,6856
|
|
12
12
|
test/integration/connectors/test_kafka.py,sha256=j7jsNWZumNBv9v-5Bpx8geUUXpxxad5EuA4CMRsl4R8,7104
|
|
13
|
-
test/integration/connectors/test_lancedb.py,sha256=
|
|
14
|
-
test/integration/connectors/test_milvus.py,sha256=
|
|
13
|
+
test/integration/connectors/test_lancedb.py,sha256=8hRlqw3zYOcFCu6PPlejquSvvEM_3OEBzKTQbNm_Zmg,7635
|
|
14
|
+
test/integration/connectors/test_milvus.py,sha256=p4UujDr_tsRaQDmhDmDZp38t8oSFm7hrTqiq6NNuhGo,5933
|
|
15
15
|
test/integration/connectors/test_mongodb.py,sha256=YeS_DUnVYN02F76j87W8RhXGHnJMzQYb3n-L1-oWGXI,12254
|
|
16
16
|
test/integration/connectors/test_onedrive.py,sha256=KIkBwKh1hnv203VCL2UABnDkS_bP4NxOFm1AL8EPGLA,3554
|
|
17
17
|
test/integration/connectors/test_pinecone.py,sha256=X10OWZ6IrO6YyhuR3ydMAZOQq3u2f5u_lCjKNYUUcnI,7558
|
|
@@ -35,6 +35,7 @@ test/integration/connectors/utils/docker_compose.py,sha256=GVTB6Cel05c0VQ2n4AwkQ
|
|
|
35
35
|
test/integration/connectors/utils/validation.py,sha256=SwvPVuHjJxTo8xEUwnuL9FZNpu3sZZ8iouOz5xh_kB8,14272
|
|
36
36
|
test/integration/connectors/weaviate/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
37
37
|
test/integration/connectors/weaviate/conftest.py,sha256=6Q6QdrLJmGHowRFSmoVSzup2EX6qASfS2Z5tqlpTm9M,387
|
|
38
|
+
test/integration/connectors/weaviate/test_cloud.py,sha256=07VxNRxWWcgTstFfpoZ1FlVnEhcBnQlo5nosWKjKz_4,979
|
|
38
39
|
test/integration/connectors/weaviate/test_local.py,sha256=SK6iEwQUKiCd0X99BEk8GlQoLaCcJcFPt09NN526Ct0,4508
|
|
39
40
|
test/integration/embedders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
40
41
|
test/integration/embedders/conftest.py,sha256=B2W771RbijR7G_GybsCzRyIvOzXqzbKZdRIlNDd5AGY,334
|
|
@@ -54,7 +55,7 @@ test/unit/test_chunking_utils.py,sha256=0iPwfnMPpyTm-yOE0BXMnEQQP4iguS6NhOqgMQU5
|
|
|
54
55
|
test/unit/test_error.py,sha256=RflmngCdFNKOLXVfLnUdNfY3Mfg3k7DTEzfIl0B-syU,840
|
|
55
56
|
test/unit/test_interfaces.py,sha256=XNj8qasc1ltaeUv-2y31rv7R9xquo0rgRrMvBZoNZLw,9623
|
|
56
57
|
test/unit/test_logger.py,sha256=0SKndXE_VRd8XmUHkrj7zuBQHZscXx3ZQllMEOvtF9Y,2380
|
|
57
|
-
test/unit/test_utils.py,sha256=
|
|
58
|
+
test/unit/test_utils.py,sha256=Q6mp9YZPah8z3-2lreyRbmAc7m2Y_w26_N9vocSInoA,5421
|
|
58
59
|
test/unit/embed/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
59
60
|
test/unit/embed/test_mixedbreadai.py,sha256=XFNJDP5pIgF3eQYwBiuEWmH3zZWx72Wpwyv-Q4m0DJg,1332
|
|
60
61
|
test/unit/embed/test_octoai.py,sha256=Ha9EgAW64Q45hFj51tToe8RyKXWXwqAkdDqSFDMu37Q,831
|
|
@@ -81,7 +82,7 @@ test/unit/v2/partitioners/test_partitioner.py,sha256=iIYg7IpftV3LusoO4H8tr1IHY1U
|
|
|
81
82
|
test/unit/v2/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
82
83
|
test/unit/v2/utils/data_generator.py,sha256=UoYVNjG4S4wlaA9gceQ82HIpF9_6I1UTHD1_GrQBHp0,973
|
|
83
84
|
unstructured_ingest/__init__.py,sha256=U4S_2y3zgLZVfMenHRaJFBW8yqh2mUBuI291LGQVOJ8,35
|
|
84
|
-
unstructured_ingest/__version__.py,sha256=
|
|
85
|
+
unstructured_ingest/__version__.py,sha256=p5uBTX3-kWJF_Qc2XUwgA0BcGSwYkkJo-kqLi89Vqo4,42
|
|
85
86
|
unstructured_ingest/error.py,sha256=qDncnJgbf5ils956RcO2CGlAKYDT5OaEM9Clv1JVTNc,1448
|
|
86
87
|
unstructured_ingest/interfaces.py,sha256=OYVUP0bzBJpT-Lz92BDyz_hLBvyfxkuSwWHhUdnUayA,31493
|
|
87
88
|
unstructured_ingest/logger.py,sha256=S5nSqGcABoQyeicgRnBQFjDScCaTvFVivOCvbo-laL0,4479
|
|
@@ -342,7 +343,7 @@ unstructured_ingest/utils/compression.py,sha256=NNiY-2S2Gf3at7zC1PYxMijaEza9vVSz
|
|
|
342
343
|
unstructured_ingest/utils/data_prep.py,sha256=IDAedOSBdgZpD9IY4tLJT-rmKGV7GHtU6KRj6VM-_tE,4666
|
|
343
344
|
unstructured_ingest/utils/dep_check.py,sha256=SXXcUna2H0RtxA6j1S2NGkvQa9JP2DujWhmyBa7776Y,2400
|
|
344
345
|
unstructured_ingest/utils/google_filetype.py,sha256=YVspEkiiBrRUSGVeVbsavvLvTmizdy2e6TsjigXTSRU,468
|
|
345
|
-
unstructured_ingest/utils/string_and_date_utils.py,sha256=
|
|
346
|
+
unstructured_ingest/utils/string_and_date_utils.py,sha256=kijtPlGAbH376vVjFSo5H_ZhW-FEcMC2sCNsSNwDOjo,1729
|
|
346
347
|
unstructured_ingest/utils/table.py,sha256=aWjcowDVSClNpEAdR6PY3H7khKu4T6T3QqQE6GjmQ_M,3469
|
|
347
348
|
unstructured_ingest/v2/__init__.py,sha256=U4S_2y3zgLZVfMenHRaJFBW8yqh2mUBuI291LGQVOJ8,35
|
|
348
349
|
unstructured_ingest/v2/constants.py,sha256=pDspTYz-nEojHBqrZNfssGEiujmVa02pIWL63PQP9sU,103
|
|
@@ -394,7 +395,7 @@ unstructured_ingest/v2/processes/partitioner.py,sha256=agpHwB9FR8OZVQqE7zFEb0IcD
|
|
|
394
395
|
unstructured_ingest/v2/processes/uncompress.py,sha256=Z_XfsITGdyaRwhtNUc7bMj5Y2jLuBge8KoK4nxhqKag,2425
|
|
395
396
|
unstructured_ingest/v2/processes/connectors/__init__.py,sha256=8M3aYYNbOkS2SYG2B_HLHMgX4V69-Oz1VqpQcRQMiVg,5167
|
|
396
397
|
unstructured_ingest/v2/processes/connectors/airtable.py,sha256=eeZJe-bBNxt5Sa-XEFCdcGeJCguJU5WN2Mv9kLp5dVQ,8917
|
|
397
|
-
unstructured_ingest/v2/processes/connectors/astradb.py,sha256=
|
|
398
|
+
unstructured_ingest/v2/processes/connectors/astradb.py,sha256=QTUQ-cv_iZi9eaXRRHQNKhtgFn-Pi20AXdSVaDFg9DM,15498
|
|
398
399
|
unstructured_ingest/v2/processes/connectors/azure_ai_search.py,sha256=-6IijSWGqj-85vD0c4l5wdMHp-LF371jO8j53PPRB4I,12002
|
|
399
400
|
unstructured_ingest/v2/processes/connectors/chroma.py,sha256=skrxRPHZ8y3JxNa0dt5SVitHiDQ5WVxLvY_kh2-QUrQ,8029
|
|
400
401
|
unstructured_ingest/v2/processes/connectors/confluence.py,sha256=qQApDcmPBGg4tHXwSOj4JPkAbrO9GQ4NRlaETjhp25U,7003
|
|
@@ -404,7 +405,7 @@ unstructured_ingest/v2/processes/connectors/gitlab.py,sha256=yBgCeLy9iCVI8bBDcHH
|
|
|
404
405
|
unstructured_ingest/v2/processes/connectors/google_drive.py,sha256=EEwXK1Anlu-eXl5qxmdDIqPYW7eMSez6WGlTPG2vSn8,13121
|
|
405
406
|
unstructured_ingest/v2/processes/connectors/kdbai.py,sha256=8bGHbZctJ_Tl1AUSMnI7CCZ7CgEtTRVcRuvlB1HPlqQ,5907
|
|
406
407
|
unstructured_ingest/v2/processes/connectors/local.py,sha256=a3stgnIkhBbXPIQD0O-RaRM-Eb-szHj9Yy4Fz881-9c,6723
|
|
407
|
-
unstructured_ingest/v2/processes/connectors/milvus.py,sha256=
|
|
408
|
+
unstructured_ingest/v2/processes/connectors/milvus.py,sha256=3sV0Yv2vYMLyxszKCqAqlMcHHJSBR-GGbaZf1nvobLE,10089
|
|
408
409
|
unstructured_ingest/v2/processes/connectors/mongodb.py,sha256=XLuprTCY0D9tAh_qn81MjJrDN9YaNqMlKe7BJl3eTZc,14998
|
|
409
410
|
unstructured_ingest/v2/processes/connectors/onedrive.py,sha256=heZMtOIrCySi552ldIk8iH0pSRXZ0W2LeD-CcNOwCFQ,15979
|
|
410
411
|
unstructured_ingest/v2/processes/connectors/outlook.py,sha256=KgNGM8hImRhy6_SpswRP2VwRD4VOrqqJoySgxf2oduI,9290
|
|
@@ -435,9 +436,10 @@ unstructured_ingest/v2/processes/connectors/kafka/__init__.py,sha256=mQJ9Ex-QCfh
|
|
|
435
436
|
unstructured_ingest/v2/processes/connectors/kafka/cloud.py,sha256=qprsfI8VH0mVTa1MOCpa2D4coyopinQ5ag2KXcAecXE,3296
|
|
436
437
|
unstructured_ingest/v2/processes/connectors/kafka/kafka.py,sha256=qEv_yaG94KekFtfS06KgpTTbqeJkje0hn5uOjsMMngw,9414
|
|
437
438
|
unstructured_ingest/v2/processes/connectors/kafka/local.py,sha256=vwLZjvc_C17zOqcrzic0aIoPwS98sqYiwiMknw2IcK4,2586
|
|
438
|
-
unstructured_ingest/v2/processes/connectors/lancedb/__init__.py,sha256=
|
|
439
|
-
unstructured_ingest/v2/processes/connectors/lancedb/aws.py,sha256=
|
|
439
|
+
unstructured_ingest/v2/processes/connectors/lancedb/__init__.py,sha256=LW37xZrn48JeHluRNulLTreUPdaF-ZU81F7MCUHcCv8,1253
|
|
440
|
+
unstructured_ingest/v2/processes/connectors/lancedb/aws.py,sha256=eeXWsh8UeVm1Ur53C4MEnpLplfO8U91KYgk--0kk5pE,1413
|
|
440
441
|
unstructured_ingest/v2/processes/connectors/lancedb/azure.py,sha256=Ms5vQVRIpTF1Q2qBl_bET9wbgaf4diPaH-iR8kJlr4E,1461
|
|
442
|
+
unstructured_ingest/v2/processes/connectors/lancedb/cloud.py,sha256=BFy0gW2OZ_qaZJM97m-tNsFaJPi9zOKrrd2y4thcNP0,1341
|
|
441
443
|
unstructured_ingest/v2/processes/connectors/lancedb/gcp.py,sha256=p5BPaFtS3y3Yh8PIr3tUqsAXrUYu4QYYAWQNh5W2ucE,1361
|
|
442
444
|
unstructured_ingest/v2/processes/connectors/lancedb/lancedb.py,sha256=7WIShs2V3dpN6wUhDTt1j2rvdiPp6yopbh7XYkb9T3s,5129
|
|
443
445
|
unstructured_ingest/v2/processes/connectors/lancedb/local.py,sha256=_7-6iO6B60gAWwJUUrmlsRzYMFIBeZgu_QT3mhw5L0I,1272
|
|
@@ -453,13 +455,13 @@ unstructured_ingest/v2/processes/connectors/sql/snowflake.py,sha256=jl524VudwmFK
|
|
|
453
455
|
unstructured_ingest/v2/processes/connectors/sql/sql.py,sha256=LFzGeAUagLknK07DsXg2oSG7ZAgR6VqT9wfI_tYlHUg,14782
|
|
454
456
|
unstructured_ingest/v2/processes/connectors/sql/sqlite.py,sha256=9605K36nQ5-gBxzt1daYKYotON1SE85RETusqCJrbdk,5230
|
|
455
457
|
unstructured_ingest/v2/processes/connectors/weaviate/__init__.py,sha256=eXamSnQdzzMvt62z80B8nmlkwDKO-Pogln_K_zLz53A,1067
|
|
456
|
-
unstructured_ingest/v2/processes/connectors/weaviate/cloud.py,sha256=
|
|
458
|
+
unstructured_ingest/v2/processes/connectors/weaviate/cloud.py,sha256=bXtfEYLquR-BszZ5S_lQ4JbETNs9Vozgpfm8x9egAmE,6251
|
|
457
459
|
unstructured_ingest/v2/processes/connectors/weaviate/embedded.py,sha256=S8Zg8StuZT-k7tCg1D5YShO1-vJYYk9-M1bE1fIqx64,3014
|
|
458
460
|
unstructured_ingest/v2/processes/connectors/weaviate/local.py,sha256=LuTBKPseVewsz8VqxRPRLfGEm3BeI9nBZxpy7ZU5tOA,2201
|
|
459
461
|
unstructured_ingest/v2/processes/connectors/weaviate/weaviate.py,sha256=ln1p9ahFTaT-qsL7p4bgw_IqnU60As_l6vVAqUWyQVE,11655
|
|
460
|
-
unstructured_ingest-0.3.
|
|
461
|
-
unstructured_ingest-0.3.
|
|
462
|
-
unstructured_ingest-0.3.
|
|
463
|
-
unstructured_ingest-0.3.
|
|
464
|
-
unstructured_ingest-0.3.
|
|
465
|
-
unstructured_ingest-0.3.
|
|
462
|
+
unstructured_ingest-0.3.3.dist-info/LICENSE.md,sha256=SxkKP_62uIAKb9mb1eH7FH4Kn2aYT09fgjKpJt5PyTk,11360
|
|
463
|
+
unstructured_ingest-0.3.3.dist-info/METADATA,sha256=AEumzINrBNXXeBEBQiIB8309_9OkIWhLeo7Giqzl1ew,7393
|
|
464
|
+
unstructured_ingest-0.3.3.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
|
|
465
|
+
unstructured_ingest-0.3.3.dist-info/entry_points.txt,sha256=gUAAFnjFPnBgThJSEbw0N5ZjxtaKlT1s9e05_arQrNw,70
|
|
466
|
+
unstructured_ingest-0.3.3.dist-info/top_level.txt,sha256=DMuDMHZRMdeay8v8Kdi855muIv92F0OkutvBCaBEW6M,25
|
|
467
|
+
unstructured_ingest-0.3.3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
{unstructured_ingest-0.3.2.dist-info → unstructured_ingest-0.3.3.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|