From d9e97ea1baf315305256e4c040a123adfbcf5d84 Mon Sep 17 00:00:00 2001 From: Joan Antoni RE Date: Wed, 31 Jul 2024 16:36:36 +0200 Subject: [PATCH 1/5] Fix matryoshka dimension for new KBs with /vectorsets (#2364) * Fix matryoshka dimension for new KBs with /vectorsets * Add log if is an invalid matryoshka dimension --- .../src/nucliadb/common/datamanagers/kb.py | 33 ++++++++++++++----- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/nucliadb/src/nucliadb/common/datamanagers/kb.py b/nucliadb/src/nucliadb/common/datamanagers/kb.py index 5fa0223442..5fb985dd7f 100644 --- a/nucliadb/src/nucliadb/common/datamanagers/kb.py +++ b/nucliadb/src/nucliadb/common/datamanagers/kb.py @@ -108,21 +108,38 @@ async def get_matryoshka_vector_dimension( vectorset_id: Optional[str] = None, ) -> Optional[int]: """Return vector dimension for matryoshka models""" - model_metadata = await get_model_metadata(txn, kbid=kbid) - dimension = None - if len(model_metadata.matryoshka_dimensions) > 0 and model_metadata.vector_dimension: - if model_metadata.vector_dimension in model_metadata.matryoshka_dimensions: - dimension = model_metadata.vector_dimension + from . import vectorsets + + async for _, vs in vectorsets.iter(txn, kbid=kbid): + if vs.vectorset_index_config.vector_dimension in vs.matryoshka_dimensions: + return vs.vectorset_index_config.vector_dimension else: logger.error( "KB has an invalid matryoshka dimension!", extra={ "kbid": kbid, - "vector_dimension": model_metadata.vector_dimension, - "matryoshka_dimensions": model_metadata.matryoshka_dimensions, + "vector_dimension": vs.vectorset_index_config.vector_dimension, + "matryoshka_dimensions": vs.matryoshka_dimensions, }, ) - return dimension + return None + else: + # fallback for KBs that don't have vectorset + model_metadata = await get_model_metadata(txn, kbid=kbid) + dimension = None + if len(model_metadata.matryoshka_dimensions) > 0 and model_metadata.vector_dimension: + if model_metadata.vector_dimension in model_metadata.matryoshka_dimensions: + dimension = model_metadata.vector_dimension + else: + logger.error( + "KB has an invalid matryoshka dimension!", + extra={ + "kbid": kbid, + "vector_dimension": model_metadata.vector_dimension, + "matryoshka_dimensions": model_metadata.matryoshka_dimensions, + }, + ) + return dimension async def get_external_index_provider_metadata( From 0f84ed89713d6b66f3f83b3de6121fb8ec7d34f9 Mon Sep 17 00:00:00 2001 From: Joan Antoni RE Date: Wed, 31 Jul 2024 17:07:06 +0200 Subject: [PATCH 2/5] Fallback vectorset fix (#2365) --- nucliadb_core/src/vectors.rs | 17 +++++++++++++++-- nucliadb_node/src/shards/shard_writer.rs | 10 +++++++--- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/nucliadb_core/src/vectors.rs b/nucliadb_core/src/vectors.rs index e988052bae..0a27af4a87 100644 --- a/nucliadb_core/src/vectors.rs +++ b/nucliadb_core/src/vectors.rs @@ -107,6 +107,7 @@ pub trait VectorWriter: std::fmt::Debug + Send + Sync { pub struct ResourceWrapper<'a> { resource: &'a noderesources::Resource, vectorset: Option, + fallback_to_default_vectorset: bool, } impl<'a> From<&'a noderesources::Resource> for ResourceWrapper<'a> { @@ -114,15 +115,21 @@ impl<'a> From<&'a noderesources::Resource> for ResourceWrapper<'a> { Self { resource: value, vectorset: None, + fallback_to_default_vectorset: false, } } } impl<'a> ResourceWrapper<'a> { - pub fn new_vectorset_resource(resource: &'a noderesources::Resource, vectorset: &str) -> Self { + pub fn new_vectorset_resource( + resource: &'a noderesources::Resource, + vectorset: &str, + fallback_to_default_vectorset: bool, + ) -> Self { Self { resource, vectorset: Some(vectorset.to_string()), + fallback_to_default_vectorset, } } @@ -136,7 +143,13 @@ impl<'a> ResourceWrapper<'a> { let sentences = if let Some(vectorset) = &self.vectorset { // indexing a vectorset, we should return only paragraphs from this vectorset. // If vectorset is not found, we'll skip this paragraph - paragraph.vectorsets_sentences.get(vectorset).map(|x| &x.sentences) + if let Some(vectorset_sentences) = paragraph.vectorsets_sentences.get(vectorset) { + Some(&vectorset_sentences.sentences) + } else if self.fallback_to_default_vectorset { + Some(¶graph.sentences) + } else { + None + } } else { // Default vectors index (no vectorset) Some(¶graph.sentences) diff --git a/nucliadb_node/src/shards/shard_writer.rs b/nucliadb_node/src/shards/shard_writer.rs index d153dcfa45..f02b4454e9 100644 --- a/nucliadb_node/src/shards/shard_writer.rs +++ b/nucliadb_node/src/shards/shard_writer.rs @@ -361,15 +361,19 @@ impl ShardWriter { }; let mut vector_tasks = vec![]; + let vectorset_count = indexes.vectors_indexes.len(); for (vectorset, vector_writer) in indexes.vectors_indexes.iter_mut() { vector_tasks.push(|| { run_with_telemetry(info_span!(parent: &span, "vector set_resource"), || { debug!("Vector service starts set_resource"); + let vectorset_resource = match vectorset.as_str() { "" | DEFAULT_VECTORS_INDEX_NAME => (&resource).into(), - vectorset => { - nucliadb_core::vectors::ResourceWrapper::new_vectorset_resource(&resource, vectorset) - } + vectorset => nucliadb_core::vectors::ResourceWrapper::new_vectorset_resource( + &resource, + vectorset, + vectorset_count == 1, + ), }; let result = vector_writer.set_resource(vectorset_resource); debug!("Vector service ends set_resource"); From c9a84194e6bc65603d69b3f63c1273258b16170f Mon Sep 17 00:00:00 2001 From: Javier Torres Date: Thu, 1 Aug 2024 10:28:42 +0200 Subject: [PATCH 3/5] Fix Matryohka check (#2366) --- .../src/nucliadb/common/datamanagers/kb.py | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/nucliadb/src/nucliadb/common/datamanagers/kb.py b/nucliadb/src/nucliadb/common/datamanagers/kb.py index 5fb985dd7f..141b4b2237 100644 --- a/nucliadb/src/nucliadb/common/datamanagers/kb.py +++ b/nucliadb/src/nucliadb/common/datamanagers/kb.py @@ -111,18 +111,19 @@ async def get_matryoshka_vector_dimension( from . import vectorsets async for _, vs in vectorsets.iter(txn, kbid=kbid): - if vs.vectorset_index_config.vector_dimension in vs.matryoshka_dimensions: - return vs.vectorset_index_config.vector_dimension - else: - logger.error( - "KB has an invalid matryoshka dimension!", - extra={ - "kbid": kbid, - "vector_dimension": vs.vectorset_index_config.vector_dimension, - "matryoshka_dimensions": vs.matryoshka_dimensions, - }, - ) - return None + if len(vs.matryoshka_dimensions) > 0 and vs.vectorset_index_config.vector_dimension: + if vs.vectorset_index_config.vector_dimension in vs.matryoshka_dimensions: + return vs.vectorset_index_config.vector_dimension + else: + logger.error( + "KB has an invalid matryoshka dimension!", + extra={ + "kbid": kbid, + "vector_dimension": vs.vectorset_index_config.vector_dimension, + "matryoshka_dimensions": vs.matryoshka_dimensions, + }, + ) + return None else: # fallback for KBs that don't have vectorset model_metadata = await get_model_metadata(txn, kbid=kbid) From 3d39a584650964559c06315944ea6876f5c23c2b Mon Sep 17 00:00:00 2001 From: Ferran Llamas Date: Thu, 1 Aug 2024 11:34:20 +0200 Subject: [PATCH 4/5] Safer header parsing on telemetry (#2367) --- .../src/nucliadb_telemetry/fastapi/tracing.py | 18 +++++++++++++----- .../tests/unit/fastapi/test_tracing.py | 10 +++++++++- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/nucliadb_telemetry/src/nucliadb_telemetry/fastapi/tracing.py b/nucliadb_telemetry/src/nucliadb_telemetry/fastapi/tracing.py index ebef0bba1e..478f7532bc 100644 --- a/nucliadb_telemetry/src/nucliadb_telemetry/fastapi/tracing.py +++ b/nucliadb_telemetry/src/nucliadb_telemetry/fastapi/tracing.py @@ -82,7 +82,9 @@ def get(self, carrier: dict, key: str) -> typing.Optional[typing.List[str]]: # ASGI header keys are in lower case key = key.lower() decoded = [ - _value.decode("utf8") for (_key, _value) in headers if _key.decode("utf8").lower() == key + _value.decode("utf8", errors="replace") + for (_key, _value) in headers + if _key.decode("utf8", errors="replace").lower() == key ] if not decoded: return None @@ -90,7 +92,7 @@ def get(self, carrier: dict, key: str) -> typing.Optional[typing.List[str]]: def keys(self, carrier: dict) -> typing.List[str]: headers = carrier.get("headers") or [] - return [_key.decode("utf8") for (_key, _) in headers] + return [_key.decode("utf8", errors="replace") for (_key, _) in headers] asgi_getter = ASGIGetter() @@ -125,7 +127,7 @@ def collect_request_attributes(scope): query_string = scope.get("query_string") if query_string and http_url: if isinstance(query_string, bytes): - query_string = query_string.decode("utf8") + query_string = query_string.decode("utf8", errors="replace") http_url += "?" + urllib.parse.unquote(query_string) result = { @@ -167,7 +169,10 @@ def collect_custom_request_headers_attributes(scope): ) # Decode headers before processing. - headers = {_key.decode("utf8"): _value.decode("utf8") for (_key, _value) in scope.get("headers")} + headers = { + _key.decode("utf8", errors="replace"): _value.decode("utf8", errors="replace") + for (_key, _value) in scope.get("headers") + } return sanitize.sanitize_header_values( headers, @@ -186,7 +191,10 @@ def collect_custom_response_headers_attributes(message): ) # Decode headers before processing. - headers = {_key.decode("utf8"): _value.decode("utf8") for (_key, _value) in message.get("headers")} + headers = { + _key.decode("utf8", errors="replace"): _value.decode("utf8", errors="replace") + for (_key, _value) in message.get("headers") + } return sanitize.sanitize_header_values( headers, diff --git a/nucliadb_telemetry/tests/unit/fastapi/test_tracing.py b/nucliadb_telemetry/tests/unit/fastapi/test_tracing.py index 73a9612e67..f8967404e2 100644 --- a/nucliadb_telemetry/tests/unit/fastapi/test_tracing.py +++ b/nucliadb_telemetry/tests/unit/fastapi/test_tracing.py @@ -21,7 +21,10 @@ import pytest from opentelemetry.trace import format_trace_id -from nucliadb_telemetry.fastapi.tracing import CaptureTraceIdMiddleware +from nucliadb_telemetry.fastapi.tracing import ( + CaptureTraceIdMiddleware, + collect_custom_request_headers_attributes, +) @pytest.fixture(scope="function") @@ -59,3 +62,8 @@ async def test_capture_trace_id_middleware_appends_trace_id_header_to_exposed(tr response = await mdw.dispatch(request, call_next) assert response.headers["Access-Control-Expose-Headers"] == "Foo-Bar,X-Header,X-NUCLIA-TRACE-ID" + + +def test_collect_custom_request_headers_attributes(): + scope = {"headers": [[b"x-filename", b"Synth\xe8ses\\3229-navigation.pdf"]]} + collect_custom_request_headers_attributes(scope) From 95f0d9383a2930dc58a84623d1ab4d4b993412f9 Mon Sep 17 00:00:00 2001 From: Javier Torres Date: Thu, 1 Aug 2024 11:53:17 +0200 Subject: [PATCH 5/5] Update mr.flagly to support multiple variants (#2368) --- nucliadb_utils/requirements.txt | 2 +- pdm.lock | 158 +++++++++++++++++++------------- 2 files changed, 93 insertions(+), 67 deletions(-) diff --git a/nucliadb_utils/requirements.txt b/nucliadb_utils/requirements.txt index df0be0d0e7..7708d4355e 100644 --- a/nucliadb_utils/requirements.txt +++ b/nucliadb_utils/requirements.txt @@ -8,7 +8,7 @@ nats-py[nkeys]>=2.6.0 PyNaCl pyjwt>=2.4.0 memorylru>=1.1.2 -mrflagly +mrflagly>=0.2.9 # automatically bumped during release nucliadb-protos diff --git a/pdm.lock b/pdm.lock index d5107c28dc..e242b248e8 100644 --- a/pdm.lock +++ b/pdm.lock @@ -3,10 +3,13 @@ [metadata] groups = ["default", "dev", "sdk", "sidecar"] -strategy = ["cross_platform", "inherit_metadata"] -lock_version = "4.4.2" +strategy = ["inherit_metadata"] +lock_version = "4.5.0" content_hash = "sha256:f0357caf0e4cc3f84eff51945696b3bedb44e66a6ab9aaf9e8af1996c8610aff" +[[metadata.targets]] +requires_python = ">=3.9" + [[package]] name = "aiobotocore" version = "2.13.1" @@ -173,6 +176,9 @@ version = "0.7.0" requires_python = ">=3.8" summary = "Reusable constraint types to use with typing.Annotated" groups = ["default", "dev", "sdk", "sidecar"] +dependencies = [ + "typing-extensions>=4.0.0; python_version < \"3.9\"", +] files = [ {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, @@ -243,6 +249,9 @@ version = "4.0.3" requires_python = ">=3.7" summary = "Timeout context manager for asyncio programs" groups = ["default", "dev", "sdk", "sidecar"] +dependencies = [ + "typing-extensions>=3.6.5; python_version < \"3.8\"", +] files = [ {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, @@ -254,6 +263,9 @@ version = "23.2.0" requires_python = ">=3.7" summary = "Classes Without Boilerplate" groups = ["default", "dev", "sdk", "sidecar"] +dependencies = [ + "importlib-metadata; python_version < \"3.8\"", +] files = [ {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"}, {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"}, @@ -506,6 +518,7 @@ summary = "Composable command line interface toolkit" groups = ["default", "dev", "sidecar"] dependencies = [ "colorama; platform_system == \"Windows\"", + "importlib-metadata; python_version < \"3.8\"", ] files = [ {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, @@ -1029,6 +1042,7 @@ groups = ["default", "dev"] dependencies = [ "google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0,<3.0.0dev,>=1.31.6", "google-auth<3.0dev,>=1.25.0", + "importlib-metadata>1.0.0; python_version < \"3.8\"", ] files = [ {file = "google-cloud-core-2.4.1.tar.gz", hash = "sha256:9b7749272a812bde58fff28868d0c5e2f585b82f37e09a1f6ed2d4d10f134073"}, @@ -1330,6 +1344,9 @@ version = "0.14.0" requires_python = ">=3.7" summary = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" groups = ["default", "dev", "sdk", "sidecar"] +dependencies = [ + "typing-extensions; python_version < \"3.8\"", +] files = [ {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, @@ -1358,6 +1375,7 @@ summary = "A comprehensive HTTP client library." groups = ["default", "dev", "sidecar"] dependencies = [ "pyparsing!=3.0.0,!=3.0.1,!=3.0.2,!=3.0.3,<4,>=2.4.2; python_version > \"3.0\"", + "pyparsing<3,>=2.4.2; python_version < \"3.0\"", ] files = [ {file = "httplib2-0.22.0-py3-none-any.whl", hash = "sha256:14ae0a53c1ba8f3d37e9e27cf37eabb0fb9980f435ba405d546948b009dd64dc"}, @@ -1449,6 +1467,7 @@ requires_python = ">=3.8" summary = "Read metadata from Python packages" groups = ["default", "dev", "sidecar"] dependencies = [ + "typing-extensions>=3.6.4; python_version < \"3.8\"", "zipp>=0.5", ] files = [ @@ -1513,7 +1532,9 @@ summary = "An implementation of JSON Schema validation for Python" groups = ["dev"] dependencies = [ "attrs>=22.2.0", + "importlib-resources>=1.4.0; python_version < \"3.9\"", "jsonschema-specifications>=2023.03.6", + "pkgutil-resolve-name>=1.3.10; python_version < \"3.9\"", "referencing>=0.28.4", "rpds-py>=0.7.1", ] @@ -1529,6 +1550,7 @@ requires_python = ">=3.8" summary = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" groups = ["dev"] dependencies = [ + "importlib-resources>=1.4.0; python_version < \"3.9\"", "referencing>=0.31.0", ] files = [ @@ -1858,52 +1880,44 @@ files = [ [[package]] name = "mrflagly" -version = "0.2.8" +version = "0.2.9" requires_python = ">=3.7" summary = "No nonsense feature flagging system" groups = ["default", "dev", "sidecar"] files = [ - {file = "mrflagly-0.2.8-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:7d4836b205fc1ecad266e5fa0cb146cd2fab8d43ba0622eba08346ed6dab5ba2"}, - {file = "mrflagly-0.2.8-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:92a3dfea4599b62ab1f948b8cffd80f48a849bc47a8d0edb0a6185b16ded9d54"}, - {file = "mrflagly-0.2.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a767d0d3cb8195481492e10878512b629c4920f172112a802c0d6ce8435e8d2e"}, - {file = "mrflagly-0.2.8-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1703f79ccbb122d11b3d92ba81882ed718d99a331e1fc006dae114c0fbccea20"}, - {file = "mrflagly-0.2.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01c8f3c80da4b9bf5df6ed63fc98982980cb55a050ea36590cf9dc6f40d66e57"}, - {file = "mrflagly-0.2.8-cp310-none-win32.whl", hash = "sha256:b4c89e3e078ebc291ad7edeab34fd16a91af661f97f508bc01a562a0f8d2a4bd"}, - {file = "mrflagly-0.2.8-cp310-none-win_amd64.whl", hash = "sha256:333ecd2b6f996e252eb1ee80b878ff8637f05bd554d3fac808cc49e1150bd381"}, - {file = "mrflagly-0.2.8-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:e4da6f595b4d146fdfda8a4e117eb0c493ff610b30ed0ca019a2b08b8b784d71"}, - {file = "mrflagly-0.2.8-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:aee4903cc0ea00a9cef74f33b9d7f7a79e919d4c3a36f69297f32575bafd6414"}, - {file = "mrflagly-0.2.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3518464d9ae887a17f279641097537cc326bace6bd206f3957d76d44ded4892"}, - {file = "mrflagly-0.2.8-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d6d6538cfce4772f1a91676dac724259693de4d3146fc03666a1ff1e0cb30e38"}, - {file = "mrflagly-0.2.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dcefe867360a97b4cf424920117d4e88fec978353293b52d3ee71de5d78ceac"}, - {file = "mrflagly-0.2.8-cp311-none-win32.whl", hash = "sha256:25079ad5c06944fa1302467a1f10953a83c89c4dae8ebb11ab6ed9fd7fe7951d"}, - {file = "mrflagly-0.2.8-cp311-none-win_amd64.whl", hash = "sha256:860a0423e17c898f84ba19055382ff650d17794ca8dfd4e7193917c66cd90f57"}, - {file = "mrflagly-0.2.8-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:a51d8a1f351542cdf27f959c77f3a178efa3b76db24eb116d9ffa6d796c5e4b5"}, - {file = "mrflagly-0.2.8-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:3c9963e4e26fa6af2ff9b05e4987831346f50b4e90ea59dbf72bbcd1f226dca8"}, - {file = "mrflagly-0.2.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d59948caa0d487edd027077d64c0eadc1166e3b03413004d60cc10067d0ec132"}, - {file = "mrflagly-0.2.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:103f5db74d2915d217c71c6a1739ba42a5a6f4fc4b6e695e99b17f396d401a5e"}, - {file = "mrflagly-0.2.8-cp312-none-win32.whl", hash = "sha256:1364f45ebe66f786a22b26b863a8d042ef3c4467b07fa70a73feaaa51b5d9dec"}, - {file = "mrflagly-0.2.8-cp312-none-win_amd64.whl", hash = "sha256:e32d4b98e4bc1ea30bc0e9325f108a07f8ed9a9962a9928f4f1222d7abf8c9cb"}, - {file = "mrflagly-0.2.8-cp39-cp39-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:d7c96f0624b9e52212ddef2b5a4fdd62b074970940bb86c42ef4b93cd387f5fa"}, - {file = "mrflagly-0.2.8-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:7a6a99b1d0382f37bb73f60d1a0b698ade15647457ef702745936823df5a0cb3"}, - {file = "mrflagly-0.2.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:faa5f477402d9139d470ee2f50ffe44f6ed9e6fd6c54da1196daf3e48c9b17f3"}, - {file = "mrflagly-0.2.8-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e8e4da5e65ad323d1c19f8524b1335d155f385455cdec8527958a77564208f68"}, - {file = "mrflagly-0.2.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ca242f7aa59bb5adb0dbba24fa853ba0d6551da341c7fb23c4716c71460cfbe"}, - {file = "mrflagly-0.2.8-cp39-none-win32.whl", hash = "sha256:8381f7aaca3ed1930a0370985016d09f1582d89f4e83f7c7c69485c5bc005e93"}, - {file = "mrflagly-0.2.8-cp39-none-win_amd64.whl", hash = "sha256:e80f98b473c9fd0269dc369a657c4e22fb2e881686c3348364a1aa200e4f1628"}, - {file = "mrflagly-0.2.8-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a2ba0faf39e0ef1405f790e70fb80c16bed74a41c1fe7bd967e21de46a3d5565"}, - {file = "mrflagly-0.2.8-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aacf27027a2395dbf45a48b5ceeb32de22a0b03629057fa2ca40cf61fdf1a06d"}, - {file = "mrflagly-0.2.8-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d84bf6f58c1d995d0af95f5a44146b0264ffdbdba917e84f4f2730598daf9268"}, - {file = "mrflagly-0.2.8-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:587e3432ac3f921d82555d603afa5f9fa2eb4ad1883b659993eb26911c72e115"}, - {file = "mrflagly-0.2.8-pp37-pypy37_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2a30f382b1cb3c289c96a8963c270b128bd736ded59a3b8076b5bb8a69f59cac"}, - {file = "mrflagly-0.2.8-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7195bccc9baf57bdc11a8c427a81dffe649512ca1e937f9d7771cb4bfb6e7042"}, - {file = "mrflagly-0.2.8-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a6d37747667fa558871aaefdf903842ac72d2ae5dbd397778213db255d535873"}, - {file = "mrflagly-0.2.8-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f6f5ec383df0a38af19ec059bcd7b7bf4544771b373c9b5a74968faafb4e2dc"}, - {file = "mrflagly-0.2.8-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d184b6117690e637cae02162ea818507a94010d4fd7302b85c301ba7ee87aa5b"}, - {file = "mrflagly-0.2.8-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2a73c9412bb61bf40c9e2ab659eccbf8789da84750f7c3e47f43eb4ab006cef"}, - {file = "mrflagly-0.2.8-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8c75e2d51e541224d6dda216354cc24a37381ecffb0d789c1736165c6d64b0e9"}, - {file = "mrflagly-0.2.8-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4eaa781deed19596a3fd503ce9916a0a7ecc6c70176ec058d7b29ca64b9f439"}, - {file = "mrflagly-0.2.8-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c8c533785aebbde35489977ee30fcfe03ef4cf6fb71eb9aebd839dc9c1119ea0"}, - {file = "mrflagly-0.2.8-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dbb1ed71c11a43a34b883c296b934ad9d7ec42526b4f358fac30f0300d1cbeea"}, + {file = "mrflagly-0.2.9-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:6738a9c57d86f5a2fd460a16ca0812ad406a02b32ac8c2f42258b313a5a33865"}, + {file = "mrflagly-0.2.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bada2b0bf83c87d9e196fe27006a0725a24f98ba4b1303831c985e734b60aed8"}, + {file = "mrflagly-0.2.9-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bed5289eda4068a88a358d3e916d30f9e7dd283425b56a15420f543b43dbdccd"}, + {file = "mrflagly-0.2.9-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c0a13b600b0975d83234bd4b99c5e491a681e1897c84ea8602d7a669e2a251e"}, + {file = "mrflagly-0.2.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f90778d11c032ce497b81292ff273d55278e9d346d21e2a25735ca350499ed0"}, + {file = "mrflagly-0.2.9-cp310-none-win32.whl", hash = "sha256:e198291edcbf8ba0b8f9a69e067a43135f75f1f8b3e964a5c4fee55d7138944b"}, + {file = "mrflagly-0.2.9-cp310-none-win_amd64.whl", hash = "sha256:2748715f0fb913ef8a3a6991581e14179b620a27225721732c8ca492f056cde4"}, + {file = "mrflagly-0.2.9-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:1bc0a83a2d909f7e8a8d258dfb8a90b2e34f88e5760f9c7e926c58060a8dd24e"}, + {file = "mrflagly-0.2.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6b6276c8a14c3b05e47b6e7dc13145802dde5b314deda57652e0d3748f9db31"}, + {file = "mrflagly-0.2.9-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dac6e8ab29025ac258ce7b8cbf2dbd3cd79ce6ee2f82231b3039dd89db0e4e0a"}, + {file = "mrflagly-0.2.9-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8393d211943228051aaa5dafd0d42d7f9308679870072dc69e641d0669be9a7b"}, + {file = "mrflagly-0.2.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22df961fd6de5487f20d12124ea24562c3e3a728d2f294734046edeb385557d8"}, + {file = "mrflagly-0.2.9-cp311-none-win32.whl", hash = "sha256:d339395e340042bc976fa238609da4bd622fce425e9de1cd2d29d954ef936e63"}, + {file = "mrflagly-0.2.9-cp311-none-win_amd64.whl", hash = "sha256:7e6f515ac97d0547271aa22f55e2f9bf28e172c9ec76d6283e571eb4254330bc"}, + {file = "mrflagly-0.2.9-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:327afb552374bb5aa41cf647c6aa1f3749d9fc4dd282793b5453e01e1a56d80b"}, + {file = "mrflagly-0.2.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96873b2a554cb330a85e8b3ff009afe34f10908ab065b3b6a9dcfe47145a0ac2"}, + {file = "mrflagly-0.2.9-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bdec4a105d972ad84fdb64a17837676baa791b9cdb015ab5a5cb21d973dd3405"}, + {file = "mrflagly-0.2.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95f0115c139b276074aee8fa42fc794591e970faed55f5275301bbca3a2c25d0"}, + {file = "mrflagly-0.2.9-cp312-none-win32.whl", hash = "sha256:c76f85bdb6606a96ae791572e604f44087e88fe981e9eb37d3593d86e11bfd92"}, + {file = "mrflagly-0.2.9-cp312-none-win_amd64.whl", hash = "sha256:467c400c33f1ea59cc10c4b99de576d454d7acf77927fc56fcdbdf57bf657ab7"}, + {file = "mrflagly-0.2.9-cp39-cp39-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:3fb3cbedde3171f671ee995f6569cf8fa813cd463ce067ab0d5fa38a49e5745b"}, + {file = "mrflagly-0.2.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27b2ad79de778d066d9f55e1e35b3242232753044de5ed127ee82cc7efbec77e"}, + {file = "mrflagly-0.2.9-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:86d99d0a8174d32ed81f8583fb524b0225397aaebdb6a8d61275b34d28c76f40"}, + {file = "mrflagly-0.2.9-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0652c0df3265cc8d336369f7b30e2f4651772ebfc17f8ffaab4f0771a4f187bf"}, + {file = "mrflagly-0.2.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24fcd7d1aba454d4b3c88b97fa33b5ce13ab7745b1623f693d431e6b8915834d"}, + {file = "mrflagly-0.2.9-cp39-none-win32.whl", hash = "sha256:f2c52bcf004d783d32a2e12b8b5de95bc6be7f85dbbcb2c3a71109fa7441f3a9"}, + {file = "mrflagly-0.2.9-cp39-none-win_amd64.whl", hash = "sha256:df52ae9267e4c6dd3beb7510a914940b18f172b1cfb33e233aa26a865e52f15c"}, + {file = "mrflagly-0.2.9-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3eb9cac59a7321bd6b4e65bb023fcf1b83c79f91d7c95cb77a4b77f50a87b2f"}, + {file = "mrflagly-0.2.9-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63083626ff9abf4b10ee420e6ac4fb3137a51c508cb9e97a0f6a86360c54af9b"}, + {file = "mrflagly-0.2.9-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:793c77cfe47035b550ad4c3112c7657142ea51f5de4f35240ec5a4ac6f414006"}, + {file = "mrflagly-0.2.9-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:35c7bb0e5e3adbece507acdf0aea38bb3050c6a010c1449e7b5fd222b7f45add"}, + {file = "mrflagly-0.2.9-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d7e5e110f98f8afc3890b11c7258fa392cd32f97ad9f393b8f98cf78d355a263"}, + {file = "mrflagly-0.2.9-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:664f7026685ff00915222082101c358270b37649da5f9d1179a4529fd8e8cf15"}, ] [[package]] @@ -2120,7 +2134,7 @@ files = [ [[package]] name = "nucliadb" -version = "5.0.0" +version = "5.0.1" requires_python = ">=3.9, <4" editable = true path = "./nucliadb" @@ -2196,7 +2210,7 @@ files = [ [[package]] name = "nucliadb-dataset" -version = "5.0.0" +version = "5.0.1" requires_python = ">=3.9" editable = true path = "./nucliadb_dataset" @@ -2218,7 +2232,7 @@ dependencies = [ [[package]] name = "nucliadb-models" -version = "5.0.0" +version = "5.0.1" requires_python = ">=3.9, <4" editable = true path = "./nucliadb_models" @@ -2240,7 +2254,7 @@ groups = ["default", "dev"] [[package]] name = "nucliadb-protos" -version = "5.0.0" +version = "5.0.1" editable = true path = "./nucliadb_protos/python" summary = "protos for nucliadb" @@ -2255,7 +2269,7 @@ dependencies = [ [[package]] name = "nucliadb-sdk" -version = "5.0.0" +version = "5.0.1" requires_python = ">=3.9, <4" editable = true path = "./nucliadb_sdk" @@ -2271,7 +2285,7 @@ dependencies = [ [[package]] name = "nucliadb-sidecar" -version = "5.0.0" +version = "5.0.1" requires_python = ">=3.9, <4" editable = true path = "./nucliadb_sidecar" @@ -2293,7 +2307,7 @@ dependencies = [ [[package]] name = "nucliadb-telemetry" -version = "5.0.0" +version = "5.0.1" requires_python = ">=3.9" editable = true path = "./nucliadb_telemetry" @@ -2309,7 +2323,7 @@ dependencies = [ [[package]] name = "nucliadb-telemetry" -version = "5.0.0" +version = "5.0.1" extras = ["all"] requires_python = ">=3.9" editable = true @@ -2340,7 +2354,7 @@ dependencies = [ [[package]] name = "nucliadb-utils" -version = "5.0.0" +version = "5.0.1" requires_python = ">=3.9, <4" editable = true path = "./nucliadb_utils" @@ -2351,7 +2365,7 @@ dependencies = [ "aiohttp>=3.9.4", "memorylru>=1.1.2", "mmh3>=3.0.0", - "mrflagly", + "mrflagly>=0.2.9", "nats-py[nkeys]>=2.6.0", "nucliadb-protos", "nucliadb-telemetry", @@ -2364,7 +2378,7 @@ dependencies = [ [[package]] name = "nucliadb-utils" -version = "5.0.0" +version = "5.0.1" extras = ["cache", "fastapi", "storages"] requires_python = ">=3.9, <4" editable = true @@ -2778,6 +2792,7 @@ groups = ["dev"] dependencies = [ "cfgv>=2.0.0", "identify>=1.0.0", + "importlib-metadata; python_version < \"3.8\"", "nodeenv>=0.11.1", "pyyaml>=5.1", "toml", @@ -2854,6 +2869,7 @@ requires_python = ">=3.8" summary = "PostgreSQL database adapter for Python" groups = ["default", "dev"] dependencies = [ + "backports-zoneinfo>=0.2.0; python_version < \"3.9\"", "typing-extensions>=4.4", "tzdata; sys_platform == \"win32\"", ] @@ -3271,6 +3287,9 @@ version = "2.8.0" requires_python = ">=3.7" summary = "JSON Web Token implementation in Python" groups = ["default", "dev", "sidecar"] +dependencies = [ + "typing-extensions; python_version <= \"3.7\"", +] files = [ {file = "PyJWT-2.8.0-py3-none-any.whl", hash = "sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320"}, {file = "PyJWT-2.8.0.tar.gz", hash = "sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de"}, @@ -3284,8 +3303,8 @@ requires_python = ">=3.7" summary = "JSON Web Token implementation in Python" groups = ["default", "dev", "sidecar"] dependencies = [ - "PyJWT==2.8.0", "cryptography>=3.4.0", + "pyjwt==2.8.0", ] files = [ {file = "PyJWT-2.8.0-py3-none-any.whl", hash = "sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320"}, @@ -3320,7 +3339,6 @@ version = "3.1.2" requires_python = ">=3.6.8" summary = "pyparsing module - Classes and methods to define and execute parsing grammars" groups = ["default", "dev", "sidecar"] -marker = "python_version > \"3.0\"" files = [ {file = "pyparsing-3.1.2-py3-none-any.whl", hash = "sha256:f9db75911801ed778fe61bb643079ff86601aca99fcae6345aa67292038fb742"}, {file = "pyparsing-3.1.2.tar.gz", hash = "sha256:a1bac0ce561155ecc3ed78ca94d3c9378656ad4c94c1270de543f621420f94ad"}, @@ -3385,8 +3403,10 @@ requires_python = ">=3.7" summary = "A ``pytest`` fixture for benchmarking code. It will group the tests into rounds that are calibrated to the chosen timer." groups = ["dev"] dependencies = [ + "pathlib2; python_version < \"3.4\"", "py-cpuinfo", "pytest>=3.8", + "statistics; python_version < \"3.4\"", ] files = [ {file = "pytest-benchmark-4.0.0.tar.gz", hash = "sha256:fb0785b83efe599a6a956361c0691ae1dbb5318018561af10f3e915caa0048d1"}, @@ -3592,16 +3612,18 @@ files = [ [[package]] name = "redis" -version = "5.0.7" +version = "5.0.8" requires_python = ">=3.7" summary = "Python client for Redis database and key-value store" groups = ["default", "dev", "sidecar"] dependencies = [ "async-timeout>=4.0.3; python_full_version < \"3.11.3\"", + "importlib-metadata>=1.0; python_version < \"3.8\"", + "typing-extensions; python_version < \"3.8\"", ] files = [ - {file = "redis-5.0.7-py3-none-any.whl", hash = "sha256:0e479e24da960c690be5d9b96d21f7b918a98c0cf49af3b6fafaa0753f93a0db"}, - {file = "redis-5.0.7.tar.gz", hash = "sha256:8f611490b93c8109b50adc317b31bfd84fff31def3475b92e7e80bf39f48175b"}, + {file = "redis-5.0.8-py3-none-any.whl", hash = "sha256:56134ee08ea909106090934adc36f65c9bcbbaecea5b21ba704ba6fb561f8eb4"}, + {file = "redis-5.0.8.tar.gz", hash = "sha256:0c5b10d387568dfe0698c6fad6615750c24170e548ca2deac10c649d463e9870"}, ] [[package]] @@ -3659,6 +3681,7 @@ groups = ["default", "dev", "sidecar"] dependencies = [ "markdown-it-py>=2.2.0", "pygments<3.0.0,>=2.13.0", + "typing-extensions<5.0,>=4.0.0; python_version < \"3.9\"", ] files = [ {file = "rich-13.7.1-py3-none-any.whl", hash = "sha256:4edbae314f59eb482f54e9e30bf00d33350aaa94f4bfcd4e9e3110e64d0d7222"}, @@ -4037,7 +4060,7 @@ files = [ [[package]] name = "types-redis" -version = "4.6.0.20240425" +version = "4.6.0.20240726" requires_python = ">=3.8" summary = "Typing stubs for redis" groups = ["dev"] @@ -4046,8 +4069,8 @@ dependencies = [ "types-pyOpenSSL", ] files = [ - {file = "types-redis-4.6.0.20240425.tar.gz", hash = "sha256:9402a10ee931d241fdfcc04592ebf7a661d7bb92a8dea631279f0d8acbcf3a22"}, - {file = "types_redis-4.6.0.20240425-py3-none-any.whl", hash = "sha256:ac5bc19e8f5997b9e76ad5d9cf15d0392d9f28cf5fc7746ea4a64b989c45c6a8"}, + {file = "types-redis-4.6.0.20240726.tar.gz", hash = "sha256:de2aefcf7afe80057debada8c540463d06c8863de50b8016bd369ccdbcb59b5e"}, + {file = "types_redis-4.6.0.20240726-py3-none-any.whl", hash = "sha256:233062b7120a9908532ec9163d17af74b80fa49a89d510444cad4cac42717378"}, ] [[package]] @@ -4066,13 +4089,13 @@ files = [ [[package]] name = "types-setuptools" -version = "71.1.0.20240724" +version = "71.1.0.20240726" requires_python = ">=3.8" summary = "Typing stubs for setuptools" groups = ["default", "dev"] files = [ - {file = "types-setuptools-71.1.0.20240724.tar.gz", hash = "sha256:ae61c528111a9450e149aedbc1ab0f7874f9bb0dc8f14c3cd200a1f82457050b"}, - {file = "types_setuptools-71.1.0.20240724-py3-none-any.whl", hash = "sha256:90570f0578ed67bb25ada9b3d1432e6727178d2408a7051b27e4a712731df30a"}, + {file = "types-setuptools-71.1.0.20240726.tar.gz", hash = "sha256:85ba28e9461bb1be86ebba4db0f1c2408f2b11115b1966334ea9dc464e29303e"}, + {file = "types_setuptools-71.1.0.20240726-py3-none-any.whl", hash = "sha256:a7775376f36e0ff09bcad236bf265777590a66b11623e48c20bfc30f1444ea36"}, ] [[package]] @@ -4216,6 +4239,7 @@ groups = ["default", "dev", "sidecar"] dependencies = [ "click>=7.0", "h11>=0.8", + "typing-extensions; python_version < \"3.8\"", ] files = [ {file = "uvicorn-0.18.3-py3-none-any.whl", hash = "sha256:0abd429ebb41e604ed8d2be6c60530de3408f250e8d2d84967d85ba9e86fe3af"}, @@ -4288,6 +4312,7 @@ groups = ["dev"] dependencies = [ "distlib<1,>=0.3.7", "filelock<4,>=3.12.2", + "importlib-metadata>=6.6; python_version < \"3.8\"", "platformdirs<5,>=3.9.1", ] files = [ @@ -4514,6 +4539,7 @@ groups = ["default", "dev", "sdk", "sidecar"] dependencies = [ "idna>=2.0", "multidict>=4.0", + "typing-extensions>=3.7.4; python_version < \"3.8\"", ] files = [ {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a8c1df72eb746f4136fe9a2e72b0c9dc1da1cbd23b5372f94b5820ff8ae30e0e"},