cocoindex 0.2.9__cp311-abi3-manylinux_2_28_x86_64.whl → 0.2.11__cp311-abi3-manylinux_2_28_x86_64.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.
- cocoindex/__init__.py +13 -2
- cocoindex/_engine.abi3.so +0 -0
- cocoindex/auth_registry.py +2 -13
- cocoindex/cli.py +0 -2
- cocoindex/convert.py +2 -0
- cocoindex/flow.py +84 -27
- cocoindex/lib.py +47 -4
- cocoindex/op.py +5 -11
- cocoindex/query_handler.py +51 -0
- cocoindex/runtime.py +8 -1
- cocoindex/setting.py +5 -14
- {cocoindex-0.2.9.dist-info → cocoindex-0.2.11.dist-info}/METADATA +1 -1
- {cocoindex-0.2.9.dist-info → cocoindex-0.2.11.dist-info}/RECORD +16 -15
- {cocoindex-0.2.9.dist-info → cocoindex-0.2.11.dist-info}/licenses/THIRD_PARTY_NOTICES.html +16 -2
- {cocoindex-0.2.9.dist-info → cocoindex-0.2.11.dist-info}/WHEEL +0 -0
- {cocoindex-0.2.9.dist-info → cocoindex-0.2.11.dist-info}/entry_points.txt +0 -0
cocoindex/__init__.py
CHANGED
@@ -6,7 +6,12 @@ from . import functions, sources, targets, cli, utils
|
|
6
6
|
|
7
7
|
from . import targets as storages # Deprecated: Use targets instead
|
8
8
|
|
9
|
-
from .auth_registry import
|
9
|
+
from .auth_registry import (
|
10
|
+
AuthEntryReference,
|
11
|
+
add_auth_entry,
|
12
|
+
add_transient_auth_entry,
|
13
|
+
ref_auth_entry,
|
14
|
+
)
|
10
15
|
from .flow import FlowBuilder, DataScope, DataSlice, Flow, transform_flow
|
11
16
|
from .flow import flow_def
|
12
17
|
from .flow import EvaluateAndDumpOptions, GeneratedField
|
@@ -14,11 +19,12 @@ from .flow import FlowLiveUpdater, FlowLiveUpdaterOptions, FlowUpdaterStatusUpda
|
|
14
19
|
from .flow import open_flow
|
15
20
|
from .flow import add_flow_def, remove_flow # DEPRECATED
|
16
21
|
from .flow import update_all_flows_async, setup_all_flows, drop_all_flows
|
17
|
-
from .lib import init, start_server, stop
|
22
|
+
from .lib import settings, init, start_server, stop
|
18
23
|
from .llm import LlmSpec, LlmApiType
|
19
24
|
from .index import VectorSimilarityMetric, VectorIndexDef, IndexOptions
|
20
25
|
from .setting import DatabaseConnectionSpec, Settings, ServerSettings
|
21
26
|
from .setting import get_app_namespace
|
27
|
+
from .query_handler import QueryHandlerResultFields, QueryInfo, QueryOutput
|
22
28
|
from .typing import (
|
23
29
|
Int64,
|
24
30
|
Float32,
|
@@ -65,6 +71,7 @@ __all__ = [
|
|
65
71
|
"setup_all_flows",
|
66
72
|
"drop_all_flows",
|
67
73
|
# Lib
|
74
|
+
"settings",
|
68
75
|
"init",
|
69
76
|
"start_server",
|
70
77
|
"stop",
|
@@ -89,4 +96,8 @@ __all__ = [
|
|
89
96
|
"Range",
|
90
97
|
"Vector",
|
91
98
|
"Json",
|
99
|
+
# Query handler
|
100
|
+
"QueryHandlerResultFields",
|
101
|
+
"QueryInfo",
|
102
|
+
"QueryOutput",
|
92
103
|
]
|
cocoindex/_engine.abi3.so
CHANGED
Binary file
|
cocoindex/auth_registry.py
CHANGED
@@ -11,18 +11,6 @@ from .convert import dump_engine_object
|
|
11
11
|
|
12
12
|
T = TypeVar("T")
|
13
13
|
|
14
|
-
# Global atomic counter for generating unique auth entry keys
|
15
|
-
_counter_lock = threading.Lock()
|
16
|
-
_auth_key_counter = 0
|
17
|
-
|
18
|
-
|
19
|
-
def _generate_auth_key() -> str:
|
20
|
-
"""Generate a unique auth entry key using a global atomic counter."""
|
21
|
-
global _auth_key_counter # pylint: disable=global-statement
|
22
|
-
with _counter_lock:
|
23
|
-
_auth_key_counter += 1
|
24
|
-
return f"__auth_{_auth_key_counter}"
|
25
|
-
|
26
14
|
|
27
15
|
@dataclass
|
28
16
|
class TransientAuthEntryReference(Generic[T]):
|
@@ -37,7 +25,8 @@ class AuthEntryReference(TransientAuthEntryReference[T]):
|
|
37
25
|
|
38
26
|
def add_transient_auth_entry(value: T) -> TransientAuthEntryReference[T]:
|
39
27
|
"""Add an auth entry to the registry. Returns its reference."""
|
40
|
-
|
28
|
+
key = _engine.add_transient_auth_entry(dump_engine_object(value))
|
29
|
+
return TransientAuthEntryReference(key)
|
41
30
|
|
42
31
|
|
43
32
|
def add_auth_entry(key: str, value: T) -> AuthEntryReference[T]:
|
cocoindex/cli.py
CHANGED
cocoindex/convert.py
CHANGED
@@ -616,6 +616,8 @@ def dump_engine_object(v: Any) -> Any:
|
|
616
616
|
return s
|
617
617
|
elif isinstance(v, (list, tuple)):
|
618
618
|
return [dump_engine_object(item) for item in v]
|
619
|
+
elif isinstance(v, np.ndarray):
|
620
|
+
return v.tolist()
|
619
621
|
elif isinstance(v, dict):
|
620
622
|
return {k: dump_engine_object(v) for k, v in v.items()}
|
621
623
|
return v
|
cocoindex/flow.py
CHANGED
@@ -38,9 +38,10 @@ from .convert import (
|
|
38
38
|
make_engine_value_encoder,
|
39
39
|
)
|
40
40
|
from .op import FunctionSpec
|
41
|
-
from .runtime import execution_context
|
41
|
+
from .runtime import execution_context, to_async_call
|
42
42
|
from .setup import SetupChangeBundle
|
43
43
|
from .typing import analyze_type_info, encode_enriched_type
|
44
|
+
from .query_handler import QueryHandlerInfo, QueryHandlerResultFields
|
44
45
|
from .validation import (
|
45
46
|
validate_flow_name,
|
46
47
|
validate_full_flow_name,
|
@@ -694,28 +695,18 @@ class Flow:
|
|
694
695
|
"""
|
695
696
|
|
696
697
|
_name: str
|
697
|
-
|
698
|
-
_lazy_engine_flow: Callable[[], _engine.Flow] | None
|
698
|
+
_engine_flow_creator: Callable[[], _engine.Flow]
|
699
699
|
|
700
|
-
|
701
|
-
|
702
|
-
|
700
|
+
_lazy_flow_lock: Lock
|
701
|
+
_lazy_query_handler_args: list[tuple[Any, ...]]
|
702
|
+
_lazy_engine_flow: _engine.Flow | None = None
|
703
|
+
|
704
|
+
def __init__(self, name: str, engine_flow_creator: Callable[[], _engine.Flow]):
|
703
705
|
validate_flow_name(name)
|
704
|
-
validate_full_flow_name(full_name)
|
705
706
|
self._name = name
|
706
|
-
self.
|
707
|
-
|
708
|
-
|
709
|
-
|
710
|
-
def _lazy_engine_flow() -> _engine.Flow:
|
711
|
-
nonlocal engine_flow, lock
|
712
|
-
if engine_flow is None:
|
713
|
-
with lock:
|
714
|
-
if engine_flow is None:
|
715
|
-
engine_flow = engine_flow_creator()
|
716
|
-
return engine_flow
|
717
|
-
|
718
|
-
self._lazy_engine_flow = _lazy_engine_flow
|
707
|
+
self._engine_flow_creator = engine_flow_creator
|
708
|
+
self._lazy_flow_lock = Lock()
|
709
|
+
self._lazy_query_handler_args = []
|
719
710
|
|
720
711
|
def _render_spec(self, verbose: bool = False) -> Tree:
|
721
712
|
"""
|
@@ -762,7 +753,7 @@ class Flow:
|
|
762
753
|
"""
|
763
754
|
Get the full name of the flow.
|
764
755
|
"""
|
765
|
-
return self.
|
756
|
+
return get_flow_full_name(self._name)
|
766
757
|
|
767
758
|
def update(self, /, *, reexport_targets: bool = False) -> _engine.IndexUpdateInfo:
|
768
759
|
"""
|
@@ -799,15 +790,33 @@ class Flow:
|
|
799
790
|
"""
|
800
791
|
Get the engine flow.
|
801
792
|
"""
|
802
|
-
if self._lazy_engine_flow is None:
|
803
|
-
|
804
|
-
return self.
|
793
|
+
if self._lazy_engine_flow is not None:
|
794
|
+
return self._lazy_engine_flow
|
795
|
+
return self._internal_flow()
|
805
796
|
|
806
797
|
async def internal_flow_async(self) -> _engine.Flow:
|
807
798
|
"""
|
808
799
|
Get the engine flow. The async version.
|
809
800
|
"""
|
810
|
-
|
801
|
+
if self._lazy_engine_flow is not None:
|
802
|
+
return self._lazy_engine_flow
|
803
|
+
return await asyncio.to_thread(self._internal_flow)
|
804
|
+
|
805
|
+
def _internal_flow(self) -> _engine.Flow:
|
806
|
+
"""
|
807
|
+
Get the engine flow. The async version.
|
808
|
+
"""
|
809
|
+
with self._lazy_flow_lock:
|
810
|
+
if self._lazy_engine_flow is not None:
|
811
|
+
return self._lazy_engine_flow
|
812
|
+
|
813
|
+
engine_flow = self._engine_flow_creator()
|
814
|
+
self._lazy_engine_flow = engine_flow
|
815
|
+
for args in self._lazy_query_handler_args:
|
816
|
+
engine_flow.add_query_handler(*args)
|
817
|
+
self._lazy_query_handler_args = []
|
818
|
+
|
819
|
+
return engine_flow
|
811
820
|
|
812
821
|
def setup(self, report_to_stdout: bool = False) -> None:
|
813
822
|
"""
|
@@ -852,6 +861,53 @@ class Flow:
|
|
852
861
|
with _flows_lock:
|
853
862
|
del _flows[self.name]
|
854
863
|
|
864
|
+
def add_query_handler(
|
865
|
+
self,
|
866
|
+
name: str,
|
867
|
+
handler: Callable[[str], Any],
|
868
|
+
/,
|
869
|
+
*,
|
870
|
+
result_fields: QueryHandlerResultFields | None = None,
|
871
|
+
) -> None:
|
872
|
+
"""
|
873
|
+
Add a query handler to the flow.
|
874
|
+
"""
|
875
|
+
async_handler = to_async_call(handler)
|
876
|
+
|
877
|
+
async def _handler(query: str) -> dict[str, Any]:
|
878
|
+
handler_result = await async_handler(query)
|
879
|
+
return {
|
880
|
+
"results": [
|
881
|
+
[(k, dump_engine_object(v)) for (k, v) in result.items()]
|
882
|
+
for result in handler_result.results
|
883
|
+
],
|
884
|
+
"query_info": dump_engine_object(handler_result.query_info),
|
885
|
+
}
|
886
|
+
|
887
|
+
handler_info = dump_engine_object(QueryHandlerInfo(result_fields=result_fields))
|
888
|
+
with self._lazy_flow_lock:
|
889
|
+
if self._lazy_engine_flow is not None:
|
890
|
+
self._lazy_engine_flow.add_query_handler(name, _handler, handler_info)
|
891
|
+
else:
|
892
|
+
self._lazy_query_handler_args.append((name, _handler, handler_info))
|
893
|
+
|
894
|
+
def query_handler(
|
895
|
+
self,
|
896
|
+
name: str | None = None,
|
897
|
+
result_fields: QueryHandlerResultFields | None = None,
|
898
|
+
) -> Callable[[Callable[[str], Any]], Callable[[str], Any]]:
|
899
|
+
"""
|
900
|
+
A decorator to declare a query handler.
|
901
|
+
"""
|
902
|
+
|
903
|
+
def _inner(handler: Callable[[str], Any]) -> Callable[[str], Any]:
|
904
|
+
self.add_query_handler(
|
905
|
+
name or handler.__qualname__, handler, result_fields=result_fields
|
906
|
+
)
|
907
|
+
return handler
|
908
|
+
|
909
|
+
return _inner
|
910
|
+
|
855
911
|
|
856
912
|
def _create_lazy_flow(
|
857
913
|
name: str | None, fl_def: Callable[[FlowBuilder, DataScope], None]
|
@@ -861,9 +917,10 @@ def _create_lazy_flow(
|
|
861
917
|
The flow will be built the first time when it's really needed.
|
862
918
|
"""
|
863
919
|
flow_name = _flow_name_builder.build_name(name, prefix="_flow_")
|
864
|
-
flow_full_name = get_flow_full_name(flow_name)
|
865
920
|
|
866
921
|
def _create_engine_flow() -> _engine.Flow:
|
922
|
+
flow_full_name = get_flow_full_name(flow_name)
|
923
|
+
validate_full_flow_name(flow_full_name)
|
867
924
|
flow_builder_state = _FlowBuilderState(flow_full_name)
|
868
925
|
root_scope = DataScope(
|
869
926
|
flow_builder_state, flow_builder_state.engine_flow_builder.root_scope()
|
@@ -873,7 +930,7 @@ def _create_lazy_flow(
|
|
873
930
|
execution_context.event_loop
|
874
931
|
)
|
875
932
|
|
876
|
-
return Flow(flow_name,
|
933
|
+
return Flow(flow_name, _create_engine_flow)
|
877
934
|
|
878
935
|
|
879
936
|
_flows_lock = Lock()
|
cocoindex/lib.py
CHANGED
@@ -2,12 +2,57 @@
|
|
2
2
|
Library level functions and states.
|
3
3
|
"""
|
4
4
|
|
5
|
+
import threading
|
5
6
|
import warnings
|
6
|
-
from typing import Callable, Any
|
7
7
|
|
8
8
|
from . import _engine # type: ignore
|
9
9
|
from . import flow, setting
|
10
10
|
from .convert import dump_engine_object
|
11
|
+
from .validation import validate_app_namespace_name
|
12
|
+
from typing import Any, Callable, overload
|
13
|
+
|
14
|
+
|
15
|
+
def prepare_settings(settings: setting.Settings) -> Any:
|
16
|
+
"""Prepare the settings for the engine."""
|
17
|
+
if settings.app_namespace:
|
18
|
+
validate_app_namespace_name(settings.app_namespace)
|
19
|
+
return dump_engine_object(settings)
|
20
|
+
|
21
|
+
|
22
|
+
_engine.set_settings_fn(lambda: prepare_settings(setting.Settings.from_env()))
|
23
|
+
|
24
|
+
|
25
|
+
_prev_settings_fn: Callable[[], setting.Settings] | None = None
|
26
|
+
_prev_settings_fn_lock: threading.Lock = threading.Lock()
|
27
|
+
|
28
|
+
|
29
|
+
@overload
|
30
|
+
def settings(fn: Callable[[], setting.Settings]) -> Callable[[], setting.Settings]: ...
|
31
|
+
@overload
|
32
|
+
def settings(
|
33
|
+
fn: None,
|
34
|
+
) -> Callable[[Callable[[], setting.Settings]], Callable[[], setting.Settings]]: ...
|
35
|
+
def settings(fn: Callable[[], setting.Settings] | None = None) -> Any:
|
36
|
+
"""
|
37
|
+
Decorate a function that returns a settings.Settings object.
|
38
|
+
It registers the function as a settings provider.
|
39
|
+
"""
|
40
|
+
|
41
|
+
def _inner(fn: Callable[[], setting.Settings]) -> Callable[[], setting.Settings]:
|
42
|
+
global _prev_settings_fn # pylint: disable=global-statement
|
43
|
+
with _prev_settings_fn_lock:
|
44
|
+
if _prev_settings_fn is not None:
|
45
|
+
warnings.warn(
|
46
|
+
f"Setting a new settings function will override the previous one {_prev_settings_fn}."
|
47
|
+
)
|
48
|
+
_prev_settings_fn = fn
|
49
|
+
_engine.set_settings_fn(lambda: prepare_settings(fn()))
|
50
|
+
return fn
|
51
|
+
|
52
|
+
if fn is not None:
|
53
|
+
return _inner(fn)
|
54
|
+
else:
|
55
|
+
return _inner
|
11
56
|
|
12
57
|
|
13
58
|
def init(settings: setting.Settings | None = None) -> None:
|
@@ -16,9 +61,7 @@ def init(settings: setting.Settings | None = None) -> None:
|
|
16
61
|
|
17
62
|
If the settings are not provided, they are loaded from the environment variables.
|
18
63
|
"""
|
19
|
-
settings
|
20
|
-
_engine.init(dump_engine_object(settings))
|
21
|
-
setting.set_app_namespace(settings.app_namespace)
|
64
|
+
_engine.init(prepare_settings(settings) if settings is not None else None)
|
22
65
|
|
23
66
|
|
24
67
|
def start_server(settings: setting.ServerSettings) -> None:
|
cocoindex/op.py
CHANGED
@@ -2,7 +2,6 @@
|
|
2
2
|
Facilities for defining cocoindex operations.
|
3
3
|
"""
|
4
4
|
|
5
|
-
import asyncio
|
6
5
|
import dataclasses
|
7
6
|
import inspect
|
8
7
|
from enum import Enum
|
@@ -32,6 +31,7 @@ from .typing import (
|
|
32
31
|
AnalyzedAnyType,
|
33
32
|
AnalyzedDictType,
|
34
33
|
)
|
34
|
+
from .runtime import to_async_call
|
35
35
|
|
36
36
|
|
37
37
|
class OpCategory(Enum):
|
@@ -150,12 +150,6 @@ class OpArgs:
|
|
150
150
|
arg_relationship: tuple[ArgRelationship, str] | None = None
|
151
151
|
|
152
152
|
|
153
|
-
def _to_async_call(call: Callable[..., Any]) -> Callable[..., Awaitable[Any]]:
|
154
|
-
if inspect.iscoroutinefunction(call):
|
155
|
-
return call
|
156
|
-
return lambda *args, **kwargs: asyncio.to_thread(lambda: call(*args, **kwargs))
|
157
|
-
|
158
|
-
|
159
153
|
@dataclasses.dataclass
|
160
154
|
class _ArgInfo:
|
161
155
|
decoder: Callable[[Any], Any]
|
@@ -319,8 +313,8 @@ def _register_op_factory(
|
|
319
313
|
"""
|
320
314
|
prepare_method = getattr(self._executor, "prepare", None)
|
321
315
|
if prepare_method is not None:
|
322
|
-
await
|
323
|
-
self._acall =
|
316
|
+
await to_async_call(prepare_method)()
|
317
|
+
self._acall = to_async_call(self._executor.__call__)
|
324
318
|
|
325
319
|
async def __call__(self, *args: Any, **kwargs: Any) -> Any:
|
326
320
|
decoded_args = []
|
@@ -461,12 +455,12 @@ class _TargetConnector:
|
|
461
455
|
self._get_persistent_key_fn = _get_required_method(
|
462
456
|
connector_cls, "get_persistent_key"
|
463
457
|
)
|
464
|
-
self._apply_setup_change_async_fn =
|
458
|
+
self._apply_setup_change_async_fn = to_async_call(
|
465
459
|
_get_required_method(connector_cls, "apply_setup_change")
|
466
460
|
)
|
467
461
|
|
468
462
|
mutate_fn = _get_required_method(connector_cls, "mutate")
|
469
|
-
self._mutate_async_fn =
|
463
|
+
self._mutate_async_fn = to_async_call(mutate_fn)
|
470
464
|
|
471
465
|
# Store the type annotation for later use
|
472
466
|
self._mutatation_type = self._analyze_mutate_mutation_type(
|
@@ -0,0 +1,51 @@
|
|
1
|
+
import dataclasses
|
2
|
+
import numpy as np
|
3
|
+
from numpy import typing as npt
|
4
|
+
from typing import Generic, TypeVar
|
5
|
+
from .index import VectorSimilarityMetric
|
6
|
+
|
7
|
+
|
8
|
+
@dataclasses.dataclass
|
9
|
+
class QueryHandlerResultFields:
|
10
|
+
"""
|
11
|
+
Specify field names in query results returned by the query handler.
|
12
|
+
This provides metadata for tools like CocoInsight to recognize structure of the query results.
|
13
|
+
"""
|
14
|
+
|
15
|
+
embedding: list[str] = dataclasses.field(default_factory=list)
|
16
|
+
score: str | None = None
|
17
|
+
|
18
|
+
|
19
|
+
@dataclasses.dataclass
|
20
|
+
class QueryHandlerInfo:
|
21
|
+
"""
|
22
|
+
Info to configure a query handler.
|
23
|
+
"""
|
24
|
+
|
25
|
+
result_fields: QueryHandlerResultFields | None = None
|
26
|
+
|
27
|
+
|
28
|
+
@dataclasses.dataclass
|
29
|
+
class QueryInfo:
|
30
|
+
"""
|
31
|
+
Info about the query.
|
32
|
+
"""
|
33
|
+
|
34
|
+
embedding: list[float] | npt.NDArray[np.float32] | None = None
|
35
|
+
similarity_metric: VectorSimilarityMetric | None = None
|
36
|
+
|
37
|
+
|
38
|
+
R = TypeVar("R")
|
39
|
+
|
40
|
+
|
41
|
+
@dataclasses.dataclass
|
42
|
+
class QueryOutput(Generic[R]):
|
43
|
+
"""
|
44
|
+
Output of a query handler.
|
45
|
+
|
46
|
+
results: list of results. Each result can be a dict or a dataclass.
|
47
|
+
query_info: Info about the query.
|
48
|
+
"""
|
49
|
+
|
50
|
+
results: list[R]
|
51
|
+
query_info: QueryInfo = dataclasses.field(default_factory=QueryInfo)
|
cocoindex/runtime.py
CHANGED
@@ -5,7 +5,8 @@ manner.
|
|
5
5
|
|
6
6
|
import threading
|
7
7
|
import asyncio
|
8
|
-
|
8
|
+
import inspect
|
9
|
+
from typing import Any, Callable, Coroutine, TypeVar, Awaitable
|
9
10
|
|
10
11
|
|
11
12
|
T = TypeVar("T")
|
@@ -35,3 +36,9 @@ class _ExecutionContext:
|
|
35
36
|
|
36
37
|
|
37
38
|
execution_context = _ExecutionContext()
|
39
|
+
|
40
|
+
|
41
|
+
def to_async_call(call: Callable[..., Any]) -> Callable[..., Awaitable[Any]]:
|
42
|
+
if inspect.iscoroutinefunction(call):
|
43
|
+
return call
|
44
|
+
return lambda *args, **kwargs: asyncio.to_thread(lambda: call(*args, **kwargs))
|
cocoindex/setting.py
CHANGED
@@ -6,16 +6,15 @@ import os
|
|
6
6
|
|
7
7
|
from typing import Callable, Self, Any, overload
|
8
8
|
from dataclasses import dataclass
|
9
|
-
from .
|
10
|
-
|
11
|
-
_app_namespace: str = ""
|
9
|
+
from . import _engine # type: ignore
|
12
10
|
|
13
11
|
|
14
12
|
def get_app_namespace(*, trailing_delimiter: str | None = None) -> str:
|
15
13
|
"""Get the application namespace. Append the `trailing_delimiter` if not empty."""
|
16
|
-
|
17
|
-
|
18
|
-
|
14
|
+
app_namespace: str = _engine.get_app_namespace()
|
15
|
+
if app_namespace == "" or trailing_delimiter is None:
|
16
|
+
return app_namespace
|
17
|
+
return f"{app_namespace}{trailing_delimiter}"
|
19
18
|
|
20
19
|
|
21
20
|
def split_app_namespace(full_name: str, delimiter: str) -> tuple[str, str]:
|
@@ -26,14 +25,6 @@ def split_app_namespace(full_name: str, delimiter: str) -> tuple[str, str]:
|
|
26
25
|
return (parts[0], parts[1])
|
27
26
|
|
28
27
|
|
29
|
-
def set_app_namespace(app_namespace: str) -> None:
|
30
|
-
"""Set the application namespace."""
|
31
|
-
if app_namespace:
|
32
|
-
validate_app_namespace_name(app_namespace)
|
33
|
-
global _app_namespace # pylint: disable=global-statement
|
34
|
-
_app_namespace = app_namespace
|
35
|
-
|
36
|
-
|
37
28
|
@dataclass
|
38
29
|
class DatabaseConnectionSpec:
|
39
30
|
"""
|
@@ -1,21 +1,22 @@
|
|
1
|
-
cocoindex-0.2.
|
2
|
-
cocoindex-0.2.
|
3
|
-
cocoindex-0.2.
|
4
|
-
cocoindex-0.2.
|
5
|
-
cocoindex/__init__.py,sha256=
|
6
|
-
cocoindex/_engine.abi3.so,sha256=
|
7
|
-
cocoindex/auth_registry.py,sha256=
|
8
|
-
cocoindex/cli.py,sha256=
|
9
|
-
cocoindex/convert.py,sha256=
|
10
|
-
cocoindex/flow.py,sha256=
|
1
|
+
cocoindex-0.2.11.dist-info/METADATA,sha256=u-dE4rSfVStoZHzhM01B2D0N-8AqLGiV3NAYs1zs19U,12999
|
2
|
+
cocoindex-0.2.11.dist-info/WHEEL,sha256=IG-K_sumA04dNIpy5J1b3kZo_HELEjvxxDWHD32zTgo,107
|
3
|
+
cocoindex-0.2.11.dist-info/entry_points.txt,sha256=_NretjYVzBdNTn7dK-zgwr7YfG2afz1u1uSE-5bZXF8,46
|
4
|
+
cocoindex-0.2.11.dist-info/licenses/THIRD_PARTY_NOTICES.html,sha256=o8g8gIN-zaK02_7ZMPlqompannwA2SwEB0e30CKRN1E,717804
|
5
|
+
cocoindex/__init__.py,sha256=AsoNLBgjJ-1AEKtwTnENJM9dEilHTq6rJ4qWUzGKSdc,2428
|
6
|
+
cocoindex/_engine.abi3.so,sha256=d0wC4YgWo0t3KxjFuB04IUlfX8lkIHtmcu8rwigu0IY,73406520
|
7
|
+
cocoindex/auth_registry.py,sha256=9GgeuyE48vYhsJQJgI-uRjUviZkrQE63MUenP3OREko,1145
|
8
|
+
cocoindex/cli.py,sha256=69X30bFTFdM7c0_6lgIHR19CeQ7UEkobEQYihy8IdOQ,21599
|
9
|
+
cocoindex/convert.py,sha256=Apk5PU4XGnSvEE2HMRN2W9H4ApBIHnkupegv_-TaVfA,22152
|
10
|
+
cocoindex/flow.py,sha256=u_ta8wW5oGTDINs2dY4d_1hybySp3wuX79VJ4BDXZDc,39767
|
11
11
|
cocoindex/functions.py,sha256=09erNt3WbzY9l1KER-akBF2O5-6xEahV2ORBECaL6yk,12260
|
12
12
|
cocoindex/index.py,sha256=j93B9jEvvLXHtpzKWL88SY6wCGEoPgpsQhEGHlyYGFg,540
|
13
|
-
cocoindex/lib.py,sha256=
|
13
|
+
cocoindex/lib.py,sha256=0XheDF7fiFdqExpdqzU-VKun_Zll6DwZ5JfTm7u42aY,2284
|
14
14
|
cocoindex/llm.py,sha256=Pv_cdnRngTLtuLU9AUmS8izIHhcKVnuBNolC33f9BDI,851
|
15
|
-
cocoindex/op.py,sha256=
|
15
|
+
cocoindex/op.py,sha256=SRtI5ApgRQJHNsljd9Z2qNdS68_pYYQj9oVg3Bqc8W4,21416
|
16
16
|
cocoindex/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
17
|
-
cocoindex/
|
18
|
-
cocoindex/
|
17
|
+
cocoindex/query_handler.py,sha256=o9XFnpXWa00pAFImJ9oq-_kjI7w69dgCalkq63H9mA8,1192
|
18
|
+
cocoindex/runtime.py,sha256=4NxcltaDZvA3RR3Pnt6gH_f99jcWSyMH_1Xi5BjbtwY,1342
|
19
|
+
cocoindex/setting.py,sha256=1Dx8ktjwf-8BiXrbsmfn5Mzudb2SQYqFdRnSNGVKaLk,4960
|
19
20
|
cocoindex/setup.py,sha256=7uIHKN4FOCuoidPXcKyGTrkqpkl9luL49-6UcnMxYzw,3068
|
20
21
|
cocoindex/sources.py,sha256=FYz7cWYasLGDaYoIEQ1dF2uprgUETHWsTIrIS7n6pQE,3188
|
21
22
|
cocoindex/subprocess_exec.py,sha256=r1xO84uek4VP4I6i87JMwsH5xFm3vKW0ABvgn0jskt4,10088
|
@@ -30,4 +31,4 @@ cocoindex/typing.py,sha256=lEQYIzAGVKQp6RnhyeopY9Q7xEED7yQj3ZMxvTPblV8,14200
|
|
30
31
|
cocoindex/user_app_loader.py,sha256=bc3Af-gYRxJ9GpObtpjegZY855oQBCv5FGkrkWV2yGY,1873
|
31
32
|
cocoindex/utils.py,sha256=hUhX-XV6XGCtJSEIpBOuDv6VvqImwPlgBxztBTw7u0U,598
|
32
33
|
cocoindex/validation.py,sha256=PZnJoby4sLbsmPv9fOjOQXuefjfZ7gmtsiTGU8SH-tc,3090
|
33
|
-
cocoindex-0.2.
|
34
|
+
cocoindex-0.2.11.dist-info/RECORD,,
|
@@ -45,7 +45,7 @@
|
|
45
45
|
<h2>Overview of licenses:</h2>
|
46
46
|
<ul class="licenses-overview">
|
47
47
|
<li><a href="#Apache-2.0">Apache License 2.0</a> (412)</li>
|
48
|
-
<li><a href="#MIT">MIT License</a> (
|
48
|
+
<li><a href="#MIT">MIT License</a> (125)</li>
|
49
49
|
<li><a href="#Unicode-3.0">Unicode License v3</a> (19)</li>
|
50
50
|
<li><a href="#ISC">ISC License</a> (8)</li>
|
51
51
|
<li><a href="#BSD-3-Clause">BSD 3-Clause "New" or "Revised" License</a> (6)</li>
|
@@ -2428,7 +2428,7 @@ Software.
|
|
2428
2428
|
<h3 id="Apache-2.0">Apache License 2.0</h3>
|
2429
2429
|
<h4>Used by:</h4>
|
2430
2430
|
<ul class="license-used-by">
|
2431
|
-
<li><a href=" https://crates.io/crates/cocoindex ">cocoindex 0.2.
|
2431
|
+
<li><a href=" https://crates.io/crates/cocoindex ">cocoindex 0.2.11</a></li>
|
2432
2432
|
<li><a href=" https://github.com/awesomized/crc-fast-rust ">crc-fast 1.3.0</a></li>
|
2433
2433
|
<li><a href=" https://github.com/qdrant/rust-client ">qdrant-client 1.15.0</a></li>
|
2434
2434
|
</ul>
|
@@ -11376,6 +11376,20 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
|
|
11376
11376
|
IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
11377
11377
|
DEALINGS IN THE SOFTWARE.
|
11378
11378
|
</pre>
|
11379
|
+
</li>
|
11380
|
+
<li class="license">
|
11381
|
+
<h3 id="MIT">MIT License</h3>
|
11382
|
+
<h4>Used by:</h4>
|
11383
|
+
<ul class="license-used-by">
|
11384
|
+
<li><a href=" https://github.com/JoranHonig/tree-sitter-solidity ">tree-sitter-solidity 1.2.13</a></li>
|
11385
|
+
</ul>
|
11386
|
+
<pre class="license-text">Copyright (c) 2020 Joran Honig
|
11387
|
+
|
11388
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
11389
|
+
|
11390
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
11391
|
+
|
11392
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</pre>
|
11379
11393
|
</li>
|
11380
11394
|
<li class="license">
|
11381
11395
|
<h3 id="MIT">MIT License</h3>
|
File without changes
|
File without changes
|