adapta 3.2.3a475.dev3__tar.gz → 3.2.4a477.dev5__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.
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/PKG-INFO +1 -1
- adapta-3.2.4a477.dev5/adapta/_version.py +1 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/blob/local_storage_client.py +10 -2
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/distributed_object_store/v3/datastax_astra/README.md +65 -27
- adapta-3.2.4a477.dev5/adapta/storage/distributed_object_store/v3/datastax_astra/_models.py +134 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/distributed_object_store/v3/datastax_astra/astra_client.py +6 -5
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/pyproject.toml +1 -1
- adapta-3.2.3a475.dev3/adapta/_version.py +0 -1
- adapta-3.2.3a475.dev3/adapta/storage/distributed_object_store/v3/datastax_astra/_models.py +0 -75
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/LICENSE +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/README.md +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/__init__.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/connectors/__init__.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/connectors/service_bus/__init__.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/connectors/service_bus/_connector.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/logs/README.md +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/logs/__init__.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/logs/_async_logger.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/logs/_base.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/logs/_internal.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/logs/_internal_logger.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/logs/_logger_interface.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/logs/handlers/__init__.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/logs/handlers/datadog_api_handler.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/logs/handlers/safe_stream_handler.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/logs/models/__init__.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/logs/models/_log_level.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/logs/models/_logs_metadata.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/metrics/__init__.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/metrics/_base.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/metrics/providers/README.md +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/metrics/providers/__init__.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/metrics/providers/datadog_provider.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/ml/__init__.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/ml/_model.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/ml/mlflow/__init__.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/ml/mlflow/_client.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/ml/mlflow/_functions.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/process_communication/__init__.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/process_communication/_models.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/schema_management/README.md +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/schema_management/__init__.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/schema_management/schema_entity.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/security/__init__.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/security/clients/README.md +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/security/clients/__init__.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/security/clients/_azure_client.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/security/clients/_base.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/security/clients/_local_client.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/security/clients/aws/__init__.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/security/clients/aws/_aws_client.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/security/clients/aws/_aws_credentials.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/security/clients/hashicorp_vault/__init__.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/security/clients/hashicorp_vault/hashicorp_vault_client.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/security/clients/hashicorp_vault/kubernetes_client.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/security/clients/hashicorp_vault/oidc_client.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/security/clients/hashicorp_vault/token_client.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/__init__.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/blob/README.md +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/blob/__init__.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/blob/azure_storage_client.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/blob/base.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/blob/s3_storage_client.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/cache/__init__.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/cache/_base.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/cache/redis_cache.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/database/__init__.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/database/v2/README.md +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/database/v2/__init__.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/database/v2/azure_sql.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/database/v2/models/__init__.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/database/v2/models/_models.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/database/v2/odbc.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/database/v2/snowflake_sql.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/database/v2/trino_sql.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/database/v3/README.md +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/database/v3/__init__.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/database/v3/azure_sql.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/database/v3/models/__init__.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/database/v3/models/_models.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/database/v3/odbc.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/database/v3/snowflake_sql.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/database/v3/trino_sql.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/delta_lake/__init__.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/delta_lake/v2/README.md +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/delta_lake/v2/__init__.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/delta_lake/v2/_functions.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/delta_lake/v2/_models.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/delta_lake/v3/README.md +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/delta_lake/v3/__init__.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/delta_lake/v3/_functions.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/delta_lake/v3/_models.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/distributed_object_store/__init__.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/distributed_object_store/v2/__init__.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/distributed_object_store/v2/datastax_astra/README.md +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/distributed_object_store/v2/datastax_astra/__init__.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/distributed_object_store/v2/datastax_astra/_models.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/distributed_object_store/v2/datastax_astra/astra_client.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/distributed_object_store/v3/__init__.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/distributed_object_store/v3/datastax_astra/__init__.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/distributed_object_store/v3/datastax_astra/_model_mappers.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/exceptions.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/models/__init__.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/models/_functions.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/models/astra.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/models/aws.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/models/azure.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/models/base.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/models/filter_expression.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/models/format.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/models/hive.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/models/local.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/query_enabled_store/README.md +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/query_enabled_store/__init__.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/query_enabled_store/_models.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/query_enabled_store/_qes_astra.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/query_enabled_store/_qes_delta.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/secrets/README.md +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/secrets/__init__.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/secrets/_base.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/secrets/azure_secret_client.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/secrets/hashicorp_vault_secret_storage_client.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/utils/README.md +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/utils/__init__.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/utils/_common.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/utils/concurrent_task_runner.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/utils/data_structures/__init__.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/utils/data_structures/_functions.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/utils/decorators/__init__.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/utils/decorators/_logging.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/utils/decorators/_rate_limit.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/utils/metaframe.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/utils/python_typing/__init__.py +0 -0
- {adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/utils/python_typing/_functions.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: adapta
|
|
3
|
-
Version: 3.2.
|
|
3
|
+
Version: 3.2.4a477.dev5
|
|
4
4
|
Summary: Logging, data connectors, monitoring, secret handling and general lifehacks to make data people lives easier.
|
|
5
5
|
Home-page: https://github.com/SneaksAndData/adapta
|
|
6
6
|
License: Apache 2.0
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = 'v3.2.4a477.dev5'
|
|
@@ -70,6 +70,8 @@ class LocalStorageClient(StorageClient):
|
|
|
70
70
|
self, blob_path: DataPath, filter_predicate: Optional[Callable[[...], bool]] = None
|
|
71
71
|
) -> Iterator[DataPath]:
|
|
72
72
|
for blob in os.listdir(cast_path(blob_path).path):
|
|
73
|
+
if filter_predicate is not None and not filter_predicate(blob):
|
|
74
|
+
continue
|
|
73
75
|
yield LocalPath(path=blob)
|
|
74
76
|
|
|
75
77
|
def read_blobs(
|
|
@@ -79,8 +81,14 @@ class LocalStorageClient(StorageClient):
|
|
|
79
81
|
filter_predicate: Optional[Callable[[...], bool]] = None,
|
|
80
82
|
) -> Iterator[T]:
|
|
81
83
|
dir_path = cast_path(blob_path).path
|
|
82
|
-
|
|
83
|
-
|
|
84
|
+
if os.path.isdir(dir_path):
|
|
85
|
+
for blob in os.listdir(dir_path):
|
|
86
|
+
if filter_predicate is not None and not filter_predicate(blob):
|
|
87
|
+
continue
|
|
88
|
+
with open(os.path.join(dir_path, blob), "rb") as blob_file:
|
|
89
|
+
yield serialization_format().deserialize(blob_file.read())
|
|
90
|
+
else:
|
|
91
|
+
with open(dir_path, "rb") as blob_file:
|
|
84
92
|
yield serialization_format().deserialize(blob_file.read())
|
|
85
93
|
|
|
86
94
|
def download_blobs(
|
|
@@ -129,28 +129,33 @@ with AstraClient(
|
|
|
129
129
|
```
|
|
130
130
|
|
|
131
131
|
## Using the Vector Search
|
|
132
|
-
Create a table in Astra and insert some rows:
|
|
132
|
+
1. Create a table in Astra and insert some rows:
|
|
133
133
|
```cassandraql
|
|
134
134
|
CREATE TABLE IF NOT EXISTS tmp.test_entity_with_embeddings (
|
|
135
135
|
col_a TEXT PRIMARY KEY,
|
|
136
136
|
col_b TEXT,
|
|
137
|
-
col_c VECTOR<FLOAT, 3
|
|
137
|
+
col_c VECTOR<FLOAT, 3>,
|
|
138
|
+
col_d TEXT,
|
|
138
139
|
);
|
|
139
140
|
|
|
140
141
|
CREATE INDEX IF NOT EXISTS ann_index
|
|
141
142
|
ON tmp.test_entity_with_embeddings(col_c)
|
|
142
143
|
WITH OPTIONS = {'source_model': 'other'};
|
|
143
144
|
|
|
144
|
-
|
|
145
|
-
|
|
145
|
+
CREATE INDEX IF NOT EXISTS col_b_index
|
|
146
|
+
ON tmp.test_entity_with_embeddings(col_b);
|
|
146
147
|
|
|
147
|
-
INSERT INTO tmp.test_entity_with_embeddings (col_a, col_b, col_c)
|
|
148
|
-
VALUES ('
|
|
149
|
-
```
|
|
148
|
+
INSERT INTO tmp.test_entity_with_embeddings (col_a, col_b, col_c, col_d)
|
|
149
|
+
VALUES ('something1', 'different', [0.3, 0.4, 0.5], 'extra1');
|
|
150
150
|
|
|
151
|
+
INSERT INTO tmp.test_entity_with_embeddings (col_a, col_b, col_c, col_d)
|
|
152
|
+
VALUES ('something2', 'different1', [0.1, 0.24, 0.25], 'extra2');
|
|
153
|
+
```
|
|
154
|
+
2. Test out functionality in Python
|
|
151
155
|
```python
|
|
152
156
|
from adapta.storage.distributed_object_store.v3.datastax_astra import AstraClient
|
|
153
157
|
from adapta.storage.distributed_object_store.v3.datastax_astra import SimilarityFunction
|
|
158
|
+
from adapta.storage.models.filter_expression import FilterField
|
|
154
159
|
|
|
155
160
|
from dataclasses import dataclass, field
|
|
156
161
|
|
|
@@ -161,28 +166,61 @@ class TestEntityWithEmbeddings:
|
|
|
161
166
|
"is_primary_key": True,
|
|
162
167
|
"is_partition_key": True
|
|
163
168
|
})
|
|
164
|
-
col_b: str
|
|
165
|
-
"is_primary_key": True,
|
|
166
|
-
"is_partition_key": False
|
|
167
|
-
})
|
|
169
|
+
col_b: str
|
|
168
170
|
col_c: list[float] = field(metadata={
|
|
169
171
|
"is_vector_enabled": True
|
|
170
172
|
})
|
|
173
|
+
col_d: str
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
astra_client = AstraClient(
|
|
177
|
+
client_name='test',
|
|
178
|
+
keyspace='tmp',
|
|
179
|
+
secure_connect_bundle_bytes='base64string',
|
|
180
|
+
client_id='Astra Token client_id',
|
|
181
|
+
client_secret='Astra Token client_secret'
|
|
182
|
+
)
|
|
183
|
+
|
|
184
|
+
# Search in Astra
|
|
185
|
+
with astra_client:
|
|
186
|
+
print(astra_client.ann_search(
|
|
187
|
+
entity_type=TestEntityWithEmbeddings,
|
|
188
|
+
vector_to_match=[0.1, 0.2, 0.3],
|
|
189
|
+
similarity_function=SimilarityFunction.DOT_PRODUCT
|
|
190
|
+
, num_results=2
|
|
191
|
+
).to_pandas())
|
|
192
|
+
|
|
193
|
+
# col_a col_b col_d sim_value
|
|
194
|
+
# 0 something2 different1 extra2 0.5665
|
|
195
|
+
# 1 something1 different extra1 0.6300
|
|
171
196
|
|
|
172
|
-
|
|
173
|
-
#
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
#
|
|
186
|
-
|
|
187
|
-
|
|
197
|
+
|
|
198
|
+
# Search with primary key filter in Astra (with dictionary)
|
|
199
|
+
filter_expression = [{'col_a': 'something2', 'col_b': 'different1'}]
|
|
200
|
+
with astra_client:
|
|
201
|
+
print(astra_client.ann_search(
|
|
202
|
+
entity_type=TestEntityWithEmbeddings,
|
|
203
|
+
vector_to_match=[0.1, 0.2, 0.3],
|
|
204
|
+
similarity_function=SimilarityFunction.DOT_PRODUCT,
|
|
205
|
+
num_results=2,
|
|
206
|
+
key_column_filter_values=filter_expression
|
|
207
|
+
).to_pandas())
|
|
208
|
+
|
|
209
|
+
# col_a col_b col_d sim_value
|
|
210
|
+
# 0 something2 different1 extra2 0.5665
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
# Search with primary key filter in Astra (with Expression)
|
|
214
|
+
filter_expression = (FilterField('col_a') == 'something2') & (FilterField('col_b').isin(['different1', 'doesnt_exist']))
|
|
215
|
+
with astra_client:
|
|
216
|
+
print(astra_client.ann_search(
|
|
217
|
+
entity_type=TestEntityWithEmbeddings,
|
|
218
|
+
vector_to_match=[0.1, 0.2, 0.3],
|
|
219
|
+
similarity_function=SimilarityFunction.DOT_PRODUCT,
|
|
220
|
+
num_results=2,
|
|
221
|
+
key_column_filter_values=filter_expression,
|
|
222
|
+
).to_pandas())
|
|
223
|
+
|
|
224
|
+
# col_a col_b col_d sim_value
|
|
225
|
+
# 0 something2 different1 extra2 0.5665
|
|
188
226
|
```
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Models for Astra DB.
|
|
3
|
+
"""
|
|
4
|
+
# Copyright (c) 2023-2024. ECCO Sneaks & Data
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
#
|
|
18
|
+
import re
|
|
19
|
+
|
|
20
|
+
from enum import Enum
|
|
21
|
+
from typing import Optional, Union, List, Dict, Any
|
|
22
|
+
|
|
23
|
+
from adapta.storage.models.filter_expression import (
|
|
24
|
+
Expression,
|
|
25
|
+
compile_expression,
|
|
26
|
+
AstraFilterExpression,
|
|
27
|
+
FilterExpressionOperation,
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class SimilarityFunction(Enum):
|
|
32
|
+
"""
|
|
33
|
+
Supported similarity functions.
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
COSINE = "similarity_cosine"
|
|
37
|
+
DOT_PRODUCT = "similarity_dot_product"
|
|
38
|
+
EUCLIDEAN = "similarity_euclidean"
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class VectorSearchQuery:
|
|
42
|
+
"""
|
|
43
|
+
Builder for a vector search query. Result would resemble the following:
|
|
44
|
+
|
|
45
|
+
select description, similarity_cosine(item_vector, [0.1, 0.15, 0.3, 0.12, 0.05])
|
|
46
|
+
from vsearch.products
|
|
47
|
+
|
|
48
|
+
order by item_vector ann of [0.1, 0.15, 0.3, 0.12, 0.05]
|
|
49
|
+
limit 1;
|
|
50
|
+
|
|
51
|
+
"""
|
|
52
|
+
|
|
53
|
+
def __init__(
|
|
54
|
+
self,
|
|
55
|
+
table_fqn: str,
|
|
56
|
+
data_fields: list[str],
|
|
57
|
+
sim_func: SimilarityFunction,
|
|
58
|
+
vector: list[float],
|
|
59
|
+
field_name: str,
|
|
60
|
+
num_results=1,
|
|
61
|
+
key_column_filter_values: Optional[Union[Expression, List[Dict[str, Any]]]] = None,
|
|
62
|
+
):
|
|
63
|
+
self._sim_func = sim_func
|
|
64
|
+
self._vector = vector
|
|
65
|
+
self._field_name = field_name
|
|
66
|
+
self._num_results = num_results
|
|
67
|
+
self._table_fqn = table_fqn
|
|
68
|
+
self._data_fields = data_fields
|
|
69
|
+
self._key_column_filter_values = key_column_filter_values
|
|
70
|
+
|
|
71
|
+
def _get_similarity_colum(self) -> str:
|
|
72
|
+
return f"{self._sim_func.value}({self._field_name}, {self._vector})"
|
|
73
|
+
|
|
74
|
+
def _get_order_by(self) -> str:
|
|
75
|
+
return f"order by {self._field_name} ann of {self._vector} limit {self._num_results};"
|
|
76
|
+
|
|
77
|
+
def _get_filter(self) -> str:
|
|
78
|
+
if self._key_column_filter_values is None:
|
|
79
|
+
return ""
|
|
80
|
+
|
|
81
|
+
def format_value_for_cql(val: Any) -> str:
|
|
82
|
+
if isinstance(val, (tuple, list, set)):
|
|
83
|
+
return f"({', '.join(format_value_for_cql(v) for v in val)})"
|
|
84
|
+
if isinstance(val, str):
|
|
85
|
+
return f"'{val}'"
|
|
86
|
+
return str(val)
|
|
87
|
+
|
|
88
|
+
def get_astra_operator(column_expression: str) -> str:
|
|
89
|
+
operator_map = {
|
|
90
|
+
FilterExpressionOperation.GT.value["astra"]: ">",
|
|
91
|
+
FilterExpressionOperation.GE.value["astra"]: ">=",
|
|
92
|
+
FilterExpressionOperation.LT.value["astra"]: "<",
|
|
93
|
+
FilterExpressionOperation.LE.value["astra"]: "<=",
|
|
94
|
+
FilterExpressionOperation.IN.value["astra"]: "IN",
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
for suffix, operator in operator_map.items():
|
|
98
|
+
if column_expression.endswith(suffix):
|
|
99
|
+
return operator
|
|
100
|
+
|
|
101
|
+
return "="
|
|
102
|
+
|
|
103
|
+
def remove_operator_suffix(col: str) -> str:
|
|
104
|
+
"""
|
|
105
|
+
Removes the double underscore and the subsequent operator suffix from a column expression.
|
|
106
|
+
Returns only the column name.
|
|
107
|
+
"""
|
|
108
|
+
return re.sub(r"__\w+$", "", col)
|
|
109
|
+
|
|
110
|
+
compiled_filter_values = (
|
|
111
|
+
compile_expression(self._key_column_filter_values, AstraFilterExpression)
|
|
112
|
+
if isinstance(self._key_column_filter_values, Expression)
|
|
113
|
+
else self._key_column_filter_values
|
|
114
|
+
)
|
|
115
|
+
if len(compiled_filter_values) > 1:
|
|
116
|
+
raise ValueError("Restriction on key columns must not be nested under OR operator")
|
|
117
|
+
|
|
118
|
+
cql_filter_expressions = [
|
|
119
|
+
f"{remove_operator_suffix(col)} {get_astra_operator(col)} {format_value_for_cql(val)}"
|
|
120
|
+
for col, val in compiled_filter_values[0].items()
|
|
121
|
+
]
|
|
122
|
+
return f"where {' and '.join(cql_filter_expressions)}"
|
|
123
|
+
|
|
124
|
+
def __str__(self):
|
|
125
|
+
return " ".join(
|
|
126
|
+
[
|
|
127
|
+
"select",
|
|
128
|
+
", ".join(self._data_fields),
|
|
129
|
+
", " f"{self._get_similarity_colum()} as sim_value",
|
|
130
|
+
f"from {self._table_fqn}",
|
|
131
|
+
self._get_filter(),
|
|
132
|
+
self._get_order_by(),
|
|
133
|
+
]
|
|
134
|
+
)
|
|
@@ -300,17 +300,16 @@ class AstraClient:
|
|
|
300
300
|
self._session is not None
|
|
301
301
|
), "Please instantiate an AstraClient using with AstraClient(...) before calling this method"
|
|
302
302
|
|
|
303
|
-
|
|
303
|
+
select_columns = list(map(normalize_column_name, select_columns)) if select_columns else None
|
|
304
|
+
|
|
305
|
+
cassandra_model = get_mapper(
|
|
304
306
|
data_model=model_class,
|
|
305
307
|
keyspace=keyspace,
|
|
306
308
|
table_name=table_name,
|
|
307
309
|
primary_keys=primary_keys,
|
|
308
310
|
partition_keys=partition_keys,
|
|
309
311
|
custom_indexes=custom_indexes,
|
|
310
|
-
)
|
|
311
|
-
cassandra_model = mapper.map()
|
|
312
|
-
|
|
313
|
-
select_columns = list(map(normalize_column_name, select_columns)) if select_columns else mapper.column_names
|
|
312
|
+
).map()
|
|
314
313
|
|
|
315
314
|
compiled_filter_values = (
|
|
316
315
|
compile_expression(key_column_filter_values, AstraFilterExpression)
|
|
@@ -490,6 +489,7 @@ class AstraClient:
|
|
|
490
489
|
entity_type: Type[TModel],
|
|
491
490
|
vector_to_match: list[float],
|
|
492
491
|
similarity_function: SimilarityFunction = SimilarityFunction.COSINE,
|
|
492
|
+
key_column_filter_values: Optional[Union[Expression, List[Dict[str, Any]]]] = None,
|
|
493
493
|
table_name: Optional[str] = None,
|
|
494
494
|
return_vector: bool = False,
|
|
495
495
|
num_results=1,
|
|
@@ -509,6 +509,7 @@ class AstraClient:
|
|
|
509
509
|
query = VectorSearchQuery(
|
|
510
510
|
table_fqn=f"{self._keyspace}.{model_mapper.table_name}",
|
|
511
511
|
data_fields=[f for f in model_mapper.column_names if f != model_mapper.vector_column or return_vector],
|
|
512
|
+
key_column_filter_values=key_column_filter_values,
|
|
512
513
|
sim_func=similarity_function,
|
|
513
514
|
vector=vector_to_match,
|
|
514
515
|
field_name=model_mapper.vector_column,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "adapta"
|
|
3
|
-
version = "v3.2.
|
|
3
|
+
version = "v3.2.4a477.dev5"
|
|
4
4
|
description = "Logging, data connectors, monitoring, secret handling and general lifehacks to make data people lives easier."
|
|
5
5
|
authors = ["ECCO Sneaks & Data <esdsupport@ecco.com>"]
|
|
6
6
|
maintainers = ['GZU <gzu@ecco.com>', 'JRB <ext-jrb@ecco.com>']
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = 'v3.2.3a475.dev3'
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Models for Astra DB.
|
|
3
|
-
"""
|
|
4
|
-
# Copyright (c) 2023-2024. ECCO Sneaks & Data
|
|
5
|
-
#
|
|
6
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
-
# you may not use this file except in compliance with the License.
|
|
8
|
-
# You may obtain a copy of the License at
|
|
9
|
-
#
|
|
10
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
-
#
|
|
12
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
-
# See the License for the specific language governing permissions and
|
|
16
|
-
# limitations under the License.
|
|
17
|
-
#
|
|
18
|
-
|
|
19
|
-
from enum import Enum
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
class SimilarityFunction(Enum):
|
|
23
|
-
"""
|
|
24
|
-
Supported similarity functions.
|
|
25
|
-
"""
|
|
26
|
-
|
|
27
|
-
COSINE = "similarity_cosine"
|
|
28
|
-
DOT_PRODUCT = "similarity_dot_product"
|
|
29
|
-
EUCLIDEAN = "similarity_euclidean"
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
class VectorSearchQuery:
|
|
33
|
-
"""
|
|
34
|
-
Builder for a vector search query. Result would resemble the following:
|
|
35
|
-
|
|
36
|
-
select description, similarity_cosine(item_vector, [0.1, 0.15, 0.3, 0.12, 0.05])
|
|
37
|
-
from vsearch.products
|
|
38
|
-
|
|
39
|
-
order by item_vector ann of [0.1, 0.15, 0.3, 0.12, 0.05]
|
|
40
|
-
limit 1;
|
|
41
|
-
|
|
42
|
-
"""
|
|
43
|
-
|
|
44
|
-
def __init__(
|
|
45
|
-
self,
|
|
46
|
-
table_fqn: str,
|
|
47
|
-
data_fields: list[str],
|
|
48
|
-
sim_func: SimilarityFunction,
|
|
49
|
-
vector: list[float],
|
|
50
|
-
field_name: str,
|
|
51
|
-
num_results=1,
|
|
52
|
-
):
|
|
53
|
-
self._sim_func = sim_func
|
|
54
|
-
self._vector = vector
|
|
55
|
-
self._field_name = field_name
|
|
56
|
-
self._num_results = num_results
|
|
57
|
-
self._table_fqn = table_fqn
|
|
58
|
-
self._data_fields = data_fields
|
|
59
|
-
|
|
60
|
-
def _get_similarity_colum(self) -> str:
|
|
61
|
-
return f"{self._sim_func.value}({self._field_name}, {self._vector})"
|
|
62
|
-
|
|
63
|
-
def _get_order_by(self) -> str:
|
|
64
|
-
return f"order by {self._field_name} ann of {self._vector} limit {self._num_results};"
|
|
65
|
-
|
|
66
|
-
def __str__(self):
|
|
67
|
-
return " ".join(
|
|
68
|
-
[
|
|
69
|
-
"select",
|
|
70
|
-
", ".join(self._data_fields),
|
|
71
|
-
", " f"{self._get_similarity_colum()} as sim_value",
|
|
72
|
-
f"from {self._table_fqn}",
|
|
73
|
-
self._get_order_by(),
|
|
74
|
-
]
|
|
75
|
-
)
|
|
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
|
{adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/metrics/providers/datadog_provider.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
|
|
File without changes
|
|
File without changes
|
{adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/security/clients/aws/_aws_credentials.py
RENAMED
|
File without changes
|
{adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/security/clients/hashicorp_vault/__init__.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
|
|
File without changes
|
{adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/database/v2/models/__init__.py
RENAMED
|
File without changes
|
{adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/database/v2/models/_models.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/database/v3/models/__init__.py
RENAMED
|
File without changes
|
{adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/database/v3/models/_models.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
|
{adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/distributed_object_store/__init__.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/query_enabled_store/README.md
RENAMED
|
File without changes
|
{adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/query_enabled_store/__init__.py
RENAMED
|
File without changes
|
{adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/query_enabled_store/_models.py
RENAMED
|
File without changes
|
{adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/query_enabled_store/_qes_astra.py
RENAMED
|
File without changes
|
{adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/query_enabled_store/_qes_delta.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{adapta-3.2.3a475.dev3 → adapta-3.2.4a477.dev5}/adapta/storage/secrets/azure_secret_client.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
|