From 5a8b5096efae86e8c91ffce7b1c12e635d381577 Mon Sep 17 00:00:00 2001 From: Edgar Brissow Date: Mon, 17 Feb 2025 14:35:21 -0300 Subject: [PATCH 01/19] Renamed agent.h --- src/link_creation_agent/{agent.cc => link_creation_agent.cc} | 2 +- src/link_creation_agent/{agent.h => link_creation_agent.h} | 2 +- src/main/link_creation_agent_main.cc | 2 +- src/tests/cpp/link_creation_agent_test.cc | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) rename src/link_creation_agent/{agent.cc => link_creation_agent.cc} (99%) rename src/link_creation_agent/{agent.h => link_creation_agent.h} (99%) diff --git a/src/link_creation_agent/agent.cc b/src/link_creation_agent/link_creation_agent.cc similarity index 99% rename from src/link_creation_agent/agent.cc rename to src/link_creation_agent/link_creation_agent.cc index 927944b..ec78017 100644 --- a/src/link_creation_agent/agent.cc +++ b/src/link_creation_agent/link_creation_agent.cc @@ -1,4 +1,4 @@ -#include "agent.h" +#include "link_creation_agent.h" #include #include diff --git a/src/link_creation_agent/agent.h b/src/link_creation_agent/link_creation_agent.h similarity index 99% rename from src/link_creation_agent/agent.h rename to src/link_creation_agent/link_creation_agent.h index bd1c36e..da23bf5 100644 --- a/src/link_creation_agent/agent.h +++ b/src/link_creation_agent/link_creation_agent.h @@ -1,5 +1,5 @@ /** - * @file agent.h + * @file link_creation_agent.h * @brief Agent class to handle link creation requests * * This file contains the definition of the LinkCreationAgent class and the diff --git a/src/main/link_creation_agent_main.cc b/src/main/link_creation_agent_main.cc index d0c9018..8504889 100644 --- a/src/main/link_creation_agent_main.cc +++ b/src/main/link_creation_agent_main.cc @@ -3,7 +3,7 @@ #include #include -#include "agent.h" +#include "link_creation_agent.h" using namespace link_creation_agent; using namespace std; diff --git a/src/tests/cpp/link_creation_agent_test.cc b/src/tests/cpp/link_creation_agent_test.cc index cb48be5..32a89ba 100644 --- a/src/tests/cpp/link_creation_agent_test.cc +++ b/src/tests/cpp/link_creation_agent_test.cc @@ -4,7 +4,7 @@ #include #include -#include "agent.h" +#include "link_creation_agent.h" #include "link_create_template.h" using namespace std; From bf23cb71c21ec04cfee01d090af7ba90ec28f0ac Mon Sep 17 00:00:00 2001 From: Edgar Brissow Date: Tue, 18 Feb 2025 16:30:33 -0300 Subject: [PATCH 02/19] Creating links --- src/link_creation_agent/compose.yaml | 6 +- .../das_link_creation_node.h | 1 + src/link_creation_agent/link.cc | 110 ++++++++------- src/link_creation_agent/link.h | 23 ++-- .../link_create_template.cc | 125 ++++++++++-------- .../link_create_template.h | 11 ++ src/tests/cpp/link_creation_agent_test.cc | 14 ++ 7 files changed, 173 insertions(+), 117 deletions(-) diff --git a/src/link_creation_agent/compose.yaml b/src/link_creation_agent/compose.yaml index 7d296f7..ba9c2ae 100644 --- a/src/link_creation_agent/compose.yaml +++ b/src/link_creation_agent/compose.yaml @@ -73,7 +73,7 @@ services: ports: - 37007:37007 volumes: - - ../../../src:/opt + - ../../src:/opt depends_on: - mongodb - redis @@ -97,7 +97,7 @@ services: ports: - 35700:35700 volumes: - - ../../../src:/opt + - ../../src:/opt restart: on-failure depends_on: - mongodb @@ -121,7 +121,7 @@ services: command: ./bin/link_creation_server --type server --config_file /tmp/config volumes: - ./data:/tmp - - ../../../src:/opt + - ../../src:/opt ports: - 9090:9090 restart: on-failure diff --git a/src/link_creation_agent/das_link_creation_node.h b/src/link_creation_agent/das_link_creation_node.h index 25fec81..1af9b04 100644 --- a/src/link_creation_agent/das_link_creation_node.h +++ b/src/link_creation_agent/das_link_creation_node.h @@ -57,6 +57,7 @@ class LinkCreationNode : public StarNode { private: Queue> shared_queue; const string CREATE_LINK = "create_link"; // DAS Node command + const string CREATE_LINK_PROCESSOR = "create_link_processor"; bool shutting_down = false; bool is_server = true; }; diff --git a/src/link_creation_agent/link.cc b/src/link_creation_agent/link.cc index e3c62ca..839a5f0 100644 --- a/src/link_creation_agent/link.cc +++ b/src/link_creation_agent/link.cc @@ -1,73 +1,83 @@ #include "link.h" -#include +#include using namespace link_creation_agent; using namespace std; using namespace query_engine; -Link::Link(string type, vector targets) -{ - this->type = type; - this->targets = targets; -} -Link::Link(QueryAnswer *query_answer, vector link_template) -{ - string query_tokens = query_answer->tokenize(); - string token = ""; - for(char token_char : query_tokens){ - if(token_char == ' '){ - this->targets.push_back(token); - token = ""; - }else{ - token += token_char; +Link::Link(QueryAnswer* query_answer, vector link_template) { + LinkCreateTemplate link_create_template(link_template); + HandlesAnswer* handles_answer = dynamic_cast(query_answer); + + this->type = link_create_template.get_link_type(); + vector targets = link_create_template.get_targets(); + for (LinkCreateTemplateTypes target : targets) { + if (holds_alternative(target)) { + string token = get(target).name; + this->targets.push_back(handles_answer->assignment.get(token.c_str())); + } + if (holds_alternative>(target)) { + shared_ptr sub_link = get>(target); + shared_ptr sub_link_obj = make_shared(query_answer, sub_link); + this->targets.push_back(sub_link_obj); } } + this->custom_fields = link_create_template.get_custom_fields(); } - -Link::Link() -{ -} - -Link::~Link() -{ +Link::Link(QueryAnswer* query_answer, shared_ptr link_create_template) { + HandlesAnswer* handles_answer = dynamic_cast(query_answer); + this->type = link_create_template->get_link_type(); + vector targets = link_create_template->get_targets(); + for (LinkCreateTemplateTypes target : targets) { + if (holds_alternative(target)) { + string token = get(target).name; + this->targets.push_back(handles_answer->assignment.get(token.c_str())); + } + if (holds_alternative>(target)) { + shared_ptr sub_link = get>(target); + shared_ptr sub_link_obj = make_shared(query_answer, sub_link); + this->targets.push_back(sub_link_obj); + } + } + this->custom_fields = link_create_template->get_custom_fields(); } -string Link::get_type() -{ - return this->type; -} +Link::Link() {} -vector Link::get_targets() -{ - return this->targets; -} +Link::~Link() {} -void Link::set_type(string type) -{ - this->type = type; -} +string Link::get_type() { return this->type; } -void Link::set_targets(vector targets) -{ - this->targets = targets; -} +vector Link::get_targets() { return this->targets; } -void Link::add_target(string target) -{ - this->targets.push_back(target); -} +void Link::set_type(string type) { this->type = type; } -vector Link::tokenize() -{ - return targets; -} +void Link::add_target(LinkTargetTypes target) { this->targets.push_back(target); } -Link Link::untokenize(string link) -{ - return Link(); +vector Link::tokenize() { + vector tokens; + tokens.push_back("LINK"); + tokens.push_back(this->type); + for (LinkTargetTypes target : this->targets) { + if (holds_alternative(target)) { + tokens.push_back("HANDLE"); + tokens.push_back(get(target)); + } + if (holds_alternative>(target)) { + for (string token : get>(target)->tokenize()) { + tokens.push_back(token); + } + } + } + for (CustomField custom_field : this->custom_fields) { + for (string token : custom_field.tokenize()) { + tokens.push_back(token); + } + } + return tokens; } diff --git a/src/link_creation_agent/link.h b/src/link_creation_agent/link.h index 9aab472..46902c2 100644 --- a/src/link_creation_agent/link.h +++ b/src/link_creation_agent/link.h @@ -5,7 +5,10 @@ #pragma once #include #include +#include #include "QueryAnswer.h" +#include "HandlesAnswer.h" +#include "link_create_template.h" using namespace std; using namespace query_engine; @@ -13,11 +16,15 @@ using namespace query_engine; namespace link_creation_agent { + class Link; // forward declaration + + using LinkTargetTypes = std::variant>; + class Link { public: - Link(string type, vector targets); Link(QueryAnswer *query_answer, vector link_template); + Link(QueryAnswer *query_answer, shared_ptr link_create_template); Link(); ~Link(); /** @@ -29,29 +36,27 @@ namespace link_creation_agent * @brief Get the targets of the link * @returns Returns the targets of the link */ - vector get_targets(); + vector get_targets(); /** * @brief Set the type of the link */ void set_type(string type); - /** - * @brief Set the targets of the link - */ - void set_targets(vector targets); /** * @brief Add a target to the link * @param target Target to be added */ - void add_target(string target); + void add_target(LinkTargetTypes target); /** * @brief Tokenize the link * @returns Returns the tokenized link */ vector tokenize(); - Link untokenize(string link); private: string type; - vector targets; + vector targets; + vector custom_fields; + + }; } \ No newline at end of file diff --git a/src/link_creation_agent/link_create_template.cc b/src/link_creation_agent/link_create_template.cc index ddb1395..95d01bd 100644 --- a/src/link_creation_agent/link_create_template.cc +++ b/src/link_creation_agent/link_create_template.cc @@ -2,6 +2,7 @@ #include #include +#include #include using namespace link_creation_agent; @@ -25,61 +26,19 @@ static std::string get_token(std::vector& link_template, int cursor } return link_template[cursor]; } - -CustomField::CustomField(std::vector& custom_fields) { - if (get_token(custom_fields, 0) != "CUSTOM_FIELD") - throw std::invalid_argument("Can not create Custom Field: Invalid arguments"); - - int cursor = 0; - std::string custom_field_name = get_token(custom_fields, 1); - this->name = custom_field_name; - cursor += 3; - while (cursor < custom_fields.size()) { - if (get_token(custom_fields, cursor) == "CUSTOM_FIELD") { - std::vector custom_field_args; - int sub_custom_field_size = string_to_int(get_token(custom_fields, cursor + 2)); - std::string sub_custom_field_name = get_token(custom_fields, cursor + 1); - custom_field_args.push_back(get_token(custom_fields, cursor)); // CUSTOM_FIELD - custom_field_args.push_back(get_token(custom_fields, cursor + 1)); // field name - custom_field_args.push_back(get_token(custom_fields, cursor + 2)); // field size - cursor += 3; - while (cursor < custom_fields.size()) { - if (sub_custom_field_size == 0) { - break; - } - - custom_field_args.push_back(get_token(custom_fields, cursor)); - if (get_token(custom_fields, cursor) == "CUSTOM_FIELD") { - sub_custom_field_size += string_to_int(get_token(custom_fields, cursor + 2)); - custom_field_args.push_back(get_token(custom_fields, cursor + 1)); // field name - custom_field_args.push_back(get_token(custom_fields, cursor + 2)); // field size - cursor += 3; - sub_custom_field_size--; - } else { - custom_field_args.push_back(get_token(custom_fields, cursor + 1)); - cursor += 2; - sub_custom_field_size--; - } - } - CustomField custom_field = CustomField(custom_field_args); - this->values.push_back( - std::make_tuple(sub_custom_field_name, std::make_shared(custom_field))); - } else { - this->values.push_back( - std::make_tuple(get_token(custom_fields, cursor), get_token(custom_fields, cursor + 1))); - cursor += 2; - } +// TODO move this to a utils file +static std::vector split(const std::string& s, char delimiter) { + std::vector tokens; + std::string token; + std::istringstream tokenStream(s); + while (std::getline(tokenStream, token, delimiter)) { + tokens.push_back(token); } + return tokens; } -CustomField::~CustomField() {} - -std::string CustomField::get_name() { return this->name; } - -std::vector> CustomField::get_values() { return this->values; } - -std::vector parse_sub_custom_field(std::vector& link_template, - size_t& cursor) { +static std::vector parse_sub_custom_field(std::vector& link_template, + size_t& cursor) { if (get_token(link_template, cursor) != "CUSTOM_FIELD" || link_template.size() < cursor + 3) throw std::invalid_argument("Can not create Custom Field: Invalid arguments"); std::vector custom_field_args; @@ -108,8 +67,8 @@ std::vector parse_sub_custom_field(std::vector& link_t return custom_field_args; } -std::vector parse_sub_link_template(std::vector& link_template, - size_t& cursor) { +static std::vector parse_sub_link_template(std::vector& link_template, + size_t& cursor) { if (get_token(link_template, cursor) != "LINK_CREATE" || link_template.size() < cursor + 4) throw std::invalid_argument("Can not create Link Template: Invalid arguments"); int sub_link_template_size = string_to_int(get_token(link_template, cursor + 2)); @@ -226,6 +185,60 @@ std::string LinkCreateTemplate::to_string() { return link_template; } +std::vector LinkCreateTemplate::tokenize() { return split(this->to_string(), ' '); } + +CustomField::CustomField(std::vector& custom_fields) { + if (get_token(custom_fields, 0) != "CUSTOM_FIELD") + throw std::invalid_argument("Can not create Custom Field: Invalid arguments"); + + int cursor = 0; + std::string custom_field_name = get_token(custom_fields, 1); + this->name = custom_field_name; + cursor += 3; + while (cursor < custom_fields.size()) { + if (get_token(custom_fields, cursor) == "CUSTOM_FIELD") { + std::vector custom_field_args; + int sub_custom_field_size = string_to_int(get_token(custom_fields, cursor + 2)); + std::string sub_custom_field_name = get_token(custom_fields, cursor + 1); + custom_field_args.push_back(get_token(custom_fields, cursor)); // CUSTOM_FIELD + custom_field_args.push_back(get_token(custom_fields, cursor + 1)); // field name + custom_field_args.push_back(get_token(custom_fields, cursor + 2)); // field size + cursor += 3; + while (cursor < custom_fields.size()) { + if (sub_custom_field_size == 0) { + break; + } + + custom_field_args.push_back(get_token(custom_fields, cursor)); + if (get_token(custom_fields, cursor) == "CUSTOM_FIELD") { + sub_custom_field_size += string_to_int(get_token(custom_fields, cursor + 2)); + custom_field_args.push_back(get_token(custom_fields, cursor + 1)); // field name + custom_field_args.push_back(get_token(custom_fields, cursor + 2)); // field size + cursor += 3; + sub_custom_field_size--; + } else { + custom_field_args.push_back(get_token(custom_fields, cursor + 1)); + cursor += 2; + sub_custom_field_size--; + } + } + CustomField custom_field = CustomField(custom_field_args); + this->values.push_back( + std::make_tuple(sub_custom_field_name, std::make_shared(custom_field))); + } else { + this->values.push_back( + std::make_tuple(get_token(custom_fields, cursor), get_token(custom_fields, cursor + 1))); + cursor += 2; + } + } +} + +CustomField::~CustomField() {} + +std::string CustomField::get_name() { return this->name; } + +std::vector> CustomField::get_values() { return this->values; } + std::string CustomField::to_string() { std::string custom_field = "CUSTOM_FIELD " + this->name + " " + std::to_string(this->values.size()) + " "; @@ -241,4 +254,6 @@ std::string CustomField::to_string() { } } return custom_field; -} \ No newline at end of file +} + +std::vector CustomField::tokenize() { return split(this->to_string(), ' '); } \ No newline at end of file diff --git a/src/link_creation_agent/link_create_template.h b/src/link_creation_agent/link_create_template.h index e55d98e..30d7d5a 100644 --- a/src/link_creation_agent/link_create_template.h +++ b/src/link_creation_agent/link_create_template.h @@ -82,6 +82,11 @@ class CustomField { * @return A string representation of the custom field. */ std::string to_string(); + /** + * @brief Tokenizes the custom field. + * @return A vector of strings representing the tokenized custom field. + */ + std::vector tokenize(); private: std::string name; @@ -123,6 +128,12 @@ class LinkCreateTemplate { */ std::string to_string(); + /** + * @brief Tokenizes the link creation template. + * @return A vector of strings representing the tokenized link creation template. + */ + std::vector tokenize(); + private: std::string link_type; std::vector targets; diff --git a/src/tests/cpp/link_creation_agent_test.cc b/src/tests/cpp/link_creation_agent_test.cc index 32a89ba..13ae726 100644 --- a/src/tests/cpp/link_creation_agent_test.cc +++ b/src/tests/cpp/link_creation_agent_test.cc @@ -266,3 +266,17 @@ TEST(LinkCreateTemplate, TestInvalidNode) { auto link_template = split(link_template_str, ' '); EXPECT_THROW(LinkCreateTemplate lct(link_template), invalid_argument); } + + +TEST(Link, TestLink) { + vector link_template = split("LINK_CREATE Similarity 2 0 VARIABLE V1 VARIABLE V2", ' '); + HandlesAnswer* query_answer = new HandlesAnswer(); + query_answer->assignment.assign("V1", "Value1"); + query_answer->assignment.assign("V2", "Value2"); + + Link link(query_answer, link_template); + EXPECT_EQ(link.get_type(), "Similarity"); + EXPECT_EQ(link.get_targets().size(), 2); + EXPECT_EQ(link.get_targets()[0], "Value1"); + EXPECT_EQ(link.get_targets()[1], "Value2"); +} From ce63f3d73f467ec979a94333fe536277f4c36e68 Mon Sep 17 00:00:00 2001 From: Edgar Brissow Date: Tue, 18 Feb 2025 16:41:04 -0300 Subject: [PATCH 03/19] Fixing tests --- src/MODULE.bazel.lock | 5947 +-------------------- src/tests/cpp/link_creation_agent_test.cc | 4 +- 2 files changed, 3 insertions(+), 5948 deletions(-) diff --git a/src/MODULE.bazel.lock b/src/MODULE.bazel.lock index 5ea9d6b..4898bf1 100644 --- a/src/MODULE.bazel.lock +++ b/src/MODULE.bazel.lock @@ -1,5 +1,5 @@ { - "lockFileVersion": 16, + "lockFileVersion": 18, "registryFileHashes": { "https://bcr.bazel.build/bazel_registry.json": "8a28e4aff06ee60aed2a8c281907fb8bcbf3b753c91fb5a5c57da3215d5b3497", "https://bcr.bazel.build/modules/abseil-cpp/20210324.2/MODULE.bazel": "7cd0312e064fde87c8d1cd79ba06c876bd23630c83466e9500321be55c96ace2", @@ -293,585 +293,6 @@ }, "selectedYankedVersions": {}, "moduleExtensions": { - "@@apple_support+//crosstool:setup.bzl%apple_cc_configure_extension": { - "general": { - "bzlTransitiveDigest": "Ync9nL0AbHC6ondeEY7fBjBjLxojTsiXcJh65ZDTRlA=", - "usagesDigest": "cSIhmW7KxthN0OEsinvaLtzw/1vt+FYxH2KEzLdjRHo=", - "recordedFileInputs": {}, - "recordedDirentsInputs": {}, - "envVariables": {}, - "generatedRepoSpecs": { - "local_config_apple_cc_toolchains": { - "repoRuleId": "@@apple_support+//crosstool:setup.bzl%_apple_cc_autoconf_toolchains", - "attributes": {} - }, - "local_config_apple_cc": { - "repoRuleId": "@@apple_support+//crosstool:setup.bzl%_apple_cc_autoconf", - "attributes": {} - } - }, - "recordedRepoMappingEntries": [ - [ - "apple_support+", - "bazel_tools", - "bazel_tools" - ], - [ - "bazel_tools", - "rules_cc", - "rules_cc+" - ] - ] - } - }, - "@@googleapis+//:extensions.bzl%switched_rules": { - "general": { - "bzlTransitiveDigest": "vG6fuTzXD8MMvHWZEQud0MMH7eoC4GXY0va7VrFFh04=", - "usagesDigest": "DUo2RRz7jYoF7ioQN9YVzDHmoyje8eVbJOIz080D0Sc=", - "recordedFileInputs": {}, - "recordedDirentsInputs": {}, - "envVariables": {}, - "generatedRepoSpecs": { - "com_google_googleapis_imports": { - "repoRuleId": "@@googleapis+//:repository_rules.bzl%switched_rules", - "attributes": { - "rules": { - "proto_library_with_info": [ - "", - "" - ], - "moved_proto_library": [ - "", - "" - ], - "java_proto_library": [ - "", - "" - ], - "java_grpc_library": [ - "", - "" - ], - "java_gapic_library": [ - "", - "" - ], - "java_gapic_test": [ - "", - "" - ], - "java_gapic_assembly_gradle_pkg": [ - "", - "" - ], - "py_proto_library": [ - "", - "" - ], - "py_grpc_library": [ - "", - "" - ], - "py_gapic_library": [ - "", - "" - ], - "py_test": [ - "", - "" - ], - "py_gapic_assembly_pkg": [ - "", - "" - ], - "py_import": [ - "", - "" - ], - "go_proto_library": [ - "", - "" - ], - "go_grpc_library": [ - "", - "" - ], - "go_library": [ - "", - "" - ], - "go_test": [ - "", - "" - ], - "go_gapic_library": [ - "", - "" - ], - "go_gapic_assembly_pkg": [ - "", - "" - ], - "cc_proto_library": [ - "", - "" - ], - "cc_grpc_library": [ - "", - "" - ], - "cc_gapic_library": [ - "", - "" - ], - "php_proto_library": [ - "", - "php_proto_library" - ], - "php_grpc_library": [ - "", - "php_grpc_library" - ], - "php_gapic_library": [ - "", - "php_gapic_library" - ], - "php_gapic_assembly_pkg": [ - "", - "php_gapic_assembly_pkg" - ], - "nodejs_gapic_library": [ - "", - "typescript_gapic_library" - ], - "nodejs_gapic_assembly_pkg": [ - "", - "typescript_gapic_assembly_pkg" - ], - "ruby_proto_library": [ - "", - "" - ], - "ruby_grpc_library": [ - "", - "" - ], - "ruby_ads_gapic_library": [ - "", - "" - ], - "ruby_cloud_gapic_library": [ - "", - "" - ], - "ruby_gapic_assembly_pkg": [ - "", - "" - ], - "csharp_proto_library": [ - "", - "" - ], - "csharp_grpc_library": [ - "", - "" - ], - "csharp_gapic_library": [ - "", - "" - ], - "csharp_gapic_assembly_pkg": [ - "", - "" - ] - } - } - } - }, - "recordedRepoMappingEntries": [] - } - }, - "@@nanobind_bazel+//:internal_configure.bzl%internal_configure_extension": { - "general": { - "bzlTransitiveDigest": "7oI0VpCbrd6RCBdXwsFlurhdfkP5uxsvALQjLcmyrq8=", - "usagesDigest": "cY0wNf6BY0eIjNX443F5sz8TksZ+KXshbeQdjlRd+Tc=", - "recordedFileInputs": {}, - "recordedDirentsInputs": {}, - "envVariables": {}, - "generatedRepoSpecs": { - "robin_map": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "build_file": "@@nanobind_bazel+//:robin_map.BUILD", - "strip_prefix": "robin-map-1.3.0", - "integrity": "sha256-qEJK07Cv/UxX7Sbw89iilgTw4fLvIIn0l/YUsclMcjY=", - "urls": [ - "https://github.com/Tessil/robin-map/archive/refs/tags/v1.3.0.tar.gz" - ] - } - }, - "nanobind": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "build_file": "@@nanobind_bazel+//:nanobind.BUILD", - "strip_prefix": "nanobind-2.4.0", - "integrity": "sha256-uzXertfvrFAp7R4ziApBVjg1L3V9SSB6jmAT/vtsSac=", - "urls": [ - "https://github.com/wjakob/nanobind/archive/refs/tags/v2.4.0.tar.gz" - ] - } - }, - "pypi__typing_extensions": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "build_file": "@@nanobind_bazel+//:typing_extensions.BUILD", - "strip_prefix": "typing_extensions-4.12.2", - "integrity": "sha256-Gn6tVcflWd1N7ohW46iLQSJav+HOjfV7fBORX+Eh/7g=", - "urls": [ - "https://files.pythonhosted.org/packages/df/db/f35a00659bc03fec321ba8bce9420de607a1d37f8342eee1863174c69557/typing_extensions-4.12.2.tar.gz" - ] - } - } - }, - "recordedRepoMappingEntries": [ - [ - "nanobind_bazel+", - "bazel_tools", - "bazel_tools" - ] - ] - } - }, - "@@platforms//host:extension.bzl%host_platform": { - "general": { - "bzlTransitiveDigest": "xelQcPZH8+tmuOHVjL9vDxMnnQNMlwj0SlvgoqBkm4U=", - "usagesDigest": "SeQiIN/f8/Qt9vYQk7qcXp4I4wJeEC0RnQDiaaJ4tb8=", - "recordedFileInputs": {}, - "recordedDirentsInputs": {}, - "envVariables": {}, - "generatedRepoSpecs": { - "host_platform": { - "repoRuleId": "@@platforms//host:extension.bzl%host_platform_repo", - "attributes": {} - } - }, - "recordedRepoMappingEntries": [] - } - }, - "@@rules_foreign_cc+//foreign_cc:extensions.bzl%tools": { - "general": { - "bzlTransitiveDigest": "FApcIcVN43WOEs7g8eg7Cy1hrfRbVNEoUu8IiF+8WOc=", - "usagesDigest": "9LXdVp01HkdYQT8gYPjYLO6VLVJHo9uFfxWaU1ymiRE=", - "recordedFileInputs": {}, - "recordedDirentsInputs": {}, - "envVariables": {}, - "generatedRepoSpecs": { - "rules_foreign_cc_framework_toolchain_linux": { - "repoRuleId": "@@rules_foreign_cc+//foreign_cc/private/framework:toolchain.bzl%framework_toolchain_repository", - "attributes": { - "commands_src": "@rules_foreign_cc//foreign_cc/private/framework/toolchains:linux_commands.bzl", - "exec_compatible_with": [ - "@platforms//os:linux" - ] - } - }, - "rules_foreign_cc_framework_toolchain_freebsd": { - "repoRuleId": "@@rules_foreign_cc+//foreign_cc/private/framework:toolchain.bzl%framework_toolchain_repository", - "attributes": { - "commands_src": "@rules_foreign_cc//foreign_cc/private/framework/toolchains:freebsd_commands.bzl", - "exec_compatible_with": [ - "@platforms//os:freebsd" - ] - } - }, - "rules_foreign_cc_framework_toolchain_windows": { - "repoRuleId": "@@rules_foreign_cc+//foreign_cc/private/framework:toolchain.bzl%framework_toolchain_repository", - "attributes": { - "commands_src": "@rules_foreign_cc//foreign_cc/private/framework/toolchains:windows_commands.bzl", - "exec_compatible_with": [ - "@platforms//os:windows" - ] - } - }, - "rules_foreign_cc_framework_toolchain_macos": { - "repoRuleId": "@@rules_foreign_cc+//foreign_cc/private/framework:toolchain.bzl%framework_toolchain_repository", - "attributes": { - "commands_src": "@rules_foreign_cc//foreign_cc/private/framework/toolchains:macos_commands.bzl", - "exec_compatible_with": [ - "@platforms//os:macos" - ] - } - }, - "rules_foreign_cc_framework_toolchains": { - "repoRuleId": "@@rules_foreign_cc+//foreign_cc/private/framework:toolchain.bzl%framework_toolchain_repository_hub", - "attributes": {} - }, - "cmake_src": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "build_file_content": "filegroup(\n name = \"all_srcs\",\n srcs = glob([\"**\"]),\n visibility = [\"//visibility:public\"],\n)\n", - "sha256": "f316b40053466f9a416adf981efda41b160ca859e97f6a484b447ea299ff26aa", - "strip_prefix": "cmake-3.23.2", - "urls": [ - "https://github.com/Kitware/CMake/releases/download/v3.23.2/cmake-3.23.2.tar.gz" - ] - } - }, - "gnumake_src": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "build_file_content": "filegroup(\n name = \"all_srcs\",\n srcs = glob([\"**\"]),\n visibility = [\"//visibility:public\"],\n)\n", - "sha256": "581f4d4e872da74b3941c874215898a7d35802f03732bdccee1d4a7979105d18", - "strip_prefix": "make-4.4", - "urls": [ - "https://mirror.bazel.build/ftpmirror.gnu.org/gnu/make/make-4.4.tar.gz", - "http://ftpmirror.gnu.org/gnu/make/make-4.4.tar.gz" - ] - } - }, - "ninja_build_src": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "build_file_content": "filegroup(\n name = \"all_srcs\",\n srcs = glob([\"**\"]),\n visibility = [\"//visibility:public\"],\n)\n", - "sha256": "31747ae633213f1eda3842686f83c2aa1412e0f5691d1c14dbbcc67fe7400cea", - "strip_prefix": "ninja-1.11.1", - "urls": [ - "https://github.com/ninja-build/ninja/archive/v1.11.1.tar.gz" - ] - } - }, - "meson_src": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "build_file_content": "exports_files([\"meson.py\"])\n\nfilegroup(\n name = \"runtime\",\n srcs = glob([\"mesonbuild/**\"]),\n visibility = [\"//visibility:public\"],\n)\n", - "strip_prefix": "meson-1.1.1", - "url": "https://github.com/mesonbuild/meson/releases/download/1.1.1/meson-1.1.1.tar.gz" - } - }, - "glib_dev": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "build_file_content": "\nload(\"@rules_cc//cc:defs.bzl\", \"cc_library\")\n\ncc_import(\n name = \"glib_dev\",\n hdrs = glob([\"include/**\"]),\n shared_library = \"@glib_runtime//:bin/libglib-2.0-0.dll\",\n visibility = [\"//visibility:public\"],\n)\n ", - "sha256": "bdf18506df304d38be98a4b3f18055b8b8cca81beabecad0eece6ce95319c369", - "urls": [ - "https://download.gnome.org/binaries/win64/glib/2.26/glib-dev_2.26.1-1_win64.zip" - ] - } - }, - "glib_src": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "build_file_content": "\ncc_import(\n name = \"msvc_hdr\",\n hdrs = [\"msvc_recommended_pragmas.h\"],\n visibility = [\"//visibility:public\"],\n)\n ", - "sha256": "bc96f63112823b7d6c9f06572d2ad626ddac7eb452c04d762592197f6e07898e", - "strip_prefix": "glib-2.26.1", - "urls": [ - "https://download.gnome.org/sources/glib/2.26/glib-2.26.1.tar.gz" - ] - } - }, - "glib_runtime": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "build_file_content": "\nexports_files(\n [\n \"bin/libgio-2.0-0.dll\",\n \"bin/libglib-2.0-0.dll\",\n \"bin/libgmodule-2.0-0.dll\",\n \"bin/libgobject-2.0-0.dll\",\n \"bin/libgthread-2.0-0.dll\",\n ],\n visibility = [\"//visibility:public\"],\n)\n ", - "sha256": "88d857087e86f16a9be651ee7021880b3f7ba050d34a1ed9f06113b8799cb973", - "urls": [ - "https://download.gnome.org/binaries/win64/glib/2.26/glib_2.26.1-1_win64.zip" - ] - } - }, - "gettext_runtime": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "build_file_content": "\ncc_import(\n name = \"gettext_runtime\",\n shared_library = \"bin/libintl-8.dll\",\n visibility = [\"//visibility:public\"],\n)\n ", - "sha256": "1f4269c0e021076d60a54e98da6f978a3195013f6de21674ba0edbc339c5b079", - "urls": [ - "https://download.gnome.org/binaries/win64/dependencies/gettext-runtime_0.18.1.1-2_win64.zip" - ] - } - }, - "pkgconfig_src": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "build_file_content": "filegroup(\n name = \"all_srcs\",\n srcs = glob([\"**\"]),\n visibility = [\"//visibility:public\"],\n)\n", - "sha256": "6fc69c01688c9458a57eb9a1664c9aba372ccda420a02bf4429fe610e7e7d591", - "strip_prefix": "pkg-config-0.29.2", - "patches": [ - "@@rules_foreign_cc+//toolchains:pkgconfig-detectenv.patch", - "@@rules_foreign_cc+//toolchains:pkgconfig-makefile-vc.patch" - ], - "urls": [ - "https://pkgconfig.freedesktop.org/releases/pkg-config-0.29.2.tar.gz" - ] - } - }, - "bazel_skylib": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "urls": [ - "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.2.1/bazel-skylib-1.2.1.tar.gz", - "https://github.com/bazelbuild/bazel-skylib/releases/download/1.2.1/bazel-skylib-1.2.1.tar.gz" - ], - "sha256": "f7be3474d42aae265405a592bb7da8e171919d74c16f082a5457840f06054728" - } - }, - "rules_python": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "sha256": "84aec9e21cc56fbc7f1335035a71c850d1b9b5cc6ff497306f84cced9a769841", - "strip_prefix": "rules_python-0.23.1", - "url": "https://github.com/bazelbuild/rules_python/archive/refs/tags/0.23.1.tar.gz" - } - }, - "cmake-3.23.2-linux-aarch64": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "urls": [ - "https://github.com/Kitware/CMake/releases/download/v3.23.2/cmake-3.23.2-linux-aarch64.tar.gz" - ], - "sha256": "f2654bf780b53f170bbbec44d8ac67d401d24788e590faa53036a89476efa91e", - "strip_prefix": "cmake-3.23.2-linux-aarch64", - "build_file_content": "load(\"@rules_foreign_cc//toolchains/native_tools:native_tools_toolchain.bzl\", \"native_tool_toolchain\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nfilegroup(\n name = \"cmake_data\",\n srcs = glob(\n [\n \"**\",\n ],\n exclude = [\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n \"BUILD\",\n \"BUILD.bazel\",\n ],\n ),\n)\n\nnative_tool_toolchain(\n name = \"cmake_tool\",\n path = \"bin/cmake\",\n target = \":cmake_data\",\n)\n" - } - }, - "cmake-3.23.2-linux-x86_64": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "urls": [ - "https://github.com/Kitware/CMake/releases/download/v3.23.2/cmake-3.23.2-linux-x86_64.tar.gz" - ], - "sha256": "aaced6f745b86ce853661a595bdac6c5314a60f8181b6912a0a4920acfa32708", - "strip_prefix": "cmake-3.23.2-linux-x86_64", - "build_file_content": "load(\"@rules_foreign_cc//toolchains/native_tools:native_tools_toolchain.bzl\", \"native_tool_toolchain\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nfilegroup(\n name = \"cmake_data\",\n srcs = glob(\n [\n \"**\",\n ],\n exclude = [\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n \"BUILD\",\n \"BUILD.bazel\",\n ],\n ),\n)\n\nnative_tool_toolchain(\n name = \"cmake_tool\",\n path = \"bin/cmake\",\n target = \":cmake_data\",\n)\n" - } - }, - "cmake-3.23.2-macos-universal": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "urls": [ - "https://github.com/Kitware/CMake/releases/download/v3.23.2/cmake-3.23.2-macos-universal.tar.gz" - ], - "sha256": "853a0f9af148c5ef47282ffffee06c4c9f257be2635936755f39ca13c3286c88", - "strip_prefix": "cmake-3.23.2-macos-universal/CMake.app/Contents", - "build_file_content": "load(\"@rules_foreign_cc//toolchains/native_tools:native_tools_toolchain.bzl\", \"native_tool_toolchain\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nfilegroup(\n name = \"cmake_data\",\n srcs = glob(\n [\n \"**\",\n ],\n exclude = [\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n \"BUILD\",\n \"BUILD.bazel\",\n ],\n ),\n)\n\nnative_tool_toolchain(\n name = \"cmake_tool\",\n path = \"bin/cmake\",\n target = \":cmake_data\",\n)\n" - } - }, - "cmake-3.23.2-windows-i386": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "urls": [ - "https://github.com/Kitware/CMake/releases/download/v3.23.2/cmake-3.23.2-windows-i386.zip" - ], - "sha256": "6a4fcd6a2315b93cb23c93507efccacc30c449c2bf98f14d6032bb226c582e07", - "strip_prefix": "cmake-3.23.2-windows-i386", - "build_file_content": "load(\"@rules_foreign_cc//toolchains/native_tools:native_tools_toolchain.bzl\", \"native_tool_toolchain\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nfilegroup(\n name = \"cmake_data\",\n srcs = glob(\n [\n \"**\",\n ],\n exclude = [\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n \"BUILD\",\n \"BUILD.bazel\",\n ],\n ),\n)\n\nnative_tool_toolchain(\n name = \"cmake_tool\",\n path = \"bin/cmake.exe\",\n target = \":cmake_data\",\n)\n" - } - }, - "cmake-3.23.2-windows-x86_64": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "urls": [ - "https://github.com/Kitware/CMake/releases/download/v3.23.2/cmake-3.23.2-windows-x86_64.zip" - ], - "sha256": "2329387f3166b84c25091c86389fb891193967740c9bcf01e7f6d3306f7ffda0", - "strip_prefix": "cmake-3.23.2-windows-x86_64", - "build_file_content": "load(\"@rules_foreign_cc//toolchains/native_tools:native_tools_toolchain.bzl\", \"native_tool_toolchain\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nfilegroup(\n name = \"cmake_data\",\n srcs = glob(\n [\n \"**\",\n ],\n exclude = [\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n \"BUILD\",\n \"BUILD.bazel\",\n ],\n ),\n)\n\nnative_tool_toolchain(\n name = \"cmake_tool\",\n path = \"bin/cmake.exe\",\n target = \":cmake_data\",\n)\n" - } - }, - "cmake_3.23.2_toolchains": { - "repoRuleId": "@@rules_foreign_cc+//toolchains:prebuilt_toolchains_repository.bzl%prebuilt_toolchains_repository", - "attributes": { - "repos": { - "cmake-3.23.2-linux-aarch64": [ - "@platforms//cpu:aarch64", - "@platforms//os:linux" - ], - "cmake-3.23.2-linux-x86_64": [ - "@platforms//cpu:x86_64", - "@platforms//os:linux" - ], - "cmake-3.23.2-macos-universal": [ - "@platforms//os:macos" - ], - "cmake-3.23.2-windows-i386": [ - "@platforms//cpu:x86_32", - "@platforms//os:windows" - ], - "cmake-3.23.2-windows-x86_64": [ - "@platforms//cpu:x86_64", - "@platforms//os:windows" - ] - }, - "tool": "cmake" - } - }, - "ninja_1.11.1_linux": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "urls": [ - "https://github.com/ninja-build/ninja/releases/download/v1.11.1/ninja-linux.zip" - ], - "sha256": "b901ba96e486dce377f9a070ed4ef3f79deb45f4ffe2938f8e7ddc69cfb3df77", - "strip_prefix": "", - "build_file_content": "load(\"@rules_foreign_cc//toolchains/native_tools:native_tools_toolchain.bzl\", \"native_tool_toolchain\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nfilegroup(\n name = \"ninja_bin\",\n srcs = [\"ninja\"],\n)\n\nnative_tool_toolchain(\n name = \"ninja_tool\",\n env = {\"NINJA\": \"$(execpath :ninja_bin)\"},\n path = \"$(execpath :ninja_bin)\",\n target = \":ninja_bin\",\n)\n" - } - }, - "ninja_1.11.1_mac": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "urls": [ - "https://github.com/ninja-build/ninja/releases/download/v1.11.1/ninja-mac.zip" - ], - "sha256": "482ecb23c59ae3d4f158029112de172dd96bb0e97549c4b1ca32d8fad11f873e", - "strip_prefix": "", - "build_file_content": "load(\"@rules_foreign_cc//toolchains/native_tools:native_tools_toolchain.bzl\", \"native_tool_toolchain\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nfilegroup(\n name = \"ninja_bin\",\n srcs = [\"ninja\"],\n)\n\nnative_tool_toolchain(\n name = \"ninja_tool\",\n env = {\"NINJA\": \"$(execpath :ninja_bin)\"},\n path = \"$(execpath :ninja_bin)\",\n target = \":ninja_bin\",\n)\n" - } - }, - "ninja_1.11.1_win": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "urls": [ - "https://github.com/ninja-build/ninja/releases/download/v1.11.1/ninja-win.zip" - ], - "sha256": "524b344a1a9a55005eaf868d991e090ab8ce07fa109f1820d40e74642e289abc", - "strip_prefix": "", - "build_file_content": "load(\"@rules_foreign_cc//toolchains/native_tools:native_tools_toolchain.bzl\", \"native_tool_toolchain\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nfilegroup(\n name = \"ninja_bin\",\n srcs = [\"ninja.exe\"],\n)\n\nnative_tool_toolchain(\n name = \"ninja_tool\",\n env = {\"NINJA\": \"$(execpath :ninja_bin)\"},\n path = \"$(execpath :ninja_bin)\",\n target = \":ninja_bin\",\n)\n" - } - }, - "ninja_1.11.1_toolchains": { - "repoRuleId": "@@rules_foreign_cc+//toolchains:prebuilt_toolchains_repository.bzl%prebuilt_toolchains_repository", - "attributes": { - "repos": { - "ninja_1.11.1_linux": [ - "@platforms//cpu:x86_64", - "@platforms//os:linux" - ], - "ninja_1.11.1_mac": [ - "@platforms//cpu:x86_64", - "@platforms//os:macos" - ], - "ninja_1.11.1_win": [ - "@platforms//cpu:x86_64", - "@platforms//os:windows" - ] - }, - "tool": "ninja" - } - } - }, - "recordedRepoMappingEntries": [ - [ - "rules_foreign_cc+", - "bazel_tools", - "bazel_tools" - ], - [ - "rules_foreign_cc+", - "rules_foreign_cc", - "rules_foreign_cc+" - ] - ] - } - }, "@@rules_java+//java:rules_java_deps.bzl%compatibility_proxy": { "general": { "bzlTransitiveDigest": "84xJEZ1jnXXwo8BXMprvBm++rRt4jsTu9liBxz0ivps=", @@ -893,5372 +314,6 @@ ] ] } - }, - "@@rules_kotlin+//src/main/starlark/core/repositories:bzlmod_setup.bzl%rules_kotlin_extensions": { - "general": { - "bzlTransitiveDigest": "sFhcgPbDQehmbD1EOXzX4H1q/CD5df8zwG4kp4jbvr8=", - "usagesDigest": "QI2z8ZUR+mqtbwsf2fLqYdJAkPOHdOV+tF2yVAUgRzw=", - "recordedFileInputs": {}, - "recordedDirentsInputs": {}, - "envVariables": {}, - "generatedRepoSpecs": { - "com_github_jetbrains_kotlin_git": { - "repoRuleId": "@@rules_kotlin+//src/main/starlark/core/repositories:compiler.bzl%kotlin_compiler_git_repository", - "attributes": { - "urls": [ - "https://github.com/JetBrains/kotlin/releases/download/v1.9.23/kotlin-compiler-1.9.23.zip" - ], - "sha256": "93137d3aab9afa9b27cb06a824c2324195c6b6f6179d8a8653f440f5bd58be88" - } - }, - "com_github_jetbrains_kotlin": { - "repoRuleId": "@@rules_kotlin+//src/main/starlark/core/repositories:compiler.bzl%kotlin_capabilities_repository", - "attributes": { - "git_repository_name": "com_github_jetbrains_kotlin_git", - "compiler_version": "1.9.23" - } - }, - "com_github_google_ksp": { - "repoRuleId": "@@rules_kotlin+//src/main/starlark/core/repositories:ksp.bzl%ksp_compiler_plugin_repository", - "attributes": { - "urls": [ - "https://github.com/google/ksp/releases/download/1.9.23-1.0.20/artifacts.zip" - ], - "sha256": "ee0618755913ef7fd6511288a232e8fad24838b9af6ea73972a76e81053c8c2d", - "strip_version": "1.9.23-1.0.20" - } - }, - "com_github_pinterest_ktlint": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", - "attributes": { - "sha256": "01b2e0ef893383a50dbeb13970fe7fa3be36ca3e83259e01649945b09d736985", - "urls": [ - "https://github.com/pinterest/ktlint/releases/download/1.3.0/ktlint" - ], - "executable": true - } - }, - "rules_android": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", - "attributes": { - "sha256": "cd06d15dd8bb59926e4d65f9003bfc20f9da4b2519985c27e190cddc8b7a7806", - "strip_prefix": "rules_android-0.1.1", - "urls": [ - "https://github.com/bazelbuild/rules_android/archive/v0.1.1.zip" - ] - } - } - }, - "recordedRepoMappingEntries": [ - [ - "rules_kotlin+", - "bazel_tools", - "bazel_tools" - ] - ] - } - }, - "@@rules_python+//python/extensions:pip.bzl%pip": { - "general": { - "bzlTransitiveDigest": "LcXaVryHt60I2iaj7FbE83+h2E6Arq4kMpjjbo0q6Nw=", - "usagesDigest": "QGr57otiUlM9iP5vVxnnSEx6IdfDw8DpFMXwfZKfCqk=", - "recordedFileInputs": { - "@@//deps/requirements_dev_lock.txt": "107ebb98d3f233030b6b87e249f531fc59cf39f3a4bddc6b68356e4773a23a8a", - "@@//deps/requirements_lock.txt": "35874ab3e9744885203c90cac38e622eb2a255629f03f072e6146b0dee84e94f", - "@@grpc+//requirements.bazel.txt": "4c8c19a2a8f22108bf29feb5cc2694eb0c7e0c82ba0364df27fe5f5e4d7936e5", - "@@protobuf+//python/requirements.txt": "983be60d3cec4b319dcab6d48aeb3f5b2f7c3350f26b3a9e97486c37967c73c5", - "@@protoc-gen-validate+//python/requirements.txt": "519d7dac0ff11c4a855aaef022dc2998ece0669db3b481cdb9e5a5d88e57eb83", - "@@rules_fuzzing+//fuzzing/requirements.txt": "ab04664be026b632a0d2a2446c4f65982b7654f5b6851d2f9d399a19b7242a5b", - "@@rules_python+//tools/publish/requirements_darwin.txt": "095d4a4f3d639dce831cd493367631cd51b53665292ab20194bac2c0c6458fa8", - "@@rules_python+//tools/publish/requirements_linux.txt": "d576e0d8542df61396a9b38deeaa183c24135ed5e8e73bb9622f298f2671811e", - "@@rules_python+//tools/publish/requirements_windows.txt": "d18538a3982beab378fd5687f4db33162ee1ece69801f9a451661b1b64286b76" - }, - "recordedDirentsInputs": {}, - "envVariables": { - "RULES_PYTHON_REPO_DEBUG": null, - "RULES_PYTHON_REPO_DEBUG_VERBOSITY": null - }, - "generatedRepoSpecs": { - "grpc_python_dependencies_310_absl_py": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "grpc_python_dependencies_310", - "requirement": "absl-py==1.4.0" - } - }, - "grpc_python_dependencies_310_cachetools": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "grpc_python_dependencies_310", - "requirement": "cachetools==5.3.2" - } - }, - "grpc_python_dependencies_310_certifi": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "grpc_python_dependencies_310", - "requirement": "certifi==2023.7.22" - } - }, - "grpc_python_dependencies_310_chardet": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "grpc_python_dependencies_310", - "requirement": "chardet==3.0.4" - } - }, - "grpc_python_dependencies_310_charset_normalizer": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "grpc_python_dependencies_310", - "requirement": "charset-normalizer==3.3.2" - } - }, - "grpc_python_dependencies_310_coverage": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "grpc_python_dependencies_310", - "requirement": "coverage==4.5.4" - } - }, - "grpc_python_dependencies_310_cython": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "grpc_python_dependencies_310", - "requirement": "cython==3.0.0" - } - }, - "grpc_python_dependencies_310_deprecated": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "grpc_python_dependencies_310", - "requirement": "Deprecated==1.2.14" - } - }, - "grpc_python_dependencies_310_gevent": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "grpc_python_dependencies_310", - "requirement": "gevent==22.08.0" - } - }, - "grpc_python_dependencies_310_google_api_core": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "grpc_python_dependencies_310", - "requirement": "google-api-core==1.34.1" - } - }, - "grpc_python_dependencies_310_google_auth": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "grpc_python_dependencies_310", - "requirement": "google-auth==2.23.4" - } - }, - "grpc_python_dependencies_310_google_cloud_monitoring": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "grpc_python_dependencies_310", - "requirement": "google-cloud-monitoring==2.16.0" - } - }, - "grpc_python_dependencies_310_google_cloud_trace": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "grpc_python_dependencies_310", - "requirement": "google-cloud-trace==1.11.3" - } - }, - "grpc_python_dependencies_310_googleapis_common_protos": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "grpc_python_dependencies_310", - "requirement": "googleapis-common-protos==1.63.1" - } - }, - "grpc_python_dependencies_310_greenlet": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "grpc_python_dependencies_310", - "requirement": "greenlet==1.1.3.post0" - } - }, - "grpc_python_dependencies_310_idna": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "grpc_python_dependencies_310", - "requirement": "idna==2.7" - } - }, - "grpc_python_dependencies_310_importlib_metadata": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "grpc_python_dependencies_310", - "requirement": "importlib-metadata==6.11.0" - } - }, - "grpc_python_dependencies_310_oauth2client": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "grpc_python_dependencies_310", - "requirement": "oauth2client==4.1.0" - } - }, - "grpc_python_dependencies_310_opencensus_context": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "grpc_python_dependencies_310", - "requirement": "opencensus-context==0.1.3" - } - }, - "grpc_python_dependencies_310_opentelemetry_api": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "grpc_python_dependencies_310", - "requirement": "opentelemetry-api==1.25.0" - } - }, - "grpc_python_dependencies_310_opentelemetry_exporter_prometheus": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "grpc_python_dependencies_310", - "requirement": "opentelemetry-exporter-prometheus==0.46b0" - } - }, - "grpc_python_dependencies_310_opentelemetry_resourcedetector_gcp": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "grpc_python_dependencies_310", - "requirement": "opentelemetry-resourcedetector-gcp==1.6.0a0" - } - }, - "grpc_python_dependencies_310_opentelemetry_sdk": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "grpc_python_dependencies_310", - "requirement": "opentelemetry-sdk==1.25.0" - } - }, - "grpc_python_dependencies_310_opentelemetry_semantic_conventions": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "grpc_python_dependencies_310", - "requirement": "opentelemetry-semantic-conventions==0.46b0" - } - }, - "grpc_python_dependencies_310_prometheus_client": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "grpc_python_dependencies_310", - "requirement": "prometheus_client==0.20.0" - } - }, - "grpc_python_dependencies_310_proto_plus": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "grpc_python_dependencies_310", - "requirement": "proto-plus==1.22.3" - } - }, - "grpc_python_dependencies_310_protobuf": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "grpc_python_dependencies_310", - "requirement": "protobuf>=5.27.1,<6.0dev" - } - }, - "grpc_python_dependencies_310_pyasn1": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "grpc_python_dependencies_310", - "requirement": "pyasn1==0.5.0" - } - }, - "grpc_python_dependencies_310_pyasn1_modules": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "grpc_python_dependencies_310", - "requirement": "pyasn1-modules==0.3.0" - } - }, - "grpc_python_dependencies_310_requests": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "grpc_python_dependencies_310", - "requirement": "requests==2.25.1" - } - }, - "grpc_python_dependencies_310_rsa": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "grpc_python_dependencies_310", - "requirement": "rsa==4.9" - } - }, - "grpc_python_dependencies_310_setuptools": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "grpc_python_dependencies_310", - "requirement": "setuptools==44.1.1" - } - }, - "grpc_python_dependencies_310_typing_extensions": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "grpc_python_dependencies_310", - "requirement": "typing-extensions==4.9.0" - } - }, - "grpc_python_dependencies_310_urllib3": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "grpc_python_dependencies_310", - "requirement": "urllib3==1.26.18" - } - }, - "grpc_python_dependencies_310_wheel": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "grpc_python_dependencies_310", - "requirement": "wheel==0.38.1" - } - }, - "grpc_python_dependencies_310_wrapt": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "grpc_python_dependencies_310", - "requirement": "wrapt==1.16.0" - } - }, - "grpc_python_dependencies_310_zipp": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "grpc_python_dependencies_310", - "requirement": "zipp==3.17.0" - } - }, - "grpc_python_dependencies_310_zope_event": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "grpc_python_dependencies_310", - "requirement": "zope.event==4.5.0" - } - }, - "grpc_python_dependencies_310_zope_interface": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "grpc_python_dependencies_310", - "requirement": "zope.interface==6.1" - } - }, - "grpc_python_dependencies_311_absl_py": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "grpc_python_dependencies_311", - "requirement": "absl-py==1.4.0" - } - }, - "grpc_python_dependencies_311_cachetools": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "grpc_python_dependencies_311", - "requirement": "cachetools==5.3.2" - } - }, - "grpc_python_dependencies_311_certifi": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "grpc_python_dependencies_311", - "requirement": "certifi==2023.7.22" - } - }, - "grpc_python_dependencies_311_chardet": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "grpc_python_dependencies_311", - "requirement": "chardet==3.0.4" - } - }, - "grpc_python_dependencies_311_charset_normalizer": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "grpc_python_dependencies_311", - "requirement": "charset-normalizer==3.3.2" - } - }, - "grpc_python_dependencies_311_coverage": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "grpc_python_dependencies_311", - "requirement": "coverage==4.5.4" - } - }, - "grpc_python_dependencies_311_cython": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "grpc_python_dependencies_311", - "requirement": "cython==3.0.0" - } - }, - "grpc_python_dependencies_311_deprecated": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "grpc_python_dependencies_311", - "requirement": "Deprecated==1.2.14" - } - }, - "grpc_python_dependencies_311_gevent": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "grpc_python_dependencies_311", - "requirement": "gevent==22.08.0" - } - }, - "grpc_python_dependencies_311_google_api_core": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "grpc_python_dependencies_311", - "requirement": "google-api-core==1.34.1" - } - }, - "grpc_python_dependencies_311_google_auth": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "grpc_python_dependencies_311", - "requirement": "google-auth==2.23.4" - } - }, - "grpc_python_dependencies_311_google_cloud_monitoring": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "grpc_python_dependencies_311", - "requirement": "google-cloud-monitoring==2.16.0" - } - }, - "grpc_python_dependencies_311_google_cloud_trace": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "grpc_python_dependencies_311", - "requirement": "google-cloud-trace==1.11.3" - } - }, - "grpc_python_dependencies_311_googleapis_common_protos": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "grpc_python_dependencies_311", - "requirement": "googleapis-common-protos==1.63.1" - } - }, - "grpc_python_dependencies_311_greenlet": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "grpc_python_dependencies_311", - "requirement": "greenlet==1.1.3.post0" - } - }, - "grpc_python_dependencies_311_idna": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "grpc_python_dependencies_311", - "requirement": "idna==2.7" - } - }, - "grpc_python_dependencies_311_importlib_metadata": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "grpc_python_dependencies_311", - "requirement": "importlib-metadata==6.11.0" - } - }, - "grpc_python_dependencies_311_oauth2client": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "grpc_python_dependencies_311", - "requirement": "oauth2client==4.1.0" - } - }, - "grpc_python_dependencies_311_opencensus_context": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "grpc_python_dependencies_311", - "requirement": "opencensus-context==0.1.3" - } - }, - "grpc_python_dependencies_311_opentelemetry_api": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "grpc_python_dependencies_311", - "requirement": "opentelemetry-api==1.25.0" - } - }, - "grpc_python_dependencies_311_opentelemetry_exporter_prometheus": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "grpc_python_dependencies_311", - "requirement": "opentelemetry-exporter-prometheus==0.46b0" - } - }, - "grpc_python_dependencies_311_opentelemetry_resourcedetector_gcp": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "grpc_python_dependencies_311", - "requirement": "opentelemetry-resourcedetector-gcp==1.6.0a0" - } - }, - "grpc_python_dependencies_311_opentelemetry_sdk": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "grpc_python_dependencies_311", - "requirement": "opentelemetry-sdk==1.25.0" - } - }, - "grpc_python_dependencies_311_opentelemetry_semantic_conventions": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "grpc_python_dependencies_311", - "requirement": "opentelemetry-semantic-conventions==0.46b0" - } - }, - "grpc_python_dependencies_311_prometheus_client": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "grpc_python_dependencies_311", - "requirement": "prometheus_client==0.20.0" - } - }, - "grpc_python_dependencies_311_proto_plus": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "grpc_python_dependencies_311", - "requirement": "proto-plus==1.22.3" - } - }, - "grpc_python_dependencies_311_protobuf": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "grpc_python_dependencies_311", - "requirement": "protobuf>=5.27.1,<6.0dev" - } - }, - "grpc_python_dependencies_311_pyasn1": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "grpc_python_dependencies_311", - "requirement": "pyasn1==0.5.0" - } - }, - "grpc_python_dependencies_311_pyasn1_modules": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "grpc_python_dependencies_311", - "requirement": "pyasn1-modules==0.3.0" - } - }, - "grpc_python_dependencies_311_requests": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "grpc_python_dependencies_311", - "requirement": "requests==2.25.1" - } - }, - "grpc_python_dependencies_311_rsa": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "grpc_python_dependencies_311", - "requirement": "rsa==4.9" - } - }, - "grpc_python_dependencies_311_setuptools": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "grpc_python_dependencies_311", - "requirement": "setuptools==44.1.1" - } - }, - "grpc_python_dependencies_311_typing_extensions": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "grpc_python_dependencies_311", - "requirement": "typing-extensions==4.9.0" - } - }, - "grpc_python_dependencies_311_urllib3": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "grpc_python_dependencies_311", - "requirement": "urllib3==1.26.18" - } - }, - "grpc_python_dependencies_311_wheel": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "grpc_python_dependencies_311", - "requirement": "wheel==0.38.1" - } - }, - "grpc_python_dependencies_311_wrapt": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "grpc_python_dependencies_311", - "requirement": "wrapt==1.16.0" - } - }, - "grpc_python_dependencies_311_zipp": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "grpc_python_dependencies_311", - "requirement": "zipp==3.17.0" - } - }, - "grpc_python_dependencies_311_zope_event": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "grpc_python_dependencies_311", - "requirement": "zope.event==4.5.0" - } - }, - "grpc_python_dependencies_311_zope_interface": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "grpc_python_dependencies_311", - "requirement": "zope.interface==6.1" - } - }, - "grpc_python_dependencies_312_absl_py": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "grpc_python_dependencies_312", - "requirement": "absl-py==1.4.0" - } - }, - "grpc_python_dependencies_312_cachetools": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "grpc_python_dependencies_312", - "requirement": "cachetools==5.3.2" - } - }, - "grpc_python_dependencies_312_certifi": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "grpc_python_dependencies_312", - "requirement": "certifi==2023.7.22" - } - }, - "grpc_python_dependencies_312_chardet": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "grpc_python_dependencies_312", - "requirement": "chardet==3.0.4" - } - }, - "grpc_python_dependencies_312_charset_normalizer": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "grpc_python_dependencies_312", - "requirement": "charset-normalizer==3.3.2" - } - }, - "grpc_python_dependencies_312_coverage": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "grpc_python_dependencies_312", - "requirement": "coverage==4.5.4" - } - }, - "grpc_python_dependencies_312_cython": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "grpc_python_dependencies_312", - "requirement": "cython==3.0.0" - } - }, - "grpc_python_dependencies_312_deprecated": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "grpc_python_dependencies_312", - "requirement": "Deprecated==1.2.14" - } - }, - "grpc_python_dependencies_312_gevent": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "grpc_python_dependencies_312", - "requirement": "gevent==22.08.0" - } - }, - "grpc_python_dependencies_312_google_api_core": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "grpc_python_dependencies_312", - "requirement": "google-api-core==1.34.1" - } - }, - "grpc_python_dependencies_312_google_auth": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "grpc_python_dependencies_312", - "requirement": "google-auth==2.23.4" - } - }, - "grpc_python_dependencies_312_google_cloud_monitoring": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "grpc_python_dependencies_312", - "requirement": "google-cloud-monitoring==2.16.0" - } - }, - "grpc_python_dependencies_312_google_cloud_trace": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "grpc_python_dependencies_312", - "requirement": "google-cloud-trace==1.11.3" - } - }, - "grpc_python_dependencies_312_googleapis_common_protos": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "grpc_python_dependencies_312", - "requirement": "googleapis-common-protos==1.63.1" - } - }, - "grpc_python_dependencies_312_greenlet": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "grpc_python_dependencies_312", - "requirement": "greenlet==1.1.3.post0" - } - }, - "grpc_python_dependencies_312_idna": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "grpc_python_dependencies_312", - "requirement": "idna==2.7" - } - }, - "grpc_python_dependencies_312_importlib_metadata": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "grpc_python_dependencies_312", - "requirement": "importlib-metadata==6.11.0" - } - }, - "grpc_python_dependencies_312_oauth2client": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "grpc_python_dependencies_312", - "requirement": "oauth2client==4.1.0" - } - }, - "grpc_python_dependencies_312_opencensus_context": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "grpc_python_dependencies_312", - "requirement": "opencensus-context==0.1.3" - } - }, - "grpc_python_dependencies_312_opentelemetry_api": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "grpc_python_dependencies_312", - "requirement": "opentelemetry-api==1.25.0" - } - }, - "grpc_python_dependencies_312_opentelemetry_exporter_prometheus": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "grpc_python_dependencies_312", - "requirement": "opentelemetry-exporter-prometheus==0.46b0" - } - }, - "grpc_python_dependencies_312_opentelemetry_resourcedetector_gcp": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "grpc_python_dependencies_312", - "requirement": "opentelemetry-resourcedetector-gcp==1.6.0a0" - } - }, - "grpc_python_dependencies_312_opentelemetry_sdk": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "grpc_python_dependencies_312", - "requirement": "opentelemetry-sdk==1.25.0" - } - }, - "grpc_python_dependencies_312_opentelemetry_semantic_conventions": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "grpc_python_dependencies_312", - "requirement": "opentelemetry-semantic-conventions==0.46b0" - } - }, - "grpc_python_dependencies_312_prometheus_client": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "grpc_python_dependencies_312", - "requirement": "prometheus_client==0.20.0" - } - }, - "grpc_python_dependencies_312_proto_plus": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "grpc_python_dependencies_312", - "requirement": "proto-plus==1.22.3" - } - }, - "grpc_python_dependencies_312_protobuf": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "grpc_python_dependencies_312", - "requirement": "protobuf>=5.27.1,<6.0dev" - } - }, - "grpc_python_dependencies_312_pyasn1": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "grpc_python_dependencies_312", - "requirement": "pyasn1==0.5.0" - } - }, - "grpc_python_dependencies_312_pyasn1_modules": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "grpc_python_dependencies_312", - "requirement": "pyasn1-modules==0.3.0" - } - }, - "grpc_python_dependencies_312_requests": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "grpc_python_dependencies_312", - "requirement": "requests==2.25.1" - } - }, - "grpc_python_dependencies_312_rsa": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "grpc_python_dependencies_312", - "requirement": "rsa==4.9" - } - }, - "grpc_python_dependencies_312_setuptools": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "grpc_python_dependencies_312", - "requirement": "setuptools==44.1.1" - } - }, - "grpc_python_dependencies_312_typing_extensions": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "grpc_python_dependencies_312", - "requirement": "typing-extensions==4.9.0" - } - }, - "grpc_python_dependencies_312_urllib3": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "grpc_python_dependencies_312", - "requirement": "urllib3==1.26.18" - } - }, - "grpc_python_dependencies_312_wheel": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "grpc_python_dependencies_312", - "requirement": "wheel==0.38.1" - } - }, - "grpc_python_dependencies_312_wrapt": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "grpc_python_dependencies_312", - "requirement": "wrapt==1.16.0" - } - }, - "grpc_python_dependencies_312_zipp": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "grpc_python_dependencies_312", - "requirement": "zipp==3.17.0" - } - }, - "grpc_python_dependencies_312_zope_event": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "grpc_python_dependencies_312", - "requirement": "zope.event==4.5.0" - } - }, - "grpc_python_dependencies_312_zope_interface": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "grpc_python_dependencies_312", - "requirement": "zope.interface==6.1" - } - }, - "grpc_python_dependencies_313_absl_py": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "grpc_python_dependencies_313", - "requirement": "absl-py==1.4.0" - } - }, - "grpc_python_dependencies_313_cachetools": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "grpc_python_dependencies_313", - "requirement": "cachetools==5.3.2" - } - }, - "grpc_python_dependencies_313_certifi": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "grpc_python_dependencies_313", - "requirement": "certifi==2023.7.22" - } - }, - "grpc_python_dependencies_313_chardet": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "grpc_python_dependencies_313", - "requirement": "chardet==3.0.4" - } - }, - "grpc_python_dependencies_313_charset_normalizer": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "grpc_python_dependencies_313", - "requirement": "charset-normalizer==3.3.2" - } - }, - "grpc_python_dependencies_313_coverage": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "grpc_python_dependencies_313", - "requirement": "coverage==4.5.4" - } - }, - "grpc_python_dependencies_313_cython": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "grpc_python_dependencies_313", - "requirement": "cython==3.0.0" - } - }, - "grpc_python_dependencies_313_deprecated": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "grpc_python_dependencies_313", - "requirement": "Deprecated==1.2.14" - } - }, - "grpc_python_dependencies_313_gevent": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "grpc_python_dependencies_313", - "requirement": "gevent==22.08.0" - } - }, - "grpc_python_dependencies_313_google_api_core": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "grpc_python_dependencies_313", - "requirement": "google-api-core==1.34.1" - } - }, - "grpc_python_dependencies_313_google_auth": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "grpc_python_dependencies_313", - "requirement": "google-auth==2.23.4" - } - }, - "grpc_python_dependencies_313_google_cloud_monitoring": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "grpc_python_dependencies_313", - "requirement": "google-cloud-monitoring==2.16.0" - } - }, - "grpc_python_dependencies_313_google_cloud_trace": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "grpc_python_dependencies_313", - "requirement": "google-cloud-trace==1.11.3" - } - }, - "grpc_python_dependencies_313_googleapis_common_protos": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "grpc_python_dependencies_313", - "requirement": "googleapis-common-protos==1.63.1" - } - }, - "grpc_python_dependencies_313_greenlet": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "grpc_python_dependencies_313", - "requirement": "greenlet==1.1.3.post0" - } - }, - "grpc_python_dependencies_313_idna": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "grpc_python_dependencies_313", - "requirement": "idna==2.7" - } - }, - "grpc_python_dependencies_313_importlib_metadata": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "grpc_python_dependencies_313", - "requirement": "importlib-metadata==6.11.0" - } - }, - "grpc_python_dependencies_313_oauth2client": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "grpc_python_dependencies_313", - "requirement": "oauth2client==4.1.0" - } - }, - "grpc_python_dependencies_313_opencensus_context": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "grpc_python_dependencies_313", - "requirement": "opencensus-context==0.1.3" - } - }, - "grpc_python_dependencies_313_opentelemetry_api": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "grpc_python_dependencies_313", - "requirement": "opentelemetry-api==1.25.0" - } - }, - "grpc_python_dependencies_313_opentelemetry_exporter_prometheus": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "grpc_python_dependencies_313", - "requirement": "opentelemetry-exporter-prometheus==0.46b0" - } - }, - "grpc_python_dependencies_313_opentelemetry_resourcedetector_gcp": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "grpc_python_dependencies_313", - "requirement": "opentelemetry-resourcedetector-gcp==1.6.0a0" - } - }, - "grpc_python_dependencies_313_opentelemetry_sdk": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "grpc_python_dependencies_313", - "requirement": "opentelemetry-sdk==1.25.0" - } - }, - "grpc_python_dependencies_313_opentelemetry_semantic_conventions": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "grpc_python_dependencies_313", - "requirement": "opentelemetry-semantic-conventions==0.46b0" - } - }, - "grpc_python_dependencies_313_prometheus_client": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "grpc_python_dependencies_313", - "requirement": "prometheus_client==0.20.0" - } - }, - "grpc_python_dependencies_313_proto_plus": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "grpc_python_dependencies_313", - "requirement": "proto-plus==1.22.3" - } - }, - "grpc_python_dependencies_313_protobuf": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "grpc_python_dependencies_313", - "requirement": "protobuf>=5.27.1,<6.0dev" - } - }, - "grpc_python_dependencies_313_pyasn1": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "grpc_python_dependencies_313", - "requirement": "pyasn1==0.5.0" - } - }, - "grpc_python_dependencies_313_pyasn1_modules": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "grpc_python_dependencies_313", - "requirement": "pyasn1-modules==0.3.0" - } - }, - "grpc_python_dependencies_313_requests": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "grpc_python_dependencies_313", - "requirement": "requests==2.25.1" - } - }, - "grpc_python_dependencies_313_rsa": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "grpc_python_dependencies_313", - "requirement": "rsa==4.9" - } - }, - "grpc_python_dependencies_313_setuptools": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "grpc_python_dependencies_313", - "requirement": "setuptools==44.1.1" - } - }, - "grpc_python_dependencies_313_typing_extensions": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "grpc_python_dependencies_313", - "requirement": "typing-extensions==4.9.0" - } - }, - "grpc_python_dependencies_313_urllib3": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "grpc_python_dependencies_313", - "requirement": "urllib3==1.26.18" - } - }, - "grpc_python_dependencies_313_wheel": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "grpc_python_dependencies_313", - "requirement": "wheel==0.38.1" - } - }, - "grpc_python_dependencies_313_wrapt": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "grpc_python_dependencies_313", - "requirement": "wrapt==1.16.0" - } - }, - "grpc_python_dependencies_313_zipp": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "grpc_python_dependencies_313", - "requirement": "zipp==3.17.0" - } - }, - "grpc_python_dependencies_313_zope_event": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "grpc_python_dependencies_313", - "requirement": "zope.event==4.5.0" - } - }, - "grpc_python_dependencies_313_zope_interface": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "grpc_python_dependencies_313", - "requirement": "zope.interface==6.1" - } - }, - "grpc_python_dependencies_39_absl_py": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "grpc_python_dependencies_39", - "requirement": "absl-py==1.4.0" - } - }, - "grpc_python_dependencies_39_cachetools": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "grpc_python_dependencies_39", - "requirement": "cachetools==5.3.2" - } - }, - "grpc_python_dependencies_39_certifi": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "grpc_python_dependencies_39", - "requirement": "certifi==2023.7.22" - } - }, - "grpc_python_dependencies_39_chardet": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "grpc_python_dependencies_39", - "requirement": "chardet==3.0.4" - } - }, - "grpc_python_dependencies_39_charset_normalizer": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "grpc_python_dependencies_39", - "requirement": "charset-normalizer==3.3.2" - } - }, - "grpc_python_dependencies_39_coverage": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "grpc_python_dependencies_39", - "requirement": "coverage==4.5.4" - } - }, - "grpc_python_dependencies_39_cython": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "grpc_python_dependencies_39", - "requirement": "cython==3.0.0" - } - }, - "grpc_python_dependencies_39_deprecated": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "grpc_python_dependencies_39", - "requirement": "Deprecated==1.2.14" - } - }, - "grpc_python_dependencies_39_gevent": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "grpc_python_dependencies_39", - "requirement": "gevent==22.08.0" - } - }, - "grpc_python_dependencies_39_google_api_core": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "grpc_python_dependencies_39", - "requirement": "google-api-core==1.34.1" - } - }, - "grpc_python_dependencies_39_google_auth": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "grpc_python_dependencies_39", - "requirement": "google-auth==2.23.4" - } - }, - "grpc_python_dependencies_39_google_cloud_monitoring": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "grpc_python_dependencies_39", - "requirement": "google-cloud-monitoring==2.16.0" - } - }, - "grpc_python_dependencies_39_google_cloud_trace": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "grpc_python_dependencies_39", - "requirement": "google-cloud-trace==1.11.3" - } - }, - "grpc_python_dependencies_39_googleapis_common_protos": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "grpc_python_dependencies_39", - "requirement": "googleapis-common-protos==1.63.1" - } - }, - "grpc_python_dependencies_39_greenlet": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "grpc_python_dependencies_39", - "requirement": "greenlet==1.1.3.post0" - } - }, - "grpc_python_dependencies_39_idna": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "grpc_python_dependencies_39", - "requirement": "idna==2.7" - } - }, - "grpc_python_dependencies_39_importlib_metadata": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "grpc_python_dependencies_39", - "requirement": "importlib-metadata==6.11.0" - } - }, - "grpc_python_dependencies_39_oauth2client": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "grpc_python_dependencies_39", - "requirement": "oauth2client==4.1.0" - } - }, - "grpc_python_dependencies_39_opencensus_context": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "grpc_python_dependencies_39", - "requirement": "opencensus-context==0.1.3" - } - }, - "grpc_python_dependencies_39_opentelemetry_api": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "grpc_python_dependencies_39", - "requirement": "opentelemetry-api==1.25.0" - } - }, - "grpc_python_dependencies_39_opentelemetry_exporter_prometheus": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "grpc_python_dependencies_39", - "requirement": "opentelemetry-exporter-prometheus==0.46b0" - } - }, - "grpc_python_dependencies_39_opentelemetry_resourcedetector_gcp": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "grpc_python_dependencies_39", - "requirement": "opentelemetry-resourcedetector-gcp==1.6.0a0" - } - }, - "grpc_python_dependencies_39_opentelemetry_sdk": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "grpc_python_dependencies_39", - "requirement": "opentelemetry-sdk==1.25.0" - } - }, - "grpc_python_dependencies_39_opentelemetry_semantic_conventions": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "grpc_python_dependencies_39", - "requirement": "opentelemetry-semantic-conventions==0.46b0" - } - }, - "grpc_python_dependencies_39_prometheus_client": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "grpc_python_dependencies_39", - "requirement": "prometheus_client==0.20.0" - } - }, - "grpc_python_dependencies_39_proto_plus": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "grpc_python_dependencies_39", - "requirement": "proto-plus==1.22.3" - } - }, - "grpc_python_dependencies_39_protobuf": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "grpc_python_dependencies_39", - "requirement": "protobuf>=5.27.1,<6.0dev" - } - }, - "grpc_python_dependencies_39_pyasn1": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "grpc_python_dependencies_39", - "requirement": "pyasn1==0.5.0" - } - }, - "grpc_python_dependencies_39_pyasn1_modules": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "grpc_python_dependencies_39", - "requirement": "pyasn1-modules==0.3.0" - } - }, - "grpc_python_dependencies_39_requests": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "grpc_python_dependencies_39", - "requirement": "requests==2.25.1" - } - }, - "grpc_python_dependencies_39_rsa": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "grpc_python_dependencies_39", - "requirement": "rsa==4.9" - } - }, - "grpc_python_dependencies_39_setuptools": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "grpc_python_dependencies_39", - "requirement": "setuptools==44.1.1" - } - }, - "grpc_python_dependencies_39_typing_extensions": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "grpc_python_dependencies_39", - "requirement": "typing-extensions==4.9.0" - } - }, - "grpc_python_dependencies_39_urllib3": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "grpc_python_dependencies_39", - "requirement": "urllib3==1.26.18" - } - }, - "grpc_python_dependencies_39_wheel": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "grpc_python_dependencies_39", - "requirement": "wheel==0.38.1" - } - }, - "grpc_python_dependencies_39_wrapt": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "grpc_python_dependencies_39", - "requirement": "wrapt==1.16.0" - } - }, - "grpc_python_dependencies_39_zipp": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "grpc_python_dependencies_39", - "requirement": "zipp==3.17.0" - } - }, - "grpc_python_dependencies_39_zope_event": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "grpc_python_dependencies_39", - "requirement": "zope.event==4.5.0" - } - }, - "grpc_python_dependencies_39_zope_interface": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@grpc_python_dependencies//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "grpc_python_dependencies_39", - "requirement": "zope.interface==6.1" - } - }, - "pgv_pip_deps_310_astunparse": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pgv_pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "pgv_pip_deps_310", - "requirement": "astunparse==1.6.3" - } - }, - "pgv_pip_deps_310_jinja2": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pgv_pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "pgv_pip_deps_310", - "requirement": "jinja2==3.1.3" - } - }, - "pgv_pip_deps_310_markupsafe": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pgv_pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "pgv_pip_deps_310", - "requirement": "markupsafe==2.1.5" - } - }, - "pgv_pip_deps_310_protobuf": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pgv_pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "pgv_pip_deps_310", - "requirement": "protobuf==5.26.0" - } - }, - "pgv_pip_deps_310_six": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pgv_pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "pgv_pip_deps_310", - "requirement": "six==1.16.0" - } - }, - "pgv_pip_deps_310_validate_email": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pgv_pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "pgv_pip_deps_310", - "requirement": "validate-email==1.3" - } - }, - "pgv_pip_deps_310_wheel": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pgv_pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "pgv_pip_deps_310", - "requirement": "wheel==0.43.0" - } - }, - "pgv_pip_deps_311_astunparse": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pgv_pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "pgv_pip_deps_311", - "requirement": "astunparse==1.6.3" - } - }, - "pgv_pip_deps_311_jinja2": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pgv_pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "pgv_pip_deps_311", - "requirement": "jinja2==3.1.3" - } - }, - "pgv_pip_deps_311_markupsafe": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pgv_pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "pgv_pip_deps_311", - "requirement": "markupsafe==2.1.5" - } - }, - "pgv_pip_deps_311_protobuf": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pgv_pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "pgv_pip_deps_311", - "requirement": "protobuf==5.26.0" - } - }, - "pgv_pip_deps_311_six": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pgv_pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "pgv_pip_deps_311", - "requirement": "six==1.16.0" - } - }, - "pgv_pip_deps_311_validate_email": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pgv_pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "pgv_pip_deps_311", - "requirement": "validate-email==1.3" - } - }, - "pgv_pip_deps_311_wheel": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pgv_pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "pgv_pip_deps_311", - "requirement": "wheel==0.43.0" - } - }, - "pgv_pip_deps_312_astunparse": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pgv_pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "pgv_pip_deps_312", - "requirement": "astunparse==1.6.3" - } - }, - "pgv_pip_deps_312_jinja2": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pgv_pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "pgv_pip_deps_312", - "requirement": "jinja2==3.1.3" - } - }, - "pgv_pip_deps_312_markupsafe": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pgv_pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "pgv_pip_deps_312", - "requirement": "markupsafe==2.1.5" - } - }, - "pgv_pip_deps_312_protobuf": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pgv_pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "pgv_pip_deps_312", - "requirement": "protobuf==5.26.0" - } - }, - "pgv_pip_deps_312_six": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pgv_pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "pgv_pip_deps_312", - "requirement": "six==1.16.0" - } - }, - "pgv_pip_deps_312_validate_email": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pgv_pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "pgv_pip_deps_312", - "requirement": "validate-email==1.3" - } - }, - "pgv_pip_deps_312_wheel": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pgv_pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "pgv_pip_deps_312", - "requirement": "wheel==0.43.0" - } - }, - "pgv_pip_deps_313_astunparse": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pgv_pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "pgv_pip_deps_313", - "requirement": "astunparse==1.6.3" - } - }, - "pgv_pip_deps_313_jinja2": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pgv_pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "pgv_pip_deps_313", - "requirement": "jinja2==3.1.3" - } - }, - "pgv_pip_deps_313_markupsafe": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pgv_pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "pgv_pip_deps_313", - "requirement": "markupsafe==2.1.5" - } - }, - "pgv_pip_deps_313_protobuf": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pgv_pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "pgv_pip_deps_313", - "requirement": "protobuf==5.26.0" - } - }, - "pgv_pip_deps_313_six": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pgv_pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "pgv_pip_deps_313", - "requirement": "six==1.16.0" - } - }, - "pgv_pip_deps_313_validate_email": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pgv_pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "pgv_pip_deps_313", - "requirement": "validate-email==1.3" - } - }, - "pgv_pip_deps_313_wheel": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pgv_pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", - "repo": "pgv_pip_deps_313", - "requirement": "wheel==0.43.0" - } - }, - "pgv_pip_deps_39_astunparse": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pgv_pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "pgv_pip_deps_39", - "requirement": "astunparse==1.6.3" - } - }, - "pgv_pip_deps_39_jinja2": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pgv_pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "pgv_pip_deps_39", - "requirement": "jinja2==3.1.3" - } - }, - "pgv_pip_deps_39_markupsafe": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pgv_pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "pgv_pip_deps_39", - "requirement": "markupsafe==2.1.5" - } - }, - "pgv_pip_deps_39_protobuf": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pgv_pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "pgv_pip_deps_39", - "requirement": "protobuf==5.26.0" - } - }, - "pgv_pip_deps_39_six": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pgv_pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "pgv_pip_deps_39", - "requirement": "six==1.16.0" - } - }, - "pgv_pip_deps_39_validate_email": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pgv_pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "pgv_pip_deps_39", - "requirement": "validate-email==1.3" - } - }, - "pgv_pip_deps_39_wheel": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pgv_pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "pgv_pip_deps_39", - "requirement": "wheel==0.43.0" - } - }, - "pip_deps_310_numpy": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "pip_deps_310", - "requirement": "numpy<=1.26.1" - } - }, - "pip_deps_310_setuptools": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "pip_deps_310", - "requirement": "setuptools<=70.3.0" - } - }, - "pip_deps_311_numpy": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "pip_deps_311", - "requirement": "numpy<=1.26.1" - } - }, - "pip_deps_311_setuptools": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "pip_deps_311", - "requirement": "setuptools<=70.3.0" - } - }, - "pip_deps_312_numpy": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "pip_deps_312", - "requirement": "numpy<=1.26.1" - } - }, - "pip_deps_312_setuptools": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "pip_deps_312", - "requirement": "setuptools<=70.3.0" - } - }, - "pip_deps_38_numpy": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_8_host//:python", - "repo": "pip_deps_38", - "requirement": "numpy<=1.26.1" - } - }, - "pip_deps_38_setuptools": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_8_host//:python", - "repo": "pip_deps_38", - "requirement": "setuptools<=70.3.0" - } - }, - "pip_deps_39_numpy": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "pip_deps_39", - "requirement": "numpy<=1.26.1" - } - }, - "pip_deps_39_setuptools": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "pip_deps_39", - "requirement": "setuptools<=70.3.0" - } - }, - "pypi_310_async_timeout": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pypi//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "pypi_310", - "requirement": "async-timeout==5.0.1" - } - }, - "pypi_310_beautifulsoup4": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pypi//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "pypi_310", - "requirement": "beautifulsoup4==4.12.3" - } - }, - "pypi_310_certifi": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pypi//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "pypi_310", - "requirement": "certifi==2024.12.14" - } - }, - "pypi_310_charset_normalizer": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pypi//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "pypi_310", - "requirement": "charset-normalizer==3.4.1" - } - }, - "pypi_310_dnspython": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pypi//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "pypi_310", - "requirement": "dnspython==2.7.0" - } - }, - "pypi_310_google": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pypi//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "pypi_310", - "requirement": "google==3.0.0" - } - }, - "pypi_310_grpcio": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pypi//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "pypi_310", - "requirement": "grpcio==1.69.0" - } - }, - "pypi_310_hyperon_das_atomdb": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pypi//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "pypi_310", - "requirement": "hyperon-das-atomdb==0.8.10" - } - }, - "pypi_310_hyperon_das_atomdb_cpp": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pypi//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "pypi_310", - "requirement": "hyperon-das-atomdb-cpp==0.0.2" - } - }, - "pypi_310_idna": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pypi//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "pypi_310", - "requirement": "idna==3.10" - } - }, - "pypi_310_mongomock": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pypi//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "pypi_310", - "requirement": "mongomock==4.3.0" - } - }, - "pypi_310_packaging": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pypi//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "pypi_310", - "requirement": "packaging==24.2" - } - }, - "pypi_310_protobuf": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pypi//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "pypi_310", - "requirement": "protobuf==4.25.5" - } - }, - "pypi_310_pymongo": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pypi//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "pypi_310", - "requirement": "pymongo==4.5.0" - } - }, - "pypi_310_python_dotenv": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pypi//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "pypi_310", - "requirement": "python-dotenv==1.0.1" - } - }, - "pypi_310_pytz": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pypi//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "pypi_310", - "requirement": "pytz==2024.2" - } - }, - "pypi_310_redis": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pypi//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "pypi_310", - "requirement": "redis==5.2.1" - } - }, - "pypi_310_requests": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pypi//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "pypi_310", - "requirement": "requests==2.32.3" - } - }, - "pypi_310_sentinels": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pypi//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "pypi_310", - "requirement": "sentinels==1.0.0" - } - }, - "pypi_310_setuptools": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pypi//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "pypi_310", - "requirement": "setuptools==70.3.0" - } - }, - "pypi_310_soupsieve": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pypi//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "pypi_310", - "requirement": "soupsieve==2.6" - } - }, - "pypi_310_urllib3": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pypi//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "pypi_310", - "requirement": "urllib3==2.3.0" - } - }, - "pypi_dev_310_exceptiongroup": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pypi_dev//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "pypi_dev_310", - "requirement": "exceptiongroup==1.2.2" - } - }, - "pypi_dev_310_iniconfig": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pypi_dev//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "pypi_dev_310", - "requirement": "iniconfig==2.0.0" - } - }, - "pypi_dev_310_mongomock": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pypi_dev//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "pypi_dev_310", - "requirement": "mongomock==4.3.0" - } - }, - "pypi_dev_310_packaging": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pypi_dev//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "pypi_dev_310", - "requirement": "packaging==24.2" - } - }, - "pypi_dev_310_pluggy": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pypi_dev//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "pypi_dev_310", - "requirement": "pluggy==1.5.0" - } - }, - "pypi_dev_310_pytest": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pypi_dev//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "pypi_dev_310", - "requirement": "pytest==8.3.4" - } - }, - "pypi_dev_310_pytz": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pypi_dev//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "pypi_dev_310", - "requirement": "pytz==2024.2" - } - }, - "pypi_dev_310_sentinels": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pypi_dev//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "pypi_dev_310", - "requirement": "sentinels==1.0.0" - } - }, - "pypi_dev_310_tomli": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@pypi_dev//{name}:{target}", - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "pypi_dev_310", - "requirement": "tomli==2.2.1" - } - }, - "rules_fuzzing_py_deps_310_absl_py": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", - "extra_pip_args": [ - "--require-hashes" - ], - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "rules_fuzzing_py_deps_310", - "requirement": "absl-py==2.0.0 --hash=sha256:9a28abb62774ae4e8edbe2dd4c49ffcd45a6a848952a5eccc6a49f3f0fc1e2f3" - } - }, - "rules_fuzzing_py_deps_310_six": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", - "extra_pip_args": [ - "--require-hashes" - ], - "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", - "repo": "rules_fuzzing_py_deps_310", - "requirement": "six==1.16.0 --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" - } - }, - "rules_fuzzing_py_deps_311_absl_py": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", - "extra_pip_args": [ - "--require-hashes" - ], - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_fuzzing_py_deps_311", - "requirement": "absl-py==2.0.0 --hash=sha256:9a28abb62774ae4e8edbe2dd4c49ffcd45a6a848952a5eccc6a49f3f0fc1e2f3" - } - }, - "rules_fuzzing_py_deps_311_six": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", - "extra_pip_args": [ - "--require-hashes" - ], - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_fuzzing_py_deps_311", - "requirement": "six==1.16.0 --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" - } - }, - "rules_fuzzing_py_deps_312_absl_py": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", - "extra_pip_args": [ - "--require-hashes" - ], - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "rules_fuzzing_py_deps_312", - "requirement": "absl-py==2.0.0 --hash=sha256:9a28abb62774ae4e8edbe2dd4c49ffcd45a6a848952a5eccc6a49f3f0fc1e2f3" - } - }, - "rules_fuzzing_py_deps_312_six": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", - "extra_pip_args": [ - "--require-hashes" - ], - "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", - "repo": "rules_fuzzing_py_deps_312", - "requirement": "six==1.16.0 --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" - } - }, - "rules_fuzzing_py_deps_38_absl_py": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", - "extra_pip_args": [ - "--require-hashes" - ], - "python_interpreter_target": "@@rules_python++python+python_3_8_host//:python", - "repo": "rules_fuzzing_py_deps_38", - "requirement": "absl-py==2.0.0 --hash=sha256:9a28abb62774ae4e8edbe2dd4c49ffcd45a6a848952a5eccc6a49f3f0fc1e2f3" - } - }, - "rules_fuzzing_py_deps_38_six": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", - "extra_pip_args": [ - "--require-hashes" - ], - "python_interpreter_target": "@@rules_python++python+python_3_8_host//:python", - "repo": "rules_fuzzing_py_deps_38", - "requirement": "six==1.16.0 --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" - } - }, - "rules_fuzzing_py_deps_39_absl_py": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", - "extra_pip_args": [ - "--require-hashes" - ], - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "rules_fuzzing_py_deps_39", - "requirement": "absl-py==2.0.0 --hash=sha256:9a28abb62774ae4e8edbe2dd4c49ffcd45a6a848952a5eccc6a49f3f0fc1e2f3" - } - }, - "rules_fuzzing_py_deps_39_six": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", - "extra_pip_args": [ - "--require-hashes" - ], - "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", - "repo": "rules_fuzzing_py_deps_39", - "requirement": "six==1.16.0 --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" - } - }, - "rules_python_publish_deps_311_backports_tarfile_py3_none_any_77e284d7": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "backports.tarfile-1.2.0-py3-none-any.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "backports-tarfile==1.2.0", - "sha256": "77e284d754527b01fb1e6fa8a1afe577858ebe4e9dad8919e34c862cb399bc34", - "urls": [ - "https://files.pythonhosted.org/packages/b9/fa/123043af240e49752f1c4bd24da5053b6bd00cad78c2be53c0d1e8b975bc/backports.tarfile-1.2.0-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_backports_tarfile_sdist_d75e02c2": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "backports_tarfile-1.2.0.tar.gz", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "backports-tarfile==1.2.0", - "sha256": "d75e02c268746e1b8144c278978b6e98e85de6ad16f8e4b0844a154557eca991", - "urls": [ - "https://files.pythonhosted.org/packages/86/72/cd9b395f25e290e633655a100af28cb253e4393396264a98bd5f5951d50f/backports_tarfile-1.2.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_certifi_py3_none_any_922820b5": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "certifi-2024.8.30-py3-none-any.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "certifi==2024.8.30", - "sha256": "922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8", - "urls": [ - "https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_certifi_sdist_bec941d2": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "certifi-2024.8.30.tar.gz", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "certifi==2024.8.30", - "sha256": "bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9", - "urls": [ - "https://files.pythonhosted.org/packages/b0/ee/9b19140fe824b367c04c5e1b369942dd754c4c5462d5674002f75c4dedc1/certifi-2024.8.30.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_aarch64_a1ed2dd2": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cffi==1.17.1", - "sha256": "a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41", - "urls": [ - "https://files.pythonhosted.org/packages/2e/ea/70ce63780f096e16ce8588efe039d3c4f91deb1dc01e9c73a287939c79a6/cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" - ] - } - }, - "rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_ppc64le_46bf4316": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cffi==1.17.1", - "sha256": "46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1", - "urls": [ - "https://files.pythonhosted.org/packages/1c/a0/a4fa9f4f781bda074c3ddd57a572b060fa0df7655d2a4247bbe277200146/cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" - ] - } - }, - "rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_s390x_a24ed04c": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cffi==1.17.1", - "sha256": "a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6", - "urls": [ - "https://files.pythonhosted.org/packages/62/12/ce8710b5b8affbcdd5c6e367217c242524ad17a02fe5beec3ee339f69f85/cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl" - ] - } - }, - "rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_x86_64_610faea7": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cffi==1.17.1", - "sha256": "610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d", - "urls": [ - "https://files.pythonhosted.org/packages/ff/6b/d45873c5e0242196f042d555526f92aa9e0c32355a1be1ff8c27f077fd37/cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_cffi_cp311_cp311_musllinux_1_1_aarch64_a9b15d49": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cffi==1.17.1", - "sha256": "a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6", - "urls": [ - "https://files.pythonhosted.org/packages/1a/52/d9a0e523a572fbccf2955f5abe883cfa8bcc570d7faeee06336fbd50c9fc/cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl" - ] - } - }, - "rules_python_publish_deps_311_cffi_cp311_cp311_musllinux_1_1_x86_64_fc48c783": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cffi==1.17.1", - "sha256": "fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b", - "urls": [ - "https://files.pythonhosted.org/packages/f8/4a/34599cac7dfcd888ff54e801afe06a19c17787dfd94495ab0c8d35fe99fb/cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_cffi_sdist_1c39c601": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "cffi-1.17.1.tar.gz", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cffi==1.17.1", - "sha256": "1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", - "urls": [ - "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_10_9_universal2_0d99dd8f": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c", - "urls": [ - "https://files.pythonhosted.org/packages/9c/61/73589dcc7a719582bf56aae309b6103d2762b526bffe189d635a7fcfd998/charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_10_9_x86_64_c57516e5": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944", - "urls": [ - "https://files.pythonhosted.org/packages/77/d5/8c982d58144de49f59571f940e329ad6e8615e1e82ef84584c5eeb5e1d72/charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_11_0_arm64_6dba5d19": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee", - "urls": [ - "https://files.pythonhosted.org/packages/bf/19/411a64f01ee971bed3231111b69eb56f9331a769072de479eae7de52296d/charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_aarch64_bf4475b8": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c", - "urls": [ - "https://files.pythonhosted.org/packages/4c/92/97509850f0d00e9f14a46bc751daabd0ad7765cff29cdfb66c68b6dad57f/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_ppc64le_ce031db0": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6", - "urls": [ - "https://files.pythonhosted.org/packages/e2/29/d227805bff72ed6d6cb1ce08eec707f7cfbd9868044893617eb331f16295/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_s390x_8ff4e7cd": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea", - "urls": [ - "https://files.pythonhosted.org/packages/13/bc/87c2c9f2c144bedfa62f894c3007cd4530ba4b5351acb10dc786428a50f0/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_x86_64_3710a975": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc", - "urls": [ - "https://files.pythonhosted.org/packages/eb/5b/6f10bad0f6461fa272bfbbdf5d0023b5fb9bc6217c92bf068fa5a99820f5/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_aarch64_47334db7": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594", - "urls": [ - "https://files.pythonhosted.org/packages/d7/a1/493919799446464ed0299c8eef3c3fad0daf1c3cd48bff9263c731b0d9e2/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_ppc64le_f1a2f519": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365", - "urls": [ - "https://files.pythonhosted.org/packages/75/d2/0ab54463d3410709c09266dfb416d032a08f97fd7d60e94b8c6ef54ae14b/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_s390x_63bc5c4a": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129", - "urls": [ - "https://files.pythonhosted.org/packages/8d/c9/27e41d481557be53d51e60750b85aa40eaf52b841946b3cdeff363105737/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_x86_64_bcb4f8ea": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236", - "urls": [ - "https://files.pythonhosted.org/packages/ee/44/4f62042ca8cdc0cabf87c0fc00ae27cd8b53ab68be3605ba6d071f742ad3/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_win_amd64_cee4373f": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27", - "urls": [ - "https://files.pythonhosted.org/packages/0b/6e/b13bd47fa9023b3699e94abf565b5a2f0b0be6e9ddac9812182596ee62e4/charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_py3_none_any_fe9f97fe": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-py3-none-any.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079", - "urls": [ - "https://files.pythonhosted.org/packages/bf/9b/08c0432272d77b04803958a4598a51e2a4b51c06640af8b8f0f908c18bf2/charset_normalizer-3.4.0-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_sdist_223217c3": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "charset_normalizer-3.4.0.tar.gz", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e", - "urls": [ - "https://files.pythonhosted.org/packages/f2/4f/e1808dc01273379acc506d18f1504eb2d299bd4131743b9fc54d7be4df1e/charset_normalizer-3.4.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_17_aarch64_846da004": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cryptography-43.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cryptography==43.0.3", - "sha256": "846da004a5804145a5f441b8530b4bf35afbf7da70f82409f151695b127213d5", - "urls": [ - "https://files.pythonhosted.org/packages/2f/78/55356eb9075d0be6e81b59f45c7b48df87f76a20e73893872170471f3ee8/cryptography-43.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" - ] - } - }, - "rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_17_x86_64_0f996e72": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cryptography-43.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cryptography==43.0.3", - "sha256": "0f996e7268af62598f2fc1204afa98a3b5712313a55c4c9d434aef49cadc91d4", - "urls": [ - "https://files.pythonhosted.org/packages/2a/2c/488776a3dc843f95f86d2f957ca0fc3407d0242b50bede7fad1e339be03f/cryptography-43.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_28_aarch64_f7b178f1": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cryptography==43.0.3", - "sha256": "f7b178f11ed3664fd0e995a47ed2b5ff0a12d893e41dd0494f406d1cf555cab7", - "urls": [ - "https://files.pythonhosted.org/packages/7c/04/2345ca92f7a22f601a9c62961741ef7dd0127c39f7310dffa0041c80f16f/cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl" - ] - } - }, - "rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_28_x86_64_c2e6fc39": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cryptography==43.0.3", - "sha256": "c2e6fc39c4ab499049df3bdf567f768a723a5e8464816e8f009f121a5a9f4405", - "urls": [ - "https://files.pythonhosted.org/packages/ac/25/e715fa0bc24ac2114ed69da33adf451a38abb6f3f24ec207908112e9ba53/cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_cryptography_cp39_abi3_musllinux_1_2_aarch64_e1be4655": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cryptography-43.0.3-cp39-abi3-musllinux_1_2_aarch64.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cryptography==43.0.3", - "sha256": "e1be4655c7ef6e1bbe6b5d0403526601323420bcf414598955968c9ef3eb7d16", - "urls": [ - "https://files.pythonhosted.org/packages/21/ce/b9c9ff56c7164d8e2edfb6c9305045fbc0df4508ccfdb13ee66eb8c95b0e/cryptography-43.0.3-cp39-abi3-musllinux_1_2_aarch64.whl" - ] - } - }, - "rules_python_publish_deps_311_cryptography_cp39_abi3_musllinux_1_2_x86_64_df6b6c6d": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cryptography-43.0.3-cp39-abi3-musllinux_1_2_x86_64.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cryptography==43.0.3", - "sha256": "df6b6c6d742395dd77a23ea3728ab62f98379eff8fb61be2744d4679ab678f73", - "urls": [ - "https://files.pythonhosted.org/packages/2a/33/b3682992ab2e9476b9c81fff22f02c8b0a1e6e1d49ee1750a67d85fd7ed2/cryptography-43.0.3-cp39-abi3-musllinux_1_2_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_cryptography_sdist_315b9001": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "cryptography-43.0.3.tar.gz", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cryptography==43.0.3", - "sha256": "315b9001266a492a6ff443b61238f956b214dbec9910a081ba5b6646a055a805", - "urls": [ - "https://files.pythonhosted.org/packages/0d/05/07b55d1fa21ac18c3a8c79f764e2514e6f6a9698f1be44994f5adf0d29db/cryptography-43.0.3.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_docutils_py3_none_any_dafca5b9": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "docutils-0.21.2-py3-none-any.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "docutils==0.21.2", - "sha256": "dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2", - "urls": [ - "https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_docutils_sdist_3a6b1873": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "docutils-0.21.2.tar.gz", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "docutils==0.21.2", - "sha256": "3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f", - "urls": [ - "https://files.pythonhosted.org/packages/ae/ed/aefcc8cd0ba62a0560c3c18c33925362d46c6075480bfa4df87b28e169a9/docutils-0.21.2.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_idna_py3_none_any_946d195a": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "idna-3.10-py3-none-any.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "idna==3.10", - "sha256": "946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", - "urls": [ - "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_idna_sdist_12f65c9b": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "idna-3.10.tar.gz", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "idna==3.10", - "sha256": "12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", - "urls": [ - "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_importlib_metadata_py3_none_any_45e54197": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "importlib_metadata-8.5.0-py3-none-any.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "importlib-metadata==8.5.0", - "sha256": "45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b", - "urls": [ - "https://files.pythonhosted.org/packages/a0/d9/a1e041c5e7caa9a05c925f4bdbdfb7f006d1f74996af53467bc394c97be7/importlib_metadata-8.5.0-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_importlib_metadata_sdist_71522656": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "importlib_metadata-8.5.0.tar.gz", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "importlib-metadata==8.5.0", - "sha256": "71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7", - "urls": [ - "https://files.pythonhosted.org/packages/cd/12/33e59336dca5be0c398a7482335911a33aa0e20776128f038019f1a95f1b/importlib_metadata-8.5.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_jaraco_classes_py3_none_any_f662826b": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "jaraco.classes-3.4.0-py3-none-any.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "jaraco-classes==3.4.0", - "sha256": "f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790", - "urls": [ - "https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_jaraco_classes_sdist_47a024b5": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "jaraco.classes-3.4.0.tar.gz", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "jaraco-classes==3.4.0", - "sha256": "47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd", - "urls": [ - "https://files.pythonhosted.org/packages/06/c0/ed4a27bc5571b99e3cff68f8a9fa5b56ff7df1c2251cc715a652ddd26402/jaraco.classes-3.4.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_jaraco_context_py3_none_any_f797fc48": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "jaraco.context-6.0.1-py3-none-any.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "jaraco-context==6.0.1", - "sha256": "f797fc481b490edb305122c9181830a3a5b76d84ef6d1aef2fb9b47ab956f9e4", - "urls": [ - "https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_jaraco_context_sdist_9bae4ea5": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "jaraco_context-6.0.1.tar.gz", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "jaraco-context==6.0.1", - "sha256": "9bae4ea555cf0b14938dc0aee7c9f32ed303aa20a3b73e7dc80111628792d1b3", - "urls": [ - "https://files.pythonhosted.org/packages/df/ad/f3777b81bf0b6e7bc7514a1656d3e637b2e8e15fab2ce3235730b3e7a4e6/jaraco_context-6.0.1.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_jaraco_functools_py3_none_any_ad159f13": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "jaraco.functools-4.1.0-py3-none-any.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "jaraco-functools==4.1.0", - "sha256": "ad159f13428bc4acbf5541ad6dec511f91573b90fba04df61dafa2a1231cf649", - "urls": [ - "https://files.pythonhosted.org/packages/9f/4f/24b319316142c44283d7540e76c7b5a6dbd5db623abd86bb7b3491c21018/jaraco.functools-4.1.0-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_jaraco_functools_sdist_70f7e0e2": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "jaraco_functools-4.1.0.tar.gz", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "jaraco-functools==4.1.0", - "sha256": "70f7e0e2ae076498e212562325e805204fc092d7b4c17e0e86c959e249701a9d", - "urls": [ - "https://files.pythonhosted.org/packages/ab/23/9894b3df5d0a6eb44611c36aec777823fc2e07740dabbd0b810e19594013/jaraco_functools-4.1.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_jeepney_py3_none_any_c0a454ad": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "jeepney-0.8.0-py3-none-any.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "jeepney==0.8.0", - "sha256": "c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755", - "urls": [ - "https://files.pythonhosted.org/packages/ae/72/2a1e2290f1ab1e06f71f3d0f1646c9e4634e70e1d37491535e19266e8dc9/jeepney-0.8.0-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_jeepney_sdist_5efe48d2": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "jeepney-0.8.0.tar.gz", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "jeepney==0.8.0", - "sha256": "5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806", - "urls": [ - "https://files.pythonhosted.org/packages/d6/f4/154cf374c2daf2020e05c3c6a03c91348d59b23c5366e968feb198306fdf/jeepney-0.8.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_keyring_py3_none_any_5426f817": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "keyring-25.4.1-py3-none-any.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "keyring==25.4.1", - "sha256": "5426f817cf7f6f007ba5ec722b1bcad95a75b27d780343772ad76b17cb47b0bf", - "urls": [ - "https://files.pythonhosted.org/packages/83/25/e6d59e5f0a0508d0dca8bb98c7f7fd3772fc943ac3f53d5ab18a218d32c0/keyring-25.4.1-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_keyring_sdist_b07ebc55": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "keyring-25.4.1.tar.gz", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "keyring==25.4.1", - "sha256": "b07ebc55f3e8ed86ac81dd31ef14e81ace9dd9c3d4b5d77a6e9a2016d0d71a1b", - "urls": [ - "https://files.pythonhosted.org/packages/a5/1c/2bdbcfd5d59dc6274ffb175bc29aa07ecbfab196830e0cfbde7bd861a2ea/keyring-25.4.1.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_markdown_it_py_py3_none_any_35521684": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "markdown_it_py-3.0.0-py3-none-any.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "markdown-it-py==3.0.0", - "sha256": "355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", - "urls": [ - "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_markdown_it_py_sdist_e3f60a94": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "markdown-it-py-3.0.0.tar.gz", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "markdown-it-py==3.0.0", - "sha256": "e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", - "urls": [ - "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_mdurl_py3_none_any_84008a41": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "mdurl-0.1.2-py3-none-any.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "mdurl==0.1.2", - "sha256": "84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", - "urls": [ - "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_mdurl_sdist_bb413d29": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "mdurl-0.1.2.tar.gz", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "mdurl==0.1.2", - "sha256": "bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", - "urls": [ - "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_more_itertools_py3_none_any_037b0d32": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "more_itertools-10.5.0-py3-none-any.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "more-itertools==10.5.0", - "sha256": "037b0d3203ce90cca8ab1defbbdac29d5f993fc20131f3664dc8d6acfa872aef", - "urls": [ - "https://files.pythonhosted.org/packages/48/7e/3a64597054a70f7c86eb0a7d4fc315b8c1ab932f64883a297bdffeb5f967/more_itertools-10.5.0-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_more_itertools_sdist_5482bfef": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "more-itertools-10.5.0.tar.gz", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "more-itertools==10.5.0", - "sha256": "5482bfef7849c25dc3c6dd53a6173ae4795da2a41a80faea6700d9f5846c5da6", - "urls": [ - "https://files.pythonhosted.org/packages/51/78/65922308c4248e0eb08ebcbe67c95d48615cc6f27854b6f2e57143e9178f/more-itertools-10.5.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_macosx_10_12_x86_64_14c5a72e": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "14c5a72e9fe82aea5fe3072116ad4661af5cf8e8ff8fc5ad3450f123e4925e86", - "urls": [ - "https://files.pythonhosted.org/packages/b3/89/1daff5d9ba5a95a157c092c7c5f39b8dd2b1ddb4559966f808d31cfb67e0/nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_macosx_10_12_x86_64_7b7c2a3c": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "7b7c2a3c9eb1a827d42539aa64091640bd275b81e097cd1d8d82ef91ffa2e811", - "urls": [ - "https://files.pythonhosted.org/packages/2c/b6/42fc3c69cabf86b6b81e4c051a9b6e249c5ba9f8155590222c2622961f58/nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_aarch64_42c64511": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "42c64511469005058cd17cc1537578eac40ae9f7200bedcfd1fc1a05f4f8c200", - "urls": [ - "https://files.pythonhosted.org/packages/45/b9/833f385403abaf0023c6547389ec7a7acf141ddd9d1f21573723a6eab39a/nh3-0.2.18-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_armv7l_0411beb0": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "0411beb0589eacb6734f28d5497ca2ed379eafab8ad8c84b31bb5c34072b7164", - "urls": [ - "https://files.pythonhosted.org/packages/05/2b/85977d9e11713b5747595ee61f381bc820749daf83f07b90b6c9964cf932/nh3-0.2.18-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_ppc64_5f36b271": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "5f36b271dae35c465ef5e9090e1fdaba4a60a56f0bb0ba03e0932a66f28b9189", - "urls": [ - "https://files.pythonhosted.org/packages/72/f2/5c894d5265ab80a97c68ca36f25c8f6f0308abac649aaf152b74e7e854a8/nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_ppc64le_34c03fa7": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "34c03fa78e328c691f982b7c03d4423bdfd7da69cd707fe572f544cf74ac23ad", - "urls": [ - "https://files.pythonhosted.org/packages/ab/a7/375afcc710dbe2d64cfbd69e31f82f3e423d43737258af01f6a56d844085/nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_s390x_19aaba96": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "19aaba96e0f795bd0a6c56291495ff59364f4300d4a39b29a0abc9cb3774a84b", - "urls": [ - "https://files.pythonhosted.org/packages/c2/a8/3bb02d0c60a03ad3a112b76c46971e9480efa98a8946677b5a59f60130ca/nh3-0.2.18-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_x86_64_de3ceed6": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "de3ceed6e661954871d6cd78b410213bdcb136f79aafe22aa7182e028b8c7307", - "urls": [ - "https://files.pythonhosted.org/packages/1b/63/6ab90d0e5225ab9780f6c9fb52254fa36b52bb7c188df9201d05b647e5e1/nh3-0.2.18-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_aarch64_f0eca9ca": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-musllinux_1_2_aarch64.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "f0eca9ca8628dbb4e916ae2491d72957fdd35f7a5d326b7032a345f111ac07fe", - "urls": [ - "https://files.pythonhosted.org/packages/a3/da/0c4e282bc3cff4a0adf37005fa1fb42257673fbc1bbf7d1ff639ec3d255a/nh3-0.2.18-cp37-abi3-musllinux_1_2_aarch64.whl" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_armv7l_3a157ab1": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-musllinux_1_2_armv7l.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "3a157ab149e591bb638a55c8c6bcb8cdb559c8b12c13a8affaba6cedfe51713a", - "urls": [ - "https://files.pythonhosted.org/packages/de/81/c291231463d21da5f8bba82c8167a6d6893cc5419b0639801ee5d3aeb8a9/nh3-0.2.18-cp37-abi3-musllinux_1_2_armv7l.whl" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_x86_64_36c95d4b": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-musllinux_1_2_x86_64.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "36c95d4b70530b320b365659bb5034341316e6a9b30f0b25fa9c9eff4c27a204", - "urls": [ - "https://files.pythonhosted.org/packages/eb/61/73a007c74c37895fdf66e0edcd881f5eaa17a348ff02f4bb4bc906d61085/nh3-0.2.18-cp37-abi3-musllinux_1_2_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_win_amd64_8ce0f819": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-win_amd64.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "8ce0f819d2f1933953fca255db2471ad58184a60508f03e6285e5114b6254844", - "urls": [ - "https://files.pythonhosted.org/packages/26/8d/53c5b19c4999bdc6ba95f246f4ef35ca83d7d7423e5e38be43ad66544e5d/nh3-0.2.18-cp37-abi3-win_amd64.whl" - ] - } - }, - "rules_python_publish_deps_311_nh3_sdist_94a16692": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "nh3-0.2.18.tar.gz", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "94a166927e53972a9698af9542ace4e38b9de50c34352b962f4d9a7d4c927af4", - "urls": [ - "https://files.pythonhosted.org/packages/62/73/10df50b42ddb547a907deeb2f3c9823022580a7a47281e8eae8e003a9639/nh3-0.2.18.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_pkginfo_py3_none_any_889a6da2": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "pkginfo-1.10.0-py3-none-any.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "pkginfo==1.10.0", - "sha256": "889a6da2ed7ffc58ab5b900d888ddce90bce912f2d2de1dc1c26f4cb9fe65097", - "urls": [ - "https://files.pythonhosted.org/packages/56/09/054aea9b7534a15ad38a363a2bd974c20646ab1582a387a95b8df1bfea1c/pkginfo-1.10.0-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_pkginfo_sdist_5df73835": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "pkginfo-1.10.0.tar.gz", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "pkginfo==1.10.0", - "sha256": "5df73835398d10db79f8eecd5cd86b1f6d29317589ea70796994d49399af6297", - "urls": [ - "https://files.pythonhosted.org/packages/2f/72/347ec5be4adc85c182ed2823d8d1c7b51e13b9a6b0c1aae59582eca652df/pkginfo-1.10.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_pycparser_py3_none_any_c3702b6d": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "pycparser-2.22-py3-none-any.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "pycparser==2.22", - "sha256": "c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", - "urls": [ - "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_pycparser_sdist_491c8be9": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "pycparser-2.22.tar.gz", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "pycparser==2.22", - "sha256": "491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", - "urls": [ - "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_pygments_py3_none_any_b8e6aca0": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "pygments-2.18.0-py3-none-any.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "pygments==2.18.0", - "sha256": "b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a", - "urls": [ - "https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_pygments_sdist_786ff802": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "pygments-2.18.0.tar.gz", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "pygments==2.18.0", - "sha256": "786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199", - "urls": [ - "https://files.pythonhosted.org/packages/8e/62/8336eff65bcbc8e4cb5d05b55faf041285951b6e80f33e2bff2024788f31/pygments-2.18.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_pywin32_ctypes_py3_none_any_8a151337": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_windows_x86_64" - ], - "filename": "pywin32_ctypes-0.2.3-py3-none-any.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "pywin32-ctypes==0.2.3", - "sha256": "8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8", - "urls": [ - "https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_pywin32_ctypes_sdist_d162dc04": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "pywin32-ctypes-0.2.3.tar.gz", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "pywin32-ctypes==0.2.3", - "sha256": "d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755", - "urls": [ - "https://files.pythonhosted.org/packages/85/9f/01a1a99704853cb63f253eea009390c88e7131c67e66a0a02099a8c917cb/pywin32-ctypes-0.2.3.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_readme_renderer_py3_none_any_2fbca89b": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "readme_renderer-44.0-py3-none-any.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "readme-renderer==44.0", - "sha256": "2fbca89b81a08526aadf1357a8c2ae889ec05fb03f5da67f9769c9a592166151", - "urls": [ - "https://files.pythonhosted.org/packages/e1/67/921ec3024056483db83953ae8e48079ad62b92db7880013ca77632921dd0/readme_renderer-44.0-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_readme_renderer_sdist_8712034e": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "readme_renderer-44.0.tar.gz", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "readme-renderer==44.0", - "sha256": "8712034eabbfa6805cacf1402b4eeb2a73028f72d1166d6f5cb7f9c047c5d1e1", - "urls": [ - "https://files.pythonhosted.org/packages/5a/a9/104ec9234c8448c4379768221ea6df01260cd6c2ce13182d4eac531c8342/readme_renderer-44.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_requests_py3_none_any_70761cfe": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "requests-2.32.3-py3-none-any.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "requests==2.32.3", - "sha256": "70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", - "urls": [ - "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_requests_sdist_55365417": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "requests-2.32.3.tar.gz", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "requests==2.32.3", - "sha256": "55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", - "urls": [ - "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_requests_toolbelt_py2_none_any_cccfdd66": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "requests_toolbelt-1.0.0-py2.py3-none-any.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "requests-toolbelt==1.0.0", - "sha256": "cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06", - "urls": [ - "https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_requests_toolbelt_sdist_7681a0a3": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "requests-toolbelt-1.0.0.tar.gz", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "requests-toolbelt==1.0.0", - "sha256": "7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6", - "urls": [ - "https://files.pythonhosted.org/packages/f3/61/d7545dafb7ac2230c70d38d31cbfe4cc64f7144dc41f6e4e4b78ecd9f5bb/requests-toolbelt-1.0.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_rfc3986_py2_none_any_50b1502b": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "rfc3986-2.0.0-py2.py3-none-any.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "rfc3986==2.0.0", - "sha256": "50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd", - "urls": [ - "https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_rfc3986_sdist_97aacf9d": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "rfc3986-2.0.0.tar.gz", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "rfc3986==2.0.0", - "sha256": "97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c", - "urls": [ - "https://files.pythonhosted.org/packages/85/40/1520d68bfa07ab5a6f065a186815fb6610c86fe957bc065754e47f7b0840/rfc3986-2.0.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_rich_py3_none_any_6049d5e6": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "rich-13.9.4-py3-none-any.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "rich==13.9.4", - "sha256": "6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90", - "urls": [ - "https://files.pythonhosted.org/packages/19/71/39c7c0d87f8d4e6c020a393182060eaefeeae6c01dab6a84ec346f2567df/rich-13.9.4-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_rich_sdist_43959497": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "rich-13.9.4.tar.gz", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "rich==13.9.4", - "sha256": "439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098", - "urls": [ - "https://files.pythonhosted.org/packages/ab/3a/0316b28d0761c6734d6bc14e770d85506c986c85ffb239e688eeaab2c2bc/rich-13.9.4.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_secretstorage_py3_none_any_f356e662": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "SecretStorage-3.3.3-py3-none-any.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "secretstorage==3.3.3", - "sha256": "f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99", - "urls": [ - "https://files.pythonhosted.org/packages/54/24/b4293291fa1dd830f353d2cb163295742fa87f179fcc8a20a306a81978b7/SecretStorage-3.3.3-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_secretstorage_sdist_2403533e": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "SecretStorage-3.3.3.tar.gz", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "secretstorage==3.3.3", - "sha256": "2403533ef369eca6d2ba81718576c5e0f564d5cca1b58f73a8b23e7d4eeebd77", - "urls": [ - "https://files.pythonhosted.org/packages/53/a4/f48c9d79cb507ed1373477dbceaba7401fd8a23af63b837fa61f1dcd3691/SecretStorage-3.3.3.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_twine_py3_none_any_215dbe7b": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "twine-5.1.1-py3-none-any.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "twine==5.1.1", - "sha256": "215dbe7b4b94c2c50a7315c0275d2258399280fbb7d04182c7e55e24b5f93997", - "urls": [ - "https://files.pythonhosted.org/packages/5d/ec/00f9d5fd040ae29867355e559a94e9a8429225a0284a3f5f091a3878bfc0/twine-5.1.1-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_twine_sdist_9aa08251": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "twine-5.1.1.tar.gz", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "twine==5.1.1", - "sha256": "9aa0825139c02b3434d913545c7b847a21c835e11597f5255842d457da2322db", - "urls": [ - "https://files.pythonhosted.org/packages/77/68/bd982e5e949ef8334e6f7dcf76ae40922a8750aa2e347291ae1477a4782b/twine-5.1.1.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_urllib3_py3_none_any_ca899ca0": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "urllib3-2.2.3-py3-none-any.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "urllib3==2.2.3", - "sha256": "ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac", - "urls": [ - "https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_urllib3_sdist_e7d814a8": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "urllib3-2.2.3.tar.gz", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "urllib3==2.2.3", - "sha256": "e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9", - "urls": [ - "https://files.pythonhosted.org/packages/ed/63/22ba4ebfe7430b76388e7cd448d5478814d3032121827c12a2cc287e2260/urllib3-2.2.3.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_zipp_py3_none_any_a817ac80": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "zipp-3.20.2-py3-none-any.whl", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "zipp==3.20.2", - "sha256": "a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350", - "urls": [ - "https://files.pythonhosted.org/packages/62/8b/5ba542fa83c90e09eac972fc9baca7a88e7e7ca4b221a89251954019308b/zipp-3.20.2-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_zipp_sdist_bc9eb26f": { - "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "zipp-3.20.2.tar.gz", - "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "zipp==3.20.2", - "sha256": "bc9eb26f4506fda01b81bcde0ca78103b6e62f991b381fec825435c836edbc29", - "urls": [ - "https://files.pythonhosted.org/packages/54/bf/5c0000c44ebc80123ecbdddba1f5dcd94a5ada602a9c225d84b5aaa55e86/zipp-3.20.2.tar.gz" - ] - } - }, - "grpc_python_dependencies": { - "repoRuleId": "@@rules_python+//python/private/pypi:hub_repository.bzl%hub_repository", - "attributes": { - "repo_name": "grpc_python_dependencies", - "extra_hub_aliases": {}, - "whl_map": { - "absl_py": "{\"grpc_python_dependencies_310_absl_py\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_absl_py\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_absl_py\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_absl_py\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_absl_py\":[{\"version\":\"3.9\"}]}", - "cachetools": "{\"grpc_python_dependencies_310_cachetools\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_cachetools\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_cachetools\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_cachetools\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_cachetools\":[{\"version\":\"3.9\"}]}", - "certifi": "{\"grpc_python_dependencies_310_certifi\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_certifi\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_certifi\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_certifi\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_certifi\":[{\"version\":\"3.9\"}]}", - "chardet": "{\"grpc_python_dependencies_310_chardet\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_chardet\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_chardet\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_chardet\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_chardet\":[{\"version\":\"3.9\"}]}", - "charset_normalizer": "{\"grpc_python_dependencies_310_charset_normalizer\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_charset_normalizer\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_charset_normalizer\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_charset_normalizer\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_charset_normalizer\":[{\"version\":\"3.9\"}]}", - "coverage": "{\"grpc_python_dependencies_310_coverage\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_coverage\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_coverage\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_coverage\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_coverage\":[{\"version\":\"3.9\"}]}", - "cython": "{\"grpc_python_dependencies_310_cython\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_cython\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_cython\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_cython\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_cython\":[{\"version\":\"3.9\"}]}", - "deprecated": "{\"grpc_python_dependencies_310_deprecated\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_deprecated\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_deprecated\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_deprecated\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_deprecated\":[{\"version\":\"3.9\"}]}", - "gevent": "{\"grpc_python_dependencies_310_gevent\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_gevent\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_gevent\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_gevent\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_gevent\":[{\"version\":\"3.9\"}]}", - "google_api_core": "{\"grpc_python_dependencies_310_google_api_core\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_google_api_core\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_google_api_core\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_google_api_core\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_google_api_core\":[{\"version\":\"3.9\"}]}", - "google_auth": "{\"grpc_python_dependencies_310_google_auth\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_google_auth\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_google_auth\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_google_auth\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_google_auth\":[{\"version\":\"3.9\"}]}", - "google_cloud_monitoring": "{\"grpc_python_dependencies_310_google_cloud_monitoring\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_google_cloud_monitoring\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_google_cloud_monitoring\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_google_cloud_monitoring\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_google_cloud_monitoring\":[{\"version\":\"3.9\"}]}", - "google_cloud_trace": "{\"grpc_python_dependencies_310_google_cloud_trace\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_google_cloud_trace\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_google_cloud_trace\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_google_cloud_trace\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_google_cloud_trace\":[{\"version\":\"3.9\"}]}", - "googleapis_common_protos": "{\"grpc_python_dependencies_310_googleapis_common_protos\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_googleapis_common_protos\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_googleapis_common_protos\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_googleapis_common_protos\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_googleapis_common_protos\":[{\"version\":\"3.9\"}]}", - "greenlet": "{\"grpc_python_dependencies_310_greenlet\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_greenlet\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_greenlet\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_greenlet\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_greenlet\":[{\"version\":\"3.9\"}]}", - "idna": "{\"grpc_python_dependencies_310_idna\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_idna\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_idna\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_idna\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_idna\":[{\"version\":\"3.9\"}]}", - "importlib_metadata": "{\"grpc_python_dependencies_310_importlib_metadata\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_importlib_metadata\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_importlib_metadata\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_importlib_metadata\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_importlib_metadata\":[{\"version\":\"3.9\"}]}", - "oauth2client": "{\"grpc_python_dependencies_310_oauth2client\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_oauth2client\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_oauth2client\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_oauth2client\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_oauth2client\":[{\"version\":\"3.9\"}]}", - "opencensus_context": "{\"grpc_python_dependencies_310_opencensus_context\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_opencensus_context\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_opencensus_context\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_opencensus_context\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_opencensus_context\":[{\"version\":\"3.9\"}]}", - "opentelemetry_api": "{\"grpc_python_dependencies_310_opentelemetry_api\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_opentelemetry_api\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_opentelemetry_api\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_opentelemetry_api\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_opentelemetry_api\":[{\"version\":\"3.9\"}]}", - "opentelemetry_exporter_prometheus": "{\"grpc_python_dependencies_310_opentelemetry_exporter_prometheus\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_opentelemetry_exporter_prometheus\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_opentelemetry_exporter_prometheus\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_opentelemetry_exporter_prometheus\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_opentelemetry_exporter_prometheus\":[{\"version\":\"3.9\"}]}", - "opentelemetry_resourcedetector_gcp": "{\"grpc_python_dependencies_310_opentelemetry_resourcedetector_gcp\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_opentelemetry_resourcedetector_gcp\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_opentelemetry_resourcedetector_gcp\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_opentelemetry_resourcedetector_gcp\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_opentelemetry_resourcedetector_gcp\":[{\"version\":\"3.9\"}]}", - "opentelemetry_sdk": "{\"grpc_python_dependencies_310_opentelemetry_sdk\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_opentelemetry_sdk\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_opentelemetry_sdk\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_opentelemetry_sdk\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_opentelemetry_sdk\":[{\"version\":\"3.9\"}]}", - "opentelemetry_semantic_conventions": "{\"grpc_python_dependencies_310_opentelemetry_semantic_conventions\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_opentelemetry_semantic_conventions\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_opentelemetry_semantic_conventions\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_opentelemetry_semantic_conventions\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_opentelemetry_semantic_conventions\":[{\"version\":\"3.9\"}]}", - "prometheus_client": "{\"grpc_python_dependencies_310_prometheus_client\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_prometheus_client\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_prometheus_client\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_prometheus_client\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_prometheus_client\":[{\"version\":\"3.9\"}]}", - "proto_plus": "{\"grpc_python_dependencies_310_proto_plus\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_proto_plus\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_proto_plus\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_proto_plus\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_proto_plus\":[{\"version\":\"3.9\"}]}", - "protobuf": "{\"grpc_python_dependencies_310_protobuf\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_protobuf\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_protobuf\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_protobuf\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_protobuf\":[{\"version\":\"3.9\"}]}", - "pyasn1": "{\"grpc_python_dependencies_310_pyasn1\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_pyasn1\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_pyasn1\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_pyasn1\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_pyasn1\":[{\"version\":\"3.9\"}]}", - "pyasn1_modules": "{\"grpc_python_dependencies_310_pyasn1_modules\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_pyasn1_modules\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_pyasn1_modules\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_pyasn1_modules\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_pyasn1_modules\":[{\"version\":\"3.9\"}]}", - "requests": "{\"grpc_python_dependencies_310_requests\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_requests\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_requests\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_requests\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_requests\":[{\"version\":\"3.9\"}]}", - "rsa": "{\"grpc_python_dependencies_310_rsa\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_rsa\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_rsa\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_rsa\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_rsa\":[{\"version\":\"3.9\"}]}", - "setuptools": "{\"grpc_python_dependencies_310_setuptools\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_setuptools\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_setuptools\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_setuptools\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_setuptools\":[{\"version\":\"3.9\"}]}", - "typing_extensions": "{\"grpc_python_dependencies_310_typing_extensions\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_typing_extensions\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_typing_extensions\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_typing_extensions\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_typing_extensions\":[{\"version\":\"3.9\"}]}", - "urllib3": "{\"grpc_python_dependencies_310_urllib3\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_urllib3\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_urllib3\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_urllib3\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_urllib3\":[{\"version\":\"3.9\"}]}", - "wheel": "{\"grpc_python_dependencies_310_wheel\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_wheel\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_wheel\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_wheel\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_wheel\":[{\"version\":\"3.9\"}]}", - "wrapt": "{\"grpc_python_dependencies_310_wrapt\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_wrapt\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_wrapt\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_wrapt\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_wrapt\":[{\"version\":\"3.9\"}]}", - "zipp": "{\"grpc_python_dependencies_310_zipp\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_zipp\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_zipp\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_zipp\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_zipp\":[{\"version\":\"3.9\"}]}", - "zope_event": "{\"grpc_python_dependencies_310_zope_event\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_zope_event\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_zope_event\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_zope_event\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_zope_event\":[{\"version\":\"3.9\"}]}", - "zope_interface": "{\"grpc_python_dependencies_310_zope_interface\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_zope_interface\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_zope_interface\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_zope_interface\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_zope_interface\":[{\"version\":\"3.9\"}]}" - }, - "packages": [ - "absl_py", - "cachetools", - "certifi", - "chardet", - "charset_normalizer", - "coverage", - "cython", - "deprecated", - "gevent", - "google_api_core", - "google_auth", - "google_cloud_monitoring", - "google_cloud_trace", - "googleapis_common_protos", - "greenlet", - "idna", - "importlib_metadata", - "oauth2client", - "opencensus_context", - "opentelemetry_api", - "opentelemetry_exporter_prometheus", - "opentelemetry_resourcedetector_gcp", - "opentelemetry_sdk", - "opentelemetry_semantic_conventions", - "prometheus_client", - "proto_plus", - "protobuf", - "pyasn1", - "pyasn1_modules", - "requests", - "rsa", - "setuptools", - "typing_extensions", - "urllib3", - "wheel", - "wrapt", - "zipp", - "zope_event", - "zope_interface" - ], - "groups": {} - } - }, - "pgv_pip_deps": { - "repoRuleId": "@@rules_python+//python/private/pypi:hub_repository.bzl%hub_repository", - "attributes": { - "repo_name": "pgv_pip_deps", - "extra_hub_aliases": {}, - "whl_map": { - "astunparse": "{\"pgv_pip_deps_310_astunparse\":[{\"version\":\"3.10\"}],\"pgv_pip_deps_311_astunparse\":[{\"version\":\"3.11\"}],\"pgv_pip_deps_312_astunparse\":[{\"version\":\"3.12\"}],\"pgv_pip_deps_313_astunparse\":[{\"version\":\"3.13\"}],\"pgv_pip_deps_39_astunparse\":[{\"version\":\"3.9\"}]}", - "jinja2": "{\"pgv_pip_deps_310_jinja2\":[{\"version\":\"3.10\"}],\"pgv_pip_deps_311_jinja2\":[{\"version\":\"3.11\"}],\"pgv_pip_deps_312_jinja2\":[{\"version\":\"3.12\"}],\"pgv_pip_deps_313_jinja2\":[{\"version\":\"3.13\"}],\"pgv_pip_deps_39_jinja2\":[{\"version\":\"3.9\"}]}", - "markupsafe": "{\"pgv_pip_deps_310_markupsafe\":[{\"version\":\"3.10\"}],\"pgv_pip_deps_311_markupsafe\":[{\"version\":\"3.11\"}],\"pgv_pip_deps_312_markupsafe\":[{\"version\":\"3.12\"}],\"pgv_pip_deps_313_markupsafe\":[{\"version\":\"3.13\"}],\"pgv_pip_deps_39_markupsafe\":[{\"version\":\"3.9\"}]}", - "protobuf": "{\"pgv_pip_deps_310_protobuf\":[{\"version\":\"3.10\"}],\"pgv_pip_deps_311_protobuf\":[{\"version\":\"3.11\"}],\"pgv_pip_deps_312_protobuf\":[{\"version\":\"3.12\"}],\"pgv_pip_deps_313_protobuf\":[{\"version\":\"3.13\"}],\"pgv_pip_deps_39_protobuf\":[{\"version\":\"3.9\"}]}", - "six": "{\"pgv_pip_deps_310_six\":[{\"version\":\"3.10\"}],\"pgv_pip_deps_311_six\":[{\"version\":\"3.11\"}],\"pgv_pip_deps_312_six\":[{\"version\":\"3.12\"}],\"pgv_pip_deps_313_six\":[{\"version\":\"3.13\"}],\"pgv_pip_deps_39_six\":[{\"version\":\"3.9\"}]}", - "validate_email": "{\"pgv_pip_deps_310_validate_email\":[{\"version\":\"3.10\"}],\"pgv_pip_deps_311_validate_email\":[{\"version\":\"3.11\"}],\"pgv_pip_deps_312_validate_email\":[{\"version\":\"3.12\"}],\"pgv_pip_deps_313_validate_email\":[{\"version\":\"3.13\"}],\"pgv_pip_deps_39_validate_email\":[{\"version\":\"3.9\"}]}", - "wheel": "{\"pgv_pip_deps_310_wheel\":[{\"version\":\"3.10\"}],\"pgv_pip_deps_311_wheel\":[{\"version\":\"3.11\"}],\"pgv_pip_deps_312_wheel\":[{\"version\":\"3.12\"}],\"pgv_pip_deps_313_wheel\":[{\"version\":\"3.13\"}],\"pgv_pip_deps_39_wheel\":[{\"version\":\"3.9\"}]}" - }, - "packages": [ - "astunparse", - "jinja2", - "markupsafe", - "protobuf", - "six", - "validate_email", - "wheel" - ], - "groups": {} - } - }, - "pip_deps": { - "repoRuleId": "@@rules_python+//python/private/pypi:hub_repository.bzl%hub_repository", - "attributes": { - "repo_name": "pip_deps", - "extra_hub_aliases": {}, - "whl_map": { - "numpy": "{\"pip_deps_310_numpy\":[{\"version\":\"3.10\"}],\"pip_deps_311_numpy\":[{\"version\":\"3.11\"}],\"pip_deps_312_numpy\":[{\"version\":\"3.12\"}],\"pip_deps_38_numpy\":[{\"version\":\"3.8\"}],\"pip_deps_39_numpy\":[{\"version\":\"3.9\"}]}", - "setuptools": "{\"pip_deps_310_setuptools\":[{\"version\":\"3.10\"}],\"pip_deps_311_setuptools\":[{\"version\":\"3.11\"}],\"pip_deps_312_setuptools\":[{\"version\":\"3.12\"}],\"pip_deps_38_setuptools\":[{\"version\":\"3.8\"}],\"pip_deps_39_setuptools\":[{\"version\":\"3.9\"}]}" - }, - "packages": [ - "numpy", - "setuptools" - ], - "groups": {} - } - }, - "pypi": { - "repoRuleId": "@@rules_python+//python/private/pypi:hub_repository.bzl%hub_repository", - "attributes": { - "repo_name": "pypi", - "extra_hub_aliases": {}, - "whl_map": { - "async_timeout": "{\"pypi_310_async_timeout\":[{\"version\":\"3.10\"}]}", - "beautifulsoup4": "{\"pypi_310_beautifulsoup4\":[{\"version\":\"3.10\"}]}", - "certifi": "{\"pypi_310_certifi\":[{\"version\":\"3.10\"}]}", - "charset_normalizer": "{\"pypi_310_charset_normalizer\":[{\"version\":\"3.10\"}]}", - "dnspython": "{\"pypi_310_dnspython\":[{\"version\":\"3.10\"}]}", - "google": "{\"pypi_310_google\":[{\"version\":\"3.10\"}]}", - "grpcio": "{\"pypi_310_grpcio\":[{\"version\":\"3.10\"}]}", - "hyperon_das_atomdb": "{\"pypi_310_hyperon_das_atomdb\":[{\"version\":\"3.10\"}]}", - "hyperon_das_atomdb_cpp": "{\"pypi_310_hyperon_das_atomdb_cpp\":[{\"version\":\"3.10\"}]}", - "idna": "{\"pypi_310_idna\":[{\"version\":\"3.10\"}]}", - "mongomock": "{\"pypi_310_mongomock\":[{\"version\":\"3.10\"}]}", - "packaging": "{\"pypi_310_packaging\":[{\"version\":\"3.10\"}]}", - "protobuf": "{\"pypi_310_protobuf\":[{\"version\":\"3.10\"}]}", - "pymongo": "{\"pypi_310_pymongo\":[{\"version\":\"3.10\"}]}", - "python_dotenv": "{\"pypi_310_python_dotenv\":[{\"version\":\"3.10\"}]}", - "pytz": "{\"pypi_310_pytz\":[{\"version\":\"3.10\"}]}", - "redis": "{\"pypi_310_redis\":[{\"version\":\"3.10\"}]}", - "requests": "{\"pypi_310_requests\":[{\"version\":\"3.10\"}]}", - "sentinels": "{\"pypi_310_sentinels\":[{\"version\":\"3.10\"}]}", - "setuptools": "{\"pypi_310_setuptools\":[{\"version\":\"3.10\"}]}", - "soupsieve": "{\"pypi_310_soupsieve\":[{\"version\":\"3.10\"}]}", - "urllib3": "{\"pypi_310_urllib3\":[{\"version\":\"3.10\"}]}" - }, - "packages": [ - "async_timeout", - "beautifulsoup4", - "certifi", - "charset_normalizer", - "dnspython", - "google", - "grpcio", - "hyperon_das_atomdb", - "hyperon_das_atomdb_cpp", - "idna", - "mongomock", - "packaging", - "protobuf", - "pymongo", - "python_dotenv", - "pytz", - "redis", - "requests", - "sentinels", - "setuptools", - "soupsieve", - "urllib3" - ], - "groups": {} - } - }, - "pypi_dev": { - "repoRuleId": "@@rules_python+//python/private/pypi:hub_repository.bzl%hub_repository", - "attributes": { - "repo_name": "pypi_dev", - "extra_hub_aliases": {}, - "whl_map": { - "exceptiongroup": "{\"pypi_dev_310_exceptiongroup\":[{\"version\":\"3.10\"}]}", - "iniconfig": "{\"pypi_dev_310_iniconfig\":[{\"version\":\"3.10\"}]}", - "mongomock": "{\"pypi_dev_310_mongomock\":[{\"version\":\"3.10\"}]}", - "packaging": "{\"pypi_dev_310_packaging\":[{\"version\":\"3.10\"}]}", - "pluggy": "{\"pypi_dev_310_pluggy\":[{\"version\":\"3.10\"}]}", - "pytest": "{\"pypi_dev_310_pytest\":[{\"version\":\"3.10\"}]}", - "pytz": "{\"pypi_dev_310_pytz\":[{\"version\":\"3.10\"}]}", - "sentinels": "{\"pypi_dev_310_sentinels\":[{\"version\":\"3.10\"}]}", - "tomli": "{\"pypi_dev_310_tomli\":[{\"version\":\"3.10\"}]}" - }, - "packages": [ - "exceptiongroup", - "iniconfig", - "mongomock", - "packaging", - "pluggy", - "pytest", - "pytz", - "sentinels", - "tomli" - ], - "groups": {} - } - }, - "rules_fuzzing_py_deps": { - "repoRuleId": "@@rules_python+//python/private/pypi:hub_repository.bzl%hub_repository", - "attributes": { - "repo_name": "rules_fuzzing_py_deps", - "extra_hub_aliases": {}, - "whl_map": { - "absl_py": "{\"rules_fuzzing_py_deps_310_absl_py\":[{\"version\":\"3.10\"}],\"rules_fuzzing_py_deps_311_absl_py\":[{\"version\":\"3.11\"}],\"rules_fuzzing_py_deps_312_absl_py\":[{\"version\":\"3.12\"}],\"rules_fuzzing_py_deps_38_absl_py\":[{\"version\":\"3.8\"}],\"rules_fuzzing_py_deps_39_absl_py\":[{\"version\":\"3.9\"}]}", - "six": "{\"rules_fuzzing_py_deps_310_six\":[{\"version\":\"3.10\"}],\"rules_fuzzing_py_deps_311_six\":[{\"version\":\"3.11\"}],\"rules_fuzzing_py_deps_312_six\":[{\"version\":\"3.12\"}],\"rules_fuzzing_py_deps_38_six\":[{\"version\":\"3.8\"}],\"rules_fuzzing_py_deps_39_six\":[{\"version\":\"3.9\"}]}" - }, - "packages": [ - "absl_py", - "six" - ], - "groups": {} - } - }, - "rules_python_publish_deps": { - "repoRuleId": "@@rules_python+//python/private/pypi:hub_repository.bzl%hub_repository", - "attributes": { - "repo_name": "rules_python_publish_deps", - "extra_hub_aliases": {}, - "whl_map": { - "backports_tarfile": "{\"rules_python_publish_deps_311_backports_tarfile_py3_none_any_77e284d7\":[{\"filename\":\"backports.tarfile-1.2.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_backports_tarfile_sdist_d75e02c2\":[{\"filename\":\"backports_tarfile-1.2.0.tar.gz\",\"version\":\"3.11\"}]}", - "certifi": "{\"rules_python_publish_deps_311_certifi_py3_none_any_922820b5\":[{\"filename\":\"certifi-2024.8.30-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_certifi_sdist_bec941d2\":[{\"filename\":\"certifi-2024.8.30.tar.gz\",\"version\":\"3.11\"}]}", - "cffi": "{\"rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_aarch64_a1ed2dd2\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_ppc64le_46bf4316\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_s390x_a24ed04c\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_x86_64_610faea7\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_cp311_cp311_musllinux_1_1_aarch64_a9b15d49\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_cp311_cp311_musllinux_1_1_x86_64_fc48c783\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_sdist_1c39c601\":[{\"filename\":\"cffi-1.17.1.tar.gz\",\"version\":\"3.11\"}]}", - "charset_normalizer": "{\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_10_9_universal2_0d99dd8f\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_10_9_x86_64_c57516e5\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_11_0_arm64_6dba5d19\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_aarch64_bf4475b8\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_ppc64le_ce031db0\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_s390x_8ff4e7cd\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_x86_64_3710a975\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_aarch64_47334db7\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_ppc64le_f1a2f519\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_s390x_63bc5c4a\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_x86_64_bcb4f8ea\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_win_amd64_cee4373f\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_py3_none_any_fe9f97fe\":[{\"filename\":\"charset_normalizer-3.4.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_sdist_223217c3\":[{\"filename\":\"charset_normalizer-3.4.0.tar.gz\",\"version\":\"3.11\"}]}", - "cryptography": "{\"rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_17_aarch64_846da004\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_17_x86_64_0f996e72\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_28_aarch64_f7b178f1\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_28_x86_64_c2e6fc39\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_cp39_abi3_musllinux_1_2_aarch64_e1be4655\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-musllinux_1_2_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_cp39_abi3_musllinux_1_2_x86_64_df6b6c6d\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-musllinux_1_2_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_sdist_315b9001\":[{\"filename\":\"cryptography-43.0.3.tar.gz\",\"version\":\"3.11\"}]}", - "docutils": "{\"rules_python_publish_deps_311_docutils_py3_none_any_dafca5b9\":[{\"filename\":\"docutils-0.21.2-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_docutils_sdist_3a6b1873\":[{\"filename\":\"docutils-0.21.2.tar.gz\",\"version\":\"3.11\"}]}", - "idna": "{\"rules_python_publish_deps_311_idna_py3_none_any_946d195a\":[{\"filename\":\"idna-3.10-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_idna_sdist_12f65c9b\":[{\"filename\":\"idna-3.10.tar.gz\",\"version\":\"3.11\"}]}", - "importlib_metadata": "{\"rules_python_publish_deps_311_importlib_metadata_py3_none_any_45e54197\":[{\"filename\":\"importlib_metadata-8.5.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_importlib_metadata_sdist_71522656\":[{\"filename\":\"importlib_metadata-8.5.0.tar.gz\",\"version\":\"3.11\"}]}", - "jaraco_classes": "{\"rules_python_publish_deps_311_jaraco_classes_py3_none_any_f662826b\":[{\"filename\":\"jaraco.classes-3.4.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_jaraco_classes_sdist_47a024b5\":[{\"filename\":\"jaraco.classes-3.4.0.tar.gz\",\"version\":\"3.11\"}]}", - "jaraco_context": "{\"rules_python_publish_deps_311_jaraco_context_py3_none_any_f797fc48\":[{\"filename\":\"jaraco.context-6.0.1-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_jaraco_context_sdist_9bae4ea5\":[{\"filename\":\"jaraco_context-6.0.1.tar.gz\",\"version\":\"3.11\"}]}", - "jaraco_functools": "{\"rules_python_publish_deps_311_jaraco_functools_py3_none_any_ad159f13\":[{\"filename\":\"jaraco.functools-4.1.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_jaraco_functools_sdist_70f7e0e2\":[{\"filename\":\"jaraco_functools-4.1.0.tar.gz\",\"version\":\"3.11\"}]}", - "jeepney": "{\"rules_python_publish_deps_311_jeepney_py3_none_any_c0a454ad\":[{\"filename\":\"jeepney-0.8.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_jeepney_sdist_5efe48d2\":[{\"filename\":\"jeepney-0.8.0.tar.gz\",\"version\":\"3.11\"}]}", - "keyring": "{\"rules_python_publish_deps_311_keyring_py3_none_any_5426f817\":[{\"filename\":\"keyring-25.4.1-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_keyring_sdist_b07ebc55\":[{\"filename\":\"keyring-25.4.1.tar.gz\",\"version\":\"3.11\"}]}", - "markdown_it_py": "{\"rules_python_publish_deps_311_markdown_it_py_py3_none_any_35521684\":[{\"filename\":\"markdown_it_py-3.0.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_markdown_it_py_sdist_e3f60a94\":[{\"filename\":\"markdown-it-py-3.0.0.tar.gz\",\"version\":\"3.11\"}]}", - "mdurl": "{\"rules_python_publish_deps_311_mdurl_py3_none_any_84008a41\":[{\"filename\":\"mdurl-0.1.2-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_mdurl_sdist_bb413d29\":[{\"filename\":\"mdurl-0.1.2.tar.gz\",\"version\":\"3.11\"}]}", - "more_itertools": "{\"rules_python_publish_deps_311_more_itertools_py3_none_any_037b0d32\":[{\"filename\":\"more_itertools-10.5.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_more_itertools_sdist_5482bfef\":[{\"filename\":\"more-itertools-10.5.0.tar.gz\",\"version\":\"3.11\"}]}", - "nh3": "{\"rules_python_publish_deps_311_nh3_cp37_abi3_macosx_10_12_x86_64_14c5a72e\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_macosx_10_12_x86_64_7b7c2a3c\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_aarch64_42c64511\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_armv7l_0411beb0\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_ppc64_5f36b271\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_ppc64le_34c03fa7\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_s390x_19aaba96\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_x86_64_de3ceed6\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_aarch64_f0eca9ca\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-musllinux_1_2_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_armv7l_3a157ab1\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-musllinux_1_2_armv7l.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_x86_64_36c95d4b\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-musllinux_1_2_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_win_amd64_8ce0f819\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-win_amd64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_sdist_94a16692\":[{\"filename\":\"nh3-0.2.18.tar.gz\",\"version\":\"3.11\"}]}", - "pkginfo": "{\"rules_python_publish_deps_311_pkginfo_py3_none_any_889a6da2\":[{\"filename\":\"pkginfo-1.10.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_pkginfo_sdist_5df73835\":[{\"filename\":\"pkginfo-1.10.0.tar.gz\",\"version\":\"3.11\"}]}", - "pycparser": "{\"rules_python_publish_deps_311_pycparser_py3_none_any_c3702b6d\":[{\"filename\":\"pycparser-2.22-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_pycparser_sdist_491c8be9\":[{\"filename\":\"pycparser-2.22.tar.gz\",\"version\":\"3.11\"}]}", - "pygments": "{\"rules_python_publish_deps_311_pygments_py3_none_any_b8e6aca0\":[{\"filename\":\"pygments-2.18.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_pygments_sdist_786ff802\":[{\"filename\":\"pygments-2.18.0.tar.gz\",\"version\":\"3.11\"}]}", - "pywin32_ctypes": "{\"rules_python_publish_deps_311_pywin32_ctypes_py3_none_any_8a151337\":[{\"filename\":\"pywin32_ctypes-0.2.3-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_pywin32_ctypes_sdist_d162dc04\":[{\"filename\":\"pywin32-ctypes-0.2.3.tar.gz\",\"version\":\"3.11\"}]}", - "readme_renderer": "{\"rules_python_publish_deps_311_readme_renderer_py3_none_any_2fbca89b\":[{\"filename\":\"readme_renderer-44.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_readme_renderer_sdist_8712034e\":[{\"filename\":\"readme_renderer-44.0.tar.gz\",\"version\":\"3.11\"}]}", - "requests": "{\"rules_python_publish_deps_311_requests_py3_none_any_70761cfe\":[{\"filename\":\"requests-2.32.3-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_requests_sdist_55365417\":[{\"filename\":\"requests-2.32.3.tar.gz\",\"version\":\"3.11\"}]}", - "requests_toolbelt": "{\"rules_python_publish_deps_311_requests_toolbelt_py2_none_any_cccfdd66\":[{\"filename\":\"requests_toolbelt-1.0.0-py2.py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_requests_toolbelt_sdist_7681a0a3\":[{\"filename\":\"requests-toolbelt-1.0.0.tar.gz\",\"version\":\"3.11\"}]}", - "rfc3986": "{\"rules_python_publish_deps_311_rfc3986_py2_none_any_50b1502b\":[{\"filename\":\"rfc3986-2.0.0-py2.py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_rfc3986_sdist_97aacf9d\":[{\"filename\":\"rfc3986-2.0.0.tar.gz\",\"version\":\"3.11\"}]}", - "rich": "{\"rules_python_publish_deps_311_rich_py3_none_any_6049d5e6\":[{\"filename\":\"rich-13.9.4-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_rich_sdist_43959497\":[{\"filename\":\"rich-13.9.4.tar.gz\",\"version\":\"3.11\"}]}", - "secretstorage": "{\"rules_python_publish_deps_311_secretstorage_py3_none_any_f356e662\":[{\"filename\":\"SecretStorage-3.3.3-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_secretstorage_sdist_2403533e\":[{\"filename\":\"SecretStorage-3.3.3.tar.gz\",\"version\":\"3.11\"}]}", - "twine": "{\"rules_python_publish_deps_311_twine_py3_none_any_215dbe7b\":[{\"filename\":\"twine-5.1.1-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_twine_sdist_9aa08251\":[{\"filename\":\"twine-5.1.1.tar.gz\",\"version\":\"3.11\"}]}", - "urllib3": "{\"rules_python_publish_deps_311_urllib3_py3_none_any_ca899ca0\":[{\"filename\":\"urllib3-2.2.3-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_urllib3_sdist_e7d814a8\":[{\"filename\":\"urllib3-2.2.3.tar.gz\",\"version\":\"3.11\"}]}", - "zipp": "{\"rules_python_publish_deps_311_zipp_py3_none_any_a817ac80\":[{\"filename\":\"zipp-3.20.2-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_zipp_sdist_bc9eb26f\":[{\"filename\":\"zipp-3.20.2.tar.gz\",\"version\":\"3.11\"}]}" - }, - "packages": [ - "backports_tarfile", - "certifi", - "charset_normalizer", - "docutils", - "idna", - "importlib_metadata", - "jaraco_classes", - "jaraco_context", - "jaraco_functools", - "keyring", - "markdown_it_py", - "mdurl", - "more_itertools", - "nh3", - "pkginfo", - "pygments", - "readme_renderer", - "requests", - "requests_toolbelt", - "rfc3986", - "rich", - "twine", - "urllib3", - "zipp" - ], - "groups": {} - } - } - }, - "moduleExtensionMetadata": { - "useAllRepos": "NO", - "reproducible": false - }, - "recordedRepoMappingEntries": [ - [ - "bazel_features+", - "bazel_features_globals", - "bazel_features++version_extension+bazel_features_globals" - ], - [ - "bazel_features+", - "bazel_features_version", - "bazel_features++version_extension+bazel_features_version" - ], - [ - "rules_python+", - "bazel_features", - "bazel_features+" - ], - [ - "rules_python+", - "bazel_skylib", - "bazel_skylib+" - ], - [ - "rules_python+", - "bazel_tools", - "bazel_tools" - ], - [ - "rules_python+", - "pypi__build", - "rules_python++internal_deps+pypi__build" - ], - [ - "rules_python+", - "pypi__click", - "rules_python++internal_deps+pypi__click" - ], - [ - "rules_python+", - "pypi__colorama", - "rules_python++internal_deps+pypi__colorama" - ], - [ - "rules_python+", - "pypi__importlib_metadata", - "rules_python++internal_deps+pypi__importlib_metadata" - ], - [ - "rules_python+", - "pypi__installer", - "rules_python++internal_deps+pypi__installer" - ], - [ - "rules_python+", - "pypi__more_itertools", - "rules_python++internal_deps+pypi__more_itertools" - ], - [ - "rules_python+", - "pypi__packaging", - "rules_python++internal_deps+pypi__packaging" - ], - [ - "rules_python+", - "pypi__pep517", - "rules_python++internal_deps+pypi__pep517" - ], - [ - "rules_python+", - "pypi__pip", - "rules_python++internal_deps+pypi__pip" - ], - [ - "rules_python+", - "pypi__pip_tools", - "rules_python++internal_deps+pypi__pip_tools" - ], - [ - "rules_python+", - "pypi__pyproject_hooks", - "rules_python++internal_deps+pypi__pyproject_hooks" - ], - [ - "rules_python+", - "pypi__setuptools", - "rules_python++internal_deps+pypi__setuptools" - ], - [ - "rules_python+", - "pypi__tomli", - "rules_python++internal_deps+pypi__tomli" - ], - [ - "rules_python+", - "pypi__wheel", - "rules_python++internal_deps+pypi__wheel" - ], - [ - "rules_python+", - "pypi__zipp", - "rules_python++internal_deps+pypi__zipp" - ], - [ - "rules_python+", - "pythons_hub", - "rules_python++python+pythons_hub" - ], - [ - "rules_python++python+pythons_hub", - "python_3_10_host", - "rules_python++python+python_3_10_host" - ], - [ - "rules_python++python+pythons_hub", - "python_3_11_host", - "rules_python++python+python_3_11_host" - ], - [ - "rules_python++python+pythons_hub", - "python_3_12_host", - "rules_python++python+python_3_12_host" - ], - [ - "rules_python++python+pythons_hub", - "python_3_13_host", - "rules_python++python+python_3_13_host" - ], - [ - "rules_python++python+pythons_hub", - "python_3_8_host", - "rules_python++python+python_3_8_host" - ], - [ - "rules_python++python+pythons_hub", - "python_3_9_host", - "rules_python++python+python_3_9_host" - ] - ] - } } } } diff --git a/src/tests/cpp/link_creation_agent_test.cc b/src/tests/cpp/link_creation_agent_test.cc index 13ae726..a243905 100644 --- a/src/tests/cpp/link_creation_agent_test.cc +++ b/src/tests/cpp/link_creation_agent_test.cc @@ -277,6 +277,6 @@ TEST(Link, TestLink) { Link link(query_answer, link_template); EXPECT_EQ(link.get_type(), "Similarity"); EXPECT_EQ(link.get_targets().size(), 2); - EXPECT_EQ(link.get_targets()[0], "Value1"); - EXPECT_EQ(link.get_targets()[1], "Value2"); + EXPECT_EQ(get(link.get_targets()[0]), "Value1"); + EXPECT_EQ(get(link.get_targets()[1]), "Value2"); } From 681bbf4c5d74fd7a79b33edff85f1cf9c3bd7e6f Mon Sep 17 00:00:00 2001 From: Edgar Brissow Date: Tue, 18 Feb 2025 16:42:07 -0300 Subject: [PATCH 04/19] Fixing tests --- src/MODULE.bazel.lock | 5947 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 5946 insertions(+), 1 deletion(-) diff --git a/src/MODULE.bazel.lock b/src/MODULE.bazel.lock index 4898bf1..5ea9d6b 100644 --- a/src/MODULE.bazel.lock +++ b/src/MODULE.bazel.lock @@ -1,5 +1,5 @@ { - "lockFileVersion": 18, + "lockFileVersion": 16, "registryFileHashes": { "https://bcr.bazel.build/bazel_registry.json": "8a28e4aff06ee60aed2a8c281907fb8bcbf3b753c91fb5a5c57da3215d5b3497", "https://bcr.bazel.build/modules/abseil-cpp/20210324.2/MODULE.bazel": "7cd0312e064fde87c8d1cd79ba06c876bd23630c83466e9500321be55c96ace2", @@ -293,6 +293,585 @@ }, "selectedYankedVersions": {}, "moduleExtensions": { + "@@apple_support+//crosstool:setup.bzl%apple_cc_configure_extension": { + "general": { + "bzlTransitiveDigest": "Ync9nL0AbHC6ondeEY7fBjBjLxojTsiXcJh65ZDTRlA=", + "usagesDigest": "cSIhmW7KxthN0OEsinvaLtzw/1vt+FYxH2KEzLdjRHo=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "local_config_apple_cc_toolchains": { + "repoRuleId": "@@apple_support+//crosstool:setup.bzl%_apple_cc_autoconf_toolchains", + "attributes": {} + }, + "local_config_apple_cc": { + "repoRuleId": "@@apple_support+//crosstool:setup.bzl%_apple_cc_autoconf", + "attributes": {} + } + }, + "recordedRepoMappingEntries": [ + [ + "apple_support+", + "bazel_tools", + "bazel_tools" + ], + [ + "bazel_tools", + "rules_cc", + "rules_cc+" + ] + ] + } + }, + "@@googleapis+//:extensions.bzl%switched_rules": { + "general": { + "bzlTransitiveDigest": "vG6fuTzXD8MMvHWZEQud0MMH7eoC4GXY0va7VrFFh04=", + "usagesDigest": "DUo2RRz7jYoF7ioQN9YVzDHmoyje8eVbJOIz080D0Sc=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "com_google_googleapis_imports": { + "repoRuleId": "@@googleapis+//:repository_rules.bzl%switched_rules", + "attributes": { + "rules": { + "proto_library_with_info": [ + "", + "" + ], + "moved_proto_library": [ + "", + "" + ], + "java_proto_library": [ + "", + "" + ], + "java_grpc_library": [ + "", + "" + ], + "java_gapic_library": [ + "", + "" + ], + "java_gapic_test": [ + "", + "" + ], + "java_gapic_assembly_gradle_pkg": [ + "", + "" + ], + "py_proto_library": [ + "", + "" + ], + "py_grpc_library": [ + "", + "" + ], + "py_gapic_library": [ + "", + "" + ], + "py_test": [ + "", + "" + ], + "py_gapic_assembly_pkg": [ + "", + "" + ], + "py_import": [ + "", + "" + ], + "go_proto_library": [ + "", + "" + ], + "go_grpc_library": [ + "", + "" + ], + "go_library": [ + "", + "" + ], + "go_test": [ + "", + "" + ], + "go_gapic_library": [ + "", + "" + ], + "go_gapic_assembly_pkg": [ + "", + "" + ], + "cc_proto_library": [ + "", + "" + ], + "cc_grpc_library": [ + "", + "" + ], + "cc_gapic_library": [ + "", + "" + ], + "php_proto_library": [ + "", + "php_proto_library" + ], + "php_grpc_library": [ + "", + "php_grpc_library" + ], + "php_gapic_library": [ + "", + "php_gapic_library" + ], + "php_gapic_assembly_pkg": [ + "", + "php_gapic_assembly_pkg" + ], + "nodejs_gapic_library": [ + "", + "typescript_gapic_library" + ], + "nodejs_gapic_assembly_pkg": [ + "", + "typescript_gapic_assembly_pkg" + ], + "ruby_proto_library": [ + "", + "" + ], + "ruby_grpc_library": [ + "", + "" + ], + "ruby_ads_gapic_library": [ + "", + "" + ], + "ruby_cloud_gapic_library": [ + "", + "" + ], + "ruby_gapic_assembly_pkg": [ + "", + "" + ], + "csharp_proto_library": [ + "", + "" + ], + "csharp_grpc_library": [ + "", + "" + ], + "csharp_gapic_library": [ + "", + "" + ], + "csharp_gapic_assembly_pkg": [ + "", + "" + ] + } + } + } + }, + "recordedRepoMappingEntries": [] + } + }, + "@@nanobind_bazel+//:internal_configure.bzl%internal_configure_extension": { + "general": { + "bzlTransitiveDigest": "7oI0VpCbrd6RCBdXwsFlurhdfkP5uxsvALQjLcmyrq8=", + "usagesDigest": "cY0wNf6BY0eIjNX443F5sz8TksZ+KXshbeQdjlRd+Tc=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "robin_map": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "build_file": "@@nanobind_bazel+//:robin_map.BUILD", + "strip_prefix": "robin-map-1.3.0", + "integrity": "sha256-qEJK07Cv/UxX7Sbw89iilgTw4fLvIIn0l/YUsclMcjY=", + "urls": [ + "https://github.com/Tessil/robin-map/archive/refs/tags/v1.3.0.tar.gz" + ] + } + }, + "nanobind": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "build_file": "@@nanobind_bazel+//:nanobind.BUILD", + "strip_prefix": "nanobind-2.4.0", + "integrity": "sha256-uzXertfvrFAp7R4ziApBVjg1L3V9SSB6jmAT/vtsSac=", + "urls": [ + "https://github.com/wjakob/nanobind/archive/refs/tags/v2.4.0.tar.gz" + ] + } + }, + "pypi__typing_extensions": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "build_file": "@@nanobind_bazel+//:typing_extensions.BUILD", + "strip_prefix": "typing_extensions-4.12.2", + "integrity": "sha256-Gn6tVcflWd1N7ohW46iLQSJav+HOjfV7fBORX+Eh/7g=", + "urls": [ + "https://files.pythonhosted.org/packages/df/db/f35a00659bc03fec321ba8bce9420de607a1d37f8342eee1863174c69557/typing_extensions-4.12.2.tar.gz" + ] + } + } + }, + "recordedRepoMappingEntries": [ + [ + "nanobind_bazel+", + "bazel_tools", + "bazel_tools" + ] + ] + } + }, + "@@platforms//host:extension.bzl%host_platform": { + "general": { + "bzlTransitiveDigest": "xelQcPZH8+tmuOHVjL9vDxMnnQNMlwj0SlvgoqBkm4U=", + "usagesDigest": "SeQiIN/f8/Qt9vYQk7qcXp4I4wJeEC0RnQDiaaJ4tb8=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "host_platform": { + "repoRuleId": "@@platforms//host:extension.bzl%host_platform_repo", + "attributes": {} + } + }, + "recordedRepoMappingEntries": [] + } + }, + "@@rules_foreign_cc+//foreign_cc:extensions.bzl%tools": { + "general": { + "bzlTransitiveDigest": "FApcIcVN43WOEs7g8eg7Cy1hrfRbVNEoUu8IiF+8WOc=", + "usagesDigest": "9LXdVp01HkdYQT8gYPjYLO6VLVJHo9uFfxWaU1ymiRE=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "rules_foreign_cc_framework_toolchain_linux": { + "repoRuleId": "@@rules_foreign_cc+//foreign_cc/private/framework:toolchain.bzl%framework_toolchain_repository", + "attributes": { + "commands_src": "@rules_foreign_cc//foreign_cc/private/framework/toolchains:linux_commands.bzl", + "exec_compatible_with": [ + "@platforms//os:linux" + ] + } + }, + "rules_foreign_cc_framework_toolchain_freebsd": { + "repoRuleId": "@@rules_foreign_cc+//foreign_cc/private/framework:toolchain.bzl%framework_toolchain_repository", + "attributes": { + "commands_src": "@rules_foreign_cc//foreign_cc/private/framework/toolchains:freebsd_commands.bzl", + "exec_compatible_with": [ + "@platforms//os:freebsd" + ] + } + }, + "rules_foreign_cc_framework_toolchain_windows": { + "repoRuleId": "@@rules_foreign_cc+//foreign_cc/private/framework:toolchain.bzl%framework_toolchain_repository", + "attributes": { + "commands_src": "@rules_foreign_cc//foreign_cc/private/framework/toolchains:windows_commands.bzl", + "exec_compatible_with": [ + "@platforms//os:windows" + ] + } + }, + "rules_foreign_cc_framework_toolchain_macos": { + "repoRuleId": "@@rules_foreign_cc+//foreign_cc/private/framework:toolchain.bzl%framework_toolchain_repository", + "attributes": { + "commands_src": "@rules_foreign_cc//foreign_cc/private/framework/toolchains:macos_commands.bzl", + "exec_compatible_with": [ + "@platforms//os:macos" + ] + } + }, + "rules_foreign_cc_framework_toolchains": { + "repoRuleId": "@@rules_foreign_cc+//foreign_cc/private/framework:toolchain.bzl%framework_toolchain_repository_hub", + "attributes": {} + }, + "cmake_src": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "build_file_content": "filegroup(\n name = \"all_srcs\",\n srcs = glob([\"**\"]),\n visibility = [\"//visibility:public\"],\n)\n", + "sha256": "f316b40053466f9a416adf981efda41b160ca859e97f6a484b447ea299ff26aa", + "strip_prefix": "cmake-3.23.2", + "urls": [ + "https://github.com/Kitware/CMake/releases/download/v3.23.2/cmake-3.23.2.tar.gz" + ] + } + }, + "gnumake_src": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "build_file_content": "filegroup(\n name = \"all_srcs\",\n srcs = glob([\"**\"]),\n visibility = [\"//visibility:public\"],\n)\n", + "sha256": "581f4d4e872da74b3941c874215898a7d35802f03732bdccee1d4a7979105d18", + "strip_prefix": "make-4.4", + "urls": [ + "https://mirror.bazel.build/ftpmirror.gnu.org/gnu/make/make-4.4.tar.gz", + "http://ftpmirror.gnu.org/gnu/make/make-4.4.tar.gz" + ] + } + }, + "ninja_build_src": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "build_file_content": "filegroup(\n name = \"all_srcs\",\n srcs = glob([\"**\"]),\n visibility = [\"//visibility:public\"],\n)\n", + "sha256": "31747ae633213f1eda3842686f83c2aa1412e0f5691d1c14dbbcc67fe7400cea", + "strip_prefix": "ninja-1.11.1", + "urls": [ + "https://github.com/ninja-build/ninja/archive/v1.11.1.tar.gz" + ] + } + }, + "meson_src": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "build_file_content": "exports_files([\"meson.py\"])\n\nfilegroup(\n name = \"runtime\",\n srcs = glob([\"mesonbuild/**\"]),\n visibility = [\"//visibility:public\"],\n)\n", + "strip_prefix": "meson-1.1.1", + "url": "https://github.com/mesonbuild/meson/releases/download/1.1.1/meson-1.1.1.tar.gz" + } + }, + "glib_dev": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "build_file_content": "\nload(\"@rules_cc//cc:defs.bzl\", \"cc_library\")\n\ncc_import(\n name = \"glib_dev\",\n hdrs = glob([\"include/**\"]),\n shared_library = \"@glib_runtime//:bin/libglib-2.0-0.dll\",\n visibility = [\"//visibility:public\"],\n)\n ", + "sha256": "bdf18506df304d38be98a4b3f18055b8b8cca81beabecad0eece6ce95319c369", + "urls": [ + "https://download.gnome.org/binaries/win64/glib/2.26/glib-dev_2.26.1-1_win64.zip" + ] + } + }, + "glib_src": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "build_file_content": "\ncc_import(\n name = \"msvc_hdr\",\n hdrs = [\"msvc_recommended_pragmas.h\"],\n visibility = [\"//visibility:public\"],\n)\n ", + "sha256": "bc96f63112823b7d6c9f06572d2ad626ddac7eb452c04d762592197f6e07898e", + "strip_prefix": "glib-2.26.1", + "urls": [ + "https://download.gnome.org/sources/glib/2.26/glib-2.26.1.tar.gz" + ] + } + }, + "glib_runtime": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "build_file_content": "\nexports_files(\n [\n \"bin/libgio-2.0-0.dll\",\n \"bin/libglib-2.0-0.dll\",\n \"bin/libgmodule-2.0-0.dll\",\n \"bin/libgobject-2.0-0.dll\",\n \"bin/libgthread-2.0-0.dll\",\n ],\n visibility = [\"//visibility:public\"],\n)\n ", + "sha256": "88d857087e86f16a9be651ee7021880b3f7ba050d34a1ed9f06113b8799cb973", + "urls": [ + "https://download.gnome.org/binaries/win64/glib/2.26/glib_2.26.1-1_win64.zip" + ] + } + }, + "gettext_runtime": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "build_file_content": "\ncc_import(\n name = \"gettext_runtime\",\n shared_library = \"bin/libintl-8.dll\",\n visibility = [\"//visibility:public\"],\n)\n ", + "sha256": "1f4269c0e021076d60a54e98da6f978a3195013f6de21674ba0edbc339c5b079", + "urls": [ + "https://download.gnome.org/binaries/win64/dependencies/gettext-runtime_0.18.1.1-2_win64.zip" + ] + } + }, + "pkgconfig_src": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "build_file_content": "filegroup(\n name = \"all_srcs\",\n srcs = glob([\"**\"]),\n visibility = [\"//visibility:public\"],\n)\n", + "sha256": "6fc69c01688c9458a57eb9a1664c9aba372ccda420a02bf4429fe610e7e7d591", + "strip_prefix": "pkg-config-0.29.2", + "patches": [ + "@@rules_foreign_cc+//toolchains:pkgconfig-detectenv.patch", + "@@rules_foreign_cc+//toolchains:pkgconfig-makefile-vc.patch" + ], + "urls": [ + "https://pkgconfig.freedesktop.org/releases/pkg-config-0.29.2.tar.gz" + ] + } + }, + "bazel_skylib": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "urls": [ + "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.2.1/bazel-skylib-1.2.1.tar.gz", + "https://github.com/bazelbuild/bazel-skylib/releases/download/1.2.1/bazel-skylib-1.2.1.tar.gz" + ], + "sha256": "f7be3474d42aae265405a592bb7da8e171919d74c16f082a5457840f06054728" + } + }, + "rules_python": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "sha256": "84aec9e21cc56fbc7f1335035a71c850d1b9b5cc6ff497306f84cced9a769841", + "strip_prefix": "rules_python-0.23.1", + "url": "https://github.com/bazelbuild/rules_python/archive/refs/tags/0.23.1.tar.gz" + } + }, + "cmake-3.23.2-linux-aarch64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "urls": [ + "https://github.com/Kitware/CMake/releases/download/v3.23.2/cmake-3.23.2-linux-aarch64.tar.gz" + ], + "sha256": "f2654bf780b53f170bbbec44d8ac67d401d24788e590faa53036a89476efa91e", + "strip_prefix": "cmake-3.23.2-linux-aarch64", + "build_file_content": "load(\"@rules_foreign_cc//toolchains/native_tools:native_tools_toolchain.bzl\", \"native_tool_toolchain\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nfilegroup(\n name = \"cmake_data\",\n srcs = glob(\n [\n \"**\",\n ],\n exclude = [\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n \"BUILD\",\n \"BUILD.bazel\",\n ],\n ),\n)\n\nnative_tool_toolchain(\n name = \"cmake_tool\",\n path = \"bin/cmake\",\n target = \":cmake_data\",\n)\n" + } + }, + "cmake-3.23.2-linux-x86_64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "urls": [ + "https://github.com/Kitware/CMake/releases/download/v3.23.2/cmake-3.23.2-linux-x86_64.tar.gz" + ], + "sha256": "aaced6f745b86ce853661a595bdac6c5314a60f8181b6912a0a4920acfa32708", + "strip_prefix": "cmake-3.23.2-linux-x86_64", + "build_file_content": "load(\"@rules_foreign_cc//toolchains/native_tools:native_tools_toolchain.bzl\", \"native_tool_toolchain\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nfilegroup(\n name = \"cmake_data\",\n srcs = glob(\n [\n \"**\",\n ],\n exclude = [\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n \"BUILD\",\n \"BUILD.bazel\",\n ],\n ),\n)\n\nnative_tool_toolchain(\n name = \"cmake_tool\",\n path = \"bin/cmake\",\n target = \":cmake_data\",\n)\n" + } + }, + "cmake-3.23.2-macos-universal": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "urls": [ + "https://github.com/Kitware/CMake/releases/download/v3.23.2/cmake-3.23.2-macos-universal.tar.gz" + ], + "sha256": "853a0f9af148c5ef47282ffffee06c4c9f257be2635936755f39ca13c3286c88", + "strip_prefix": "cmake-3.23.2-macos-universal/CMake.app/Contents", + "build_file_content": "load(\"@rules_foreign_cc//toolchains/native_tools:native_tools_toolchain.bzl\", \"native_tool_toolchain\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nfilegroup(\n name = \"cmake_data\",\n srcs = glob(\n [\n \"**\",\n ],\n exclude = [\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n \"BUILD\",\n \"BUILD.bazel\",\n ],\n ),\n)\n\nnative_tool_toolchain(\n name = \"cmake_tool\",\n path = \"bin/cmake\",\n target = \":cmake_data\",\n)\n" + } + }, + "cmake-3.23.2-windows-i386": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "urls": [ + "https://github.com/Kitware/CMake/releases/download/v3.23.2/cmake-3.23.2-windows-i386.zip" + ], + "sha256": "6a4fcd6a2315b93cb23c93507efccacc30c449c2bf98f14d6032bb226c582e07", + "strip_prefix": "cmake-3.23.2-windows-i386", + "build_file_content": "load(\"@rules_foreign_cc//toolchains/native_tools:native_tools_toolchain.bzl\", \"native_tool_toolchain\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nfilegroup(\n name = \"cmake_data\",\n srcs = glob(\n [\n \"**\",\n ],\n exclude = [\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n \"BUILD\",\n \"BUILD.bazel\",\n ],\n ),\n)\n\nnative_tool_toolchain(\n name = \"cmake_tool\",\n path = \"bin/cmake.exe\",\n target = \":cmake_data\",\n)\n" + } + }, + "cmake-3.23.2-windows-x86_64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "urls": [ + "https://github.com/Kitware/CMake/releases/download/v3.23.2/cmake-3.23.2-windows-x86_64.zip" + ], + "sha256": "2329387f3166b84c25091c86389fb891193967740c9bcf01e7f6d3306f7ffda0", + "strip_prefix": "cmake-3.23.2-windows-x86_64", + "build_file_content": "load(\"@rules_foreign_cc//toolchains/native_tools:native_tools_toolchain.bzl\", \"native_tool_toolchain\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nfilegroup(\n name = \"cmake_data\",\n srcs = glob(\n [\n \"**\",\n ],\n exclude = [\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n \"BUILD\",\n \"BUILD.bazel\",\n ],\n ),\n)\n\nnative_tool_toolchain(\n name = \"cmake_tool\",\n path = \"bin/cmake.exe\",\n target = \":cmake_data\",\n)\n" + } + }, + "cmake_3.23.2_toolchains": { + "repoRuleId": "@@rules_foreign_cc+//toolchains:prebuilt_toolchains_repository.bzl%prebuilt_toolchains_repository", + "attributes": { + "repos": { + "cmake-3.23.2-linux-aarch64": [ + "@platforms//cpu:aarch64", + "@platforms//os:linux" + ], + "cmake-3.23.2-linux-x86_64": [ + "@platforms//cpu:x86_64", + "@platforms//os:linux" + ], + "cmake-3.23.2-macos-universal": [ + "@platforms//os:macos" + ], + "cmake-3.23.2-windows-i386": [ + "@platforms//cpu:x86_32", + "@platforms//os:windows" + ], + "cmake-3.23.2-windows-x86_64": [ + "@platforms//cpu:x86_64", + "@platforms//os:windows" + ] + }, + "tool": "cmake" + } + }, + "ninja_1.11.1_linux": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "urls": [ + "https://github.com/ninja-build/ninja/releases/download/v1.11.1/ninja-linux.zip" + ], + "sha256": "b901ba96e486dce377f9a070ed4ef3f79deb45f4ffe2938f8e7ddc69cfb3df77", + "strip_prefix": "", + "build_file_content": "load(\"@rules_foreign_cc//toolchains/native_tools:native_tools_toolchain.bzl\", \"native_tool_toolchain\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nfilegroup(\n name = \"ninja_bin\",\n srcs = [\"ninja\"],\n)\n\nnative_tool_toolchain(\n name = \"ninja_tool\",\n env = {\"NINJA\": \"$(execpath :ninja_bin)\"},\n path = \"$(execpath :ninja_bin)\",\n target = \":ninja_bin\",\n)\n" + } + }, + "ninja_1.11.1_mac": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "urls": [ + "https://github.com/ninja-build/ninja/releases/download/v1.11.1/ninja-mac.zip" + ], + "sha256": "482ecb23c59ae3d4f158029112de172dd96bb0e97549c4b1ca32d8fad11f873e", + "strip_prefix": "", + "build_file_content": "load(\"@rules_foreign_cc//toolchains/native_tools:native_tools_toolchain.bzl\", \"native_tool_toolchain\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nfilegroup(\n name = \"ninja_bin\",\n srcs = [\"ninja\"],\n)\n\nnative_tool_toolchain(\n name = \"ninja_tool\",\n env = {\"NINJA\": \"$(execpath :ninja_bin)\"},\n path = \"$(execpath :ninja_bin)\",\n target = \":ninja_bin\",\n)\n" + } + }, + "ninja_1.11.1_win": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "urls": [ + "https://github.com/ninja-build/ninja/releases/download/v1.11.1/ninja-win.zip" + ], + "sha256": "524b344a1a9a55005eaf868d991e090ab8ce07fa109f1820d40e74642e289abc", + "strip_prefix": "", + "build_file_content": "load(\"@rules_foreign_cc//toolchains/native_tools:native_tools_toolchain.bzl\", \"native_tool_toolchain\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nfilegroup(\n name = \"ninja_bin\",\n srcs = [\"ninja.exe\"],\n)\n\nnative_tool_toolchain(\n name = \"ninja_tool\",\n env = {\"NINJA\": \"$(execpath :ninja_bin)\"},\n path = \"$(execpath :ninja_bin)\",\n target = \":ninja_bin\",\n)\n" + } + }, + "ninja_1.11.1_toolchains": { + "repoRuleId": "@@rules_foreign_cc+//toolchains:prebuilt_toolchains_repository.bzl%prebuilt_toolchains_repository", + "attributes": { + "repos": { + "ninja_1.11.1_linux": [ + "@platforms//cpu:x86_64", + "@platforms//os:linux" + ], + "ninja_1.11.1_mac": [ + "@platforms//cpu:x86_64", + "@platforms//os:macos" + ], + "ninja_1.11.1_win": [ + "@platforms//cpu:x86_64", + "@platforms//os:windows" + ] + }, + "tool": "ninja" + } + } + }, + "recordedRepoMappingEntries": [ + [ + "rules_foreign_cc+", + "bazel_tools", + "bazel_tools" + ], + [ + "rules_foreign_cc+", + "rules_foreign_cc", + "rules_foreign_cc+" + ] + ] + } + }, "@@rules_java+//java:rules_java_deps.bzl%compatibility_proxy": { "general": { "bzlTransitiveDigest": "84xJEZ1jnXXwo8BXMprvBm++rRt4jsTu9liBxz0ivps=", @@ -314,6 +893,5372 @@ ] ] } + }, + "@@rules_kotlin+//src/main/starlark/core/repositories:bzlmod_setup.bzl%rules_kotlin_extensions": { + "general": { + "bzlTransitiveDigest": "sFhcgPbDQehmbD1EOXzX4H1q/CD5df8zwG4kp4jbvr8=", + "usagesDigest": "QI2z8ZUR+mqtbwsf2fLqYdJAkPOHdOV+tF2yVAUgRzw=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "com_github_jetbrains_kotlin_git": { + "repoRuleId": "@@rules_kotlin+//src/main/starlark/core/repositories:compiler.bzl%kotlin_compiler_git_repository", + "attributes": { + "urls": [ + "https://github.com/JetBrains/kotlin/releases/download/v1.9.23/kotlin-compiler-1.9.23.zip" + ], + "sha256": "93137d3aab9afa9b27cb06a824c2324195c6b6f6179d8a8653f440f5bd58be88" + } + }, + "com_github_jetbrains_kotlin": { + "repoRuleId": "@@rules_kotlin+//src/main/starlark/core/repositories:compiler.bzl%kotlin_capabilities_repository", + "attributes": { + "git_repository_name": "com_github_jetbrains_kotlin_git", + "compiler_version": "1.9.23" + } + }, + "com_github_google_ksp": { + "repoRuleId": "@@rules_kotlin+//src/main/starlark/core/repositories:ksp.bzl%ksp_compiler_plugin_repository", + "attributes": { + "urls": [ + "https://github.com/google/ksp/releases/download/1.9.23-1.0.20/artifacts.zip" + ], + "sha256": "ee0618755913ef7fd6511288a232e8fad24838b9af6ea73972a76e81053c8c2d", + "strip_version": "1.9.23-1.0.20" + } + }, + "com_github_pinterest_ktlint": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "sha256": "01b2e0ef893383a50dbeb13970fe7fa3be36ca3e83259e01649945b09d736985", + "urls": [ + "https://github.com/pinterest/ktlint/releases/download/1.3.0/ktlint" + ], + "executable": true + } + }, + "rules_android": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "sha256": "cd06d15dd8bb59926e4d65f9003bfc20f9da4b2519985c27e190cddc8b7a7806", + "strip_prefix": "rules_android-0.1.1", + "urls": [ + "https://github.com/bazelbuild/rules_android/archive/v0.1.1.zip" + ] + } + } + }, + "recordedRepoMappingEntries": [ + [ + "rules_kotlin+", + "bazel_tools", + "bazel_tools" + ] + ] + } + }, + "@@rules_python+//python/extensions:pip.bzl%pip": { + "general": { + "bzlTransitiveDigest": "LcXaVryHt60I2iaj7FbE83+h2E6Arq4kMpjjbo0q6Nw=", + "usagesDigest": "QGr57otiUlM9iP5vVxnnSEx6IdfDw8DpFMXwfZKfCqk=", + "recordedFileInputs": { + "@@//deps/requirements_dev_lock.txt": "107ebb98d3f233030b6b87e249f531fc59cf39f3a4bddc6b68356e4773a23a8a", + "@@//deps/requirements_lock.txt": "35874ab3e9744885203c90cac38e622eb2a255629f03f072e6146b0dee84e94f", + "@@grpc+//requirements.bazel.txt": "4c8c19a2a8f22108bf29feb5cc2694eb0c7e0c82ba0364df27fe5f5e4d7936e5", + "@@protobuf+//python/requirements.txt": "983be60d3cec4b319dcab6d48aeb3f5b2f7c3350f26b3a9e97486c37967c73c5", + "@@protoc-gen-validate+//python/requirements.txt": "519d7dac0ff11c4a855aaef022dc2998ece0669db3b481cdb9e5a5d88e57eb83", + "@@rules_fuzzing+//fuzzing/requirements.txt": "ab04664be026b632a0d2a2446c4f65982b7654f5b6851d2f9d399a19b7242a5b", + "@@rules_python+//tools/publish/requirements_darwin.txt": "095d4a4f3d639dce831cd493367631cd51b53665292ab20194bac2c0c6458fa8", + "@@rules_python+//tools/publish/requirements_linux.txt": "d576e0d8542df61396a9b38deeaa183c24135ed5e8e73bb9622f298f2671811e", + "@@rules_python+//tools/publish/requirements_windows.txt": "d18538a3982beab378fd5687f4db33162ee1ece69801f9a451661b1b64286b76" + }, + "recordedDirentsInputs": {}, + "envVariables": { + "RULES_PYTHON_REPO_DEBUG": null, + "RULES_PYTHON_REPO_DEBUG_VERBOSITY": null + }, + "generatedRepoSpecs": { + "grpc_python_dependencies_310_absl_py": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "grpc_python_dependencies_310", + "requirement": "absl-py==1.4.0" + } + }, + "grpc_python_dependencies_310_cachetools": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "grpc_python_dependencies_310", + "requirement": "cachetools==5.3.2" + } + }, + "grpc_python_dependencies_310_certifi": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "grpc_python_dependencies_310", + "requirement": "certifi==2023.7.22" + } + }, + "grpc_python_dependencies_310_chardet": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "grpc_python_dependencies_310", + "requirement": "chardet==3.0.4" + } + }, + "grpc_python_dependencies_310_charset_normalizer": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "grpc_python_dependencies_310", + "requirement": "charset-normalizer==3.3.2" + } + }, + "grpc_python_dependencies_310_coverage": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "grpc_python_dependencies_310", + "requirement": "coverage==4.5.4" + } + }, + "grpc_python_dependencies_310_cython": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "grpc_python_dependencies_310", + "requirement": "cython==3.0.0" + } + }, + "grpc_python_dependencies_310_deprecated": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "grpc_python_dependencies_310", + "requirement": "Deprecated==1.2.14" + } + }, + "grpc_python_dependencies_310_gevent": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "grpc_python_dependencies_310", + "requirement": "gevent==22.08.0" + } + }, + "grpc_python_dependencies_310_google_api_core": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "grpc_python_dependencies_310", + "requirement": "google-api-core==1.34.1" + } + }, + "grpc_python_dependencies_310_google_auth": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "grpc_python_dependencies_310", + "requirement": "google-auth==2.23.4" + } + }, + "grpc_python_dependencies_310_google_cloud_monitoring": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "grpc_python_dependencies_310", + "requirement": "google-cloud-monitoring==2.16.0" + } + }, + "grpc_python_dependencies_310_google_cloud_trace": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "grpc_python_dependencies_310", + "requirement": "google-cloud-trace==1.11.3" + } + }, + "grpc_python_dependencies_310_googleapis_common_protos": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "grpc_python_dependencies_310", + "requirement": "googleapis-common-protos==1.63.1" + } + }, + "grpc_python_dependencies_310_greenlet": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "grpc_python_dependencies_310", + "requirement": "greenlet==1.1.3.post0" + } + }, + "grpc_python_dependencies_310_idna": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "grpc_python_dependencies_310", + "requirement": "idna==2.7" + } + }, + "grpc_python_dependencies_310_importlib_metadata": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "grpc_python_dependencies_310", + "requirement": "importlib-metadata==6.11.0" + } + }, + "grpc_python_dependencies_310_oauth2client": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "grpc_python_dependencies_310", + "requirement": "oauth2client==4.1.0" + } + }, + "grpc_python_dependencies_310_opencensus_context": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "grpc_python_dependencies_310", + "requirement": "opencensus-context==0.1.3" + } + }, + "grpc_python_dependencies_310_opentelemetry_api": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "grpc_python_dependencies_310", + "requirement": "opentelemetry-api==1.25.0" + } + }, + "grpc_python_dependencies_310_opentelemetry_exporter_prometheus": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "grpc_python_dependencies_310", + "requirement": "opentelemetry-exporter-prometheus==0.46b0" + } + }, + "grpc_python_dependencies_310_opentelemetry_resourcedetector_gcp": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "grpc_python_dependencies_310", + "requirement": "opentelemetry-resourcedetector-gcp==1.6.0a0" + } + }, + "grpc_python_dependencies_310_opentelemetry_sdk": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "grpc_python_dependencies_310", + "requirement": "opentelemetry-sdk==1.25.0" + } + }, + "grpc_python_dependencies_310_opentelemetry_semantic_conventions": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "grpc_python_dependencies_310", + "requirement": "opentelemetry-semantic-conventions==0.46b0" + } + }, + "grpc_python_dependencies_310_prometheus_client": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "grpc_python_dependencies_310", + "requirement": "prometheus_client==0.20.0" + } + }, + "grpc_python_dependencies_310_proto_plus": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "grpc_python_dependencies_310", + "requirement": "proto-plus==1.22.3" + } + }, + "grpc_python_dependencies_310_protobuf": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "grpc_python_dependencies_310", + "requirement": "protobuf>=5.27.1,<6.0dev" + } + }, + "grpc_python_dependencies_310_pyasn1": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "grpc_python_dependencies_310", + "requirement": "pyasn1==0.5.0" + } + }, + "grpc_python_dependencies_310_pyasn1_modules": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "grpc_python_dependencies_310", + "requirement": "pyasn1-modules==0.3.0" + } + }, + "grpc_python_dependencies_310_requests": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "grpc_python_dependencies_310", + "requirement": "requests==2.25.1" + } + }, + "grpc_python_dependencies_310_rsa": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "grpc_python_dependencies_310", + "requirement": "rsa==4.9" + } + }, + "grpc_python_dependencies_310_setuptools": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "grpc_python_dependencies_310", + "requirement": "setuptools==44.1.1" + } + }, + "grpc_python_dependencies_310_typing_extensions": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "grpc_python_dependencies_310", + "requirement": "typing-extensions==4.9.0" + } + }, + "grpc_python_dependencies_310_urllib3": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "grpc_python_dependencies_310", + "requirement": "urllib3==1.26.18" + } + }, + "grpc_python_dependencies_310_wheel": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "grpc_python_dependencies_310", + "requirement": "wheel==0.38.1" + } + }, + "grpc_python_dependencies_310_wrapt": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "grpc_python_dependencies_310", + "requirement": "wrapt==1.16.0" + } + }, + "grpc_python_dependencies_310_zipp": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "grpc_python_dependencies_310", + "requirement": "zipp==3.17.0" + } + }, + "grpc_python_dependencies_310_zope_event": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "grpc_python_dependencies_310", + "requirement": "zope.event==4.5.0" + } + }, + "grpc_python_dependencies_310_zope_interface": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "grpc_python_dependencies_310", + "requirement": "zope.interface==6.1" + } + }, + "grpc_python_dependencies_311_absl_py": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "grpc_python_dependencies_311", + "requirement": "absl-py==1.4.0" + } + }, + "grpc_python_dependencies_311_cachetools": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "grpc_python_dependencies_311", + "requirement": "cachetools==5.3.2" + } + }, + "grpc_python_dependencies_311_certifi": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "grpc_python_dependencies_311", + "requirement": "certifi==2023.7.22" + } + }, + "grpc_python_dependencies_311_chardet": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "grpc_python_dependencies_311", + "requirement": "chardet==3.0.4" + } + }, + "grpc_python_dependencies_311_charset_normalizer": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "grpc_python_dependencies_311", + "requirement": "charset-normalizer==3.3.2" + } + }, + "grpc_python_dependencies_311_coverage": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "grpc_python_dependencies_311", + "requirement": "coverage==4.5.4" + } + }, + "grpc_python_dependencies_311_cython": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "grpc_python_dependencies_311", + "requirement": "cython==3.0.0" + } + }, + "grpc_python_dependencies_311_deprecated": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "grpc_python_dependencies_311", + "requirement": "Deprecated==1.2.14" + } + }, + "grpc_python_dependencies_311_gevent": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "grpc_python_dependencies_311", + "requirement": "gevent==22.08.0" + } + }, + "grpc_python_dependencies_311_google_api_core": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "grpc_python_dependencies_311", + "requirement": "google-api-core==1.34.1" + } + }, + "grpc_python_dependencies_311_google_auth": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "grpc_python_dependencies_311", + "requirement": "google-auth==2.23.4" + } + }, + "grpc_python_dependencies_311_google_cloud_monitoring": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "grpc_python_dependencies_311", + "requirement": "google-cloud-monitoring==2.16.0" + } + }, + "grpc_python_dependencies_311_google_cloud_trace": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "grpc_python_dependencies_311", + "requirement": "google-cloud-trace==1.11.3" + } + }, + "grpc_python_dependencies_311_googleapis_common_protos": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "grpc_python_dependencies_311", + "requirement": "googleapis-common-protos==1.63.1" + } + }, + "grpc_python_dependencies_311_greenlet": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "grpc_python_dependencies_311", + "requirement": "greenlet==1.1.3.post0" + } + }, + "grpc_python_dependencies_311_idna": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "grpc_python_dependencies_311", + "requirement": "idna==2.7" + } + }, + "grpc_python_dependencies_311_importlib_metadata": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "grpc_python_dependencies_311", + "requirement": "importlib-metadata==6.11.0" + } + }, + "grpc_python_dependencies_311_oauth2client": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "grpc_python_dependencies_311", + "requirement": "oauth2client==4.1.0" + } + }, + "grpc_python_dependencies_311_opencensus_context": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "grpc_python_dependencies_311", + "requirement": "opencensus-context==0.1.3" + } + }, + "grpc_python_dependencies_311_opentelemetry_api": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "grpc_python_dependencies_311", + "requirement": "opentelemetry-api==1.25.0" + } + }, + "grpc_python_dependencies_311_opentelemetry_exporter_prometheus": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "grpc_python_dependencies_311", + "requirement": "opentelemetry-exporter-prometheus==0.46b0" + } + }, + "grpc_python_dependencies_311_opentelemetry_resourcedetector_gcp": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "grpc_python_dependencies_311", + "requirement": "opentelemetry-resourcedetector-gcp==1.6.0a0" + } + }, + "grpc_python_dependencies_311_opentelemetry_sdk": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "grpc_python_dependencies_311", + "requirement": "opentelemetry-sdk==1.25.0" + } + }, + "grpc_python_dependencies_311_opentelemetry_semantic_conventions": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "grpc_python_dependencies_311", + "requirement": "opentelemetry-semantic-conventions==0.46b0" + } + }, + "grpc_python_dependencies_311_prometheus_client": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "grpc_python_dependencies_311", + "requirement": "prometheus_client==0.20.0" + } + }, + "grpc_python_dependencies_311_proto_plus": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "grpc_python_dependencies_311", + "requirement": "proto-plus==1.22.3" + } + }, + "grpc_python_dependencies_311_protobuf": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "grpc_python_dependencies_311", + "requirement": "protobuf>=5.27.1,<6.0dev" + } + }, + "grpc_python_dependencies_311_pyasn1": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "grpc_python_dependencies_311", + "requirement": "pyasn1==0.5.0" + } + }, + "grpc_python_dependencies_311_pyasn1_modules": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "grpc_python_dependencies_311", + "requirement": "pyasn1-modules==0.3.0" + } + }, + "grpc_python_dependencies_311_requests": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "grpc_python_dependencies_311", + "requirement": "requests==2.25.1" + } + }, + "grpc_python_dependencies_311_rsa": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "grpc_python_dependencies_311", + "requirement": "rsa==4.9" + } + }, + "grpc_python_dependencies_311_setuptools": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "grpc_python_dependencies_311", + "requirement": "setuptools==44.1.1" + } + }, + "grpc_python_dependencies_311_typing_extensions": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "grpc_python_dependencies_311", + "requirement": "typing-extensions==4.9.0" + } + }, + "grpc_python_dependencies_311_urllib3": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "grpc_python_dependencies_311", + "requirement": "urllib3==1.26.18" + } + }, + "grpc_python_dependencies_311_wheel": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "grpc_python_dependencies_311", + "requirement": "wheel==0.38.1" + } + }, + "grpc_python_dependencies_311_wrapt": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "grpc_python_dependencies_311", + "requirement": "wrapt==1.16.0" + } + }, + "grpc_python_dependencies_311_zipp": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "grpc_python_dependencies_311", + "requirement": "zipp==3.17.0" + } + }, + "grpc_python_dependencies_311_zope_event": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "grpc_python_dependencies_311", + "requirement": "zope.event==4.5.0" + } + }, + "grpc_python_dependencies_311_zope_interface": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "grpc_python_dependencies_311", + "requirement": "zope.interface==6.1" + } + }, + "grpc_python_dependencies_312_absl_py": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "grpc_python_dependencies_312", + "requirement": "absl-py==1.4.0" + } + }, + "grpc_python_dependencies_312_cachetools": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "grpc_python_dependencies_312", + "requirement": "cachetools==5.3.2" + } + }, + "grpc_python_dependencies_312_certifi": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "grpc_python_dependencies_312", + "requirement": "certifi==2023.7.22" + } + }, + "grpc_python_dependencies_312_chardet": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "grpc_python_dependencies_312", + "requirement": "chardet==3.0.4" + } + }, + "grpc_python_dependencies_312_charset_normalizer": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "grpc_python_dependencies_312", + "requirement": "charset-normalizer==3.3.2" + } + }, + "grpc_python_dependencies_312_coverage": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "grpc_python_dependencies_312", + "requirement": "coverage==4.5.4" + } + }, + "grpc_python_dependencies_312_cython": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "grpc_python_dependencies_312", + "requirement": "cython==3.0.0" + } + }, + "grpc_python_dependencies_312_deprecated": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "grpc_python_dependencies_312", + "requirement": "Deprecated==1.2.14" + } + }, + "grpc_python_dependencies_312_gevent": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "grpc_python_dependencies_312", + "requirement": "gevent==22.08.0" + } + }, + "grpc_python_dependencies_312_google_api_core": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "grpc_python_dependencies_312", + "requirement": "google-api-core==1.34.1" + } + }, + "grpc_python_dependencies_312_google_auth": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "grpc_python_dependencies_312", + "requirement": "google-auth==2.23.4" + } + }, + "grpc_python_dependencies_312_google_cloud_monitoring": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "grpc_python_dependencies_312", + "requirement": "google-cloud-monitoring==2.16.0" + } + }, + "grpc_python_dependencies_312_google_cloud_trace": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "grpc_python_dependencies_312", + "requirement": "google-cloud-trace==1.11.3" + } + }, + "grpc_python_dependencies_312_googleapis_common_protos": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "grpc_python_dependencies_312", + "requirement": "googleapis-common-protos==1.63.1" + } + }, + "grpc_python_dependencies_312_greenlet": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "grpc_python_dependencies_312", + "requirement": "greenlet==1.1.3.post0" + } + }, + "grpc_python_dependencies_312_idna": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "grpc_python_dependencies_312", + "requirement": "idna==2.7" + } + }, + "grpc_python_dependencies_312_importlib_metadata": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "grpc_python_dependencies_312", + "requirement": "importlib-metadata==6.11.0" + } + }, + "grpc_python_dependencies_312_oauth2client": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "grpc_python_dependencies_312", + "requirement": "oauth2client==4.1.0" + } + }, + "grpc_python_dependencies_312_opencensus_context": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "grpc_python_dependencies_312", + "requirement": "opencensus-context==0.1.3" + } + }, + "grpc_python_dependencies_312_opentelemetry_api": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "grpc_python_dependencies_312", + "requirement": "opentelemetry-api==1.25.0" + } + }, + "grpc_python_dependencies_312_opentelemetry_exporter_prometheus": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "grpc_python_dependencies_312", + "requirement": "opentelemetry-exporter-prometheus==0.46b0" + } + }, + "grpc_python_dependencies_312_opentelemetry_resourcedetector_gcp": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "grpc_python_dependencies_312", + "requirement": "opentelemetry-resourcedetector-gcp==1.6.0a0" + } + }, + "grpc_python_dependencies_312_opentelemetry_sdk": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "grpc_python_dependencies_312", + "requirement": "opentelemetry-sdk==1.25.0" + } + }, + "grpc_python_dependencies_312_opentelemetry_semantic_conventions": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "grpc_python_dependencies_312", + "requirement": "opentelemetry-semantic-conventions==0.46b0" + } + }, + "grpc_python_dependencies_312_prometheus_client": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "grpc_python_dependencies_312", + "requirement": "prometheus_client==0.20.0" + } + }, + "grpc_python_dependencies_312_proto_plus": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "grpc_python_dependencies_312", + "requirement": "proto-plus==1.22.3" + } + }, + "grpc_python_dependencies_312_protobuf": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "grpc_python_dependencies_312", + "requirement": "protobuf>=5.27.1,<6.0dev" + } + }, + "grpc_python_dependencies_312_pyasn1": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "grpc_python_dependencies_312", + "requirement": "pyasn1==0.5.0" + } + }, + "grpc_python_dependencies_312_pyasn1_modules": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "grpc_python_dependencies_312", + "requirement": "pyasn1-modules==0.3.0" + } + }, + "grpc_python_dependencies_312_requests": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "grpc_python_dependencies_312", + "requirement": "requests==2.25.1" + } + }, + "grpc_python_dependencies_312_rsa": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "grpc_python_dependencies_312", + "requirement": "rsa==4.9" + } + }, + "grpc_python_dependencies_312_setuptools": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "grpc_python_dependencies_312", + "requirement": "setuptools==44.1.1" + } + }, + "grpc_python_dependencies_312_typing_extensions": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "grpc_python_dependencies_312", + "requirement": "typing-extensions==4.9.0" + } + }, + "grpc_python_dependencies_312_urllib3": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "grpc_python_dependencies_312", + "requirement": "urllib3==1.26.18" + } + }, + "grpc_python_dependencies_312_wheel": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "grpc_python_dependencies_312", + "requirement": "wheel==0.38.1" + } + }, + "grpc_python_dependencies_312_wrapt": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "grpc_python_dependencies_312", + "requirement": "wrapt==1.16.0" + } + }, + "grpc_python_dependencies_312_zipp": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "grpc_python_dependencies_312", + "requirement": "zipp==3.17.0" + } + }, + "grpc_python_dependencies_312_zope_event": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "grpc_python_dependencies_312", + "requirement": "zope.event==4.5.0" + } + }, + "grpc_python_dependencies_312_zope_interface": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "grpc_python_dependencies_312", + "requirement": "zope.interface==6.1" + } + }, + "grpc_python_dependencies_313_absl_py": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "grpc_python_dependencies_313", + "requirement": "absl-py==1.4.0" + } + }, + "grpc_python_dependencies_313_cachetools": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "grpc_python_dependencies_313", + "requirement": "cachetools==5.3.2" + } + }, + "grpc_python_dependencies_313_certifi": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "grpc_python_dependencies_313", + "requirement": "certifi==2023.7.22" + } + }, + "grpc_python_dependencies_313_chardet": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "grpc_python_dependencies_313", + "requirement": "chardet==3.0.4" + } + }, + "grpc_python_dependencies_313_charset_normalizer": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "grpc_python_dependencies_313", + "requirement": "charset-normalizer==3.3.2" + } + }, + "grpc_python_dependencies_313_coverage": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "grpc_python_dependencies_313", + "requirement": "coverage==4.5.4" + } + }, + "grpc_python_dependencies_313_cython": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "grpc_python_dependencies_313", + "requirement": "cython==3.0.0" + } + }, + "grpc_python_dependencies_313_deprecated": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "grpc_python_dependencies_313", + "requirement": "Deprecated==1.2.14" + } + }, + "grpc_python_dependencies_313_gevent": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "grpc_python_dependencies_313", + "requirement": "gevent==22.08.0" + } + }, + "grpc_python_dependencies_313_google_api_core": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "grpc_python_dependencies_313", + "requirement": "google-api-core==1.34.1" + } + }, + "grpc_python_dependencies_313_google_auth": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "grpc_python_dependencies_313", + "requirement": "google-auth==2.23.4" + } + }, + "grpc_python_dependencies_313_google_cloud_monitoring": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "grpc_python_dependencies_313", + "requirement": "google-cloud-monitoring==2.16.0" + } + }, + "grpc_python_dependencies_313_google_cloud_trace": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "grpc_python_dependencies_313", + "requirement": "google-cloud-trace==1.11.3" + } + }, + "grpc_python_dependencies_313_googleapis_common_protos": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "grpc_python_dependencies_313", + "requirement": "googleapis-common-protos==1.63.1" + } + }, + "grpc_python_dependencies_313_greenlet": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "grpc_python_dependencies_313", + "requirement": "greenlet==1.1.3.post0" + } + }, + "grpc_python_dependencies_313_idna": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "grpc_python_dependencies_313", + "requirement": "idna==2.7" + } + }, + "grpc_python_dependencies_313_importlib_metadata": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "grpc_python_dependencies_313", + "requirement": "importlib-metadata==6.11.0" + } + }, + "grpc_python_dependencies_313_oauth2client": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "grpc_python_dependencies_313", + "requirement": "oauth2client==4.1.0" + } + }, + "grpc_python_dependencies_313_opencensus_context": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "grpc_python_dependencies_313", + "requirement": "opencensus-context==0.1.3" + } + }, + "grpc_python_dependencies_313_opentelemetry_api": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "grpc_python_dependencies_313", + "requirement": "opentelemetry-api==1.25.0" + } + }, + "grpc_python_dependencies_313_opentelemetry_exporter_prometheus": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "grpc_python_dependencies_313", + "requirement": "opentelemetry-exporter-prometheus==0.46b0" + } + }, + "grpc_python_dependencies_313_opentelemetry_resourcedetector_gcp": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "grpc_python_dependencies_313", + "requirement": "opentelemetry-resourcedetector-gcp==1.6.0a0" + } + }, + "grpc_python_dependencies_313_opentelemetry_sdk": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "grpc_python_dependencies_313", + "requirement": "opentelemetry-sdk==1.25.0" + } + }, + "grpc_python_dependencies_313_opentelemetry_semantic_conventions": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "grpc_python_dependencies_313", + "requirement": "opentelemetry-semantic-conventions==0.46b0" + } + }, + "grpc_python_dependencies_313_prometheus_client": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "grpc_python_dependencies_313", + "requirement": "prometheus_client==0.20.0" + } + }, + "grpc_python_dependencies_313_proto_plus": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "grpc_python_dependencies_313", + "requirement": "proto-plus==1.22.3" + } + }, + "grpc_python_dependencies_313_protobuf": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "grpc_python_dependencies_313", + "requirement": "protobuf>=5.27.1,<6.0dev" + } + }, + "grpc_python_dependencies_313_pyasn1": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "grpc_python_dependencies_313", + "requirement": "pyasn1==0.5.0" + } + }, + "grpc_python_dependencies_313_pyasn1_modules": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "grpc_python_dependencies_313", + "requirement": "pyasn1-modules==0.3.0" + } + }, + "grpc_python_dependencies_313_requests": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "grpc_python_dependencies_313", + "requirement": "requests==2.25.1" + } + }, + "grpc_python_dependencies_313_rsa": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "grpc_python_dependencies_313", + "requirement": "rsa==4.9" + } + }, + "grpc_python_dependencies_313_setuptools": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "grpc_python_dependencies_313", + "requirement": "setuptools==44.1.1" + } + }, + "grpc_python_dependencies_313_typing_extensions": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "grpc_python_dependencies_313", + "requirement": "typing-extensions==4.9.0" + } + }, + "grpc_python_dependencies_313_urllib3": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "grpc_python_dependencies_313", + "requirement": "urllib3==1.26.18" + } + }, + "grpc_python_dependencies_313_wheel": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "grpc_python_dependencies_313", + "requirement": "wheel==0.38.1" + } + }, + "grpc_python_dependencies_313_wrapt": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "grpc_python_dependencies_313", + "requirement": "wrapt==1.16.0" + } + }, + "grpc_python_dependencies_313_zipp": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "grpc_python_dependencies_313", + "requirement": "zipp==3.17.0" + } + }, + "grpc_python_dependencies_313_zope_event": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "grpc_python_dependencies_313", + "requirement": "zope.event==4.5.0" + } + }, + "grpc_python_dependencies_313_zope_interface": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "grpc_python_dependencies_313", + "requirement": "zope.interface==6.1" + } + }, + "grpc_python_dependencies_39_absl_py": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "grpc_python_dependencies_39", + "requirement": "absl-py==1.4.0" + } + }, + "grpc_python_dependencies_39_cachetools": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "grpc_python_dependencies_39", + "requirement": "cachetools==5.3.2" + } + }, + "grpc_python_dependencies_39_certifi": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "grpc_python_dependencies_39", + "requirement": "certifi==2023.7.22" + } + }, + "grpc_python_dependencies_39_chardet": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "grpc_python_dependencies_39", + "requirement": "chardet==3.0.4" + } + }, + "grpc_python_dependencies_39_charset_normalizer": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "grpc_python_dependencies_39", + "requirement": "charset-normalizer==3.3.2" + } + }, + "grpc_python_dependencies_39_coverage": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "grpc_python_dependencies_39", + "requirement": "coverage==4.5.4" + } + }, + "grpc_python_dependencies_39_cython": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "grpc_python_dependencies_39", + "requirement": "cython==3.0.0" + } + }, + "grpc_python_dependencies_39_deprecated": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "grpc_python_dependencies_39", + "requirement": "Deprecated==1.2.14" + } + }, + "grpc_python_dependencies_39_gevent": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "grpc_python_dependencies_39", + "requirement": "gevent==22.08.0" + } + }, + "grpc_python_dependencies_39_google_api_core": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "grpc_python_dependencies_39", + "requirement": "google-api-core==1.34.1" + } + }, + "grpc_python_dependencies_39_google_auth": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "grpc_python_dependencies_39", + "requirement": "google-auth==2.23.4" + } + }, + "grpc_python_dependencies_39_google_cloud_monitoring": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "grpc_python_dependencies_39", + "requirement": "google-cloud-monitoring==2.16.0" + } + }, + "grpc_python_dependencies_39_google_cloud_trace": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "grpc_python_dependencies_39", + "requirement": "google-cloud-trace==1.11.3" + } + }, + "grpc_python_dependencies_39_googleapis_common_protos": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "grpc_python_dependencies_39", + "requirement": "googleapis-common-protos==1.63.1" + } + }, + "grpc_python_dependencies_39_greenlet": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "grpc_python_dependencies_39", + "requirement": "greenlet==1.1.3.post0" + } + }, + "grpc_python_dependencies_39_idna": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "grpc_python_dependencies_39", + "requirement": "idna==2.7" + } + }, + "grpc_python_dependencies_39_importlib_metadata": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "grpc_python_dependencies_39", + "requirement": "importlib-metadata==6.11.0" + } + }, + "grpc_python_dependencies_39_oauth2client": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "grpc_python_dependencies_39", + "requirement": "oauth2client==4.1.0" + } + }, + "grpc_python_dependencies_39_opencensus_context": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "grpc_python_dependencies_39", + "requirement": "opencensus-context==0.1.3" + } + }, + "grpc_python_dependencies_39_opentelemetry_api": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "grpc_python_dependencies_39", + "requirement": "opentelemetry-api==1.25.0" + } + }, + "grpc_python_dependencies_39_opentelemetry_exporter_prometheus": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "grpc_python_dependencies_39", + "requirement": "opentelemetry-exporter-prometheus==0.46b0" + } + }, + "grpc_python_dependencies_39_opentelemetry_resourcedetector_gcp": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "grpc_python_dependencies_39", + "requirement": "opentelemetry-resourcedetector-gcp==1.6.0a0" + } + }, + "grpc_python_dependencies_39_opentelemetry_sdk": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "grpc_python_dependencies_39", + "requirement": "opentelemetry-sdk==1.25.0" + } + }, + "grpc_python_dependencies_39_opentelemetry_semantic_conventions": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "grpc_python_dependencies_39", + "requirement": "opentelemetry-semantic-conventions==0.46b0" + } + }, + "grpc_python_dependencies_39_prometheus_client": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "grpc_python_dependencies_39", + "requirement": "prometheus_client==0.20.0" + } + }, + "grpc_python_dependencies_39_proto_plus": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "grpc_python_dependencies_39", + "requirement": "proto-plus==1.22.3" + } + }, + "grpc_python_dependencies_39_protobuf": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "grpc_python_dependencies_39", + "requirement": "protobuf>=5.27.1,<6.0dev" + } + }, + "grpc_python_dependencies_39_pyasn1": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "grpc_python_dependencies_39", + "requirement": "pyasn1==0.5.0" + } + }, + "grpc_python_dependencies_39_pyasn1_modules": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "grpc_python_dependencies_39", + "requirement": "pyasn1-modules==0.3.0" + } + }, + "grpc_python_dependencies_39_requests": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "grpc_python_dependencies_39", + "requirement": "requests==2.25.1" + } + }, + "grpc_python_dependencies_39_rsa": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "grpc_python_dependencies_39", + "requirement": "rsa==4.9" + } + }, + "grpc_python_dependencies_39_setuptools": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "grpc_python_dependencies_39", + "requirement": "setuptools==44.1.1" + } + }, + "grpc_python_dependencies_39_typing_extensions": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "grpc_python_dependencies_39", + "requirement": "typing-extensions==4.9.0" + } + }, + "grpc_python_dependencies_39_urllib3": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "grpc_python_dependencies_39", + "requirement": "urllib3==1.26.18" + } + }, + "grpc_python_dependencies_39_wheel": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "grpc_python_dependencies_39", + "requirement": "wheel==0.38.1" + } + }, + "grpc_python_dependencies_39_wrapt": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "grpc_python_dependencies_39", + "requirement": "wrapt==1.16.0" + } + }, + "grpc_python_dependencies_39_zipp": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "grpc_python_dependencies_39", + "requirement": "zipp==3.17.0" + } + }, + "grpc_python_dependencies_39_zope_event": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "grpc_python_dependencies_39", + "requirement": "zope.event==4.5.0" + } + }, + "grpc_python_dependencies_39_zope_interface": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@grpc_python_dependencies//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "grpc_python_dependencies_39", + "requirement": "zope.interface==6.1" + } + }, + "pgv_pip_deps_310_astunparse": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pgv_pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "pgv_pip_deps_310", + "requirement": "astunparse==1.6.3" + } + }, + "pgv_pip_deps_310_jinja2": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pgv_pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "pgv_pip_deps_310", + "requirement": "jinja2==3.1.3" + } + }, + "pgv_pip_deps_310_markupsafe": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pgv_pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "pgv_pip_deps_310", + "requirement": "markupsafe==2.1.5" + } + }, + "pgv_pip_deps_310_protobuf": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pgv_pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "pgv_pip_deps_310", + "requirement": "protobuf==5.26.0" + } + }, + "pgv_pip_deps_310_six": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pgv_pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "pgv_pip_deps_310", + "requirement": "six==1.16.0" + } + }, + "pgv_pip_deps_310_validate_email": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pgv_pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "pgv_pip_deps_310", + "requirement": "validate-email==1.3" + } + }, + "pgv_pip_deps_310_wheel": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pgv_pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "pgv_pip_deps_310", + "requirement": "wheel==0.43.0" + } + }, + "pgv_pip_deps_311_astunparse": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pgv_pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "pgv_pip_deps_311", + "requirement": "astunparse==1.6.3" + } + }, + "pgv_pip_deps_311_jinja2": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pgv_pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "pgv_pip_deps_311", + "requirement": "jinja2==3.1.3" + } + }, + "pgv_pip_deps_311_markupsafe": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pgv_pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "pgv_pip_deps_311", + "requirement": "markupsafe==2.1.5" + } + }, + "pgv_pip_deps_311_protobuf": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pgv_pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "pgv_pip_deps_311", + "requirement": "protobuf==5.26.0" + } + }, + "pgv_pip_deps_311_six": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pgv_pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "pgv_pip_deps_311", + "requirement": "six==1.16.0" + } + }, + "pgv_pip_deps_311_validate_email": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pgv_pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "pgv_pip_deps_311", + "requirement": "validate-email==1.3" + } + }, + "pgv_pip_deps_311_wheel": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pgv_pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "pgv_pip_deps_311", + "requirement": "wheel==0.43.0" + } + }, + "pgv_pip_deps_312_astunparse": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pgv_pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "pgv_pip_deps_312", + "requirement": "astunparse==1.6.3" + } + }, + "pgv_pip_deps_312_jinja2": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pgv_pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "pgv_pip_deps_312", + "requirement": "jinja2==3.1.3" + } + }, + "pgv_pip_deps_312_markupsafe": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pgv_pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "pgv_pip_deps_312", + "requirement": "markupsafe==2.1.5" + } + }, + "pgv_pip_deps_312_protobuf": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pgv_pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "pgv_pip_deps_312", + "requirement": "protobuf==5.26.0" + } + }, + "pgv_pip_deps_312_six": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pgv_pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "pgv_pip_deps_312", + "requirement": "six==1.16.0" + } + }, + "pgv_pip_deps_312_validate_email": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pgv_pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "pgv_pip_deps_312", + "requirement": "validate-email==1.3" + } + }, + "pgv_pip_deps_312_wheel": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pgv_pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "pgv_pip_deps_312", + "requirement": "wheel==0.43.0" + } + }, + "pgv_pip_deps_313_astunparse": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pgv_pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "pgv_pip_deps_313", + "requirement": "astunparse==1.6.3" + } + }, + "pgv_pip_deps_313_jinja2": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pgv_pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "pgv_pip_deps_313", + "requirement": "jinja2==3.1.3" + } + }, + "pgv_pip_deps_313_markupsafe": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pgv_pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "pgv_pip_deps_313", + "requirement": "markupsafe==2.1.5" + } + }, + "pgv_pip_deps_313_protobuf": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pgv_pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "pgv_pip_deps_313", + "requirement": "protobuf==5.26.0" + } + }, + "pgv_pip_deps_313_six": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pgv_pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "pgv_pip_deps_313", + "requirement": "six==1.16.0" + } + }, + "pgv_pip_deps_313_validate_email": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pgv_pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "pgv_pip_deps_313", + "requirement": "validate-email==1.3" + } + }, + "pgv_pip_deps_313_wheel": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pgv_pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_13_host//:python", + "repo": "pgv_pip_deps_313", + "requirement": "wheel==0.43.0" + } + }, + "pgv_pip_deps_39_astunparse": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pgv_pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "pgv_pip_deps_39", + "requirement": "astunparse==1.6.3" + } + }, + "pgv_pip_deps_39_jinja2": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pgv_pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "pgv_pip_deps_39", + "requirement": "jinja2==3.1.3" + } + }, + "pgv_pip_deps_39_markupsafe": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pgv_pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "pgv_pip_deps_39", + "requirement": "markupsafe==2.1.5" + } + }, + "pgv_pip_deps_39_protobuf": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pgv_pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "pgv_pip_deps_39", + "requirement": "protobuf==5.26.0" + } + }, + "pgv_pip_deps_39_six": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pgv_pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "pgv_pip_deps_39", + "requirement": "six==1.16.0" + } + }, + "pgv_pip_deps_39_validate_email": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pgv_pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "pgv_pip_deps_39", + "requirement": "validate-email==1.3" + } + }, + "pgv_pip_deps_39_wheel": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pgv_pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "pgv_pip_deps_39", + "requirement": "wheel==0.43.0" + } + }, + "pip_deps_310_numpy": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "pip_deps_310", + "requirement": "numpy<=1.26.1" + } + }, + "pip_deps_310_setuptools": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "pip_deps_310", + "requirement": "setuptools<=70.3.0" + } + }, + "pip_deps_311_numpy": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "pip_deps_311", + "requirement": "numpy<=1.26.1" + } + }, + "pip_deps_311_setuptools": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "pip_deps_311", + "requirement": "setuptools<=70.3.0" + } + }, + "pip_deps_312_numpy": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "pip_deps_312", + "requirement": "numpy<=1.26.1" + } + }, + "pip_deps_312_setuptools": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "pip_deps_312", + "requirement": "setuptools<=70.3.0" + } + }, + "pip_deps_38_numpy": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_8_host//:python", + "repo": "pip_deps_38", + "requirement": "numpy<=1.26.1" + } + }, + "pip_deps_38_setuptools": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_8_host//:python", + "repo": "pip_deps_38", + "requirement": "setuptools<=70.3.0" + } + }, + "pip_deps_39_numpy": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "pip_deps_39", + "requirement": "numpy<=1.26.1" + } + }, + "pip_deps_39_setuptools": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "pip_deps_39", + "requirement": "setuptools<=70.3.0" + } + }, + "pypi_310_async_timeout": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypi//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "pypi_310", + "requirement": "async-timeout==5.0.1" + } + }, + "pypi_310_beautifulsoup4": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypi//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "pypi_310", + "requirement": "beautifulsoup4==4.12.3" + } + }, + "pypi_310_certifi": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypi//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "pypi_310", + "requirement": "certifi==2024.12.14" + } + }, + "pypi_310_charset_normalizer": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypi//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "pypi_310", + "requirement": "charset-normalizer==3.4.1" + } + }, + "pypi_310_dnspython": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypi//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "pypi_310", + "requirement": "dnspython==2.7.0" + } + }, + "pypi_310_google": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypi//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "pypi_310", + "requirement": "google==3.0.0" + } + }, + "pypi_310_grpcio": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypi//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "pypi_310", + "requirement": "grpcio==1.69.0" + } + }, + "pypi_310_hyperon_das_atomdb": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypi//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "pypi_310", + "requirement": "hyperon-das-atomdb==0.8.10" + } + }, + "pypi_310_hyperon_das_atomdb_cpp": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypi//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "pypi_310", + "requirement": "hyperon-das-atomdb-cpp==0.0.2" + } + }, + "pypi_310_idna": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypi//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "pypi_310", + "requirement": "idna==3.10" + } + }, + "pypi_310_mongomock": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypi//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "pypi_310", + "requirement": "mongomock==4.3.0" + } + }, + "pypi_310_packaging": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypi//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "pypi_310", + "requirement": "packaging==24.2" + } + }, + "pypi_310_protobuf": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypi//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "pypi_310", + "requirement": "protobuf==4.25.5" + } + }, + "pypi_310_pymongo": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypi//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "pypi_310", + "requirement": "pymongo==4.5.0" + } + }, + "pypi_310_python_dotenv": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypi//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "pypi_310", + "requirement": "python-dotenv==1.0.1" + } + }, + "pypi_310_pytz": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypi//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "pypi_310", + "requirement": "pytz==2024.2" + } + }, + "pypi_310_redis": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypi//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "pypi_310", + "requirement": "redis==5.2.1" + } + }, + "pypi_310_requests": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypi//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "pypi_310", + "requirement": "requests==2.32.3" + } + }, + "pypi_310_sentinels": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypi//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "pypi_310", + "requirement": "sentinels==1.0.0" + } + }, + "pypi_310_setuptools": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypi//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "pypi_310", + "requirement": "setuptools==70.3.0" + } + }, + "pypi_310_soupsieve": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypi//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "pypi_310", + "requirement": "soupsieve==2.6" + } + }, + "pypi_310_urllib3": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypi//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "pypi_310", + "requirement": "urllib3==2.3.0" + } + }, + "pypi_dev_310_exceptiongroup": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypi_dev//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "pypi_dev_310", + "requirement": "exceptiongroup==1.2.2" + } + }, + "pypi_dev_310_iniconfig": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypi_dev//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "pypi_dev_310", + "requirement": "iniconfig==2.0.0" + } + }, + "pypi_dev_310_mongomock": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypi_dev//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "pypi_dev_310", + "requirement": "mongomock==4.3.0" + } + }, + "pypi_dev_310_packaging": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypi_dev//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "pypi_dev_310", + "requirement": "packaging==24.2" + } + }, + "pypi_dev_310_pluggy": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypi_dev//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "pypi_dev_310", + "requirement": "pluggy==1.5.0" + } + }, + "pypi_dev_310_pytest": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypi_dev//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "pypi_dev_310", + "requirement": "pytest==8.3.4" + } + }, + "pypi_dev_310_pytz": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypi_dev//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "pypi_dev_310", + "requirement": "pytz==2024.2" + } + }, + "pypi_dev_310_sentinels": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypi_dev//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "pypi_dev_310", + "requirement": "sentinels==1.0.0" + } + }, + "pypi_dev_310_tomli": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypi_dev//{name}:{target}", + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "pypi_dev_310", + "requirement": "tomli==2.2.1" + } + }, + "rules_fuzzing_py_deps_310_absl_py": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", + "extra_pip_args": [ + "--require-hashes" + ], + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "rules_fuzzing_py_deps_310", + "requirement": "absl-py==2.0.0 --hash=sha256:9a28abb62774ae4e8edbe2dd4c49ffcd45a6a848952a5eccc6a49f3f0fc1e2f3" + } + }, + "rules_fuzzing_py_deps_310_six": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", + "extra_pip_args": [ + "--require-hashes" + ], + "python_interpreter_target": "@@rules_python++python+python_3_10_host//:python", + "repo": "rules_fuzzing_py_deps_310", + "requirement": "six==1.16.0 --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + }, + "rules_fuzzing_py_deps_311_absl_py": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", + "extra_pip_args": [ + "--require-hashes" + ], + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_fuzzing_py_deps_311", + "requirement": "absl-py==2.0.0 --hash=sha256:9a28abb62774ae4e8edbe2dd4c49ffcd45a6a848952a5eccc6a49f3f0fc1e2f3" + } + }, + "rules_fuzzing_py_deps_311_six": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", + "extra_pip_args": [ + "--require-hashes" + ], + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_fuzzing_py_deps_311", + "requirement": "six==1.16.0 --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + }, + "rules_fuzzing_py_deps_312_absl_py": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", + "extra_pip_args": [ + "--require-hashes" + ], + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "rules_fuzzing_py_deps_312", + "requirement": "absl-py==2.0.0 --hash=sha256:9a28abb62774ae4e8edbe2dd4c49ffcd45a6a848952a5eccc6a49f3f0fc1e2f3" + } + }, + "rules_fuzzing_py_deps_312_six": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", + "extra_pip_args": [ + "--require-hashes" + ], + "python_interpreter_target": "@@rules_python++python+python_3_12_host//:python", + "repo": "rules_fuzzing_py_deps_312", + "requirement": "six==1.16.0 --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + }, + "rules_fuzzing_py_deps_38_absl_py": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", + "extra_pip_args": [ + "--require-hashes" + ], + "python_interpreter_target": "@@rules_python++python+python_3_8_host//:python", + "repo": "rules_fuzzing_py_deps_38", + "requirement": "absl-py==2.0.0 --hash=sha256:9a28abb62774ae4e8edbe2dd4c49ffcd45a6a848952a5eccc6a49f3f0fc1e2f3" + } + }, + "rules_fuzzing_py_deps_38_six": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", + "extra_pip_args": [ + "--require-hashes" + ], + "python_interpreter_target": "@@rules_python++python+python_3_8_host//:python", + "repo": "rules_fuzzing_py_deps_38", + "requirement": "six==1.16.0 --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + }, + "rules_fuzzing_py_deps_39_absl_py": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", + "extra_pip_args": [ + "--require-hashes" + ], + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "rules_fuzzing_py_deps_39", + "requirement": "absl-py==2.0.0 --hash=sha256:9a28abb62774ae4e8edbe2dd4c49ffcd45a6a848952a5eccc6a49f3f0fc1e2f3" + } + }, + "rules_fuzzing_py_deps_39_six": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", + "extra_pip_args": [ + "--require-hashes" + ], + "python_interpreter_target": "@@rules_python++python+python_3_9_host//:python", + "repo": "rules_fuzzing_py_deps_39", + "requirement": "six==1.16.0 --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + }, + "rules_python_publish_deps_311_backports_tarfile_py3_none_any_77e284d7": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "backports.tarfile-1.2.0-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "backports-tarfile==1.2.0", + "sha256": "77e284d754527b01fb1e6fa8a1afe577858ebe4e9dad8919e34c862cb399bc34", + "urls": [ + "https://files.pythonhosted.org/packages/b9/fa/123043af240e49752f1c4bd24da5053b6bd00cad78c2be53c0d1e8b975bc/backports.tarfile-1.2.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_backports_tarfile_sdist_d75e02c2": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "backports_tarfile-1.2.0.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "backports-tarfile==1.2.0", + "sha256": "d75e02c268746e1b8144c278978b6e98e85de6ad16f8e4b0844a154557eca991", + "urls": [ + "https://files.pythonhosted.org/packages/86/72/cd9b395f25e290e633655a100af28cb253e4393396264a98bd5f5951d50f/backports_tarfile-1.2.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_certifi_py3_none_any_922820b5": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "certifi-2024.8.30-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "certifi==2024.8.30", + "sha256": "922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8", + "urls": [ + "https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_certifi_sdist_bec941d2": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "certifi-2024.8.30.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "certifi==2024.8.30", + "sha256": "bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9", + "urls": [ + "https://files.pythonhosted.org/packages/b0/ee/9b19140fe824b367c04c5e1b369942dd754c4c5462d5674002f75c4dedc1/certifi-2024.8.30.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_aarch64_a1ed2dd2": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cffi==1.17.1", + "sha256": "a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41", + "urls": [ + "https://files.pythonhosted.org/packages/2e/ea/70ce63780f096e16ce8588efe039d3c4f91deb1dc01e9c73a287939c79a6/cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + ] + } + }, + "rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_ppc64le_46bf4316": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cffi==1.17.1", + "sha256": "46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1", + "urls": [ + "https://files.pythonhosted.org/packages/1c/a0/a4fa9f4f781bda074c3ddd57a572b060fa0df7655d2a4247bbe277200146/cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + ] + } + }, + "rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_s390x_a24ed04c": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cffi==1.17.1", + "sha256": "a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6", + "urls": [ + "https://files.pythonhosted.org/packages/62/12/ce8710b5b8affbcdd5c6e367217c242524ad17a02fe5beec3ee339f69f85/cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl" + ] + } + }, + "rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_x86_64_610faea7": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cffi==1.17.1", + "sha256": "610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d", + "urls": [ + "https://files.pythonhosted.org/packages/ff/6b/d45873c5e0242196f042d555526f92aa9e0c32355a1be1ff8c27f077fd37/cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_cffi_cp311_cp311_musllinux_1_1_aarch64_a9b15d49": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cffi==1.17.1", + "sha256": "a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6", + "urls": [ + "https://files.pythonhosted.org/packages/1a/52/d9a0e523a572fbccf2955f5abe883cfa8bcc570d7faeee06336fbd50c9fc/cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl" + ] + } + }, + "rules_python_publish_deps_311_cffi_cp311_cp311_musllinux_1_1_x86_64_fc48c783": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cffi==1.17.1", + "sha256": "fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b", + "urls": [ + "https://files.pythonhosted.org/packages/f8/4a/34599cac7dfcd888ff54e801afe06a19c17787dfd94495ab0c8d35fe99fb/cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_cffi_sdist_1c39c601": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "cffi-1.17.1.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cffi==1.17.1", + "sha256": "1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", + "urls": [ + "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_10_9_universal2_0d99dd8f": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c", + "urls": [ + "https://files.pythonhosted.org/packages/9c/61/73589dcc7a719582bf56aae309b6103d2762b526bffe189d635a7fcfd998/charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_10_9_x86_64_c57516e5": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944", + "urls": [ + "https://files.pythonhosted.org/packages/77/d5/8c982d58144de49f59571f940e329ad6e8615e1e82ef84584c5eeb5e1d72/charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_11_0_arm64_6dba5d19": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee", + "urls": [ + "https://files.pythonhosted.org/packages/bf/19/411a64f01ee971bed3231111b69eb56f9331a769072de479eae7de52296d/charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_aarch64_bf4475b8": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c", + "urls": [ + "https://files.pythonhosted.org/packages/4c/92/97509850f0d00e9f14a46bc751daabd0ad7765cff29cdfb66c68b6dad57f/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_ppc64le_ce031db0": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6", + "urls": [ + "https://files.pythonhosted.org/packages/e2/29/d227805bff72ed6d6cb1ce08eec707f7cfbd9868044893617eb331f16295/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_s390x_8ff4e7cd": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea", + "urls": [ + "https://files.pythonhosted.org/packages/13/bc/87c2c9f2c144bedfa62f894c3007cd4530ba4b5351acb10dc786428a50f0/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_x86_64_3710a975": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc", + "urls": [ + "https://files.pythonhosted.org/packages/eb/5b/6f10bad0f6461fa272bfbbdf5d0023b5fb9bc6217c92bf068fa5a99820f5/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_aarch64_47334db7": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594", + "urls": [ + "https://files.pythonhosted.org/packages/d7/a1/493919799446464ed0299c8eef3c3fad0daf1c3cd48bff9263c731b0d9e2/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_ppc64le_f1a2f519": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365", + "urls": [ + "https://files.pythonhosted.org/packages/75/d2/0ab54463d3410709c09266dfb416d032a08f97fd7d60e94b8c6ef54ae14b/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_s390x_63bc5c4a": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129", + "urls": [ + "https://files.pythonhosted.org/packages/8d/c9/27e41d481557be53d51e60750b85aa40eaf52b841946b3cdeff363105737/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_x86_64_bcb4f8ea": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236", + "urls": [ + "https://files.pythonhosted.org/packages/ee/44/4f62042ca8cdc0cabf87c0fc00ae27cd8b53ab68be3605ba6d071f742ad3/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_win_amd64_cee4373f": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27", + "urls": [ + "https://files.pythonhosted.org/packages/0b/6e/b13bd47fa9023b3699e94abf565b5a2f0b0be6e9ddac9812182596ee62e4/charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_py3_none_any_fe9f97fe": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079", + "urls": [ + "https://files.pythonhosted.org/packages/bf/9b/08c0432272d77b04803958a4598a51e2a4b51c06640af8b8f0f908c18bf2/charset_normalizer-3.4.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_sdist_223217c3": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "charset_normalizer-3.4.0.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e", + "urls": [ + "https://files.pythonhosted.org/packages/f2/4f/e1808dc01273379acc506d18f1504eb2d299bd4131743b9fc54d7be4df1e/charset_normalizer-3.4.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_17_aarch64_846da004": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cryptography-43.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cryptography==43.0.3", + "sha256": "846da004a5804145a5f441b8530b4bf35afbf7da70f82409f151695b127213d5", + "urls": [ + "https://files.pythonhosted.org/packages/2f/78/55356eb9075d0be6e81b59f45c7b48df87f76a20e73893872170471f3ee8/cryptography-43.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + ] + } + }, + "rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_17_x86_64_0f996e72": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cryptography-43.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cryptography==43.0.3", + "sha256": "0f996e7268af62598f2fc1204afa98a3b5712313a55c4c9d434aef49cadc91d4", + "urls": [ + "https://files.pythonhosted.org/packages/2a/2c/488776a3dc843f95f86d2f957ca0fc3407d0242b50bede7fad1e339be03f/cryptography-43.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_28_aarch64_f7b178f1": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cryptography==43.0.3", + "sha256": "f7b178f11ed3664fd0e995a47ed2b5ff0a12d893e41dd0494f406d1cf555cab7", + "urls": [ + "https://files.pythonhosted.org/packages/7c/04/2345ca92f7a22f601a9c62961741ef7dd0127c39f7310dffa0041c80f16f/cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl" + ] + } + }, + "rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_28_x86_64_c2e6fc39": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cryptography==43.0.3", + "sha256": "c2e6fc39c4ab499049df3bdf567f768a723a5e8464816e8f009f121a5a9f4405", + "urls": [ + "https://files.pythonhosted.org/packages/ac/25/e715fa0bc24ac2114ed69da33adf451a38abb6f3f24ec207908112e9ba53/cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_cryptography_cp39_abi3_musllinux_1_2_aarch64_e1be4655": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cryptography-43.0.3-cp39-abi3-musllinux_1_2_aarch64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cryptography==43.0.3", + "sha256": "e1be4655c7ef6e1bbe6b5d0403526601323420bcf414598955968c9ef3eb7d16", + "urls": [ + "https://files.pythonhosted.org/packages/21/ce/b9c9ff56c7164d8e2edfb6c9305045fbc0df4508ccfdb13ee66eb8c95b0e/cryptography-43.0.3-cp39-abi3-musllinux_1_2_aarch64.whl" + ] + } + }, + "rules_python_publish_deps_311_cryptography_cp39_abi3_musllinux_1_2_x86_64_df6b6c6d": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cryptography-43.0.3-cp39-abi3-musllinux_1_2_x86_64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cryptography==43.0.3", + "sha256": "df6b6c6d742395dd77a23ea3728ab62f98379eff8fb61be2744d4679ab678f73", + "urls": [ + "https://files.pythonhosted.org/packages/2a/33/b3682992ab2e9476b9c81fff22f02c8b0a1e6e1d49ee1750a67d85fd7ed2/cryptography-43.0.3-cp39-abi3-musllinux_1_2_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_cryptography_sdist_315b9001": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "cryptography-43.0.3.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cryptography==43.0.3", + "sha256": "315b9001266a492a6ff443b61238f956b214dbec9910a081ba5b6646a055a805", + "urls": [ + "https://files.pythonhosted.org/packages/0d/05/07b55d1fa21ac18c3a8c79f764e2514e6f6a9698f1be44994f5adf0d29db/cryptography-43.0.3.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_docutils_py3_none_any_dafca5b9": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "docutils-0.21.2-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "docutils==0.21.2", + "sha256": "dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2", + "urls": [ + "https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_docutils_sdist_3a6b1873": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "docutils-0.21.2.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "docutils==0.21.2", + "sha256": "3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f", + "urls": [ + "https://files.pythonhosted.org/packages/ae/ed/aefcc8cd0ba62a0560c3c18c33925362d46c6075480bfa4df87b28e169a9/docutils-0.21.2.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_idna_py3_none_any_946d195a": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "idna-3.10-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "idna==3.10", + "sha256": "946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", + "urls": [ + "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_idna_sdist_12f65c9b": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "idna-3.10.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "idna==3.10", + "sha256": "12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", + "urls": [ + "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_importlib_metadata_py3_none_any_45e54197": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "importlib_metadata-8.5.0-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "importlib-metadata==8.5.0", + "sha256": "45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b", + "urls": [ + "https://files.pythonhosted.org/packages/a0/d9/a1e041c5e7caa9a05c925f4bdbdfb7f006d1f74996af53467bc394c97be7/importlib_metadata-8.5.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_importlib_metadata_sdist_71522656": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "importlib_metadata-8.5.0.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "importlib-metadata==8.5.0", + "sha256": "71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7", + "urls": [ + "https://files.pythonhosted.org/packages/cd/12/33e59336dca5be0c398a7482335911a33aa0e20776128f038019f1a95f1b/importlib_metadata-8.5.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_jaraco_classes_py3_none_any_f662826b": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "jaraco.classes-3.4.0-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "jaraco-classes==3.4.0", + "sha256": "f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790", + "urls": [ + "https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_jaraco_classes_sdist_47a024b5": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "jaraco.classes-3.4.0.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "jaraco-classes==3.4.0", + "sha256": "47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd", + "urls": [ + "https://files.pythonhosted.org/packages/06/c0/ed4a27bc5571b99e3cff68f8a9fa5b56ff7df1c2251cc715a652ddd26402/jaraco.classes-3.4.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_jaraco_context_py3_none_any_f797fc48": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "jaraco.context-6.0.1-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "jaraco-context==6.0.1", + "sha256": "f797fc481b490edb305122c9181830a3a5b76d84ef6d1aef2fb9b47ab956f9e4", + "urls": [ + "https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_jaraco_context_sdist_9bae4ea5": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "jaraco_context-6.0.1.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "jaraco-context==6.0.1", + "sha256": "9bae4ea555cf0b14938dc0aee7c9f32ed303aa20a3b73e7dc80111628792d1b3", + "urls": [ + "https://files.pythonhosted.org/packages/df/ad/f3777b81bf0b6e7bc7514a1656d3e637b2e8e15fab2ce3235730b3e7a4e6/jaraco_context-6.0.1.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_jaraco_functools_py3_none_any_ad159f13": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "jaraco.functools-4.1.0-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "jaraco-functools==4.1.0", + "sha256": "ad159f13428bc4acbf5541ad6dec511f91573b90fba04df61dafa2a1231cf649", + "urls": [ + "https://files.pythonhosted.org/packages/9f/4f/24b319316142c44283d7540e76c7b5a6dbd5db623abd86bb7b3491c21018/jaraco.functools-4.1.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_jaraco_functools_sdist_70f7e0e2": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "jaraco_functools-4.1.0.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "jaraco-functools==4.1.0", + "sha256": "70f7e0e2ae076498e212562325e805204fc092d7b4c17e0e86c959e249701a9d", + "urls": [ + "https://files.pythonhosted.org/packages/ab/23/9894b3df5d0a6eb44611c36aec777823fc2e07740dabbd0b810e19594013/jaraco_functools-4.1.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_jeepney_py3_none_any_c0a454ad": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "jeepney-0.8.0-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "jeepney==0.8.0", + "sha256": "c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755", + "urls": [ + "https://files.pythonhosted.org/packages/ae/72/2a1e2290f1ab1e06f71f3d0f1646c9e4634e70e1d37491535e19266e8dc9/jeepney-0.8.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_jeepney_sdist_5efe48d2": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "jeepney-0.8.0.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "jeepney==0.8.0", + "sha256": "5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806", + "urls": [ + "https://files.pythonhosted.org/packages/d6/f4/154cf374c2daf2020e05c3c6a03c91348d59b23c5366e968feb198306fdf/jeepney-0.8.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_keyring_py3_none_any_5426f817": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "keyring-25.4.1-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "keyring==25.4.1", + "sha256": "5426f817cf7f6f007ba5ec722b1bcad95a75b27d780343772ad76b17cb47b0bf", + "urls": [ + "https://files.pythonhosted.org/packages/83/25/e6d59e5f0a0508d0dca8bb98c7f7fd3772fc943ac3f53d5ab18a218d32c0/keyring-25.4.1-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_keyring_sdist_b07ebc55": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "keyring-25.4.1.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "keyring==25.4.1", + "sha256": "b07ebc55f3e8ed86ac81dd31ef14e81ace9dd9c3d4b5d77a6e9a2016d0d71a1b", + "urls": [ + "https://files.pythonhosted.org/packages/a5/1c/2bdbcfd5d59dc6274ffb175bc29aa07ecbfab196830e0cfbde7bd861a2ea/keyring-25.4.1.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_markdown_it_py_py3_none_any_35521684": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "markdown_it_py-3.0.0-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "markdown-it-py==3.0.0", + "sha256": "355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", + "urls": [ + "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_markdown_it_py_sdist_e3f60a94": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "markdown-it-py-3.0.0.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "markdown-it-py==3.0.0", + "sha256": "e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", + "urls": [ + "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_mdurl_py3_none_any_84008a41": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "mdurl-0.1.2-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "mdurl==0.1.2", + "sha256": "84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", + "urls": [ + "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_mdurl_sdist_bb413d29": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "mdurl-0.1.2.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "mdurl==0.1.2", + "sha256": "bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", + "urls": [ + "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_more_itertools_py3_none_any_037b0d32": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "more_itertools-10.5.0-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "more-itertools==10.5.0", + "sha256": "037b0d3203ce90cca8ab1defbbdac29d5f993fc20131f3664dc8d6acfa872aef", + "urls": [ + "https://files.pythonhosted.org/packages/48/7e/3a64597054a70f7c86eb0a7d4fc315b8c1ab932f64883a297bdffeb5f967/more_itertools-10.5.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_more_itertools_sdist_5482bfef": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "more-itertools-10.5.0.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "more-itertools==10.5.0", + "sha256": "5482bfef7849c25dc3c6dd53a6173ae4795da2a41a80faea6700d9f5846c5da6", + "urls": [ + "https://files.pythonhosted.org/packages/51/78/65922308c4248e0eb08ebcbe67c95d48615cc6f27854b6f2e57143e9178f/more-itertools-10.5.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_nh3_cp37_abi3_macosx_10_12_x86_64_14c5a72e": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "14c5a72e9fe82aea5fe3072116ad4661af5cf8e8ff8fc5ad3450f123e4925e86", + "urls": [ + "https://files.pythonhosted.org/packages/b3/89/1daff5d9ba5a95a157c092c7c5f39b8dd2b1ddb4559966f808d31cfb67e0/nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl" + ] + } + }, + "rules_python_publish_deps_311_nh3_cp37_abi3_macosx_10_12_x86_64_7b7c2a3c": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "7b7c2a3c9eb1a827d42539aa64091640bd275b81e097cd1d8d82ef91ffa2e811", + "urls": [ + "https://files.pythonhosted.org/packages/2c/b6/42fc3c69cabf86b6b81e4c051a9b6e249c5ba9f8155590222c2622961f58/nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_aarch64_42c64511": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "42c64511469005058cd17cc1537578eac40ae9f7200bedcfd1fc1a05f4f8c200", + "urls": [ + "https://files.pythonhosted.org/packages/45/b9/833f385403abaf0023c6547389ec7a7acf141ddd9d1f21573723a6eab39a/nh3-0.2.18-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + ] + } + }, + "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_armv7l_0411beb0": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "0411beb0589eacb6734f28d5497ca2ed379eafab8ad8c84b31bb5c34072b7164", + "urls": [ + "https://files.pythonhosted.org/packages/05/2b/85977d9e11713b5747595ee61f381bc820749daf83f07b90b6c9964cf932/nh3-0.2.18-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + ] + } + }, + "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_ppc64_5f36b271": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "5f36b271dae35c465ef5e9090e1fdaba4a60a56f0bb0ba03e0932a66f28b9189", + "urls": [ + "https://files.pythonhosted.org/packages/72/f2/5c894d5265ab80a97c68ca36f25c8f6f0308abac649aaf152b74e7e854a8/nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl" + ] + } + }, + "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_ppc64le_34c03fa7": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "34c03fa78e328c691f982b7c03d4423bdfd7da69cd707fe572f544cf74ac23ad", + "urls": [ + "https://files.pythonhosted.org/packages/ab/a7/375afcc710dbe2d64cfbd69e31f82f3e423d43737258af01f6a56d844085/nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + ] + } + }, + "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_s390x_19aaba96": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "19aaba96e0f795bd0a6c56291495ff59364f4300d4a39b29a0abc9cb3774a84b", + "urls": [ + "https://files.pythonhosted.org/packages/c2/a8/3bb02d0c60a03ad3a112b76c46971e9480efa98a8946677b5a59f60130ca/nh3-0.2.18-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl" + ] + } + }, + "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_x86_64_de3ceed6": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "de3ceed6e661954871d6cd78b410213bdcb136f79aafe22aa7182e028b8c7307", + "urls": [ + "https://files.pythonhosted.org/packages/1b/63/6ab90d0e5225ab9780f6c9fb52254fa36b52bb7c188df9201d05b647e5e1/nh3-0.2.18-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_aarch64_f0eca9ca": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "nh3-0.2.18-cp37-abi3-musllinux_1_2_aarch64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "f0eca9ca8628dbb4e916ae2491d72957fdd35f7a5d326b7032a345f111ac07fe", + "urls": [ + "https://files.pythonhosted.org/packages/a3/da/0c4e282bc3cff4a0adf37005fa1fb42257673fbc1bbf7d1ff639ec3d255a/nh3-0.2.18-cp37-abi3-musllinux_1_2_aarch64.whl" + ] + } + }, + "rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_armv7l_3a157ab1": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "nh3-0.2.18-cp37-abi3-musllinux_1_2_armv7l.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "3a157ab149e591bb638a55c8c6bcb8cdb559c8b12c13a8affaba6cedfe51713a", + "urls": [ + "https://files.pythonhosted.org/packages/de/81/c291231463d21da5f8bba82c8167a6d6893cc5419b0639801ee5d3aeb8a9/nh3-0.2.18-cp37-abi3-musllinux_1_2_armv7l.whl" + ] + } + }, + "rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_x86_64_36c95d4b": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "nh3-0.2.18-cp37-abi3-musllinux_1_2_x86_64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "36c95d4b70530b320b365659bb5034341316e6a9b30f0b25fa9c9eff4c27a204", + "urls": [ + "https://files.pythonhosted.org/packages/eb/61/73a007c74c37895fdf66e0edcd881f5eaa17a348ff02f4bb4bc906d61085/nh3-0.2.18-cp37-abi3-musllinux_1_2_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_nh3_cp37_abi3_win_amd64_8ce0f819": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "nh3-0.2.18-cp37-abi3-win_amd64.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "8ce0f819d2f1933953fca255db2471ad58184a60508f03e6285e5114b6254844", + "urls": [ + "https://files.pythonhosted.org/packages/26/8d/53c5b19c4999bdc6ba95f246f4ef35ca83d7d7423e5e38be43ad66544e5d/nh3-0.2.18-cp37-abi3-win_amd64.whl" + ] + } + }, + "rules_python_publish_deps_311_nh3_sdist_94a16692": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "nh3-0.2.18.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "94a166927e53972a9698af9542ace4e38b9de50c34352b962f4d9a7d4c927af4", + "urls": [ + "https://files.pythonhosted.org/packages/62/73/10df50b42ddb547a907deeb2f3c9823022580a7a47281e8eae8e003a9639/nh3-0.2.18.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_pkginfo_py3_none_any_889a6da2": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "pkginfo-1.10.0-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "pkginfo==1.10.0", + "sha256": "889a6da2ed7ffc58ab5b900d888ddce90bce912f2d2de1dc1c26f4cb9fe65097", + "urls": [ + "https://files.pythonhosted.org/packages/56/09/054aea9b7534a15ad38a363a2bd974c20646ab1582a387a95b8df1bfea1c/pkginfo-1.10.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_pkginfo_sdist_5df73835": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "pkginfo-1.10.0.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "pkginfo==1.10.0", + "sha256": "5df73835398d10db79f8eecd5cd86b1f6d29317589ea70796994d49399af6297", + "urls": [ + "https://files.pythonhosted.org/packages/2f/72/347ec5be4adc85c182ed2823d8d1c7b51e13b9a6b0c1aae59582eca652df/pkginfo-1.10.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_pycparser_py3_none_any_c3702b6d": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "pycparser-2.22-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "pycparser==2.22", + "sha256": "c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", + "urls": [ + "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_pycparser_sdist_491c8be9": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "pycparser-2.22.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "pycparser==2.22", + "sha256": "491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", + "urls": [ + "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_pygments_py3_none_any_b8e6aca0": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "pygments-2.18.0-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "pygments==2.18.0", + "sha256": "b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a", + "urls": [ + "https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_pygments_sdist_786ff802": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "pygments-2.18.0.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "pygments==2.18.0", + "sha256": "786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199", + "urls": [ + "https://files.pythonhosted.org/packages/8e/62/8336eff65bcbc8e4cb5d05b55faf041285951b6e80f33e2bff2024788f31/pygments-2.18.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_pywin32_ctypes_py3_none_any_8a151337": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_windows_x86_64" + ], + "filename": "pywin32_ctypes-0.2.3-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "pywin32-ctypes==0.2.3", + "sha256": "8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8", + "urls": [ + "https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_pywin32_ctypes_sdist_d162dc04": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "pywin32-ctypes-0.2.3.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "pywin32-ctypes==0.2.3", + "sha256": "d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755", + "urls": [ + "https://files.pythonhosted.org/packages/85/9f/01a1a99704853cb63f253eea009390c88e7131c67e66a0a02099a8c917cb/pywin32-ctypes-0.2.3.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_readme_renderer_py3_none_any_2fbca89b": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "readme_renderer-44.0-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "readme-renderer==44.0", + "sha256": "2fbca89b81a08526aadf1357a8c2ae889ec05fb03f5da67f9769c9a592166151", + "urls": [ + "https://files.pythonhosted.org/packages/e1/67/921ec3024056483db83953ae8e48079ad62b92db7880013ca77632921dd0/readme_renderer-44.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_readme_renderer_sdist_8712034e": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "readme_renderer-44.0.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "readme-renderer==44.0", + "sha256": "8712034eabbfa6805cacf1402b4eeb2a73028f72d1166d6f5cb7f9c047c5d1e1", + "urls": [ + "https://files.pythonhosted.org/packages/5a/a9/104ec9234c8448c4379768221ea6df01260cd6c2ce13182d4eac531c8342/readme_renderer-44.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_requests_py3_none_any_70761cfe": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "requests-2.32.3-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "requests==2.32.3", + "sha256": "70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", + "urls": [ + "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_requests_sdist_55365417": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "requests-2.32.3.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "requests==2.32.3", + "sha256": "55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", + "urls": [ + "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_requests_toolbelt_py2_none_any_cccfdd66": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "requests_toolbelt-1.0.0-py2.py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "requests-toolbelt==1.0.0", + "sha256": "cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06", + "urls": [ + "https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_requests_toolbelt_sdist_7681a0a3": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "requests-toolbelt-1.0.0.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "requests-toolbelt==1.0.0", + "sha256": "7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6", + "urls": [ + "https://files.pythonhosted.org/packages/f3/61/d7545dafb7ac2230c70d38d31cbfe4cc64f7144dc41f6e4e4b78ecd9f5bb/requests-toolbelt-1.0.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_rfc3986_py2_none_any_50b1502b": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "rfc3986-2.0.0-py2.py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "rfc3986==2.0.0", + "sha256": "50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd", + "urls": [ + "https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_rfc3986_sdist_97aacf9d": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "rfc3986-2.0.0.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "rfc3986==2.0.0", + "sha256": "97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c", + "urls": [ + "https://files.pythonhosted.org/packages/85/40/1520d68bfa07ab5a6f065a186815fb6610c86fe957bc065754e47f7b0840/rfc3986-2.0.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_rich_py3_none_any_6049d5e6": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "rich-13.9.4-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "rich==13.9.4", + "sha256": "6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90", + "urls": [ + "https://files.pythonhosted.org/packages/19/71/39c7c0d87f8d4e6c020a393182060eaefeeae6c01dab6a84ec346f2567df/rich-13.9.4-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_rich_sdist_43959497": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "rich-13.9.4.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "rich==13.9.4", + "sha256": "439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098", + "urls": [ + "https://files.pythonhosted.org/packages/ab/3a/0316b28d0761c6734d6bc14e770d85506c986c85ffb239e688eeaab2c2bc/rich-13.9.4.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_secretstorage_py3_none_any_f356e662": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "SecretStorage-3.3.3-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "secretstorage==3.3.3", + "sha256": "f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99", + "urls": [ + "https://files.pythonhosted.org/packages/54/24/b4293291fa1dd830f353d2cb163295742fa87f179fcc8a20a306a81978b7/SecretStorage-3.3.3-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_secretstorage_sdist_2403533e": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "SecretStorage-3.3.3.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "secretstorage==3.3.3", + "sha256": "2403533ef369eca6d2ba81718576c5e0f564d5cca1b58f73a8b23e7d4eeebd77", + "urls": [ + "https://files.pythonhosted.org/packages/53/a4/f48c9d79cb507ed1373477dbceaba7401fd8a23af63b837fa61f1dcd3691/SecretStorage-3.3.3.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_twine_py3_none_any_215dbe7b": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "twine-5.1.1-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "twine==5.1.1", + "sha256": "215dbe7b4b94c2c50a7315c0275d2258399280fbb7d04182c7e55e24b5f93997", + "urls": [ + "https://files.pythonhosted.org/packages/5d/ec/00f9d5fd040ae29867355e559a94e9a8429225a0284a3f5f091a3878bfc0/twine-5.1.1-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_twine_sdist_9aa08251": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "twine-5.1.1.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "twine==5.1.1", + "sha256": "9aa0825139c02b3434d913545c7b847a21c835e11597f5255842d457da2322db", + "urls": [ + "https://files.pythonhosted.org/packages/77/68/bd982e5e949ef8334e6f7dcf76ae40922a8750aa2e347291ae1477a4782b/twine-5.1.1.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_urllib3_py3_none_any_ca899ca0": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "urllib3-2.2.3-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "urllib3==2.2.3", + "sha256": "ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac", + "urls": [ + "https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_urllib3_sdist_e7d814a8": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "urllib3-2.2.3.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "urllib3==2.2.3", + "sha256": "e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9", + "urls": [ + "https://files.pythonhosted.org/packages/ed/63/22ba4ebfe7430b76388e7cd448d5478814d3032121827c12a2cc287e2260/urllib3-2.2.3.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_zipp_py3_none_any_a817ac80": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "zipp-3.20.2-py3-none-any.whl", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "zipp==3.20.2", + "sha256": "a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350", + "urls": [ + "https://files.pythonhosted.org/packages/62/8b/5ba542fa83c90e09eac972fc9baca7a88e7e7ca4b221a89251954019308b/zipp-3.20.2-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_zipp_sdist_bc9eb26f": { + "repoRuleId": "@@rules_python+//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "zipp-3.20.2.tar.gz", + "python_interpreter_target": "@@rules_python++python+python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "zipp==3.20.2", + "sha256": "bc9eb26f4506fda01b81bcde0ca78103b6e62f991b381fec825435c836edbc29", + "urls": [ + "https://files.pythonhosted.org/packages/54/bf/5c0000c44ebc80123ecbdddba1f5dcd94a5ada602a9c225d84b5aaa55e86/zipp-3.20.2.tar.gz" + ] + } + }, + "grpc_python_dependencies": { + "repoRuleId": "@@rules_python+//python/private/pypi:hub_repository.bzl%hub_repository", + "attributes": { + "repo_name": "grpc_python_dependencies", + "extra_hub_aliases": {}, + "whl_map": { + "absl_py": "{\"grpc_python_dependencies_310_absl_py\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_absl_py\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_absl_py\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_absl_py\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_absl_py\":[{\"version\":\"3.9\"}]}", + "cachetools": "{\"grpc_python_dependencies_310_cachetools\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_cachetools\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_cachetools\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_cachetools\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_cachetools\":[{\"version\":\"3.9\"}]}", + "certifi": "{\"grpc_python_dependencies_310_certifi\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_certifi\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_certifi\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_certifi\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_certifi\":[{\"version\":\"3.9\"}]}", + "chardet": "{\"grpc_python_dependencies_310_chardet\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_chardet\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_chardet\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_chardet\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_chardet\":[{\"version\":\"3.9\"}]}", + "charset_normalizer": "{\"grpc_python_dependencies_310_charset_normalizer\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_charset_normalizer\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_charset_normalizer\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_charset_normalizer\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_charset_normalizer\":[{\"version\":\"3.9\"}]}", + "coverage": "{\"grpc_python_dependencies_310_coverage\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_coverage\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_coverage\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_coverage\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_coverage\":[{\"version\":\"3.9\"}]}", + "cython": "{\"grpc_python_dependencies_310_cython\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_cython\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_cython\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_cython\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_cython\":[{\"version\":\"3.9\"}]}", + "deprecated": "{\"grpc_python_dependencies_310_deprecated\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_deprecated\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_deprecated\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_deprecated\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_deprecated\":[{\"version\":\"3.9\"}]}", + "gevent": "{\"grpc_python_dependencies_310_gevent\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_gevent\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_gevent\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_gevent\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_gevent\":[{\"version\":\"3.9\"}]}", + "google_api_core": "{\"grpc_python_dependencies_310_google_api_core\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_google_api_core\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_google_api_core\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_google_api_core\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_google_api_core\":[{\"version\":\"3.9\"}]}", + "google_auth": "{\"grpc_python_dependencies_310_google_auth\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_google_auth\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_google_auth\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_google_auth\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_google_auth\":[{\"version\":\"3.9\"}]}", + "google_cloud_monitoring": "{\"grpc_python_dependencies_310_google_cloud_monitoring\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_google_cloud_monitoring\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_google_cloud_monitoring\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_google_cloud_monitoring\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_google_cloud_monitoring\":[{\"version\":\"3.9\"}]}", + "google_cloud_trace": "{\"grpc_python_dependencies_310_google_cloud_trace\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_google_cloud_trace\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_google_cloud_trace\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_google_cloud_trace\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_google_cloud_trace\":[{\"version\":\"3.9\"}]}", + "googleapis_common_protos": "{\"grpc_python_dependencies_310_googleapis_common_protos\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_googleapis_common_protos\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_googleapis_common_protos\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_googleapis_common_protos\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_googleapis_common_protos\":[{\"version\":\"3.9\"}]}", + "greenlet": "{\"grpc_python_dependencies_310_greenlet\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_greenlet\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_greenlet\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_greenlet\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_greenlet\":[{\"version\":\"3.9\"}]}", + "idna": "{\"grpc_python_dependencies_310_idna\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_idna\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_idna\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_idna\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_idna\":[{\"version\":\"3.9\"}]}", + "importlib_metadata": "{\"grpc_python_dependencies_310_importlib_metadata\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_importlib_metadata\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_importlib_metadata\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_importlib_metadata\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_importlib_metadata\":[{\"version\":\"3.9\"}]}", + "oauth2client": "{\"grpc_python_dependencies_310_oauth2client\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_oauth2client\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_oauth2client\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_oauth2client\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_oauth2client\":[{\"version\":\"3.9\"}]}", + "opencensus_context": "{\"grpc_python_dependencies_310_opencensus_context\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_opencensus_context\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_opencensus_context\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_opencensus_context\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_opencensus_context\":[{\"version\":\"3.9\"}]}", + "opentelemetry_api": "{\"grpc_python_dependencies_310_opentelemetry_api\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_opentelemetry_api\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_opentelemetry_api\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_opentelemetry_api\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_opentelemetry_api\":[{\"version\":\"3.9\"}]}", + "opentelemetry_exporter_prometheus": "{\"grpc_python_dependencies_310_opentelemetry_exporter_prometheus\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_opentelemetry_exporter_prometheus\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_opentelemetry_exporter_prometheus\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_opentelemetry_exporter_prometheus\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_opentelemetry_exporter_prometheus\":[{\"version\":\"3.9\"}]}", + "opentelemetry_resourcedetector_gcp": "{\"grpc_python_dependencies_310_opentelemetry_resourcedetector_gcp\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_opentelemetry_resourcedetector_gcp\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_opentelemetry_resourcedetector_gcp\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_opentelemetry_resourcedetector_gcp\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_opentelemetry_resourcedetector_gcp\":[{\"version\":\"3.9\"}]}", + "opentelemetry_sdk": "{\"grpc_python_dependencies_310_opentelemetry_sdk\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_opentelemetry_sdk\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_opentelemetry_sdk\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_opentelemetry_sdk\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_opentelemetry_sdk\":[{\"version\":\"3.9\"}]}", + "opentelemetry_semantic_conventions": "{\"grpc_python_dependencies_310_opentelemetry_semantic_conventions\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_opentelemetry_semantic_conventions\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_opentelemetry_semantic_conventions\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_opentelemetry_semantic_conventions\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_opentelemetry_semantic_conventions\":[{\"version\":\"3.9\"}]}", + "prometheus_client": "{\"grpc_python_dependencies_310_prometheus_client\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_prometheus_client\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_prometheus_client\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_prometheus_client\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_prometheus_client\":[{\"version\":\"3.9\"}]}", + "proto_plus": "{\"grpc_python_dependencies_310_proto_plus\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_proto_plus\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_proto_plus\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_proto_plus\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_proto_plus\":[{\"version\":\"3.9\"}]}", + "protobuf": "{\"grpc_python_dependencies_310_protobuf\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_protobuf\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_protobuf\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_protobuf\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_protobuf\":[{\"version\":\"3.9\"}]}", + "pyasn1": "{\"grpc_python_dependencies_310_pyasn1\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_pyasn1\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_pyasn1\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_pyasn1\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_pyasn1\":[{\"version\":\"3.9\"}]}", + "pyasn1_modules": "{\"grpc_python_dependencies_310_pyasn1_modules\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_pyasn1_modules\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_pyasn1_modules\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_pyasn1_modules\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_pyasn1_modules\":[{\"version\":\"3.9\"}]}", + "requests": "{\"grpc_python_dependencies_310_requests\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_requests\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_requests\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_requests\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_requests\":[{\"version\":\"3.9\"}]}", + "rsa": "{\"grpc_python_dependencies_310_rsa\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_rsa\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_rsa\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_rsa\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_rsa\":[{\"version\":\"3.9\"}]}", + "setuptools": "{\"grpc_python_dependencies_310_setuptools\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_setuptools\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_setuptools\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_setuptools\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_setuptools\":[{\"version\":\"3.9\"}]}", + "typing_extensions": "{\"grpc_python_dependencies_310_typing_extensions\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_typing_extensions\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_typing_extensions\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_typing_extensions\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_typing_extensions\":[{\"version\":\"3.9\"}]}", + "urllib3": "{\"grpc_python_dependencies_310_urllib3\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_urllib3\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_urllib3\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_urllib3\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_urllib3\":[{\"version\":\"3.9\"}]}", + "wheel": "{\"grpc_python_dependencies_310_wheel\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_wheel\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_wheel\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_wheel\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_wheel\":[{\"version\":\"3.9\"}]}", + "wrapt": "{\"grpc_python_dependencies_310_wrapt\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_wrapt\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_wrapt\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_wrapt\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_wrapt\":[{\"version\":\"3.9\"}]}", + "zipp": "{\"grpc_python_dependencies_310_zipp\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_zipp\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_zipp\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_zipp\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_zipp\":[{\"version\":\"3.9\"}]}", + "zope_event": "{\"grpc_python_dependencies_310_zope_event\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_zope_event\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_zope_event\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_zope_event\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_zope_event\":[{\"version\":\"3.9\"}]}", + "zope_interface": "{\"grpc_python_dependencies_310_zope_interface\":[{\"version\":\"3.10\"}],\"grpc_python_dependencies_311_zope_interface\":[{\"version\":\"3.11\"}],\"grpc_python_dependencies_312_zope_interface\":[{\"version\":\"3.12\"}],\"grpc_python_dependencies_313_zope_interface\":[{\"version\":\"3.13\"}],\"grpc_python_dependencies_39_zope_interface\":[{\"version\":\"3.9\"}]}" + }, + "packages": [ + "absl_py", + "cachetools", + "certifi", + "chardet", + "charset_normalizer", + "coverage", + "cython", + "deprecated", + "gevent", + "google_api_core", + "google_auth", + "google_cloud_monitoring", + "google_cloud_trace", + "googleapis_common_protos", + "greenlet", + "idna", + "importlib_metadata", + "oauth2client", + "opencensus_context", + "opentelemetry_api", + "opentelemetry_exporter_prometheus", + "opentelemetry_resourcedetector_gcp", + "opentelemetry_sdk", + "opentelemetry_semantic_conventions", + "prometheus_client", + "proto_plus", + "protobuf", + "pyasn1", + "pyasn1_modules", + "requests", + "rsa", + "setuptools", + "typing_extensions", + "urllib3", + "wheel", + "wrapt", + "zipp", + "zope_event", + "zope_interface" + ], + "groups": {} + } + }, + "pgv_pip_deps": { + "repoRuleId": "@@rules_python+//python/private/pypi:hub_repository.bzl%hub_repository", + "attributes": { + "repo_name": "pgv_pip_deps", + "extra_hub_aliases": {}, + "whl_map": { + "astunparse": "{\"pgv_pip_deps_310_astunparse\":[{\"version\":\"3.10\"}],\"pgv_pip_deps_311_astunparse\":[{\"version\":\"3.11\"}],\"pgv_pip_deps_312_astunparse\":[{\"version\":\"3.12\"}],\"pgv_pip_deps_313_astunparse\":[{\"version\":\"3.13\"}],\"pgv_pip_deps_39_astunparse\":[{\"version\":\"3.9\"}]}", + "jinja2": "{\"pgv_pip_deps_310_jinja2\":[{\"version\":\"3.10\"}],\"pgv_pip_deps_311_jinja2\":[{\"version\":\"3.11\"}],\"pgv_pip_deps_312_jinja2\":[{\"version\":\"3.12\"}],\"pgv_pip_deps_313_jinja2\":[{\"version\":\"3.13\"}],\"pgv_pip_deps_39_jinja2\":[{\"version\":\"3.9\"}]}", + "markupsafe": "{\"pgv_pip_deps_310_markupsafe\":[{\"version\":\"3.10\"}],\"pgv_pip_deps_311_markupsafe\":[{\"version\":\"3.11\"}],\"pgv_pip_deps_312_markupsafe\":[{\"version\":\"3.12\"}],\"pgv_pip_deps_313_markupsafe\":[{\"version\":\"3.13\"}],\"pgv_pip_deps_39_markupsafe\":[{\"version\":\"3.9\"}]}", + "protobuf": "{\"pgv_pip_deps_310_protobuf\":[{\"version\":\"3.10\"}],\"pgv_pip_deps_311_protobuf\":[{\"version\":\"3.11\"}],\"pgv_pip_deps_312_protobuf\":[{\"version\":\"3.12\"}],\"pgv_pip_deps_313_protobuf\":[{\"version\":\"3.13\"}],\"pgv_pip_deps_39_protobuf\":[{\"version\":\"3.9\"}]}", + "six": "{\"pgv_pip_deps_310_six\":[{\"version\":\"3.10\"}],\"pgv_pip_deps_311_six\":[{\"version\":\"3.11\"}],\"pgv_pip_deps_312_six\":[{\"version\":\"3.12\"}],\"pgv_pip_deps_313_six\":[{\"version\":\"3.13\"}],\"pgv_pip_deps_39_six\":[{\"version\":\"3.9\"}]}", + "validate_email": "{\"pgv_pip_deps_310_validate_email\":[{\"version\":\"3.10\"}],\"pgv_pip_deps_311_validate_email\":[{\"version\":\"3.11\"}],\"pgv_pip_deps_312_validate_email\":[{\"version\":\"3.12\"}],\"pgv_pip_deps_313_validate_email\":[{\"version\":\"3.13\"}],\"pgv_pip_deps_39_validate_email\":[{\"version\":\"3.9\"}]}", + "wheel": "{\"pgv_pip_deps_310_wheel\":[{\"version\":\"3.10\"}],\"pgv_pip_deps_311_wheel\":[{\"version\":\"3.11\"}],\"pgv_pip_deps_312_wheel\":[{\"version\":\"3.12\"}],\"pgv_pip_deps_313_wheel\":[{\"version\":\"3.13\"}],\"pgv_pip_deps_39_wheel\":[{\"version\":\"3.9\"}]}" + }, + "packages": [ + "astunparse", + "jinja2", + "markupsafe", + "protobuf", + "six", + "validate_email", + "wheel" + ], + "groups": {} + } + }, + "pip_deps": { + "repoRuleId": "@@rules_python+//python/private/pypi:hub_repository.bzl%hub_repository", + "attributes": { + "repo_name": "pip_deps", + "extra_hub_aliases": {}, + "whl_map": { + "numpy": "{\"pip_deps_310_numpy\":[{\"version\":\"3.10\"}],\"pip_deps_311_numpy\":[{\"version\":\"3.11\"}],\"pip_deps_312_numpy\":[{\"version\":\"3.12\"}],\"pip_deps_38_numpy\":[{\"version\":\"3.8\"}],\"pip_deps_39_numpy\":[{\"version\":\"3.9\"}]}", + "setuptools": "{\"pip_deps_310_setuptools\":[{\"version\":\"3.10\"}],\"pip_deps_311_setuptools\":[{\"version\":\"3.11\"}],\"pip_deps_312_setuptools\":[{\"version\":\"3.12\"}],\"pip_deps_38_setuptools\":[{\"version\":\"3.8\"}],\"pip_deps_39_setuptools\":[{\"version\":\"3.9\"}]}" + }, + "packages": [ + "numpy", + "setuptools" + ], + "groups": {} + } + }, + "pypi": { + "repoRuleId": "@@rules_python+//python/private/pypi:hub_repository.bzl%hub_repository", + "attributes": { + "repo_name": "pypi", + "extra_hub_aliases": {}, + "whl_map": { + "async_timeout": "{\"pypi_310_async_timeout\":[{\"version\":\"3.10\"}]}", + "beautifulsoup4": "{\"pypi_310_beautifulsoup4\":[{\"version\":\"3.10\"}]}", + "certifi": "{\"pypi_310_certifi\":[{\"version\":\"3.10\"}]}", + "charset_normalizer": "{\"pypi_310_charset_normalizer\":[{\"version\":\"3.10\"}]}", + "dnspython": "{\"pypi_310_dnspython\":[{\"version\":\"3.10\"}]}", + "google": "{\"pypi_310_google\":[{\"version\":\"3.10\"}]}", + "grpcio": "{\"pypi_310_grpcio\":[{\"version\":\"3.10\"}]}", + "hyperon_das_atomdb": "{\"pypi_310_hyperon_das_atomdb\":[{\"version\":\"3.10\"}]}", + "hyperon_das_atomdb_cpp": "{\"pypi_310_hyperon_das_atomdb_cpp\":[{\"version\":\"3.10\"}]}", + "idna": "{\"pypi_310_idna\":[{\"version\":\"3.10\"}]}", + "mongomock": "{\"pypi_310_mongomock\":[{\"version\":\"3.10\"}]}", + "packaging": "{\"pypi_310_packaging\":[{\"version\":\"3.10\"}]}", + "protobuf": "{\"pypi_310_protobuf\":[{\"version\":\"3.10\"}]}", + "pymongo": "{\"pypi_310_pymongo\":[{\"version\":\"3.10\"}]}", + "python_dotenv": "{\"pypi_310_python_dotenv\":[{\"version\":\"3.10\"}]}", + "pytz": "{\"pypi_310_pytz\":[{\"version\":\"3.10\"}]}", + "redis": "{\"pypi_310_redis\":[{\"version\":\"3.10\"}]}", + "requests": "{\"pypi_310_requests\":[{\"version\":\"3.10\"}]}", + "sentinels": "{\"pypi_310_sentinels\":[{\"version\":\"3.10\"}]}", + "setuptools": "{\"pypi_310_setuptools\":[{\"version\":\"3.10\"}]}", + "soupsieve": "{\"pypi_310_soupsieve\":[{\"version\":\"3.10\"}]}", + "urllib3": "{\"pypi_310_urllib3\":[{\"version\":\"3.10\"}]}" + }, + "packages": [ + "async_timeout", + "beautifulsoup4", + "certifi", + "charset_normalizer", + "dnspython", + "google", + "grpcio", + "hyperon_das_atomdb", + "hyperon_das_atomdb_cpp", + "idna", + "mongomock", + "packaging", + "protobuf", + "pymongo", + "python_dotenv", + "pytz", + "redis", + "requests", + "sentinels", + "setuptools", + "soupsieve", + "urllib3" + ], + "groups": {} + } + }, + "pypi_dev": { + "repoRuleId": "@@rules_python+//python/private/pypi:hub_repository.bzl%hub_repository", + "attributes": { + "repo_name": "pypi_dev", + "extra_hub_aliases": {}, + "whl_map": { + "exceptiongroup": "{\"pypi_dev_310_exceptiongroup\":[{\"version\":\"3.10\"}]}", + "iniconfig": "{\"pypi_dev_310_iniconfig\":[{\"version\":\"3.10\"}]}", + "mongomock": "{\"pypi_dev_310_mongomock\":[{\"version\":\"3.10\"}]}", + "packaging": "{\"pypi_dev_310_packaging\":[{\"version\":\"3.10\"}]}", + "pluggy": "{\"pypi_dev_310_pluggy\":[{\"version\":\"3.10\"}]}", + "pytest": "{\"pypi_dev_310_pytest\":[{\"version\":\"3.10\"}]}", + "pytz": "{\"pypi_dev_310_pytz\":[{\"version\":\"3.10\"}]}", + "sentinels": "{\"pypi_dev_310_sentinels\":[{\"version\":\"3.10\"}]}", + "tomli": "{\"pypi_dev_310_tomli\":[{\"version\":\"3.10\"}]}" + }, + "packages": [ + "exceptiongroup", + "iniconfig", + "mongomock", + "packaging", + "pluggy", + "pytest", + "pytz", + "sentinels", + "tomli" + ], + "groups": {} + } + }, + "rules_fuzzing_py_deps": { + "repoRuleId": "@@rules_python+//python/private/pypi:hub_repository.bzl%hub_repository", + "attributes": { + "repo_name": "rules_fuzzing_py_deps", + "extra_hub_aliases": {}, + "whl_map": { + "absl_py": "{\"rules_fuzzing_py_deps_310_absl_py\":[{\"version\":\"3.10\"}],\"rules_fuzzing_py_deps_311_absl_py\":[{\"version\":\"3.11\"}],\"rules_fuzzing_py_deps_312_absl_py\":[{\"version\":\"3.12\"}],\"rules_fuzzing_py_deps_38_absl_py\":[{\"version\":\"3.8\"}],\"rules_fuzzing_py_deps_39_absl_py\":[{\"version\":\"3.9\"}]}", + "six": "{\"rules_fuzzing_py_deps_310_six\":[{\"version\":\"3.10\"}],\"rules_fuzzing_py_deps_311_six\":[{\"version\":\"3.11\"}],\"rules_fuzzing_py_deps_312_six\":[{\"version\":\"3.12\"}],\"rules_fuzzing_py_deps_38_six\":[{\"version\":\"3.8\"}],\"rules_fuzzing_py_deps_39_six\":[{\"version\":\"3.9\"}]}" + }, + "packages": [ + "absl_py", + "six" + ], + "groups": {} + } + }, + "rules_python_publish_deps": { + "repoRuleId": "@@rules_python+//python/private/pypi:hub_repository.bzl%hub_repository", + "attributes": { + "repo_name": "rules_python_publish_deps", + "extra_hub_aliases": {}, + "whl_map": { + "backports_tarfile": "{\"rules_python_publish_deps_311_backports_tarfile_py3_none_any_77e284d7\":[{\"filename\":\"backports.tarfile-1.2.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_backports_tarfile_sdist_d75e02c2\":[{\"filename\":\"backports_tarfile-1.2.0.tar.gz\",\"version\":\"3.11\"}]}", + "certifi": "{\"rules_python_publish_deps_311_certifi_py3_none_any_922820b5\":[{\"filename\":\"certifi-2024.8.30-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_certifi_sdist_bec941d2\":[{\"filename\":\"certifi-2024.8.30.tar.gz\",\"version\":\"3.11\"}]}", + "cffi": "{\"rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_aarch64_a1ed2dd2\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_ppc64le_46bf4316\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_s390x_a24ed04c\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_x86_64_610faea7\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_cp311_cp311_musllinux_1_1_aarch64_a9b15d49\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_cp311_cp311_musllinux_1_1_x86_64_fc48c783\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_sdist_1c39c601\":[{\"filename\":\"cffi-1.17.1.tar.gz\",\"version\":\"3.11\"}]}", + "charset_normalizer": "{\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_10_9_universal2_0d99dd8f\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_10_9_x86_64_c57516e5\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_11_0_arm64_6dba5d19\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_aarch64_bf4475b8\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_ppc64le_ce031db0\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_s390x_8ff4e7cd\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_x86_64_3710a975\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_aarch64_47334db7\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_ppc64le_f1a2f519\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_s390x_63bc5c4a\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_x86_64_bcb4f8ea\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_win_amd64_cee4373f\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_py3_none_any_fe9f97fe\":[{\"filename\":\"charset_normalizer-3.4.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_sdist_223217c3\":[{\"filename\":\"charset_normalizer-3.4.0.tar.gz\",\"version\":\"3.11\"}]}", + "cryptography": "{\"rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_17_aarch64_846da004\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_17_x86_64_0f996e72\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_28_aarch64_f7b178f1\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_28_x86_64_c2e6fc39\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_cp39_abi3_musllinux_1_2_aarch64_e1be4655\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-musllinux_1_2_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_cp39_abi3_musllinux_1_2_x86_64_df6b6c6d\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-musllinux_1_2_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_sdist_315b9001\":[{\"filename\":\"cryptography-43.0.3.tar.gz\",\"version\":\"3.11\"}]}", + "docutils": "{\"rules_python_publish_deps_311_docutils_py3_none_any_dafca5b9\":[{\"filename\":\"docutils-0.21.2-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_docutils_sdist_3a6b1873\":[{\"filename\":\"docutils-0.21.2.tar.gz\",\"version\":\"3.11\"}]}", + "idna": "{\"rules_python_publish_deps_311_idna_py3_none_any_946d195a\":[{\"filename\":\"idna-3.10-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_idna_sdist_12f65c9b\":[{\"filename\":\"idna-3.10.tar.gz\",\"version\":\"3.11\"}]}", + "importlib_metadata": "{\"rules_python_publish_deps_311_importlib_metadata_py3_none_any_45e54197\":[{\"filename\":\"importlib_metadata-8.5.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_importlib_metadata_sdist_71522656\":[{\"filename\":\"importlib_metadata-8.5.0.tar.gz\",\"version\":\"3.11\"}]}", + "jaraco_classes": "{\"rules_python_publish_deps_311_jaraco_classes_py3_none_any_f662826b\":[{\"filename\":\"jaraco.classes-3.4.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_jaraco_classes_sdist_47a024b5\":[{\"filename\":\"jaraco.classes-3.4.0.tar.gz\",\"version\":\"3.11\"}]}", + "jaraco_context": "{\"rules_python_publish_deps_311_jaraco_context_py3_none_any_f797fc48\":[{\"filename\":\"jaraco.context-6.0.1-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_jaraco_context_sdist_9bae4ea5\":[{\"filename\":\"jaraco_context-6.0.1.tar.gz\",\"version\":\"3.11\"}]}", + "jaraco_functools": "{\"rules_python_publish_deps_311_jaraco_functools_py3_none_any_ad159f13\":[{\"filename\":\"jaraco.functools-4.1.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_jaraco_functools_sdist_70f7e0e2\":[{\"filename\":\"jaraco_functools-4.1.0.tar.gz\",\"version\":\"3.11\"}]}", + "jeepney": "{\"rules_python_publish_deps_311_jeepney_py3_none_any_c0a454ad\":[{\"filename\":\"jeepney-0.8.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_jeepney_sdist_5efe48d2\":[{\"filename\":\"jeepney-0.8.0.tar.gz\",\"version\":\"3.11\"}]}", + "keyring": "{\"rules_python_publish_deps_311_keyring_py3_none_any_5426f817\":[{\"filename\":\"keyring-25.4.1-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_keyring_sdist_b07ebc55\":[{\"filename\":\"keyring-25.4.1.tar.gz\",\"version\":\"3.11\"}]}", + "markdown_it_py": "{\"rules_python_publish_deps_311_markdown_it_py_py3_none_any_35521684\":[{\"filename\":\"markdown_it_py-3.0.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_markdown_it_py_sdist_e3f60a94\":[{\"filename\":\"markdown-it-py-3.0.0.tar.gz\",\"version\":\"3.11\"}]}", + "mdurl": "{\"rules_python_publish_deps_311_mdurl_py3_none_any_84008a41\":[{\"filename\":\"mdurl-0.1.2-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_mdurl_sdist_bb413d29\":[{\"filename\":\"mdurl-0.1.2.tar.gz\",\"version\":\"3.11\"}]}", + "more_itertools": "{\"rules_python_publish_deps_311_more_itertools_py3_none_any_037b0d32\":[{\"filename\":\"more_itertools-10.5.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_more_itertools_sdist_5482bfef\":[{\"filename\":\"more-itertools-10.5.0.tar.gz\",\"version\":\"3.11\"}]}", + "nh3": "{\"rules_python_publish_deps_311_nh3_cp37_abi3_macosx_10_12_x86_64_14c5a72e\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_macosx_10_12_x86_64_7b7c2a3c\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_aarch64_42c64511\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_armv7l_0411beb0\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_ppc64_5f36b271\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_ppc64le_34c03fa7\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_s390x_19aaba96\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_x86_64_de3ceed6\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_aarch64_f0eca9ca\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-musllinux_1_2_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_armv7l_3a157ab1\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-musllinux_1_2_armv7l.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_x86_64_36c95d4b\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-musllinux_1_2_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_win_amd64_8ce0f819\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-win_amd64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_sdist_94a16692\":[{\"filename\":\"nh3-0.2.18.tar.gz\",\"version\":\"3.11\"}]}", + "pkginfo": "{\"rules_python_publish_deps_311_pkginfo_py3_none_any_889a6da2\":[{\"filename\":\"pkginfo-1.10.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_pkginfo_sdist_5df73835\":[{\"filename\":\"pkginfo-1.10.0.tar.gz\",\"version\":\"3.11\"}]}", + "pycparser": "{\"rules_python_publish_deps_311_pycparser_py3_none_any_c3702b6d\":[{\"filename\":\"pycparser-2.22-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_pycparser_sdist_491c8be9\":[{\"filename\":\"pycparser-2.22.tar.gz\",\"version\":\"3.11\"}]}", + "pygments": "{\"rules_python_publish_deps_311_pygments_py3_none_any_b8e6aca0\":[{\"filename\":\"pygments-2.18.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_pygments_sdist_786ff802\":[{\"filename\":\"pygments-2.18.0.tar.gz\",\"version\":\"3.11\"}]}", + "pywin32_ctypes": "{\"rules_python_publish_deps_311_pywin32_ctypes_py3_none_any_8a151337\":[{\"filename\":\"pywin32_ctypes-0.2.3-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_pywin32_ctypes_sdist_d162dc04\":[{\"filename\":\"pywin32-ctypes-0.2.3.tar.gz\",\"version\":\"3.11\"}]}", + "readme_renderer": "{\"rules_python_publish_deps_311_readme_renderer_py3_none_any_2fbca89b\":[{\"filename\":\"readme_renderer-44.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_readme_renderer_sdist_8712034e\":[{\"filename\":\"readme_renderer-44.0.tar.gz\",\"version\":\"3.11\"}]}", + "requests": "{\"rules_python_publish_deps_311_requests_py3_none_any_70761cfe\":[{\"filename\":\"requests-2.32.3-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_requests_sdist_55365417\":[{\"filename\":\"requests-2.32.3.tar.gz\",\"version\":\"3.11\"}]}", + "requests_toolbelt": "{\"rules_python_publish_deps_311_requests_toolbelt_py2_none_any_cccfdd66\":[{\"filename\":\"requests_toolbelt-1.0.0-py2.py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_requests_toolbelt_sdist_7681a0a3\":[{\"filename\":\"requests-toolbelt-1.0.0.tar.gz\",\"version\":\"3.11\"}]}", + "rfc3986": "{\"rules_python_publish_deps_311_rfc3986_py2_none_any_50b1502b\":[{\"filename\":\"rfc3986-2.0.0-py2.py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_rfc3986_sdist_97aacf9d\":[{\"filename\":\"rfc3986-2.0.0.tar.gz\",\"version\":\"3.11\"}]}", + "rich": "{\"rules_python_publish_deps_311_rich_py3_none_any_6049d5e6\":[{\"filename\":\"rich-13.9.4-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_rich_sdist_43959497\":[{\"filename\":\"rich-13.9.4.tar.gz\",\"version\":\"3.11\"}]}", + "secretstorage": "{\"rules_python_publish_deps_311_secretstorage_py3_none_any_f356e662\":[{\"filename\":\"SecretStorage-3.3.3-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_secretstorage_sdist_2403533e\":[{\"filename\":\"SecretStorage-3.3.3.tar.gz\",\"version\":\"3.11\"}]}", + "twine": "{\"rules_python_publish_deps_311_twine_py3_none_any_215dbe7b\":[{\"filename\":\"twine-5.1.1-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_twine_sdist_9aa08251\":[{\"filename\":\"twine-5.1.1.tar.gz\",\"version\":\"3.11\"}]}", + "urllib3": "{\"rules_python_publish_deps_311_urllib3_py3_none_any_ca899ca0\":[{\"filename\":\"urllib3-2.2.3-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_urllib3_sdist_e7d814a8\":[{\"filename\":\"urllib3-2.2.3.tar.gz\",\"version\":\"3.11\"}]}", + "zipp": "{\"rules_python_publish_deps_311_zipp_py3_none_any_a817ac80\":[{\"filename\":\"zipp-3.20.2-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_zipp_sdist_bc9eb26f\":[{\"filename\":\"zipp-3.20.2.tar.gz\",\"version\":\"3.11\"}]}" + }, + "packages": [ + "backports_tarfile", + "certifi", + "charset_normalizer", + "docutils", + "idna", + "importlib_metadata", + "jaraco_classes", + "jaraco_context", + "jaraco_functools", + "keyring", + "markdown_it_py", + "mdurl", + "more_itertools", + "nh3", + "pkginfo", + "pygments", + "readme_renderer", + "requests", + "requests_toolbelt", + "rfc3986", + "rich", + "twine", + "urllib3", + "zipp" + ], + "groups": {} + } + } + }, + "moduleExtensionMetadata": { + "useAllRepos": "NO", + "reproducible": false + }, + "recordedRepoMappingEntries": [ + [ + "bazel_features+", + "bazel_features_globals", + "bazel_features++version_extension+bazel_features_globals" + ], + [ + "bazel_features+", + "bazel_features_version", + "bazel_features++version_extension+bazel_features_version" + ], + [ + "rules_python+", + "bazel_features", + "bazel_features+" + ], + [ + "rules_python+", + "bazel_skylib", + "bazel_skylib+" + ], + [ + "rules_python+", + "bazel_tools", + "bazel_tools" + ], + [ + "rules_python+", + "pypi__build", + "rules_python++internal_deps+pypi__build" + ], + [ + "rules_python+", + "pypi__click", + "rules_python++internal_deps+pypi__click" + ], + [ + "rules_python+", + "pypi__colorama", + "rules_python++internal_deps+pypi__colorama" + ], + [ + "rules_python+", + "pypi__importlib_metadata", + "rules_python++internal_deps+pypi__importlib_metadata" + ], + [ + "rules_python+", + "pypi__installer", + "rules_python++internal_deps+pypi__installer" + ], + [ + "rules_python+", + "pypi__more_itertools", + "rules_python++internal_deps+pypi__more_itertools" + ], + [ + "rules_python+", + "pypi__packaging", + "rules_python++internal_deps+pypi__packaging" + ], + [ + "rules_python+", + "pypi__pep517", + "rules_python++internal_deps+pypi__pep517" + ], + [ + "rules_python+", + "pypi__pip", + "rules_python++internal_deps+pypi__pip" + ], + [ + "rules_python+", + "pypi__pip_tools", + "rules_python++internal_deps+pypi__pip_tools" + ], + [ + "rules_python+", + "pypi__pyproject_hooks", + "rules_python++internal_deps+pypi__pyproject_hooks" + ], + [ + "rules_python+", + "pypi__setuptools", + "rules_python++internal_deps+pypi__setuptools" + ], + [ + "rules_python+", + "pypi__tomli", + "rules_python++internal_deps+pypi__tomli" + ], + [ + "rules_python+", + "pypi__wheel", + "rules_python++internal_deps+pypi__wheel" + ], + [ + "rules_python+", + "pypi__zipp", + "rules_python++internal_deps+pypi__zipp" + ], + [ + "rules_python+", + "pythons_hub", + "rules_python++python+pythons_hub" + ], + [ + "rules_python++python+pythons_hub", + "python_3_10_host", + "rules_python++python+python_3_10_host" + ], + [ + "rules_python++python+pythons_hub", + "python_3_11_host", + "rules_python++python+python_3_11_host" + ], + [ + "rules_python++python+pythons_hub", + "python_3_12_host", + "rules_python++python+python_3_12_host" + ], + [ + "rules_python++python+pythons_hub", + "python_3_13_host", + "rules_python++python+python_3_13_host" + ], + [ + "rules_python++python+pythons_hub", + "python_3_8_host", + "rules_python++python+python_3_8_host" + ], + [ + "rules_python++python+pythons_hub", + "python_3_9_host", + "rules_python++python+python_3_9_host" + ] + ] + } } } } From 611bf811c0bb5eb130ad7ef2a236c21783aa14d4 Mon Sep 17 00:00:00 2001 From: Pedro Costa Date: Wed, 19 Feb 2025 21:21:37 +0000 Subject: [PATCH 05/19] feature: add python linter and formatter within bazel --- src/.aspect/cli/config.yaml | 3 + src/.bazeliskrc | 2 + src/.ruff.toml | 0 src/BUILD | 23 + src/MODULE.bazel | 2 + src/MODULE.bazel.lock | 829 +++++++++++++++++++++++++++++++++++ src/scripts/bazel.sh | 4 + src/scripts/build.sh | 4 + src/tools/format/BUILD.bazel | 13 + src/tools/lint/BUILD | 0 src/tools/lint/linters.bzl | 12 + 11 files changed, 892 insertions(+) create mode 100644 src/.aspect/cli/config.yaml create mode 100644 src/.bazeliskrc create mode 100644 src/.ruff.toml create mode 100644 src/tools/format/BUILD.bazel create mode 100644 src/tools/lint/BUILD create mode 100644 src/tools/lint/linters.bzl diff --git a/src/.aspect/cli/config.yaml b/src/.aspect/cli/config.yaml new file mode 100644 index 0000000..642f7cc --- /dev/null +++ b/src/.aspect/cli/config.yaml @@ -0,0 +1,3 @@ +lint: + aspects: + - //tools/lint:linters.bzl%ruff diff --git a/src/.bazeliskrc b/src/.bazeliskrc new file mode 100644 index 0000000..9b9ec9c --- /dev/null +++ b/src/.bazeliskrc @@ -0,0 +1,2 @@ +BAZELISK_BASE_URL=https://github.com/aspect-build/aspect-cli/releases/download +USE_BAZEL_VERSION=aspect/2024.49.18 diff --git a/src/.ruff.toml b/src/.ruff.toml new file mode 100644 index 0000000..e69de29 diff --git a/src/BUILD b/src/BUILD index d9254e0..a2afac9 100644 --- a/src/BUILD +++ b/src/BUILD @@ -1,5 +1,28 @@ package(default_visibility = ["//visibility:public"]) +exports_files( + [ + ".ruff.toml", + ], + visibility = ["//visibility:public"], +) + +alias( + name = "format.check", + actual = "//tools/format:format.check" +) + +alias( + name = "format", + actual = "//tools/format" +) + +py_binary( + name = "cli", + srcs = ["cli.py"], +) + + cc_binary( name = "attention_broker_service", srcs = [], diff --git a/src/MODULE.bazel b/src/MODULE.bazel index 460f001..16ff9f1 100644 --- a/src/MODULE.bazel +++ b/src/MODULE.bazel @@ -16,6 +16,8 @@ Additionally, this file configures: module(name = "das") +# Bazel to run linters and formatters +bazel_dep(name = "aspect_rules_lint", version = "1.2.0") # C++ diff --git a/src/MODULE.bazel.lock b/src/MODULE.bazel.lock index 14eb628..e3f3c94 100644 --- a/src/MODULE.bazel.lock +++ b/src/MODULE.bazel.lock @@ -19,6 +19,18 @@ "https://bcr.bazel.build/modules/apple_support/1.15.1/MODULE.bazel": "a0556fefca0b1bb2de8567b8827518f94db6a6e7e7d632b4c48dc5f865bc7c85", "https://bcr.bazel.build/modules/apple_support/1.17.1/MODULE.bazel": "655c922ab1209978a94ef6ca7d9d43e940cd97d9c172fb55f94d91ac53f8610b", "https://bcr.bazel.build/modules/apple_support/1.17.1/source.json": "6b2b8c74d14e8d485528a938e44bdb72a5ba17632b9e14ef6e68a5ee96c8347f", + "https://bcr.bazel.build/modules/aspect_bazel_lib/1.31.2/MODULE.bazel": "7bee702b4862612f29333590f4b658a5832d433d6f8e4395f090e8f4e85d442f", + "https://bcr.bazel.build/modules/aspect_bazel_lib/1.38.0/MODULE.bazel": "6307fec451ba9962c1c969eb516ebfe1e46528f7fa92e1c9ac8646bef4cdaa3f", + "https://bcr.bazel.build/modules/aspect_bazel_lib/1.42.2/MODULE.bazel": "2e0d8ab25c57a14f56ace1c8e881b69050417ff91b2fb7718dc00d201f3c3478", + "https://bcr.bazel.build/modules/aspect_bazel_lib/2.7.7/MODULE.bazel": "491f8681205e31bb57892d67442ce448cda4f472a8e6b3dc062865e29a64f89c", + "https://bcr.bazel.build/modules/aspect_bazel_lib/2.7.7/source.json": "87f12b449cd1d27d3e83840a59a6966d557e7c3c5f19e7b2e0361da5edc6b397", + "https://bcr.bazel.build/modules/aspect_rules_js/1.33.1/MODULE.bazel": "db3e7f16e471cf6827059d03af7c21859e7a0d2bc65429a3a11f005d46fc501b", + "https://bcr.bazel.build/modules/aspect_rules_js/1.40.0/MODULE.bazel": "01a1014e95e6816b68ecee2584ae929c7d6a1b72e4333ab1ff2d2c6c30babdf1", + "https://bcr.bazel.build/modules/aspect_rules_js/1.40.0/source.json": "b6fd491369e9ef888fdef64b839023a2360caaea8eb370d2cfbfdd2a96721311", + "https://bcr.bazel.build/modules/aspect_rules_lint/0.12.0/MODULE.bazel": "e767c5dbfeb254ec03275a7701b5cfde2c4d2873676804bc7cb27ddff3728fed", + "https://bcr.bazel.build/modules/aspect_rules_lint/1.2.0/MODULE.bazel": "4a7f65caa2578065cb2264a45ef7a12e1f153a3b6fa2a0c80c5ba56e270d7252", + "https://bcr.bazel.build/modules/aspect_rules_lint/1.2.0/source.json": "8031f086c4ee4e7e6d55bd5b33d60822efc72c677cc908047cbc568db95985e8", + "https://bcr.bazel.build/modules/bazel_features/0.1.0/MODULE.bazel": "47011d645b0f949f42ee67f2e8775188a9cf4a0a1528aa2fa4952f2fd00906fd", "https://bcr.bazel.build/modules/bazel_features/1.1.0/MODULE.bazel": "cfd42ff3b815a5f39554d97182657f8c4b9719568eb7fded2b9135f084bf760b", "https://bcr.bazel.build/modules/bazel_features/1.1.1/MODULE.bazel": "27b8c79ef57efe08efccbd9dd6ef70d61b4798320b8d3c134fd571f78963dbcd", "https://bcr.bazel.build/modules/bazel_features/1.10.0/MODULE.bazel": "f75e8807570484a99be90abcd52b5e1f390362c258bcb73106f4544957a48101", @@ -27,6 +39,7 @@ "https://bcr.bazel.build/modules/bazel_features/1.17.0/MODULE.bazel": "039de32d21b816b47bd42c778e0454217e9c9caac4a3cf8e15c7231ee3ddee4d", "https://bcr.bazel.build/modules/bazel_features/1.18.0/MODULE.bazel": "1be0ae2557ab3a72a57aeb31b29be347bcdc5d2b1eb1e70f39e3851a7e97041a", "https://bcr.bazel.build/modules/bazel_features/1.19.0/MODULE.bazel": "59adcdf28230d220f0067b1f435b8537dd033bfff8db21335ef9217919c7fb58", + "https://bcr.bazel.build/modules/bazel_features/1.2.0/MODULE.bazel": "122b2b606622afbaa498913d54f52d9bcd2d19a5edd1bd6d6c5aa17441c4d5f9", "https://bcr.bazel.build/modules/bazel_features/1.21.0/MODULE.bazel": "675642261665d8eea09989aa3b8afb5c37627f1be178382c320d1b46afba5e3b", "https://bcr.bazel.build/modules/bazel_features/1.21.0/source.json": "3e8379efaaef53ce35b7b8ba419df829315a880cb0a030e5bb45c96d6d5ecb5f", "https://bcr.bazel.build/modules/bazel_features/1.3.0/MODULE.bazel": "cdcafe83ec318cda34e02948e81d790aab8df7a929cec6f6969f13a489ccecd9", @@ -51,6 +64,8 @@ "https://bcr.bazel.build/modules/boringssl/0.20240913.0/MODULE.bazel": "fcaa7503a5213290831a91ed1eb538551cf11ac0bc3a6ad92d0fef92c5bd25fb", "https://bcr.bazel.build/modules/boringssl/0.20241024.0/MODULE.bazel": "b540cff73d948cb79cb0bc108d7cef391d2098a25adabfda5043e4ef548dbc87", "https://bcr.bazel.build/modules/boringssl/0.20241024.0/source.json": "d843092e682b84188c043ac742965d7f96e04c846c7e338187e03238674909a9", + "https://bcr.bazel.build/modules/buildifier_prebuilt/6.1.2/MODULE.bazel": "2ef4962c8b0b6d8d21928a89190755619254459bc67f870dc0ccb9ba9952d444", + "https://bcr.bazel.build/modules/buildifier_prebuilt/6.1.2/source.json": "19fb45ed3f0d55cbff94e402c39512940833ae3a68f9cbfd9518a1926b609c7c", "https://bcr.bazel.build/modules/buildozer/7.1.2/MODULE.bazel": "2e8dd40ede9c454042645fd8d8d0cd1527966aa5c919de86661e62953cd73d84", "https://bcr.bazel.build/modules/buildozer/7.1.2/source.json": "c9028a501d2db85793a6996205c8de120944f50a0d570438fcae0457a5f9d1f8", "https://bcr.bazel.build/modules/c-ares/1.15.0/MODULE.bazel": "ba0a78360fdc83f02f437a9e7df0532ad1fbaa59b722f6e715c11effebaa0166", @@ -170,6 +185,8 @@ "https://bcr.bazel.build/modules/rules_apple/3.17.1/MODULE.bazel": "1f8f5b16da1861db86ad3f474354c292b664c92008950407e2391fa36d9aab32", "https://bcr.bazel.build/modules/rules_apple/3.17.1/source.json": "795b05da73beb218d6125277a300c295b8a546ab41a0d80beafadb733cb14310", "https://bcr.bazel.build/modules/rules_apple/3.5.1/MODULE.bazel": "3d1bbf65ad3692003d36d8a29eff54d4e5c1c5f4bfb60f79e28646a924d9101c", + "https://bcr.bazel.build/modules/rules_buf/0.1.1/MODULE.bazel": "6189aec18a4f7caff599ad41b851ab7645d4f1e114aa6431acf9b0666eb92162", + "https://bcr.bazel.build/modules/rules_buf/0.1.1/source.json": "021363d254f7438f3f10725355969c974bb2c67e0c28667782ade31a9cdb747f", "https://bcr.bazel.build/modules/rules_cc/0.0.1/MODULE.bazel": "cb2aa0747f84c6c3a78dad4e2049c154f08ab9d166b1273835a8174940365647", "https://bcr.bazel.build/modules/rules_cc/0.0.10/MODULE.bazel": "ec1705118f7eaedd6e118508d3d26deba2a4e76476ada7e0e3965211be012002", "https://bcr.bazel.build/modules/rules_cc/0.0.13/MODULE.bazel": "0e8529ed7b323dad0775ff924d2ae5af7640b23553dfcd4d34344c7e7a867191", @@ -233,12 +250,19 @@ "https://bcr.bazel.build/modules/rules_license/0.0.7/MODULE.bazel": "088fbeb0b6a419005b89cf93fe62d9517c0a2b8bb56af3244af65ecfe37e7d5d", "https://bcr.bazel.build/modules/rules_license/1.0.0/MODULE.bazel": "a7fda60eefdf3d8c827262ba499957e4df06f659330bbe6cdbdb975b768bb65c", "https://bcr.bazel.build/modules/rules_license/1.0.0/source.json": "a52c89e54cc311196e478f8382df91c15f7a2bfdf4c6cd0e2675cc2ff0b56efb", + "https://bcr.bazel.build/modules/rules_multirun/0.9.0/MODULE.bazel": "32d628ef586b5b23f67e55886b7bc38913ea4160420d66ae90521dda2ff37df0", + "https://bcr.bazel.build/modules/rules_multirun/0.9.0/source.json": "e882ba77962fa6c5fe68619e5c7d0374ec9a219fb8d03c42eadaf6d0243771bd", + "https://bcr.bazel.build/modules/rules_multitool/0.4.0/MODULE.bazel": "15517987d5c00c9e7faab41fbe22ee67a350b6eabcc1e08baded5c6d9025897f", + "https://bcr.bazel.build/modules/rules_multitool/0.4.0/source.json": "d73b450b7c6d9683e400d6cebc463fbc2b870cc5d8e2e75080d6278805aaab08", + "https://bcr.bazel.build/modules/rules_nodejs/5.8.2/MODULE.bazel": "6bc03c8f37f69401b888023bf511cb6ee4781433b0cb56236b2e55a21e3a026a", + "https://bcr.bazel.build/modules/rules_nodejs/5.8.2/source.json": "6e82cf5753d835ea18308200bc79b9c2e782efe2e2a4edc004a9162ca93382ca", "https://bcr.bazel.build/modules/rules_pkg/0.7.0/MODULE.bazel": "df99f03fc7934a4737122518bb87e667e62d780b610910f0447665a7e2be62dc", "https://bcr.bazel.build/modules/rules_pkg/1.0.1/MODULE.bazel": "5b1df97dbc29623bccdf2b0dcd0f5cb08e2f2c9050aab1092fd39a41e82686ff", "https://bcr.bazel.build/modules/rules_pkg/1.0.1/source.json": "bd82e5d7b9ce2d31e380dd9f50c111d678c3bdaca190cb76b0e1c71b05e1ba8a", "https://bcr.bazel.build/modules/rules_proto/4.0.0/MODULE.bazel": "a7a7b6ce9bee418c1a760b3d84f83a299ad6952f9903c67f19e4edd964894e06", "https://bcr.bazel.build/modules/rules_proto/5.3.0-21.7/MODULE.bazel": "e8dff86b0971688790ae75528fe1813f71809b5afd57facb44dad9e8eca631b7", "https://bcr.bazel.build/modules/rules_proto/6.0.0-rc1/MODULE.bazel": "1e5b502e2e1a9e825eef74476a5a1ee524a92297085015a052510b09a1a09483", + "https://bcr.bazel.build/modules/rules_proto/6.0.0-rc2/MODULE.bazel": "e17f94f8a347e2c808517b65d74988839d2d62daceb50073e44060193b785eb1", "https://bcr.bazel.build/modules/rules_proto/6.0.0/MODULE.bazel": "b531d7f09f58dce456cd61b4579ce8c86b38544da75184eadaf0a7cb7966453f", "https://bcr.bazel.build/modules/rules_proto/6.0.2/MODULE.bazel": "ce916b775a62b90b61888052a416ccdda405212b6aaeb39522f7dc53431a5e73", "https://bcr.bazel.build/modules/rules_proto/7.0.2/MODULE.bazel": "bf81793bd6d2ad89a37a40693e56c61b0ee30f7a7fdbaf3eabbf5f39de47dea2", @@ -249,6 +273,7 @@ "https://bcr.bazel.build/modules/rules_python/0.22.1/MODULE.bazel": "26114f0c0b5e93018c0c066d6673f1a2c3737c7e90af95eff30cfee38d0bbac7", "https://bcr.bazel.build/modules/rules_python/0.23.1/MODULE.bazel": "49ffccf0511cb8414de28321f5fcf2a31312b47c40cc21577144b7447f2bf300", "https://bcr.bazel.build/modules/rules_python/0.25.0/MODULE.bazel": "72f1506841c920a1afec76975b35312410eea3aa7b63267436bfb1dd91d2d382", + "https://bcr.bazel.build/modules/rules_python/0.27.1/MODULE.bazel": "65dc875cc1a06c30d5bbdba7ab021fd9e551a6579e408a3943a61303e2228a53", "https://bcr.bazel.build/modules/rules_python/0.28.0/MODULE.bazel": "cba2573d870babc976664a912539b320cbaa7114cd3e8f053c720171cde331ed", "https://bcr.bazel.build/modules/rules_python/0.29.0/MODULE.bazel": "2ac8cd70524b4b9ec49a0b8284c79e4cd86199296f82f6e0d5da3f783d660c82", "https://bcr.bazel.build/modules/rules_python/0.31.0/MODULE.bazel": "93a43dc47ee570e6ec9f5779b2e64c1476a6ce921c48cc9a1678a91dd5f8fd58", @@ -266,8 +291,10 @@ "https://bcr.bazel.build/modules/rules_swift/1.18.0/MODULE.bazel": "a6aba73625d0dc64c7b4a1e831549b6e375fbddb9d2dde9d80c9de6ec45b24c9", "https://bcr.bazel.build/modules/rules_swift/2.1.1/MODULE.bazel": "494900a80f944fc7aa61500c2073d9729dff0b764f0e89b824eb746959bc1046", "https://bcr.bazel.build/modules/rules_swift/2.1.1/source.json": "40fc69dfaac64deddbb75bd99cdac55f4427d9ca0afbe408576a65428427a186", + "https://bcr.bazel.build/modules/stardoc/0.5.0/MODULE.bazel": "f9f1f46ba8d9c3362648eea571c6f9100680efc44913618811b58cc9c02cd678", "https://bcr.bazel.build/modules/stardoc/0.5.1/MODULE.bazel": "1a05d92974d0c122f5ccf09291442580317cdd859f07a8655f1db9a60374f9f8", "https://bcr.bazel.build/modules/stardoc/0.5.3/MODULE.bazel": "c7f6948dae6999bf0db32c1858ae345f112cacf98f174c7a8bb707e41b974f1c", + "https://bcr.bazel.build/modules/stardoc/0.5.4/MODULE.bazel": "6569966df04610b8520957cb8e97cf2e9faac2c0309657c537ab51c16c18a2a4", "https://bcr.bazel.build/modules/stardoc/0.5.6/MODULE.bazel": "c43dabc564990eeab55e25ed61c07a1aadafe9ece96a4efabb3f8bf9063b71ef", "https://bcr.bazel.build/modules/stardoc/0.6.2/MODULE.bazel": "7060193196395f5dd668eda046ccbeacebfd98efc77fed418dbe2b82ffaa39fd", "https://bcr.bazel.build/modules/stardoc/0.7.0/MODULE.bazel": "05e3d6d30c099b6770e97da986c53bd31844d7f13d41412480ea265ac9e8079c", @@ -276,6 +303,8 @@ "https://bcr.bazel.build/modules/stardoc/0.7.2/source.json": "58b029e5e901d6802967754adf0a9056747e8176f017cfe3607c0851f4d42216", "https://bcr.bazel.build/modules/swift_argument_parser/1.3.1.1/MODULE.bazel": "5e463fbfba7b1701d957555ed45097d7f984211330106ccd1352c6e0af0dcf91", "https://bcr.bazel.build/modules/swift_argument_parser/1.3.1.1/source.json": "32bd87e5f4d7acc57c5b2ff7c325ae3061d5e242c0c4c214ae87e0f1c13e54cb", + "https://bcr.bazel.build/modules/toolchains_protoc/0.2.1/MODULE.bazel": "2f08433ff5e659069b3a1abfee2377d68f510f2de1da50678ed992c455b4ff91", + "https://bcr.bazel.build/modules/toolchains_protoc/0.2.1/source.json": "4ee6b007b62e1b9e493b00ccc60e61a258633f304b74813b6e7f7234927be94c", "https://bcr.bazel.build/modules/upb/0.0.0-20211020-160625a/MODULE.bazel": "6cced416be2dc5b9c05efd5b997049ba795e5e4e6fafbe1624f4587767638928", "https://bcr.bazel.build/modules/upb/0.0.0-20220923-a547704/MODULE.bazel": "7298990c00040a0e2f121f6c32544bab27d4452f80d9ce51349b1a28f3005c43", "https://bcr.bazel.build/modules/upb/0.0.0-20230516-61a97ef/MODULE.bazel": "c0df5e35ad55e264160417fd0875932ee3c9dda63d9fccace35ac62f45e1b6f9", @@ -324,6 +353,554 @@ ] } }, + "@@aspect_bazel_lib+//lib:extensions.bzl%toolchains": { + "general": { + "bzlTransitiveDigest": "K4T+rws7BXvHaN8LlVgJVDiNUotXshrjIU3oeUAhhqw=", + "usagesDigest": "W4Mi+ZzXTwLz6fnBG/tlLCL9H28ui8uzVk0kEoey/Uw=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "copy_directory_darwin_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:copy_directory_toolchain.bzl%copy_directory_platform_repo", + "attributes": { + "platform": "darwin_amd64" + } + }, + "copy_directory_darwin_arm64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:copy_directory_toolchain.bzl%copy_directory_platform_repo", + "attributes": { + "platform": "darwin_arm64" + } + }, + "copy_directory_freebsd_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:copy_directory_toolchain.bzl%copy_directory_platform_repo", + "attributes": { + "platform": "freebsd_amd64" + } + }, + "copy_directory_linux_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:copy_directory_toolchain.bzl%copy_directory_platform_repo", + "attributes": { + "platform": "linux_amd64" + } + }, + "copy_directory_linux_arm64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:copy_directory_toolchain.bzl%copy_directory_platform_repo", + "attributes": { + "platform": "linux_arm64" + } + }, + "copy_directory_windows_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:copy_directory_toolchain.bzl%copy_directory_platform_repo", + "attributes": { + "platform": "windows_amd64" + } + }, + "copy_directory_toolchains": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:copy_directory_toolchain.bzl%copy_directory_toolchains_repo", + "attributes": { + "user_repository_name": "copy_directory" + } + }, + "copy_to_directory_darwin_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:copy_to_directory_toolchain.bzl%copy_to_directory_platform_repo", + "attributes": { + "platform": "darwin_amd64" + } + }, + "copy_to_directory_darwin_arm64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:copy_to_directory_toolchain.bzl%copy_to_directory_platform_repo", + "attributes": { + "platform": "darwin_arm64" + } + }, + "copy_to_directory_freebsd_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:copy_to_directory_toolchain.bzl%copy_to_directory_platform_repo", + "attributes": { + "platform": "freebsd_amd64" + } + }, + "copy_to_directory_linux_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:copy_to_directory_toolchain.bzl%copy_to_directory_platform_repo", + "attributes": { + "platform": "linux_amd64" + } + }, + "copy_to_directory_linux_arm64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:copy_to_directory_toolchain.bzl%copy_to_directory_platform_repo", + "attributes": { + "platform": "linux_arm64" + } + }, + "copy_to_directory_windows_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:copy_to_directory_toolchain.bzl%copy_to_directory_platform_repo", + "attributes": { + "platform": "windows_amd64" + } + }, + "copy_to_directory_toolchains": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:copy_to_directory_toolchain.bzl%copy_to_directory_toolchains_repo", + "attributes": { + "user_repository_name": "copy_to_directory" + } + }, + "jq_darwin_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:jq_toolchain.bzl%jq_platform_repo", + "attributes": { + "platform": "darwin_amd64", + "version": "1.7" + } + }, + "jq_darwin_arm64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:jq_toolchain.bzl%jq_platform_repo", + "attributes": { + "platform": "darwin_arm64", + "version": "1.7" + } + }, + "jq_linux_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:jq_toolchain.bzl%jq_platform_repo", + "attributes": { + "platform": "linux_amd64", + "version": "1.7" + } + }, + "jq_linux_arm64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:jq_toolchain.bzl%jq_platform_repo", + "attributes": { + "platform": "linux_arm64", + "version": "1.7" + } + }, + "jq_windows_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:jq_toolchain.bzl%jq_platform_repo", + "attributes": { + "platform": "windows_amd64", + "version": "1.7" + } + }, + "jq": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:jq_toolchain.bzl%jq_host_alias_repo", + "attributes": {} + }, + "jq_toolchains": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:jq_toolchain.bzl%jq_toolchains_repo", + "attributes": { + "user_repository_name": "jq" + } + }, + "yq_darwin_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:yq_toolchain.bzl%yq_platform_repo", + "attributes": { + "platform": "darwin_amd64", + "version": "4.25.2" + } + }, + "yq_darwin_arm64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:yq_toolchain.bzl%yq_platform_repo", + "attributes": { + "platform": "darwin_arm64", + "version": "4.25.2" + } + }, + "yq_linux_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:yq_toolchain.bzl%yq_platform_repo", + "attributes": { + "platform": "linux_amd64", + "version": "4.25.2" + } + }, + "yq_linux_arm64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:yq_toolchain.bzl%yq_platform_repo", + "attributes": { + "platform": "linux_arm64", + "version": "4.25.2" + } + }, + "yq_linux_s390x": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:yq_toolchain.bzl%yq_platform_repo", + "attributes": { + "platform": "linux_s390x", + "version": "4.25.2" + } + }, + "yq_linux_ppc64le": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:yq_toolchain.bzl%yq_platform_repo", + "attributes": { + "platform": "linux_ppc64le", + "version": "4.25.2" + } + }, + "yq_windows_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:yq_toolchain.bzl%yq_platform_repo", + "attributes": { + "platform": "windows_amd64", + "version": "4.25.2" + } + }, + "yq": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:yq_toolchain.bzl%yq_host_alias_repo", + "attributes": {} + }, + "yq_toolchains": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:yq_toolchain.bzl%yq_toolchains_repo", + "attributes": { + "user_repository_name": "yq" + } + }, + "coreutils_darwin_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:coreutils_toolchain.bzl%coreutils_platform_repo", + "attributes": { + "platform": "darwin_amd64", + "version": "0.0.26" + } + }, + "coreutils_darwin_arm64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:coreutils_toolchain.bzl%coreutils_platform_repo", + "attributes": { + "platform": "darwin_arm64", + "version": "0.0.26" + } + }, + "coreutils_linux_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:coreutils_toolchain.bzl%coreutils_platform_repo", + "attributes": { + "platform": "linux_amd64", + "version": "0.0.26" + } + }, + "coreutils_linux_arm64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:coreutils_toolchain.bzl%coreutils_platform_repo", + "attributes": { + "platform": "linux_arm64", + "version": "0.0.26" + } + }, + "coreutils_windows_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:coreutils_toolchain.bzl%coreutils_platform_repo", + "attributes": { + "platform": "windows_amd64", + "version": "0.0.26" + } + }, + "coreutils_toolchains": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:coreutils_toolchain.bzl%coreutils_toolchains_repo", + "attributes": { + "user_repository_name": "coreutils" + } + }, + "bsd_tar_darwin_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:tar_toolchain.bzl%bsdtar_binary_repo", + "attributes": { + "platform": "darwin_amd64" + } + }, + "bsd_tar_darwin_arm64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:tar_toolchain.bzl%bsdtar_binary_repo", + "attributes": { + "platform": "darwin_arm64" + } + }, + "bsd_tar_linux_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:tar_toolchain.bzl%bsdtar_binary_repo", + "attributes": { + "platform": "linux_amd64" + } + }, + "bsd_tar_linux_arm64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:tar_toolchain.bzl%bsdtar_binary_repo", + "attributes": { + "platform": "linux_arm64" + } + }, + "bsd_tar_windows_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:tar_toolchain.bzl%bsdtar_binary_repo", + "attributes": { + "platform": "windows_amd64" + } + }, + "bsd_tar_toolchains": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:tar_toolchain.bzl%tar_toolchains_repo", + "attributes": { + "user_repository_name": "bsd_tar" + } + }, + "zstd_darwin_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:zstd_toolchain.bzl%zstd_binary_repo", + "attributes": { + "platform": "darwin_amd64" + } + }, + "zstd_darwin_arm64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:zstd_toolchain.bzl%zstd_binary_repo", + "attributes": { + "platform": "darwin_arm64" + } + }, + "zstd_linux_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:zstd_toolchain.bzl%zstd_binary_repo", + "attributes": { + "platform": "linux_amd64" + } + }, + "zstd_linux_arm64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:zstd_toolchain.bzl%zstd_binary_repo", + "attributes": { + "platform": "linux_arm64" + } + }, + "zstd_toolchains": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:zstd_toolchain.bzl%zstd_toolchains_repo", + "attributes": { + "user_repository_name": "zstd" + } + }, + "expand_template_darwin_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:expand_template_toolchain.bzl%expand_template_platform_repo", + "attributes": { + "platform": "darwin_amd64" + } + }, + "expand_template_darwin_arm64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:expand_template_toolchain.bzl%expand_template_platform_repo", + "attributes": { + "platform": "darwin_arm64" + } + }, + "expand_template_freebsd_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:expand_template_toolchain.bzl%expand_template_platform_repo", + "attributes": { + "platform": "freebsd_amd64" + } + }, + "expand_template_linux_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:expand_template_toolchain.bzl%expand_template_platform_repo", + "attributes": { + "platform": "linux_amd64" + } + }, + "expand_template_linux_arm64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:expand_template_toolchain.bzl%expand_template_platform_repo", + "attributes": { + "platform": "linux_arm64" + } + }, + "expand_template_windows_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:expand_template_toolchain.bzl%expand_template_platform_repo", + "attributes": { + "platform": "windows_amd64" + } + }, + "expand_template_toolchains": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:expand_template_toolchain.bzl%expand_template_toolchains_repo", + "attributes": { + "user_repository_name": "expand_template" + } + }, + "bats_support": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "sha256": "7815237aafeb42ddcc1b8c698fc5808026d33317d8701d5ec2396e9634e2918f", + "urls": [ + "https://github.com/bats-core/bats-support/archive/v0.3.0.tar.gz" + ], + "strip_prefix": "bats-support-0.3.0", + "build_file_content": "load(\"@aspect_bazel_lib//lib:copy_to_directory.bzl\", \"copy_to_directory\")\n\ncopy_to_directory(\n name = \"support\",\n hardlink = \"on\",\n srcs = glob([\n \"src/**\",\n \"load.bash\",\n ]),\n out = \"bats-support\",\n visibility = [\"//visibility:public\"]\n)\n" + } + }, + "bats_assert": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "sha256": "98ca3b685f8b8993e48ec057565e6e2abcc541034ed5b0e81f191505682037fd", + "urls": [ + "https://github.com/bats-core/bats-assert/archive/v2.1.0.tar.gz" + ], + "strip_prefix": "bats-assert-2.1.0", + "build_file_content": "load(\"@aspect_bazel_lib//lib:copy_to_directory.bzl\", \"copy_to_directory\")\n\ncopy_to_directory(\n name = \"assert\",\n hardlink = \"on\",\n srcs = glob([\n \"src/**\",\n \"load.bash\",\n ]),\n out = \"bats-assert\",\n visibility = [\"//visibility:public\"]\n)\n" + } + }, + "bats_file": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "sha256": "9b69043241f3af1c2d251f89b4fcafa5df3f05e97b89db18d7c9bdf5731bb27a", + "urls": [ + "https://github.com/bats-core/bats-file/archive/v0.4.0.tar.gz" + ], + "strip_prefix": "bats-file-0.4.0", + "build_file_content": "load(\"@aspect_bazel_lib//lib:copy_to_directory.bzl\", \"copy_to_directory\")\n\ncopy_to_directory(\n name = \"file\",\n hardlink = \"on\",\n srcs = glob([\n \"src/**\",\n \"load.bash\",\n ]),\n out = \"bats-file\",\n visibility = [\"//visibility:public\"]\n)\n" + } + }, + "bats_toolchains": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "sha256": "a1a9f7875aa4b6a9480ca384d5865f1ccf1b0b1faead6b47aa47d79709a5c5fd", + "urls": [ + "https://github.com/bats-core/bats-core/archive/v1.10.0.tar.gz" + ], + "strip_prefix": "bats-core-1.10.0", + "build_file_content": "load(\"@local_config_platform//:constraints.bzl\", \"HOST_CONSTRAINTS\")\nload(\"@aspect_bazel_lib//lib/private:bats_toolchain.bzl\", \"bats_toolchain\")\nload(\"@aspect_bazel_lib//lib:copy_to_directory.bzl\", \"copy_to_directory\")\n\ncopy_to_directory(\n name = \"core\",\n hardlink = \"on\",\n srcs = glob([\n \"lib/**\",\n \"libexec/**\"\n ]) + [\"bin/bats\"],\n out = \"bats-core\",\n)\n\nbats_toolchain(\n name = \"toolchain\",\n core = \":core\",\n libraries = [\"@bats_support//:support\", \"@bats_assert//:assert\", \"@bats_file//:file\"]\n)\n\ntoolchain(\n name = \"bats_toolchain\",\n exec_compatible_with = HOST_CONSTRAINTS,\n toolchain = \":toolchain\",\n toolchain_type = \"@aspect_bazel_lib//lib:bats_toolchain_type\",\n)\n" + } + } + }, + "recordedRepoMappingEntries": [ + [ + "aspect_bazel_lib+", + "aspect_bazel_lib", + "aspect_bazel_lib+" + ], + [ + "aspect_bazel_lib+", + "bazel_skylib", + "bazel_skylib+" + ], + [ + "aspect_bazel_lib+", + "bazel_tools", + "bazel_tools" + ] + ] + } + }, + "@@buildifier_prebuilt+//:defs.bzl%buildifier_prebuilt_deps_extension": { + "general": { + "bzlTransitiveDigest": "BQ67MS38sDZxeQEfUs4vghLhs3+m4IXU/i7XC50fl9s=", + "usagesDigest": "JCqhJg+TeFVLBlrKVGI0Npi9RChNqkZQAh9TYfbAobs=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "buildifier_darwin_amd64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v6.1.2/buildifier-darwin-amd64" + ], + "downloaded_file_path": "buildifier", + "executable": true, + "sha256": "e2f4a67691c5f55634fbfb3850eb97dd91be0edd059d947b6c83d120682e0216" + } + }, + "buildifier_darwin_arm64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v6.1.2/buildifier-darwin-arm64" + ], + "downloaded_file_path": "buildifier", + "executable": true, + "sha256": "7549b5f535219ac957aa2a6069d46fbfc9ea3f74abd85fd3d460af4b1a2099a6" + } + }, + "buildifier_linux_amd64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v6.1.2/buildifier-linux-amd64" + ], + "downloaded_file_path": "buildifier", + "executable": true, + "sha256": "51bc947dabb7b14ec6fb1224464fbcf7a7cb138f1a10a3b328f00835f72852ce" + } + }, + "buildifier_linux_arm64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v6.1.2/buildifier-linux-arm64" + ], + "downloaded_file_path": "buildifier", + "executable": true, + "sha256": "0ba6e8e3208b5a029164e542ddb5509e618f87b639ffe8cc2f54770022853080" + } + }, + "buildifier_windows_amd64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v6.1.2/buildifier-windows-amd64.exe" + ], + "downloaded_file_path": "buildifier.exe", + "executable": true, + "sha256": "92bdd284fbc6766fc3e300b434ff9e68ac4d76a06cb29d1bdefe79a102a8d135" + } + }, + "buildozer_darwin_amd64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v6.1.2/buildozer-darwin-amd64" + ], + "downloaded_file_path": "buildozer", + "executable": true, + "sha256": "4014751a4cc5e91a7dc4b64be7b30c565bd9014ae6d1879818dc624562a1d431" + } + }, + "buildozer_darwin_arm64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v6.1.2/buildozer-darwin-arm64" + ], + "downloaded_file_path": "buildozer", + "executable": true, + "sha256": "e78bd5357f2356067d4b0d49ec4e4143dd9b1308746afc6ff11b55b952f462d7" + } + }, + "buildozer_linux_amd64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v6.1.2/buildozer-linux-amd64" + ], + "downloaded_file_path": "buildozer", + "executable": true, + "sha256": "2aef0f1ef80a0140b8fe6e6a8eb822e14827d8855bfc6681532c7530339ea23b" + } + }, + "buildozer_linux_arm64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v6.1.2/buildozer-linux-arm64" + ], + "downloaded_file_path": "buildozer", + "executable": true, + "sha256": "586e27630cbc242e8bd6fe8e24485eca8dcadea6410cc13cbe059202655980ac" + } + }, + "buildozer_windows_amd64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v6.1.2/buildozer-windows-amd64.exe" + ], + "downloaded_file_path": "buildozer.exe", + "executable": true, + "sha256": "07664d5d08ee099f069cd654070cabf2708efaae9f52dc83921fa400c67a868b" + } + }, + "buildifier_prebuilt_toolchains": { + "repoRuleId": "@@buildifier_prebuilt+//:defs.bzl%_buildifier_toolchain_setup", + "attributes": { + "assets_json": "[{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"darwin\",\"sha256\":\"e2f4a67691c5f55634fbfb3850eb97dd91be0edd059d947b6c83d120682e0216\",\"version\":\"v6.1.2\"},{\"arch\":\"arm64\",\"name\":\"buildifier\",\"platform\":\"darwin\",\"sha256\":\"7549b5f535219ac957aa2a6069d46fbfc9ea3f74abd85fd3d460af4b1a2099a6\",\"version\":\"v6.1.2\"},{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"linux\",\"sha256\":\"51bc947dabb7b14ec6fb1224464fbcf7a7cb138f1a10a3b328f00835f72852ce\",\"version\":\"v6.1.2\"},{\"arch\":\"arm64\",\"name\":\"buildifier\",\"platform\":\"linux\",\"sha256\":\"0ba6e8e3208b5a029164e542ddb5509e618f87b639ffe8cc2f54770022853080\",\"version\":\"v6.1.2\"},{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"windows\",\"sha256\":\"92bdd284fbc6766fc3e300b434ff9e68ac4d76a06cb29d1bdefe79a102a8d135\",\"version\":\"v6.1.2\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"darwin\",\"sha256\":\"4014751a4cc5e91a7dc4b64be7b30c565bd9014ae6d1879818dc624562a1d431\",\"version\":\"v6.1.2\"},{\"arch\":\"arm64\",\"name\":\"buildozer\",\"platform\":\"darwin\",\"sha256\":\"e78bd5357f2356067d4b0d49ec4e4143dd9b1308746afc6ff11b55b952f462d7\",\"version\":\"v6.1.2\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"linux\",\"sha256\":\"2aef0f1ef80a0140b8fe6e6a8eb822e14827d8855bfc6681532c7530339ea23b\",\"version\":\"v6.1.2\"},{\"arch\":\"arm64\",\"name\":\"buildozer\",\"platform\":\"linux\",\"sha256\":\"586e27630cbc242e8bd6fe8e24485eca8dcadea6410cc13cbe059202655980ac\",\"version\":\"v6.1.2\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"windows\",\"sha256\":\"07664d5d08ee099f069cd654070cabf2708efaae9f52dc83921fa400c67a868b\",\"version\":\"v6.1.2\"}]" + } + } + }, + "recordedRepoMappingEntries": [ + [ + "buildifier_prebuilt+", + "bazel_skylib", + "bazel_skylib+" + ], + [ + "buildifier_prebuilt+", + "bazel_tools", + "bazel_tools" + ] + ] + } + }, "@@googleapis+//:extensions.bzl%switched_rules": { "general": { "bzlTransitiveDigest": "vG6fuTzXD8MMvHWZEQud0MMH7eoC4GXY0va7VrFFh04=", @@ -558,6 +1135,30 @@ "recordedRepoMappingEntries": [] } }, + "@@rules_buf+//buf:extensions.bzl%ext": { + "general": { + "bzlTransitiveDigest": "3jGepUu1j86kWsTP3Fgogw/XfktHd4UIQt8zj494n/Y=", + "usagesDigest": "RTc2BMQ2b0wGU8CRvN3EoPz34m3LMe+K/oSkFkN83+M=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "rules_buf_toolchains": { + "repoRuleId": "@@rules_buf+//buf/internal:toolchain.bzl%buf_download_releases", + "attributes": { + "version": "v1.27.0" + } + } + }, + "recordedRepoMappingEntries": [ + [ + "rules_buf+", + "bazel_tools", + "bazel_tools" + ] + ] + } + }, "@@rules_foreign_cc+//foreign_cc:extensions.bzl%tools": { "general": { "bzlTransitiveDigest": "FApcIcVN43WOEs7g8eg7Cy1hrfRbVNEoUu8IiF+8WOc=", @@ -958,6 +1559,161 @@ ] } }, + "@@rules_multitool+//multitool:extension.bzl%multitool": { + "general": { + "bzlTransitiveDigest": "AtvPzG/SAawYMKVVHcMoJq4EXkVPTIhS3AeNwENXp9E=", + "usagesDigest": "e8LhmhBwk31LQl101CsIrkGyTSXLKajJj61scb7SRLY=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "multitool.linux_arm64": { + "repoRuleId": "@@rules_multitool+//multitool/private:multitool.bzl%_env_specific_tools", + "attributes": { + "lockfiles": [ + "@@aspect_rules_lint+//format:multitool.lock.json", + "@@aspect_rules_lint+//lint:multitool.lock.json" + ], + "os": "linux", + "cpu": "arm64" + } + }, + "multitool.linux_x86_64": { + "repoRuleId": "@@rules_multitool+//multitool/private:multitool.bzl%_env_specific_tools", + "attributes": { + "lockfiles": [ + "@@aspect_rules_lint+//format:multitool.lock.json", + "@@aspect_rules_lint+//lint:multitool.lock.json" + ], + "os": "linux", + "cpu": "x86_64" + } + }, + "multitool.macos_arm64": { + "repoRuleId": "@@rules_multitool+//multitool/private:multitool.bzl%_env_specific_tools", + "attributes": { + "lockfiles": [ + "@@aspect_rules_lint+//format:multitool.lock.json", + "@@aspect_rules_lint+//lint:multitool.lock.json" + ], + "os": "macos", + "cpu": "arm64" + } + }, + "multitool.macos_x86_64": { + "repoRuleId": "@@rules_multitool+//multitool/private:multitool.bzl%_env_specific_tools", + "attributes": { + "lockfiles": [ + "@@aspect_rules_lint+//format:multitool.lock.json", + "@@aspect_rules_lint+//lint:multitool.lock.json" + ], + "os": "macos", + "cpu": "x86_64" + } + }, + "multitool": { + "repoRuleId": "@@rules_multitool+//multitool/private:multitool.bzl%_multitool_hub", + "attributes": { + "lockfiles": [ + "@@aspect_rules_lint+//format:multitool.lock.json", + "@@aspect_rules_lint+//lint:multitool.lock.json" + ] + } + } + }, + "recordedRepoMappingEntries": [] + } + }, + "@@rules_nodejs+//nodejs:extensions.bzl%node": { + "general": { + "bzlTransitiveDigest": "btnelILPo3ngQN9vWtsQMclvJZPf3X2vcGTjmW7Owy8=", + "usagesDigest": "8OoyQ05AfTDe1T/jKkylUFidWxQge7e3HN2eOIIA6xM=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "nodejs_linux_amd64": { + "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%node_repositories", + "attributes": { + "platform": "linux_amd64", + "node_version": "16.19.0" + } + }, + "nodejs_linux_arm64": { + "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%node_repositories", + "attributes": { + "platform": "linux_arm64", + "node_version": "16.19.0" + } + }, + "nodejs_linux_s390x": { + "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%node_repositories", + "attributes": { + "platform": "linux_s390x", + "node_version": "16.19.0" + } + }, + "nodejs_linux_ppc64le": { + "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%node_repositories", + "attributes": { + "platform": "linux_ppc64le", + "node_version": "16.19.0" + } + }, + "nodejs_darwin_amd64": { + "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%node_repositories", + "attributes": { + "platform": "darwin_amd64", + "node_version": "16.19.0" + } + }, + "nodejs_darwin_arm64": { + "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%node_repositories", + "attributes": { + "platform": "darwin_arm64", + "node_version": "16.19.0" + } + }, + "nodejs_windows_amd64": { + "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%node_repositories", + "attributes": { + "platform": "windows_amd64", + "node_version": "16.19.0" + } + }, + "nodejs": { + "repoRuleId": "@@rules_nodejs+//nodejs/private:nodejs_repo_host_os_alias.bzl%nodejs_repo_host_os_alias", + "attributes": { + "user_node_repository_name": "nodejs" + } + }, + "nodejs_host": { + "repoRuleId": "@@rules_nodejs+//nodejs/private:nodejs_repo_host_os_alias.bzl%nodejs_repo_host_os_alias", + "attributes": { + "user_node_repository_name": "nodejs" + } + }, + "nodejs_toolchains": { + "repoRuleId": "@@rules_nodejs+//nodejs/private:toolchains_repo.bzl%toolchains_repo", + "attributes": { + "user_node_repository_name": "nodejs" + } + } + }, + "recordedRepoMappingEntries": [ + [ + "rules_nodejs+", + "bazel_skylib", + "bazel_skylib+" + ], + [ + "rules_nodejs+", + "bazel_tools", + "bazel_tools" + ] + ] + } + }, "@@rules_python+//python/extensions:pip.bzl%pip": { "general": { "bzlTransitiveDigest": "Zx6phrxzOJPzNT1TtUMPWUJiDB7sNn8TqEmUFD3Wc2Q=", @@ -6259,6 +7015,79 @@ ] ] } + }, + "@@toolchains_protoc+//protoc:extensions.bzl%protoc": { + "general": { + "bzlTransitiveDigest": "HnmcD4ia7/1ZuQnymt4OGHXrW62MmIgwCtHByGQ7LQs=", + "usagesDigest": "8nmQyO6LoaF/+HM3ni78Za6MQ5BVffJheAFJgl6hvoY=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "toolchains_protoc_hub.linux_aarch_64": { + "repoRuleId": "@@toolchains_protoc+//protoc/private:prebuilt_protoc_toolchain.bzl%prebuilt_protoc_repo", + "attributes": { + "platform": "linux-aarch_64", + "version": "v25.3" + } + }, + "toolchains_protoc_hub.linux_ppcle_64": { + "repoRuleId": "@@toolchains_protoc+//protoc/private:prebuilt_protoc_toolchain.bzl%prebuilt_protoc_repo", + "attributes": { + "platform": "linux-ppcle_64", + "version": "v25.3" + } + }, + "toolchains_protoc_hub.linux_s390_64": { + "repoRuleId": "@@toolchains_protoc+//protoc/private:prebuilt_protoc_toolchain.bzl%prebuilt_protoc_repo", + "attributes": { + "platform": "linux-s390_64", + "version": "v25.3" + } + }, + "toolchains_protoc_hub.linux_x86_64": { + "repoRuleId": "@@toolchains_protoc+//protoc/private:prebuilt_protoc_toolchain.bzl%prebuilt_protoc_repo", + "attributes": { + "platform": "linux-x86_64", + "version": "v25.3" + } + }, + "toolchains_protoc_hub.osx_aarch_64": { + "repoRuleId": "@@toolchains_protoc+//protoc/private:prebuilt_protoc_toolchain.bzl%prebuilt_protoc_repo", + "attributes": { + "platform": "osx-aarch_64", + "version": "v25.3" + } + }, + "toolchains_protoc_hub.osx_x86_64": { + "repoRuleId": "@@toolchains_protoc+//protoc/private:prebuilt_protoc_toolchain.bzl%prebuilt_protoc_repo", + "attributes": { + "platform": "osx-x86_64", + "version": "v25.3" + } + }, + "toolchains_protoc_hub.win64": { + "repoRuleId": "@@toolchains_protoc+//protoc/private:prebuilt_protoc_toolchain.bzl%prebuilt_protoc_repo", + "attributes": { + "platform": "win64", + "version": "v25.3" + } + }, + "toolchains_protoc_hub": { + "repoRuleId": "@@toolchains_protoc+//protoc/private:protoc_toolchains.bzl%protoc_toolchains_repo", + "attributes": { + "user_repository_name": "toolchains_protoc_hub" + } + }, + "com_google_protobuf": { + "repoRuleId": "@@toolchains_protoc+//protoc:toolchain.bzl%_google_protobuf_alias_repo", + "attributes": { + "alias_to": "toolchains_protoc_hub.osx_aarch_64" + } + } + }, + "recordedRepoMappingEntries": [] + } } } } diff --git a/src/scripts/bazel.sh b/src/scripts/bazel.sh index de571c3..900e9d7 100755 --- a/src/scripts/bazel.sh +++ b/src/scripts/bazel.sh @@ -9,12 +9,14 @@ BAZEL_CMD="/opt/bazel/bazelisk" # local paths LOCAL_WORKDIR=$(pwd) LOCAL_BIN_DIR=$LOCAL_WORKDIR/src/bin +LOCAL_ASPECT_CACHE="$HOME/.cache/das/aspect" LOCAL_BAZEL_CACHE="$HOME/.cache/das/bazel" LOCAL_BAZELISK_CACHE="$HOME/.cache/das/bazelisk" LOCAL_PIPTOOLS_CACHE="$HOME/.cache/das/pip-tools" LOCAL_PIP_CACHE="$HOME/.cache/das/pip" mkdir -p \ + "$LOCAL_ASPECT_CACHE" \ "$LOCAL_BIN_DIR" \ "$LOCAL_BAZEL_CACHE" \ "$LOCAL_BAZELISK_CACHE" \ @@ -25,6 +27,7 @@ mkdir -p \ CONTAINER_WORKDIR=/opt/das CONTAINER_WORKSPACE_DIR=/opt/das/src CONTAINER_BIN_DIR=$CONTAINER_WORKSPACE_DIR/bin +CONTAINER_ASPECT_CACHE=/home/"${USER}"/.cache/aspect CONTAINER_BAZEL_CACHE=/home/"${USER}"/.cache/bazel CONTAINER_PIP_CACHE=/home/"${USER}"/.cache/pip CONTAINER_PIPTOOLS_CACHE=/home/"${USER}"/.cache/pip-tools @@ -38,6 +41,7 @@ docker run --rm \ --volume /etc/passwd:/etc/passwd:ro \ --volume "$LOCAL_PIP_CACHE":"$CONTAINER_PIP_CACHE" \ --volume "$LOCAL_PIPTOOLS_CACHE":"$CONTAINER_PIPTOOLS_CACHE" \ + --volume "$LOCAL_ASPECT_CACHE":"$CONTAINER_ASPECT_CACHE" \ --volume "$LOCAL_BAZEL_CACHE":"$CONTAINER_BAZEL_CACHE" \ --volume "$LOCAL_BAZELISK_CACHE":"$CONTAINER_BAZELISK_CACHE" \ --volume "$LOCAL_WORKDIR":"$CONTAINER_WORKDIR" \ diff --git a/src/scripts/build.sh b/src/scripts/build.sh index 1987c50..42d1e2e 100755 --- a/src/scripts/build.sh +++ b/src/scripts/build.sh @@ -8,11 +8,13 @@ CONTAINER_NAME=${IMAGE_NAME}-container # local paths LOCAL_WORKDIR=$(pwd) LOCAL_BIN_DIR=$LOCAL_WORKDIR/src/bin +LOCAL_ASPECT_CACHE="$HOME/.cache/das/aspect" LOCAL_BAZEL_CACHE="$HOME/.cache/das/bazel" LOCAL_BAZELISK_CACHE="$HOME/.cache/das/bazelisk" LOCAL_PIPTOOLS_CACHE="$HOME/.cache/das/pip-tools" LOCAL_PIP_CACHE="$HOME/.cache/das/pip" mkdir -p \ + $LOCAL_ASPECT_CACHE \ $LOCAL_BAZEL_CACHE \ $LOCAL_BAZELISK_CACHE \ $LOCAL_BIN_DIR \ @@ -23,6 +25,7 @@ mkdir -p \ CONTAINER_WORKDIR=/opt/das CONTAINER_WORKSPACE_DIR=/opt/das/src CONTAINER_BIN_DIR=$CONTAINER_WORKSPACE_DIR/bin +CONTAINER_ASPECT_CACHE=/home/${USER}/.cache/aspect CONTAINER_BAZEL_CACHE=/home/${USER}/.cache/bazel CONTAINER_PIP_CACHE=/home/${USER}/.cache/pip CONTAINER_PIPTOOLS_CACHE=/home/${USER}/.cache/pip-tools @@ -35,6 +38,7 @@ docker run --rm \ --volume /etc/passwd:/etc/passwd:ro \ --volume $LOCAL_PIP_CACHE:$CONTAINER_PIP_CACHE \ --volume $LOCAL_PIPTOOLS_CACHE:$CONTAINER_PIPTOOLS_CACHE \ + --volume $LOCAL_ASPECT_CACHE:$CONTAINER_ASPECT_CACHE \ --volume $LOCAL_BAZEL_CACHE:$CONTAINER_BAZEL_CACHE \ --volume $LOCAL_BAZELISK_CACHE:$CONTAINER_BAZELISK_CACHE \ --volume $LOCAL_WORKDIR:$CONTAINER_WORKDIR \ diff --git a/src/tools/format/BUILD.bazel b/src/tools/format/BUILD.bazel new file mode 100644 index 0000000..08f130f --- /dev/null +++ b/src/tools/format/BUILD.bazel @@ -0,0 +1,13 @@ +load("@aspect_rules_lint//format:defs.bzl", "format_multirun") + + +format_multirun( + name = "format", + # cc = "@llvm_toolchain_llvm//:bin/clang-format", + python = "@aspect_rules_lint//format:ruff", + disable_git_attribute_checks=True, + # starlark = "@buildifier_prebuild//:buildifier" + + # TODO: ADD rules for yaml, markdown, rust, c + visibility = ["//visibility:public"], +) diff --git a/src/tools/lint/BUILD b/src/tools/lint/BUILD new file mode 100644 index 0000000..e69de29 diff --git a/src/tools/lint/linters.bzl b/src/tools/lint/linters.bzl new file mode 100644 index 0000000..2265c8b --- /dev/null +++ b/src/tools/lint/linters.bzl @@ -0,0 +1,12 @@ +load("@aspect_rules_lint//lint:lint_test.bzl", "lint_test") +load("@aspect_rules_lint//lint:ruff.bzl", "lint_ruff_aspect") + +ruff = lint_ruff_aspect( + binary = "@multitool//tools/ruff", + configs = [ + Label("@//:.ruff.toml"), + ], +) + +ruff_test = lint_test(aspect = ruff) + From bad9ec8a5930abb77f9e089d280c189ce001d9cc Mon Sep 17 00:00:00 2001 From: Pedro Costa Date: Thu, 20 Feb 2025 14:16:16 +0000 Subject: [PATCH 06/19] feature: lint-all and format-all make instructions --- Makefile | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 80141b8..938f861 100644 --- a/Makefile +++ b/Makefile @@ -53,7 +53,14 @@ bazel: @bash ./src/scripts/bazel.sh $(filter-out $@, $(MAKECMDGOALS)) test-all: build-image - $(MAKE) bazel test //... + @$(MAKE) bazel test //... + +lint-all: + @$(MAKE) bazel lint \ + "//... --define=ATOMDB_VERSION=0.8.11 --define=DAS_VERSION=0.9.0 --define=DAS_NODE_VERSION=0.9.0 --fix" + +format-all: + @$(MAKE) bazel run format # Catch-all pattern to prevent make from complaining about unknown targets %: From 29748995b3248604d66a26e8b97c0fccd16cd559 Mon Sep 17 00:00:00 2001 From: Pedro Costa Date: Thu, 20 Feb 2025 14:16:38 +0000 Subject: [PATCH 07/19] feature: ruff.toml configuration --- src/.ruff.toml | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/.ruff.toml b/src/.ruff.toml index e69de29..ee63492 100644 --- a/src/.ruff.toml +++ b/src/.ruff.toml @@ -0,0 +1,36 @@ +line-length = 100 +indent-width = 4 + +target-version = "py310" + +[lint] + +select = ["E4", "E7", "E9", "F", "B"] +ignore = ["E501", "B905"] +fixable = ["ALL"] +unfixable = ["B"] + + +# Allow unused variables when underscore-prefixed. +dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$" + + +# Ignore `E402` (import violations) in all `__init__.py` files. +[lint.per-file-ignores] +"__init__.py" = ["E402", "F403"] +"**/{tests,docs,tools}/*" = ["B006", "B011", "B017", "B018"] +# Auto generated code +"**/grpc/*.py" = ["ALL"] + +[format] +quote-style = "double" + +indent-style = "space" + +skip-magic-trailing-comma = false + +line-ending = "auto" + +# Enable auto-formatting of code examples in docstrings +docstring-code-format = true +docstring-code-line-length = "dynamic" From c62c521007fddaaaa40f19ce654d0550c2eaedce Mon Sep 17 00:00:00 2001 From: Pedro Costa Date: Thu, 20 Feb 2025 14:16:52 +0000 Subject: [PATCH 08/19] fix: remove test cli build target --- src/BUILD | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/BUILD b/src/BUILD index a2afac9..cd8de03 100644 --- a/src/BUILD +++ b/src/BUILD @@ -17,12 +17,6 @@ alias( actual = "//tools/format" ) -py_binary( - name = "cli", - srcs = ["cli.py"], -) - - cc_binary( name = "attention_broker_service", srcs = [], From 750776e7fa630b84078ddcfb7ce2901405618355 Mon Sep 17 00:00:00 2001 From: Pedro Costa Date: Thu, 20 Feb 2025 14:17:22 +0000 Subject: [PATCH 09/19] fix: format and lint all python files --- src/hyperon_das/__init__.py | 6 +- .../cache/attention_broker_gateway.py | 12 +- src/hyperon_das/cache/iterators.py | 89 ++-- src/hyperon_das/client.py | 121 ++--- src/hyperon_das/das.py | 122 +++-- src/hyperon_das/decorators.py | 12 +- src/hyperon_das/grpc/attention_broker_pb2.py | 9 +- .../grpc/attention_broker_pb2_grpc.py | 33 +- src/hyperon_das/grpc/common_pb2.py | 29 +- src/hyperon_das/grpc/common_pb2_grpc.py | 1 + src/hyperon_das/link_filters.py | 5 +- src/hyperon_das/logger.py | 6 +- .../query_engines/local_query_engine.py | 49 +- .../query_engines/query_engine_protocol.py | 5 +- .../query_engines/remote_query_engine.py | 47 +- .../tokenizers/dict_query_tokenizer.py | 15 +- src/hyperon_das/tokenizers/elements.py | 4 +- src/hyperon_das/traverse_engines.py | 14 +- src/hyperon_das/utils.py | 26 +- src/hyperon_das_atomdb/__init__.py | 2 +- .../adapters/redis_mongo_db.py | 13 +- .../utils/expression_hasher.py | 2 +- .../doc/DaC/das_link_creation_diagram.py | 75 +-- src/tests/python/helpers.py | 2 +- .../python/integration/adapters/animals_kb.py | 6 +- .../integration/adapters/test_redis_mongo.py | 25 +- src/tests/python/integration/conftest.py | 5 +- src/tests/python/integration/helpers.py | 18 +- .../test_attention_broker_gateway.py | 36 +- src/tests/python/integration/test_client.py | 32 +- .../python/integration/test_das_query_api.py | 14 +- .../python/integration/test_iterators.py | 66 ++- .../python/integration/test_local_das.py | 11 +- .../python/integration/test_remote_das.py | 154 +++--- .../integration/test_traverse_engine.py | 55 ++- .../python/unit/adapters/test_ram_only.py | 28 +- .../unit/adapters/test_redis_mongo_db.py | 265 ++++++++--- .../unit/adapters/test_redis_mongo_extra.py | 17 +- src/tests/python/unit/fixtures.py | 19 +- src/tests/python/unit/helpers.py | 12 +- src/tests/python/unit/mock.py | 206 ++++---- .../unit/test_attention_broker_gateway.py | 4 +- src/tests/python/unit/test_cache.py | 192 ++++---- .../python/unit/test_cache_controller.py | 98 ++-- src/tests/python/unit/test_client.py | 137 +++--- src/tests/python/unit/test_context.py | 6 +- src/tests/python/unit/test_das.py | 129 ++--- .../unit/test_database_private_methods.py | 12 +- .../unit/test_database_public_methods.py | 8 +- src/tests/python/unit/test_decorators.py | 10 +- .../python/unit/test_dict_query_tokenizer.py | 13 +- src/tests/python/unit/test_queries.py | 34 +- src/tests/python/unit/test_traverse_engine.py | 450 +++++++++--------- src/tools/bazel/pytest/main.py | 2 - 54 files changed, 1543 insertions(+), 1220 deletions(-) diff --git a/src/hyperon_das/__init__.py b/src/hyperon_das/__init__.py index 0faf7bd..90569f7 100644 --- a/src/hyperon_das/__init__.py +++ b/src/hyperon_das/__init__.py @@ -1,10 +1,10 @@ import sys if sys.version_info < (3, 10): - raise RuntimeError('hyperon_das requires Python 3.10 or higher') + raise RuntimeError("hyperon_das requires Python 3.10 or higher") from hyperon_das.das import DistributedAtomSpace -__all__ = ['DistributedAtomSpace'] +__all__ = ["DistributedAtomSpace"] -__version__ = '0.9.14' +__version__ = "0.9.14" diff --git a/src/hyperon_das/cache/attention_broker_gateway.py b/src/hyperon_das/cache/attention_broker_gateway.py index 9dc8333..1ad2d5a 100644 --- a/src/hyperon_das/cache/attention_broker_gateway.py +++ b/src/hyperon_das/cache/attention_broker_gateway.py @@ -19,11 +19,11 @@ def __init__(self, system_parameters: Dict[str, Any]): f"Invalid system parameters. server_hostname: '{self.server_hostname}' server_port: {self.server_port}" ) ) - self.server_url = f'{self.server_hostname}:{self.server_port}' + self.server_url = f"{self.server_hostname}:{self.server_port}" self.ping() def ping(self) -> Optional[str]: - logger().info(f'Pinging AttentionBroker at {self.server_url}') + logger().info(f"Pinging AttentionBroker at {self.server_url}") with grpc.insecure_channel(self.server_url) as channel: stub = AttentionBrokerStub(channel) response = stub.ping(grpc_types.Empty()) @@ -33,9 +33,9 @@ def ping(self) -> Optional[str]: def stimulate(self, handle_count: Set[str]) -> Optional[str]: if handle_count is None: - das_error(ValueError(f'Invalid handle_count {handle_count}')) + das_error(ValueError(f"Invalid handle_count {handle_count}")) logger().info( - f'Requesting AttentionBroker at {self.server_url} to stimulate {len(handle_count)} atoms' + f"Requesting AttentionBroker at {self.server_url} to stimulate {len(handle_count)} atoms" ) message = grpc_types.HandleCount(handle_count=handle_count) with grpc.insecure_channel(self.server_url) as channel: @@ -47,9 +47,9 @@ def stimulate(self, handle_count: Set[str]) -> Optional[str]: def correlate(self, handle_set: Set[str]) -> Optional[str]: if handle_set is None: - das_error(ValueError(f'Invalid handle_set {handle_set}')) + das_error(ValueError(f"Invalid handle_set {handle_set}")) logger().info( - f'Requesting AttentionBroker at {self.server_url} to correlate {len(handle_set)} atoms' + f"Requesting AttentionBroker at {self.server_url} to correlate {len(handle_set)} atoms" ) message = grpc_types.HandleList(handle_list=handle_set) sleep(0.05) diff --git a/src/hyperon_das/cache/iterators.py b/src/hyperon_das/cache/iterators.py index 7ca29d3..df28283 100644 --- a/src/hyperon_das/cache/iterators.py +++ b/src/hyperon_das/cache/iterators.py @@ -89,7 +89,10 @@ def __next__(self): class LazyQueryEvaluator(ProductIterator): def __init__( - self, link_type: str, source: List[QueryAnswerIterator], query_engine: QueryEngine + self, + link_type: str, + source: List[QueryAnswerIterator], + query_engine: QueryEngine, ): super().__init__(source) self.link_type = link_type @@ -161,10 +164,10 @@ class BaseLinksIterator(QueryAnswerIterator, ABC): def __init__(self, source: ListIterator, **kwargs) -> None: super().__init__(source) if not self.source.is_empty(): - if not hasattr(self, 'backend'): - self.backend = kwargs.get('backend') - self.chunk_size = kwargs.get('chunk_size', 1000) - self.cursor = kwargs.get('cursor', 0) + if not hasattr(self, "backend"): + self.backend = kwargs.get("backend") + self.chunk_size = kwargs.get("chunk_size", 1000) + self.cursor = kwargs.get("cursor", 0) self.buffer_queue = deque() self.iterator = self.source self.current_value = self.get_current_value() @@ -236,8 +239,8 @@ def get_fetch_data(self, **kwargs) -> tuple: class LocalIncomingLinks(BaseLinksIterator): def __init__(self, source: ListIterator, **kwargs) -> None: - self.atom_handle = kwargs.get('atom_handle') - self.targets_document = kwargs.get('targets_document', False) + self.atom_handle = kwargs.get("atom_handle") + self.targets_document = kwargs.get("targets_document", False) super().__init__(source, **kwargs) def get_next_value(self) -> Any: @@ -259,7 +262,11 @@ def get_current_value(self) -> Any: return None def get_fetch_data_kwargs(self) -> Dict[str, Any]: - return {'handles_only': True, 'cursor': self.cursor, 'chunk_size': self.chunk_size} + return { + "handles_only": True, + "cursor": self.cursor, + "chunk_size": self.chunk_size, + } def get_fetch_data(self, **kwargs) -> tuple: if self.backend: @@ -268,8 +275,8 @@ def get_fetch_data(self, **kwargs) -> tuple: class RemoteIncomingLinks(BaseLinksIterator): def __init__(self, source: ListIterator, **kwargs) -> None: - self.atom_handle = kwargs.get('atom_handle') - self.targets_document = kwargs.get('targets_document', False) + self.atom_handle = kwargs.get("atom_handle") + self.targets_document = kwargs.get("targets_document", False) self.returned_handles = set() super().__init__(source, **kwargs) @@ -278,9 +285,9 @@ def get_next_value(self) -> Any: while True: link_document = next(self.iterator) if isinstance(link_document, tuple) or isinstance(link_document, list): - handle = link_document[0]['handle'] + handle = link_document[0]["handle"] elif isinstance(link_document, dict): - handle = link_document['handle'] + handle = link_document["handle"] elif isinstance(link_document, str): handle = link_document else: @@ -299,9 +306,9 @@ def get_current_value(self) -> Any: def get_fetch_data_kwargs(self) -> Dict[str, Any]: return { - 'cursor': self.cursor, - 'chunk_size': self.chunk_size, - 'targets_document': self.targets_document, + "cursor": self.cursor, + "chunk_size": self.chunk_size, + "targets_document": self.targets_document, } def get_fetch_data(self, **kwargs) -> tuple: @@ -311,9 +318,9 @@ def get_fetch_data(self, **kwargs) -> tuple: class CustomQuery(BaseLinksIterator): def __init__(self, source: ListIterator, **kwargs) -> None: - self.index_id = kwargs.pop('index_id', None) - self.backend = kwargs.pop('backend', None) - self.is_remote = kwargs.pop('is_remote', False) + self.index_id = kwargs.pop("index_id", None) + self.backend = kwargs.pop("backend", None) + self.is_remote = kwargs.pop("is_remote", False) self.kwargs = kwargs super().__init__(source, **kwargs) @@ -330,18 +337,18 @@ def get_current_value(self) -> Any: def get_fetch_data_kwargs(self) -> Dict[str, Any]: kwargs = self.kwargs - kwargs.update({'cursor': self.cursor, 'chunk_size': self.chunk_size}) + kwargs.update({"cursor": self.cursor, "chunk_size": self.chunk_size}) return kwargs def get_fetch_data(self, **kwargs) -> tuple: if self.backend: if self.is_remote: return self.backend.custom_query( - self.index_id, query=kwargs.get('query', []), **kwargs + self.index_id, query=kwargs.get("query", []), **kwargs ) else: return self.backend.get_atoms_by_index( - self.index_id, query=kwargs.get('query', []), **kwargs + self.index_id, query=kwargs.get("query", []), **kwargs ) @@ -350,13 +357,13 @@ def __init__( self, source: LocalIncomingLinks | RemoteIncomingLinks | Iterator, **kwargs ) -> None: super().__init__(source) - self.cursor = kwargs.get('cursor') - self.targets_only = kwargs.get('targets_only', False) + self.cursor = kwargs.get("cursor") + self.targets_only = kwargs.get("targets_only", False) self.buffer = None - self.link_type = kwargs.get('link_type') - self.cursor_position = kwargs.get('cursor_position') - self.target_type = kwargs.get('target_type') - self.custom_filter = kwargs.get('filter') + self.link_type = kwargs.get("link_type") + self.cursor_position = kwargs.get("cursor_position") + self.target_type = kwargs.get("target_type") + self.custom_filter = kwargs.get("filter") if not self.source.is_empty(): self.iterator = self.source self.current_value = self._find_first_valid_element() @@ -371,7 +378,7 @@ def __next__(self): if isinstance(link, tuple): link, targets = link elif isinstance(link, dict): - targets = link.pop('targets_document', []) + targets = link.pop("targets_document", []) else: raise ValueError(f"Invalid link document: {link}") if ( @@ -390,20 +397,20 @@ def _find_first_valid_element(self): if isinstance(link, tuple): link, targets = link elif isinstance(link, dict): - targets = link.get('targets_document', []) + targets = link.get("targets_document", []) else: raise ValueError(f"Invalid link document: {link}") if self._filter(link, targets): return targets if self.targets_only else link def _filter(self, link: Dict[str, Any], targets: list[dict[str, Any]]) -> bool: - if self.link_type and self.link_type != link['named_type']: + if self.link_type and self.link_type != link["named_type"]: return False try: if ( self.cursor_position is not None - and self.cursor != link['targets'][self.cursor_position] + and self.cursor != link["targets"][self.cursor_position] ): return False except IndexError: @@ -412,12 +419,12 @@ def _filter(self, link: Dict[str, Any], targets: list[dict[str, Any]]) -> bool: raise e if self.target_type: - if not any(target['named_type'] == self.target_type for target in targets): + if not any(target["named_type"] == self.target_type for target in targets): return False if self.custom_filter: deep_link = link.copy() - deep_link['targets'] = targets + deep_link["targets"] = targets if self._apply_custom_filter(deep_link) is False: return False @@ -426,15 +433,15 @@ def _filter(self, link: Dict[str, Any], targets: list[dict[str, Any]]) -> bool: def _apply_custom_filter(self, atom: Dict[str, Any], F=None) -> bool: custom_filter = F if F else self.custom_filter - assert callable( - custom_filter - ), "The custom_filter must be a function with this signature 'def func(atom: dict) -> bool: ...'" + assert callable(custom_filter), ( + "The custom_filter must be a function with this signature 'def func(atom: dict) -> bool: ...'" + ) try: if not custom_filter(atom): return False except Exception as e: - raise Exception(f"Error while applying the custom filter: {e}") + raise Exception(f"Error while applying the custom filter: {e}") from e def is_empty(self) -> bool: return not self.current_value @@ -447,7 +454,7 @@ def __init__(self, source: TraverseLinksIterator, **kwargs) -> None: self.cursor = self.source.cursor self.target_type = self.source.target_type self.visited_neighbors = [] - self.custom_filter = kwargs.get('filter') + self.custom_filter = kwargs.get("filter") if not self.source.is_empty(): self.iterator = source self.current_value = self._find_first_valid_element() @@ -480,16 +487,16 @@ def _process_targets(self, targets: list) -> tuple: for target in targets: if self._filter(target): match_found = True - self.visited_neighbors.append(target['handle']) + self.visited_neighbors.append(target["handle"]) answer.append(target) return (answer, match_found) def _filter(self, target: Dict[str, Any]) -> bool: - handle = target['handle'] + handle = target["handle"] if not ( self.cursor != handle and handle not in self.visited_neighbors - and (self.target_type == target['named_type'] or not self.target_type) + and (self.target_type == target["named_type"] or not self.target_type) ): return False diff --git a/src/hyperon_das/client.py b/src/hyperon_das/client.py index 58f3347..514c8c5 100644 --- a/src/hyperon_das/client.py +++ b/src/hyperon_das/client.py @@ -22,23 +22,23 @@ class FunctionsClient: def __init__(self, host: str, port: int, name: Optional[str] = None) -> None: if not host and not port: das_error(ValueError("'host' and 'port' are mandatory parameters")) - self.name = name if name else f'client_{host}:{port}' + self.name = name if name else f"client_{host}:{port}" self.status_code, self.url = connect_to_server(host, port) def _send_request(self, payload) -> Any: try: - if payload.get('input'): - normalized_input = {k: v for k, v in payload['input'].items() if v is not None} - payload['input'] = normalized_input + if payload.get("input"): + normalized_input = {k: v for k, v in payload["input"].items() if v is not None} + payload["input"] = normalized_input payload_serialized = serialize(payload) with sessions.Session() as session: response = session.request( - method='POST', + method="POST", url=self.url, data=payload_serialized, - headers={'Content-Type': 'application/octet-stream'}, + headers={"Content-Type": "application/octet-stream"}, ) response.raise_for_status() @@ -52,7 +52,7 @@ def _send_request(self, payload) -> Any: return response_data else: return response_data.get( - 'error', f'Unknown error with status code {response.status_code}' + "error", f"Unknown error with status code {response.status_code}" ) except exceptions.ConnectionError as e: das_error( @@ -88,20 +88,20 @@ def _send_request(self, payload) -> Any: def get_atom(self, handle: str, **kwargs) -> Union[str, Dict]: payload = { - 'action': 'get_atom', - 'input': {'handle': handle}, + "action": "get_atom", + "input": {"handle": handle}, } try: return self._send_request(payload) except HTTPError as e: if e.status_code == 404: - raise AtomDoesNotExist('Nonexistent atom') + raise AtomDoesNotExist("Nonexistent atom") from e else: raise e def get_links(self, link_filter: LinkFilter) -> Union[List[str], List[Dict]]: payload = { - 'action': 'get_links', + "action": "get_links", "input": { "link_filter": { "filter_type": link_filter.filter_type, @@ -116,9 +116,9 @@ def get_links(self, link_filter: LinkFilter) -> Union[List[str], List[Dict]]: return self._send_request(payload) except HTTPError as e: if e.status_code == 404: - raise AtomDoesNotExist('Nonexistent atom') + raise AtomDoesNotExist("Nonexistent atom") from e elif e.status_code == 400: - raise ValueError(str(e)) + raise ValueError(str(e)) from e else: raise e @@ -129,8 +129,8 @@ def query( ) -> List[AtomT]: try: payload = { - 'action': 'query', - 'input': {'query': query, 'parameters': parameters}, + "action": "query", + "input": {"query": query, "parameters": parameters}, } return self._send_request(payload) except HTTPError as e: @@ -139,40 +139,42 @@ def query( "Your query couldn't be processed due to an invalid format. Review the way the query " "is written and try again.", str(e), - ) + ) from e elif e.status_code == 404: - raise Exception("Your query couldn't be processed because Atom nonexistent", str(e)) + raise Exception( + "Your query couldn't be processed because Atom nonexistent", str(e) + ) from e raise e def count_atoms(self, parameters: Optional[Dict[str, Any]] = None) -> Dict[str, int]: payload = { - 'action': 'count_atoms', - 'input': {'parameters': parameters}, + "action": "count_atoms", + "input": {"parameters": parameters}, } return self._send_request(payload) def commit_changes(self, **kwargs) -> Tuple[int, int]: payload = { - 'action': 'commit_changes', - 'input': {'kwargs': kwargs}, + "action": "commit_changes", + "input": {"kwargs": kwargs}, } try: return self._send_request(payload) except HTTPError as e: if e.status_code == 403: - raise ValueError(str(e)) + raise ValueError(str(e)) from e else: raise e def get_incoming_links(self, atom_handle: str, **kwargs) -> IncomingLinksT | Iterator: payload = { - 'action': 'get_incoming_links', - 'input': {'atom_handle': atom_handle, 'kwargs': kwargs}, + "action": "get_incoming_links", + "input": {"atom_handle": atom_handle, "kwargs": kwargs}, } try: return self._send_request(payload) except HTTPError as e: - logger().debug(f'Error during `get_incoming_links` request on remote Das: {str(e)}') + logger().debug(f"Error during `get_incoming_links` request on remote Das: {str(e)}") return [] def create_field_index( @@ -184,30 +186,30 @@ def create_field_index( index_type: Optional[str] = None, ) -> str: payload = { - 'action': 'create_field_index', - 'input': { - 'atom_type': atom_type, - 'fields': fields, - 'named_type': named_type, - 'composite_type': composite_type, - 'index_type': index_type, + "action": "create_field_index", + "input": { + "atom_type": atom_type, + "fields": fields, + "named_type": named_type, + "composite_type": composite_type, + "index_type": index_type, }, } try: return self._send_request(payload) except HTTPError as e: if e.status_code == 400: - raise ValueError(str(e)) + raise ValueError(str(e)) from e else: raise e def custom_query(self, index_id: str, query: Query, **kwargs) -> List[AtomT]: payload = { - 'action': 'custom_query', - 'input': { - 'index_id': index_id, - 'query': {v['field']: v['value'] for v in query}, - 'kwargs': kwargs, + "action": "custom_query", + "input": { + "index_id": index_id, + "query": {v["field"]: v["value"] for v in query}, + "kwargs": kwargs, }, } try: @@ -223,8 +225,8 @@ def fetch( **kwargs, ) -> Any: payload = { - 'action': 'fetch', - 'input': {'query': query, 'host': host, 'port': port, 'kwargs': kwargs}, + "action": "fetch", + "input": {"query": query, "host": host, "port": port, "kwargs": kwargs}, } try: return self._send_request(payload) @@ -233,59 +235,66 @@ def fetch( def create_context(self, name: str, queries: Optional[List[Query]]) -> Any: payload = { - 'action': 'create_context', - 'input': {'name': name, 'queries': queries}, + "action": "create_context", + "input": {"name": name, "queries": queries}, } try: return self._send_request(payload) except HTTPError as e: if e.status_code == 404: - raise AtomDoesNotExist('nonexistent atom') + raise AtomDoesNotExist("nonexistent atom") from e elif e.status_code == 400: - raise ValueError(str(e)) + raise ValueError(str(e)) from e else: raise e def get_atoms_by_field(self, query: Query) -> List[str]: payload = { - 'action': 'get_atoms_by_field', - 'input': {'query': {v['field']: v['value'] for v in query}}, + "action": "get_atoms_by_field", + "input": {"query": {v["field"]: v["value"] for v in query}}, } try: return self._send_request(payload) except HTTPError as e: if e.status_code == 400: - raise ValueError(str(e)) + raise ValueError(str(e)) from e else: raise e def get_atoms_by_text_field( - self, text_value: str, field: Optional[str] = None, text_index_id: Optional[str] = None + self, + text_value: str, + field: Optional[str] = None, + text_index_id: Optional[str] = None, ) -> List[str]: payload = { - 'action': 'get_atoms_by_text_field', - 'input': {'text_value': text_value, 'field': field, 'text_index_id': text_index_id}, + "action": "get_atoms_by_text_field", + "input": { + "text_value": text_value, + "field": field, + "text_index_id": text_index_id, + }, } try: return self._send_request(payload) except HTTPError as e: if e.status_code == 400: - raise ValueError(str(e)) + raise ValueError(str(e)) from e else: raise e def get_node_by_name_starting_with(self, node_type: str, startswith: str) -> List[str]: payload = { - 'action': 'get_node_by_name_starting_with', - 'input': { - 'node_type': node_type, - 'startswith': startswith, + "action": "get_node_by_name_starting_with", + "input": { + "node_type": node_type, + "startswith": startswith, }, } try: return self._send_request(payload) except HTTPError as e: if e.status_code == 400: - raise ValueError(str(e)) + raise ValueError(str(e)) from e else: raise e diff --git a/src/hyperon_das/das.py b/src/hyperon_das/das.py index 2e3b025..15fdb22 100644 --- a/src/hyperon_das/das.py +++ b/src/hyperon_das/das.py @@ -33,7 +33,7 @@ class DistributedAtomSpace: backend: AtomDB - def __init__(self, system_parameters: Dict[str, Any] = {}, **kwargs) -> None: + def __init__(self, system_parameters: Dict[str, Any], **kwargs) -> None: """ Creates a new DAS object. A DAS client can run locally or locally and remote, connecting to remote DAS instances to query remote atoms. If there are different @@ -82,9 +82,11 @@ def __init__(self, system_parameters: Dict[str, Any] = {}, **kwargs) -> None: mode. Defaults to True. redis_ssl (bool, optional): Set Redis to encrypt the connection. Defaults to True. """ + if not system_parameters: + system_parameters = {} self.system_parameters = system_parameters - self.atomdb = kwargs.get('atomdb', 'ram') - self.query_engine_type = kwargs.get('query_engine', 'local') + self.atomdb = kwargs.get("atomdb", "ram") + self.query_engine_type = kwargs.get("query_engine", "local") self._set_default_system_parameters() self._set_backend(**kwargs) self.cache_controller = CacheController(self.system_parameters) @@ -92,15 +94,15 @@ def __init__(self, system_parameters: Dict[str, Any] = {}, **kwargs) -> None: def _set_default_system_parameters(self) -> None: # Internals - if not self.system_parameters.get('running_on_server'): - self.system_parameters['running_on_server'] = False + if not self.system_parameters.get("running_on_server"): + self.system_parameters["running_on_server"] = False # Attention Broker - if not self.system_parameters.get('cache_enabled'): - self.system_parameters['cache_enabled'] = False - if not self.system_parameters.get('attention_broker_hostname'): - self.system_parameters['attention_broker_hostname'] = 'localhost' - if not self.system_parameters.get('attention_broker_port'): - self.system_parameters['attention_broker_port'] = 27000 + if not self.system_parameters.get("cache_enabled"): + self.system_parameters["cache_enabled"] = False + if not self.system_parameters.get("attention_broker_hostname"): + self.system_parameters["attention_broker_hostname"] = "localhost" + if not self.system_parameters.get("attention_broker_port"): + self.system_parameters["attention_broker_port"] = 27000 def _set_backend(self, **kwargs) -> None: if self.atomdb == "ram": @@ -115,7 +117,7 @@ def _set_backend(self, **kwargs) -> None: raise InvalidAtomDB("Invalid AtomDB type. Choose either 'ram' or 'redis_mongo'") def _set_query_engine(self, **kwargs) -> None: - if self.query_engine_type == 'local': + if self.query_engine_type == "local": das_type = DasType.LOCAL_RAM_ONLY if self.atomdb == "ram" else DasType.LOCAL_REDIS_MONGO self._start_query_engine(LocalQueryEngine, das_type, **kwargs) elif self.query_engine_type == "remote": @@ -141,10 +143,12 @@ def _start_query_engine( def _create_context( self, name: str, - queries: List[Query] = [], + queries: List[Query], ) -> Context: + if not queries: + queries = [] context_node = self.add_node(NodeT(type=Context.CONTEXT_NODE_TYPE, name=name)) - query_answer = [self.query(query, {'no_iterator': True}) for query in queries] + query_answer = [self.query(query, {"no_iterator": True}) for query in queries] context = Context(context_node, query_answer) self.cache_controller.add_context(context) return context @@ -152,15 +156,15 @@ def _create_context( @staticmethod def about() -> dict: return { - 'das': { - 'name': 'hyperon-das', - 'version': get_package_version('hyperon_das'), - 'summary': 'Query Engine API for Distributed AtomSpace', + "das": { + "name": "hyperon-das", + "version": get_package_version("hyperon_das"), + "summary": "Query Engine API for Distributed AtomSpace", }, - 'atom_db': { - 'name': 'hyperon-das-atomdb', - 'version': get_package_version('hyperon_das_atomdb'), - 'summary': 'Persistence layer for Distributed AtomSpace', + "atom_db": { + "name": "hyperon-das-atomdb", + "version": get_package_version("hyperon_das_atomdb"), + "summary": "Persistence layer for Distributed AtomSpace", }, } @@ -184,7 +188,7 @@ def compute_node_handle(node_type: str, node_name: str) -> str: Examples: >>> das = DistributedAtomSpace() - >>> result = das.compute_node_handle(node_type='Concept', node_name='human') + >>> result = das.compute_node_handle(node_type="Concept", node_name="human") >>> print(result) "af12f10f9ae2002a1607ba0b47ba8407" """ @@ -210,9 +214,11 @@ def compute_link_handle(link_type: str, link_targets: HandleListT) -> str: Examples: >>> das = DistributedAtomSpace() - >>> human_handle = das.compute_node_handle(node_type='Concept', node_name='human') - >>> monkey_handle = das.compute_node_handle(node_type='Concept', node_name='monkey') - >>> result = das.compute_link_handle(link_type='Similarity', targets=[human_handle, monkey_handle]) + >>> human_handle = das.compute_node_handle(node_type="Concept", node_name="human") + >>> monkey_handle = das.compute_node_handle(node_type="Concept", node_name="monkey") + >>> result = das.compute_link_handle( + ... link_type="Similarity", targets=[human_handle, monkey_handle] + ... ) >>> print(result) "bad7472f41a0e7d601ca294eb4607c3a" @@ -237,7 +243,7 @@ def get_atom(self, handle: HandleT) -> AtomT: Examples: >>> das = DistributedAtomSpace() - >>> human_handle = das.compute_node_handle(node_type='Concept', node_name='human') + >>> human_handle = das.compute_node_handle(node_type="Concept", node_name="human") >>> node = das.get_atom(human_handle) >>> print(node) Node(_id: 'af12f10f9ae2002a1607ba0b47ba8407', handle: 'af12f10f9ae2002a1607ba0b47ba8407', @@ -272,8 +278,8 @@ def get_atoms(self, handles: HandleListT) -> list[AtomT]: Examples: >>> das = DistributedAtomSpace() - >>> human_handle = das.compute_node_handle(node_type='Concept', node_name='human') - >>> animal_handle = das.compute_node_handle(node_type='Concept', node_name='monkey') + >>> human_handle = das.compute_node_handle(node_type="Concept", node_name="human") + >>> animal_handle = das.compute_node_handle(node_type="Concept", node_name="monkey") >>> result = das.get_atoms([human_handle, animal_handle]) >>> print(result[0]) Node(_id: 'af12f10f9ae2002a1607ba0b47ba8407', handle: 'af12f10f9ae2002a1607ba0b47ba8407', @@ -302,7 +308,7 @@ def get_node(self, node_type: str, node_name: str) -> NodeT: Examples: >>> das = DistributedAtomSpace() - >>> node = das.get_node(node_type='Concept', node_name='human') + >>> node = das.get_node(node_type="Concept", node_name="human") >>> print(node) Node(_id: 'af12f10f9ae2002a1607ba0b47ba8407', handle: 'af12f10f9ae2002a1607ba0b47ba8407', composite_type_hash: 'd99a604c79ce3c2e76a2f43488d5d4c3', named_type: 'Concept', @@ -332,8 +338,8 @@ def get_link(self, link_type: str, link_targets: HandleListT) -> LinkT: Examples: >>> das = DistributedAtomSpace() - >>> human_handle = das.compute_node_handle('Concept', 'human') - >>> monkey_handle = das.compute_node_handle('Concept', 'monkey') + >>> human_handle = das.compute_node_handle("Concept", "human") + >>> monkey_handle = das.compute_node_handle("Concept", "monkey") >>> result = das.get_link( link_type='Similarity', link_targets=[human_handle, monkey_handle], @@ -391,7 +397,7 @@ def get_incoming_links(self, atom_handle: HandleT, **kwargs) -> IncomingLinksT: Examples: >>> das = DistributedAtomSpace() - >>> rhino = das.compute_node_handle('Concept', 'rhino') + >>> rhino = das.compute_node_handle("Concept", "rhino") >>> links = das.get_incoming_links(rhino) >>> for link in links: >>> print(link.type, link.targets) @@ -401,7 +407,7 @@ def get_incoming_links(self, atom_handle: HandleT, **kwargs) -> IncomingLinksT: """ return self.query_engine.get_incoming_links(atom_handle, **kwargs) - def count_atoms(self, parameters: Dict[str, Any] = {}) -> Dict[str, int]: + def count_atoms(self, parameters: Dict[str, Any]) -> Dict[str, int]: """ Count atoms, nodes and links in DAS. @@ -422,12 +428,14 @@ def count_atoms(self, parameters: Dict[str, Any] = {}) -> Dict[str, int]: Returns: Dict[str, int]: Dict containing the keys 'node_count', 'atom_count', 'link_count'. """ + if not parameters: + parameters = {} return self.query_engine.count_atoms(parameters) def query( self, query: Query, - parameters: Dict[str, Any] = {}, + parameters: Dict[str, Any], ) -> Union[Iterator[QueryAnswer], List[QueryAnswer]]: """ Perform a query on the knowledge base using a dict as input and return an @@ -522,6 +530,8 @@ def query( } ] """ + if not parameters: + parameters = {} return self.query_engine.query(query, parameters) def custom_query(self, index_id: str, query: Query, **kwargs) -> Union[Iterator, List[AtomT]]: @@ -553,14 +563,14 @@ def custom_query(self, index_id: str, query: Query, **kwargs) -> Union[Iterator, Iterator | List[AtomT]: An iterator or a list of Atom instances (Nodes or Links). Examples: - >>> das.custom_query(index_id='index_123', query={'tag': 'DAS'}) - >>> das.custom_query(index_id='index_123', query={'tag': 'DAS'}, no_iterator=True) + >>> das.custom_query(index_id="index_123", query={"tag": "DAS"}) + >>> das.custom_query(index_id="index_123", query={"tag": "DAS"}, no_iterator=True) """ if isinstance(self.query_engine, LocalQueryEngine) and isinstance(self.backend, InMemoryDB): raise NotImplementedError("custom_query() is not implemented for Local DAS in RAM only") return self.query_engine.custom_query( - index_id, [{'field': k, 'value': v} for k, v in query.items()], **kwargs + index_id, [{"field": k, "value": v} for k, v in query.items()], **kwargs ) def get_atoms_by_field(self, query: Query) -> HandleListT: @@ -578,11 +588,14 @@ def get_atoms_by_field(self, query: Query) -> HandleListT: """ return self.query_engine.get_atoms_by_field( - [{'field': k, 'value': v} for k, v in query.items()] + [{"field": k, "value": v} for k, v in query.items()] ) def get_atoms_by_text_field( - self, text_value: str, field: Optional[str] = None, text_index_id: Optional[str] = None + self, + text_value: str, + field: Optional[str] = None, + text_index_id: Optional[str] = None, ) -> HandleListT: """ Performs a text search, if a text index is previously created performance a token index search, @@ -788,7 +801,7 @@ def clear(self) -> None: Delete all atoms and custom indexes. """ self.backend.clear_database() - logger().debug('The database has been cleaned.') + logger().debug("The database has been cleaned.") def get_traversal_cursor(self, handle: str, **kwargs) -> TraverseEngine: """ @@ -814,8 +827,10 @@ def get_traversal_cursor(self, handle: str, **kwargs) -> TraverseEngine: """ try: return TraverseEngine(handle, das=self, **kwargs) - except AtomDoesNotExist: - raise GetTraversalCursorException(message="Cannot start Traversal. Atom does not exist") + except AtomDoesNotExist as e: + raise GetTraversalCursorException( + message="Cannot start Traversal. Atom does not exist" + ) from e def create_field_index( self, @@ -853,8 +868,17 @@ def create_field_index( newly created index. Examples: - >>> index_id = das.create_field_index('link', ['tag'], type='Expression') - >>> index_id = das.create_field_index('link', ['tag'], composite_type=['Expression', 'Symbol', 'Symbol', ['Expression', 'Symbol', 'Symbol', 'Symbol']]) + >>> index_id = das.create_field_index("link", ["tag"], type="Expression") + >>> index_id = das.create_field_index( + ... "link", + ... ["tag"], + ... composite_type=[ + ... "Expression", + ... "Symbol", + ... "Symbol", + ... ["Expression", "Symbol", "Symbol", "Symbol"], + ... ], + ... ) """ if named_type and composite_type: raise ValueError("'type' and 'composite_type' can't be specified simultaneously") @@ -924,7 +948,7 @@ def fetch( das.fetch(query, host='123.4.5.6', port=8080) """ - if not self.system_parameters.get('running_on_server'): + if not self.system_parameters.get("running_on_server"): if self._das_type != DasType.REMOTE and (not host or not port): raise ValueError("'host' and 'port' are mandatory parameters to local DAS") @@ -935,9 +959,11 @@ def fetch( def create_context( self, name: str, - queries: List[Query] = [], + queries: List[Query], ) -> Context: - if self.query_engine_type == 'local': + if not queries: + queries = [] + if self.query_engine_type == "local": return self._create_context(name, queries) else: return self.query_engine.create_context(name, queries) diff --git a/src/hyperon_das/decorators.py b/src/hyperon_das/decorators.py index ec74a8e..9a2e7d4 100644 --- a/src/hyperon_das/decorators.py +++ b/src/hyperon_das/decorators.py @@ -22,24 +22,24 @@ def wrapper(*args, **kwargs): end_time = time.time() if status == HTTPStatus.OK: logger().debug( - f'{retry_count + 1} successful connection attempt at [host={args[1]}]' + f"{retry_count + 1} successful connection attempt at [host={args[1]}]" ) return status, response except Exception as e: raise RetryConnectionError( message="An error occurs while connecting to the server", details=str(e), - ) + ) from e else: - logger().debug(f'{retry_count + 1} unsuccessful connection attempt') + logger().debug(f"{retry_count + 1} unsuccessful connection attempt") time.sleep(waiting_time_seconds) retry_count += 1 timer_count += end_time - start_time - port = f':{args[1]}' if len(args) > 1 else '' + port = f":{args[1]}" if len(args) > 1 else "" message = ( - f'Failed to connect to remote Das {args[0]}' + f"Failed to connect to remote Das {args[0]}" + port - + f' - attempts:{retry_count} - time_attempted: {timer_count}' + + f" - attempts:{retry_count} - time_attempted: {timer_count}" ) logger().info(message) raise RetryConnectionError(message) diff --git a/src/hyperon_das/grpc/attention_broker_pb2.py b/src/hyperon_das/grpc/attention_broker_pb2.py index 3c93d32..0c98e26 100644 --- a/src/hyperon_das/grpc/attention_broker_pb2.py +++ b/src/hyperon_das/grpc/attention_broker_pb2.py @@ -3,6 +3,7 @@ # source: attention_broker.proto # Protobuf Python Version: 4.25.1 """Generated protocol buffer code.""" + from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool from google.protobuf import symbol_database as _symbol_database @@ -16,14 +17,14 @@ import hyperon_das.grpc.common_pb2 as common__pb2 DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile( - b'\n\x16\x61ttention_broker.proto\x12\x03\x64\x61s\x1a\x0c\x63ommon.proto2\x86\x01\n\x0f\x41ttentionBroker\x12\x1e\n\x04ping\x12\n.das.Empty\x1a\x08.das.Ack\"\x00\x12)\n\tstimulate\x12\x10.das.HandleCount\x1a\x08.das.Ack\"\x00\x12(\n\tcorrelate\x12\x0f.das.HandleList\x1a\x08.das.Ack\"\x00\x62\x06proto3' + b'\n\x16\x61ttention_broker.proto\x12\x03\x64\x61s\x1a\x0c\x63ommon.proto2\x86\x01\n\x0f\x41ttentionBroker\x12\x1e\n\x04ping\x12\n.das.Empty\x1a\x08.das.Ack"\x00\x12)\n\tstimulate\x12\x10.das.HandleCount\x1a\x08.das.Ack"\x00\x12(\n\tcorrelate\x12\x0f.das.HandleList\x1a\x08.das.Ack"\x00\x62\x06proto3' ) _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'attention_broker_pb2', _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "attention_broker_pb2", _globals) if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None - _globals['_ATTENTIONBROKER']._serialized_start = 46 - _globals['_ATTENTIONBROKER']._serialized_end = 180 + _globals["_ATTENTIONBROKER"]._serialized_start = 46 + _globals["_ATTENTIONBROKER"]._serialized_end = 180 # @@protoc_insertion_point(module_scope) diff --git a/src/hyperon_das/grpc/attention_broker_pb2_grpc.py b/src/hyperon_das/grpc/attention_broker_pb2_grpc.py index c425cb9..27a7a49 100644 --- a/src/hyperon_das/grpc/attention_broker_pb2_grpc.py +++ b/src/hyperon_das/grpc/attention_broker_pb2_grpc.py @@ -1,5 +1,6 @@ # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! """Client and server classes corresponding to protobuf-defined services.""" + import grpc import hyperon_das.grpc.common_pb2 as common__pb2 @@ -15,17 +16,17 @@ def __init__(self, channel): channel: A grpc.Channel. """ self.ping = channel.unary_unary( - '/das.AttentionBroker/ping', + "/das.AttentionBroker/ping", request_serializer=common__pb2.Empty.SerializeToString, response_deserializer=common__pb2.Ack.FromString, ) self.stimulate = channel.unary_unary( - '/das.AttentionBroker/stimulate', + "/das.AttentionBroker/stimulate", request_serializer=common__pb2.HandleCount.SerializeToString, response_deserializer=common__pb2.Ack.FromString, ) self.correlate = channel.unary_unary( - '/das.AttentionBroker/correlate', + "/das.AttentionBroker/correlate", request_serializer=common__pb2.HandleList.SerializeToString, response_deserializer=common__pb2.Ack.FromString, ) @@ -37,42 +38,42 @@ class AttentionBrokerServicer(object): def ping(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') + context.set_details("Method not implemented!") + raise NotImplementedError("Method not implemented!") def stimulate(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') + context.set_details("Method not implemented!") + raise NotImplementedError("Method not implemented!") def correlate(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') + context.set_details("Method not implemented!") + raise NotImplementedError("Method not implemented!") def add_AttentionBrokerServicer_to_server(servicer, server): rpc_method_handlers = { - 'ping': grpc.unary_unary_rpc_method_handler( + "ping": grpc.unary_unary_rpc_method_handler( servicer.ping, request_deserializer=common__pb2.Empty.FromString, response_serializer=common__pb2.Ack.SerializeToString, ), - 'stimulate': grpc.unary_unary_rpc_method_handler( + "stimulate": grpc.unary_unary_rpc_method_handler( servicer.stimulate, request_deserializer=common__pb2.HandleCount.FromString, response_serializer=common__pb2.Ack.SerializeToString, ), - 'correlate': grpc.unary_unary_rpc_method_handler( + "correlate": grpc.unary_unary_rpc_method_handler( servicer.correlate, request_deserializer=common__pb2.HandleList.FromString, response_serializer=common__pb2.Ack.SerializeToString, ), } generic_handler = grpc.method_handlers_generic_handler( - 'das.AttentionBroker', rpc_method_handlers + "das.AttentionBroker", rpc_method_handlers ) server.add_generic_rpc_handlers((generic_handler,)) @@ -97,7 +98,7 @@ def ping( return grpc.experimental.unary_unary( request, target, - '/das.AttentionBroker/ping', + "/das.AttentionBroker/ping", common__pb2.Empty.SerializeToString, common__pb2.Ack.FromString, options, @@ -126,7 +127,7 @@ def stimulate( return grpc.experimental.unary_unary( request, target, - '/das.AttentionBroker/stimulate', + "/das.AttentionBroker/stimulate", common__pb2.HandleCount.SerializeToString, common__pb2.Ack.FromString, options, @@ -155,7 +156,7 @@ def correlate( return grpc.experimental.unary_unary( request, target, - '/das.AttentionBroker/correlate', + "/das.AttentionBroker/correlate", common__pb2.HandleList.SerializeToString, common__pb2.Ack.FromString, options, diff --git a/src/hyperon_das/grpc/common_pb2.py b/src/hyperon_das/grpc/common_pb2.py index 53dfdf8..ef01372 100644 --- a/src/hyperon_das/grpc/common_pb2.py +++ b/src/hyperon_das/grpc/common_pb2.py @@ -3,6 +3,7 @@ # source: common.proto # Protobuf Python Version: 4.25.1 """Generated protocol buffer code.""" + from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool from google.protobuf import symbol_database as _symbol_database @@ -14,24 +15,24 @@ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile( - b'\n\x0c\x63ommon.proto\x12\x03\x64\x61s\"\x07\n\x05\x45mpty\"!\n\x03\x41\x63k\x12\r\n\x05\x65rror\x18\x01 \x01(\x08\x12\x0b\n\x03msg\x18\x02 \x01(\t\"!\n\nHandleList\x12\x13\n\x0bhandle_list\x18\x01 \x03(\t\"z\n\x0bHandleCount\x12\x37\n\x0chandle_count\x18\x01 \x03(\x0b\x32!.das.HandleCount.HandleCountEntry\x1a\x32\n\x10HandleCountEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\x62\x06proto3' + b'\n\x0c\x63ommon.proto\x12\x03\x64\x61s"\x07\n\x05\x45mpty"!\n\x03\x41\x63k\x12\r\n\x05\x65rror\x18\x01 \x01(\x08\x12\x0b\n\x03msg\x18\x02 \x01(\t"!\n\nHandleList\x12\x13\n\x0bhandle_list\x18\x01 \x03(\t"z\n\x0bHandleCount\x12\x37\n\x0chandle_count\x18\x01 \x03(\x0b\x32!.das.HandleCount.HandleCountEntry\x1a\x32\n\x10HandleCountEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\x62\x06proto3' ) _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'common_pb2', _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "common_pb2", _globals) if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None - _globals['_HANDLECOUNT_HANDLECOUNTENTRY']._options = None - _globals['_HANDLECOUNT_HANDLECOUNTENTRY']._serialized_options = b'8\001' - _globals['_EMPTY']._serialized_start = 21 - _globals['_EMPTY']._serialized_end = 28 - _globals['_ACK']._serialized_start = 30 - _globals['_ACK']._serialized_end = 63 - _globals['_HANDLELIST']._serialized_start = 65 - _globals['_HANDLELIST']._serialized_end = 98 - _globals['_HANDLECOUNT']._serialized_start = 100 - _globals['_HANDLECOUNT']._serialized_end = 222 - _globals['_HANDLECOUNT_HANDLECOUNTENTRY']._serialized_start = 172 - _globals['_HANDLECOUNT_HANDLECOUNTENTRY']._serialized_end = 222 + _globals["_HANDLECOUNT_HANDLECOUNTENTRY"]._options = None + _globals["_HANDLECOUNT_HANDLECOUNTENTRY"]._serialized_options = b"8\001" + _globals["_EMPTY"]._serialized_start = 21 + _globals["_EMPTY"]._serialized_end = 28 + _globals["_ACK"]._serialized_start = 30 + _globals["_ACK"]._serialized_end = 63 + _globals["_HANDLELIST"]._serialized_start = 65 + _globals["_HANDLELIST"]._serialized_end = 98 + _globals["_HANDLECOUNT"]._serialized_start = 100 + _globals["_HANDLECOUNT"]._serialized_end = 222 + _globals["_HANDLECOUNT_HANDLECOUNTENTRY"]._serialized_start = 172 + _globals["_HANDLECOUNT_HANDLECOUNTENTRY"]._serialized_end = 222 # @@protoc_insertion_point(module_scope) diff --git a/src/hyperon_das/grpc/common_pb2_grpc.py b/src/hyperon_das/grpc/common_pb2_grpc.py index 8a93939..bf94705 100644 --- a/src/hyperon_das/grpc/common_pb2_grpc.py +++ b/src/hyperon_das/grpc/common_pb2_grpc.py @@ -1,3 +1,4 @@ # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! """Client and server classes corresponding to protobuf-defined services.""" + import grpc diff --git a/src/hyperon_das/link_filters.py b/src/hyperon_das/link_filters.py index 0611fa5..9efe8a6 100644 --- a/src/hyperon_das/link_filters.py +++ b/src/hyperon_das/link_filters.py @@ -39,7 +39,10 @@ class FlatTypeTemplate(LinkFilter): """ def __init__( - self, target_types: list[str], link_type: str = WILDCARD, toplevel_only: bool = False + self, + target_types: list[str], + link_type: str = WILDCARD, + toplevel_only: bool = False, ): self.filter_type = LinkFilterType.FLAT_TYPE_TEMPLATE self.link_type = link_type diff --git a/src/hyperon_das/logger.py b/src/hyperon_das/logger.py index 5772f05..098310d 100644 --- a/src/hyperon_das/logger.py +++ b/src/hyperon_das/logger.py @@ -1,6 +1,6 @@ import logging -LOG_FILE_NAME = '/tmp/das.log' +LOG_FILE_NAME = "/tmp/das.log" LOGGING_LEVEL = logging.INFO @@ -20,8 +20,8 @@ def __init__(self): logging.basicConfig( filename=LOG_FILE_NAME, level=LOGGING_LEVEL, - format='%(asctime)s %(levelname)-8s %(message)s', - datefmt='%Y-%m-%d %H:%M:%S', + format="%(asctime)s %(levelname)-8s %(message)s", + datefmt="%Y-%m-%d %H:%M:%S", ) Logger.__instance = self diff --git a/src/hyperon_das/query_engines/local_query_engine.py b/src/hyperon_das/query_engines/local_query_engine.py index e5e704f..e4582c9 100644 --- a/src/hyperon_das/query_engines/local_query_engine.py +++ b/src/hyperon_das/query_engines/local_query_engine.py @@ -75,7 +75,7 @@ def _recursive_query( das_error( UnexpectedQueryFormat( message="Query processing reached an unexpected state", - details=f'link: {str(query)} link target: {str(query)}', + details=f"link: {str(query)} link target: {str(query)}", ) ) return LazyQueryEvaluator( @@ -85,7 +85,7 @@ def _recursive_query( das_error( UnexpectedQueryFormat( message="Query processing reached an unexpected state", - details=f'query: {str(query)}', + details=f"query: {str(query)}", ) ) @@ -122,7 +122,7 @@ def _process_node(self, query: dict) -> List[NodeT]: return [] def _process_link(self, query: dict) -> List[LinkT]: - target_handles = self._generate_target_handles(query['targets']) + target_handles = self._generate_target_handles(query["targets"]) matched_links = self.local_backend.get_matched_links( link_type=query["type"], target_handles=target_handles ) @@ -205,7 +205,9 @@ def get_link_handles(self, link_filter: LinkFilter) -> HandleSetT: ) elif link_filter.filter_type == LinkFilterType.TARGETS: return self.local_backend.get_matched_links( - link_filter.link_type, link_filter.targets, toplevel_only=link_filter.toplevel_only + link_filter.link_type, + link_filter.targets, + toplevel_only=link_filter.toplevel_only, ) elif link_filter.filter_type == LinkFilterType.NAMED_TYPE: return self.local_backend.get_all_links( @@ -235,8 +237,8 @@ def query( if no_iterator: logger().debug( { - 'message': '[DistributedAtomSpace][query] - Start', - 'data': {'query': query, 'parameters': parameters}, + "message": "[DistributedAtomSpace][query] - Start", + "data": {"query": query, "parameters": parameters}, } ) query_results = self._recursive_query(query, parameters) @@ -249,25 +251,25 @@ def query( def custom_query( self, index_id: str, query: list[OrderedDict[str, str]], **kwargs ) -> Iterator | tuple[int, list[AtomT]]: - if kwargs.pop('no_iterator', True): + if kwargs.pop("no_iterator", True): return self.local_backend.get_atoms_by_index(index_id, query=query, **kwargs) else: - if kwargs.get('cursor') is None: - kwargs['cursor'] = 0 + if kwargs.get("cursor") is None: + kwargs["cursor"] = 0 cursor, answer = self.local_backend.get_atoms_by_index(index_id, query=query, **kwargs) - kwargs['backend'] = self.local_backend - kwargs['index_id'] = index_id - kwargs['cursor'] = cursor + kwargs["backend"] = self.local_backend + kwargs["index_id"] = index_id + kwargs["cursor"] = cursor return CustomQuery(ListIterator(answer), **kwargs) def count_atoms(self, parameters: Optional[Dict[str, Any]] = None) -> Dict[str, int]: - if parameters and parameters.get('context') == 'remote': + if parameters and parameters.get("context") == "remote": return {} return self.local_backend.count_atoms(parameters) def commit(self, **kwargs) -> None: - if kwargs.get('buffer'): - self.local_backend.commit(buffer=kwargs['buffer']) + if kwargs.get("buffer"): + self.local_backend.commit(buffer=kwargs["buffer"]) self.local_backend.commit() def reindex(self, pattern_index_templates: Optional[Dict[str, Dict[str, Any]]] = None): @@ -292,7 +294,7 @@ def fetch( port: Optional[int] = None, **kwargs, ) -> Any: - if not self.system_parameters.get('running_on_server'): # Local + if not self.system_parameters.get("running_on_server"): # Local if host is not None and port is not None: server = FunctionsClient(host, port) else: @@ -305,14 +307,14 @@ def fetch( except Exception as e: das_error(e) else: - if 'atom_type' not in query: - das_error(ValueError('Invalid query: missing atom_type')) + if "atom_type" not in query: + das_error(ValueError("Invalid query: missing atom_type")) - atom_type = query['atom_type'] + atom_type = query["atom_type"] - if atom_type == 'node': + if atom_type == "node": return self._process_node(query) - elif atom_type == 'link': + elif atom_type == "link": return self._process_link(query) else: das_error( @@ -330,7 +332,10 @@ def get_atoms_by_field(self, query: list[OrderedDict[str, str]]) -> HandleListT: return self.local_backend.get_atoms_by_field(query) def get_atoms_by_text_field( - self, text_value: str, field: Optional[str] = None, text_index_id: Optional[str] = None + self, + text_value: str, + field: Optional[str] = None, + text_index_id: Optional[str] = None, ) -> HandleListT: return self.local_backend.get_atoms_by_text_field(text_value, field, text_index_id) diff --git a/src/hyperon_das/query_engines/query_engine_protocol.py b/src/hyperon_das/query_engines/query_engine_protocol.py index 02a4e7f..ff3f4c6 100644 --- a/src/hyperon_das/query_engines/query_engine_protocol.py +++ b/src/hyperon_das/query_engines/query_engine_protocol.py @@ -314,7 +314,10 @@ def get_atoms_by_field(self, query: Query) -> HandleListT: @abstractmethod def get_atoms_by_text_field( - self, text_value: str, field: Optional[str] = None, text_index_id: Optional[str] = None + self, + text_value: str, + field: Optional[str] = None, + text_index_id: Optional[str] = None, ) -> HandleListT: """ Retrieves a list of atom handles based on a text field value, with optional field and index ID. diff --git a/src/hyperon_das/query_engines/remote_query_engine.py b/src/hyperon_das/query_engines/remote_query_engine.py index 1cb447a..84c790f 100644 --- a/src/hyperon_das/query_engines/remote_query_engine.py +++ b/src/hyperon_das/query_engines/remote_query_engine.py @@ -24,10 +24,10 @@ class QueryScopes(Enum): - REMOTE_ONLY = 'remote_only' - SYNCHRONOUS_UPDATE = 'synchronous_update' - LOCAL_ONLY = 'local_only' - LOCAL_AND_REMOTE = 'local_and_remote' + REMOTE_ONLY = "remote_only" + SYNCHRONOUS_UPDATE = "synchronous_update" + LOCAL_ONLY = "local_only" + LOCAL_AND_REMOTE = "local_and_remote" class RemoteQueryEngine(QueryEngine): @@ -41,9 +41,9 @@ def __init__( self.system_parameters = system_parameters self.local_query_engine = LocalQueryEngine(backend, cache_controller, kwargs) self.cache_controller = cache_controller - self.__mode = kwargs.get('mode', 'read-only') - self.host = kwargs.get('host') - self.port = kwargs.get('port') + self.__mode = kwargs.get("mode", "read-only") + self.host = kwargs.get("host") + self.port = kwargs.get("port") if not self.host or not self.port: das_error(InvalidDASParameters(message="'host' and 'port' are mandatory parameters")) self.remote_das = FunctionsClient(self.host, self.port) @@ -76,7 +76,7 @@ def get_links(self, link_filter: LinkFilter) -> List[LinkT]: def get_link_handles(self, link_filter: LinkFilter) -> HandleSetT: # TODO Implement get_link_handles() in faas client - return {link['handle'] for link in self.get_links(link_filter)} + return {link["handle"] for link in self.get_links(link_filter)} def get_incoming_links(self, atom_handle: HandleT, **kwargs) -> IncomingLinksT: links = self.local_query_engine.get_incoming_links(atom_handle, **kwargs) @@ -85,13 +85,13 @@ def get_incoming_links(self, atom_handle: HandleT, **kwargs) -> IncomingLinksT: return links def custom_query(self, index_id: str, query: Query, **kwargs) -> Iterator: - kwargs.pop('no_iterator', None) - if kwargs.get('cursor') is None: - kwargs['cursor'] = 0 + kwargs.pop("no_iterator", None) + if kwargs.get("cursor") is None: + kwargs["cursor"] = 0 answer = self.remote_das.custom_query(index_id, query=query, **kwargs) - kwargs['backend'] = self.remote_das - kwargs['index_id'] = index_id - kwargs['is_remote'] = True + kwargs["backend"] = self.remote_das + kwargs["index_id"] = index_id + kwargs["is_remote"] = True return CustomQuery(ListIterator(answer), **kwargs) def query( @@ -100,7 +100,7 @@ def query( parameters: Dict[str, Any] | None = None, ) -> Iterator[QueryAnswer] | list[dict[str, Any]]: parameters = parameters or {} - query_scope = parameters.get('query_scope', 'remote_only') + query_scope = parameters.get("query_scope", "remote_only") try: query_scope = QueryScopes(query_scope) except ValueError: @@ -123,31 +123,31 @@ def query( if query_scope in {QueryScopes.REMOTE_ONLY, QueryScopes.SYNCHRONOUS_UPDATE}: if query_scope == QueryScopes.SYNCHRONOUS_UPDATE: self.commit() - parameters['no_iterator'] = True + parameters["no_iterator"] = True return self.remote_das.query(query, parameters) return self.local_query_engine.query(query, parameters) def count_atoms(self, parameters: Optional[Dict[str, Any]] = None) -> Dict[str, int]: - if (context := parameters.get('context') if parameters else None) == 'local': + if (context := parameters.get("context") if parameters else None) == "local": return self.local_query_engine.count_atoms(parameters) - if context == 'remote': + if context == "remote": return self.remote_das.count_atoms(parameters) local_answer = self.local_query_engine.count_atoms(parameters) remote_answer = self.remote_das.count_atoms(parameters) return { k: (local_answer.get(k, 0) + remote_answer.get(k, 0)) - for k in ['node_count', 'link_count', 'atom_count'] + for k in ["node_count", "link_count", "atom_count"] } # def commit(self, **kwargs) -> None: - if self.__mode == 'read-write': + if self.__mode == "read-write": if self.local_query_engine.has_buffer(): self.remote_das.commit_changes(buffer=self.local_query_engine.buffer) self.remote_das.commit_changes() - elif self.__mode == 'read-only': + elif self.__mode == "read-only": das_error(PermissionError("Commit can't be executed in read mode")) else: das_error(ValueError("Invalid mode: '{self.__mode}'. Use 'read-only' or 'read-write'")) @@ -191,7 +191,10 @@ def get_atoms_by_field(self, query: Query) -> HandleListT: return self.remote_das.get_atoms_by_field(query) def get_atoms_by_text_field( - self, text_value: str, field: Optional[str] = None, text_index_id: Optional[str] = None + self, + text_value: str, + field: Optional[str] = None, + text_index_id: Optional[str] = None, ) -> HandleListT: return self.remote_das.get_atoms_by_text_field(text_value, field, text_index_id) diff --git a/src/hyperon_das/tokenizers/dict_query_tokenizer.py b/src/hyperon_das/tokenizers/dict_query_tokenizer.py index 8c3dee3..f0a5430 100644 --- a/src/hyperon_das/tokenizers/dict_query_tokenizer.py +++ b/src/hyperon_das/tokenizers/dict_query_tokenizer.py @@ -156,11 +156,16 @@ def _tokenize( raise ValueError(f"Unsupported query: {_query}") match query: - case {"or": list()} | {"and": list()} | {"not": dict()} | { - "atom_type": "link", - "type": str(), - "targets": list(), - }: + case ( + {"or": list()} + | {"and": list()} + | {"not": dict()} + | { + "atom_type": "link", + "type": str(), + "targets": list(), + } + ): return TOKENS_DELIMITER.join(_tokenize(query).to_tokens()) case _: raise ValueError( diff --git a/src/hyperon_das/tokenizers/elements.py b/src/hyperon_das/tokenizers/elements.py index 1c5a289..f68341e 100644 --- a/src/hyperon_das/tokenizers/elements.py +++ b/src/hyperon_das/tokenizers/elements.py @@ -196,7 +196,9 @@ class LinkTemplate(Link): Inherits from the Link class and is used to denote links that are templates. """ - def __init__(self, type: str, targets: list[Any] = []) -> None: + def __init__(self, type: str, targets: list[Any]) -> None: + if not targets: + targets = [] super().__init__(type, targets, is_template=True) diff --git a/src/hyperon_das/traverse_engines.py b/src/hyperon_das/traverse_engines.py index 3580c59..dbb75c6 100644 --- a/src/hyperon_das/traverse_engines.py +++ b/src/hyperon_das/traverse_engines.py @@ -11,7 +11,7 @@ class TraverseEngine: def __init__(self, handle: str, **kwargs) -> None: - self.das: DistributedAtomSpace = kwargs['das'] + self.das: DistributedAtomSpace = kwargs["das"] try: atom = self.das.get_atom(handle) @@ -55,15 +55,15 @@ def get_links(self, **kwargs) -> TraverseLinksIterator: >>> next(links) """ cursor, incoming_links = self.das.get_incoming_links( - atom_handle=self._cursor['handle'], + atom_handle=self._cursor["handle"], no_iterator=False, targets_document=True, cursor=0, - chunk_size=kwargs.get('chunk_size', 500), + chunk_size=kwargs.get("chunk_size", 500), ) assert cursor == 0 assert isinstance(incoming_links, (LocalIncomingLinks, RemoteIncomingLinks)) - return TraverseLinksIterator(source=incoming_links, cursor=self._cursor['handle'], **kwargs) + return TraverseLinksIterator(source=incoming_links, cursor=self._cursor["handle"], **kwargs) def get_neighbors(self, **kwargs) -> TraverseNeighborsIterator: """Get all of "neighbors" that pointing to current cursor. @@ -97,7 +97,7 @@ def get_neighbors(self, **kwargs) -> TraverseNeighborsIterator: ) >>> next(neighbors) """ - custom_filter = kwargs.pop('filters', None) + custom_filter = kwargs.pop("filters", None) filter_link = filter_target = None if custom_filter is not None and not isinstance(custom_filter, tuple): @@ -107,7 +107,7 @@ def get_neighbors(self, **kwargs) -> TraverseNeighborsIterator: filter_link, filter_target = custom_filter if filter_link is not None: - kwargs['filter'] = filter_link + kwargs["filter"] = filter_link filtered_links = self.get_links(targets_only=True, **kwargs) return TraverseNeighborsIterator(source=filtered_links, filter=filter_target) @@ -152,7 +152,7 @@ def goto(self, handle: str) -> Dict[str, Any]: Dict[str, Any]: The current cursor. A Python dict with all atom data. Examples: - >>> traverse_engine.goto('asd1234567890') + >>> traverse_engine.goto("asd1234567890") >>> { 'handle': 'asd1234567890', 'type': 'AI, diff --git a/src/hyperon_das/utils.py b/src/hyperon_das/utils.py index 1b87a46..3fcf8bf 100644 --- a/src/hyperon_das/utils.py +++ b/src/hyperon_das/utils.py @@ -230,31 +230,29 @@ def check_versions(response_body: bytes) -> None: if not remote_das_version or not remote_atomdb_version: raise ValueError("Invalid response from server, missing version info.") - + # local packages versions - das_version = get_package_version('hyperon_das') - atom_db_version = get_package_version('hyperon_das_atomdb') + das_version = get_package_version("hyperon_das") + atom_db_version = get_package_version("hyperon_das_atomdb") if not das_version or not atom_db_version: raise ValueError("Missing version info in the local packages.") is_atomdb_compatible = compare_minor_versions( - remote_atomdb_version, - atom_db_version, - ) + remote_atomdb_version, + atom_db_version, + ) is_das_compatible = compare_minor_versions( - remote_das_version, - das_version, - ) + remote_das_version, + das_version, + ) if not is_atomdb_compatible or not is_das_compatible: local_versions = f"hyperon-das: {das_version}, hyperon-das-atomdb: {atom_db_version}" remote_versions = ( - f"hyperon-das: {remote_das_version}, hyperon-das-atomdb: {remote_atomdb_version}" - ) - error_message = ( - f"Version mismatch. Local: {local_versions}. " f"Remote: {remote_versions}." - ) + f"hyperon-das: {remote_das_version}, hyperon-das-atomdb: {remote_atomdb_version}" + ) + error_message = f"Version mismatch. Local: {local_versions}. Remote: {remote_versions}." logger().error(error_message) raise Exception(error_message) diff --git a/src/hyperon_das_atomdb/__init__.py b/src/hyperon_das_atomdb/__init__.py index 9fb9b3b..0b656f3 100644 --- a/src/hyperon_das_atomdb/__init__.py +++ b/src/hyperon_das_atomdb/__init__.py @@ -16,4 +16,4 @@ "AtomDoesNotExist", ] -__version__ = '0.8.10' +__version__ = "0.8.10" diff --git a/src/hyperon_das_atomdb/adapters/redis_mongo_db.py b/src/hyperon_das_atomdb/adapters/redis_mongo_db.py index da56c10..9bfddad 100644 --- a/src/hyperon_das_atomdb/adapters/redis_mongo_db.py +++ b/src/hyperon_das_atomdb/adapters/redis_mongo_db.py @@ -327,7 +327,9 @@ def _connection_mongo_db( return self.mongo_db except ValueError as e: logger().error(f"An error occurred while creating a MongoDB client - Details: {str(e)}") - raise ConnectionMongoDBException(message="error creating a MongoClient", details=str(e)) + raise ConnectionMongoDBException( + message="error creating a MongoClient", details=str(e) + ) from e @staticmethod def _connection_redis( @@ -357,7 +359,7 @@ def _connection_redis( message = ( f"Connecting to {redis_type} at " + ( - f"{redis_username}:{len(redis_password)*'*'}@" + f"{redis_username}:{len(redis_password) * '*'}@" if redis_username and redis_password else "" ) @@ -780,7 +782,7 @@ def get_matched_type_template(self, template: list[Any], **kwargs) -> HandleSetT return templates_matched except Exception as exception: logger().error(f"Failed to get matched type template - Details: {str(exception)}") - raise ValueError(str(exception)) + raise ValueError(str(exception)) from exception def get_matched_type(self, link_type: str, **kwargs) -> HandleSetT: named_type_hash = ExpressionHasher.named_type_hash(link_type) @@ -1400,7 +1402,7 @@ def _retrieve_documents_by_index( def reindex(self, pattern_index_templates: dict[str, list[DocumentT]] | None = None) -> None: if isinstance(pattern_index_templates, list): self._save_pattern_index(deepcopy(pattern_index_templates)) - self._setup_indexes({'pattern_index_templates': pattern_index_templates}) + self._setup_indexes({"pattern_index_templates": pattern_index_templates}) self.redis.flushall() self._update_atom_indexes(self.mongo_atoms_collection.find({})) @@ -1472,7 +1474,8 @@ def create_field_index( logger().error(f"Error: {str(e)}") finally: if not index_id: - return ( # pylint: disable=lost-exception + # B012: `return` inside `finally` blocks cause exceptions to be silenced + return ( # noqa: B012 f"Index creation failed, Details: {str(exc)}" if exc else "Index creation failed" diff --git a/src/hyperon_das_atomdb/utils/expression_hasher.py b/src/hyperon_das_atomdb/utils/expression_hasher.py index 918ed69..724c4cf 100644 --- a/src/hyperon_das_atomdb/utils/expression_hasher.py +++ b/src/hyperon_das_atomdb/utils/expression_hasher.py @@ -116,5 +116,5 @@ def composite_hash(hash_base: str | list[Any]) -> str: # TODO unreachable else: raise ValueError( - "Invalid base to compute composite hash: " f"{type(hash_base)}: {hash_base}" + f"Invalid base to compute composite hash: {type(hash_base)}: {hash_base}" ) diff --git a/src/link_creation_agent/doc/DaC/das_link_creation_diagram.py b/src/link_creation_agent/doc/DaC/das_link_creation_diagram.py index 6ca6fd3..d2bdddb 100644 --- a/src/link_creation_agent/doc/DaC/das_link_creation_diagram.py +++ b/src/link_creation_agent/doc/DaC/das_link_creation_diagram.py @@ -34,17 +34,17 @@ """ node_attributes = { - "label": "", - "direction": "RL", - "shape": "rect", - "width": "1", - "height": "1", - "fixedsize": "false", - "labeljust": "l", - "style": "filled", - "fillcolor": "dodgerblue3", - "fontcolor": "white", - } + "label": "", + "direction": "RL", + "shape": "rect", + "width": "1", + "height": "1", + "fixedsize": "false", + "labeljust": "l", + "style": "filled", + "fillcolor": "dodgerblue3", + "fontcolor": "white", +} # with Diagram("DAS Link Creation", filename="doc/assets/das_link_creation_diagram.png", show=False): @@ -65,29 +65,48 @@ # das_link_creation_node >> edges[0] >> client with Diagram("DAS Link Creation", filename="doc/assets/das_link_creation_hla", show=False): - client = Person( - name="DAS Server", description="Sends a Link creation request" - ) + client = Person(name="DAS Server", description="Sends a Link creation request") with SystemBoundary("DAS Link Creation Agent"): - das_node_server = Container(name="DAS Node Server", technology="DAS NODE", description="Receives a link creation request") - link_creation_agent = Container(name="DAS LCA", technology="C++ Core", description="Process a link creation request") - link_creation_agent_service = Container(name="DAS LCA", technology="C++ Service", description="Process multiple queries") - das_node_client = Container(name="DAS Node Client", technology="DAS NODE", description="Sends atoms creation requests") - das_node_client2 = Container(name="DAS Node Client", technology="DAS NODE", description="Sends query requests") - - - das_query_agent = Container(name="DAS Query Agent", technology="DAS NODE", description="Process Template Queries") + das_node_server = Container( + name="DAS Node Server", + technology="DAS NODE", + description="Receives a link creation request", + ) + link_creation_agent = Container( + name="DAS LCA", + technology="C++ Core", + description="Process a link creation request", + ) + link_creation_agent_service = Container( + name="DAS LCA", + technology="C++ Service", + description="Process multiple queries", + ) + das_node_client = Container( + name="DAS Node Client", + technology="DAS NODE", + description="Sends atoms creation requests", + ) + das_node_client2 = Container( + name="DAS Node Client", + technology="DAS NODE", + description="Sends query requests", + ) + + das_query_agent = Container( + name="DAS Query Agent", + technology="DAS NODE", + description="Process Template Queries", + ) das_node_client >> Relationship("Create links and nodes") >> client client >> Relationship("Request Link Creation") >> das_node_server das_node_server >> Relationship("Start Link Creation") >> link_creation_agent link_creation_agent >> das_node_client2 << link_creation_agent - das_node_client2 >> Relationship("Request Query template results") >> das_query_agent - - das_query_agent >> Relationship("Returns a Query Iterator") >> das_node_client2 - link_creation_agent >> Relationship("Spawn a LCA service") >> link_creation_agent_service - link_creation_agent_service >> Relationship("Send create atom requests") >> das_node_client - + (das_node_client2 >> Relationship("Request Query template results") >> das_query_agent) + das_query_agent >> Relationship("Returns a Query Iterator") >> das_node_client2 + (link_creation_agent >> Relationship("Spawn a LCA service") >> link_creation_agent_service) + (link_creation_agent_service >> Relationship("Send create atom requests") >> das_node_client) diff --git a/src/tests/python/helpers.py b/src/tests/python/helpers.py index 3c16256..529c6f4 100644 --- a/src/tests/python/helpers.py +++ b/src/tests/python/helpers.py @@ -60,7 +60,7 @@ def dict_to_link_params(link_dict: dict) -> LinkT: try: return LinkT(**params) except TypeError as ex: - raise AssertionError(f"{type(ex)}: {ex} - {params=}") + raise AssertionError(f"{type(ex)}: {ex} - {params=}") from ex class AnimalBaseHandlesCollection: diff --git a/src/tests/python/integration/adapters/animals_kb.py b/src/tests/python/integration/adapters/animals_kb.py index 3bea970..6d64318 100644 --- a/src/tests/python/integration/adapters/animals_kb.py +++ b/src/tests/python/integration/adapters/animals_kb.py @@ -22,7 +22,11 @@ node_docs[human] = {"type": "Concept", "name": "human"} node_docs[monkey] = {"type": "Concept", "name": "monkey"} node_docs[chimp] = {"type": "Concept", "name": "chimp"} -node_docs[mammal] = {"type": "Concept", "name": "mammal", "custom_attributes": {"name": "mammal"}} +node_docs[mammal] = { + "type": "Concept", + "name": "mammal", + "custom_attributes": {"name": "mammal"}, +} node_docs[reptile] = {"type": "Concept", "name": "reptile"} node_docs[snake] = {"type": "Concept", "name": "snake"} node_docs[dinosaur] = {"type": "Concept", "name": "dinosaur"} diff --git a/src/tests/python/integration/adapters/test_redis_mongo.py b/src/tests/python/integration/adapters/test_redis_mongo.py index 662c2ef..481b036 100644 --- a/src/tests/python/integration/adapters/test_redis_mongo.py +++ b/src/tests/python/integration/adapters/test_redis_mongo.py @@ -19,7 +19,15 @@ rhino, similarity_docs, ) -from .helpers import Database, PyMongoFindExplain, _db_down, _db_up, cleanup, mongo_port, redis_port +from .helpers import ( + Database, + PyMongoFindExplain, + _db_down, + _db_up, + cleanup, + mongo_port, + redis_port, +) def metta_to_links(input_str): @@ -27,18 +35,18 @@ def parse_tokens(tokens): result = [] while tokens: token = tokens.pop(0) - if token == '(': + if token == "(": nested = parse_tokens(tokens) result.append(nested) - elif token == ')': + elif token == ")": break else: result.append({"type": "Symbol", "name": token}) return {"type": "Expression", "targets": result} - input_str = input_str.replace('(', ' ( ').replace(')', ' ) ') + input_str = input_str.replace("(", " ( ").replace(")", " ) ") tokens = input_str.split() - return parse_tokens(tokens)['targets'][0] + return parse_tokens(tokens)["targets"][0] class TestRedisMongo: @@ -1214,7 +1222,8 @@ def test_add_fields_to_atoms(self, _cleanup, _db: RedisMongoDB): assert db.get_atom(link_handle).custom_attributes["score"] == 0.5 @pytest.mark.parametrize( - "node", [({"type": "A", "name": "type_a", "custom_attributes": {"status": "ready"}})] + "node", + [({"type": "A", "name": "type_a", "custom_attributes": {"status": "ready"}})], ) def test_get_atoms_by_index_custom_att(self, node, _cleanup, _db: RedisMongoDB): node = _db.add_node(NodeT(**node)) @@ -1339,7 +1348,7 @@ def test_commit_with_buffer(self, _cleanup, _db: RedisMongoDB): "arity": 3, } ], - '(synonyms (gene ENSG00000278267) (microRNA_6859-1 hsa-mir-6859-1 HGNC:50039 microRNA_mir-6859-1 MIR6859-1))', + "(synonyms (gene ENSG00000278267) (microRNA_6859-1 hsa-mir-6859-1 HGNC:50039 microRNA_mir-6859-1 MIR6859-1))", [ ("synonyms", "*", "*"), ], @@ -1354,7 +1363,7 @@ def test_commit_with_buffer(self, _cleanup, _db: RedisMongoDB): "arity": 3, } ], - '(tf_name (motif ENSG00000156273) BACH1)', + "(tf_name (motif ENSG00000156273) BACH1)", [ ("tf_name", "*", "*"), ], diff --git a/src/tests/python/integration/conftest.py b/src/tests/python/integration/conftest.py index a3a619f..81f9f9e 100644 --- a/src/tests/python/integration/conftest.py +++ b/src/tests/python/integration/conftest.py @@ -5,7 +5,10 @@ def pytest_addoption(parser): parser.addoption( - "--build", action="store_true", default=False, help="Rebuilds container's test image." + "--build", + action="store_true", + default=False, + help="Rebuilds container's test image.", ) parser.addoption( "--no-destroy", diff --git a/src/tests/python/integration/helpers.py b/src/tests/python/integration/helpers.py index 5c7dc0c..10db685 100644 --- a/src/tests/python/integration/helpers.py +++ b/src/tests/python/integration/helpers.py @@ -78,18 +78,18 @@ def enforce_containers_removal(): @pytest.fixture(scope="module") def das_remote_fixture_module(environment_manager): - yield DAS(query_engine='remote', host=remote_das_host, port=remote_das_port) + yield DAS(query_engine="remote", host=remote_das_host, port=remote_das_port) @pytest.fixture(scope="class") def das_local_fixture_class(): _db_up() yield DAS( - query_engine='local', - atomdb='redis_mongo', + query_engine="local", + atomdb="redis_mongo", mongo_port=mongo_port, - mongo_username='dbadmin', - mongo_password='dassecret', + mongo_username="dbadmin", + mongo_password="dassecret", redis_port=redis_port, redis_cluster=False, redis_ssl=False, @@ -101,11 +101,11 @@ def das_local_fixture_class(): def das_local_fixture(): _db_up() yield DAS( - query_engine='local', - atomdb='redis_mongo', + query_engine="local", + atomdb="redis_mongo", mongo_port=mongo_port, - mongo_username='dbadmin', - mongo_password='dassecret', + mongo_username="dbadmin", + mongo_password="dassecret", redis_port=redis_port, redis_cluster=False, redis_ssl=False, diff --git a/src/tests/python/integration/test_attention_broker_gateway.py b/src/tests/python/integration/test_attention_broker_gateway.py index 009ef87..ff3a417 100644 --- a/src/tests/python/integration/test_attention_broker_gateway.py +++ b/src/tests/python/integration/test_attention_broker_gateway.py @@ -8,26 +8,26 @@ import hyperon_das.grpc.common_pb2 as common from hyperon_das.cache.attention_broker_gateway import AttentionBrokerGateway -HOST = 'localhost' +HOST = "localhost" PORT = 27000 -SYSTEM_PARAMETERS = {'attention_broker_hostname': HOST, 'attention_broker_port': PORT} +SYSTEM_PARAMETERS = {"attention_broker_hostname": HOST, "attention_broker_port": PORT} RECEIVED = None class AttentionBrokerMock(ab_grpc.AttentionBrokerServicer): def ping(self, request, context): - return common.Ack(error=0, msg='OK') + return common.Ack(error=0, msg="OK") def correlate(self, request, context): global RECEIVED RECEIVED = request.handle_list - return common.Ack(error=0, msg='OK') + return common.Ack(error=0, msg="OK") def stimulate(self, request, context): global RECEIVED RECEIVED = request.handle_count - return common.Ack(error=0, msg='OK') + return common.Ack(error=0, msg="OK") def server_up(): @@ -48,9 +48,9 @@ def test_creation(self): with pytest.raises(ValueError): AttentionBrokerGateway({}) with pytest.raises(ValueError): - AttentionBrokerGateway({'attention_broker_hostname': 'localhost'}) + AttentionBrokerGateway({"attention_broker_hostname": "localhost"}) with pytest.raises(ValueError): - AttentionBrokerGateway({'attention_broker_port': 27000}) + AttentionBrokerGateway({"attention_broker_port": 27000}) grpc_server = server_up() AttentionBrokerGateway(SYSTEM_PARAMETERS) server_down(grpc_server) @@ -58,18 +58,18 @@ def test_creation(self): def test_ping(self): grpc_server = server_up() gateway = AttentionBrokerGateway(SYSTEM_PARAMETERS) - assert gateway.ping() == 'OK' + assert gateway.ping() == "OK" server_down(grpc_server) def _check_correlate(self, gateway, message): global RECEIVED - assert gateway.correlate(message) == 'OK' + assert gateway.correlate(message) == "OK" assert list(RECEIVED) == list(message) def _check_stimulate(self, gateway, stimuli): global RECEIVED message = {handle: count for handle, count in stimuli} - assert gateway.stimulate(message) == 'OK' + assert gateway.stimulate(message) == "OK" assert len(RECEIVED) == len(message) for key in RECEIVED: assert RECEIVED[key] == message[key] @@ -80,11 +80,11 @@ def test_correlate(self): with pytest.raises(ValueError): self._check_correlate(gateway, None) self._check_correlate(gateway, []) - self._check_correlate(gateway, ['h1']) - self._check_correlate(gateway, ['h1', 'h2']) - self._check_correlate(gateway, ['h1', 'h2', 'h2']) - self._check_correlate(gateway, ['h2', 'h1', 'h2']) - self._check_correlate(gateway, set(['h1', 'h2', 'h2'])) + self._check_correlate(gateway, ["h1"]) + self._check_correlate(gateway, ["h1", "h2"]) + self._check_correlate(gateway, ["h1", "h2", "h2"]) + self._check_correlate(gateway, ["h2", "h1", "h2"]) + self._check_correlate(gateway, set(["h1", "h2", "h2"])) server_down(grpc_server) def test_stimulate(self): @@ -93,7 +93,7 @@ def test_stimulate(self): with pytest.raises(ValueError): self._check_correlate(gateway, None) self._check_stimulate(gateway, []) - self._check_stimulate(gateway, [('h1', 1)]) - self._check_stimulate(gateway, [('h1', 1), ('h2', 1)]) - self._check_stimulate(gateway, [('h1', 1), ('h2', 2)]) + self._check_stimulate(gateway, [("h1", 1)]) + self._check_stimulate(gateway, [("h1", 1), ("h2", 1)]) + self._check_stimulate(gateway, [("h1", 1), ("h2", 2)]) server_down(grpc_server) diff --git a/src/tests/python/integration/test_client.py b/src/tests/python/integration/test_client.py index 3902b73..e9d13f6 100644 --- a/src/tests/python/integration/test_client.py +++ b/src/tests/python/integration/test_client.py @@ -4,7 +4,7 @@ import hyperon_das.link_filters as link_filter from hyperon_das.client import FunctionsClient -from tests.python.integration.helpers import faas_fixture, metta_animal_base_handles +from tests.python.integration.helpers import metta_animal_base_handles class TestVultrClientIntegration: @@ -15,16 +15,16 @@ def test_get_atom( result = faas_fixture.get_atom(handle=metta_animal_base_handles.human) assert result.handle == metta_animal_base_handles.human assert result.name == '"human"' - assert result.named_type == 'Symbol' + assert result.named_type == "Symbol" result = faas_fixture.get_atom(handle=metta_animal_base_handles.monkey) assert result.handle == metta_animal_base_handles.monkey assert result.name == '"monkey"' - assert result.named_type == 'Symbol' + assert result.named_type == "Symbol" result = faas_fixture.get_atom(handle=metta_animal_base_handles.similarity_human_monkey) assert result.handle == metta_animal_base_handles.similarity_human_monkey - assert result.named_type == 'Expression' + assert result.named_type == "Expression" assert result.targets == [ metta_animal_base_handles.Similarity, metta_animal_base_handles.human, @@ -33,16 +33,16 @@ def test_get_atom( def test_get_links(self, faas_fixture: FunctionsClient): # noqa: F811 links1 = faas_fixture.get_links( - link_filter.FlatTypeTemplate(['Symbol', 'Symbol', 'Symbol'], 'Expression') + link_filter.FlatTypeTemplate(["Symbol", "Symbol", "Symbol"], "Expression") ) - links2 = faas_fixture.get_links(link_filter.NamedType('Expression')) + links2 = faas_fixture.get_links(link_filter.NamedType("Expression")) assert len(links1) == 43 assert len(links2) == 43 def test_count_atoms(self, faas_fixture: FunctionsClient): ret = faas_fixture.count_atoms() print(ret) - assert ret == {'atom_count': 66} + assert ret == {"atom_count": 66} def test_query(self, faas_fixture: FunctionsClient): answer = faas_fixture.query( @@ -138,18 +138,18 @@ def test_get_incoming_links(self, faas_fixture: FunctionsClient): ) assert len(response_atoms) == 8 for atom in response_atoms: - assert isinstance( - atom, LinkT - ), f"Each item in body must be a LinkT instance. Received: {atom}" + assert isinstance(atom, LinkT), ( + f"Each item in body must be a LinkT instance. Received: {atom}" + ) assert len(atom.targets) == 3 assert atom.handle in [a.handle for a in expected_atoms] response_atoms = faas_fixture.get_incoming_links(metta_animal_base_handles.human) assert len(response_atoms) == 8 for atom in response_atoms: - assert isinstance( - atom, LinkT - ), f"Each item in body must be a LinkT instance. Received: {atom}" + assert isinstance(atom, LinkT), ( + f"Each item in body must be a LinkT instance. Received: {atom}" + ) assert len(atom.targets) == 3 assert atom.handle in [a.handle for a in expected_atoms] @@ -158,9 +158,9 @@ def test_get_incoming_links(self, faas_fixture: FunctionsClient): ) assert len(response_atoms_targets) == 8 for atom in response_atoms_targets: - assert isinstance( - atom, LinkT - ), f"Each item in body must be a LinkT instance. Received: {atom}" + assert isinstance(atom, LinkT), ( + f"Each item in body must be a LinkT instance. Received: {atom}" + ) atom_targets = [a.to_dict() for a in atom.targets_documents] assert len(atom_targets) == 3 assert atom.handle in expected_atoms_targets diff --git a/src/tests/python/integration/test_das_query_api.py b/src/tests/python/integration/test_das_query_api.py index 9d81b96..a388fae 100644 --- a/src/tests/python/integration/test_das_query_api.py +++ b/src/tests/python/integration/test_das_query_api.py @@ -26,15 +26,15 @@ def setup_class(cls): _db_up() remote_up(build=False) - das_instance["local_ram"] = DistributedAtomSpace(query_engine='local', atomdb='ram') + das_instance["local_ram"] = DistributedAtomSpace(query_engine="local", atomdb="ram") load_metta_animals_base(das_instance["local_ram"]) das_instance["local_redis_mongo"] = DistributedAtomSpace( - query_engine='local', - atomdb='redis_mongo', + query_engine="local", + atomdb="redis_mongo", mongo_port=mongo_port, - mongo_username='dbadmin', - mongo_password='dassecret', + mongo_username="dbadmin", + mongo_password="dassecret", redis_port=redis_port, redis_cluster=False, redis_ssl=False, @@ -43,7 +43,7 @@ def setup_class(cls): das_instance["local_redis_mongo"].commit_changes() das_instance["remote"] = DistributedAtomSpace( - query_engine='remote', host=remote_das_host, port=get_remote_das_port() + query_engine="remote", host=remote_das_host, port=get_remote_das_port() ) @classmethod @@ -56,7 +56,7 @@ def _cleanup(self, request): return cleanup(request) def test_count_atoms(self): - for key, das in das_instance.items(): + for _key, das in das_instance.items(): count = das.count_atoms({}) assert count["atom_count"] == 66 diff --git a/src/tests/python/integration/test_iterators.py b/src/tests/python/integration/test_iterators.py index f28f822..d34ded3 100644 --- a/src/tests/python/integration/test_iterators.py +++ b/src/tests/python/integration/test_iterators.py @@ -9,8 +9,6 @@ _db_down, _db_up, cleanup, - das_local_fixture_class, - das_remote_fixture_module, get_remote_das_port, load_metta_animals_base, metta_animal_base_handles, @@ -33,7 +31,7 @@ def human_handle(self): return metta_animal_base_handles.human def _is_expression_atom(self, atom: dict) -> bool: - if atom['named_type'] != 'Expression': + if atom["named_type"] != "Expression": return False return True @@ -54,11 +52,11 @@ def _human_incoming_links(self): def _check_asserts(self, das: DistributedAtomSpace, iterator: QueryAnswerIterator): current_value = iterator.get() assert current_value == das.query_engine.get_atom( - iterator.get()['handle'], targets_document=True + iterator.get()["handle"], targets_document=True ) assert isinstance(current_value, dict) assert iterator.is_empty() is False - link_handles = sorted([item['handle'] for item in iterator]) + link_handles = sorted([item["handle"] for item in iterator]) assert len(link_handles) == 8 assert link_handles == self._human_incoming_links() assert iterator.is_empty() is True @@ -77,11 +75,11 @@ def test_traverse_links_with_das_ram_only(self, human_handle): def test_traverse_links_with_das_redis_mongo(self, human_handle, _cleanup): _db_up() das = DistributedAtomSpace( - query_engine='local', - atomdb='redis_mongo', + query_engine="local", + atomdb="redis_mongo", mongo_port=mongo_port, - mongo_username='dbadmin', - mongo_password='dassecret', + mongo_username="dbadmin", + mongo_password="dassecret", redis_port=redis_port, redis_cluster=False, redis_ssl=False, @@ -125,16 +123,16 @@ def _human_neighbors(self): ) def _is_literal_atom(self, atom: dict) -> bool: - if atom['is_literal'] is False: + if atom["is_literal"] is False: return False return True def _check_asserts(self, das: DistributedAtomSpace, iterator: TraverseNeighborsIterator): current_value = iterator.get() - assert current_value == das.get_atom(iterator.get()['handle']) + assert current_value == das.get_atom(iterator.get()["handle"]) assert isinstance(current_value, dict) assert iterator.is_empty() is False - node_handles = sorted([item['handle'] for item in iterator]) + node_handles = sorted([item["handle"] for item in iterator]) assert len(node_handles) == 4 assert node_handles == self._human_neighbors() assert iterator.is_empty() is True @@ -153,11 +151,11 @@ def test_traverse_neighbors_with_das_ram_only(self, human_handle): def test_traverse_neighbors_with_das_redis_mongo(self, human_handle, _cleanup): _db_up() das = DistributedAtomSpace( - query_engine='local', - atomdb='redis_mongo', + query_engine="local", + atomdb="redis_mongo", mongo_port=mongo_port, - mongo_username='dbadmin', - mongo_password='dassecret', + mongo_username="dbadmin", + mongo_password="dassecret", redis_port=redis_port, redis_cluster=False, redis_ssl=False, @@ -254,27 +252,27 @@ def _all_links(self): def _asserts(self, das: DistributedAtomSpace): node_index = das.create_field_index( - atom_type='node', fields=['is_literal'], named_type='Symbol' + atom_type="node", fields=["is_literal"], named_type="Symbol" ) link_index_type = das.create_field_index( - atom_type='link', fields=['is_toplevel'], named_type='Expression' + atom_type="link", fields=["is_toplevel"], named_type="Expression" ) link_index_composite_type = das.create_field_index( - atom_type='link', - fields=['is_toplevel'], - composite_type=['Expression', 'Symbol', 'Symbol', 'Symbol'], + atom_type="link", + fields=["is_toplevel"], + composite_type=["Expression", "Symbol", "Symbol", "Symbol"], ) - node_iterator = das.custom_query(node_index, query={'is_literal': True}, no_iterator=False) + node_iterator = das.custom_query(node_index, query={"is_literal": True}, no_iterator=False) link_iterator_type = das.custom_query( link_index_type, - query={'is_toplevel': True}, + query={"is_toplevel": True}, chunk_size=10, no_iterator=False, ) link_iterator_composite_type = das.custom_query( link_index_composite_type, - query={'is_toplevel': True}, + query={"is_toplevel": True}, chunk_size=5, no_iterator=False, ) @@ -288,10 +286,10 @@ def _asserts(self, das: DistributedAtomSpace): def _check_asserts(self, das: DistributedAtomSpace, iterator: CustomQuery): current_value = iterator.get() - assert current_value == das.get_atom(iterator.get()['handle']) + assert current_value == das.get_atom(iterator.get()["handle"]) assert isinstance(current_value, dict) assert iterator.is_empty() is False - handles = sorted([item['handle'] for item in iterator]) + handles = sorted([item["handle"] for item in iterator]) assert iterator.is_empty() is True with pytest.raises(StopIteration): iterator.get() @@ -311,7 +309,7 @@ def test_custom_query_with_local_das_redis_mongo(self, _cleanup, das_local_fixtu @pytest.mark.skip("Waiting fix") def test_custom_query_with_remote_das(self): das = DistributedAtomSpace( - query_engine='remote', host=remote_das_host, port=get_remote_das_port() + query_engine="remote", host=remote_das_host, port=get_remote_das_port() ) self._asserts(das) @@ -319,36 +317,36 @@ def test_get_atom_by_field_local(self, das_local_fixture_class): das = das_local_fixture_class load_metta_animals_base(das) das.commit_changes() - atom_field = das.get_atoms_by_field({'name': '"chimp"'}) + atom_field = das.get_atoms_by_field({"name": '"chimp"'}) assert atom_field def test_get_atoms_by_field_remote(self, das_remote_fixture_module): das = das_remote_fixture_module - atom_field = das.get_atoms_by_field({'name': '"chimp"'}) + atom_field = das.get_atoms_by_field({"name": '"chimp"'}) assert atom_field def test_get_atoms_by_text_field_local(self, das_local_fixture_class): das = das_local_fixture_class load_metta_animals_base(das) das.commit_changes() - with pytest.raises(Exception, match=r'text index required for \$text query'): + with pytest.raises(Exception, match=r"text index required for \$text query"): das.get_atoms_by_text_field(text_value='"') - atom_text_field = das.get_atoms_by_text_field(text_value='"chim', field='name') + atom_text_field = das.get_atoms_by_text_field(text_value='"chim', field="name") assert atom_text_field def test_get_atoms_by_text_field_remote(self, das_remote_fixture_module): das = das_remote_fixture_module - atom_text_field = das.get_atoms_by_text_field(text_value='"chim', field='name') + atom_text_field = das.get_atoms_by_text_field(text_value='"chim', field="name") assert atom_text_field def test_get_atoms_starting_local(self, das_local_fixture_class): das = das_local_fixture_class load_metta_animals_base(das) das.commit_changes() - atom_starting_with = das.get_node_by_name_starting_with('Symbol', '"mon') + atom_starting_with = das.get_node_by_name_starting_with("Symbol", '"mon') assert atom_starting_with def test_get_atoms_starting_remote(self, das_remote_fixture_module): das = das_remote_fixture_module - atom_starting_with = das.get_node_by_name_starting_with('Symbol', '"mon') + atom_starting_with = das.get_node_by_name_starting_with("Symbol", '"mon') assert atom_starting_with diff --git a/src/tests/python/integration/test_local_das.py b/src/tests/python/integration/test_local_das.py index c28b333..36b863a 100644 --- a/src/tests/python/integration/test_local_das.py +++ b/src/tests/python/integration/test_local_das.py @@ -4,9 +4,6 @@ from hyperon_das import DistributedAtomSpace from tests.python.integration.helpers import ( - das_local_custom_fixture, - das_local_fixture, - das_remote_fixture_module, get_remote_das_port, mongo_port, redis_port, @@ -100,11 +97,11 @@ def test_fetch_atoms_from_remote_server( def test_fetch_atoms(self, das_local_custom_fixture): das = das_local_custom_fixture( - query_engine='local', - atomdb='redis_mongo', + query_engine="local", + atomdb="redis_mongo", mongo_port=mongo_port, - mongo_username='dbadmin', - mongo_password='dassecret', + mongo_username="dbadmin", + mongo_password="dassecret", redis_port=redis_port, redis_cluster=False, redis_ssl=False, diff --git a/src/tests/python/integration/test_remote_das.py b/src/tests/python/integration/test_remote_das.py index 5c4acb0..267b974 100644 --- a/src/tests/python/integration/test_remote_das.py +++ b/src/tests/python/integration/test_remote_das.py @@ -10,7 +10,6 @@ from hyperon_das.traverse_engines import TraverseEngine from tests.python.integration.helpers import remote_das_host # noqa F401 from tests.python.integration.helpers import ( - das_remote_fixture_module, get_remote_das_port, metta_animal_base_handles, ) @@ -35,12 +34,12 @@ def test_server_connection(self, das_remote_fixture_module): try: das = das_remote_fixture_module except Exception as e: - pytest.fail(f'Connection with OpenFaaS server fail, Details: {str(e)}') + pytest.fail(f"Connection with OpenFaaS server fail, Details: {str(e)}") if not das.query_engine.remote_das.url: - pytest.fail('Connection with server fail') + pytest.fail("Connection with server fail") assert ( das.query_engine.remote_das.url - == f'http://{remote_das_host}:{get_remote_das_port()}/function/query-engine' + == f"http://{remote_das_host}:{get_remote_das_port()}/function/query-engine" ) def test_cache_controller(self, das_remote_fixture_module: DistributedAtomSpace): @@ -51,13 +50,13 @@ def test_get_atom(self, das_remote_fixture_module: DistributedAtomSpace): result = das_remote_fixture_module.get_atom(handle=metta_animal_base_handles.human) assert result.handle == metta_animal_base_handles.human assert result.name == '"human"' - assert result.named_type == 'Symbol' + assert result.named_type == "Symbol" result = das_remote_fixture_module.get_atom( handle=metta_animal_base_handles.inheritance_dinosaur_reptile ) assert result.handle == metta_animal_base_handles.inheritance_dinosaur_reptile - assert result.named_type == 'Expression' + assert result.named_type == "Expression" assert result.targets == [ metta_animal_base_handles.Inheritance, metta_animal_base_handles.dinosaur, @@ -65,7 +64,7 @@ def test_get_atom(self, das_remote_fixture_module: DistributedAtomSpace): ] with pytest.raises(AtomDoesNotExist): - das_remote_fixture_module.get_atom(handle='fake') + das_remote_fixture_module.get_atom(handle="fake") @pytest.mark.skip("Wrong values") def test_get_links(self, das_remote_fixture_module: DistributedAtomSpace): @@ -85,7 +84,7 @@ def test_get_links(self, das_remote_fixture_module: DistributedAtomSpace): metta_animal_base_handles.inheritance_typedef, ] - links = das_remote_fixture_module.get_links(link_filters.NamedType('Expression')) + links = das_remote_fixture_module.get_links(link_filters.NamedType("Expression")) inheritance_links = [] for link in links: if metta_animal_base_handles.Inheritance in link.targets: @@ -94,7 +93,7 @@ def test_get_links(self, das_remote_fixture_module: DistributedAtomSpace): assert sorted(inheritance_links) == sorted(all_inheritance) links = das_remote_fixture_module.get_links( - link_filters.FlatTypeTemplate(['Symbol', 'Symbol', 'Symbol'], 'Expression') + link_filters.FlatTypeTemplate(["Symbol", "Symbol", "Symbol"], "Expression") ) inheritance_links = [] for link in links: @@ -110,7 +109,7 @@ def test_get_links(self, das_remote_fixture_module: DistributedAtomSpace): metta_animal_base_handles.earthworm, metta_animal_base_handles.animal, ], - 'Expression', + "Expression", ) ) assert link[0].handle == metta_animal_base_handles.inheritance_earthworm_animal @@ -137,9 +136,9 @@ def test_get_incoming_links(self, das_remote_fixture_module: DistributedAtomSpac @pytest.mark.skip("Wrong value, review") def test_count_atoms(self, das_remote_fixture_module: DistributedAtomSpace): response = das_remote_fixture_module.count_atoms(parameters={}) - assert response == {'atom_count': 66, 'node_count': 0, 'link_count': 0} - response_local = das_remote_fixture_module.count_atoms({'context': 'local'}) - assert response_local == {'atom_count': 0, 'node_count': 0, 'link_count': 0} + assert response == {"atom_count": 66, "node_count": 0, "link_count": 0} + response_local = das_remote_fixture_module.count_atoms({"context": "local"}) + assert response_local == {"atom_count": 0, "node_count": 0, "link_count": 0} def test_query(self, das_remote_fixture_module: DistributedAtomSpace): all_inheritance_mammal = [ @@ -159,7 +158,7 @@ def test_query(self, das_remote_fixture_module: DistributedAtomSpace): {"atom_type": "node", "type": "Symbol", "name": '"mammal"'}, ], }, - {'no_iterator': True}, + {"no_iterator": True}, ) answer = tuple([item.assignment, item.subgraph] for item in query_answer) @@ -173,19 +172,19 @@ def test_query(self, das_remote_fixture_module: DistributedAtomSpace): link.targets_documents, [ { - 'handle': metta_animal_base_handles.Inheritance, - 'named_type': 'Symbol', - 'name': "Inheritance", + "handle": metta_animal_base_handles.Inheritance, + "named_type": "Symbol", + "name": "Inheritance", }, { - 'handle': metta_animal_base_handles.chimp, - 'named_type': 'Symbol', - 'name': '"chimp"', + "handle": metta_animal_base_handles.chimp, + "named_type": "Symbol", + "name": '"chimp"', }, { - 'handle': metta_animal_base_handles.mammal, - 'named_type': 'Symbol', - 'name': '"mammal"', + "handle": metta_animal_base_handles.mammal, + "named_type": "Symbol", + "name": '"mammal"', }, ], ) @@ -194,19 +193,19 @@ def test_query(self, das_remote_fixture_module: DistributedAtomSpace): link.targets_documents, [ { - 'handle': metta_animal_base_handles.Inheritance, - 'named_type': 'Symbol', - 'name': "Inheritance", + "handle": metta_animal_base_handles.Inheritance, + "named_type": "Symbol", + "name": "Inheritance", }, { - 'handle': metta_animal_base_handles.human, - 'named_type': 'Symbol', - 'name': '"human"', + "handle": metta_animal_base_handles.human, + "named_type": "Symbol", + "name": '"human"', }, { - 'handle': metta_animal_base_handles.mammal, - 'named_type': 'Symbol', - 'name': '"mammal"', + "handle": metta_animal_base_handles.mammal, + "named_type": "Symbol", + "name": '"mammal"', }, ], ) @@ -215,19 +214,19 @@ def test_query(self, das_remote_fixture_module: DistributedAtomSpace): link.targets_documents, [ { - 'handle': metta_animal_base_handles.Inheritance, - 'named_type': 'Symbol', - 'name': "Inheritance", + "handle": metta_animal_base_handles.Inheritance, + "named_type": "Symbol", + "name": "Inheritance", }, { - 'handle': metta_animal_base_handles.monkey, - 'named_type': 'Symbol', - 'name': '"monkey"', + "handle": metta_animal_base_handles.monkey, + "named_type": "Symbol", + "name": '"monkey"', }, { - 'handle': metta_animal_base_handles.mammal, - 'named_type': 'Symbol', - 'name': '"mammal"', + "handle": metta_animal_base_handles.mammal, + "named_type": "Symbol", + "name": '"mammal"', }, ], ) @@ -236,19 +235,19 @@ def test_query(self, das_remote_fixture_module: DistributedAtomSpace): link.targets_documents, [ { - 'handle': metta_animal_base_handles.Inheritance, - 'named_type': 'Symbol', - 'name': "Inheritance", + "handle": metta_animal_base_handles.Inheritance, + "named_type": "Symbol", + "name": "Inheritance", }, { - 'handle': metta_animal_base_handles.rhino, - 'named_type': 'Symbol', - 'name': '"rhino"', + "handle": metta_animal_base_handles.rhino, + "named_type": "Symbol", + "name": '"rhino"', }, { - 'handle': metta_animal_base_handles.mammal, - 'named_type': 'Symbol', - 'name': '"mammal"', + "handle": metta_animal_base_handles.mammal, + "named_type": "Symbol", + "name": '"mammal"', }, ], ) @@ -257,7 +256,7 @@ def test_get_traversal_cursor(self, das_remote_fixture_module: DistributedAtomSp cursor = das_remote_fixture_module.get_traversal_cursor(metta_animal_base_handles.human) assert cursor.get().handle == metta_animal_base_handles.human with pytest.raises(GetTraversalCursorException): - das_remote_fixture_module.get_traversal_cursor('fake_handle') + das_remote_fixture_module.get_traversal_cursor("fake_handle") @pytest.mark.skip(reason="Disabled. Waiting for https://github.com/singnet/das/issues/73") def test_traverse_engine_methods(self, das_remote_fixture_module: DistributedAtomSpace): @@ -267,7 +266,7 @@ def test_traverse_engine_methods(self, das_remote_fixture_module: DistributedAto assert cursor.get().handle == metta_animal_base_handles.dinosaur def is_expression_link(link): - return True if link['type'] == 'Expression' else False + return True if link["type"] == "Expression" else False links_iter = cursor.get_links(filter=is_expression_link) @@ -288,23 +287,23 @@ def is_expression_link(link): assert count == 0 def is_literal(atom: dict): - return True if atom['is_literal'] is True else False + return True if atom["is_literal"] is True else False neighbors_iter = cursor.get_neighbors(cursor_position=1, filter=is_literal) - assert neighbors_iter.get()['handle'] == metta_animal_base_handles.reptile + assert neighbors_iter.get()["handle"] == metta_animal_base_handles.reptile atom = cursor.follow_link(cursor_position=2, filter=is_literal) - assert atom['handle'] == metta_animal_base_handles.triceratops + assert atom["handle"] == metta_animal_base_handles.triceratops cursor.goto(metta_animal_base_handles.human) - assert cursor.get()['handle'] == metta_animal_base_handles.human + assert cursor.get()["handle"] == metta_animal_base_handles.human - @pytest.mark.skip('Wrong values') + @pytest.mark.skip("Wrong values") def test_fetch_atoms(self, das_remote_fixture_module): assert das_remote_fixture_module.backend.count_atoms() == { - 'atom_count': 0, - 'node_count': 0, - 'link_count': 0, + "atom_count": 0, + "node_count": 0, + "link_count": 0, } das_remote_fixture_module.fetch( query={ @@ -318,39 +317,39 @@ def test_fetch_atoms(self, das_remote_fixture_module): } ) assert das_remote_fixture_module.backend.count_atoms() == { - 'atom_count': 10, - 'node_count': 6, - 'link_count': 4, + "atom_count": 10, + "node_count": 6, + "link_count": 4, } - @pytest.mark.skip('Wrong values') + @pytest.mark.skip("Wrong values") def test_fetch_all_data(self, das_remote_fixture_module): assert das_remote_fixture_module.backend.count_atoms() == { - 'atom_count': 0, - 'node_count': 0, - 'link_count': 0, + "atom_count": 0, + "node_count": 0, + "link_count": 0, } das_remote_fixture_module.fetch() assert das_remote_fixture_module.backend.count_atoms() == { - 'atom_count': 66, - 'node_count': 23, - 'link_count': 43, + "atom_count": 66, + "node_count": 23, + "link_count": 43, } def test_create_context(self, das_remote_fixture_module): - context_name = 'my context' + context_name = "my context" context = das_remote_fixture_module.create_context(context_name) assert context.name == context_name @pytest.mark.skip(reason="Disable. See https://github.com/singnet/das-query-engine/issues/259") def test_commit_changes(self, das_remote_fixture_module: DistributedAtomSpace): node = das_remote_fixture_module.get_atom(handle=metta_animal_base_handles.human) - assert hasattr(node, 'test_key') is False - assert 'test_key' not in node.custom_attributes - das_remote_fixture_module.add_node(NodeT(**{'type': 'Symbol', 'name': '"human"'})) + assert hasattr(node, "test_key") is False + assert "test_key" not in node.custom_attributes + das_remote_fixture_module.add_node(NodeT(**{"type": "Symbol", "name": '"human"'})) das_remote_fixture_module.commit_changes() node = das_remote_fixture_module.get_atom(handle=metta_animal_base_handles.human) - assert node.custom_attributes['test_key'] == 'test_value' + assert node.custom_attributes["test_key"] == "test_value" def test_commit_changes_method_with_mode_parameter(self, das_remote_fixture_module): das = das_remote_fixture_module @@ -361,6 +360,9 @@ def test_commit_changes_method_with_mode_parameter(self, das_remote_fixture_modu with pytest.raises(ValueError): das = DistributedAtomSpace( - mode='blah', query_engine='remote', host=remote_das_host, port=get_remote_das_port() + mode="blah", + query_engine="remote", + host=remote_das_host, + port=get_remote_das_port(), ) das.commit_changes() diff --git a/src/tests/python/integration/test_traverse_engine.py b/src/tests/python/integration/test_traverse_engine.py index 103106d..3d3567d 100644 --- a/src/tests/python/integration/test_traverse_engine.py +++ b/src/tests/python/integration/test_traverse_engine.py @@ -39,13 +39,13 @@ def _check_asserts(self, das: DistributedAtomSpace): # Get current_cursor = traverse.get() - assert current_cursor['handle'] == metta_animal_base_handles.human - assert current_cursor['name'] == '"human"' - assert current_cursor['named_type'] == 'Symbol' + assert current_cursor["handle"] == metta_animal_base_handles.human + assert current_cursor["name"] == '"human"' + assert current_cursor["named_type"] == "Symbol" # Get links links = traverse.get_links() - link_handles = sorted([link['handle'] for link in links]) + link_handles = sorted([link["handle"] for link in links]) assert link_handles == sorted( [ metta_animal_base_handles.similarity_human_chimp, @@ -67,8 +67,8 @@ def _check_asserts(self, das: DistributedAtomSpace): ) # Get links with filters - links = traverse.get_links(link_type='Expression', cursor_position=1, target_type='Symbol') - link_handles = sorted([link['handle'] for link in links]) + links = traverse.get_links(link_type="Expression", cursor_position=1, target_type="Symbol") + link_handles = sorted([link["handle"] for link in links]) assert link_handles == sorted( [ metta_animal_base_handles.similarity_human_chimp, @@ -81,7 +81,7 @@ def _check_asserts(self, das: DistributedAtomSpace): # Get neighbors neighbors = traverse.get_neighbors() - neighbors_handles = sorted([neighbor['handle'] for neighbor in neighbors]) + neighbors_handles = sorted([neighbor["handle"] for neighbor in neighbors]) assert neighbors_handles == sorted( [ metta_animal_base_handles.chimp, @@ -97,15 +97,15 @@ def _check_asserts(self, das: DistributedAtomSpace): # Get neighbors with filters def is_literal(atom: dict) -> bool: - return atom['is_literal'] is True + return atom["is_literal"] is True neighbors = traverse.get_neighbors( - link_type='Expression', + link_type="Expression", cursor_position=2, - target_type='Symbol', + target_type="Symbol", filters=(None, is_literal), ) - neighbors_handles = sorted([neighbor['handle'] for neighbor in neighbors]) + neighbors_handles = sorted([neighbor["handle"] for neighbor in neighbors]) assert neighbors_handles == sorted( [ metta_animal_base_handles.chimp, @@ -126,33 +126,36 @@ def is_literal(atom: dict) -> bool: metta_animal_base_handles.Inheritance, metta_animal_base_handles.typedef_mark, ] - assert traverse.get()['handle'] in expected_neighbors + assert traverse.get()["handle"] in expected_neighbors # Follow link with filters def is_ent(atom: dict) -> bool: - return atom['name'] == '"ent"' + return atom["name"] == '"ent"' traverse.goto(metta_animal_base_handles.human) traverse.follow_link( - link_type='Expression', cursor_position=2, target_type='Symbol', filters=(None, is_ent) + link_type="Expression", + cursor_position=2, + target_type="Symbol", + filters=(None, is_ent), ) - assert traverse.get()['name'] == '"ent"' + assert traverse.get()["name"] == '"ent"' # Get neighbors with filter as Tuple traverse = das.get_traversal_cursor(handle=metta_animal_base_handles.human) def is_expression_link(atom): - return atom['named_type'] == 'Expression' + return atom["named_type"] == "Expression" def is_mammal(atom): - return atom['name'] == '"mammal"' + return atom["name"] == '"mammal"' neighbors = traverse.get_neighbors(filters=(is_expression_link, is_mammal)) - assert [i['handle'] for i in neighbors] == [metta_animal_base_handles.mammal] + assert [i["handle"] for i in neighbors] == [metta_animal_base_handles.mammal] neighbors = traverse.get_neighbors(filters=(None, is_mammal)) - assert [i['handle'] for i in neighbors] == [metta_animal_base_handles.mammal] + assert [i["handle"] for i in neighbors] == [metta_animal_base_handles.mammal] neighbors = traverse.get_neighbors(filters=(is_expression_link, None)) - handles = sorted([i['handle'] for i in neighbors]) + handles = sorted([i["handle"] for i in neighbors]) assert handles == sorted( [ metta_animal_base_handles.chimp, @@ -166,7 +169,7 @@ def is_mammal(atom): ] ) neighbors = traverse.get_neighbors(filters=(is_expression_link, None)) - assert sorted([i['handle'] for i in neighbors]) == sorted( + assert sorted([i["handle"] for i in neighbors]) == sorted( [ metta_animal_base_handles.chimp, metta_animal_base_handles.monkey, @@ -193,11 +196,11 @@ def test_traverse_engine_with_das_ram_only(self): def test_traverse_engine_with_das_redis_mongo(self, _cleanup): _db_up() das = DistributedAtomSpace( - query_engine='local', - atomdb='redis_mongo', + query_engine="local", + atomdb="redis_mongo", mongo_port=mongo_port, - mongo_username='dbadmin', - mongo_password='dassecret', + mongo_username="dbadmin", + mongo_password="dassecret", redis_port=redis_port, redis_cluster=False, redis_ssl=False, @@ -209,6 +212,6 @@ def test_traverse_engine_with_das_redis_mongo(self, _cleanup): def test_traverse_engine_with_remote_das(self): das = DistributedAtomSpace( - query_engine='remote', host=remote_das_host, port=get_remote_das_port() + query_engine="remote", host=remote_das_host, port=get_remote_das_port() ) self._check_asserts(das) diff --git a/src/tests/python/unit/adapters/test_ram_only.py b/src/tests/python/unit/adapters/test_ram_only.py index 7d3a250..726a542 100644 --- a/src/tests/python/unit/adapters/test_ram_only.py +++ b/src/tests/python/unit/adapters/test_ram_only.py @@ -5,7 +5,11 @@ from hyperon_das_atomdb import AtomDB from hyperon_das_atomdb.adapters import InMemoryDB from hyperon_das_atomdb.database import LinkT, NodeT -from hyperon_das_atomdb.exceptions import AddLinkException, AddNodeException, AtomDoesNotExist +from hyperon_das_atomdb.exceptions import ( + AddLinkException, + AddNodeException, + AtomDoesNotExist, +) from hyperon_das_atomdb.utils.expression_hasher import ExpressionHasher from tests.python.helpers import dict_to_link_params, dict_to_node_params from tests.python.unit.fixtures import in_memory_db # noqa: F401 @@ -181,8 +185,16 @@ def test_get_link_targets_invalid(self, database: InMemoryDB): "*", {"c93e1e758c53912638438e2a7d7f7b7f"}, ), - ([("Concept", "ent"), ("Concept", "plant")], "*", {"ee1c03e6d1f104ccd811cfbba018451a"}), - ([("Concept", "ent"), ("Concept", "human")], "*", {"a45af31b43ee5ea271214338a5a5bd61"}), + ( + [("Concept", "ent"), ("Concept", "plant")], + "*", + {"ee1c03e6d1f104ccd811cfbba018451a"}, + ), + ( + [("Concept", "ent"), ("Concept", "human")], + "*", + {"a45af31b43ee5ea271214338a5a5bd61"}, + ), ( [("Concept", "human"), ("Concept", "chimp")], "*", @@ -191,7 +203,10 @@ def test_get_link_targets_invalid(self, database: InMemoryDB): ( ["*", ("Concept", "chimp")], "Similarity", - {"b5459e299a5c5e8662c427f7e01b3bf1", "31535ddf214f5b239d3b517823cb8144"}, + { + "b5459e299a5c5e8662c427f7e01b3bf1", + "31535ddf214f5b239d3b517823cb8144", + }, ), ( ["*", ("Concept", "human")], @@ -205,7 +220,10 @@ def test_get_link_targets_invalid(self, database: InMemoryDB): ( [("Concept", "chimp"), "*"], "Similarity", - {"abe6ad743fc81bd1c55ece2e1307a178", "2c927fdc6c0f1272ee439ceb76a6d1a4"}, + { + "abe6ad743fc81bd1c55ece2e1307a178", + "2c927fdc6c0f1272ee439ceb76a6d1a4", + }, ), ( [("Concept", "chimp"), "*"], diff --git a/src/tests/python/unit/adapters/test_redis_mongo_db.py b/src/tests/python/unit/adapters/test_redis_mongo_db.py index 621efc2..e2e9332 100644 --- a/src/tests/python/unit/adapters/test_redis_mongo_db.py +++ b/src/tests/python/unit/adapters/test_redis_mongo_db.py @@ -47,12 +47,15 @@ def database(self, redis_mongo_db: RedisMongoDB): # noqa: F811 @pytest.fixture def database_custom_index(self): - with mock.patch( - "hyperon_das_atomdb.adapters.redis_mongo_db.RedisMongoDB._connection_mongo_db", - return_value=mongo_mock(), - ), mock.patch( - "hyperon_das_atomdb.adapters.redis_mongo_db.RedisMongoDB._connection_redis", - return_value=redis_mock(), + with ( + mock.patch( + "hyperon_das_atomdb.adapters.redis_mongo_db.RedisMongoDB._connection_mongo_db", + return_value=mongo_mock(), + ), + mock.patch( + "hyperon_das_atomdb.adapters.redis_mongo_db.RedisMongoDB._connection_redis", + return_value=redis_mock(), + ), ): yield RedisMongoDB @@ -175,7 +178,12 @@ def test_get_link_targets(self, link_type, targets, expected_count, database: Re assert len(targets) == expected_count @pytest.mark.parametrize( - "handle", ["handle", "2a8a69c01305563932b957de4b3a9ba6", "2a8a69c0130556=z32b957de4b3a9ba6"] + "handle", + [ + "handle", + "2a8a69c01305563932b957de4b3a9ba6", + "2a8a69c0130556=z32b957de4b3a9ba6", + ], ) def test_get_link_targets_invalid(self, handle, database: RedisMongoDB): with pytest.raises(ValueError) as exc_info: @@ -187,7 +195,11 @@ def test_get_link_targets_invalid(self, handle, database: RedisMongoDB): "link_values,expected,expected_count", [ ( - {"link_type": "Evaluation", "target_handles": ["*", "*"], "toplevel_only": True}, + { + "link_type": "Evaluation", + "target_handles": ["*", "*"], + "toplevel_only": True, + }, {"bd2bb6c802a040b00659dfe7954e804d"}, 1, ), @@ -218,7 +230,10 @@ def test_get_link_targets_invalid(self, handle, database: RedisMongoDB): ( { "link_type": "Similarity", - "target_handles": ["*", ExpressionHasher.terminal_hash("Concept", "chimp")], + "target_handles": [ + "*", + ExpressionHasher.terminal_hash("Concept", "chimp"), + ], "toplevel_only": False, }, { @@ -350,7 +365,11 @@ def test_get_node_name(self, node_type, node_name, database: RedisMongoDB): @pytest.mark.parametrize( "handle,", - ["handle", "2a8a69c01305563932b957de4b3a9ba6", "2a8a69c0130556=z32b957de4b3a9ba6"], + [ + "handle", + "2a8a69c01305563932b957de4b3a9ba6", + "2a8a69c0130556=z32b957de4b3a9ba6", + ], ) def test_get_node_name_value_error(self, handle, database: RedisMongoDB): with pytest.raises(ValueError) as exc_info: @@ -430,7 +449,10 @@ def test_get_node_by_field(self, database: RedisMongoDB): "link", ["type"], [{"field": "type", "value": "Evaluation"}], - ["bd2bb6c802a040b00659dfe7954e804d", "cadd63b3fd14e34819bca4803925bf2c"], + [ + "bd2bb6c802a040b00659dfe7954e804d", + "cadd63b3fd14e34819bca4803925bf2c", + ], ), ], ) @@ -652,7 +674,10 @@ def test_redis_keys(self, key, database: RedisMongoDB): ("Concept", "triceratops"), ( "Evaluation", - ["d03e59654221c1e8fcda404fd5c8d6cb", "99d18c702e813b07260baf577c60c455"], + [ + "d03e59654221c1e8fcda404fd5c8d6cb", + "99d18c702e813b07260baf577c60c455", + ], ), ], ), @@ -699,17 +724,26 @@ def test_get_incoming_links_by_links(self, link_type, link_targets, database: Re ("Similarity", ["af12f10f9ae2002a1607ba0b47ba8407", "*"], 3), ( "Inheritance", - ["c1db9b517073e51eb7ef6fed608ec204", "b99ae727c787f1b13b452fd4c9ce1b9a"], + [ + "c1db9b517073e51eb7ef6fed608ec204", + "b99ae727c787f1b13b452fd4c9ce1b9a", + ], 1, ), ( "Evaluation", - ["d03e59654221c1e8fcda404fd5c8d6cb", "99d18c702e813b07260baf577c60c455"], + [ + "d03e59654221c1e8fcda404fd5c8d6cb", + "99d18c702e813b07260baf577c60c455", + ], 1, ), ( "Evaluation", - ["d03e59654221c1e8fcda404fd5c8d6cb", "99d18c702e813b07260baf577c60c455"], + [ + "d03e59654221c1e8fcda404fd5c8d6cb", + "99d18c702e813b07260baf577c60c455", + ], 1, ), ("Evaluation", ["*", "99d18c702e813b07260baf577c60c455"], 1), @@ -742,11 +776,26 @@ def test_redis_patterns(self, link_type, link_targets, expected_count, database: ], 8, ), - ([{"field": "named_type", "value": "Similarity", "positions": [], "arity": 0}], 0), + ( + [ + { + "field": "named_type", + "value": "Similarity", + "positions": [], + "arity": 0, + } + ], + 0, + ), ([{"field": "named_type", "value": "*", "positions": [], "arity": 0}], 1), ( [ - {"field": "named_type", "value": "*", "positions": [0, 1, 2], "arity": 3}, + { + "field": "named_type", + "value": "*", + "positions": [0, 1, 2], + "arity": 3, + }, ], 15, ), @@ -919,13 +968,23 @@ def test_custom_index_templates_load_error( ), ( [ - {"field": "named_type", "value": "*", "positions": [1, "a"], "arity": 3}, + { + "field": "named_type", + "value": "*", + "positions": [1, "a"], + "arity": 3, + }, ], "Value '[1, 'a']' is not supported in 'positions'.", ), ( [ - {"field": "named_type", "value": "*", "positions": [1, 2], "arity": "a"}, + { + "field": "named_type", + "value": "*", + "positions": [1, 2], + "arity": "a", + }, ], "Value 'a' is not supported in 'arity'.", ), @@ -1077,42 +1136,72 @@ def test_custom_index_templates_reindex_find( ), ( [ - {"field": "named_type", "value": "Similarity", "positions": [1], "arity": 2}, + { + "field": "named_type", + "value": "Similarity", + "positions": [1], + "arity": 2, + }, ], ["*", ["*", "*"]], 0, ), ( [ - {"field": "named_type", "value": "Similarity", "positions": [1], "arity": 2}, + { + "field": "named_type", + "value": "Similarity", + "positions": [1], + "arity": 2, + }, ], ["Similarity", ["bb34ce95f161a6b37ff54b3d4c817857", "*"]], 1, ), ( [ - {"field": "named_type", "value": "Similarity", "positions": [1], "arity": 2}, + { + "field": "named_type", + "value": "Similarity", + "positions": [1], + "arity": 2, + }, ], ["Similarity", ["*", "bb34ce95f161a6b37ff54b3d4c817857"]], 0, ), ( [ - {"field": "named_type", "value": "Evaluation", "positions": [0, 1], "arity": 2}, + { + "field": "named_type", + "value": "Evaluation", + "positions": [0, 1], + "arity": 2, + }, ], ["Evaluation", ["*", "*"]], 2, ), ( [ - {"field": "named_type", "value": "*", "positions": [0, 1], "arity": 2}, + { + "field": "named_type", + "value": "*", + "positions": [0, 1], + "arity": 2, + }, ], ["Evaluation", ["*", "*"]], 2, ), ( [ - {"field": "named_type", "value": "Evaluation", "positions": [0, 1], "arity": 2}, + { + "field": "named_type", + "value": "Evaluation", + "positions": [0, 1], + "arity": 2, + }, ], ["*", ["*", "*"]], 0, @@ -1138,7 +1227,12 @@ def test_custom_index_templates_reindex_find( ), ( [ - {"field": "named_type", "value": "*", "positions": [0, 1], "arity": 2}, + { + "field": "named_type", + "value": "*", + "positions": [0, 1], + "arity": 2, + }, ], ["*", ["af12f10f9ae2002a1607ba0b47ba8407", "*"]], 4, @@ -1176,7 +1270,12 @@ def test_custom_index_templates_reindex_find( ), ( [ - {"field": "named_type", "value": "*", "positions": [0, 1, 2, 3], "arity": 5}, + { + "field": "named_type", + "value": "*", + "positions": [0, 1, 2, 3], + "arity": 5, + }, ], ["*", ["*", "*", "*", "*", "af12f10f9ae2002a1607ba0b47ba8407"]], 1, @@ -1207,7 +1306,12 @@ def test_custom_index_templates_reindex_find( ), ( [ - {"field": "named_type", "value": "*", "positions": [1, 2, 3, 4], "arity": 5}, + { + "field": "named_type", + "value": "*", + "positions": [1, 2, 3, 4], + "arity": 5, + }, ], ["*", ["0a32b476852eeb954979b87f5f6cb7af", "*", "*", "*", "*"]], 1, @@ -1289,12 +1393,15 @@ def test_get_atom_type(self, database: RedisMongoDB): def test_create_field_index_node_collection(self, database: RedisMongoDB): database.mongo_atoms_collection = mock.Mock() database.mongo_atoms_collection.create_index.return_value = "name_index_asc" - with mock.patch( - "hyperon_das_atomdb.index.Index.generate_index_id", - return_value="name_index_asc", - ), mock.patch( - "hyperon_das_atomdb.adapters.redis_mongo_db.MongoDBIndex.index_exists", - return_value=False, + with ( + mock.patch( + "hyperon_das_atomdb.index.Index.generate_index_id", + return_value="name_index_asc", + ), + mock.patch( + "hyperon_das_atomdb.adapters.redis_mongo_db.MongoDBIndex.index_exists", + return_value=False, + ), ): result = database.create_field_index("node", ["name"], "Type") @@ -1308,12 +1415,15 @@ def test_create_field_index_node_collection(self, database: RedisMongoDB): def test_create_field_index_link_collection(self, database: RedisMongoDB): database.mongo_atoms_collection = mock.Mock() database.mongo_atoms_collection.create_index.return_value = "field_index_asc" - with mock.patch( - "hyperon_das_atomdb.index.Index.generate_index_id", - return_value="field_index_asc", - ), mock.patch( - "hyperon_das_atomdb.adapters.redis_mongo_db.MongoDBIndex.index_exists", - return_value=False, + with ( + mock.patch( + "hyperon_das_atomdb.index.Index.generate_index_id", + return_value="field_index_asc", + ), + mock.patch( + "hyperon_das_atomdb.adapters.redis_mongo_db.MongoDBIndex.index_exists", + return_value=False, + ), ): result = database.create_field_index("link", ["field"], "Type") @@ -1327,12 +1437,15 @@ def test_create_field_index_link_collection(self, database: RedisMongoDB): def test_create_text_index(self, database: RedisMongoDB): database.mongo_atoms_collection = mock.Mock() database.mongo_atoms_collection.create_index.return_value = "field_index_asc" - with mock.patch( - "hyperon_das_atomdb.index.Index.generate_index_id", - return_value="field_index_asc", - ), mock.patch( - "hyperon_das_atomdb.adapters.redis_mongo_db.MongoDBIndex.index_exists", - return_value=False, + with ( + mock.patch( + "hyperon_das_atomdb.index.Index.generate_index_id", + return_value="field_index_asc", + ), + mock.patch( + "hyperon_das_atomdb.adapters.redis_mongo_db.MongoDBIndex.index_exists", + return_value=False, + ), ): result = database.create_field_index( "link", ["field"], index_type=FieldIndexType.TOKEN_INVERTED_LIST @@ -1346,12 +1459,15 @@ def test_create_text_index(self, database: RedisMongoDB): def test_create_text_index_type(self, database: RedisMongoDB): database.mongo_atoms_collection = mock.Mock() database.mongo_atoms_collection.create_index.return_value = "field_index_asc" - with mock.patch( - "hyperon_das_atomdb.index.Index.generate_index_id", - return_value="field_index_asc", - ), mock.patch( - "hyperon_das_atomdb.adapters.redis_mongo_db.MongoDBIndex.index_exists", - return_value=False, + with ( + mock.patch( + "hyperon_das_atomdb.index.Index.generate_index_id", + return_value="field_index_asc", + ), + mock.patch( + "hyperon_das_atomdb.adapters.redis_mongo_db.MongoDBIndex.index_exists", + return_value=False, + ), ): result = database.create_field_index( "link", ["field"], "Type", index_type=FieldIndexType.TOKEN_INVERTED_LIST @@ -1367,12 +1483,15 @@ def test_create_text_index_type(self, database: RedisMongoDB): def test_create_compound_index_type(self, database: RedisMongoDB): database.mongo_atoms_collection = mock.Mock() database.mongo_atoms_collection.create_index.return_value = "field_index_asc" - with mock.patch( - "hyperon_das_atomdb.index.Index.generate_index_id", - return_value="field_index_asc", - ), mock.patch( - "hyperon_das_atomdb.adapters.redis_mongo_db.MongoDBIndex.index_exists", - return_value=False, + with ( + mock.patch( + "hyperon_das_atomdb.index.Index.generate_index_id", + return_value="field_index_asc", + ), + mock.patch( + "hyperon_das_atomdb.adapters.redis_mongo_db.MongoDBIndex.index_exists", + return_value=False, + ), ): result = database.create_field_index("link", fields=["field", "name"]) @@ -1385,12 +1504,15 @@ def test_create_compound_index_type(self, database: RedisMongoDB): def test_create_compound_index_type_filter(self, database: RedisMongoDB): database.mongo_atoms_collection = mock.Mock() database.mongo_atoms_collection.create_index.return_value = "field_index_asc" - with mock.patch( - "hyperon_das_atomdb.index.Index.generate_index_id", - return_value="field_index_asc", - ), mock.patch( - "hyperon_das_atomdb.adapters.redis_mongo_db.MongoDBIndex.index_exists", - return_value=False, + with ( + mock.patch( + "hyperon_das_atomdb.index.Index.generate_index_id", + return_value="field_index_asc", + ), + mock.patch( + "hyperon_das_atomdb.adapters.redis_mongo_db.MongoDBIndex.index_exists", + return_value=False, + ), ): result = database.create_field_index( "link", named_type="Type", fields=["field", "name"] @@ -1425,12 +1547,15 @@ def test_create_field_index_already_exists(self, database: RedisMongoDB): database.mongo_atoms_collection = mock.Mock() database.mongo_atoms_collection.list_indexes.return_value = [] database.mongo_atoms_collection.create_index.return_value = "name_index_asc" - with mock.patch( - "hyperon_das_atomdb.index.Index.generate_index_id", - return_value="name_index_asc", - ), mock.patch( - "hyperon_das_atomdb.adapters.redis_mongo_db.MongoDBIndex.index_exists", - return_value=False, + with ( + mock.patch( + "hyperon_das_atomdb.index.Index.generate_index_id", + return_value="name_index_asc", + ), + mock.patch( + "hyperon_das_atomdb.adapters.redis_mongo_db.MongoDBIndex.index_exists", + return_value=False, + ), ): database.create_field_index("node", "name", "Type") assert database.create_field_index("node", ["name"], "Type") == "name_index_asc" diff --git a/src/tests/python/unit/adapters/test_redis_mongo_extra.py b/src/tests/python/unit/adapters/test_redis_mongo_extra.py index 4291ff7..22e48c4 100644 --- a/src/tests/python/unit/adapters/test_redis_mongo_extra.py +++ b/src/tests/python/unit/adapters/test_redis_mongo_extra.py @@ -2,7 +2,11 @@ import pytest -from hyperon_das_atomdb.adapters.redis_mongo_db import MongoDBIndex, RedisMongoDB, _HashableDocument +from hyperon_das_atomdb.adapters.redis_mongo_db import ( + MongoDBIndex, + RedisMongoDB, + _HashableDocument, +) from tests.python.helpers import dict_to_node_params from tests.python.unit.fixtures import redis_mongo_db # noqa: F401 @@ -31,11 +35,16 @@ def test_index_create_exceptions(self, params, request): mi.create(**params) @mock.patch( - "hyperon_das_atomdb.adapters.redis_mongo_db.MongoClient", return_value=mock.MagicMock() + "hyperon_das_atomdb.adapters.redis_mongo_db.MongoClient", + return_value=mock.MagicMock(), ) - @mock.patch("hyperon_das_atomdb.adapters.redis_mongo_db.Redis", return_value=mock.MagicMock()) @mock.patch( - "hyperon_das_atomdb.adapters.redis_mongo_db.RedisCluster", return_value=mock.MagicMock() + "hyperon_das_atomdb.adapters.redis_mongo_db.Redis", + return_value=mock.MagicMock(), + ) + @mock.patch( + "hyperon_das_atomdb.adapters.redis_mongo_db.RedisCluster", + return_value=mock.MagicMock(), ) def test_create_db_connection_mongo(self, mock_mongo, mock_redis, mock_redis_cluster): RedisMongoDB(mongo_tls_ca_file="/tmp/mock", redis_password="12", redis_username="A") diff --git a/src/tests/python/unit/fixtures.py b/src/tests/python/unit/fixtures.py index 77adb70..0492e76 100644 --- a/src/tests/python/unit/fixtures.py +++ b/src/tests/python/unit/fixtures.py @@ -39,8 +39,8 @@ def exists(self, key): return 1 return 0 - def cache_overwrite(self, cache=dict()): - self.cache = cache + def cache_overwrite(self, cache): + self.cache = cache or dict() def sadd(self, key, *members): if key not in self.cache: @@ -107,12 +107,15 @@ def redis_mock(): def redis_mongo_db(): mongo_db = mongo_mock() redis_db = redis_mock() - with mock.patch( - "hyperon_das_atomdb.adapters.redis_mongo_db.RedisMongoDB._connection_mongo_db", - return_value=mongo_db, - ), mock.patch( - "hyperon_das_atomdb.adapters.redis_mongo_db.RedisMongoDB._connection_redis", - return_value=redis_db, + with ( + mock.patch( + "hyperon_das_atomdb.adapters.redis_mongo_db.RedisMongoDB._connection_mongo_db", + return_value=mongo_db, + ), + mock.patch( + "hyperon_das_atomdb.adapters.redis_mongo_db.RedisMongoDB._connection_redis", + return_value=redis_db, + ), ): db = RedisMongoDB() diff --git a/src/tests/python/unit/helpers.py b/src/tests/python/unit/helpers.py index 9a44ffe..b63b0da 100644 --- a/src/tests/python/unit/helpers.py +++ b/src/tests/python/unit/helpers.py @@ -5,15 +5,15 @@ def load_n_random_links_by_type( - das: DistributedAtomSpace, n: int, type: str = 'Inheritance' + das: DistributedAtomSpace, n: int, type: str = "Inheritance" ) -> None: - for name in [''.join([choice(ascii_lowercase) for c in range(5)]) for i in range(n)]: + for name in ["".join([choice(ascii_lowercase) for c in range(5)]) for i in range(n)]: das.add_link( { - 'type': type, - 'targets': [ - {'type': 'Concept', 'name': 'human'}, - {'type': 'Concept', 'name': name}, + "type": type, + "targets": [ + {"type": "Concept", "name": "human"}, + {"type": "Concept", "name": name}, ], } ) diff --git a/src/tests/python/unit/mock.py b/src/tests/python/unit/mock.py index d469a67..bddeae3 100644 --- a/src/tests/python/unit/mock.py +++ b/src/tests/python/unit/mock.py @@ -19,26 +19,26 @@ def _build_node_handle(node_type: str, node_name: str) -> str: - return f'<{node_type}: {node_name}>' + return f"<{node_type}: {node_name}>" def _split_node_handle(node_handle: str) -> Tuple[str, str]: - v = re.split('[<: >]', node_handle) + v = re.split("[<: >]", node_handle) return v[1], v[3] def _build_link_handle(link_type: str, target_handles: List[str]) -> str: - if link_type == 'Similarity' or link_type == 'Set': + if link_type == "Similarity" or link_type == "Set": target_handles.sort() - return f'<{link_type}: {target_handles}>' + return f"<{link_type}: {target_handles}>" class DistributedAtomSpaceMock(DistributedAtomSpace): - def __init__(self, query_engine: Optional[str] = 'local', **kwargs) -> None: + def __init__(self, query_engine: Optional[str] = "local", **kwargs) -> None: self.backend = DatabaseAnimals() self.cache_controller = CacheController({}) - if query_engine == 'remote': - with patch('hyperon_das.client.connect_to_server', return_value=(200, 'OK')): + if query_engine == "remote": + with patch("hyperon_das.client.connect_to_server", return_value=(200, "OK")): self.query_engine = RemoteQueryEngine( self.backend, self.cache_controller, {}, **kwargs ) @@ -74,60 +74,60 @@ def __init__(self): for name in self.node_names } - self.human = _build_node_handle(self.node_type, 'human') - self.monkey = _build_node_handle(self.node_type, 'monkey') - self.chimp = _build_node_handle(self.node_type, 'chimp') - self.snake = _build_node_handle(self.node_type, 'snake') - self.earthworm = _build_node_handle(self.node_type, 'earthworm') - self.rhino = _build_node_handle(self.node_type, 'rhino') - self.triceratops = _build_node_handle(self.node_type, 'triceratops') - self.vine = _build_node_handle(self.node_type, 'vine') - self.ent = _build_node_handle(self.node_type, 'ent') - self.mammal = _build_node_handle(self.node_type, 'mammal') - self.animal = _build_node_handle(self.node_type, 'animal') - self.reptile = _build_node_handle(self.node_type, 'reptile') - self.dinosaur = _build_node_handle(self.node_type, 'dinosaur') - self.plant = _build_node_handle(self.node_type, 'plant') + self.human = _build_node_handle(self.node_type, "human") + self.monkey = _build_node_handle(self.node_type, "monkey") + self.chimp = _build_node_handle(self.node_type, "chimp") + self.snake = _build_node_handle(self.node_type, "snake") + self.earthworm = _build_node_handle(self.node_type, "earthworm") + self.rhino = _build_node_handle(self.node_type, "rhino") + self.triceratops = _build_node_handle(self.node_type, "triceratops") + self.vine = _build_node_handle(self.node_type, "vine") + self.ent = _build_node_handle(self.node_type, "ent") + self.mammal = _build_node_handle(self.node_type, "mammal") + self.animal = _build_node_handle(self.node_type, "animal") + self.reptile = _build_node_handle(self.node_type, "reptile") + self.dinosaur = _build_node_handle(self.node_type, "dinosaur") + self.plant = _build_node_handle(self.node_type, "plant") self.all_links: list[list[str]] = [ - ['Similarity', self.human, self.monkey], - ['Similarity', self.human, self.chimp], - ['Similarity', self.chimp, self.monkey], - ['Similarity', self.snake, self.earthworm], - ['Similarity', self.rhino, self.triceratops], - ['Similarity', self.snake, self.vine], - ['Similarity', self.human, self.ent], - ['Inheritance', self.human, self.mammal], - ['Inheritance', self.monkey, self.mammal], - ['Inheritance', self.chimp, self.mammal], - ['Inheritance', self.mammal, self.animal], - ['Inheritance', self.reptile, self.animal], - ['Inheritance', self.snake, self.reptile], - ['Inheritance', self.dinosaur, self.reptile], - ['Inheritance', self.triceratops, self.dinosaur], - ['Inheritance', self.earthworm, self.animal], - ['Inheritance', self.rhino, self.mammal], - ['Inheritance', self.vine, self.plant], - ['Inheritance', self.ent, self.plant], + ["Similarity", self.human, self.monkey], + ["Similarity", self.human, self.chimp], + ["Similarity", self.chimp, self.monkey], + ["Similarity", self.snake, self.earthworm], + ["Similarity", self.rhino, self.triceratops], + ["Similarity", self.snake, self.vine], + ["Similarity", self.human, self.ent], + ["Inheritance", self.human, self.mammal], + ["Inheritance", self.monkey, self.mammal], + ["Inheritance", self.chimp, self.mammal], + ["Inheritance", self.mammal, self.animal], + ["Inheritance", self.reptile, self.animal], + ["Inheritance", self.snake, self.reptile], + ["Inheritance", self.dinosaur, self.reptile], + ["Inheritance", self.triceratops, self.dinosaur], + ["Inheritance", self.earthworm, self.animal], + ["Inheritance", self.rhino, self.mammal], + ["Inheritance", self.vine, self.plant], + ["Inheritance", self.ent, self.plant], [ - 'List', - _build_link_handle('Inheritance', [self.dinosaur, self.reptile]), - _build_link_handle('Inheritance', [self.triceratops, self.dinosaur]), + "List", + _build_link_handle("Inheritance", [self.dinosaur, self.reptile]), + _build_link_handle("Inheritance", [self.triceratops, self.dinosaur]), ], [ - 'Set', - _build_link_handle('Inheritance', [self.dinosaur, self.reptile]), - _build_link_handle('Inheritance', [self.triceratops, self.dinosaur]), + "Set", + _build_link_handle("Inheritance", [self.dinosaur, self.reptile]), + _build_link_handle("Inheritance", [self.triceratops, self.dinosaur]), ], - ['List', self.human, self.ent, self.monkey, self.chimp], - ['List', self.human, self.mammal, self.triceratops, self.vine], - ['List', self.human, self.monkey, self.chimp], - ['List', self.triceratops, self.ent, self.monkey, self.snake], - ['Set', self.triceratops, self.vine, self.monkey, self.snake], - ['Set', self.triceratops, self.ent, self.monkey, self.snake], - ['Set', self.human, self.ent, self.monkey, self.chimp], - ['Set', self.mammal, self.monkey, self.human, self.chimp], - ['Set', self.human, self.monkey, self.chimp], + ["List", self.human, self.ent, self.monkey, self.chimp], + ["List", self.human, self.mammal, self.triceratops, self.vine], + ["List", self.human, self.monkey, self.chimp], + ["List", self.triceratops, self.ent, self.monkey, self.snake], + ["Set", self.triceratops, self.vine, self.monkey, self.snake], + ["Set", self.triceratops, self.ent, self.monkey, self.snake], + ["Set", self.human, self.ent, self.monkey, self.chimp], + ["Set", self.mammal, self.monkey, self.human, self.chimp], + ["Set", self.human, self.monkey, self.chimp], ] self.template_index: dict[str, list[tuple[str, tuple[str, ...]]]] = {} @@ -145,9 +145,13 @@ def __init__(self): self._add_incoming_set(str(link), link[1:]) nested_link = [ - 'Evaluation', + "Evaluation", self.human, - ['Evaluation', self.human, _build_link_handle('Set', [self.monkey, self.mammal])], + [ + "Evaluation", + self.human, + _build_link_handle("Set", [self.monkey, self.mammal]), + ], ] self.all_links.append(nested_link) # type: ignore @@ -191,16 +195,16 @@ def _get_atom(self, handle: str) -> AtomT | None: def is_ordered(self, link_handle: str) -> bool: for link in self.all_links: if _build_link_handle(link[0], link[1:]) == link_handle: - return link[0] != 'Similarity' and link[0] != 'Set' + return link[0] != "Similarity" and link[0] != "Set" return True def get_link_handle(self, link_type: str, target_handles: list[str]) -> str: for link in self.all_links: if link[0] == link_type and len(target_handles) == (len(link) - 1): - if link_type == 'Similarity': + if link_type == "Similarity": if all(target in target_handles for target in link[1:]): return _build_link_handle(link_type, link[1:]) - elif link_type == 'Inheritance': + elif link_type == "Inheritance": for i in range(0, len(target_handles)): if target_handles[i] != link[i + 1]: break @@ -218,17 +222,17 @@ def get_matched_links(self, link_type: str, target_handles: list[str], **kwargs) answer = [] for link in self.all_links: if len(target_handles) == (len(link) - 1) and link[0] == link_type: - if link[0] == 'Similarity' or link[0] == 'Set': + if link[0] == "Similarity" or link[0] == "Set": if all(target == WILDCARD or target in link[1:] for target in target_handles): answer.append(_build_link_handle(link[0], link[1:])) - elif link[0] == 'Inheritance' or link[0] == 'List': + elif link[0] == "Inheritance" or link[0] == "List": for i in range(0, len(target_handles)): if target_handles[i] != WILDCARD and target_handles[i] != link[i + 1]: break else: answer.append(_build_link_handle(link[0], [])) - elif link[0] == 'Evaluation': - answer.append('test') + elif link[0] == "Evaluation": + answer.append("test") else: raise ValueError(f"Invalid link type: {link[0]}") return answer @@ -269,9 +273,9 @@ def get_matched_type(self, link_type: str, **kwargs) -> HandleListT: def get_atom_as_dict(self, handle: str, arity: int | None = 0) -> dict[str, Any]: if handle in self.all_nodes: return { - 'handle': handle, - 'type': handle.split()[0][1:-1], - 'name': handle.split()[1][:-1], + "handle": handle, + "type": handle.split()[0][1:-1], + "name": handle.split()[1][:-1], } match = re.search(r"<([^:]+): (.+)>", handle) _type = match.group(1) @@ -281,10 +285,10 @@ def get_atom_as_dict(self, handle: str, arity: int | None = 0) -> dict[str, Any] template.append(_split_node_handle(target)[0]) if match: return { - 'handle': handle, - 'type': _type, - 'template': template, - 'targets': targets, + "handle": handle, + "type": _type, + "template": template, + "targets": targets, } def get_link_type(self, link_handle: str) -> str | None: @@ -297,9 +301,9 @@ def get_node_type(self, node_handle: str) -> str | None: def count_atoms(self, parameters: dict[str, Any] | None = None) -> dict[str, int]: return { - 'link_count': len(self.all_links), - 'node_count': len(self.all_nodes), - 'atom_count': len(self.all_links) + len(self.all_nodes), + "link_count": len(self.all_links), + "node_count": len(self.all_nodes), + "atom_count": len(self.all_links) + len(self.all_nodes), } # return (len(self.all_nodes), len(self.all_links)) @@ -355,7 +359,7 @@ def get_atoms_by_field(self, query: list[OrderedDict[str, str]]) -> list[str]: def _append_atom(atom, named_type, name): for q in query: - if q['field'] == named_type and q['value'] in name: + if q["field"] == named_type and q["value"] in name: return True return False @@ -419,32 +423,32 @@ def __init__(self): super().__init__() self.all_links = [ - ['Similarity', self.human, self.monkey], - ['Similarity', self.human, self.chimp], - ['Similarity', self.chimp, self.monkey], - ['Similarity', self.snake, self.earthworm], - ['Similarity', self.rhino, self.triceratops], - ['Similarity', self.snake, self.vine], - ['Similarity', self.human, self.ent], - ['Inheritance', self.human, self.mammal], - ['Inheritance', self.monkey, self.mammal], - ['Inheritance', self.chimp, self.mammal], - ['Inheritance', self.mammal, self.animal], - ['Inheritance', self.reptile, self.animal], - ['Inheritance', self.snake, self.reptile], - ['Inheritance', self.dinosaur, self.reptile], - ['Inheritance', self.triceratops, self.dinosaur], - ['Inheritance', self.earthworm, self.animal], - ['Inheritance', self.rhino, self.mammal], - ['Inheritance', self.vine, self.plant], - ['Inheritance', self.ent, self.plant], - ['Similarity', self.monkey, self.human], - ['Similarity', self.chimp, self.human], - ['Similarity', self.monkey, self.chimp], - ['Similarity', self.earthworm, self.snake], - ['Similarity', self.triceratops, self.rhino], - ['Similarity', self.vine, self.snake], - ['Similarity', self.ent, self.human], + ["Similarity", self.human, self.monkey], + ["Similarity", self.human, self.chimp], + ["Similarity", self.chimp, self.monkey], + ["Similarity", self.snake, self.earthworm], + ["Similarity", self.rhino, self.triceratops], + ["Similarity", self.snake, self.vine], + ["Similarity", self.human, self.ent], + ["Inheritance", self.human, self.mammal], + ["Inheritance", self.monkey, self.mammal], + ["Inheritance", self.chimp, self.mammal], + ["Inheritance", self.mammal, self.animal], + ["Inheritance", self.reptile, self.animal], + ["Inheritance", self.snake, self.reptile], + ["Inheritance", self.dinosaur, self.reptile], + ["Inheritance", self.triceratops, self.dinosaur], + ["Inheritance", self.earthworm, self.animal], + ["Inheritance", self.rhino, self.mammal], + ["Inheritance", self.vine, self.plant], + ["Inheritance", self.ent, self.plant], + ["Similarity", self.monkey, self.human], + ["Similarity", self.chimp, self.human], + ["Similarity", self.monkey, self.chimp], + ["Similarity", self.earthworm, self.snake], + ["Similarity", self.triceratops, self.rhino], + ["Similarity", self.vine, self.snake], + ["Similarity", self.ent, self.human], ] self.incoming_set = {} diff --git a/src/tests/python/unit/test_attention_broker_gateway.py b/src/tests/python/unit/test_attention_broker_gateway.py index 1b76a75..c95f7bf 100644 --- a/src/tests/python/unit/test_attention_broker_gateway.py +++ b/src/tests/python/unit/test_attention_broker_gateway.py @@ -8,8 +8,8 @@ def test_creation(self): with pytest.raises(ValueError): AttentionBrokerGateway({}) with pytest.raises(ValueError): - AttentionBrokerGateway({'attention_broker_hostname': 'localhost'}) + AttentionBrokerGateway({"attention_broker_hostname": "localhost"}) with pytest.raises(ValueError): - AttentionBrokerGateway({'attention_broker_port': 27000}) + AttentionBrokerGateway({"attention_broker_port": 27000}) # successful creation is tested in a integration test because it requires # actual connection to a GRPC server diff --git a/src/tests/python/unit/test_cache.py b/src/tests/python/unit/test_cache.py index 03f5c7e..e4a5131 100644 --- a/src/tests/python/unit/test_cache.py +++ b/src/tests/python/unit/test_cache.py @@ -18,11 +18,11 @@ class TestListIterator: def test_list_iterator(self): iterator = ListIterator(None) - for element in iterator: + for _element in iterator: assert False iterator = ListIterator([]) - for element in iterator: + for _element in iterator: assert False iterator = ListIterator( @@ -134,30 +134,30 @@ def test_product_iterator(self): for arg in [[ln, l1], [ln, l1, l2], [ln]]: iterator = ProductIterator([ListIterator(v) for v in arg]) assert iterator.is_empty() - for element in iterator: + for _element in iterator: assert False assert iterator.is_empty() for arg in [[l0, l1], [l0, l1, l2], [l0]]: iterator = ProductIterator([ListIterator(v) for v in arg]) assert iterator.is_empty() - for element in iterator: + for _element in iterator: assert False assert iterator.is_empty() class ConcreteBaseLinksIterator(BaseLinksIterator): def get_current_value(self): - return 'current_value' + return "current_value" def get_fetch_data(self, **kwargs): return 2024, [] def get_fetch_data_kwargs(self): - return {'fetch_data_kwargs': True} + return {"fetch_data_kwargs": True} def get_next_value(self): - return 'next_value' + return "next_value" class TestBaseLinksIterator: @@ -200,13 +200,13 @@ def test_fetch_data(self): def test_refresh_iterator(self): source = ListIterator([1, 2, 3]) iterator = ConcreteBaseLinksIterator(source, cursor=1) - iterator.get_current_value = mock.MagicMock(return_value='current_value') + iterator.get_current_value = mock.MagicMock(return_value="current_value") iterator._refresh_iterator() iterator.get_current_value.assert_called_once() assert iterator.source.source == ListIterator(list(iterator.buffer_queue)).source assert iterator.iterator == iterator.source - assert iterator.current_value == 'current_value' + assert iterator.current_value == "current_value" assert iterator.buffer_queue == deque() def test_is_empty(self): @@ -220,7 +220,7 @@ class TestLocalIncomingLinks: @pytest.fixture def backend(self): backend = mock.MagicMock() - backend.get_atom.side_effect = lambda x, targets_document=None: {'handle': x} + backend.get_atom.side_effect = lambda x, targets_document=None: {"handle": x} return backend def test_get_next_value(self, backend): @@ -258,14 +258,14 @@ def test_get_current_value(self, backend): def test_get_fetch_data_kwargs(self, backend): iterator = LocalIncomingLinks(ListIterator([1, 2, 3]), backend=backend) assert iterator.get_fetch_data_kwargs() == { - 'handles_only': True, - 'cursor': iterator.cursor, - 'chunk_size': iterator.chunk_size, + "handles_only": True, + "cursor": iterator.cursor, + "chunk_size": iterator.chunk_size, } def test_get_fetch_data(self, backend): iterator = LocalIncomingLinks(ListIterator([1, 2, 3]), backend=backend) - kwargs = {'param1': 'value1', 'param2': 'value2'} + kwargs = {"param1": "value1", "param2": "value2"} result = iterator.get_fetch_data(**kwargs) assert result == backend.get_incoming_links(iterator.atom_handle, **kwargs) @@ -273,31 +273,36 @@ def test_get_fetch_data(self, backend): class TestRemoteIncomingLinks: def test_get_next_value(self): source = ListIterator( - [{'handle': 'link1'}, {'handle': 'link2'}, {'handle': 'link3'}, {'handle': 'link4'}] + [ + {"handle": "link1"}, + {"handle": "link2"}, + {"handle": "link3"}, + {"handle": "link4"}, + ] ) iterator = RemoteIncomingLinks(source) - iterator.returned_handles = set(['link2', 'link3']) + iterator.returned_handles = set(["link2", "link3"]) iterator.get_next_value() - assert iterator.current_value == {'handle': 'link1'} + assert iterator.current_value == {"handle": "link1"} iterator.get_next_value() - assert iterator.current_value == {'handle': 'link4'} + assert iterator.current_value == {"handle": "link4"} def test_get_current_value(self): source = ListIterator( [ - {'handle': 'link1'}, - {'handle': 'link2'}, + {"handle": "link1"}, + {"handle": "link2"}, ] ) iterator = RemoteIncomingLinks(source) iterator.get_next_value() - assert iterator.get_current_value() == {'handle': 'link1'} + assert iterator.get_current_value() == {"handle": "link1"} iterator.get_next_value() - assert iterator.get_current_value() == {'handle': 'link2'} + assert iterator.get_current_value() == {"handle": "link2"} iterator = RemoteIncomingLinks(ListIterator([])) assert iterator.is_empty() is True @@ -305,44 +310,50 @@ def test_get_current_value(self): def test_get_fetch_data_kwargs(self): source = ListIterator( [ - {'handle': 'link1'}, - {'handle': 'link2'}, + {"handle": "link1"}, + {"handle": "link2"}, ] ) - iterator = RemoteIncomingLinks(source, atom_handle='atom1', targets_document=True) + iterator = RemoteIncomingLinks(source, atom_handle="atom1", targets_document=True) kwargs = iterator.get_fetch_data_kwargs() assert kwargs == { - 'cursor': iterator.cursor, - 'chunk_size': iterator.chunk_size, - 'targets_document': iterator.targets_document, + "cursor": iterator.cursor, + "chunk_size": iterator.chunk_size, + "targets_document": iterator.targets_document, } def test_get_fetch_data(self): backend = mock.MagicMock() - backend.get_incoming_links.return_value = (123, [{'handle': 'link1'}, {'handle': 'link2'}]) + backend.get_incoming_links.return_value = ( + 123, + [{"handle": "link1"}, {"handle": "link2"}], + ) source = ListIterator([]) - iterator = RemoteIncomingLinks(source, atom_handle='atom1') + iterator = RemoteIncomingLinks(source, atom_handle="atom1") iterator.backend = backend result = iterator.get_fetch_data(cursor=0, chunk_size=100) - assert result == (123, [{'handle': 'link1'}, {'handle': 'link2'}]) - backend.get_incoming_links.assert_called_once_with('atom1', cursor=0, chunk_size=100) + assert result == (123, [{"handle": "link1"}, {"handle": "link2"}]) + backend.get_incoming_links.assert_called_once_with("atom1", cursor=0, chunk_size=100) class TestTraverseLinksIterator: @pytest.fixture def incoming_links(self): - source = ListIterator(['link1', 'link2', 'link3']) + source = ListIterator(["link1", "link2", "link3"]) backend = mock.Mock() targets_document = True backend.get_atom.side_effect = lambda handle, targets_document=targets_document: ( { - 'handle': handle, - 'named_type': f'Type{handle[-1]}', - 'targets': ['node11', f'node{handle[-1]}2'], + "handle": handle, + "named_type": f"Type{handle[-1]}", + "targets": ["node11", f"node{handle[-1]}2"], }, [ - {'handle': 'node11', 'named_type': 'Type2'}, - {'handle': f'node{handle[-1]}2', 'named_type': f'Type{int(handle[-1]) + 1}'}, + {"handle": "node11", "named_type": "Type2"}, + { + "handle": f"node{handle[-1]}2", + "named_type": f"Type{int(handle[-1]) + 1}", + }, ], ) return LocalIncomingLinks(source=source, backend=backend, targets_document=targets_document) @@ -359,19 +370,19 @@ def test_no_filters(self, incoming_links): assert iterator.is_empty() is False assert next(iterator) == { - 'handle': 'link1', - 'named_type': 'Type1', - 'targets': ['node11', 'node12'], + "handle": "link1", + "named_type": "Type1", + "targets": ["node11", "node12"], } assert next(iterator) == { - 'handle': 'link2', - 'named_type': 'Type2', - 'targets': ['node11', 'node22'], + "handle": "link2", + "named_type": "Type2", + "targets": ["node11", "node22"], } assert next(iterator) == { - 'handle': 'link3', - 'named_type': 'Type3', - 'targets': ['node11', 'node32'], + "handle": "link3", + "named_type": "Type3", + "targets": ["node11", "node32"], } with pytest.raises(StopIteration): next(iterator) @@ -379,36 +390,36 @@ def test_no_filters(self, incoming_links): def test_with_filters(self, incoming_links): iterator = TraverseLinksIterator( - source=incoming_links, link_type='Type2', target_type='Type3' + source=incoming_links, link_type="Type2", target_type="Type3" ) assert iterator.is_empty() is False assert next(iterator) == { - 'handle': 'link2', - 'named_type': 'Type2', - 'targets': ['node11', 'node22'], + "handle": "link2", + "named_type": "Type2", + "targets": ["node11", "node22"], } with pytest.raises(StopIteration): next(iterator) assert iterator.is_empty() is True def test_cursor_position(self, incoming_links): - iterator = TraverseLinksIterator(incoming_links, cursor_position=0, cursor='node11') + iterator = TraverseLinksIterator(incoming_links, cursor_position=0, cursor="node11") assert iterator.is_empty() is False assert next(iterator) == { - 'handle': 'link1', - 'named_type': 'Type1', - 'targets': ['node11', 'node12'], + "handle": "link1", + "named_type": "Type1", + "targets": ["node11", "node12"], } assert next(iterator) == { - 'handle': 'link2', - 'named_type': 'Type2', - 'targets': ['node11', 'node22'], + "handle": "link2", + "named_type": "Type2", + "targets": ["node11", "node22"], } assert next(iterator) == { - 'handle': 'link3', - 'named_type': 'Type3', - 'targets': ['node11', 'node32'], + "handle": "link3", + "named_type": "Type3", + "targets": ["node11", "node32"], } with pytest.raises(StopIteration): next(iterator) @@ -416,15 +427,15 @@ def test_cursor_position(self, incoming_links): def test_custom_filter(self, incoming_links): def custom_filter(link): - return link['named_type'] == 'Type3' + return link["named_type"] == "Type3" iterator = TraverseLinksIterator(incoming_links, filter=custom_filter) assert iterator.is_empty() is False assert next(iterator) == { - 'handle': 'link3', - 'named_type': 'Type3', - 'targets': ['node11', 'node32'], + "handle": "link3", + "named_type": "Type3", + "targets": ["node11", "node32"], } with pytest.raises(StopIteration): next(iterator) @@ -434,16 +445,16 @@ def test_targets_only(self, incoming_links): iterator = TraverseLinksIterator(incoming_links, targets_only=True) assert iterator.is_empty() is False assert next(iterator) == [ - {'handle': 'node11', 'named_type': 'Type2'}, - {'handle': 'node12', 'named_type': 'Type2'}, + {"handle": "node11", "named_type": "Type2"}, + {"handle": "node12", "named_type": "Type2"}, ] assert next(iterator) == [ - {'handle': 'node11', 'named_type': 'Type2'}, - {'handle': 'node22', 'named_type': 'Type3'}, + {"handle": "node11", "named_type": "Type2"}, + {"handle": "node22", "named_type": "Type3"}, ] assert next(iterator) == [ - {'handle': 'node11', 'named_type': 'Type2'}, - {'handle': 'node32', 'named_type': 'Type4'}, + {"handle": "node11", "named_type": "Type2"}, + {"handle": "node32", "named_type": "Type4"}, ] with pytest.raises(StopIteration): next(iterator) @@ -453,25 +464,28 @@ def test_targets_only(self, incoming_links): class TestTraverseNeighborsIterator: @pytest.fixture def traverse_links_iterator(self): - source = ListIterator(['link1', 'link2', 'link3']) + source = ListIterator(["link1", "link2", "link3"]) backend = mock.Mock() targets_document = True backend.get_atom.side_effect = lambda handle, targets_document=targets_document: ( { - 'handle': handle, - 'named_type': f'Type{handle[-1]}', - 'targets': ['node11', f'node{handle[-1]}2'], + "handle": handle, + "named_type": f"Type{handle[-1]}", + "targets": ["node11", f"node{handle[-1]}2"], }, [ - {'handle': 'node11', 'named_type': 'Type2'}, - {'handle': f'node{handle[-1]}2', 'named_type': f'Type{int(handle[-1]) + 1}'}, + {"handle": "node11", "named_type": "Type2"}, + { + "handle": f"node{handle[-1]}2", + "named_type": f"Type{int(handle[-1]) + 1}", + }, ], ) incoming_links = LocalIncomingLinks( source=source, backend=backend, targets_document=targets_document ) - return TraverseLinksIterator(incoming_links, targets_only=True, cursor='node11') + return TraverseLinksIterator(incoming_links, targets_only=True, cursor="node11") def test_init(self, traverse_links_iterator): iterator = TraverseNeighborsIterator(source=traverse_links_iterator) @@ -479,9 +493,9 @@ def test_init(self, traverse_links_iterator): assert iterator.buffered_answer is not None assert iterator.cursor == traverse_links_iterator.cursor assert iterator.target_type == traverse_links_iterator.target_type - assert iterator.visited_neighbors == ['node12'] + assert iterator.visited_neighbors == ["node12"] assert iterator.iterator == traverse_links_iterator - assert iterator.current_value == {'handle': 'node12', 'named_type': 'Type2'} + assert iterator.current_value == {"handle": "node12", "named_type": "Type2"} def test_next_with_buffered_answer(self): iterator = TraverseNeighborsIterator(source=mock.Mock()) @@ -492,29 +506,29 @@ def test_next_with_buffered_answer(self): def test_next_without_buffered_answer(self, traverse_links_iterator): iterator = TraverseNeighborsIterator(source=traverse_links_iterator) - assert next(iterator) == {'handle': 'node12', 'named_type': 'Type2'} - assert next(iterator) == {'handle': 'node22', 'named_type': 'Type3'} - assert next(iterator) == {'handle': 'node32', 'named_type': 'Type4'} + assert next(iterator) == {"handle": "node12", "named_type": "Type2"} + assert next(iterator) == {"handle": "node22", "named_type": "Type3"} + assert next(iterator) == {"handle": "node32", "named_type": "Type4"} with pytest.raises(StopIteration): next(iterator) def test_process_targets(self, traverse_links_iterator): iterator = TraverseNeighborsIterator(source=traverse_links_iterator) targets = [ - {'handle': 'node11', 'named_type': 'Type2'}, - {'handle': 'node22', 'named_type': 'Type3'}, + {"handle": "node11", "named_type": "Type2"}, + {"handle": "node22", "named_type": "Type3"}, ] answer, match_found = iterator._process_targets(targets) - assert answer == [{'handle': 'node22', 'named_type': 'Type3'}] + assert answer == [{"handle": "node22", "named_type": "Type3"}] assert match_found is True def test_filter(self, traverse_links_iterator): iterator = TraverseNeighborsIterator(source=traverse_links_iterator) - target = {'handle': 'node11', 'named_type': 'Type2'} + target = {"handle": "node11", "named_type": "Type2"} assert iterator._filter(target) is False - target = {'handle': 'node22', 'named_type': 'Type3'} + target = {"handle": "node22", "named_type": "Type3"} assert iterator._filter(target) is True def test_is_empty(self): @@ -524,5 +538,5 @@ def test_is_empty(self): iterator.current_value = None assert iterator.is_empty() is True - iterator.current_value = {'handle': 1} + iterator.current_value = {"handle": 1} assert iterator.is_empty() is False diff --git a/src/tests/python/unit/test_cache_controller.py b/src/tests/python/unit/test_cache_controller.py index 5c2ac44..32e6553 100644 --- a/src/tests/python/unit/test_cache_controller.py +++ b/src/tests/python/unit/test_cache_controller.py @@ -9,9 +9,9 @@ from hyperon_das.utils import QueryAnswer SYSTEM_PARAMETERS = { - 'attention_broker_hostname': None, - 'attention_broker_port': None, - 'cache_enabled': False, + "attention_broker_hostname": None, + "attention_broker_port": None, + "cache_enabled": False, } @@ -31,7 +31,7 @@ class TestCacheController: def _build_controller(self): params = SYSTEM_PARAMETERS.copy() controller = CacheController(params) - params['cache_enabled'] = True + params["cache_enabled"] = True controller.attention_broker = AttentionBrokerGatewayMock() return controller @@ -40,71 +40,77 @@ def test_creation(self): controller = CacheController({}) assert not controller.enabled() # assert default == False with pytest.raises(ValueError): - controller = CacheController({'cache_enabled': True}) - controller = CacheController({'cache_enabled': False}) + controller = CacheController({"cache_enabled": True}) + controller = CacheController({"cache_enabled": False}) assert not controller.enabled() def test_get_atom(self): controller = CacheController({}) - assert controller.get_atom('blah') is None + assert controller.get_atom("blah") is None def test_add_context(self): controller = self._build_controller() - node = NodeT(type='Context', name='blah') - node.handle = node._id = 'h1' + node = NodeT(type="Context", name="blah") + node.handle = node._id = "h1" context = Context( node, [ - [QueryAnswer({'handle': 'h1'}, None), QueryAnswer({'handle': 'h2'}, None)], - [QueryAnswer({'handle': 'h1'}, None), QueryAnswer({'handle': 'h3'}, None)], + [ + QueryAnswer({"handle": "h1"}, None), + QueryAnswer({"handle": "h2"}, None), + ], + [ + QueryAnswer({"handle": "h1"}, None), + QueryAnswer({"handle": "h3"}, None), + ], ], ) controller.add_context(context) broker = controller.attention_broker assert len(controller.attention_broker.handle_set_list) == 4 - assert broker.handle_set_list[0] == set(['h1']) - assert broker.handle_set_list[1] == set(['h2']) - assert broker.handle_set_list[2] == set(['h1']) - assert broker.handle_set_list[3] == set(['h3']) + assert broker.handle_set_list[0] == set(["h1"]) + assert broker.handle_set_list[1] == set(["h2"]) + assert broker.handle_set_list[2] == set(["h1"]) + assert broker.handle_set_list[3] == set(["h3"]) assert len(broker.handle_count) == 2 - assert broker.handle_count['h1'] == 1 - assert broker.handle_count['h3'] == 1 + assert broker.handle_count["h1"] == 1 + assert broker.handle_count["h3"] == 1 def test_regard_query_answer(self): controller = self._build_controller() - query_answer_1 = QueryAnswer({'handle': 'h7'}, None) + query_answer_1 = QueryAnswer({"handle": "h7"}, None) query_answer_2 = QueryAnswer( { - 'handle': 'h1', - 'targets': [ - {'handle': 'h8'}, - {'handle': 'h9'}, + "handle": "h1", + "targets": [ + {"handle": "h8"}, + {"handle": "h9"}, ], }, None, ) query_answer_3 = QueryAnswer( { - 'handle': 'h1', - 'targets': [ - {'handle': 'h2'}, + "handle": "h1", + "targets": [ + {"handle": "h2"}, { - 'handle': 'h2', - 'targets': [ - {'handle': 'h4'}, - {'handle': 'h1'}, + "handle": "h2", + "targets": [ + {"handle": "h4"}, + {"handle": "h1"}, ], }, { - 'handle': 'h5', - 'targets': [ - {'handle': 'h1'}, - {'handle': 'h6'}, + "handle": "h5", + "targets": [ + {"handle": "h1"}, + {"handle": "h6"}, ], }, - {'handle': 'h3'}, + {"handle": "h3"}, ], }, None, @@ -114,20 +120,20 @@ def test_regard_query_answer(self): broker = controller.attention_broker assert len(controller.attention_broker.handle_set_list) == 3 - assert broker.handle_set_list[0] == set(['h7']) - assert broker.handle_set_list[1] == set(['h1', 'h8', 'h9']) - assert broker.handle_set_list[2] == set(['h1', 'h2', 'h3', 'h4', 'h5', 'h6']) + assert broker.handle_set_list[0] == set(["h7"]) + assert broker.handle_set_list[1] == set(["h1", "h8", "h9"]) + assert broker.handle_set_list[2] == set(["h1", "h2", "h3", "h4", "h5", "h6"]) all_handles = set() for handle_set in broker.handle_set_list: all_handles.update(handle_set) assert len(broker.handle_count) == len(all_handles) - assert broker.handle_count['h1'] == 4 - assert broker.handle_count['h2'] == 2 - assert broker.handle_count['h3'] == 1 - assert broker.handle_count['h4'] == 1 - assert broker.handle_count['h5'] == 1 - assert broker.handle_count['h6'] == 1 - assert broker.handle_count['h7'] == 1 - assert broker.handle_count['h8'] == 1 - assert broker.handle_count['h9'] == 1 + assert broker.handle_count["h1"] == 4 + assert broker.handle_count["h2"] == 2 + assert broker.handle_count["h3"] == 1 + assert broker.handle_count["h4"] == 1 + assert broker.handle_count["h5"] == 1 + assert broker.handle_count["h6"] == 1 + assert broker.handle_count["h7"] == 1 + assert broker.handle_count["h8"] == 1 + assert broker.handle_count["h9"] == 1 diff --git a/src/tests/python/unit/test_client.py b/src/tests/python/unit/test_client.py index b24a602..55170da 100644 --- a/src/tests/python/unit/test_client.py +++ b/src/tests/python/unit/test_client.py @@ -6,20 +6,24 @@ import hyperon_das.link_filters as link_filter from hyperon_das.client import FunctionsClient -from hyperon_das.exceptions import FunctionsConnectionError, FunctionsTimeoutError, RequestError +from hyperon_das.exceptions import ( + FunctionsConnectionError, + FunctionsTimeoutError, + RequestError, +) from hyperon_das.utils import serialize class TestFunctionsClient: @pytest.fixture def mock_request(self): - with patch('requests.sessions.Session.request') as mock_request: + with patch("requests.sessions.Session.request") as mock_request: yield mock_request @pytest.fixture def client(self): - with patch('hyperon_das.utils.check_server_connection', return_value=(200, 'OK')): - return FunctionsClient(host='0.0.0.0', port=1000) + with patch("hyperon_das.utils.check_server_connection", return_value=(200, "OK")): + return FunctionsClient(host="0.0.0.0", port=1000) def test_get_atom_success(self, mock_request, client): expected_request_data = {"action": "get_atom", "input": {"handle": "123"}} @@ -33,13 +37,13 @@ def test_get_atom_success(self, mock_request, client): mock_request.return_value.status_code = 200 mock_request.return_value.content = serialize(expected_response) - result = client.get_atom(handle='123') + result = client.get_atom(handle="123") mock_request.assert_called_with( - method='POST', - url='http://0.0.0.0:1000/function/query-engine', + method="POST", + url="http://0.0.0.0:1000/function/query-engine", data=serialize(expected_request_data), - headers={'Content-Type': 'application/octet-stream'}, + headers={"Content-Type": "application/octet-stream"}, ) assert result == expected_response @@ -57,13 +61,13 @@ def test_create_context_success(self, mock_request, client): mock_request.return_value.status_code = 200 mock_request.return_value.content = serialize(expected_response) - result = client.create_context(name='n', queries=[]) + result = client.create_context(name="n", queries=[]) mock_request.assert_called_with( - method='POST', - url='http://0.0.0.0:1000/function/query-engine', + method="POST", + url="http://0.0.0.0:1000/function/query-engine", data=serialize(expected_request_data), - headers={'Content-Type': 'application/octet-stream'}, + headers={"Content-Type": "application/octet-stream"}, ) assert result == expected_response @@ -89,7 +93,10 @@ def test_get_links_success(self, mock_request, client): "handle": "ee1c03e6d1f104ccd811cfbba018451a", "type": "Inheritance", "template": ["Inheritance", "Concept", "Concept"], - "targets": ["4e8e26e3276af8a5c2ac2cc2dc95c6d2", "80aff30094874e75028033a38ce677bb"], + "targets": [ + "4e8e26e3276af8a5c2ac2cc2dc95c6d2", + "80aff30094874e75028033a38ce677bb", + ], } ] @@ -98,16 +105,19 @@ def test_get_links_success(self, mock_request, client): result = client.get_links( link_filter.Targets( - ['4e8e26e3276af8a5c2ac2cc2dc95c6d2', '80aff30094874e75028033a38ce677bb'], - 'Inheritance', + [ + "4e8e26e3276af8a5c2ac2cc2dc95c6d2", + "80aff30094874e75028033a38ce677bb", + ], + "Inheritance", ) ) mock_request.assert_called_with( - method='POST', - url='http://0.0.0.0:1000/function/query-engine', + method="POST", + url="http://0.0.0.0:1000/function/query-engine", data=serialize(expected_request_data), - headers={'Content-Type': 'application/octet-stream'}, + headers={"Content-Type": "application/octet-stream"}, ) assert result == expected_response @@ -162,10 +172,10 @@ def test_query_success(self, mock_request, client): result = client.query(query, parameters=[]) mock_request.assert_called_with( - method='POST', - url='http://0.0.0.0:1000/function/query-engine', + method="POST", + url="http://0.0.0.0:1000/function/query-engine", data=serialize(expected_request_data), - headers={'Content-Type': 'application/octet-stream'}, + headers={"Content-Type": "application/octet-stream"}, ) assert result == expected_response @@ -178,9 +188,13 @@ def test_query_success(self, mock_request, client): "query": { "atom_type": "link", "targets": [ - {'atom_type': 'variable', 'name': 'v1'}, - {'atom_type': 'node', 'type': 'Symbol', 'name': '"earthworm"'}, - {'atom_type': 'variable', 'name': 'v2'}, + {"atom_type": "variable", "name": "v1"}, + { + "atom_type": "node", + "type": "Symbol", + "name": '"earthworm"', + }, + {"atom_type": "variable", "name": "v2"}, ], }, "parameters": [], @@ -188,7 +202,7 @@ def test_query_success(self, mock_request, client): ), ( { - "query": {"atom_type": "link", 'type': 'Expression'}, + "query": {"atom_type": "link", "type": "Expression"}, "parameters": [], } ), @@ -196,11 +210,15 @@ def test_query_success(self, mock_request, client): { "query": { "atom_type": "node", - 'type': 'Expression', + "type": "Expression", "targets": [ - {'atom_type': 'variable', 'name': 'v1'}, - {'atom_type': 'node', 'type': 'Symbol', 'name': '"earthworm"'}, - {'atom_type': 'variable', 'name': 'v2'}, + {"atom_type": "variable", "name": "v1"}, + { + "atom_type": "node", + "type": "Symbol", + "name": '"earthworm"', + }, + {"atom_type": "variable", "name": "v2"}, ], }, "parameters": [], @@ -230,10 +248,10 @@ def test_query_malformed(self, query, mock_request, client): client.query(query, parameters=[]) mock_request.assert_called_with( - method='POST', - url='http://0.0.0.0:1000/function/query-engine', + method="POST", + url="http://0.0.0.0:1000/function/query-engine", data=serialize(expected_request_data), - headers={'Content-Type': 'application/octet-stream'}, + headers={"Content-Type": "application/octet-stream"}, ) def test_count_atoms_success(self, mock_request, client): @@ -245,37 +263,37 @@ def test_count_atoms_success(self, mock_request, client): result = client.count_atoms() mock_request.assert_called_once_with( - method='POST', - url='http://0.0.0.0:1000/function/query-engine', + method="POST", + url="http://0.0.0.0:1000/function/query-engine", data=serialize(expected_request_data), - headers={'Content-Type': 'application/octet-stream'}, + headers={"Content-Type": "application/octet-stream"}, ) assert result == expected_response def test_count_atoms_success_parameters(self, mock_request, client): - values = {'parameters': {'context': 'local'}} + values = {"parameters": {"context": "local"}} expected_request_data = {"action": "count_atoms", "input": values} expected_response = (14, 26) mock_request.return_value.status_code = 200 mock_request.return_value.content = serialize(expected_response) - result = client.count_atoms(values['parameters']) + result = client.count_atoms(values["parameters"]) mock_request.assert_called_once_with( - method='POST', - url='http://0.0.0.0:1000/function/query-engine', + method="POST", + url="http://0.0.0.0:1000/function/query-engine", data=serialize(expected_request_data), - headers={'Content-Type': 'application/octet-stream'}, + headers={"Content-Type": "application/octet-stream"}, ) assert result == expected_response def test_get_atoms_by_field(self, mock_request, client): - query = [{'field': 'name', 'value': 'test'}] + query = [{"field": "name", "value": "test"}] expected_request_data = { "action": "get_atoms_by_field", - "input": {'query': {k['field']: k['value'] for k in query}}, + "input": {"query": {k["field"]: k["value"] for k in query}}, } expected_response = (14, 26) mock_request.return_value.status_code = 200 @@ -283,35 +301,38 @@ def test_get_atoms_by_field(self, mock_request, client): result = client.get_atoms_by_field(query=query) mock_request.assert_called_once_with( - method='POST', - url='http://0.0.0.0:1000/function/query-engine', + method="POST", + url="http://0.0.0.0:1000/function/query-engine", data=serialize(expected_request_data), - headers={'Content-Type': 'application/octet-stream'}, + headers={"Content-Type": "application/octet-stream"}, ) assert result == expected_response def test_get_atoms_by_text_field(self, mock_request, client): - expected_input = {'text_value': 'value'} - expected_request_data = {"action": "get_atoms_by_text_field", "input": expected_input} + expected_input = {"text_value": "value"} + expected_request_data = { + "action": "get_atoms_by_text_field", + "input": expected_input, + } expected_response = (14, 26) mock_request.return_value.status_code = 200 mock_request.return_value.content = serialize(expected_response) result = client.get_atoms_by_text_field(**expected_input) mock_request.assert_called_once_with( - method='POST', - url='http://0.0.0.0:1000/function/query-engine', + method="POST", + url="http://0.0.0.0:1000/function/query-engine", data=serialize(expected_request_data), - headers={'Content-Type': 'application/octet-stream'}, + headers={"Content-Type": "application/octet-stream"}, ) assert result == expected_response def test_get_node_by_name_starting_with(self, mock_request, client): expected_input = { - 'node_type': 'Concept', - 'startswith': 'nam', + "node_type": "Concept", + "startswith": "nam", } expected_request_data = { "action": "get_node_by_name_starting_with", @@ -323,10 +344,10 @@ def test_get_node_by_name_starting_with(self, mock_request, client): result = client.get_node_by_name_starting_with(**expected_input) mock_request.assert_called_once_with( - method='POST', - url='http://0.0.0.0:1000/function/query-engine', + method="POST", + url="http://0.0.0.0:1000/function/query-engine", data=serialize(expected_request_data), - headers={'Content-Type': 'application/octet-stream'}, + headers={"Content-Type": "application/octet-stream"}, ) assert result == expected_response @@ -346,10 +367,10 @@ def test_send_request_success(self, mock_request, client): result = client._send_request(payload) mock_request.assert_called_with( - method='POST', - url='http://0.0.0.0:1000/function/query-engine', + method="POST", + url="http://0.0.0.0:1000/function/query-engine", data=serialize(payload), - headers={'Content-Type': 'application/octet-stream'}, + headers={"Content-Type": "application/octet-stream"}, ) assert result == expected_response diff --git a/src/tests/python/unit/test_context.py b/src/tests/python/unit/test_context.py index 1e3a4e9..6bf421d 100644 --- a/src/tests/python/unit/test_context.py +++ b/src/tests/python/unit/test_context.py @@ -5,9 +5,9 @@ class TestContext: def test_creation(self): - context_name = 'blah' - context_handle = 'h' - node = NodeT(type='Context', name=context_name) + context_name = "blah" + context_handle = "h" + node = NodeT(type="Context", name=context_name) node.handle = node._id = context_handle context = Context(node, []) assert context.name == context_name diff --git a/src/tests/python/unit/test_das.py b/src/tests/python/unit/test_das.py index ae192ea..86b3d78 100644 --- a/src/tests/python/unit/test_das.py +++ b/src/tests/python/unit/test_das.py @@ -18,46 +18,47 @@ def test_create_das(self): assert isinstance(das.backend, InMemoryDB) assert isinstance(das.query_engine, LocalQueryEngine) - with mock.patch('hyperon_das.utils.check_server_connection', return_value=(200, 'OK')): - das = DistributedAtomSpace(query_engine='remote', host='0.0.0.0', port=1234) + with mock.patch("hyperon_das.utils.check_server_connection", return_value=(200, "OK")): + das = DistributedAtomSpace(query_engine="remote", host="0.0.0.0", port=1234) assert isinstance(das.backend, InMemoryDB) assert isinstance(das.query_engine, RemoteQueryEngine) with pytest.raises(InvalidAtomDB): - das = DistributedAtomSpace(atomdb='snet') + das = DistributedAtomSpace(atomdb="snet") with pytest.raises(InvalidQueryEngine) as exc: - das = DistributedAtomSpace(query_engine='snet') + das = DistributedAtomSpace(query_engine="snet") assert exc.value.message == "Use either 'local' or 'remote'" - assert exc.value.details == 'query_engine=snet' + assert exc.value.details == "query_engine=snet" def test_get_incoming_links(self): das = DistributedAtomSpaceMock() - links = das.get_incoming_links('', handles_only=True) + links = das.get_incoming_links("", handles_only=True) assert len(links) == 7 - links = das.get_incoming_links('') + links = das.get_incoming_links("") assert len(links) == 7 - with mock.patch('hyperon_das.utils.check_server_connection', return_value=(200, 'OK')): - das_remote = DistributedAtomSpaceMock('remote', host='test', port=8080) + with mock.patch("hyperon_das.utils.check_server_connection", return_value=(200, "OK")): + das_remote = DistributedAtomSpaceMock("remote", host="test", port=8080) - with mock.patch('hyperon_das.client.FunctionsClient.get_incoming_links', return_value=[]): - links = das_remote.get_incoming_links('') + with mock.patch("hyperon_das.client.FunctionsClient.get_incoming_links", return_value=[]): + links = das_remote.get_incoming_links("") assert len(links) == 7 with mock.patch( - 'hyperon_das.client.FunctionsClient.get_incoming_links', return_value=[1, 2, 3, 4] + "hyperon_das.client.FunctionsClient.get_incoming_links", + return_value=[1, 2, 3, 4], ): - links = das_remote.get_incoming_links('') + links = das_remote.get_incoming_links("") assert links == [1, 2, 3, 4] with mock.patch( - 'hyperon_das.client.FunctionsClient.get_incoming_links', + "hyperon_das.client.FunctionsClient.get_incoming_links", return_value=["['Inheritance', '', '']"], ): - links = das_remote.get_incoming_links('', handles_only=True) + links = das_remote.get_incoming_links("", handles_only=True) assert set(links) == { "['Inheritance', '', '']", "['Similarity', '', '']", @@ -67,30 +68,30 @@ def test_get_incoming_links(self): def test_get_traversal_cursor(self): das = DistributedAtomSpace() - das.add_node(NodeT(type='Concept', name='human')) - human = das.compute_node_handle('Concept', 'human') + das.add_node(NodeT(type="Concept", name="human")) + human = das.compute_node_handle("Concept", "human") cursor = das.get_traversal_cursor(human) assert isinstance(cursor, TraverseEngine) with pytest.raises(GetTraversalCursorException) as exc: - das.get_traversal_cursor(handle='snet') + das.get_traversal_cursor(handle="snet") - assert exc.value.message == 'Cannot start Traversal. Atom does not exist' + assert exc.value.message == "Cannot start Traversal. Atom does not exist" def test_get_atom(self): das = DistributedAtomSpace() das.add_link( LinkT( - type='expression', + type="expression", targets=[ - NodeT(type='symbol', name='a'), + NodeT(type="symbol", name="a"), LinkT( - type='expression', + type="expression", targets=[ - NodeT(type='symbol', name='b'), - NodeT(type='symbol', name='c'), + NodeT(type="symbol", name="b"), + NodeT(type="symbol", name="c"), ], ), ], @@ -98,43 +99,43 @@ def test_get_atom(self): ) handle = {} - for n in ['a', 'b', 'c']: - handle[n] = das.compute_node_handle('symbol', n) + for n in ["a", "b", "c"]: + handle[n] = das.compute_node_handle("symbol", n) - handle['internal_link'] = das.compute_link_handle('expression', [handle['b'], handle['c']]) - handle['external_link'] = das.compute_link_handle( - 'expression', [handle['a'], handle['internal_link']] + handle["internal_link"] = das.compute_link_handle("expression", [handle["b"], handle["c"]]) + handle["external_link"] = das.compute_link_handle( + "expression", [handle["a"], handle["internal_link"]] ) - for n in ['a', 'b', 'c']: + for n in ["a", "b", "c"]: document = das.get_atom(handle[n]) - assert document.named_type == 'symbol' + assert document.named_type == "symbol" assert document.name == n assert document.handle == handle[n] - document = das.get_atom(handle['internal_link']) - assert document.named_type == 'expression' - assert document.handle == handle['internal_link'] - assert document.targets == [handle['b'], handle['c']] + document = das.get_atom(handle["internal_link"]) + assert document.named_type == "expression" + assert document.handle == handle["internal_link"] + assert document.targets == [handle["b"], handle["c"]] - document = das.get_atom(handle['external_link']) - assert document.named_type == 'expression' - assert document.handle == handle['external_link'] - assert document.targets == [handle['a'], handle['internal_link']] + document = das.get_atom(handle["external_link"]) + assert document.named_type == "expression" + assert document.handle == handle["external_link"] + assert document.targets == [handle["a"], handle["internal_link"]] - assert das.get_atoms([handle['a'], handle['external_link'], handle['c']]) == [ - das.get_atom(handle['a']), - das.get_atom(handle['external_link']), - das.get_atom(handle['c']), + assert das.get_atoms([handle["a"], handle["external_link"], handle["c"]]) == [ + das.get_atom(handle["a"]), + das.get_atom(handle["external_link"]), + das.get_atom(handle["c"]), ] def test_about(self): das = DistributedAtomSpace() assert isinstance(das.about(), dict) - assert 'das' in das.about() - assert 'atom_db' in das.about() - assert {'name', 'version', 'summary'} == set(das.about().get('das').keys()) - assert {'name', 'version', 'summary'} == set(das.about().get('atom_db').keys()) + assert "das" in das.about() + assert "atom_db" in das.about() + assert {"name", "version", "summary"} == set(das.about().get("das").keys()) + assert {"name", "version", "summary"} == set(das.about().get("atom_db").keys()) def test_create_context(self): das = DistributedAtomSpace() @@ -143,55 +144,55 @@ def test_create_context(self): def test_get_atoms_by_field(self): das = DistributedAtomSpaceMock() - atom_field = das.get_atoms_by_field({'Concept': 'human'}) + atom_field = das.get_atoms_by_field({"Concept": "human"}) assert atom_field def test_get_atoms_by_text_field(self): das = DistributedAtomSpaceMock() - atom_text_field = das.get_atoms_by_text_field(text_value='human', field='name') + atom_text_field = das.get_atoms_by_text_field(text_value="human", field="name") assert atom_text_field def test_get_node_by_name_starting_with(self): das = DistributedAtomSpaceMock() - atom_starting_with = das.get_node_by_name_starting_with('Concept', 'mon') + atom_starting_with = das.get_node_by_name_starting_with("Concept", "mon") assert atom_starting_with def test_count_atoms(self): das = DistributedAtomSpaceMock() atom_count = das.count_atoms() - assert atom_count == {'link_count': 26, 'node_count': 14, 'atom_count': 40} + assert atom_count == {"link_count": 26, "node_count": 14, "atom_count": 40} def test_count_atoms_local(self): das = DistributedAtomSpaceMock() - atom_count = das.count_atoms({'context': 'local'}) - assert atom_count == {'link_count': 26, 'node_count': 14, 'atom_count': 40} + atom_count = das.count_atoms({"context": "local"}) + assert atom_count == {"link_count": 26, "node_count": 14, "atom_count": 40} def test_count_atoms_local_remote(self): das = DistributedAtomSpaceMock() - atom_count = das.count_atoms({'context': 'remote'}) + atom_count = das.count_atoms({"context": "remote"}) assert atom_count == {} def test_count_atoms_local_both(self): das = DistributedAtomSpaceMock() - atom_count = das.count_atoms({'context': 'both'}) - assert atom_count == {'link_count': 26, 'node_count': 14, 'atom_count': 40} + atom_count = das.count_atoms({"context": "both"}) + assert atom_count == {"link_count": 26, "node_count": 14, "atom_count": 40} # assert atom_count == (14, 26) def test_count_atoms_remote(self): - das = DistributedAtomSpaceMock('remote', host='localhost', port=123) + das = DistributedAtomSpaceMock("remote", host="localhost", port=123) with mock.patch( - 'hyperon_das.client.FunctionsClient.count_atoms', + "hyperon_das.client.FunctionsClient.count_atoms", return_value=(10, 0), ): - atom_count = das.count_atoms({'context': 'remote'}) + atom_count = das.count_atoms({"context": "remote"}) assert atom_count == (10, 0) def test_count_atoms_both(self): - das = DistributedAtomSpaceMock('remote', host='localhost', port=123) + das = DistributedAtomSpaceMock("remote", host="localhost", port=123) with mock.patch( - 'hyperon_das.client.FunctionsClient.count_atoms', - return_value={'link_count': 0, 'node_count': 10, 'atom_count': 0}, + "hyperon_das.client.FunctionsClient.count_atoms", + return_value={"link_count": 0, "node_count": 10, "atom_count": 0}, ): - atom_count = das.count_atoms({'context': 'both'}) + atom_count = das.count_atoms({"context": "both"}) # assert atom_count == (24, 26) - assert atom_count == {'link_count': 26, 'node_count': 24, 'atom_count': 40} + assert atom_count == {"link_count": 26, "node_count": 24, "atom_count": 40} diff --git a/src/tests/python/unit/test_database_private_methods.py b/src/tests/python/unit/test_database_private_methods.py index 42d297a..78efc9c 100644 --- a/src/tests/python/unit/test_database_private_methods.py +++ b/src/tests/python/unit/test_database_private_methods.py @@ -1,7 +1,11 @@ import pytest from hyperon_das_atomdb.database import AtomDB, LinkT, NodeT -from hyperon_das_atomdb.exceptions import AddLinkException, AddNodeException, AtomDoesNotExist +from hyperon_das_atomdb.exceptions import ( + AddLinkException, + AddNodeException, + AtomDoesNotExist, +) from tests.python.helpers import add_link, add_node, check_handle from .fixtures import in_memory_db, redis_mongo_db # noqa: F401 @@ -49,9 +53,9 @@ def test__reformat_document(self, database, kwlist, request): assert len(answer.targets) == 2 assert len(answer.targets_documents) == 2 assert answer.named_type == "Relation" - assert all( - isinstance(t, NodeT) for t in answer.targets_documents - ), answer.targets_documents + assert all(isinstance(t, NodeT) for t in answer.targets_documents), ( + answer.targets_documents + ) @pytest.mark.parametrize( "database,kwlist", diff --git a/src/tests/python/unit/test_database_public_methods.py b/src/tests/python/unit/test_database_public_methods.py index 6d31210..3abc1c5 100644 --- a/src/tests/python/unit/test_database_public_methods.py +++ b/src/tests/python/unit/test_database_public_methods.py @@ -4,7 +4,13 @@ import pytest from hyperon_das_atomdb.database import AtomDB, AtomT, LinkT, NodeT -from tests.python.helpers import add_link, add_node, check_handle, dict_to_link_params, dict_to_node_params +from tests.python.helpers import ( + add_link, + add_node, + check_handle, + dict_to_link_params, + dict_to_node_params, +) from tests.python.unit.fixtures import in_memory_db, redis_mongo_db # noqa: F401 diff --git a/src/tests/python/unit/test_decorators.py b/src/tests/python/unit/test_decorators.py index edc5f01..aaf743a 100644 --- a/src/tests/python/unit/test_decorators.py +++ b/src/tests/python/unit/test_decorators.py @@ -8,24 +8,24 @@ logger_mock = Mock() -@patch('hyperon_das.logger') +@patch("hyperon_das.logger") def test_retry_successful_connection(logger_mock): @retry(attempts=3, timeout_seconds=5) def successful_function(self, host, port): return 200, "Success" - result = successful_function({}, 'localhost', 80) + result = successful_function({}, "localhost", 80) - assert result == (200, 'Success') + assert result == (200, "Success") -@patch('hyperon_das.logger') +@patch("hyperon_das.logger") def test_retry_exception_raised(logger_mock): @retry(attempts=3, timeout_seconds=5) def exception_function(): raise ValueError("Simulated exception") with pytest.raises( - RetryConnectionError, match='An error occurs while connecting to the server' + RetryConnectionError, match="An error occurs while connecting to the server" ): exception_function() diff --git a/src/tests/python/unit/test_dict_query_tokenizer.py b/src/tests/python/unit/test_dict_query_tokenizer.py index 41fc0c0..815dca5 100644 --- a/src/tests/python/unit/test_dict_query_tokenizer.py +++ b/src/tests/python/unit/test_dict_query_tokenizer.py @@ -24,14 +24,14 @@ def test_tokenize_link(self): ], } expected_tokens = ( - 'LINK_TEMPLATE Expression 3 NODE Symbol Similarity LINK Expression 2 ' + "LINK_TEMPLATE Expression 3 NODE Symbol Similarity LINK Expression 2 " 'NODE Symbol Concept NODE Symbol "human" VARIABLE v1' ) assert DictQueryTokenizer.tokenize(query) == expected_tokens def test_untokenize_link(self): tokens = ( - 'LINK_TEMPLATE Expression 3 NODE Symbol Similarity LINK Expression 2 ' + "LINK_TEMPLATE Expression 3 NODE Symbol Similarity LINK Expression 2 " 'NODE Symbol Concept NODE Symbol "human" VARIABLE v1' ) expected_query = { @@ -55,7 +55,8 @@ def test_untokenize_link(self): def test_tokenize_invalid_query(self): query = {"atom_type": "unknown", "name": "InvalidQuery"} with pytest.raises( - ValueError, match="Unsupported query, it should start with a link or an operator:" + ValueError, + match="Unsupported query, it should start with a link or an operator:", ): DictQueryTokenizer.tokenize(query) @@ -91,14 +92,16 @@ def test_untokenize_wrong_elements_count(self): def test_tokenize_invalid_start_node(self): query = {"atom_type": "node", "type": "Symbol", "name": "TestNode"} with pytest.raises( - ValueError, match="Unsupported query, it should start with a link or an operator:" + ValueError, + match="Unsupported query, it should start with a link or an operator:", ): DictQueryTokenizer.tokenize(query) def test_tokenize_invalid_start_variable(self): query = {"atom_type": "variable", "name": "TestVariable"} with pytest.raises( - ValueError, match="Unsupported query, it should start with a link or an operator:" + ValueError, + match="Unsupported query, it should start with a link or an operator:", ): DictQueryTokenizer.tokenize(query) diff --git a/src/tests/python/unit/test_queries.py b/src/tests/python/unit/test_queries.py index d570a1a..3183d46 100644 --- a/src/tests/python/unit/test_queries.py +++ b/src/tests/python/unit/test_queries.py @@ -5,16 +5,16 @@ def _name(link, index, typed=False): - named_type = f"{link['targets'][index]['type']}:" if typed else '' + named_type = f"{link['targets'][index]['type']}:" if typed else "" return f"{named_type}{link['targets'][index]['name']}" def _print_query_answer(query_answer, typed=False): if query_answer: for link in query_answer: - if len(link['targets']) == 2: + if len(link["targets"]) == 2: print(f"{link['type']}: {_name(link, 0)} -> {_name(link, 1)}") - elif len(link['targets']) == 3: + elif len(link["targets"]) == 3: print( f"{link['type']}: {_name(link, 0)}({_name(link, 1, typed)}) -> {_name(link, 2, typed)}" ) @@ -391,32 +391,32 @@ def test_conjunction(self): answer, [ [ - 'c93e1e758c53912638438e2a7d7f7b7f', - '1c3bf151ea200b2d9e088a1178d060cb', + "c93e1e758c53912638438e2a7d7f7b7f", + "1c3bf151ea200b2d9e088a1178d060cb", ], [ - 'f31dfe97db782e8cec26de18dddf8965', - '1c3bf151ea200b2d9e088a1178d060cb', + "f31dfe97db782e8cec26de18dddf8965", + "1c3bf151ea200b2d9e088a1178d060cb", ], [ - '75756335011dcedb71a0d9a7bd2da9e8', - '1c3bf151ea200b2d9e088a1178d060cb', + "75756335011dcedb71a0d9a7bd2da9e8", + "1c3bf151ea200b2d9e088a1178d060cb", ], [ - '116df61c01859c710d178ba14a483509', - 'b0f428929706d1d991e4d712ad08f9ab', + "116df61c01859c710d178ba14a483509", + "b0f428929706d1d991e4d712ad08f9ab", ], [ - '959924e3aab197af80a84c1ab261fd65', - 'b0f428929706d1d991e4d712ad08f9ab', + "959924e3aab197af80a84c1ab261fd65", + "b0f428929706d1d991e4d712ad08f9ab", ], [ - '906fa505ae3bc6336d80a5f9aaa47b3b', - '959924e3aab197af80a84c1ab261fd65', + "906fa505ae3bc6336d80a5f9aaa47b3b", + "959924e3aab197af80a84c1ab261fd65", ], [ - 'fbf03d17d6a40feff828a3f2c6e86f05', - '1c3bf151ea200b2d9e088a1178d060cb', + "fbf03d17d6a40feff828a3f2c6e86f05", + "1c3bf151ea200b2d9e088a1178d060cb", ], ], ) diff --git a/src/tests/python/unit/test_traverse_engine.py b/src/tests/python/unit/test_traverse_engine.py index 84d2406..b29644c 100644 --- a/src/tests/python/unit/test_traverse_engine.py +++ b/src/tests/python/unit/test_traverse_engine.py @@ -9,8 +9,8 @@ def simplify_links(links: list, das: DistributedAtomSpace) -> set: answers = set() for link in links: targets_name = [] - for target in link['targets']: - targets_name.append(das.get_atom(target)['name']) + for target in link["targets"]: + targets_name.append(das.get_atom(target)["name"]) answers.add(f"{link['named_type']} : {targets_name}") return answers @@ -18,7 +18,7 @@ def simplify_links(links: list, das: DistributedAtomSpace) -> set: def get_names(handles: str, das: DistributedAtomSpace) -> set: answer = set() for handle in handles: - answer.add(das.get_atom(handle)['name']) + answer.add(das.get_atom(handle)["name"]) return answer @@ -36,9 +36,9 @@ def test_get(self, das): cursor = das.get_traversal_cursor(animal_base_handles.human) current_cursor = cursor.get() - assert current_cursor['handle'] == animal_base_handles.human - assert current_cursor['name'] == 'human' - assert current_cursor['named_type'] == 'Concept' + assert current_cursor["handle"] == animal_base_handles.human + assert current_cursor["name"] == "human" + assert current_cursor["named_type"] == "Concept" def test_get_links(self, das): def _build_atom_answer(handle: str) -> dict: @@ -177,7 +177,10 @@ def _vine_links(): def _plant_links(): answers = _build_atom_answer(animal_base_handles.plant) assert len(answers) == 2 - assert answers == {"Inheritance : ['vine', 'plant']", "Inheritance : ['ent', 'plant']"} + assert answers == { + "Inheritance : ['vine', 'plant']", + "Inheritance : ['ent', 'plant']", + } def _similarity_inheritance_links(): answers = _build_atom_answer(animal_base_handles.similarity_human_monkey) @@ -281,7 +284,7 @@ def _build_atom_answer(handle: str, **filters) -> dict: return simplify_links(links, das) def _human_links(): - answers = _build_atom_answer(animal_base_handles.human, link_type='Similarity') + answers = _build_atom_answer(animal_base_handles.human, link_type="Similarity") assert answers == { "Similarity : ['human', 'chimp']", "Similarity : ['human', 'monkey']", @@ -291,7 +294,7 @@ def _human_links(): "Similarity : ['chimp', 'human']", } answers = _build_atom_answer( - animal_base_handles.human, link_type='Similarity', cursor_position=0 + animal_base_handles.human, link_type="Similarity", cursor_position=0 ) assert answers == { "Similarity : ['human', 'chimp']", @@ -299,7 +302,7 @@ def _human_links(): "Similarity : ['human', 'ent']", } answers = _build_atom_answer( - animal_base_handles.human, link_type='Similarity', cursor_position=1 + animal_base_handles.human, link_type="Similarity", cursor_position=1 ) assert answers == { "Similarity : ['ent', 'human']", @@ -308,49 +311,49 @@ def _human_links(): } answers = _build_atom_answer( animal_base_handles.human, - link_type='Similarity', + link_type="Similarity", cursor_position=0, - target_type='Concept', + target_type="Concept", ) assert answers == { "Similarity : ['human', 'chimp']", "Similarity : ['human', 'monkey']", "Similarity : ['human', 'ent']", } - answers = _build_atom_answer(animal_base_handles.human, link_type='Fake') + answers = _build_atom_answer(animal_base_handles.human, link_type="Fake") assert len(answers) == 0 answers = _build_atom_answer(animal_base_handles.human, cursor_position=2) assert len(answers) == 0 - answers = _build_atom_answer(animal_base_handles.human, target_type='Fake') + answers = _build_atom_answer(animal_base_handles.human, target_type="Fake") assert len(answers) == 0 das.add_link( { - 'type': 'Similarity', - 'targets': [ - {'type': 'Concept', 'name': 'human'}, - {'type': 'Concept', 'name': 'snet'}, + "type": "Similarity", + "targets": [ + {"type": "Concept", "name": "human"}, + {"type": "Concept", "name": "snet"}, ], - 'weight': 0.5, + "weight": 0.5, } ) def my_filter(link) -> bool: - if 'weight' in link: + if "weight" in link: return True return False answers = _build_atom_answer( animal_base_handles.human, - link_type='Similarity', + link_type="Similarity", cursor_position=0, - target_type='Concept', + target_type="Concept", filter=my_filter, ) assert answers == {"Similarity : ['human', 'snet']"} def _mammal_links(): - answers = _build_atom_answer(animal_base_handles.mammal, link_type='Inheritance') + answers = _build_atom_answer(animal_base_handles.mammal, link_type="Inheritance") assert answers == { "Inheritance : ['mammal', 'animal']", "Inheritance : ['monkey', 'mammal']", @@ -359,11 +362,11 @@ def _mammal_links(): "Inheritance : ['rhino', 'mammal']", } answers = _build_atom_answer( - animal_base_handles.mammal, link_type='Inheritance', cursor_position=0 + animal_base_handles.mammal, link_type="Inheritance", cursor_position=0 ) assert answers == {"Inheritance : ['mammal', 'animal']"} answers = _build_atom_answer( - animal_base_handles.mammal, link_type='Inheritance', cursor_position=1 + animal_base_handles.mammal, link_type="Inheritance", cursor_position=1 ) assert answers == { "Inheritance : ['monkey', 'mammal']", @@ -373,9 +376,9 @@ def _mammal_links(): } answers = _build_atom_answer( animal_base_handles.mammal, - link_type='Inheritance', + link_type="Inheritance", cursor_position=1, - target_type='Concept', + target_type="Concept", ) assert answers == { "Inheritance : ['monkey', 'mammal']", @@ -383,50 +386,50 @@ def _mammal_links(): "Inheritance : ['human', 'mammal']", "Inheritance : ['rhino', 'mammal']", } - answers = _build_atom_answer(animal_base_handles.mammal, link_type='Similarity') + answers = _build_atom_answer(animal_base_handles.mammal, link_type="Similarity") assert len(answers) == 0 answers = _build_atom_answer(animal_base_handles.mammal, cursor_position=5) assert len(answers) == 0 - answers = _build_atom_answer(animal_base_handles.mammal, target_type='Snet') + answers = _build_atom_answer(animal_base_handles.mammal, target_type="Snet") assert len(answers) == 0 das.add_link( { - 'type': 'Inheritance', - 'targets': [ - {'type': 'Fake', 'name': 'fake1'}, - {'type': 'Concept', 'name': 'mammal'}, + "type": "Inheritance", + "targets": [ + {"type": "Fake", "name": "fake1"}, + {"type": "Concept", "name": "mammal"}, ], - 'weight': 0.4, + "weight": 0.4, } ) das.add_link( { - 'type': 'Inheritance', - 'targets': [ - {'type': 'Fake', 'name': 'fake2'}, - {'type': 'Concept', 'name': 'mammal'}, + "type": "Inheritance", + "targets": [ + {"type": "Fake", "name": "fake2"}, + {"type": "Concept", "name": "mammal"}, ], - 'weight': 0.5, + "weight": 0.5, } ) def my_filter(link) -> bool: - if 'weight' in link and link['weight'] >= 0.5: + if "weight" in link and link["weight"] >= 0.5: return True return False answers = _build_atom_answer( animal_base_handles.mammal, - link_type='Inheritance', + link_type="Inheritance", cursor_position=1, - target_type='Fake', + target_type="Fake", filter=my_filter, ) assert answers == {"Inheritance : ['fake2', 'mammal']"} def _snake_links(): - answers = _build_atom_answer(animal_base_handles.snake, link_type='Similarity') + answers = _build_atom_answer(animal_base_handles.snake, link_type="Similarity") assert answers == { "Similarity : ['snake', 'earthworm']", "Similarity : ['earthworm', 'snake']", @@ -434,24 +437,24 @@ def _snake_links(): "Similarity : ['vine', 'snake']", } answers = _build_atom_answer( - animal_base_handles.snake, link_type='Inheritance', cursor_position=0 + animal_base_handles.snake, link_type="Inheritance", cursor_position=0 ) assert answers == { "Inheritance : ['snake', 'reptile']", } answers = _build_atom_answer( - animal_base_handles.snake, link_type='Inheritance', cursor_position=1 + animal_base_handles.snake, link_type="Inheritance", cursor_position=1 ) assert len(answers) == 0 answers = _build_atom_answer( - animal_base_handles.snake, link_type='Similarity', cursor_position=0 + animal_base_handles.snake, link_type="Similarity", cursor_position=0 ) assert answers == { "Similarity : ['snake', 'earthworm']", "Similarity : ['snake', 'vine']", } answers = _build_atom_answer( - animal_base_handles.snake, link_type='Similarity', cursor_position=1 + animal_base_handles.snake, link_type="Similarity", cursor_position=1 ) assert answers == { "Similarity : ['earthworm', 'snake']", @@ -459,73 +462,73 @@ def _snake_links(): } answers = _build_atom_answer( animal_base_handles.snake, - link_type='Inheritance', + link_type="Inheritance", cursor_position=0, - target_type='Concept', + target_type="Concept", ) assert answers == {"Inheritance : ['snake', 'reptile']"} - answers = _build_atom_answer(animal_base_handles.snake, link_type='Evaluation') + answers = _build_atom_answer(animal_base_handles.snake, link_type="Evaluation") assert len(answers) == 0 answers = _build_atom_answer(animal_base_handles.snake, cursor_position=5) assert len(answers) == 0 answers = _build_atom_answer( animal_base_handles.snake, - link_type='Inheritance', + link_type="Inheritance", cursor_position=0, - target_type='Snet', + target_type="Snet", ) assert len(answers) == 0 das.add_link( { - 'type': 'Similarity', - 'targets': [ - {'type': 'Fake', 'name': 'fake1'}, - {'type': 'Concept', 'name': 'snake'}, + "type": "Similarity", + "targets": [ + {"type": "Fake", "name": "fake1"}, + {"type": "Concept", "name": "snake"}, ], - 'weight': 0.2, + "weight": 0.2, } ) das.add_link( { - 'type': 'Similarity', - 'targets': [ - {'type': 'Concept', 'name': 'snake'}, - {'type': 'Fake', 'name': 'fake1'}, + "type": "Similarity", + "targets": [ + {"type": "Concept", "name": "snake"}, + {"type": "Fake", "name": "fake1"}, ], - 'weight': 0.5, + "weight": 0.5, } ) def my_filter(link) -> bool: - if 'weight' in link and link['weight'] >= 0.5: + if "weight" in link and link["weight"] >= 0.5: return True return False answers = _build_atom_answer( animal_base_handles.snake, - link_type='Similarity', - target_type='Fake', + link_type="Similarity", + target_type="Fake", filter=my_filter, ) assert answers == {"Similarity : ['snake', 'fake1']"} def _similarity_human_monkey_links(): answers = _build_atom_answer( - animal_base_handles.similarity_human_monkey, link_type='Similarity' + animal_base_handles.similarity_human_monkey, link_type="Similarity" ) assert len(answers) == 0 das.add_link( { - 'type': 'Inheritance', - 'targets': [ - {'type': 'Fake', 'name': 'fake'}, + "type": "Inheritance", + "targets": [ + {"type": "Fake", "name": "fake"}, { - 'type': 'Similarity', - 'targets': [ - {'type': 'Concept', 'name': 'human'}, - {'type': 'Concept', 'name': 'monkey'}, + "type": "Similarity", + "targets": [ + {"type": "Concept", "name": "human"}, + {"type": "Concept", "name": "monkey"}, ], }, ], @@ -533,7 +536,7 @@ def _similarity_human_monkey_links(): ) cursor = das.get_traversal_cursor(animal_base_handles.similarity_human_monkey) - links = cursor.get_links(link_type='Inheritance') + links = cursor.get_links(link_type="Inheritance") answers = [link for link in links] assert len(answers) == 1 @@ -747,17 +750,17 @@ def _build_neighbors(handle: str, **filters) -> dict: return ret def _human_neighbors(): - neighbors = _build_neighbors(animal_base_handles.human, link_type='Inheritance') + neighbors = _build_neighbors(animal_base_handles.human, link_type="Inheritance") assert das.get_atom(animal_base_handles.mammal) in neighbors assert len(neighbors) == 1 - neighbors = _build_neighbors(animal_base_handles.human, link_type='Similarity') + neighbors = _build_neighbors(animal_base_handles.human, link_type="Similarity") assert das.get_atom(animal_base_handles.monkey) in neighbors assert das.get_atom(animal_base_handles.chimp) in neighbors assert das.get_atom(animal_base_handles.ent) in neighbors assert len(neighbors) == 3 - neighbors = _build_neighbors(animal_base_handles.human, target_type='Concept') + neighbors = _build_neighbors(animal_base_handles.human, target_type="Concept") assert das.get_atom(animal_base_handles.mammal) in neighbors assert das.get_atom(animal_base_handles.monkey) in neighbors assert das.get_atom(animal_base_handles.chimp) in neighbors @@ -765,66 +768,66 @@ def _human_neighbors(): assert len(neighbors) == 4 neighbors = _build_neighbors( - animal_base_handles.human, link_type='Inheritance', target_type='Snet' + animal_base_handles.human, link_type="Inheritance", target_type="Snet" ) assert len(neighbors) == 0 neighbors = _build_neighbors( - animal_base_handles.human, link_type='Similarity', target_type='Snet' + animal_base_handles.human, link_type="Similarity", target_type="Snet" ) assert len(neighbors) == 0 das.add_link( { - 'type': 'Similarity', - 'targets': [ - {'type': 'Concept', 'name': 'human'}, - {'type': 'Fake', 'name': 'fake-h', 'weight': 0.7}, + "type": "Similarity", + "targets": [ + {"type": "Concept", "name": "human"}, + {"type": "Fake", "name": "fake-h", "weight": 0.7}, ], } ) das.add_link( { - 'type': 'Similarity', - 'targets': [ - {'type': 'Fake', 'name': 'fake-h', 'weight': 0.3}, - {'type': 'Concept', 'name': 'human'}, + "type": "Similarity", + "targets": [ + {"type": "Fake", "name": "fake-h", "weight": 0.3}, + {"type": "Concept", "name": "human"}, ], } ) das.add_link( { - 'type': 'Inheritance', - 'targets': [ + "type": "Inheritance", + "targets": [ { - 'type': 'Fake', - 'name': 'fake-h2', - 'weight': 0.3, + "type": "Fake", + "name": "fake-h2", + "weight": 0.3, }, { - 'type': 'Fake', - 'name': 'fake-h3', - 'weight': 0.3, + "type": "Fake", + "name": "fake-h3", + "weight": 0.3, }, { - 'type': 'Fake', - 'name': 'fake-h4', - 'weight': 1.3, + "type": "Fake", + "name": "fake-h4", + "weight": 1.3, }, - {'type': 'Concept', 'name': 'human'}, + {"type": "Concept", "name": "human"}, ], } ) def my_filter(target) -> bool: - if 'weight' in target and target['weight'] >= 1: + if "weight" in target and target["weight"] >= 1: return True return False - fake_h = AtomDB.node_handle('Fake', 'fake-h') - fake_h2 = AtomDB.node_handle('Fake', 'fake-h2') - fake_h3 = AtomDB.node_handle('Fake', 'fake-h3') - fake_h4 = AtomDB.node_handle('Fake', 'fake-h4') + fake_h = AtomDB.node_handle("Fake", "fake-h") + fake_h2 = AtomDB.node_handle("Fake", "fake-h2") + fake_h3 = AtomDB.node_handle("Fake", "fake-h3") + fake_h4 = AtomDB.node_handle("Fake", "fake-h4") neighbors = _build_neighbors(animal_base_handles.human) assert das.get_atom(animal_base_handles.mammal) in neighbors @@ -838,23 +841,23 @@ def my_filter(target) -> bool: assert len(neighbors) == 8 neighbors = _build_neighbors( - animal_base_handles.human, link_type='Similarity', target_type='Fake' + animal_base_handles.human, link_type="Similarity", target_type="Fake" ) assert das.get_atom(fake_h) in neighbors assert len(neighbors) == 1 neighbors = _build_neighbors( animal_base_handles.human, - link_type='Inheritance', - target_type='Fake', + link_type="Inheritance", + target_type="Fake", filters=(None, my_filter), ) assert len(neighbors) == 1 neighbors = _build_neighbors( animal_base_handles.human, - link_type='Inheritance', - target_type='Fake', + link_type="Inheritance", + target_type="Fake", filters=None, ) @@ -863,103 +866,107 @@ def my_filter(target) -> bool: with pytest.raises(ValueError): _build_neighbors( animal_base_handles.human, - link_type='Inheritance', - target_type='Fake', + link_type="Inheritance", + target_type="Fake", filters=my_filter, ) def _vine_neighbors(): - neighbors = _build_neighbors(animal_base_handles.vine, link_type='Similarity') + neighbors = _build_neighbors(animal_base_handles.vine, link_type="Similarity") assert das.get_atom(animal_base_handles.snake) in neighbors assert len(neighbors) == 1 - neighbors = _build_neighbors(animal_base_handles.vine, link_type='Inheritance') + neighbors = _build_neighbors(animal_base_handles.vine, link_type="Inheritance") assert das.get_atom(animal_base_handles.plant) in neighbors assert len(neighbors) == 1 - fake_v1 = AtomDB.node_handle('Fake', 'fake-v1') - fake_v2 = AtomDB.node_handle('Fake', 'fake-v2') + fake_v1 = AtomDB.node_handle("Fake", "fake-v1") + fake_v2 = AtomDB.node_handle("Fake", "fake-v2") das.add_link( { - 'type': 'Inheritance', - 'targets': [ + "type": "Inheritance", + "targets": [ { - 'type': 'Fake', - 'name': 'fake-v1', - 'weight': 1, + "type": "Fake", + "name": "fake-v1", + "weight": 1, }, - {'type': 'Concept', 'name': 'vine'}, + {"type": "Concept", "name": "vine"}, ], } ) das.add_link( { - 'type': 'Similarity', - 'targets': [ - {'type': 'Concept', 'name': 'vine'}, + "type": "Similarity", + "targets": [ + {"type": "Concept", "name": "vine"}, { - 'type': 'Fake', - 'name': 'fake-v2', - 'weight': 0.7, + "type": "Fake", + "name": "fake-v2", + "weight": 0.7, }, ], } ) das.add_link( { - 'type': 'Similarity', - 'targets': [ + "type": "Similarity", + "targets": [ { - 'type': 'Fake', - 'name': 'fake-v2', - 'weight': 0.3, + "type": "Fake", + "name": "fake-v2", + "weight": 0.3, }, - {'type': 'Concept', 'name': 'vine'}, + {"type": "Concept", "name": "vine"}, ], } ) - neighbors = _build_neighbors(animal_base_handles.vine, link_type='Inheritance') + neighbors = _build_neighbors(animal_base_handles.vine, link_type="Inheritance") assert das.get_atom(animal_base_handles.plant) in neighbors assert das.get_atom(fake_v1) in neighbors assert len(neighbors) == 2 - neighbors = _build_neighbors(animal_base_handles.vine, link_type='Similarity') + neighbors = _build_neighbors(animal_base_handles.vine, link_type="Similarity") assert das.get_atom(animal_base_handles.snake) in neighbors assert das.get_atom(fake_v2) in neighbors assert len(neighbors) == 2 neighbors = _build_neighbors( - animal_base_handles.vine, link_type='Similarity', target_type='Concept' + animal_base_handles.vine, link_type="Similarity", target_type="Concept" ) assert das.get_atom(animal_base_handles.snake) in neighbors assert len(neighbors) == 1 neighbors = _build_neighbors( - animal_base_handles.vine, link_type='Inheritance', target_type='Fake' + animal_base_handles.vine, link_type="Inheritance", target_type="Fake" ) assert das.get_atom(fake_v1) in neighbors assert len(neighbors) == 1 neighbors = _build_neighbors( - animal_base_handles.vine, link_type='Similarity', target_type='Fake' + animal_base_handles.vine, link_type="Similarity", target_type="Fake" ) assert das.get_atom(fake_v2) in neighbors assert len(neighbors) == 1 def my_filter(target) -> bool: - if 'weight' in target and target['weight'] >= 1: + if "weight" in target and target["weight"] >= 1: return True return False neighbors = _build_neighbors( - animal_base_handles.vine, link_type='Similarity', filters=(None, my_filter) + animal_base_handles.vine, + link_type="Similarity", + filters=(None, my_filter), ) assert len(neighbors) == 0 neighbors = _build_neighbors( - animal_base_handles.vine, link_type='Inheritance', filters=(None, my_filter) + animal_base_handles.vine, + link_type="Inheritance", + filters=(None, my_filter), ) assert das.get_atom(fake_v1) in neighbors assert len(neighbors) == 1 @@ -968,55 +975,55 @@ def _inheritance_dinosaur_reptile(): neighbors = _build_neighbors(animal_base_handles.inheritance_dinosaur_reptile) assert len(neighbors) == 0 - fake_dr1 = AtomDB.node_handle('Fake', 'fake-dr1') - fake_dr2 = AtomDB.node_handle('Fake', 'fake-dr2') + fake_dr1 = AtomDB.node_handle("Fake", "fake-dr1") + fake_dr2 = AtomDB.node_handle("Fake", "fake-dr2") das.add_link( { - 'type': 'Inheritance', - 'targets': [ - {'type': 'Fake', 'name': 'fake-dr1'}, + "type": "Inheritance", + "targets": [ + {"type": "Fake", "name": "fake-dr1"}, { - 'type': 'Inheritance', - 'targets': [ - {'type': 'Concept', 'name': 'dinosaur'}, - {'type': 'Concept', 'name': 'reptile'}, + "type": "Inheritance", + "targets": [ + {"type": "Concept", "name": "dinosaur"}, + {"type": "Concept", "name": "reptile"}, ], }, ], - 'weight': 1, + "weight": 1, } ) das.add_link( { - 'type': 'Similarity', - 'targets': [ + "type": "Similarity", + "targets": [ { - 'type': 'Inheritance', - 'targets': [ - {'type': 'Concept', 'name': 'dinosaur'}, - {'type': 'Concept', 'name': 'reptile'}, + "type": "Inheritance", + "targets": [ + {"type": "Concept", "name": "dinosaur"}, + {"type": "Concept", "name": "reptile"}, ], }, - {'type': 'Fake', 'name': 'fake-dr2'}, + {"type": "Fake", "name": "fake-dr2"}, ], - 'weight': 0.7, + "weight": 0.7, } ) das.add_link( { - 'type': 'Similarity', - 'targets': [ - {'type': 'Fake', 'name': 'fake-dr2'}, + "type": "Similarity", + "targets": [ + {"type": "Fake", "name": "fake-dr2"}, { - 'type': 'Inheritance', - 'targets': [ - {'type': 'Concept', 'name': 'dinosaur'}, - {'type': 'Concept', 'name': 'reptile'}, + "type": "Inheritance", + "targets": [ + {"type": "Concept", "name": "dinosaur"}, + {"type": "Concept", "name": "reptile"}, ], }, ], - 'weight': 0.3, + "weight": 0.3, } ) @@ -1026,39 +1033,40 @@ def _inheritance_dinosaur_reptile(): assert len(neighbors) == 2 neighbors = _build_neighbors( - animal_base_handles.inheritance_dinosaur_reptile, link_type='Similarity' + animal_base_handles.inheritance_dinosaur_reptile, link_type="Similarity" ) assert das.get_atom(fake_dr2) in neighbors assert len(neighbors) == 1 neighbors = _build_neighbors( - animal_base_handles.inheritance_dinosaur_reptile, link_type='Inheritance' + animal_base_handles.inheritance_dinosaur_reptile, + link_type="Inheritance", ) assert das.get_atom(fake_dr1) in neighbors assert len(neighbors) == 1 neighbors = _build_neighbors( animal_base_handles.inheritance_dinosaur_reptile, - link_type='Inheritance', - target_type='Fake', + link_type="Inheritance", + target_type="Fake", ) assert das.get_atom(fake_dr1) in neighbors assert len(neighbors) == 1 neighbors = _build_neighbors( animal_base_handles.inheritance_dinosaur_reptile, - link_type='Inheritance', - target_type='Concept', + link_type="Inheritance", + target_type="Concept", ) assert len(neighbors) == 0 neighbors = _build_neighbors( - animal_base_handles.inheritance_dinosaur_reptile, target_type='Concept' + animal_base_handles.inheritance_dinosaur_reptile, target_type="Concept" ) assert len(neighbors) == 0 neighbors = _build_neighbors( - animal_base_handles.inheritance_dinosaur_reptile, target_type='Fake' + animal_base_handles.inheritance_dinosaur_reptile, target_type="Fake" ) assert das.get_atom(fake_dr1) in neighbors assert das.get_atom(fake_dr2) in neighbors @@ -1072,42 +1080,42 @@ def _inheritance_dinosaur_reptile(): def test_follow_link(self, das, n): def _mammal(): cursor = das.get_traversal_cursor(animal_base_handles.mammal) - assert cursor.get()['name'] == 'mammal' + assert cursor.get()["name"] == "mammal" cursor.follow_link() - current_cursor = cursor.get()['name'] - assert current_cursor in ('monkey', 'chimp', 'human', 'animal', 'rhino') + current_cursor = cursor.get()["name"] + assert current_cursor in ("monkey", "chimp", "human", "animal", "rhino") cursor.follow_link() previous_cursor = current_cursor - current_cursor = cursor.get()['name'] - if previous_cursor == 'monkey': - assert current_cursor in ('mammal', 'chimp', 'human') - elif previous_cursor == 'chimp': - assert current_cursor in ('mammal', 'monkey', 'human') - elif previous_cursor == 'human': - assert current_cursor in ('mammal', 'monkey', 'chimp', 'ent') - elif previous_cursor == 'animal': - assert current_cursor in ('mammal', 'reptile', 'earthworm') - elif previous_cursor == 'rhino': - assert current_cursor in ('mammal', 'triceratops') + current_cursor = cursor.get()["name"] + if previous_cursor == "monkey": + assert current_cursor in ("mammal", "chimp", "human") + elif previous_cursor == "chimp": + assert current_cursor in ("mammal", "monkey", "human") + elif previous_cursor == "human": + assert current_cursor in ("mammal", "monkey", "chimp", "ent") + elif previous_cursor == "animal": + assert current_cursor in ("mammal", "reptile", "earthworm") + elif previous_cursor == "rhino": + assert current_cursor in ("mammal", "triceratops") def _earthworm(): cursor = das.get_traversal_cursor(animal_base_handles.earthworm) - assert cursor.get()['name'] == 'earthworm' + assert cursor.get()["name"] == "earthworm" cursor.follow_link() - current_cursor = cursor.get()['name'] - assert current_cursor in ('animal', 'snake') + current_cursor = cursor.get()["name"] + assert current_cursor in ("animal", "snake") cursor.follow_link() previous_cursor = current_cursor - current_cursor = cursor.get()['name'] + current_cursor = cursor.get()["name"] - if previous_cursor == 'animal': - assert current_cursor in ('mammal', 'reptile', 'earthworm') - elif previous_cursor == 'snake': - assert current_cursor in ('earthworm', 'reptile', 'vine') + if previous_cursor == "animal": + assert current_cursor in ("mammal", "reptile", "earthworm") + elif previous_cursor == "snake": + assert current_cursor in ("earthworm", "reptile", "vine") _mammal() _earthworm() @@ -1116,42 +1124,42 @@ def _earthworm(): def test_follow_link_with_filters(self, das, n): def _mammal(): cursor = das.get_traversal_cursor(animal_base_handles.mammal) - assert cursor.get()['name'] == 'mammal' + assert cursor.get()["name"] == "mammal" - cursor.follow_link(link_type='Similarity') - assert cursor.get()['name'] == 'mammal' + cursor.follow_link(link_type="Similarity") + assert cursor.get()["name"] == "mammal" - cursor.follow_link(link_type='Inheritance') - current_cursor = cursor.get()['name'] - assert current_cursor in ('monkey', 'chimp', 'human', 'animal', 'rhino') + cursor.follow_link(link_type="Inheritance") + current_cursor = cursor.get()["name"] + assert current_cursor in ("monkey", "chimp", "human", "animal", "rhino") - cursor.follow_link(link_type='Inheritance', target_type='Concept') + cursor.follow_link(link_type="Inheritance", target_type="Concept") previous_cursor = current_cursor - current_cursor = cursor.get()['name'] - if previous_cursor == 'monkey': - assert current_cursor in ('mammal', 'chimp') - elif previous_cursor == 'chimp': - assert current_cursor in ('mammal', 'monkey', 'human') - elif previous_cursor == 'human': - assert current_cursor in ('mammal', 'monkey', 'chimp', 'ent') - elif previous_cursor == 'animal': - assert current_cursor in ('mammal', 'reptile', 'earthworm') - elif previous_cursor == 'rhino': - assert current_cursor in ('mammal', 'triceratops') - - cursor.follow_link(link_type='Inheritance', target_type='Fake') + current_cursor = cursor.get()["name"] + if previous_cursor == "monkey": + assert current_cursor in ("mammal", "chimp") + elif previous_cursor == "chimp": + assert current_cursor in ("mammal", "monkey", "human") + elif previous_cursor == "human": + assert current_cursor in ("mammal", "monkey", "chimp", "ent") + elif previous_cursor == "animal": + assert current_cursor in ("mammal", "reptile", "earthworm") + elif previous_cursor == "rhino": + assert current_cursor in ("mammal", "triceratops") + + cursor.follow_link(link_type="Inheritance", target_type="Fake") previous_cursor = current_cursor - current_cursor = cursor.get()['name'] + current_cursor = cursor.get()["name"] assert previous_cursor == current_cursor _mammal() def test_goto(self, das): cursor = das.get_traversal_cursor(animal_base_handles.human) - cursor.get()['name'] == 'human' + assert cursor.get()["name"] == "human" cursor.goto(animal_base_handles.ent) - assert cursor.get()['name'] == 'ent' + assert cursor.get()["name"] == "ent" with pytest.raises(AtomDoesNotExist): - cursor.goto('snet') + cursor.goto("snet") diff --git a/src/tools/bazel/pytest/main.py b/src/tools/bazel/pytest/main.py index fb23061..9dedbb2 100644 --- a/src/tools/bazel/pytest/main.py +++ b/src/tools/bazel/pytest/main.py @@ -4,5 +4,3 @@ if __name__ == "__main__": sys.exit(pytest.main(sys.argv[1:])) - - From 42fc3c4b6f2d70cdc91a72803be88a4e543ad1bc Mon Sep 17 00:00:00 2001 From: Pedro Costa Date: Thu, 20 Feb 2025 19:35:44 +0000 Subject: [PATCH 10/19] fix(tests): annotate to fix later B006 problem --- src/hyperon_das/das.py | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/src/hyperon_das/das.py b/src/hyperon_das/das.py index 15fdb22..3db2812 100644 --- a/src/hyperon_das/das.py +++ b/src/hyperon_das/das.py @@ -33,7 +33,8 @@ class DistributedAtomSpace: backend: AtomDB - def __init__(self, system_parameters: Dict[str, Any], **kwargs) -> None: + # FIXME: B006 Do not use mutable data structures for argumnet defaults + def __init__(self, system_parameters: Dict[str, Any] = {}, **kwargs) -> None: # noqa: B006 """ Creates a new DAS object. A DAS client can run locally or locally and remote, connecting to remote DAS instances to query remote atoms. If there are different @@ -82,8 +83,6 @@ def __init__(self, system_parameters: Dict[str, Any], **kwargs) -> None: mode. Defaults to True. redis_ssl (bool, optional): Set Redis to encrypt the connection. Defaults to True. """ - if not system_parameters: - system_parameters = {} self.system_parameters = system_parameters self.atomdb = kwargs.get("atomdb", "ram") self.query_engine_type = kwargs.get("query_engine", "local") @@ -140,13 +139,12 @@ def _start_query_engine( ) logger().info(f"Started {das_type} DAS") + # FIXME: B006 Do not use mutable data structures for argumnet defaults def _create_context( self, name: str, - queries: List[Query], + queries: List[Query] = [], # noqa: B006 ) -> Context: - if not queries: - queries = [] context_node = self.add_node(NodeT(type=Context.CONTEXT_NODE_TYPE, name=name)) query_answer = [self.query(query, {"no_iterator": True}) for query in queries] context = Context(context_node, query_answer) @@ -407,7 +405,8 @@ def get_incoming_links(self, atom_handle: HandleT, **kwargs) -> IncomingLinksT: """ return self.query_engine.get_incoming_links(atom_handle, **kwargs) - def count_atoms(self, parameters: Dict[str, Any]) -> Dict[str, int]: + # FIXME: B006 Do not use mutable data structures for argumnet defaults + def count_atoms(self, parameters: Dict[str, Any] = {}) -> Dict[str, int]: # noqa: B006 """ Count atoms, nodes and links in DAS. @@ -428,14 +427,13 @@ def count_atoms(self, parameters: Dict[str, Any]) -> Dict[str, int]: Returns: Dict[str, int]: Dict containing the keys 'node_count', 'atom_count', 'link_count'. """ - if not parameters: - parameters = {} return self.query_engine.count_atoms(parameters) + # FIXME: B006 Do not use mutable data structures for argumnet defaults def query( self, query: Query, - parameters: Dict[str, Any], + parameters: Dict[str, Any] = {}, # noqa: B006 ) -> Union[Iterator[QueryAnswer], List[QueryAnswer]]: """ Perform a query on the knowledge base using a dict as input and return an @@ -530,8 +528,6 @@ def query( } ] """ - if not parameters: - parameters = {} return self.query_engine.query(query, parameters) def custom_query(self, index_id: str, query: Query, **kwargs) -> Union[Iterator, List[AtomT]]: @@ -956,13 +952,12 @@ def fetch( self.backend.bulk_insert(documents) return documents + # FIXME: B006 Do not use mutable data structures for argumnet defaults def create_context( self, name: str, - queries: List[Query], + queries: List[Query] = [], # noqa: B006 ) -> Context: - if not queries: - queries = [] if self.query_engine_type == "local": return self._create_context(name, queries) else: From b4d8b96bb9c9cd5d8122f61794bc43d4d347c40c Mon Sep 17 00:00:00 2001 From: Angelo Probst <33906777+angeloprobst@users.noreply.github.com> Date: Fri, 21 Feb 2025 08:48:02 -0300 Subject: [PATCH 11/19] Added `test --notest_keep_going` to .bazelrc This arg makes bazel stop the tests pipeline as soon as a test fails. The reasoning is to save time and computational hours. --- src/.bazelrc | 1 + 1 file changed, 1 insertion(+) diff --git a/src/.bazelrc b/src/.bazelrc index 965b7c1..82e375a 100644 --- a/src/.bazelrc +++ b/src/.bazelrc @@ -40,6 +40,7 @@ test --flaky_test_attempts=1 test --cache_test_results=auto test --test_env=BAZEL_TEST_ENV=1 test --test_tag_filters=-skip +test --notest_keep_going #################################### RUN ###################################### From b01c594e0a1488e009fbc77e3afe8456309440e7 Mon Sep 17 00:00:00 2001 From: Pedro Costa Date: Fri, 21 Feb 2025 18:55:27 +0000 Subject: [PATCH 12/19] task: move --define to .bazelrc --- src/.bazelrc | 6 ++++++ src/scripts/bazel_build.sh | 9 ++++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/.bazelrc b/src/.bazelrc index 82e375a..6dc6b0d 100644 --- a/src/.bazelrc +++ b/src/.bazelrc @@ -20,10 +20,16 @@ common --enable_bzlmod # localy build --spawn_strategy=local +# Define versions +build --define=ATOMDB_VERSION=0.8.11 +build --define=DAS_VERSION=0.9.17 +build --define=DAS_NODE_VERSION=0.0.1 + # Enable debugging symbols for development build:debug --compilation_mode=dbg build:debug --strip=never + # Optimeze for speed in production build:release --compilation_mode=opt build:release --strip=always diff --git a/src/scripts/bazel_build.sh b/src/scripts/bazel_build.sh index 0032351..dd8ace2 100755 --- a/src/scripts/bazel_build.sh +++ b/src/scripts/bazel_build.sh @@ -45,14 +45,13 @@ fi if [ "$BUILD_WHEELS" = true ]; then $BAZELISK_RUN_CMD //deps:requirements.update $BAZELISK_RUN_CMD //deps:requirements_dev.update - $BAZELISK_BUILD_CMD //hyperon_das_atomdb:hyperon_das_atomdb_wheel --define=ATOMDB_VERSION=0.8.11 - $BAZELISK_BUILD_CMD //hyperon_das:hyperon_das_wheel --define=DAS_VERSION=0.9.17 + $BAZELISK_BUILD_CMD //hyperon_das_atomdb:hyperon_das_atomdb_wheel + $BAZELISK_BUILD_CMD //hyperon_das:hyperon_das_wheel mv bazel-bin/hyperon_das_atomdb/*.whl "$BIN_DIR" mv bazel-bin/hyperon_das/*.whl "$BIN_DIR" - $BAZELISK_BUILD_CMD //hyperon_das_node:hyperon_das_node_wheel --define=DAS_NODE_VERSION=0.0.1 + $BAZELISK_BUILD_CMD //hyperon_das_node:hyperon_das_node_wheel mv bazel-bin/hyperon_das_node/*.whl "$BIN_DIR" - $BAZELISK_BUILD_CMD //hyperon_das_atomdb_cpp:hyperon_das_atomdb_cpp_wheel \ - --define=ATOMDB_VERSION=0.8.11 + $BAZELISK_BUILD_CMD //hyperon_das_atomdb_cpp:hyperon_das_atomdb_cpp_wheel mv bazel-bin/hyperon_das_atomdb_cpp/*.whl "$BIN_DIR" fi From ec889e7142a37767a35220fbe1e1bf290b8ef9ba Mon Sep 17 00:00:00 2001 From: Pedro Costa Date: Wed, 19 Feb 2025 21:21:37 +0000 Subject: [PATCH 13/19] feature: add python linter and formatter within bazel --- src/.aspect/cli/config.yaml | 3 + src/.bazeliskrc | 2 + src/.ruff.toml | 0 src/BUILD | 23 + src/MODULE.bazel | 2 + src/MODULE.bazel.lock | 829 +++++++++++++++++++++++++++++++++++ src/scripts/bazel.sh | 4 + src/scripts/build.sh | 4 + src/tools/format/BUILD.bazel | 13 + src/tools/lint/BUILD | 0 src/tools/lint/linters.bzl | 12 + 11 files changed, 892 insertions(+) create mode 100644 src/.aspect/cli/config.yaml create mode 100644 src/.bazeliskrc create mode 100644 src/.ruff.toml create mode 100644 src/tools/format/BUILD.bazel create mode 100644 src/tools/lint/BUILD create mode 100644 src/tools/lint/linters.bzl diff --git a/src/.aspect/cli/config.yaml b/src/.aspect/cli/config.yaml new file mode 100644 index 0000000..642f7cc --- /dev/null +++ b/src/.aspect/cli/config.yaml @@ -0,0 +1,3 @@ +lint: + aspects: + - //tools/lint:linters.bzl%ruff diff --git a/src/.bazeliskrc b/src/.bazeliskrc new file mode 100644 index 0000000..9b9ec9c --- /dev/null +++ b/src/.bazeliskrc @@ -0,0 +1,2 @@ +BAZELISK_BASE_URL=https://github.com/aspect-build/aspect-cli/releases/download +USE_BAZEL_VERSION=aspect/2024.49.18 diff --git a/src/.ruff.toml b/src/.ruff.toml new file mode 100644 index 0000000..e69de29 diff --git a/src/BUILD b/src/BUILD index d9254e0..a2afac9 100644 --- a/src/BUILD +++ b/src/BUILD @@ -1,5 +1,28 @@ package(default_visibility = ["//visibility:public"]) +exports_files( + [ + ".ruff.toml", + ], + visibility = ["//visibility:public"], +) + +alias( + name = "format.check", + actual = "//tools/format:format.check" +) + +alias( + name = "format", + actual = "//tools/format" +) + +py_binary( + name = "cli", + srcs = ["cli.py"], +) + + cc_binary( name = "attention_broker_service", srcs = [], diff --git a/src/MODULE.bazel b/src/MODULE.bazel index 460f001..16ff9f1 100644 --- a/src/MODULE.bazel +++ b/src/MODULE.bazel @@ -16,6 +16,8 @@ Additionally, this file configures: module(name = "das") +# Bazel to run linters and formatters +bazel_dep(name = "aspect_rules_lint", version = "1.2.0") # C++ diff --git a/src/MODULE.bazel.lock b/src/MODULE.bazel.lock index 14eb628..e3f3c94 100644 --- a/src/MODULE.bazel.lock +++ b/src/MODULE.bazel.lock @@ -19,6 +19,18 @@ "https://bcr.bazel.build/modules/apple_support/1.15.1/MODULE.bazel": "a0556fefca0b1bb2de8567b8827518f94db6a6e7e7d632b4c48dc5f865bc7c85", "https://bcr.bazel.build/modules/apple_support/1.17.1/MODULE.bazel": "655c922ab1209978a94ef6ca7d9d43e940cd97d9c172fb55f94d91ac53f8610b", "https://bcr.bazel.build/modules/apple_support/1.17.1/source.json": "6b2b8c74d14e8d485528a938e44bdb72a5ba17632b9e14ef6e68a5ee96c8347f", + "https://bcr.bazel.build/modules/aspect_bazel_lib/1.31.2/MODULE.bazel": "7bee702b4862612f29333590f4b658a5832d433d6f8e4395f090e8f4e85d442f", + "https://bcr.bazel.build/modules/aspect_bazel_lib/1.38.0/MODULE.bazel": "6307fec451ba9962c1c969eb516ebfe1e46528f7fa92e1c9ac8646bef4cdaa3f", + "https://bcr.bazel.build/modules/aspect_bazel_lib/1.42.2/MODULE.bazel": "2e0d8ab25c57a14f56ace1c8e881b69050417ff91b2fb7718dc00d201f3c3478", + "https://bcr.bazel.build/modules/aspect_bazel_lib/2.7.7/MODULE.bazel": "491f8681205e31bb57892d67442ce448cda4f472a8e6b3dc062865e29a64f89c", + "https://bcr.bazel.build/modules/aspect_bazel_lib/2.7.7/source.json": "87f12b449cd1d27d3e83840a59a6966d557e7c3c5f19e7b2e0361da5edc6b397", + "https://bcr.bazel.build/modules/aspect_rules_js/1.33.1/MODULE.bazel": "db3e7f16e471cf6827059d03af7c21859e7a0d2bc65429a3a11f005d46fc501b", + "https://bcr.bazel.build/modules/aspect_rules_js/1.40.0/MODULE.bazel": "01a1014e95e6816b68ecee2584ae929c7d6a1b72e4333ab1ff2d2c6c30babdf1", + "https://bcr.bazel.build/modules/aspect_rules_js/1.40.0/source.json": "b6fd491369e9ef888fdef64b839023a2360caaea8eb370d2cfbfdd2a96721311", + "https://bcr.bazel.build/modules/aspect_rules_lint/0.12.0/MODULE.bazel": "e767c5dbfeb254ec03275a7701b5cfde2c4d2873676804bc7cb27ddff3728fed", + "https://bcr.bazel.build/modules/aspect_rules_lint/1.2.0/MODULE.bazel": "4a7f65caa2578065cb2264a45ef7a12e1f153a3b6fa2a0c80c5ba56e270d7252", + "https://bcr.bazel.build/modules/aspect_rules_lint/1.2.0/source.json": "8031f086c4ee4e7e6d55bd5b33d60822efc72c677cc908047cbc568db95985e8", + "https://bcr.bazel.build/modules/bazel_features/0.1.0/MODULE.bazel": "47011d645b0f949f42ee67f2e8775188a9cf4a0a1528aa2fa4952f2fd00906fd", "https://bcr.bazel.build/modules/bazel_features/1.1.0/MODULE.bazel": "cfd42ff3b815a5f39554d97182657f8c4b9719568eb7fded2b9135f084bf760b", "https://bcr.bazel.build/modules/bazel_features/1.1.1/MODULE.bazel": "27b8c79ef57efe08efccbd9dd6ef70d61b4798320b8d3c134fd571f78963dbcd", "https://bcr.bazel.build/modules/bazel_features/1.10.0/MODULE.bazel": "f75e8807570484a99be90abcd52b5e1f390362c258bcb73106f4544957a48101", @@ -27,6 +39,7 @@ "https://bcr.bazel.build/modules/bazel_features/1.17.0/MODULE.bazel": "039de32d21b816b47bd42c778e0454217e9c9caac4a3cf8e15c7231ee3ddee4d", "https://bcr.bazel.build/modules/bazel_features/1.18.0/MODULE.bazel": "1be0ae2557ab3a72a57aeb31b29be347bcdc5d2b1eb1e70f39e3851a7e97041a", "https://bcr.bazel.build/modules/bazel_features/1.19.0/MODULE.bazel": "59adcdf28230d220f0067b1f435b8537dd033bfff8db21335ef9217919c7fb58", + "https://bcr.bazel.build/modules/bazel_features/1.2.0/MODULE.bazel": "122b2b606622afbaa498913d54f52d9bcd2d19a5edd1bd6d6c5aa17441c4d5f9", "https://bcr.bazel.build/modules/bazel_features/1.21.0/MODULE.bazel": "675642261665d8eea09989aa3b8afb5c37627f1be178382c320d1b46afba5e3b", "https://bcr.bazel.build/modules/bazel_features/1.21.0/source.json": "3e8379efaaef53ce35b7b8ba419df829315a880cb0a030e5bb45c96d6d5ecb5f", "https://bcr.bazel.build/modules/bazel_features/1.3.0/MODULE.bazel": "cdcafe83ec318cda34e02948e81d790aab8df7a929cec6f6969f13a489ccecd9", @@ -51,6 +64,8 @@ "https://bcr.bazel.build/modules/boringssl/0.20240913.0/MODULE.bazel": "fcaa7503a5213290831a91ed1eb538551cf11ac0bc3a6ad92d0fef92c5bd25fb", "https://bcr.bazel.build/modules/boringssl/0.20241024.0/MODULE.bazel": "b540cff73d948cb79cb0bc108d7cef391d2098a25adabfda5043e4ef548dbc87", "https://bcr.bazel.build/modules/boringssl/0.20241024.0/source.json": "d843092e682b84188c043ac742965d7f96e04c846c7e338187e03238674909a9", + "https://bcr.bazel.build/modules/buildifier_prebuilt/6.1.2/MODULE.bazel": "2ef4962c8b0b6d8d21928a89190755619254459bc67f870dc0ccb9ba9952d444", + "https://bcr.bazel.build/modules/buildifier_prebuilt/6.1.2/source.json": "19fb45ed3f0d55cbff94e402c39512940833ae3a68f9cbfd9518a1926b609c7c", "https://bcr.bazel.build/modules/buildozer/7.1.2/MODULE.bazel": "2e8dd40ede9c454042645fd8d8d0cd1527966aa5c919de86661e62953cd73d84", "https://bcr.bazel.build/modules/buildozer/7.1.2/source.json": "c9028a501d2db85793a6996205c8de120944f50a0d570438fcae0457a5f9d1f8", "https://bcr.bazel.build/modules/c-ares/1.15.0/MODULE.bazel": "ba0a78360fdc83f02f437a9e7df0532ad1fbaa59b722f6e715c11effebaa0166", @@ -170,6 +185,8 @@ "https://bcr.bazel.build/modules/rules_apple/3.17.1/MODULE.bazel": "1f8f5b16da1861db86ad3f474354c292b664c92008950407e2391fa36d9aab32", "https://bcr.bazel.build/modules/rules_apple/3.17.1/source.json": "795b05da73beb218d6125277a300c295b8a546ab41a0d80beafadb733cb14310", "https://bcr.bazel.build/modules/rules_apple/3.5.1/MODULE.bazel": "3d1bbf65ad3692003d36d8a29eff54d4e5c1c5f4bfb60f79e28646a924d9101c", + "https://bcr.bazel.build/modules/rules_buf/0.1.1/MODULE.bazel": "6189aec18a4f7caff599ad41b851ab7645d4f1e114aa6431acf9b0666eb92162", + "https://bcr.bazel.build/modules/rules_buf/0.1.1/source.json": "021363d254f7438f3f10725355969c974bb2c67e0c28667782ade31a9cdb747f", "https://bcr.bazel.build/modules/rules_cc/0.0.1/MODULE.bazel": "cb2aa0747f84c6c3a78dad4e2049c154f08ab9d166b1273835a8174940365647", "https://bcr.bazel.build/modules/rules_cc/0.0.10/MODULE.bazel": "ec1705118f7eaedd6e118508d3d26deba2a4e76476ada7e0e3965211be012002", "https://bcr.bazel.build/modules/rules_cc/0.0.13/MODULE.bazel": "0e8529ed7b323dad0775ff924d2ae5af7640b23553dfcd4d34344c7e7a867191", @@ -233,12 +250,19 @@ "https://bcr.bazel.build/modules/rules_license/0.0.7/MODULE.bazel": "088fbeb0b6a419005b89cf93fe62d9517c0a2b8bb56af3244af65ecfe37e7d5d", "https://bcr.bazel.build/modules/rules_license/1.0.0/MODULE.bazel": "a7fda60eefdf3d8c827262ba499957e4df06f659330bbe6cdbdb975b768bb65c", "https://bcr.bazel.build/modules/rules_license/1.0.0/source.json": "a52c89e54cc311196e478f8382df91c15f7a2bfdf4c6cd0e2675cc2ff0b56efb", + "https://bcr.bazel.build/modules/rules_multirun/0.9.0/MODULE.bazel": "32d628ef586b5b23f67e55886b7bc38913ea4160420d66ae90521dda2ff37df0", + "https://bcr.bazel.build/modules/rules_multirun/0.9.0/source.json": "e882ba77962fa6c5fe68619e5c7d0374ec9a219fb8d03c42eadaf6d0243771bd", + "https://bcr.bazel.build/modules/rules_multitool/0.4.0/MODULE.bazel": "15517987d5c00c9e7faab41fbe22ee67a350b6eabcc1e08baded5c6d9025897f", + "https://bcr.bazel.build/modules/rules_multitool/0.4.0/source.json": "d73b450b7c6d9683e400d6cebc463fbc2b870cc5d8e2e75080d6278805aaab08", + "https://bcr.bazel.build/modules/rules_nodejs/5.8.2/MODULE.bazel": "6bc03c8f37f69401b888023bf511cb6ee4781433b0cb56236b2e55a21e3a026a", + "https://bcr.bazel.build/modules/rules_nodejs/5.8.2/source.json": "6e82cf5753d835ea18308200bc79b9c2e782efe2e2a4edc004a9162ca93382ca", "https://bcr.bazel.build/modules/rules_pkg/0.7.0/MODULE.bazel": "df99f03fc7934a4737122518bb87e667e62d780b610910f0447665a7e2be62dc", "https://bcr.bazel.build/modules/rules_pkg/1.0.1/MODULE.bazel": "5b1df97dbc29623bccdf2b0dcd0f5cb08e2f2c9050aab1092fd39a41e82686ff", "https://bcr.bazel.build/modules/rules_pkg/1.0.1/source.json": "bd82e5d7b9ce2d31e380dd9f50c111d678c3bdaca190cb76b0e1c71b05e1ba8a", "https://bcr.bazel.build/modules/rules_proto/4.0.0/MODULE.bazel": "a7a7b6ce9bee418c1a760b3d84f83a299ad6952f9903c67f19e4edd964894e06", "https://bcr.bazel.build/modules/rules_proto/5.3.0-21.7/MODULE.bazel": "e8dff86b0971688790ae75528fe1813f71809b5afd57facb44dad9e8eca631b7", "https://bcr.bazel.build/modules/rules_proto/6.0.0-rc1/MODULE.bazel": "1e5b502e2e1a9e825eef74476a5a1ee524a92297085015a052510b09a1a09483", + "https://bcr.bazel.build/modules/rules_proto/6.0.0-rc2/MODULE.bazel": "e17f94f8a347e2c808517b65d74988839d2d62daceb50073e44060193b785eb1", "https://bcr.bazel.build/modules/rules_proto/6.0.0/MODULE.bazel": "b531d7f09f58dce456cd61b4579ce8c86b38544da75184eadaf0a7cb7966453f", "https://bcr.bazel.build/modules/rules_proto/6.0.2/MODULE.bazel": "ce916b775a62b90b61888052a416ccdda405212b6aaeb39522f7dc53431a5e73", "https://bcr.bazel.build/modules/rules_proto/7.0.2/MODULE.bazel": "bf81793bd6d2ad89a37a40693e56c61b0ee30f7a7fdbaf3eabbf5f39de47dea2", @@ -249,6 +273,7 @@ "https://bcr.bazel.build/modules/rules_python/0.22.1/MODULE.bazel": "26114f0c0b5e93018c0c066d6673f1a2c3737c7e90af95eff30cfee38d0bbac7", "https://bcr.bazel.build/modules/rules_python/0.23.1/MODULE.bazel": "49ffccf0511cb8414de28321f5fcf2a31312b47c40cc21577144b7447f2bf300", "https://bcr.bazel.build/modules/rules_python/0.25.0/MODULE.bazel": "72f1506841c920a1afec76975b35312410eea3aa7b63267436bfb1dd91d2d382", + "https://bcr.bazel.build/modules/rules_python/0.27.1/MODULE.bazel": "65dc875cc1a06c30d5bbdba7ab021fd9e551a6579e408a3943a61303e2228a53", "https://bcr.bazel.build/modules/rules_python/0.28.0/MODULE.bazel": "cba2573d870babc976664a912539b320cbaa7114cd3e8f053c720171cde331ed", "https://bcr.bazel.build/modules/rules_python/0.29.0/MODULE.bazel": "2ac8cd70524b4b9ec49a0b8284c79e4cd86199296f82f6e0d5da3f783d660c82", "https://bcr.bazel.build/modules/rules_python/0.31.0/MODULE.bazel": "93a43dc47ee570e6ec9f5779b2e64c1476a6ce921c48cc9a1678a91dd5f8fd58", @@ -266,8 +291,10 @@ "https://bcr.bazel.build/modules/rules_swift/1.18.0/MODULE.bazel": "a6aba73625d0dc64c7b4a1e831549b6e375fbddb9d2dde9d80c9de6ec45b24c9", "https://bcr.bazel.build/modules/rules_swift/2.1.1/MODULE.bazel": "494900a80f944fc7aa61500c2073d9729dff0b764f0e89b824eb746959bc1046", "https://bcr.bazel.build/modules/rules_swift/2.1.1/source.json": "40fc69dfaac64deddbb75bd99cdac55f4427d9ca0afbe408576a65428427a186", + "https://bcr.bazel.build/modules/stardoc/0.5.0/MODULE.bazel": "f9f1f46ba8d9c3362648eea571c6f9100680efc44913618811b58cc9c02cd678", "https://bcr.bazel.build/modules/stardoc/0.5.1/MODULE.bazel": "1a05d92974d0c122f5ccf09291442580317cdd859f07a8655f1db9a60374f9f8", "https://bcr.bazel.build/modules/stardoc/0.5.3/MODULE.bazel": "c7f6948dae6999bf0db32c1858ae345f112cacf98f174c7a8bb707e41b974f1c", + "https://bcr.bazel.build/modules/stardoc/0.5.4/MODULE.bazel": "6569966df04610b8520957cb8e97cf2e9faac2c0309657c537ab51c16c18a2a4", "https://bcr.bazel.build/modules/stardoc/0.5.6/MODULE.bazel": "c43dabc564990eeab55e25ed61c07a1aadafe9ece96a4efabb3f8bf9063b71ef", "https://bcr.bazel.build/modules/stardoc/0.6.2/MODULE.bazel": "7060193196395f5dd668eda046ccbeacebfd98efc77fed418dbe2b82ffaa39fd", "https://bcr.bazel.build/modules/stardoc/0.7.0/MODULE.bazel": "05e3d6d30c099b6770e97da986c53bd31844d7f13d41412480ea265ac9e8079c", @@ -276,6 +303,8 @@ "https://bcr.bazel.build/modules/stardoc/0.7.2/source.json": "58b029e5e901d6802967754adf0a9056747e8176f017cfe3607c0851f4d42216", "https://bcr.bazel.build/modules/swift_argument_parser/1.3.1.1/MODULE.bazel": "5e463fbfba7b1701d957555ed45097d7f984211330106ccd1352c6e0af0dcf91", "https://bcr.bazel.build/modules/swift_argument_parser/1.3.1.1/source.json": "32bd87e5f4d7acc57c5b2ff7c325ae3061d5e242c0c4c214ae87e0f1c13e54cb", + "https://bcr.bazel.build/modules/toolchains_protoc/0.2.1/MODULE.bazel": "2f08433ff5e659069b3a1abfee2377d68f510f2de1da50678ed992c455b4ff91", + "https://bcr.bazel.build/modules/toolchains_protoc/0.2.1/source.json": "4ee6b007b62e1b9e493b00ccc60e61a258633f304b74813b6e7f7234927be94c", "https://bcr.bazel.build/modules/upb/0.0.0-20211020-160625a/MODULE.bazel": "6cced416be2dc5b9c05efd5b997049ba795e5e4e6fafbe1624f4587767638928", "https://bcr.bazel.build/modules/upb/0.0.0-20220923-a547704/MODULE.bazel": "7298990c00040a0e2f121f6c32544bab27d4452f80d9ce51349b1a28f3005c43", "https://bcr.bazel.build/modules/upb/0.0.0-20230516-61a97ef/MODULE.bazel": "c0df5e35ad55e264160417fd0875932ee3c9dda63d9fccace35ac62f45e1b6f9", @@ -324,6 +353,554 @@ ] } }, + "@@aspect_bazel_lib+//lib:extensions.bzl%toolchains": { + "general": { + "bzlTransitiveDigest": "K4T+rws7BXvHaN8LlVgJVDiNUotXshrjIU3oeUAhhqw=", + "usagesDigest": "W4Mi+ZzXTwLz6fnBG/tlLCL9H28ui8uzVk0kEoey/Uw=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "copy_directory_darwin_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:copy_directory_toolchain.bzl%copy_directory_platform_repo", + "attributes": { + "platform": "darwin_amd64" + } + }, + "copy_directory_darwin_arm64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:copy_directory_toolchain.bzl%copy_directory_platform_repo", + "attributes": { + "platform": "darwin_arm64" + } + }, + "copy_directory_freebsd_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:copy_directory_toolchain.bzl%copy_directory_platform_repo", + "attributes": { + "platform": "freebsd_amd64" + } + }, + "copy_directory_linux_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:copy_directory_toolchain.bzl%copy_directory_platform_repo", + "attributes": { + "platform": "linux_amd64" + } + }, + "copy_directory_linux_arm64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:copy_directory_toolchain.bzl%copy_directory_platform_repo", + "attributes": { + "platform": "linux_arm64" + } + }, + "copy_directory_windows_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:copy_directory_toolchain.bzl%copy_directory_platform_repo", + "attributes": { + "platform": "windows_amd64" + } + }, + "copy_directory_toolchains": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:copy_directory_toolchain.bzl%copy_directory_toolchains_repo", + "attributes": { + "user_repository_name": "copy_directory" + } + }, + "copy_to_directory_darwin_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:copy_to_directory_toolchain.bzl%copy_to_directory_platform_repo", + "attributes": { + "platform": "darwin_amd64" + } + }, + "copy_to_directory_darwin_arm64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:copy_to_directory_toolchain.bzl%copy_to_directory_platform_repo", + "attributes": { + "platform": "darwin_arm64" + } + }, + "copy_to_directory_freebsd_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:copy_to_directory_toolchain.bzl%copy_to_directory_platform_repo", + "attributes": { + "platform": "freebsd_amd64" + } + }, + "copy_to_directory_linux_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:copy_to_directory_toolchain.bzl%copy_to_directory_platform_repo", + "attributes": { + "platform": "linux_amd64" + } + }, + "copy_to_directory_linux_arm64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:copy_to_directory_toolchain.bzl%copy_to_directory_platform_repo", + "attributes": { + "platform": "linux_arm64" + } + }, + "copy_to_directory_windows_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:copy_to_directory_toolchain.bzl%copy_to_directory_platform_repo", + "attributes": { + "platform": "windows_amd64" + } + }, + "copy_to_directory_toolchains": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:copy_to_directory_toolchain.bzl%copy_to_directory_toolchains_repo", + "attributes": { + "user_repository_name": "copy_to_directory" + } + }, + "jq_darwin_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:jq_toolchain.bzl%jq_platform_repo", + "attributes": { + "platform": "darwin_amd64", + "version": "1.7" + } + }, + "jq_darwin_arm64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:jq_toolchain.bzl%jq_platform_repo", + "attributes": { + "platform": "darwin_arm64", + "version": "1.7" + } + }, + "jq_linux_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:jq_toolchain.bzl%jq_platform_repo", + "attributes": { + "platform": "linux_amd64", + "version": "1.7" + } + }, + "jq_linux_arm64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:jq_toolchain.bzl%jq_platform_repo", + "attributes": { + "platform": "linux_arm64", + "version": "1.7" + } + }, + "jq_windows_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:jq_toolchain.bzl%jq_platform_repo", + "attributes": { + "platform": "windows_amd64", + "version": "1.7" + } + }, + "jq": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:jq_toolchain.bzl%jq_host_alias_repo", + "attributes": {} + }, + "jq_toolchains": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:jq_toolchain.bzl%jq_toolchains_repo", + "attributes": { + "user_repository_name": "jq" + } + }, + "yq_darwin_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:yq_toolchain.bzl%yq_platform_repo", + "attributes": { + "platform": "darwin_amd64", + "version": "4.25.2" + } + }, + "yq_darwin_arm64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:yq_toolchain.bzl%yq_platform_repo", + "attributes": { + "platform": "darwin_arm64", + "version": "4.25.2" + } + }, + "yq_linux_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:yq_toolchain.bzl%yq_platform_repo", + "attributes": { + "platform": "linux_amd64", + "version": "4.25.2" + } + }, + "yq_linux_arm64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:yq_toolchain.bzl%yq_platform_repo", + "attributes": { + "platform": "linux_arm64", + "version": "4.25.2" + } + }, + "yq_linux_s390x": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:yq_toolchain.bzl%yq_platform_repo", + "attributes": { + "platform": "linux_s390x", + "version": "4.25.2" + } + }, + "yq_linux_ppc64le": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:yq_toolchain.bzl%yq_platform_repo", + "attributes": { + "platform": "linux_ppc64le", + "version": "4.25.2" + } + }, + "yq_windows_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:yq_toolchain.bzl%yq_platform_repo", + "attributes": { + "platform": "windows_amd64", + "version": "4.25.2" + } + }, + "yq": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:yq_toolchain.bzl%yq_host_alias_repo", + "attributes": {} + }, + "yq_toolchains": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:yq_toolchain.bzl%yq_toolchains_repo", + "attributes": { + "user_repository_name": "yq" + } + }, + "coreutils_darwin_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:coreutils_toolchain.bzl%coreutils_platform_repo", + "attributes": { + "platform": "darwin_amd64", + "version": "0.0.26" + } + }, + "coreutils_darwin_arm64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:coreutils_toolchain.bzl%coreutils_platform_repo", + "attributes": { + "platform": "darwin_arm64", + "version": "0.0.26" + } + }, + "coreutils_linux_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:coreutils_toolchain.bzl%coreutils_platform_repo", + "attributes": { + "platform": "linux_amd64", + "version": "0.0.26" + } + }, + "coreutils_linux_arm64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:coreutils_toolchain.bzl%coreutils_platform_repo", + "attributes": { + "platform": "linux_arm64", + "version": "0.0.26" + } + }, + "coreutils_windows_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:coreutils_toolchain.bzl%coreutils_platform_repo", + "attributes": { + "platform": "windows_amd64", + "version": "0.0.26" + } + }, + "coreutils_toolchains": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:coreutils_toolchain.bzl%coreutils_toolchains_repo", + "attributes": { + "user_repository_name": "coreutils" + } + }, + "bsd_tar_darwin_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:tar_toolchain.bzl%bsdtar_binary_repo", + "attributes": { + "platform": "darwin_amd64" + } + }, + "bsd_tar_darwin_arm64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:tar_toolchain.bzl%bsdtar_binary_repo", + "attributes": { + "platform": "darwin_arm64" + } + }, + "bsd_tar_linux_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:tar_toolchain.bzl%bsdtar_binary_repo", + "attributes": { + "platform": "linux_amd64" + } + }, + "bsd_tar_linux_arm64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:tar_toolchain.bzl%bsdtar_binary_repo", + "attributes": { + "platform": "linux_arm64" + } + }, + "bsd_tar_windows_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:tar_toolchain.bzl%bsdtar_binary_repo", + "attributes": { + "platform": "windows_amd64" + } + }, + "bsd_tar_toolchains": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:tar_toolchain.bzl%tar_toolchains_repo", + "attributes": { + "user_repository_name": "bsd_tar" + } + }, + "zstd_darwin_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:zstd_toolchain.bzl%zstd_binary_repo", + "attributes": { + "platform": "darwin_amd64" + } + }, + "zstd_darwin_arm64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:zstd_toolchain.bzl%zstd_binary_repo", + "attributes": { + "platform": "darwin_arm64" + } + }, + "zstd_linux_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:zstd_toolchain.bzl%zstd_binary_repo", + "attributes": { + "platform": "linux_amd64" + } + }, + "zstd_linux_arm64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:zstd_toolchain.bzl%zstd_binary_repo", + "attributes": { + "platform": "linux_arm64" + } + }, + "zstd_toolchains": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:zstd_toolchain.bzl%zstd_toolchains_repo", + "attributes": { + "user_repository_name": "zstd" + } + }, + "expand_template_darwin_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:expand_template_toolchain.bzl%expand_template_platform_repo", + "attributes": { + "platform": "darwin_amd64" + } + }, + "expand_template_darwin_arm64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:expand_template_toolchain.bzl%expand_template_platform_repo", + "attributes": { + "platform": "darwin_arm64" + } + }, + "expand_template_freebsd_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:expand_template_toolchain.bzl%expand_template_platform_repo", + "attributes": { + "platform": "freebsd_amd64" + } + }, + "expand_template_linux_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:expand_template_toolchain.bzl%expand_template_platform_repo", + "attributes": { + "platform": "linux_amd64" + } + }, + "expand_template_linux_arm64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:expand_template_toolchain.bzl%expand_template_platform_repo", + "attributes": { + "platform": "linux_arm64" + } + }, + "expand_template_windows_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:expand_template_toolchain.bzl%expand_template_platform_repo", + "attributes": { + "platform": "windows_amd64" + } + }, + "expand_template_toolchains": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:expand_template_toolchain.bzl%expand_template_toolchains_repo", + "attributes": { + "user_repository_name": "expand_template" + } + }, + "bats_support": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "sha256": "7815237aafeb42ddcc1b8c698fc5808026d33317d8701d5ec2396e9634e2918f", + "urls": [ + "https://github.com/bats-core/bats-support/archive/v0.3.0.tar.gz" + ], + "strip_prefix": "bats-support-0.3.0", + "build_file_content": "load(\"@aspect_bazel_lib//lib:copy_to_directory.bzl\", \"copy_to_directory\")\n\ncopy_to_directory(\n name = \"support\",\n hardlink = \"on\",\n srcs = glob([\n \"src/**\",\n \"load.bash\",\n ]),\n out = \"bats-support\",\n visibility = [\"//visibility:public\"]\n)\n" + } + }, + "bats_assert": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "sha256": "98ca3b685f8b8993e48ec057565e6e2abcc541034ed5b0e81f191505682037fd", + "urls": [ + "https://github.com/bats-core/bats-assert/archive/v2.1.0.tar.gz" + ], + "strip_prefix": "bats-assert-2.1.0", + "build_file_content": "load(\"@aspect_bazel_lib//lib:copy_to_directory.bzl\", \"copy_to_directory\")\n\ncopy_to_directory(\n name = \"assert\",\n hardlink = \"on\",\n srcs = glob([\n \"src/**\",\n \"load.bash\",\n ]),\n out = \"bats-assert\",\n visibility = [\"//visibility:public\"]\n)\n" + } + }, + "bats_file": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "sha256": "9b69043241f3af1c2d251f89b4fcafa5df3f05e97b89db18d7c9bdf5731bb27a", + "urls": [ + "https://github.com/bats-core/bats-file/archive/v0.4.0.tar.gz" + ], + "strip_prefix": "bats-file-0.4.0", + "build_file_content": "load(\"@aspect_bazel_lib//lib:copy_to_directory.bzl\", \"copy_to_directory\")\n\ncopy_to_directory(\n name = \"file\",\n hardlink = \"on\",\n srcs = glob([\n \"src/**\",\n \"load.bash\",\n ]),\n out = \"bats-file\",\n visibility = [\"//visibility:public\"]\n)\n" + } + }, + "bats_toolchains": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "sha256": "a1a9f7875aa4b6a9480ca384d5865f1ccf1b0b1faead6b47aa47d79709a5c5fd", + "urls": [ + "https://github.com/bats-core/bats-core/archive/v1.10.0.tar.gz" + ], + "strip_prefix": "bats-core-1.10.0", + "build_file_content": "load(\"@local_config_platform//:constraints.bzl\", \"HOST_CONSTRAINTS\")\nload(\"@aspect_bazel_lib//lib/private:bats_toolchain.bzl\", \"bats_toolchain\")\nload(\"@aspect_bazel_lib//lib:copy_to_directory.bzl\", \"copy_to_directory\")\n\ncopy_to_directory(\n name = \"core\",\n hardlink = \"on\",\n srcs = glob([\n \"lib/**\",\n \"libexec/**\"\n ]) + [\"bin/bats\"],\n out = \"bats-core\",\n)\n\nbats_toolchain(\n name = \"toolchain\",\n core = \":core\",\n libraries = [\"@bats_support//:support\", \"@bats_assert//:assert\", \"@bats_file//:file\"]\n)\n\ntoolchain(\n name = \"bats_toolchain\",\n exec_compatible_with = HOST_CONSTRAINTS,\n toolchain = \":toolchain\",\n toolchain_type = \"@aspect_bazel_lib//lib:bats_toolchain_type\",\n)\n" + } + } + }, + "recordedRepoMappingEntries": [ + [ + "aspect_bazel_lib+", + "aspect_bazel_lib", + "aspect_bazel_lib+" + ], + [ + "aspect_bazel_lib+", + "bazel_skylib", + "bazel_skylib+" + ], + [ + "aspect_bazel_lib+", + "bazel_tools", + "bazel_tools" + ] + ] + } + }, + "@@buildifier_prebuilt+//:defs.bzl%buildifier_prebuilt_deps_extension": { + "general": { + "bzlTransitiveDigest": "BQ67MS38sDZxeQEfUs4vghLhs3+m4IXU/i7XC50fl9s=", + "usagesDigest": "JCqhJg+TeFVLBlrKVGI0Npi9RChNqkZQAh9TYfbAobs=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "buildifier_darwin_amd64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v6.1.2/buildifier-darwin-amd64" + ], + "downloaded_file_path": "buildifier", + "executable": true, + "sha256": "e2f4a67691c5f55634fbfb3850eb97dd91be0edd059d947b6c83d120682e0216" + } + }, + "buildifier_darwin_arm64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v6.1.2/buildifier-darwin-arm64" + ], + "downloaded_file_path": "buildifier", + "executable": true, + "sha256": "7549b5f535219ac957aa2a6069d46fbfc9ea3f74abd85fd3d460af4b1a2099a6" + } + }, + "buildifier_linux_amd64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v6.1.2/buildifier-linux-amd64" + ], + "downloaded_file_path": "buildifier", + "executable": true, + "sha256": "51bc947dabb7b14ec6fb1224464fbcf7a7cb138f1a10a3b328f00835f72852ce" + } + }, + "buildifier_linux_arm64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v6.1.2/buildifier-linux-arm64" + ], + "downloaded_file_path": "buildifier", + "executable": true, + "sha256": "0ba6e8e3208b5a029164e542ddb5509e618f87b639ffe8cc2f54770022853080" + } + }, + "buildifier_windows_amd64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v6.1.2/buildifier-windows-amd64.exe" + ], + "downloaded_file_path": "buildifier.exe", + "executable": true, + "sha256": "92bdd284fbc6766fc3e300b434ff9e68ac4d76a06cb29d1bdefe79a102a8d135" + } + }, + "buildozer_darwin_amd64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v6.1.2/buildozer-darwin-amd64" + ], + "downloaded_file_path": "buildozer", + "executable": true, + "sha256": "4014751a4cc5e91a7dc4b64be7b30c565bd9014ae6d1879818dc624562a1d431" + } + }, + "buildozer_darwin_arm64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v6.1.2/buildozer-darwin-arm64" + ], + "downloaded_file_path": "buildozer", + "executable": true, + "sha256": "e78bd5357f2356067d4b0d49ec4e4143dd9b1308746afc6ff11b55b952f462d7" + } + }, + "buildozer_linux_amd64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v6.1.2/buildozer-linux-amd64" + ], + "downloaded_file_path": "buildozer", + "executable": true, + "sha256": "2aef0f1ef80a0140b8fe6e6a8eb822e14827d8855bfc6681532c7530339ea23b" + } + }, + "buildozer_linux_arm64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v6.1.2/buildozer-linux-arm64" + ], + "downloaded_file_path": "buildozer", + "executable": true, + "sha256": "586e27630cbc242e8bd6fe8e24485eca8dcadea6410cc13cbe059202655980ac" + } + }, + "buildozer_windows_amd64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v6.1.2/buildozer-windows-amd64.exe" + ], + "downloaded_file_path": "buildozer.exe", + "executable": true, + "sha256": "07664d5d08ee099f069cd654070cabf2708efaae9f52dc83921fa400c67a868b" + } + }, + "buildifier_prebuilt_toolchains": { + "repoRuleId": "@@buildifier_prebuilt+//:defs.bzl%_buildifier_toolchain_setup", + "attributes": { + "assets_json": "[{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"darwin\",\"sha256\":\"e2f4a67691c5f55634fbfb3850eb97dd91be0edd059d947b6c83d120682e0216\",\"version\":\"v6.1.2\"},{\"arch\":\"arm64\",\"name\":\"buildifier\",\"platform\":\"darwin\",\"sha256\":\"7549b5f535219ac957aa2a6069d46fbfc9ea3f74abd85fd3d460af4b1a2099a6\",\"version\":\"v6.1.2\"},{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"linux\",\"sha256\":\"51bc947dabb7b14ec6fb1224464fbcf7a7cb138f1a10a3b328f00835f72852ce\",\"version\":\"v6.1.2\"},{\"arch\":\"arm64\",\"name\":\"buildifier\",\"platform\":\"linux\",\"sha256\":\"0ba6e8e3208b5a029164e542ddb5509e618f87b639ffe8cc2f54770022853080\",\"version\":\"v6.1.2\"},{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"windows\",\"sha256\":\"92bdd284fbc6766fc3e300b434ff9e68ac4d76a06cb29d1bdefe79a102a8d135\",\"version\":\"v6.1.2\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"darwin\",\"sha256\":\"4014751a4cc5e91a7dc4b64be7b30c565bd9014ae6d1879818dc624562a1d431\",\"version\":\"v6.1.2\"},{\"arch\":\"arm64\",\"name\":\"buildozer\",\"platform\":\"darwin\",\"sha256\":\"e78bd5357f2356067d4b0d49ec4e4143dd9b1308746afc6ff11b55b952f462d7\",\"version\":\"v6.1.2\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"linux\",\"sha256\":\"2aef0f1ef80a0140b8fe6e6a8eb822e14827d8855bfc6681532c7530339ea23b\",\"version\":\"v6.1.2\"},{\"arch\":\"arm64\",\"name\":\"buildozer\",\"platform\":\"linux\",\"sha256\":\"586e27630cbc242e8bd6fe8e24485eca8dcadea6410cc13cbe059202655980ac\",\"version\":\"v6.1.2\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"windows\",\"sha256\":\"07664d5d08ee099f069cd654070cabf2708efaae9f52dc83921fa400c67a868b\",\"version\":\"v6.1.2\"}]" + } + } + }, + "recordedRepoMappingEntries": [ + [ + "buildifier_prebuilt+", + "bazel_skylib", + "bazel_skylib+" + ], + [ + "buildifier_prebuilt+", + "bazel_tools", + "bazel_tools" + ] + ] + } + }, "@@googleapis+//:extensions.bzl%switched_rules": { "general": { "bzlTransitiveDigest": "vG6fuTzXD8MMvHWZEQud0MMH7eoC4GXY0va7VrFFh04=", @@ -558,6 +1135,30 @@ "recordedRepoMappingEntries": [] } }, + "@@rules_buf+//buf:extensions.bzl%ext": { + "general": { + "bzlTransitiveDigest": "3jGepUu1j86kWsTP3Fgogw/XfktHd4UIQt8zj494n/Y=", + "usagesDigest": "RTc2BMQ2b0wGU8CRvN3EoPz34m3LMe+K/oSkFkN83+M=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "rules_buf_toolchains": { + "repoRuleId": "@@rules_buf+//buf/internal:toolchain.bzl%buf_download_releases", + "attributes": { + "version": "v1.27.0" + } + } + }, + "recordedRepoMappingEntries": [ + [ + "rules_buf+", + "bazel_tools", + "bazel_tools" + ] + ] + } + }, "@@rules_foreign_cc+//foreign_cc:extensions.bzl%tools": { "general": { "bzlTransitiveDigest": "FApcIcVN43WOEs7g8eg7Cy1hrfRbVNEoUu8IiF+8WOc=", @@ -958,6 +1559,161 @@ ] } }, + "@@rules_multitool+//multitool:extension.bzl%multitool": { + "general": { + "bzlTransitiveDigest": "AtvPzG/SAawYMKVVHcMoJq4EXkVPTIhS3AeNwENXp9E=", + "usagesDigest": "e8LhmhBwk31LQl101CsIrkGyTSXLKajJj61scb7SRLY=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "multitool.linux_arm64": { + "repoRuleId": "@@rules_multitool+//multitool/private:multitool.bzl%_env_specific_tools", + "attributes": { + "lockfiles": [ + "@@aspect_rules_lint+//format:multitool.lock.json", + "@@aspect_rules_lint+//lint:multitool.lock.json" + ], + "os": "linux", + "cpu": "arm64" + } + }, + "multitool.linux_x86_64": { + "repoRuleId": "@@rules_multitool+//multitool/private:multitool.bzl%_env_specific_tools", + "attributes": { + "lockfiles": [ + "@@aspect_rules_lint+//format:multitool.lock.json", + "@@aspect_rules_lint+//lint:multitool.lock.json" + ], + "os": "linux", + "cpu": "x86_64" + } + }, + "multitool.macos_arm64": { + "repoRuleId": "@@rules_multitool+//multitool/private:multitool.bzl%_env_specific_tools", + "attributes": { + "lockfiles": [ + "@@aspect_rules_lint+//format:multitool.lock.json", + "@@aspect_rules_lint+//lint:multitool.lock.json" + ], + "os": "macos", + "cpu": "arm64" + } + }, + "multitool.macos_x86_64": { + "repoRuleId": "@@rules_multitool+//multitool/private:multitool.bzl%_env_specific_tools", + "attributes": { + "lockfiles": [ + "@@aspect_rules_lint+//format:multitool.lock.json", + "@@aspect_rules_lint+//lint:multitool.lock.json" + ], + "os": "macos", + "cpu": "x86_64" + } + }, + "multitool": { + "repoRuleId": "@@rules_multitool+//multitool/private:multitool.bzl%_multitool_hub", + "attributes": { + "lockfiles": [ + "@@aspect_rules_lint+//format:multitool.lock.json", + "@@aspect_rules_lint+//lint:multitool.lock.json" + ] + } + } + }, + "recordedRepoMappingEntries": [] + } + }, + "@@rules_nodejs+//nodejs:extensions.bzl%node": { + "general": { + "bzlTransitiveDigest": "btnelILPo3ngQN9vWtsQMclvJZPf3X2vcGTjmW7Owy8=", + "usagesDigest": "8OoyQ05AfTDe1T/jKkylUFidWxQge7e3HN2eOIIA6xM=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "nodejs_linux_amd64": { + "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%node_repositories", + "attributes": { + "platform": "linux_amd64", + "node_version": "16.19.0" + } + }, + "nodejs_linux_arm64": { + "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%node_repositories", + "attributes": { + "platform": "linux_arm64", + "node_version": "16.19.0" + } + }, + "nodejs_linux_s390x": { + "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%node_repositories", + "attributes": { + "platform": "linux_s390x", + "node_version": "16.19.0" + } + }, + "nodejs_linux_ppc64le": { + "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%node_repositories", + "attributes": { + "platform": "linux_ppc64le", + "node_version": "16.19.0" + } + }, + "nodejs_darwin_amd64": { + "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%node_repositories", + "attributes": { + "platform": "darwin_amd64", + "node_version": "16.19.0" + } + }, + "nodejs_darwin_arm64": { + "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%node_repositories", + "attributes": { + "platform": "darwin_arm64", + "node_version": "16.19.0" + } + }, + "nodejs_windows_amd64": { + "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%node_repositories", + "attributes": { + "platform": "windows_amd64", + "node_version": "16.19.0" + } + }, + "nodejs": { + "repoRuleId": "@@rules_nodejs+//nodejs/private:nodejs_repo_host_os_alias.bzl%nodejs_repo_host_os_alias", + "attributes": { + "user_node_repository_name": "nodejs" + } + }, + "nodejs_host": { + "repoRuleId": "@@rules_nodejs+//nodejs/private:nodejs_repo_host_os_alias.bzl%nodejs_repo_host_os_alias", + "attributes": { + "user_node_repository_name": "nodejs" + } + }, + "nodejs_toolchains": { + "repoRuleId": "@@rules_nodejs+//nodejs/private:toolchains_repo.bzl%toolchains_repo", + "attributes": { + "user_node_repository_name": "nodejs" + } + } + }, + "recordedRepoMappingEntries": [ + [ + "rules_nodejs+", + "bazel_skylib", + "bazel_skylib+" + ], + [ + "rules_nodejs+", + "bazel_tools", + "bazel_tools" + ] + ] + } + }, "@@rules_python+//python/extensions:pip.bzl%pip": { "general": { "bzlTransitiveDigest": "Zx6phrxzOJPzNT1TtUMPWUJiDB7sNn8TqEmUFD3Wc2Q=", @@ -6259,6 +7015,79 @@ ] ] } + }, + "@@toolchains_protoc+//protoc:extensions.bzl%protoc": { + "general": { + "bzlTransitiveDigest": "HnmcD4ia7/1ZuQnymt4OGHXrW62MmIgwCtHByGQ7LQs=", + "usagesDigest": "8nmQyO6LoaF/+HM3ni78Za6MQ5BVffJheAFJgl6hvoY=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "toolchains_protoc_hub.linux_aarch_64": { + "repoRuleId": "@@toolchains_protoc+//protoc/private:prebuilt_protoc_toolchain.bzl%prebuilt_protoc_repo", + "attributes": { + "platform": "linux-aarch_64", + "version": "v25.3" + } + }, + "toolchains_protoc_hub.linux_ppcle_64": { + "repoRuleId": "@@toolchains_protoc+//protoc/private:prebuilt_protoc_toolchain.bzl%prebuilt_protoc_repo", + "attributes": { + "platform": "linux-ppcle_64", + "version": "v25.3" + } + }, + "toolchains_protoc_hub.linux_s390_64": { + "repoRuleId": "@@toolchains_protoc+//protoc/private:prebuilt_protoc_toolchain.bzl%prebuilt_protoc_repo", + "attributes": { + "platform": "linux-s390_64", + "version": "v25.3" + } + }, + "toolchains_protoc_hub.linux_x86_64": { + "repoRuleId": "@@toolchains_protoc+//protoc/private:prebuilt_protoc_toolchain.bzl%prebuilt_protoc_repo", + "attributes": { + "platform": "linux-x86_64", + "version": "v25.3" + } + }, + "toolchains_protoc_hub.osx_aarch_64": { + "repoRuleId": "@@toolchains_protoc+//protoc/private:prebuilt_protoc_toolchain.bzl%prebuilt_protoc_repo", + "attributes": { + "platform": "osx-aarch_64", + "version": "v25.3" + } + }, + "toolchains_protoc_hub.osx_x86_64": { + "repoRuleId": "@@toolchains_protoc+//protoc/private:prebuilt_protoc_toolchain.bzl%prebuilt_protoc_repo", + "attributes": { + "platform": "osx-x86_64", + "version": "v25.3" + } + }, + "toolchains_protoc_hub.win64": { + "repoRuleId": "@@toolchains_protoc+//protoc/private:prebuilt_protoc_toolchain.bzl%prebuilt_protoc_repo", + "attributes": { + "platform": "win64", + "version": "v25.3" + } + }, + "toolchains_protoc_hub": { + "repoRuleId": "@@toolchains_protoc+//protoc/private:protoc_toolchains.bzl%protoc_toolchains_repo", + "attributes": { + "user_repository_name": "toolchains_protoc_hub" + } + }, + "com_google_protobuf": { + "repoRuleId": "@@toolchains_protoc+//protoc:toolchain.bzl%_google_protobuf_alias_repo", + "attributes": { + "alias_to": "toolchains_protoc_hub.osx_aarch_64" + } + } + }, + "recordedRepoMappingEntries": [] + } } } } diff --git a/src/scripts/bazel.sh b/src/scripts/bazel.sh index c467346..03e306a 100755 --- a/src/scripts/bazel.sh +++ b/src/scripts/bazel.sh @@ -9,12 +9,14 @@ BAZEL_CMD="/opt/bazel/bazelisk" # local paths LOCAL_WORKDIR=$(pwd) LOCAL_BIN_DIR=$LOCAL_WORKDIR/src/bin +LOCAL_ASPECT_CACHE="$HOME/.cache/das/aspect" LOCAL_BAZEL_CACHE="$HOME/.cache/das/bazel" LOCAL_BAZELISK_CACHE="$HOME/.cache/das/bazelisk" LOCAL_PIPTOOLS_CACHE="$HOME/.cache/das/pip-tools" LOCAL_PIP_CACHE="$HOME/.cache/das/pip" mkdir -p \ + "$LOCAL_ASPECT_CACHE" \ "$LOCAL_BIN_DIR" \ "$LOCAL_BAZEL_CACHE" \ "$LOCAL_BAZELISK_CACHE" \ @@ -25,6 +27,7 @@ mkdir -p \ CONTAINER_WORKDIR=/opt/das CONTAINER_WORKSPACE_DIR=/opt/das/src CONTAINER_BIN_DIR=$CONTAINER_WORKSPACE_DIR/bin +CONTAINER_ASPECT_CACHE=/home/"${USER}"/.cache/aspect CONTAINER_BAZEL_CACHE=/home/"${USER}"/.cache/bazel CONTAINER_PIP_CACHE=/home/"${USER}"/.cache/pip CONTAINER_PIPTOOLS_CACHE=/home/"${USER}"/.cache/pip-tools @@ -43,6 +46,7 @@ docker run --rm \ --volume /etc/passwd:/etc/passwd:ro \ --volume "$LOCAL_PIP_CACHE":"$CONTAINER_PIP_CACHE" \ --volume "$LOCAL_PIPTOOLS_CACHE":"$CONTAINER_PIPTOOLS_CACHE" \ + --volume "$LOCAL_ASPECT_CACHE":"$CONTAINER_ASPECT_CACHE" \ --volume "$LOCAL_BAZEL_CACHE":"$CONTAINER_BAZEL_CACHE" \ --volume "$LOCAL_BAZELISK_CACHE":"$CONTAINER_BAZELISK_CACHE" \ --volume "$LOCAL_WORKDIR":"$CONTAINER_WORKDIR" \ diff --git a/src/scripts/build.sh b/src/scripts/build.sh index a22105a..86c71e6 100755 --- a/src/scripts/build.sh +++ b/src/scripts/build.sh @@ -8,11 +8,13 @@ CONTAINER_NAME=${IMAGE_NAME}-container # local paths LOCAL_WORKDIR=$(pwd) LOCAL_BIN_DIR=$LOCAL_WORKDIR/src/bin +LOCAL_ASPECT_CACHE="$HOME/.cache/das/aspect" LOCAL_BAZEL_CACHE="$HOME/.cache/das/bazel" LOCAL_BAZELISK_CACHE="$HOME/.cache/das/bazelisk" LOCAL_PIPTOOLS_CACHE="$HOME/.cache/das/pip-tools" LOCAL_PIP_CACHE="$HOME/.cache/das/pip" mkdir -p \ + $LOCAL_ASPECT_CACHE \ $LOCAL_BAZEL_CACHE \ $LOCAL_BAZELISK_CACHE \ $LOCAL_BIN_DIR \ @@ -23,6 +25,7 @@ mkdir -p \ CONTAINER_WORKDIR=/opt/das CONTAINER_WORKSPACE_DIR=/opt/das/src CONTAINER_BIN_DIR=$CONTAINER_WORKSPACE_DIR/bin +CONTAINER_ASPECT_CACHE=/home/${USER}/.cache/aspect CONTAINER_BAZEL_CACHE=/home/${USER}/.cache/bazel CONTAINER_PIP_CACHE=/home/${USER}/.cache/pip CONTAINER_PIPTOOLS_CACHE=/home/${USER}/.cache/pip-tools @@ -40,6 +43,7 @@ docker run --rm \ --volume /etc/passwd:/etc/passwd:ro \ --volume $LOCAL_PIP_CACHE:$CONTAINER_PIP_CACHE \ --volume $LOCAL_PIPTOOLS_CACHE:$CONTAINER_PIPTOOLS_CACHE \ + --volume $LOCAL_ASPECT_CACHE:$CONTAINER_ASPECT_CACHE \ --volume $LOCAL_BAZEL_CACHE:$CONTAINER_BAZEL_CACHE \ --volume $LOCAL_BAZELISK_CACHE:$CONTAINER_BAZELISK_CACHE \ --volume $LOCAL_WORKDIR:$CONTAINER_WORKDIR \ diff --git a/src/tools/format/BUILD.bazel b/src/tools/format/BUILD.bazel new file mode 100644 index 0000000..08f130f --- /dev/null +++ b/src/tools/format/BUILD.bazel @@ -0,0 +1,13 @@ +load("@aspect_rules_lint//format:defs.bzl", "format_multirun") + + +format_multirun( + name = "format", + # cc = "@llvm_toolchain_llvm//:bin/clang-format", + python = "@aspect_rules_lint//format:ruff", + disable_git_attribute_checks=True, + # starlark = "@buildifier_prebuild//:buildifier" + + # TODO: ADD rules for yaml, markdown, rust, c + visibility = ["//visibility:public"], +) diff --git a/src/tools/lint/BUILD b/src/tools/lint/BUILD new file mode 100644 index 0000000..e69de29 diff --git a/src/tools/lint/linters.bzl b/src/tools/lint/linters.bzl new file mode 100644 index 0000000..2265c8b --- /dev/null +++ b/src/tools/lint/linters.bzl @@ -0,0 +1,12 @@ +load("@aspect_rules_lint//lint:lint_test.bzl", "lint_test") +load("@aspect_rules_lint//lint:ruff.bzl", "lint_ruff_aspect") + +ruff = lint_ruff_aspect( + binary = "@multitool//tools/ruff", + configs = [ + Label("@//:.ruff.toml"), + ], +) + +ruff_test = lint_test(aspect = ruff) + From f36f50c9bcd6abd70e592618d076e51c1d42163d Mon Sep 17 00:00:00 2001 From: Pedro Costa Date: Thu, 20 Feb 2025 14:16:16 +0000 Subject: [PATCH 14/19] feature: lint-all and format-all make instructions --- Makefile | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 80141b8..938f861 100644 --- a/Makefile +++ b/Makefile @@ -53,7 +53,14 @@ bazel: @bash ./src/scripts/bazel.sh $(filter-out $@, $(MAKECMDGOALS)) test-all: build-image - $(MAKE) bazel test //... + @$(MAKE) bazel test //... + +lint-all: + @$(MAKE) bazel lint \ + "//... --define=ATOMDB_VERSION=0.8.11 --define=DAS_VERSION=0.9.0 --define=DAS_NODE_VERSION=0.9.0 --fix" + +format-all: + @$(MAKE) bazel run format # Catch-all pattern to prevent make from complaining about unknown targets %: From db0713e4ce342a66dc2e290ecf121d7b7a062fc4 Mon Sep 17 00:00:00 2001 From: Pedro Costa Date: Thu, 20 Feb 2025 14:16:38 +0000 Subject: [PATCH 15/19] feature: ruff.toml configuration --- src/.ruff.toml | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/.ruff.toml b/src/.ruff.toml index e69de29..ee63492 100644 --- a/src/.ruff.toml +++ b/src/.ruff.toml @@ -0,0 +1,36 @@ +line-length = 100 +indent-width = 4 + +target-version = "py310" + +[lint] + +select = ["E4", "E7", "E9", "F", "B"] +ignore = ["E501", "B905"] +fixable = ["ALL"] +unfixable = ["B"] + + +# Allow unused variables when underscore-prefixed. +dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$" + + +# Ignore `E402` (import violations) in all `__init__.py` files. +[lint.per-file-ignores] +"__init__.py" = ["E402", "F403"] +"**/{tests,docs,tools}/*" = ["B006", "B011", "B017", "B018"] +# Auto generated code +"**/grpc/*.py" = ["ALL"] + +[format] +quote-style = "double" + +indent-style = "space" + +skip-magic-trailing-comma = false + +line-ending = "auto" + +# Enable auto-formatting of code examples in docstrings +docstring-code-format = true +docstring-code-line-length = "dynamic" From c3f7fe7dd366cf21c7f70f928624e40f54e90695 Mon Sep 17 00:00:00 2001 From: Pedro Costa Date: Thu, 20 Feb 2025 14:16:52 +0000 Subject: [PATCH 16/19] fix: remove test cli build target --- src/BUILD | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/BUILD b/src/BUILD index a2afac9..cd8de03 100644 --- a/src/BUILD +++ b/src/BUILD @@ -17,12 +17,6 @@ alias( actual = "//tools/format" ) -py_binary( - name = "cli", - srcs = ["cli.py"], -) - - cc_binary( name = "attention_broker_service", srcs = [], From 5f60002b6b509cf5a1f310b312f509db2ea74115 Mon Sep 17 00:00:00 2001 From: Pedro Costa Date: Thu, 20 Feb 2025 14:17:22 +0000 Subject: [PATCH 17/19] fix: format and lint all python files --- src/hyperon_das/__init__.py | 6 +- .../cache/attention_broker_gateway.py | 12 +- src/hyperon_das/cache/iterators.py | 89 ++-- src/hyperon_das/client.py | 121 ++--- src/hyperon_das/das.py | 122 +++-- src/hyperon_das/decorators.py | 12 +- src/hyperon_das/grpc/attention_broker_pb2.py | 9 +- .../grpc/attention_broker_pb2_grpc.py | 33 +- src/hyperon_das/grpc/common_pb2.py | 29 +- src/hyperon_das/grpc/common_pb2_grpc.py | 1 + src/hyperon_das/link_filters.py | 5 +- src/hyperon_das/logger.py | 6 +- .../query_engines/local_query_engine.py | 49 +- .../query_engines/query_engine_protocol.py | 5 +- .../query_engines/remote_query_engine.py | 47 +- .../tokenizers/dict_query_tokenizer.py | 15 +- src/hyperon_das/tokenizers/elements.py | 4 +- src/hyperon_das/traverse_engines.py | 14 +- src/hyperon_das/utils.py | 26 +- src/hyperon_das_atomdb/__init__.py | 2 +- .../adapters/redis_mongo_db.py | 13 +- .../utils/expression_hasher.py | 2 +- .../doc/DaC/das_link_creation_diagram.py | 75 +-- src/tests/python/helpers.py | 2 +- .../python/integration/adapters/animals_kb.py | 6 +- .../integration/adapters/test_redis_mongo.py | 25 +- src/tests/python/integration/conftest.py | 5 +- src/tests/python/integration/helpers.py | 18 +- .../test_attention_broker_gateway.py | 36 +- src/tests/python/integration/test_client.py | 32 +- .../python/integration/test_das_query_api.py | 14 +- .../python/integration/test_iterators.py | 66 ++- .../python/integration/test_local_das.py | 11 +- .../python/integration/test_remote_das.py | 154 +++--- .../integration/test_traverse_engine.py | 55 ++- .../python/unit/adapters/test_ram_only.py | 28 +- .../unit/adapters/test_redis_mongo_db.py | 265 ++++++++--- .../unit/adapters/test_redis_mongo_extra.py | 17 +- src/tests/python/unit/fixtures.py | 19 +- src/tests/python/unit/helpers.py | 12 +- src/tests/python/unit/mock.py | 206 ++++---- .../unit/test_attention_broker_gateway.py | 4 +- src/tests/python/unit/test_cache.py | 192 ++++---- .../python/unit/test_cache_controller.py | 98 ++-- src/tests/python/unit/test_client.py | 137 +++--- src/tests/python/unit/test_context.py | 6 +- src/tests/python/unit/test_das.py | 129 ++--- .../unit/test_database_private_methods.py | 12 +- .../unit/test_database_public_methods.py | 8 +- src/tests/python/unit/test_decorators.py | 10 +- .../python/unit/test_dict_query_tokenizer.py | 13 +- src/tests/python/unit/test_queries.py | 34 +- src/tests/python/unit/test_traverse_engine.py | 450 +++++++++--------- src/tools/bazel/pytest/main.py | 2 - 54 files changed, 1543 insertions(+), 1220 deletions(-) diff --git a/src/hyperon_das/__init__.py b/src/hyperon_das/__init__.py index 0faf7bd..90569f7 100644 --- a/src/hyperon_das/__init__.py +++ b/src/hyperon_das/__init__.py @@ -1,10 +1,10 @@ import sys if sys.version_info < (3, 10): - raise RuntimeError('hyperon_das requires Python 3.10 or higher') + raise RuntimeError("hyperon_das requires Python 3.10 or higher") from hyperon_das.das import DistributedAtomSpace -__all__ = ['DistributedAtomSpace'] +__all__ = ["DistributedAtomSpace"] -__version__ = '0.9.14' +__version__ = "0.9.14" diff --git a/src/hyperon_das/cache/attention_broker_gateway.py b/src/hyperon_das/cache/attention_broker_gateway.py index 9dc8333..1ad2d5a 100644 --- a/src/hyperon_das/cache/attention_broker_gateway.py +++ b/src/hyperon_das/cache/attention_broker_gateway.py @@ -19,11 +19,11 @@ def __init__(self, system_parameters: Dict[str, Any]): f"Invalid system parameters. server_hostname: '{self.server_hostname}' server_port: {self.server_port}" ) ) - self.server_url = f'{self.server_hostname}:{self.server_port}' + self.server_url = f"{self.server_hostname}:{self.server_port}" self.ping() def ping(self) -> Optional[str]: - logger().info(f'Pinging AttentionBroker at {self.server_url}') + logger().info(f"Pinging AttentionBroker at {self.server_url}") with grpc.insecure_channel(self.server_url) as channel: stub = AttentionBrokerStub(channel) response = stub.ping(grpc_types.Empty()) @@ -33,9 +33,9 @@ def ping(self) -> Optional[str]: def stimulate(self, handle_count: Set[str]) -> Optional[str]: if handle_count is None: - das_error(ValueError(f'Invalid handle_count {handle_count}')) + das_error(ValueError(f"Invalid handle_count {handle_count}")) logger().info( - f'Requesting AttentionBroker at {self.server_url} to stimulate {len(handle_count)} atoms' + f"Requesting AttentionBroker at {self.server_url} to stimulate {len(handle_count)} atoms" ) message = grpc_types.HandleCount(handle_count=handle_count) with grpc.insecure_channel(self.server_url) as channel: @@ -47,9 +47,9 @@ def stimulate(self, handle_count: Set[str]) -> Optional[str]: def correlate(self, handle_set: Set[str]) -> Optional[str]: if handle_set is None: - das_error(ValueError(f'Invalid handle_set {handle_set}')) + das_error(ValueError(f"Invalid handle_set {handle_set}")) logger().info( - f'Requesting AttentionBroker at {self.server_url} to correlate {len(handle_set)} atoms' + f"Requesting AttentionBroker at {self.server_url} to correlate {len(handle_set)} atoms" ) message = grpc_types.HandleList(handle_list=handle_set) sleep(0.05) diff --git a/src/hyperon_das/cache/iterators.py b/src/hyperon_das/cache/iterators.py index 7ca29d3..df28283 100644 --- a/src/hyperon_das/cache/iterators.py +++ b/src/hyperon_das/cache/iterators.py @@ -89,7 +89,10 @@ def __next__(self): class LazyQueryEvaluator(ProductIterator): def __init__( - self, link_type: str, source: List[QueryAnswerIterator], query_engine: QueryEngine + self, + link_type: str, + source: List[QueryAnswerIterator], + query_engine: QueryEngine, ): super().__init__(source) self.link_type = link_type @@ -161,10 +164,10 @@ class BaseLinksIterator(QueryAnswerIterator, ABC): def __init__(self, source: ListIterator, **kwargs) -> None: super().__init__(source) if not self.source.is_empty(): - if not hasattr(self, 'backend'): - self.backend = kwargs.get('backend') - self.chunk_size = kwargs.get('chunk_size', 1000) - self.cursor = kwargs.get('cursor', 0) + if not hasattr(self, "backend"): + self.backend = kwargs.get("backend") + self.chunk_size = kwargs.get("chunk_size", 1000) + self.cursor = kwargs.get("cursor", 0) self.buffer_queue = deque() self.iterator = self.source self.current_value = self.get_current_value() @@ -236,8 +239,8 @@ def get_fetch_data(self, **kwargs) -> tuple: class LocalIncomingLinks(BaseLinksIterator): def __init__(self, source: ListIterator, **kwargs) -> None: - self.atom_handle = kwargs.get('atom_handle') - self.targets_document = kwargs.get('targets_document', False) + self.atom_handle = kwargs.get("atom_handle") + self.targets_document = kwargs.get("targets_document", False) super().__init__(source, **kwargs) def get_next_value(self) -> Any: @@ -259,7 +262,11 @@ def get_current_value(self) -> Any: return None def get_fetch_data_kwargs(self) -> Dict[str, Any]: - return {'handles_only': True, 'cursor': self.cursor, 'chunk_size': self.chunk_size} + return { + "handles_only": True, + "cursor": self.cursor, + "chunk_size": self.chunk_size, + } def get_fetch_data(self, **kwargs) -> tuple: if self.backend: @@ -268,8 +275,8 @@ def get_fetch_data(self, **kwargs) -> tuple: class RemoteIncomingLinks(BaseLinksIterator): def __init__(self, source: ListIterator, **kwargs) -> None: - self.atom_handle = kwargs.get('atom_handle') - self.targets_document = kwargs.get('targets_document', False) + self.atom_handle = kwargs.get("atom_handle") + self.targets_document = kwargs.get("targets_document", False) self.returned_handles = set() super().__init__(source, **kwargs) @@ -278,9 +285,9 @@ def get_next_value(self) -> Any: while True: link_document = next(self.iterator) if isinstance(link_document, tuple) or isinstance(link_document, list): - handle = link_document[0]['handle'] + handle = link_document[0]["handle"] elif isinstance(link_document, dict): - handle = link_document['handle'] + handle = link_document["handle"] elif isinstance(link_document, str): handle = link_document else: @@ -299,9 +306,9 @@ def get_current_value(self) -> Any: def get_fetch_data_kwargs(self) -> Dict[str, Any]: return { - 'cursor': self.cursor, - 'chunk_size': self.chunk_size, - 'targets_document': self.targets_document, + "cursor": self.cursor, + "chunk_size": self.chunk_size, + "targets_document": self.targets_document, } def get_fetch_data(self, **kwargs) -> tuple: @@ -311,9 +318,9 @@ def get_fetch_data(self, **kwargs) -> tuple: class CustomQuery(BaseLinksIterator): def __init__(self, source: ListIterator, **kwargs) -> None: - self.index_id = kwargs.pop('index_id', None) - self.backend = kwargs.pop('backend', None) - self.is_remote = kwargs.pop('is_remote', False) + self.index_id = kwargs.pop("index_id", None) + self.backend = kwargs.pop("backend", None) + self.is_remote = kwargs.pop("is_remote", False) self.kwargs = kwargs super().__init__(source, **kwargs) @@ -330,18 +337,18 @@ def get_current_value(self) -> Any: def get_fetch_data_kwargs(self) -> Dict[str, Any]: kwargs = self.kwargs - kwargs.update({'cursor': self.cursor, 'chunk_size': self.chunk_size}) + kwargs.update({"cursor": self.cursor, "chunk_size": self.chunk_size}) return kwargs def get_fetch_data(self, **kwargs) -> tuple: if self.backend: if self.is_remote: return self.backend.custom_query( - self.index_id, query=kwargs.get('query', []), **kwargs + self.index_id, query=kwargs.get("query", []), **kwargs ) else: return self.backend.get_atoms_by_index( - self.index_id, query=kwargs.get('query', []), **kwargs + self.index_id, query=kwargs.get("query", []), **kwargs ) @@ -350,13 +357,13 @@ def __init__( self, source: LocalIncomingLinks | RemoteIncomingLinks | Iterator, **kwargs ) -> None: super().__init__(source) - self.cursor = kwargs.get('cursor') - self.targets_only = kwargs.get('targets_only', False) + self.cursor = kwargs.get("cursor") + self.targets_only = kwargs.get("targets_only", False) self.buffer = None - self.link_type = kwargs.get('link_type') - self.cursor_position = kwargs.get('cursor_position') - self.target_type = kwargs.get('target_type') - self.custom_filter = kwargs.get('filter') + self.link_type = kwargs.get("link_type") + self.cursor_position = kwargs.get("cursor_position") + self.target_type = kwargs.get("target_type") + self.custom_filter = kwargs.get("filter") if not self.source.is_empty(): self.iterator = self.source self.current_value = self._find_first_valid_element() @@ -371,7 +378,7 @@ def __next__(self): if isinstance(link, tuple): link, targets = link elif isinstance(link, dict): - targets = link.pop('targets_document', []) + targets = link.pop("targets_document", []) else: raise ValueError(f"Invalid link document: {link}") if ( @@ -390,20 +397,20 @@ def _find_first_valid_element(self): if isinstance(link, tuple): link, targets = link elif isinstance(link, dict): - targets = link.get('targets_document', []) + targets = link.get("targets_document", []) else: raise ValueError(f"Invalid link document: {link}") if self._filter(link, targets): return targets if self.targets_only else link def _filter(self, link: Dict[str, Any], targets: list[dict[str, Any]]) -> bool: - if self.link_type and self.link_type != link['named_type']: + if self.link_type and self.link_type != link["named_type"]: return False try: if ( self.cursor_position is not None - and self.cursor != link['targets'][self.cursor_position] + and self.cursor != link["targets"][self.cursor_position] ): return False except IndexError: @@ -412,12 +419,12 @@ def _filter(self, link: Dict[str, Any], targets: list[dict[str, Any]]) -> bool: raise e if self.target_type: - if not any(target['named_type'] == self.target_type for target in targets): + if not any(target["named_type"] == self.target_type for target in targets): return False if self.custom_filter: deep_link = link.copy() - deep_link['targets'] = targets + deep_link["targets"] = targets if self._apply_custom_filter(deep_link) is False: return False @@ -426,15 +433,15 @@ def _filter(self, link: Dict[str, Any], targets: list[dict[str, Any]]) -> bool: def _apply_custom_filter(self, atom: Dict[str, Any], F=None) -> bool: custom_filter = F if F else self.custom_filter - assert callable( - custom_filter - ), "The custom_filter must be a function with this signature 'def func(atom: dict) -> bool: ...'" + assert callable(custom_filter), ( + "The custom_filter must be a function with this signature 'def func(atom: dict) -> bool: ...'" + ) try: if not custom_filter(atom): return False except Exception as e: - raise Exception(f"Error while applying the custom filter: {e}") + raise Exception(f"Error while applying the custom filter: {e}") from e def is_empty(self) -> bool: return not self.current_value @@ -447,7 +454,7 @@ def __init__(self, source: TraverseLinksIterator, **kwargs) -> None: self.cursor = self.source.cursor self.target_type = self.source.target_type self.visited_neighbors = [] - self.custom_filter = kwargs.get('filter') + self.custom_filter = kwargs.get("filter") if not self.source.is_empty(): self.iterator = source self.current_value = self._find_first_valid_element() @@ -480,16 +487,16 @@ def _process_targets(self, targets: list) -> tuple: for target in targets: if self._filter(target): match_found = True - self.visited_neighbors.append(target['handle']) + self.visited_neighbors.append(target["handle"]) answer.append(target) return (answer, match_found) def _filter(self, target: Dict[str, Any]) -> bool: - handle = target['handle'] + handle = target["handle"] if not ( self.cursor != handle and handle not in self.visited_neighbors - and (self.target_type == target['named_type'] or not self.target_type) + and (self.target_type == target["named_type"] or not self.target_type) ): return False diff --git a/src/hyperon_das/client.py b/src/hyperon_das/client.py index 58f3347..514c8c5 100644 --- a/src/hyperon_das/client.py +++ b/src/hyperon_das/client.py @@ -22,23 +22,23 @@ class FunctionsClient: def __init__(self, host: str, port: int, name: Optional[str] = None) -> None: if not host and not port: das_error(ValueError("'host' and 'port' are mandatory parameters")) - self.name = name if name else f'client_{host}:{port}' + self.name = name if name else f"client_{host}:{port}" self.status_code, self.url = connect_to_server(host, port) def _send_request(self, payload) -> Any: try: - if payload.get('input'): - normalized_input = {k: v for k, v in payload['input'].items() if v is not None} - payload['input'] = normalized_input + if payload.get("input"): + normalized_input = {k: v for k, v in payload["input"].items() if v is not None} + payload["input"] = normalized_input payload_serialized = serialize(payload) with sessions.Session() as session: response = session.request( - method='POST', + method="POST", url=self.url, data=payload_serialized, - headers={'Content-Type': 'application/octet-stream'}, + headers={"Content-Type": "application/octet-stream"}, ) response.raise_for_status() @@ -52,7 +52,7 @@ def _send_request(self, payload) -> Any: return response_data else: return response_data.get( - 'error', f'Unknown error with status code {response.status_code}' + "error", f"Unknown error with status code {response.status_code}" ) except exceptions.ConnectionError as e: das_error( @@ -88,20 +88,20 @@ def _send_request(self, payload) -> Any: def get_atom(self, handle: str, **kwargs) -> Union[str, Dict]: payload = { - 'action': 'get_atom', - 'input': {'handle': handle}, + "action": "get_atom", + "input": {"handle": handle}, } try: return self._send_request(payload) except HTTPError as e: if e.status_code == 404: - raise AtomDoesNotExist('Nonexistent atom') + raise AtomDoesNotExist("Nonexistent atom") from e else: raise e def get_links(self, link_filter: LinkFilter) -> Union[List[str], List[Dict]]: payload = { - 'action': 'get_links', + "action": "get_links", "input": { "link_filter": { "filter_type": link_filter.filter_type, @@ -116,9 +116,9 @@ def get_links(self, link_filter: LinkFilter) -> Union[List[str], List[Dict]]: return self._send_request(payload) except HTTPError as e: if e.status_code == 404: - raise AtomDoesNotExist('Nonexistent atom') + raise AtomDoesNotExist("Nonexistent atom") from e elif e.status_code == 400: - raise ValueError(str(e)) + raise ValueError(str(e)) from e else: raise e @@ -129,8 +129,8 @@ def query( ) -> List[AtomT]: try: payload = { - 'action': 'query', - 'input': {'query': query, 'parameters': parameters}, + "action": "query", + "input": {"query": query, "parameters": parameters}, } return self._send_request(payload) except HTTPError as e: @@ -139,40 +139,42 @@ def query( "Your query couldn't be processed due to an invalid format. Review the way the query " "is written and try again.", str(e), - ) + ) from e elif e.status_code == 404: - raise Exception("Your query couldn't be processed because Atom nonexistent", str(e)) + raise Exception( + "Your query couldn't be processed because Atom nonexistent", str(e) + ) from e raise e def count_atoms(self, parameters: Optional[Dict[str, Any]] = None) -> Dict[str, int]: payload = { - 'action': 'count_atoms', - 'input': {'parameters': parameters}, + "action": "count_atoms", + "input": {"parameters": parameters}, } return self._send_request(payload) def commit_changes(self, **kwargs) -> Tuple[int, int]: payload = { - 'action': 'commit_changes', - 'input': {'kwargs': kwargs}, + "action": "commit_changes", + "input": {"kwargs": kwargs}, } try: return self._send_request(payload) except HTTPError as e: if e.status_code == 403: - raise ValueError(str(e)) + raise ValueError(str(e)) from e else: raise e def get_incoming_links(self, atom_handle: str, **kwargs) -> IncomingLinksT | Iterator: payload = { - 'action': 'get_incoming_links', - 'input': {'atom_handle': atom_handle, 'kwargs': kwargs}, + "action": "get_incoming_links", + "input": {"atom_handle": atom_handle, "kwargs": kwargs}, } try: return self._send_request(payload) except HTTPError as e: - logger().debug(f'Error during `get_incoming_links` request on remote Das: {str(e)}') + logger().debug(f"Error during `get_incoming_links` request on remote Das: {str(e)}") return [] def create_field_index( @@ -184,30 +186,30 @@ def create_field_index( index_type: Optional[str] = None, ) -> str: payload = { - 'action': 'create_field_index', - 'input': { - 'atom_type': atom_type, - 'fields': fields, - 'named_type': named_type, - 'composite_type': composite_type, - 'index_type': index_type, + "action": "create_field_index", + "input": { + "atom_type": atom_type, + "fields": fields, + "named_type": named_type, + "composite_type": composite_type, + "index_type": index_type, }, } try: return self._send_request(payload) except HTTPError as e: if e.status_code == 400: - raise ValueError(str(e)) + raise ValueError(str(e)) from e else: raise e def custom_query(self, index_id: str, query: Query, **kwargs) -> List[AtomT]: payload = { - 'action': 'custom_query', - 'input': { - 'index_id': index_id, - 'query': {v['field']: v['value'] for v in query}, - 'kwargs': kwargs, + "action": "custom_query", + "input": { + "index_id": index_id, + "query": {v["field"]: v["value"] for v in query}, + "kwargs": kwargs, }, } try: @@ -223,8 +225,8 @@ def fetch( **kwargs, ) -> Any: payload = { - 'action': 'fetch', - 'input': {'query': query, 'host': host, 'port': port, 'kwargs': kwargs}, + "action": "fetch", + "input": {"query": query, "host": host, "port": port, "kwargs": kwargs}, } try: return self._send_request(payload) @@ -233,59 +235,66 @@ def fetch( def create_context(self, name: str, queries: Optional[List[Query]]) -> Any: payload = { - 'action': 'create_context', - 'input': {'name': name, 'queries': queries}, + "action": "create_context", + "input": {"name": name, "queries": queries}, } try: return self._send_request(payload) except HTTPError as e: if e.status_code == 404: - raise AtomDoesNotExist('nonexistent atom') + raise AtomDoesNotExist("nonexistent atom") from e elif e.status_code == 400: - raise ValueError(str(e)) + raise ValueError(str(e)) from e else: raise e def get_atoms_by_field(self, query: Query) -> List[str]: payload = { - 'action': 'get_atoms_by_field', - 'input': {'query': {v['field']: v['value'] for v in query}}, + "action": "get_atoms_by_field", + "input": {"query": {v["field"]: v["value"] for v in query}}, } try: return self._send_request(payload) except HTTPError as e: if e.status_code == 400: - raise ValueError(str(e)) + raise ValueError(str(e)) from e else: raise e def get_atoms_by_text_field( - self, text_value: str, field: Optional[str] = None, text_index_id: Optional[str] = None + self, + text_value: str, + field: Optional[str] = None, + text_index_id: Optional[str] = None, ) -> List[str]: payload = { - 'action': 'get_atoms_by_text_field', - 'input': {'text_value': text_value, 'field': field, 'text_index_id': text_index_id}, + "action": "get_atoms_by_text_field", + "input": { + "text_value": text_value, + "field": field, + "text_index_id": text_index_id, + }, } try: return self._send_request(payload) except HTTPError as e: if e.status_code == 400: - raise ValueError(str(e)) + raise ValueError(str(e)) from e else: raise e def get_node_by_name_starting_with(self, node_type: str, startswith: str) -> List[str]: payload = { - 'action': 'get_node_by_name_starting_with', - 'input': { - 'node_type': node_type, - 'startswith': startswith, + "action": "get_node_by_name_starting_with", + "input": { + "node_type": node_type, + "startswith": startswith, }, } try: return self._send_request(payload) except HTTPError as e: if e.status_code == 400: - raise ValueError(str(e)) + raise ValueError(str(e)) from e else: raise e diff --git a/src/hyperon_das/das.py b/src/hyperon_das/das.py index 2e3b025..15fdb22 100644 --- a/src/hyperon_das/das.py +++ b/src/hyperon_das/das.py @@ -33,7 +33,7 @@ class DistributedAtomSpace: backend: AtomDB - def __init__(self, system_parameters: Dict[str, Any] = {}, **kwargs) -> None: + def __init__(self, system_parameters: Dict[str, Any], **kwargs) -> None: """ Creates a new DAS object. A DAS client can run locally or locally and remote, connecting to remote DAS instances to query remote atoms. If there are different @@ -82,9 +82,11 @@ def __init__(self, system_parameters: Dict[str, Any] = {}, **kwargs) -> None: mode. Defaults to True. redis_ssl (bool, optional): Set Redis to encrypt the connection. Defaults to True. """ + if not system_parameters: + system_parameters = {} self.system_parameters = system_parameters - self.atomdb = kwargs.get('atomdb', 'ram') - self.query_engine_type = kwargs.get('query_engine', 'local') + self.atomdb = kwargs.get("atomdb", "ram") + self.query_engine_type = kwargs.get("query_engine", "local") self._set_default_system_parameters() self._set_backend(**kwargs) self.cache_controller = CacheController(self.system_parameters) @@ -92,15 +94,15 @@ def __init__(self, system_parameters: Dict[str, Any] = {}, **kwargs) -> None: def _set_default_system_parameters(self) -> None: # Internals - if not self.system_parameters.get('running_on_server'): - self.system_parameters['running_on_server'] = False + if not self.system_parameters.get("running_on_server"): + self.system_parameters["running_on_server"] = False # Attention Broker - if not self.system_parameters.get('cache_enabled'): - self.system_parameters['cache_enabled'] = False - if not self.system_parameters.get('attention_broker_hostname'): - self.system_parameters['attention_broker_hostname'] = 'localhost' - if not self.system_parameters.get('attention_broker_port'): - self.system_parameters['attention_broker_port'] = 27000 + if not self.system_parameters.get("cache_enabled"): + self.system_parameters["cache_enabled"] = False + if not self.system_parameters.get("attention_broker_hostname"): + self.system_parameters["attention_broker_hostname"] = "localhost" + if not self.system_parameters.get("attention_broker_port"): + self.system_parameters["attention_broker_port"] = 27000 def _set_backend(self, **kwargs) -> None: if self.atomdb == "ram": @@ -115,7 +117,7 @@ def _set_backend(self, **kwargs) -> None: raise InvalidAtomDB("Invalid AtomDB type. Choose either 'ram' or 'redis_mongo'") def _set_query_engine(self, **kwargs) -> None: - if self.query_engine_type == 'local': + if self.query_engine_type == "local": das_type = DasType.LOCAL_RAM_ONLY if self.atomdb == "ram" else DasType.LOCAL_REDIS_MONGO self._start_query_engine(LocalQueryEngine, das_type, **kwargs) elif self.query_engine_type == "remote": @@ -141,10 +143,12 @@ def _start_query_engine( def _create_context( self, name: str, - queries: List[Query] = [], + queries: List[Query], ) -> Context: + if not queries: + queries = [] context_node = self.add_node(NodeT(type=Context.CONTEXT_NODE_TYPE, name=name)) - query_answer = [self.query(query, {'no_iterator': True}) for query in queries] + query_answer = [self.query(query, {"no_iterator": True}) for query in queries] context = Context(context_node, query_answer) self.cache_controller.add_context(context) return context @@ -152,15 +156,15 @@ def _create_context( @staticmethod def about() -> dict: return { - 'das': { - 'name': 'hyperon-das', - 'version': get_package_version('hyperon_das'), - 'summary': 'Query Engine API for Distributed AtomSpace', + "das": { + "name": "hyperon-das", + "version": get_package_version("hyperon_das"), + "summary": "Query Engine API for Distributed AtomSpace", }, - 'atom_db': { - 'name': 'hyperon-das-atomdb', - 'version': get_package_version('hyperon_das_atomdb'), - 'summary': 'Persistence layer for Distributed AtomSpace', + "atom_db": { + "name": "hyperon-das-atomdb", + "version": get_package_version("hyperon_das_atomdb"), + "summary": "Persistence layer for Distributed AtomSpace", }, } @@ -184,7 +188,7 @@ def compute_node_handle(node_type: str, node_name: str) -> str: Examples: >>> das = DistributedAtomSpace() - >>> result = das.compute_node_handle(node_type='Concept', node_name='human') + >>> result = das.compute_node_handle(node_type="Concept", node_name="human") >>> print(result) "af12f10f9ae2002a1607ba0b47ba8407" """ @@ -210,9 +214,11 @@ def compute_link_handle(link_type: str, link_targets: HandleListT) -> str: Examples: >>> das = DistributedAtomSpace() - >>> human_handle = das.compute_node_handle(node_type='Concept', node_name='human') - >>> monkey_handle = das.compute_node_handle(node_type='Concept', node_name='monkey') - >>> result = das.compute_link_handle(link_type='Similarity', targets=[human_handle, monkey_handle]) + >>> human_handle = das.compute_node_handle(node_type="Concept", node_name="human") + >>> monkey_handle = das.compute_node_handle(node_type="Concept", node_name="monkey") + >>> result = das.compute_link_handle( + ... link_type="Similarity", targets=[human_handle, monkey_handle] + ... ) >>> print(result) "bad7472f41a0e7d601ca294eb4607c3a" @@ -237,7 +243,7 @@ def get_atom(self, handle: HandleT) -> AtomT: Examples: >>> das = DistributedAtomSpace() - >>> human_handle = das.compute_node_handle(node_type='Concept', node_name='human') + >>> human_handle = das.compute_node_handle(node_type="Concept", node_name="human") >>> node = das.get_atom(human_handle) >>> print(node) Node(_id: 'af12f10f9ae2002a1607ba0b47ba8407', handle: 'af12f10f9ae2002a1607ba0b47ba8407', @@ -272,8 +278,8 @@ def get_atoms(self, handles: HandleListT) -> list[AtomT]: Examples: >>> das = DistributedAtomSpace() - >>> human_handle = das.compute_node_handle(node_type='Concept', node_name='human') - >>> animal_handle = das.compute_node_handle(node_type='Concept', node_name='monkey') + >>> human_handle = das.compute_node_handle(node_type="Concept", node_name="human") + >>> animal_handle = das.compute_node_handle(node_type="Concept", node_name="monkey") >>> result = das.get_atoms([human_handle, animal_handle]) >>> print(result[0]) Node(_id: 'af12f10f9ae2002a1607ba0b47ba8407', handle: 'af12f10f9ae2002a1607ba0b47ba8407', @@ -302,7 +308,7 @@ def get_node(self, node_type: str, node_name: str) -> NodeT: Examples: >>> das = DistributedAtomSpace() - >>> node = das.get_node(node_type='Concept', node_name='human') + >>> node = das.get_node(node_type="Concept", node_name="human") >>> print(node) Node(_id: 'af12f10f9ae2002a1607ba0b47ba8407', handle: 'af12f10f9ae2002a1607ba0b47ba8407', composite_type_hash: 'd99a604c79ce3c2e76a2f43488d5d4c3', named_type: 'Concept', @@ -332,8 +338,8 @@ def get_link(self, link_type: str, link_targets: HandleListT) -> LinkT: Examples: >>> das = DistributedAtomSpace() - >>> human_handle = das.compute_node_handle('Concept', 'human') - >>> monkey_handle = das.compute_node_handle('Concept', 'monkey') + >>> human_handle = das.compute_node_handle("Concept", "human") + >>> monkey_handle = das.compute_node_handle("Concept", "monkey") >>> result = das.get_link( link_type='Similarity', link_targets=[human_handle, monkey_handle], @@ -391,7 +397,7 @@ def get_incoming_links(self, atom_handle: HandleT, **kwargs) -> IncomingLinksT: Examples: >>> das = DistributedAtomSpace() - >>> rhino = das.compute_node_handle('Concept', 'rhino') + >>> rhino = das.compute_node_handle("Concept", "rhino") >>> links = das.get_incoming_links(rhino) >>> for link in links: >>> print(link.type, link.targets) @@ -401,7 +407,7 @@ def get_incoming_links(self, atom_handle: HandleT, **kwargs) -> IncomingLinksT: """ return self.query_engine.get_incoming_links(atom_handle, **kwargs) - def count_atoms(self, parameters: Dict[str, Any] = {}) -> Dict[str, int]: + def count_atoms(self, parameters: Dict[str, Any]) -> Dict[str, int]: """ Count atoms, nodes and links in DAS. @@ -422,12 +428,14 @@ def count_atoms(self, parameters: Dict[str, Any] = {}) -> Dict[str, int]: Returns: Dict[str, int]: Dict containing the keys 'node_count', 'atom_count', 'link_count'. """ + if not parameters: + parameters = {} return self.query_engine.count_atoms(parameters) def query( self, query: Query, - parameters: Dict[str, Any] = {}, + parameters: Dict[str, Any], ) -> Union[Iterator[QueryAnswer], List[QueryAnswer]]: """ Perform a query on the knowledge base using a dict as input and return an @@ -522,6 +530,8 @@ def query( } ] """ + if not parameters: + parameters = {} return self.query_engine.query(query, parameters) def custom_query(self, index_id: str, query: Query, **kwargs) -> Union[Iterator, List[AtomT]]: @@ -553,14 +563,14 @@ def custom_query(self, index_id: str, query: Query, **kwargs) -> Union[Iterator, Iterator | List[AtomT]: An iterator or a list of Atom instances (Nodes or Links). Examples: - >>> das.custom_query(index_id='index_123', query={'tag': 'DAS'}) - >>> das.custom_query(index_id='index_123', query={'tag': 'DAS'}, no_iterator=True) + >>> das.custom_query(index_id="index_123", query={"tag": "DAS"}) + >>> das.custom_query(index_id="index_123", query={"tag": "DAS"}, no_iterator=True) """ if isinstance(self.query_engine, LocalQueryEngine) and isinstance(self.backend, InMemoryDB): raise NotImplementedError("custom_query() is not implemented for Local DAS in RAM only") return self.query_engine.custom_query( - index_id, [{'field': k, 'value': v} for k, v in query.items()], **kwargs + index_id, [{"field": k, "value": v} for k, v in query.items()], **kwargs ) def get_atoms_by_field(self, query: Query) -> HandleListT: @@ -578,11 +588,14 @@ def get_atoms_by_field(self, query: Query) -> HandleListT: """ return self.query_engine.get_atoms_by_field( - [{'field': k, 'value': v} for k, v in query.items()] + [{"field": k, "value": v} for k, v in query.items()] ) def get_atoms_by_text_field( - self, text_value: str, field: Optional[str] = None, text_index_id: Optional[str] = None + self, + text_value: str, + field: Optional[str] = None, + text_index_id: Optional[str] = None, ) -> HandleListT: """ Performs a text search, if a text index is previously created performance a token index search, @@ -788,7 +801,7 @@ def clear(self) -> None: Delete all atoms and custom indexes. """ self.backend.clear_database() - logger().debug('The database has been cleaned.') + logger().debug("The database has been cleaned.") def get_traversal_cursor(self, handle: str, **kwargs) -> TraverseEngine: """ @@ -814,8 +827,10 @@ def get_traversal_cursor(self, handle: str, **kwargs) -> TraverseEngine: """ try: return TraverseEngine(handle, das=self, **kwargs) - except AtomDoesNotExist: - raise GetTraversalCursorException(message="Cannot start Traversal. Atom does not exist") + except AtomDoesNotExist as e: + raise GetTraversalCursorException( + message="Cannot start Traversal. Atom does not exist" + ) from e def create_field_index( self, @@ -853,8 +868,17 @@ def create_field_index( newly created index. Examples: - >>> index_id = das.create_field_index('link', ['tag'], type='Expression') - >>> index_id = das.create_field_index('link', ['tag'], composite_type=['Expression', 'Symbol', 'Symbol', ['Expression', 'Symbol', 'Symbol', 'Symbol']]) + >>> index_id = das.create_field_index("link", ["tag"], type="Expression") + >>> index_id = das.create_field_index( + ... "link", + ... ["tag"], + ... composite_type=[ + ... "Expression", + ... "Symbol", + ... "Symbol", + ... ["Expression", "Symbol", "Symbol", "Symbol"], + ... ], + ... ) """ if named_type and composite_type: raise ValueError("'type' and 'composite_type' can't be specified simultaneously") @@ -924,7 +948,7 @@ def fetch( das.fetch(query, host='123.4.5.6', port=8080) """ - if not self.system_parameters.get('running_on_server'): + if not self.system_parameters.get("running_on_server"): if self._das_type != DasType.REMOTE and (not host or not port): raise ValueError("'host' and 'port' are mandatory parameters to local DAS") @@ -935,9 +959,11 @@ def fetch( def create_context( self, name: str, - queries: List[Query] = [], + queries: List[Query], ) -> Context: - if self.query_engine_type == 'local': + if not queries: + queries = [] + if self.query_engine_type == "local": return self._create_context(name, queries) else: return self.query_engine.create_context(name, queries) diff --git a/src/hyperon_das/decorators.py b/src/hyperon_das/decorators.py index ec74a8e..9a2e7d4 100644 --- a/src/hyperon_das/decorators.py +++ b/src/hyperon_das/decorators.py @@ -22,24 +22,24 @@ def wrapper(*args, **kwargs): end_time = time.time() if status == HTTPStatus.OK: logger().debug( - f'{retry_count + 1} successful connection attempt at [host={args[1]}]' + f"{retry_count + 1} successful connection attempt at [host={args[1]}]" ) return status, response except Exception as e: raise RetryConnectionError( message="An error occurs while connecting to the server", details=str(e), - ) + ) from e else: - logger().debug(f'{retry_count + 1} unsuccessful connection attempt') + logger().debug(f"{retry_count + 1} unsuccessful connection attempt") time.sleep(waiting_time_seconds) retry_count += 1 timer_count += end_time - start_time - port = f':{args[1]}' if len(args) > 1 else '' + port = f":{args[1]}" if len(args) > 1 else "" message = ( - f'Failed to connect to remote Das {args[0]}' + f"Failed to connect to remote Das {args[0]}" + port - + f' - attempts:{retry_count} - time_attempted: {timer_count}' + + f" - attempts:{retry_count} - time_attempted: {timer_count}" ) logger().info(message) raise RetryConnectionError(message) diff --git a/src/hyperon_das/grpc/attention_broker_pb2.py b/src/hyperon_das/grpc/attention_broker_pb2.py index 3c93d32..0c98e26 100644 --- a/src/hyperon_das/grpc/attention_broker_pb2.py +++ b/src/hyperon_das/grpc/attention_broker_pb2.py @@ -3,6 +3,7 @@ # source: attention_broker.proto # Protobuf Python Version: 4.25.1 """Generated protocol buffer code.""" + from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool from google.protobuf import symbol_database as _symbol_database @@ -16,14 +17,14 @@ import hyperon_das.grpc.common_pb2 as common__pb2 DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile( - b'\n\x16\x61ttention_broker.proto\x12\x03\x64\x61s\x1a\x0c\x63ommon.proto2\x86\x01\n\x0f\x41ttentionBroker\x12\x1e\n\x04ping\x12\n.das.Empty\x1a\x08.das.Ack\"\x00\x12)\n\tstimulate\x12\x10.das.HandleCount\x1a\x08.das.Ack\"\x00\x12(\n\tcorrelate\x12\x0f.das.HandleList\x1a\x08.das.Ack\"\x00\x62\x06proto3' + b'\n\x16\x61ttention_broker.proto\x12\x03\x64\x61s\x1a\x0c\x63ommon.proto2\x86\x01\n\x0f\x41ttentionBroker\x12\x1e\n\x04ping\x12\n.das.Empty\x1a\x08.das.Ack"\x00\x12)\n\tstimulate\x12\x10.das.HandleCount\x1a\x08.das.Ack"\x00\x12(\n\tcorrelate\x12\x0f.das.HandleList\x1a\x08.das.Ack"\x00\x62\x06proto3' ) _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'attention_broker_pb2', _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "attention_broker_pb2", _globals) if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None - _globals['_ATTENTIONBROKER']._serialized_start = 46 - _globals['_ATTENTIONBROKER']._serialized_end = 180 + _globals["_ATTENTIONBROKER"]._serialized_start = 46 + _globals["_ATTENTIONBROKER"]._serialized_end = 180 # @@protoc_insertion_point(module_scope) diff --git a/src/hyperon_das/grpc/attention_broker_pb2_grpc.py b/src/hyperon_das/grpc/attention_broker_pb2_grpc.py index c425cb9..27a7a49 100644 --- a/src/hyperon_das/grpc/attention_broker_pb2_grpc.py +++ b/src/hyperon_das/grpc/attention_broker_pb2_grpc.py @@ -1,5 +1,6 @@ # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! """Client and server classes corresponding to protobuf-defined services.""" + import grpc import hyperon_das.grpc.common_pb2 as common__pb2 @@ -15,17 +16,17 @@ def __init__(self, channel): channel: A grpc.Channel. """ self.ping = channel.unary_unary( - '/das.AttentionBroker/ping', + "/das.AttentionBroker/ping", request_serializer=common__pb2.Empty.SerializeToString, response_deserializer=common__pb2.Ack.FromString, ) self.stimulate = channel.unary_unary( - '/das.AttentionBroker/stimulate', + "/das.AttentionBroker/stimulate", request_serializer=common__pb2.HandleCount.SerializeToString, response_deserializer=common__pb2.Ack.FromString, ) self.correlate = channel.unary_unary( - '/das.AttentionBroker/correlate', + "/das.AttentionBroker/correlate", request_serializer=common__pb2.HandleList.SerializeToString, response_deserializer=common__pb2.Ack.FromString, ) @@ -37,42 +38,42 @@ class AttentionBrokerServicer(object): def ping(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') + context.set_details("Method not implemented!") + raise NotImplementedError("Method not implemented!") def stimulate(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') + context.set_details("Method not implemented!") + raise NotImplementedError("Method not implemented!") def correlate(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') + context.set_details("Method not implemented!") + raise NotImplementedError("Method not implemented!") def add_AttentionBrokerServicer_to_server(servicer, server): rpc_method_handlers = { - 'ping': grpc.unary_unary_rpc_method_handler( + "ping": grpc.unary_unary_rpc_method_handler( servicer.ping, request_deserializer=common__pb2.Empty.FromString, response_serializer=common__pb2.Ack.SerializeToString, ), - 'stimulate': grpc.unary_unary_rpc_method_handler( + "stimulate": grpc.unary_unary_rpc_method_handler( servicer.stimulate, request_deserializer=common__pb2.HandleCount.FromString, response_serializer=common__pb2.Ack.SerializeToString, ), - 'correlate': grpc.unary_unary_rpc_method_handler( + "correlate": grpc.unary_unary_rpc_method_handler( servicer.correlate, request_deserializer=common__pb2.HandleList.FromString, response_serializer=common__pb2.Ack.SerializeToString, ), } generic_handler = grpc.method_handlers_generic_handler( - 'das.AttentionBroker', rpc_method_handlers + "das.AttentionBroker", rpc_method_handlers ) server.add_generic_rpc_handlers((generic_handler,)) @@ -97,7 +98,7 @@ def ping( return grpc.experimental.unary_unary( request, target, - '/das.AttentionBroker/ping', + "/das.AttentionBroker/ping", common__pb2.Empty.SerializeToString, common__pb2.Ack.FromString, options, @@ -126,7 +127,7 @@ def stimulate( return grpc.experimental.unary_unary( request, target, - '/das.AttentionBroker/stimulate', + "/das.AttentionBroker/stimulate", common__pb2.HandleCount.SerializeToString, common__pb2.Ack.FromString, options, @@ -155,7 +156,7 @@ def correlate( return grpc.experimental.unary_unary( request, target, - '/das.AttentionBroker/correlate', + "/das.AttentionBroker/correlate", common__pb2.HandleList.SerializeToString, common__pb2.Ack.FromString, options, diff --git a/src/hyperon_das/grpc/common_pb2.py b/src/hyperon_das/grpc/common_pb2.py index 53dfdf8..ef01372 100644 --- a/src/hyperon_das/grpc/common_pb2.py +++ b/src/hyperon_das/grpc/common_pb2.py @@ -3,6 +3,7 @@ # source: common.proto # Protobuf Python Version: 4.25.1 """Generated protocol buffer code.""" + from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool from google.protobuf import symbol_database as _symbol_database @@ -14,24 +15,24 @@ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile( - b'\n\x0c\x63ommon.proto\x12\x03\x64\x61s\"\x07\n\x05\x45mpty\"!\n\x03\x41\x63k\x12\r\n\x05\x65rror\x18\x01 \x01(\x08\x12\x0b\n\x03msg\x18\x02 \x01(\t\"!\n\nHandleList\x12\x13\n\x0bhandle_list\x18\x01 \x03(\t\"z\n\x0bHandleCount\x12\x37\n\x0chandle_count\x18\x01 \x03(\x0b\x32!.das.HandleCount.HandleCountEntry\x1a\x32\n\x10HandleCountEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\x62\x06proto3' + b'\n\x0c\x63ommon.proto\x12\x03\x64\x61s"\x07\n\x05\x45mpty"!\n\x03\x41\x63k\x12\r\n\x05\x65rror\x18\x01 \x01(\x08\x12\x0b\n\x03msg\x18\x02 \x01(\t"!\n\nHandleList\x12\x13\n\x0bhandle_list\x18\x01 \x03(\t"z\n\x0bHandleCount\x12\x37\n\x0chandle_count\x18\x01 \x03(\x0b\x32!.das.HandleCount.HandleCountEntry\x1a\x32\n\x10HandleCountEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\x62\x06proto3' ) _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'common_pb2', _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "common_pb2", _globals) if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None - _globals['_HANDLECOUNT_HANDLECOUNTENTRY']._options = None - _globals['_HANDLECOUNT_HANDLECOUNTENTRY']._serialized_options = b'8\001' - _globals['_EMPTY']._serialized_start = 21 - _globals['_EMPTY']._serialized_end = 28 - _globals['_ACK']._serialized_start = 30 - _globals['_ACK']._serialized_end = 63 - _globals['_HANDLELIST']._serialized_start = 65 - _globals['_HANDLELIST']._serialized_end = 98 - _globals['_HANDLECOUNT']._serialized_start = 100 - _globals['_HANDLECOUNT']._serialized_end = 222 - _globals['_HANDLECOUNT_HANDLECOUNTENTRY']._serialized_start = 172 - _globals['_HANDLECOUNT_HANDLECOUNTENTRY']._serialized_end = 222 + _globals["_HANDLECOUNT_HANDLECOUNTENTRY"]._options = None + _globals["_HANDLECOUNT_HANDLECOUNTENTRY"]._serialized_options = b"8\001" + _globals["_EMPTY"]._serialized_start = 21 + _globals["_EMPTY"]._serialized_end = 28 + _globals["_ACK"]._serialized_start = 30 + _globals["_ACK"]._serialized_end = 63 + _globals["_HANDLELIST"]._serialized_start = 65 + _globals["_HANDLELIST"]._serialized_end = 98 + _globals["_HANDLECOUNT"]._serialized_start = 100 + _globals["_HANDLECOUNT"]._serialized_end = 222 + _globals["_HANDLECOUNT_HANDLECOUNTENTRY"]._serialized_start = 172 + _globals["_HANDLECOUNT_HANDLECOUNTENTRY"]._serialized_end = 222 # @@protoc_insertion_point(module_scope) diff --git a/src/hyperon_das/grpc/common_pb2_grpc.py b/src/hyperon_das/grpc/common_pb2_grpc.py index 8a93939..bf94705 100644 --- a/src/hyperon_das/grpc/common_pb2_grpc.py +++ b/src/hyperon_das/grpc/common_pb2_grpc.py @@ -1,3 +1,4 @@ # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! """Client and server classes corresponding to protobuf-defined services.""" + import grpc diff --git a/src/hyperon_das/link_filters.py b/src/hyperon_das/link_filters.py index 0611fa5..9efe8a6 100644 --- a/src/hyperon_das/link_filters.py +++ b/src/hyperon_das/link_filters.py @@ -39,7 +39,10 @@ class FlatTypeTemplate(LinkFilter): """ def __init__( - self, target_types: list[str], link_type: str = WILDCARD, toplevel_only: bool = False + self, + target_types: list[str], + link_type: str = WILDCARD, + toplevel_only: bool = False, ): self.filter_type = LinkFilterType.FLAT_TYPE_TEMPLATE self.link_type = link_type diff --git a/src/hyperon_das/logger.py b/src/hyperon_das/logger.py index 5772f05..098310d 100644 --- a/src/hyperon_das/logger.py +++ b/src/hyperon_das/logger.py @@ -1,6 +1,6 @@ import logging -LOG_FILE_NAME = '/tmp/das.log' +LOG_FILE_NAME = "/tmp/das.log" LOGGING_LEVEL = logging.INFO @@ -20,8 +20,8 @@ def __init__(self): logging.basicConfig( filename=LOG_FILE_NAME, level=LOGGING_LEVEL, - format='%(asctime)s %(levelname)-8s %(message)s', - datefmt='%Y-%m-%d %H:%M:%S', + format="%(asctime)s %(levelname)-8s %(message)s", + datefmt="%Y-%m-%d %H:%M:%S", ) Logger.__instance = self diff --git a/src/hyperon_das/query_engines/local_query_engine.py b/src/hyperon_das/query_engines/local_query_engine.py index e5e704f..e4582c9 100644 --- a/src/hyperon_das/query_engines/local_query_engine.py +++ b/src/hyperon_das/query_engines/local_query_engine.py @@ -75,7 +75,7 @@ def _recursive_query( das_error( UnexpectedQueryFormat( message="Query processing reached an unexpected state", - details=f'link: {str(query)} link target: {str(query)}', + details=f"link: {str(query)} link target: {str(query)}", ) ) return LazyQueryEvaluator( @@ -85,7 +85,7 @@ def _recursive_query( das_error( UnexpectedQueryFormat( message="Query processing reached an unexpected state", - details=f'query: {str(query)}', + details=f"query: {str(query)}", ) ) @@ -122,7 +122,7 @@ def _process_node(self, query: dict) -> List[NodeT]: return [] def _process_link(self, query: dict) -> List[LinkT]: - target_handles = self._generate_target_handles(query['targets']) + target_handles = self._generate_target_handles(query["targets"]) matched_links = self.local_backend.get_matched_links( link_type=query["type"], target_handles=target_handles ) @@ -205,7 +205,9 @@ def get_link_handles(self, link_filter: LinkFilter) -> HandleSetT: ) elif link_filter.filter_type == LinkFilterType.TARGETS: return self.local_backend.get_matched_links( - link_filter.link_type, link_filter.targets, toplevel_only=link_filter.toplevel_only + link_filter.link_type, + link_filter.targets, + toplevel_only=link_filter.toplevel_only, ) elif link_filter.filter_type == LinkFilterType.NAMED_TYPE: return self.local_backend.get_all_links( @@ -235,8 +237,8 @@ def query( if no_iterator: logger().debug( { - 'message': '[DistributedAtomSpace][query] - Start', - 'data': {'query': query, 'parameters': parameters}, + "message": "[DistributedAtomSpace][query] - Start", + "data": {"query": query, "parameters": parameters}, } ) query_results = self._recursive_query(query, parameters) @@ -249,25 +251,25 @@ def query( def custom_query( self, index_id: str, query: list[OrderedDict[str, str]], **kwargs ) -> Iterator | tuple[int, list[AtomT]]: - if kwargs.pop('no_iterator', True): + if kwargs.pop("no_iterator", True): return self.local_backend.get_atoms_by_index(index_id, query=query, **kwargs) else: - if kwargs.get('cursor') is None: - kwargs['cursor'] = 0 + if kwargs.get("cursor") is None: + kwargs["cursor"] = 0 cursor, answer = self.local_backend.get_atoms_by_index(index_id, query=query, **kwargs) - kwargs['backend'] = self.local_backend - kwargs['index_id'] = index_id - kwargs['cursor'] = cursor + kwargs["backend"] = self.local_backend + kwargs["index_id"] = index_id + kwargs["cursor"] = cursor return CustomQuery(ListIterator(answer), **kwargs) def count_atoms(self, parameters: Optional[Dict[str, Any]] = None) -> Dict[str, int]: - if parameters and parameters.get('context') == 'remote': + if parameters and parameters.get("context") == "remote": return {} return self.local_backend.count_atoms(parameters) def commit(self, **kwargs) -> None: - if kwargs.get('buffer'): - self.local_backend.commit(buffer=kwargs['buffer']) + if kwargs.get("buffer"): + self.local_backend.commit(buffer=kwargs["buffer"]) self.local_backend.commit() def reindex(self, pattern_index_templates: Optional[Dict[str, Dict[str, Any]]] = None): @@ -292,7 +294,7 @@ def fetch( port: Optional[int] = None, **kwargs, ) -> Any: - if not self.system_parameters.get('running_on_server'): # Local + if not self.system_parameters.get("running_on_server"): # Local if host is not None and port is not None: server = FunctionsClient(host, port) else: @@ -305,14 +307,14 @@ def fetch( except Exception as e: das_error(e) else: - if 'atom_type' not in query: - das_error(ValueError('Invalid query: missing atom_type')) + if "atom_type" not in query: + das_error(ValueError("Invalid query: missing atom_type")) - atom_type = query['atom_type'] + atom_type = query["atom_type"] - if atom_type == 'node': + if atom_type == "node": return self._process_node(query) - elif atom_type == 'link': + elif atom_type == "link": return self._process_link(query) else: das_error( @@ -330,7 +332,10 @@ def get_atoms_by_field(self, query: list[OrderedDict[str, str]]) -> HandleListT: return self.local_backend.get_atoms_by_field(query) def get_atoms_by_text_field( - self, text_value: str, field: Optional[str] = None, text_index_id: Optional[str] = None + self, + text_value: str, + field: Optional[str] = None, + text_index_id: Optional[str] = None, ) -> HandleListT: return self.local_backend.get_atoms_by_text_field(text_value, field, text_index_id) diff --git a/src/hyperon_das/query_engines/query_engine_protocol.py b/src/hyperon_das/query_engines/query_engine_protocol.py index 02a4e7f..ff3f4c6 100644 --- a/src/hyperon_das/query_engines/query_engine_protocol.py +++ b/src/hyperon_das/query_engines/query_engine_protocol.py @@ -314,7 +314,10 @@ def get_atoms_by_field(self, query: Query) -> HandleListT: @abstractmethod def get_atoms_by_text_field( - self, text_value: str, field: Optional[str] = None, text_index_id: Optional[str] = None + self, + text_value: str, + field: Optional[str] = None, + text_index_id: Optional[str] = None, ) -> HandleListT: """ Retrieves a list of atom handles based on a text field value, with optional field and index ID. diff --git a/src/hyperon_das/query_engines/remote_query_engine.py b/src/hyperon_das/query_engines/remote_query_engine.py index 1cb447a..84c790f 100644 --- a/src/hyperon_das/query_engines/remote_query_engine.py +++ b/src/hyperon_das/query_engines/remote_query_engine.py @@ -24,10 +24,10 @@ class QueryScopes(Enum): - REMOTE_ONLY = 'remote_only' - SYNCHRONOUS_UPDATE = 'synchronous_update' - LOCAL_ONLY = 'local_only' - LOCAL_AND_REMOTE = 'local_and_remote' + REMOTE_ONLY = "remote_only" + SYNCHRONOUS_UPDATE = "synchronous_update" + LOCAL_ONLY = "local_only" + LOCAL_AND_REMOTE = "local_and_remote" class RemoteQueryEngine(QueryEngine): @@ -41,9 +41,9 @@ def __init__( self.system_parameters = system_parameters self.local_query_engine = LocalQueryEngine(backend, cache_controller, kwargs) self.cache_controller = cache_controller - self.__mode = kwargs.get('mode', 'read-only') - self.host = kwargs.get('host') - self.port = kwargs.get('port') + self.__mode = kwargs.get("mode", "read-only") + self.host = kwargs.get("host") + self.port = kwargs.get("port") if not self.host or not self.port: das_error(InvalidDASParameters(message="'host' and 'port' are mandatory parameters")) self.remote_das = FunctionsClient(self.host, self.port) @@ -76,7 +76,7 @@ def get_links(self, link_filter: LinkFilter) -> List[LinkT]: def get_link_handles(self, link_filter: LinkFilter) -> HandleSetT: # TODO Implement get_link_handles() in faas client - return {link['handle'] for link in self.get_links(link_filter)} + return {link["handle"] for link in self.get_links(link_filter)} def get_incoming_links(self, atom_handle: HandleT, **kwargs) -> IncomingLinksT: links = self.local_query_engine.get_incoming_links(atom_handle, **kwargs) @@ -85,13 +85,13 @@ def get_incoming_links(self, atom_handle: HandleT, **kwargs) -> IncomingLinksT: return links def custom_query(self, index_id: str, query: Query, **kwargs) -> Iterator: - kwargs.pop('no_iterator', None) - if kwargs.get('cursor') is None: - kwargs['cursor'] = 0 + kwargs.pop("no_iterator", None) + if kwargs.get("cursor") is None: + kwargs["cursor"] = 0 answer = self.remote_das.custom_query(index_id, query=query, **kwargs) - kwargs['backend'] = self.remote_das - kwargs['index_id'] = index_id - kwargs['is_remote'] = True + kwargs["backend"] = self.remote_das + kwargs["index_id"] = index_id + kwargs["is_remote"] = True return CustomQuery(ListIterator(answer), **kwargs) def query( @@ -100,7 +100,7 @@ def query( parameters: Dict[str, Any] | None = None, ) -> Iterator[QueryAnswer] | list[dict[str, Any]]: parameters = parameters or {} - query_scope = parameters.get('query_scope', 'remote_only') + query_scope = parameters.get("query_scope", "remote_only") try: query_scope = QueryScopes(query_scope) except ValueError: @@ -123,31 +123,31 @@ def query( if query_scope in {QueryScopes.REMOTE_ONLY, QueryScopes.SYNCHRONOUS_UPDATE}: if query_scope == QueryScopes.SYNCHRONOUS_UPDATE: self.commit() - parameters['no_iterator'] = True + parameters["no_iterator"] = True return self.remote_das.query(query, parameters) return self.local_query_engine.query(query, parameters) def count_atoms(self, parameters: Optional[Dict[str, Any]] = None) -> Dict[str, int]: - if (context := parameters.get('context') if parameters else None) == 'local': + if (context := parameters.get("context") if parameters else None) == "local": return self.local_query_engine.count_atoms(parameters) - if context == 'remote': + if context == "remote": return self.remote_das.count_atoms(parameters) local_answer = self.local_query_engine.count_atoms(parameters) remote_answer = self.remote_das.count_atoms(parameters) return { k: (local_answer.get(k, 0) + remote_answer.get(k, 0)) - for k in ['node_count', 'link_count', 'atom_count'] + for k in ["node_count", "link_count", "atom_count"] } # def commit(self, **kwargs) -> None: - if self.__mode == 'read-write': + if self.__mode == "read-write": if self.local_query_engine.has_buffer(): self.remote_das.commit_changes(buffer=self.local_query_engine.buffer) self.remote_das.commit_changes() - elif self.__mode == 'read-only': + elif self.__mode == "read-only": das_error(PermissionError("Commit can't be executed in read mode")) else: das_error(ValueError("Invalid mode: '{self.__mode}'. Use 'read-only' or 'read-write'")) @@ -191,7 +191,10 @@ def get_atoms_by_field(self, query: Query) -> HandleListT: return self.remote_das.get_atoms_by_field(query) def get_atoms_by_text_field( - self, text_value: str, field: Optional[str] = None, text_index_id: Optional[str] = None + self, + text_value: str, + field: Optional[str] = None, + text_index_id: Optional[str] = None, ) -> HandleListT: return self.remote_das.get_atoms_by_text_field(text_value, field, text_index_id) diff --git a/src/hyperon_das/tokenizers/dict_query_tokenizer.py b/src/hyperon_das/tokenizers/dict_query_tokenizer.py index 8c3dee3..f0a5430 100644 --- a/src/hyperon_das/tokenizers/dict_query_tokenizer.py +++ b/src/hyperon_das/tokenizers/dict_query_tokenizer.py @@ -156,11 +156,16 @@ def _tokenize( raise ValueError(f"Unsupported query: {_query}") match query: - case {"or": list()} | {"and": list()} | {"not": dict()} | { - "atom_type": "link", - "type": str(), - "targets": list(), - }: + case ( + {"or": list()} + | {"and": list()} + | {"not": dict()} + | { + "atom_type": "link", + "type": str(), + "targets": list(), + } + ): return TOKENS_DELIMITER.join(_tokenize(query).to_tokens()) case _: raise ValueError( diff --git a/src/hyperon_das/tokenizers/elements.py b/src/hyperon_das/tokenizers/elements.py index 1c5a289..f68341e 100644 --- a/src/hyperon_das/tokenizers/elements.py +++ b/src/hyperon_das/tokenizers/elements.py @@ -196,7 +196,9 @@ class LinkTemplate(Link): Inherits from the Link class and is used to denote links that are templates. """ - def __init__(self, type: str, targets: list[Any] = []) -> None: + def __init__(self, type: str, targets: list[Any]) -> None: + if not targets: + targets = [] super().__init__(type, targets, is_template=True) diff --git a/src/hyperon_das/traverse_engines.py b/src/hyperon_das/traverse_engines.py index 3580c59..dbb75c6 100644 --- a/src/hyperon_das/traverse_engines.py +++ b/src/hyperon_das/traverse_engines.py @@ -11,7 +11,7 @@ class TraverseEngine: def __init__(self, handle: str, **kwargs) -> None: - self.das: DistributedAtomSpace = kwargs['das'] + self.das: DistributedAtomSpace = kwargs["das"] try: atom = self.das.get_atom(handle) @@ -55,15 +55,15 @@ def get_links(self, **kwargs) -> TraverseLinksIterator: >>> next(links) """ cursor, incoming_links = self.das.get_incoming_links( - atom_handle=self._cursor['handle'], + atom_handle=self._cursor["handle"], no_iterator=False, targets_document=True, cursor=0, - chunk_size=kwargs.get('chunk_size', 500), + chunk_size=kwargs.get("chunk_size", 500), ) assert cursor == 0 assert isinstance(incoming_links, (LocalIncomingLinks, RemoteIncomingLinks)) - return TraverseLinksIterator(source=incoming_links, cursor=self._cursor['handle'], **kwargs) + return TraverseLinksIterator(source=incoming_links, cursor=self._cursor["handle"], **kwargs) def get_neighbors(self, **kwargs) -> TraverseNeighborsIterator: """Get all of "neighbors" that pointing to current cursor. @@ -97,7 +97,7 @@ def get_neighbors(self, **kwargs) -> TraverseNeighborsIterator: ) >>> next(neighbors) """ - custom_filter = kwargs.pop('filters', None) + custom_filter = kwargs.pop("filters", None) filter_link = filter_target = None if custom_filter is not None and not isinstance(custom_filter, tuple): @@ -107,7 +107,7 @@ def get_neighbors(self, **kwargs) -> TraverseNeighborsIterator: filter_link, filter_target = custom_filter if filter_link is not None: - kwargs['filter'] = filter_link + kwargs["filter"] = filter_link filtered_links = self.get_links(targets_only=True, **kwargs) return TraverseNeighborsIterator(source=filtered_links, filter=filter_target) @@ -152,7 +152,7 @@ def goto(self, handle: str) -> Dict[str, Any]: Dict[str, Any]: The current cursor. A Python dict with all atom data. Examples: - >>> traverse_engine.goto('asd1234567890') + >>> traverse_engine.goto("asd1234567890") >>> { 'handle': 'asd1234567890', 'type': 'AI, diff --git a/src/hyperon_das/utils.py b/src/hyperon_das/utils.py index 1b87a46..3fcf8bf 100644 --- a/src/hyperon_das/utils.py +++ b/src/hyperon_das/utils.py @@ -230,31 +230,29 @@ def check_versions(response_body: bytes) -> None: if not remote_das_version or not remote_atomdb_version: raise ValueError("Invalid response from server, missing version info.") - + # local packages versions - das_version = get_package_version('hyperon_das') - atom_db_version = get_package_version('hyperon_das_atomdb') + das_version = get_package_version("hyperon_das") + atom_db_version = get_package_version("hyperon_das_atomdb") if not das_version or not atom_db_version: raise ValueError("Missing version info in the local packages.") is_atomdb_compatible = compare_minor_versions( - remote_atomdb_version, - atom_db_version, - ) + remote_atomdb_version, + atom_db_version, + ) is_das_compatible = compare_minor_versions( - remote_das_version, - das_version, - ) + remote_das_version, + das_version, + ) if not is_atomdb_compatible or not is_das_compatible: local_versions = f"hyperon-das: {das_version}, hyperon-das-atomdb: {atom_db_version}" remote_versions = ( - f"hyperon-das: {remote_das_version}, hyperon-das-atomdb: {remote_atomdb_version}" - ) - error_message = ( - f"Version mismatch. Local: {local_versions}. " f"Remote: {remote_versions}." - ) + f"hyperon-das: {remote_das_version}, hyperon-das-atomdb: {remote_atomdb_version}" + ) + error_message = f"Version mismatch. Local: {local_versions}. Remote: {remote_versions}." logger().error(error_message) raise Exception(error_message) diff --git a/src/hyperon_das_atomdb/__init__.py b/src/hyperon_das_atomdb/__init__.py index 9fb9b3b..0b656f3 100644 --- a/src/hyperon_das_atomdb/__init__.py +++ b/src/hyperon_das_atomdb/__init__.py @@ -16,4 +16,4 @@ "AtomDoesNotExist", ] -__version__ = '0.8.10' +__version__ = "0.8.10" diff --git a/src/hyperon_das_atomdb/adapters/redis_mongo_db.py b/src/hyperon_das_atomdb/adapters/redis_mongo_db.py index da56c10..9bfddad 100644 --- a/src/hyperon_das_atomdb/adapters/redis_mongo_db.py +++ b/src/hyperon_das_atomdb/adapters/redis_mongo_db.py @@ -327,7 +327,9 @@ def _connection_mongo_db( return self.mongo_db except ValueError as e: logger().error(f"An error occurred while creating a MongoDB client - Details: {str(e)}") - raise ConnectionMongoDBException(message="error creating a MongoClient", details=str(e)) + raise ConnectionMongoDBException( + message="error creating a MongoClient", details=str(e) + ) from e @staticmethod def _connection_redis( @@ -357,7 +359,7 @@ def _connection_redis( message = ( f"Connecting to {redis_type} at " + ( - f"{redis_username}:{len(redis_password)*'*'}@" + f"{redis_username}:{len(redis_password) * '*'}@" if redis_username and redis_password else "" ) @@ -780,7 +782,7 @@ def get_matched_type_template(self, template: list[Any], **kwargs) -> HandleSetT return templates_matched except Exception as exception: logger().error(f"Failed to get matched type template - Details: {str(exception)}") - raise ValueError(str(exception)) + raise ValueError(str(exception)) from exception def get_matched_type(self, link_type: str, **kwargs) -> HandleSetT: named_type_hash = ExpressionHasher.named_type_hash(link_type) @@ -1400,7 +1402,7 @@ def _retrieve_documents_by_index( def reindex(self, pattern_index_templates: dict[str, list[DocumentT]] | None = None) -> None: if isinstance(pattern_index_templates, list): self._save_pattern_index(deepcopy(pattern_index_templates)) - self._setup_indexes({'pattern_index_templates': pattern_index_templates}) + self._setup_indexes({"pattern_index_templates": pattern_index_templates}) self.redis.flushall() self._update_atom_indexes(self.mongo_atoms_collection.find({})) @@ -1472,7 +1474,8 @@ def create_field_index( logger().error(f"Error: {str(e)}") finally: if not index_id: - return ( # pylint: disable=lost-exception + # B012: `return` inside `finally` blocks cause exceptions to be silenced + return ( # noqa: B012 f"Index creation failed, Details: {str(exc)}" if exc else "Index creation failed" diff --git a/src/hyperon_das_atomdb/utils/expression_hasher.py b/src/hyperon_das_atomdb/utils/expression_hasher.py index 918ed69..724c4cf 100644 --- a/src/hyperon_das_atomdb/utils/expression_hasher.py +++ b/src/hyperon_das_atomdb/utils/expression_hasher.py @@ -116,5 +116,5 @@ def composite_hash(hash_base: str | list[Any]) -> str: # TODO unreachable else: raise ValueError( - "Invalid base to compute composite hash: " f"{type(hash_base)}: {hash_base}" + f"Invalid base to compute composite hash: {type(hash_base)}: {hash_base}" ) diff --git a/src/link_creation_agent/doc/DaC/das_link_creation_diagram.py b/src/link_creation_agent/doc/DaC/das_link_creation_diagram.py index 6ca6fd3..d2bdddb 100644 --- a/src/link_creation_agent/doc/DaC/das_link_creation_diagram.py +++ b/src/link_creation_agent/doc/DaC/das_link_creation_diagram.py @@ -34,17 +34,17 @@ """ node_attributes = { - "label": "", - "direction": "RL", - "shape": "rect", - "width": "1", - "height": "1", - "fixedsize": "false", - "labeljust": "l", - "style": "filled", - "fillcolor": "dodgerblue3", - "fontcolor": "white", - } + "label": "", + "direction": "RL", + "shape": "rect", + "width": "1", + "height": "1", + "fixedsize": "false", + "labeljust": "l", + "style": "filled", + "fillcolor": "dodgerblue3", + "fontcolor": "white", +} # with Diagram("DAS Link Creation", filename="doc/assets/das_link_creation_diagram.png", show=False): @@ -65,29 +65,48 @@ # das_link_creation_node >> edges[0] >> client with Diagram("DAS Link Creation", filename="doc/assets/das_link_creation_hla", show=False): - client = Person( - name="DAS Server", description="Sends a Link creation request" - ) + client = Person(name="DAS Server", description="Sends a Link creation request") with SystemBoundary("DAS Link Creation Agent"): - das_node_server = Container(name="DAS Node Server", technology="DAS NODE", description="Receives a link creation request") - link_creation_agent = Container(name="DAS LCA", technology="C++ Core", description="Process a link creation request") - link_creation_agent_service = Container(name="DAS LCA", technology="C++ Service", description="Process multiple queries") - das_node_client = Container(name="DAS Node Client", technology="DAS NODE", description="Sends atoms creation requests") - das_node_client2 = Container(name="DAS Node Client", technology="DAS NODE", description="Sends query requests") - - - das_query_agent = Container(name="DAS Query Agent", technology="DAS NODE", description="Process Template Queries") + das_node_server = Container( + name="DAS Node Server", + technology="DAS NODE", + description="Receives a link creation request", + ) + link_creation_agent = Container( + name="DAS LCA", + technology="C++ Core", + description="Process a link creation request", + ) + link_creation_agent_service = Container( + name="DAS LCA", + technology="C++ Service", + description="Process multiple queries", + ) + das_node_client = Container( + name="DAS Node Client", + technology="DAS NODE", + description="Sends atoms creation requests", + ) + das_node_client2 = Container( + name="DAS Node Client", + technology="DAS NODE", + description="Sends query requests", + ) + + das_query_agent = Container( + name="DAS Query Agent", + technology="DAS NODE", + description="Process Template Queries", + ) das_node_client >> Relationship("Create links and nodes") >> client client >> Relationship("Request Link Creation") >> das_node_server das_node_server >> Relationship("Start Link Creation") >> link_creation_agent link_creation_agent >> das_node_client2 << link_creation_agent - das_node_client2 >> Relationship("Request Query template results") >> das_query_agent - - das_query_agent >> Relationship("Returns a Query Iterator") >> das_node_client2 - link_creation_agent >> Relationship("Spawn a LCA service") >> link_creation_agent_service - link_creation_agent_service >> Relationship("Send create atom requests") >> das_node_client - + (das_node_client2 >> Relationship("Request Query template results") >> das_query_agent) + das_query_agent >> Relationship("Returns a Query Iterator") >> das_node_client2 + (link_creation_agent >> Relationship("Spawn a LCA service") >> link_creation_agent_service) + (link_creation_agent_service >> Relationship("Send create atom requests") >> das_node_client) diff --git a/src/tests/python/helpers.py b/src/tests/python/helpers.py index 3c16256..529c6f4 100644 --- a/src/tests/python/helpers.py +++ b/src/tests/python/helpers.py @@ -60,7 +60,7 @@ def dict_to_link_params(link_dict: dict) -> LinkT: try: return LinkT(**params) except TypeError as ex: - raise AssertionError(f"{type(ex)}: {ex} - {params=}") + raise AssertionError(f"{type(ex)}: {ex} - {params=}") from ex class AnimalBaseHandlesCollection: diff --git a/src/tests/python/integration/adapters/animals_kb.py b/src/tests/python/integration/adapters/animals_kb.py index 3bea970..6d64318 100644 --- a/src/tests/python/integration/adapters/animals_kb.py +++ b/src/tests/python/integration/adapters/animals_kb.py @@ -22,7 +22,11 @@ node_docs[human] = {"type": "Concept", "name": "human"} node_docs[monkey] = {"type": "Concept", "name": "monkey"} node_docs[chimp] = {"type": "Concept", "name": "chimp"} -node_docs[mammal] = {"type": "Concept", "name": "mammal", "custom_attributes": {"name": "mammal"}} +node_docs[mammal] = { + "type": "Concept", + "name": "mammal", + "custom_attributes": {"name": "mammal"}, +} node_docs[reptile] = {"type": "Concept", "name": "reptile"} node_docs[snake] = {"type": "Concept", "name": "snake"} node_docs[dinosaur] = {"type": "Concept", "name": "dinosaur"} diff --git a/src/tests/python/integration/adapters/test_redis_mongo.py b/src/tests/python/integration/adapters/test_redis_mongo.py index 662c2ef..481b036 100644 --- a/src/tests/python/integration/adapters/test_redis_mongo.py +++ b/src/tests/python/integration/adapters/test_redis_mongo.py @@ -19,7 +19,15 @@ rhino, similarity_docs, ) -from .helpers import Database, PyMongoFindExplain, _db_down, _db_up, cleanup, mongo_port, redis_port +from .helpers import ( + Database, + PyMongoFindExplain, + _db_down, + _db_up, + cleanup, + mongo_port, + redis_port, +) def metta_to_links(input_str): @@ -27,18 +35,18 @@ def parse_tokens(tokens): result = [] while tokens: token = tokens.pop(0) - if token == '(': + if token == "(": nested = parse_tokens(tokens) result.append(nested) - elif token == ')': + elif token == ")": break else: result.append({"type": "Symbol", "name": token}) return {"type": "Expression", "targets": result} - input_str = input_str.replace('(', ' ( ').replace(')', ' ) ') + input_str = input_str.replace("(", " ( ").replace(")", " ) ") tokens = input_str.split() - return parse_tokens(tokens)['targets'][0] + return parse_tokens(tokens)["targets"][0] class TestRedisMongo: @@ -1214,7 +1222,8 @@ def test_add_fields_to_atoms(self, _cleanup, _db: RedisMongoDB): assert db.get_atom(link_handle).custom_attributes["score"] == 0.5 @pytest.mark.parametrize( - "node", [({"type": "A", "name": "type_a", "custom_attributes": {"status": "ready"}})] + "node", + [({"type": "A", "name": "type_a", "custom_attributes": {"status": "ready"}})], ) def test_get_atoms_by_index_custom_att(self, node, _cleanup, _db: RedisMongoDB): node = _db.add_node(NodeT(**node)) @@ -1339,7 +1348,7 @@ def test_commit_with_buffer(self, _cleanup, _db: RedisMongoDB): "arity": 3, } ], - '(synonyms (gene ENSG00000278267) (microRNA_6859-1 hsa-mir-6859-1 HGNC:50039 microRNA_mir-6859-1 MIR6859-1))', + "(synonyms (gene ENSG00000278267) (microRNA_6859-1 hsa-mir-6859-1 HGNC:50039 microRNA_mir-6859-1 MIR6859-1))", [ ("synonyms", "*", "*"), ], @@ -1354,7 +1363,7 @@ def test_commit_with_buffer(self, _cleanup, _db: RedisMongoDB): "arity": 3, } ], - '(tf_name (motif ENSG00000156273) BACH1)', + "(tf_name (motif ENSG00000156273) BACH1)", [ ("tf_name", "*", "*"), ], diff --git a/src/tests/python/integration/conftest.py b/src/tests/python/integration/conftest.py index a3a619f..81f9f9e 100644 --- a/src/tests/python/integration/conftest.py +++ b/src/tests/python/integration/conftest.py @@ -5,7 +5,10 @@ def pytest_addoption(parser): parser.addoption( - "--build", action="store_true", default=False, help="Rebuilds container's test image." + "--build", + action="store_true", + default=False, + help="Rebuilds container's test image.", ) parser.addoption( "--no-destroy", diff --git a/src/tests/python/integration/helpers.py b/src/tests/python/integration/helpers.py index 5c7dc0c..10db685 100644 --- a/src/tests/python/integration/helpers.py +++ b/src/tests/python/integration/helpers.py @@ -78,18 +78,18 @@ def enforce_containers_removal(): @pytest.fixture(scope="module") def das_remote_fixture_module(environment_manager): - yield DAS(query_engine='remote', host=remote_das_host, port=remote_das_port) + yield DAS(query_engine="remote", host=remote_das_host, port=remote_das_port) @pytest.fixture(scope="class") def das_local_fixture_class(): _db_up() yield DAS( - query_engine='local', - atomdb='redis_mongo', + query_engine="local", + atomdb="redis_mongo", mongo_port=mongo_port, - mongo_username='dbadmin', - mongo_password='dassecret', + mongo_username="dbadmin", + mongo_password="dassecret", redis_port=redis_port, redis_cluster=False, redis_ssl=False, @@ -101,11 +101,11 @@ def das_local_fixture_class(): def das_local_fixture(): _db_up() yield DAS( - query_engine='local', - atomdb='redis_mongo', + query_engine="local", + atomdb="redis_mongo", mongo_port=mongo_port, - mongo_username='dbadmin', - mongo_password='dassecret', + mongo_username="dbadmin", + mongo_password="dassecret", redis_port=redis_port, redis_cluster=False, redis_ssl=False, diff --git a/src/tests/python/integration/test_attention_broker_gateway.py b/src/tests/python/integration/test_attention_broker_gateway.py index 009ef87..ff3a417 100644 --- a/src/tests/python/integration/test_attention_broker_gateway.py +++ b/src/tests/python/integration/test_attention_broker_gateway.py @@ -8,26 +8,26 @@ import hyperon_das.grpc.common_pb2 as common from hyperon_das.cache.attention_broker_gateway import AttentionBrokerGateway -HOST = 'localhost' +HOST = "localhost" PORT = 27000 -SYSTEM_PARAMETERS = {'attention_broker_hostname': HOST, 'attention_broker_port': PORT} +SYSTEM_PARAMETERS = {"attention_broker_hostname": HOST, "attention_broker_port": PORT} RECEIVED = None class AttentionBrokerMock(ab_grpc.AttentionBrokerServicer): def ping(self, request, context): - return common.Ack(error=0, msg='OK') + return common.Ack(error=0, msg="OK") def correlate(self, request, context): global RECEIVED RECEIVED = request.handle_list - return common.Ack(error=0, msg='OK') + return common.Ack(error=0, msg="OK") def stimulate(self, request, context): global RECEIVED RECEIVED = request.handle_count - return common.Ack(error=0, msg='OK') + return common.Ack(error=0, msg="OK") def server_up(): @@ -48,9 +48,9 @@ def test_creation(self): with pytest.raises(ValueError): AttentionBrokerGateway({}) with pytest.raises(ValueError): - AttentionBrokerGateway({'attention_broker_hostname': 'localhost'}) + AttentionBrokerGateway({"attention_broker_hostname": "localhost"}) with pytest.raises(ValueError): - AttentionBrokerGateway({'attention_broker_port': 27000}) + AttentionBrokerGateway({"attention_broker_port": 27000}) grpc_server = server_up() AttentionBrokerGateway(SYSTEM_PARAMETERS) server_down(grpc_server) @@ -58,18 +58,18 @@ def test_creation(self): def test_ping(self): grpc_server = server_up() gateway = AttentionBrokerGateway(SYSTEM_PARAMETERS) - assert gateway.ping() == 'OK' + assert gateway.ping() == "OK" server_down(grpc_server) def _check_correlate(self, gateway, message): global RECEIVED - assert gateway.correlate(message) == 'OK' + assert gateway.correlate(message) == "OK" assert list(RECEIVED) == list(message) def _check_stimulate(self, gateway, stimuli): global RECEIVED message = {handle: count for handle, count in stimuli} - assert gateway.stimulate(message) == 'OK' + assert gateway.stimulate(message) == "OK" assert len(RECEIVED) == len(message) for key in RECEIVED: assert RECEIVED[key] == message[key] @@ -80,11 +80,11 @@ def test_correlate(self): with pytest.raises(ValueError): self._check_correlate(gateway, None) self._check_correlate(gateway, []) - self._check_correlate(gateway, ['h1']) - self._check_correlate(gateway, ['h1', 'h2']) - self._check_correlate(gateway, ['h1', 'h2', 'h2']) - self._check_correlate(gateway, ['h2', 'h1', 'h2']) - self._check_correlate(gateway, set(['h1', 'h2', 'h2'])) + self._check_correlate(gateway, ["h1"]) + self._check_correlate(gateway, ["h1", "h2"]) + self._check_correlate(gateway, ["h1", "h2", "h2"]) + self._check_correlate(gateway, ["h2", "h1", "h2"]) + self._check_correlate(gateway, set(["h1", "h2", "h2"])) server_down(grpc_server) def test_stimulate(self): @@ -93,7 +93,7 @@ def test_stimulate(self): with pytest.raises(ValueError): self._check_correlate(gateway, None) self._check_stimulate(gateway, []) - self._check_stimulate(gateway, [('h1', 1)]) - self._check_stimulate(gateway, [('h1', 1), ('h2', 1)]) - self._check_stimulate(gateway, [('h1', 1), ('h2', 2)]) + self._check_stimulate(gateway, [("h1", 1)]) + self._check_stimulate(gateway, [("h1", 1), ("h2", 1)]) + self._check_stimulate(gateway, [("h1", 1), ("h2", 2)]) server_down(grpc_server) diff --git a/src/tests/python/integration/test_client.py b/src/tests/python/integration/test_client.py index 3902b73..e9d13f6 100644 --- a/src/tests/python/integration/test_client.py +++ b/src/tests/python/integration/test_client.py @@ -4,7 +4,7 @@ import hyperon_das.link_filters as link_filter from hyperon_das.client import FunctionsClient -from tests.python.integration.helpers import faas_fixture, metta_animal_base_handles +from tests.python.integration.helpers import metta_animal_base_handles class TestVultrClientIntegration: @@ -15,16 +15,16 @@ def test_get_atom( result = faas_fixture.get_atom(handle=metta_animal_base_handles.human) assert result.handle == metta_animal_base_handles.human assert result.name == '"human"' - assert result.named_type == 'Symbol' + assert result.named_type == "Symbol" result = faas_fixture.get_atom(handle=metta_animal_base_handles.monkey) assert result.handle == metta_animal_base_handles.monkey assert result.name == '"monkey"' - assert result.named_type == 'Symbol' + assert result.named_type == "Symbol" result = faas_fixture.get_atom(handle=metta_animal_base_handles.similarity_human_monkey) assert result.handle == metta_animal_base_handles.similarity_human_monkey - assert result.named_type == 'Expression' + assert result.named_type == "Expression" assert result.targets == [ metta_animal_base_handles.Similarity, metta_animal_base_handles.human, @@ -33,16 +33,16 @@ def test_get_atom( def test_get_links(self, faas_fixture: FunctionsClient): # noqa: F811 links1 = faas_fixture.get_links( - link_filter.FlatTypeTemplate(['Symbol', 'Symbol', 'Symbol'], 'Expression') + link_filter.FlatTypeTemplate(["Symbol", "Symbol", "Symbol"], "Expression") ) - links2 = faas_fixture.get_links(link_filter.NamedType('Expression')) + links2 = faas_fixture.get_links(link_filter.NamedType("Expression")) assert len(links1) == 43 assert len(links2) == 43 def test_count_atoms(self, faas_fixture: FunctionsClient): ret = faas_fixture.count_atoms() print(ret) - assert ret == {'atom_count': 66} + assert ret == {"atom_count": 66} def test_query(self, faas_fixture: FunctionsClient): answer = faas_fixture.query( @@ -138,18 +138,18 @@ def test_get_incoming_links(self, faas_fixture: FunctionsClient): ) assert len(response_atoms) == 8 for atom in response_atoms: - assert isinstance( - atom, LinkT - ), f"Each item in body must be a LinkT instance. Received: {atom}" + assert isinstance(atom, LinkT), ( + f"Each item in body must be a LinkT instance. Received: {atom}" + ) assert len(atom.targets) == 3 assert atom.handle in [a.handle for a in expected_atoms] response_atoms = faas_fixture.get_incoming_links(metta_animal_base_handles.human) assert len(response_atoms) == 8 for atom in response_atoms: - assert isinstance( - atom, LinkT - ), f"Each item in body must be a LinkT instance. Received: {atom}" + assert isinstance(atom, LinkT), ( + f"Each item in body must be a LinkT instance. Received: {atom}" + ) assert len(atom.targets) == 3 assert atom.handle in [a.handle for a in expected_atoms] @@ -158,9 +158,9 @@ def test_get_incoming_links(self, faas_fixture: FunctionsClient): ) assert len(response_atoms_targets) == 8 for atom in response_atoms_targets: - assert isinstance( - atom, LinkT - ), f"Each item in body must be a LinkT instance. Received: {atom}" + assert isinstance(atom, LinkT), ( + f"Each item in body must be a LinkT instance. Received: {atom}" + ) atom_targets = [a.to_dict() for a in atom.targets_documents] assert len(atom_targets) == 3 assert atom.handle in expected_atoms_targets diff --git a/src/tests/python/integration/test_das_query_api.py b/src/tests/python/integration/test_das_query_api.py index 9d81b96..a388fae 100644 --- a/src/tests/python/integration/test_das_query_api.py +++ b/src/tests/python/integration/test_das_query_api.py @@ -26,15 +26,15 @@ def setup_class(cls): _db_up() remote_up(build=False) - das_instance["local_ram"] = DistributedAtomSpace(query_engine='local', atomdb='ram') + das_instance["local_ram"] = DistributedAtomSpace(query_engine="local", atomdb="ram") load_metta_animals_base(das_instance["local_ram"]) das_instance["local_redis_mongo"] = DistributedAtomSpace( - query_engine='local', - atomdb='redis_mongo', + query_engine="local", + atomdb="redis_mongo", mongo_port=mongo_port, - mongo_username='dbadmin', - mongo_password='dassecret', + mongo_username="dbadmin", + mongo_password="dassecret", redis_port=redis_port, redis_cluster=False, redis_ssl=False, @@ -43,7 +43,7 @@ def setup_class(cls): das_instance["local_redis_mongo"].commit_changes() das_instance["remote"] = DistributedAtomSpace( - query_engine='remote', host=remote_das_host, port=get_remote_das_port() + query_engine="remote", host=remote_das_host, port=get_remote_das_port() ) @classmethod @@ -56,7 +56,7 @@ def _cleanup(self, request): return cleanup(request) def test_count_atoms(self): - for key, das in das_instance.items(): + for _key, das in das_instance.items(): count = das.count_atoms({}) assert count["atom_count"] == 66 diff --git a/src/tests/python/integration/test_iterators.py b/src/tests/python/integration/test_iterators.py index f28f822..d34ded3 100644 --- a/src/tests/python/integration/test_iterators.py +++ b/src/tests/python/integration/test_iterators.py @@ -9,8 +9,6 @@ _db_down, _db_up, cleanup, - das_local_fixture_class, - das_remote_fixture_module, get_remote_das_port, load_metta_animals_base, metta_animal_base_handles, @@ -33,7 +31,7 @@ def human_handle(self): return metta_animal_base_handles.human def _is_expression_atom(self, atom: dict) -> bool: - if atom['named_type'] != 'Expression': + if atom["named_type"] != "Expression": return False return True @@ -54,11 +52,11 @@ def _human_incoming_links(self): def _check_asserts(self, das: DistributedAtomSpace, iterator: QueryAnswerIterator): current_value = iterator.get() assert current_value == das.query_engine.get_atom( - iterator.get()['handle'], targets_document=True + iterator.get()["handle"], targets_document=True ) assert isinstance(current_value, dict) assert iterator.is_empty() is False - link_handles = sorted([item['handle'] for item in iterator]) + link_handles = sorted([item["handle"] for item in iterator]) assert len(link_handles) == 8 assert link_handles == self._human_incoming_links() assert iterator.is_empty() is True @@ -77,11 +75,11 @@ def test_traverse_links_with_das_ram_only(self, human_handle): def test_traverse_links_with_das_redis_mongo(self, human_handle, _cleanup): _db_up() das = DistributedAtomSpace( - query_engine='local', - atomdb='redis_mongo', + query_engine="local", + atomdb="redis_mongo", mongo_port=mongo_port, - mongo_username='dbadmin', - mongo_password='dassecret', + mongo_username="dbadmin", + mongo_password="dassecret", redis_port=redis_port, redis_cluster=False, redis_ssl=False, @@ -125,16 +123,16 @@ def _human_neighbors(self): ) def _is_literal_atom(self, atom: dict) -> bool: - if atom['is_literal'] is False: + if atom["is_literal"] is False: return False return True def _check_asserts(self, das: DistributedAtomSpace, iterator: TraverseNeighborsIterator): current_value = iterator.get() - assert current_value == das.get_atom(iterator.get()['handle']) + assert current_value == das.get_atom(iterator.get()["handle"]) assert isinstance(current_value, dict) assert iterator.is_empty() is False - node_handles = sorted([item['handle'] for item in iterator]) + node_handles = sorted([item["handle"] for item in iterator]) assert len(node_handles) == 4 assert node_handles == self._human_neighbors() assert iterator.is_empty() is True @@ -153,11 +151,11 @@ def test_traverse_neighbors_with_das_ram_only(self, human_handle): def test_traverse_neighbors_with_das_redis_mongo(self, human_handle, _cleanup): _db_up() das = DistributedAtomSpace( - query_engine='local', - atomdb='redis_mongo', + query_engine="local", + atomdb="redis_mongo", mongo_port=mongo_port, - mongo_username='dbadmin', - mongo_password='dassecret', + mongo_username="dbadmin", + mongo_password="dassecret", redis_port=redis_port, redis_cluster=False, redis_ssl=False, @@ -254,27 +252,27 @@ def _all_links(self): def _asserts(self, das: DistributedAtomSpace): node_index = das.create_field_index( - atom_type='node', fields=['is_literal'], named_type='Symbol' + atom_type="node", fields=["is_literal"], named_type="Symbol" ) link_index_type = das.create_field_index( - atom_type='link', fields=['is_toplevel'], named_type='Expression' + atom_type="link", fields=["is_toplevel"], named_type="Expression" ) link_index_composite_type = das.create_field_index( - atom_type='link', - fields=['is_toplevel'], - composite_type=['Expression', 'Symbol', 'Symbol', 'Symbol'], + atom_type="link", + fields=["is_toplevel"], + composite_type=["Expression", "Symbol", "Symbol", "Symbol"], ) - node_iterator = das.custom_query(node_index, query={'is_literal': True}, no_iterator=False) + node_iterator = das.custom_query(node_index, query={"is_literal": True}, no_iterator=False) link_iterator_type = das.custom_query( link_index_type, - query={'is_toplevel': True}, + query={"is_toplevel": True}, chunk_size=10, no_iterator=False, ) link_iterator_composite_type = das.custom_query( link_index_composite_type, - query={'is_toplevel': True}, + query={"is_toplevel": True}, chunk_size=5, no_iterator=False, ) @@ -288,10 +286,10 @@ def _asserts(self, das: DistributedAtomSpace): def _check_asserts(self, das: DistributedAtomSpace, iterator: CustomQuery): current_value = iterator.get() - assert current_value == das.get_atom(iterator.get()['handle']) + assert current_value == das.get_atom(iterator.get()["handle"]) assert isinstance(current_value, dict) assert iterator.is_empty() is False - handles = sorted([item['handle'] for item in iterator]) + handles = sorted([item["handle"] for item in iterator]) assert iterator.is_empty() is True with pytest.raises(StopIteration): iterator.get() @@ -311,7 +309,7 @@ def test_custom_query_with_local_das_redis_mongo(self, _cleanup, das_local_fixtu @pytest.mark.skip("Waiting fix") def test_custom_query_with_remote_das(self): das = DistributedAtomSpace( - query_engine='remote', host=remote_das_host, port=get_remote_das_port() + query_engine="remote", host=remote_das_host, port=get_remote_das_port() ) self._asserts(das) @@ -319,36 +317,36 @@ def test_get_atom_by_field_local(self, das_local_fixture_class): das = das_local_fixture_class load_metta_animals_base(das) das.commit_changes() - atom_field = das.get_atoms_by_field({'name': '"chimp"'}) + atom_field = das.get_atoms_by_field({"name": '"chimp"'}) assert atom_field def test_get_atoms_by_field_remote(self, das_remote_fixture_module): das = das_remote_fixture_module - atom_field = das.get_atoms_by_field({'name': '"chimp"'}) + atom_field = das.get_atoms_by_field({"name": '"chimp"'}) assert atom_field def test_get_atoms_by_text_field_local(self, das_local_fixture_class): das = das_local_fixture_class load_metta_animals_base(das) das.commit_changes() - with pytest.raises(Exception, match=r'text index required for \$text query'): + with pytest.raises(Exception, match=r"text index required for \$text query"): das.get_atoms_by_text_field(text_value='"') - atom_text_field = das.get_atoms_by_text_field(text_value='"chim', field='name') + atom_text_field = das.get_atoms_by_text_field(text_value='"chim', field="name") assert atom_text_field def test_get_atoms_by_text_field_remote(self, das_remote_fixture_module): das = das_remote_fixture_module - atom_text_field = das.get_atoms_by_text_field(text_value='"chim', field='name') + atom_text_field = das.get_atoms_by_text_field(text_value='"chim', field="name") assert atom_text_field def test_get_atoms_starting_local(self, das_local_fixture_class): das = das_local_fixture_class load_metta_animals_base(das) das.commit_changes() - atom_starting_with = das.get_node_by_name_starting_with('Symbol', '"mon') + atom_starting_with = das.get_node_by_name_starting_with("Symbol", '"mon') assert atom_starting_with def test_get_atoms_starting_remote(self, das_remote_fixture_module): das = das_remote_fixture_module - atom_starting_with = das.get_node_by_name_starting_with('Symbol', '"mon') + atom_starting_with = das.get_node_by_name_starting_with("Symbol", '"mon') assert atom_starting_with diff --git a/src/tests/python/integration/test_local_das.py b/src/tests/python/integration/test_local_das.py index c28b333..36b863a 100644 --- a/src/tests/python/integration/test_local_das.py +++ b/src/tests/python/integration/test_local_das.py @@ -4,9 +4,6 @@ from hyperon_das import DistributedAtomSpace from tests.python.integration.helpers import ( - das_local_custom_fixture, - das_local_fixture, - das_remote_fixture_module, get_remote_das_port, mongo_port, redis_port, @@ -100,11 +97,11 @@ def test_fetch_atoms_from_remote_server( def test_fetch_atoms(self, das_local_custom_fixture): das = das_local_custom_fixture( - query_engine='local', - atomdb='redis_mongo', + query_engine="local", + atomdb="redis_mongo", mongo_port=mongo_port, - mongo_username='dbadmin', - mongo_password='dassecret', + mongo_username="dbadmin", + mongo_password="dassecret", redis_port=redis_port, redis_cluster=False, redis_ssl=False, diff --git a/src/tests/python/integration/test_remote_das.py b/src/tests/python/integration/test_remote_das.py index 5c4acb0..267b974 100644 --- a/src/tests/python/integration/test_remote_das.py +++ b/src/tests/python/integration/test_remote_das.py @@ -10,7 +10,6 @@ from hyperon_das.traverse_engines import TraverseEngine from tests.python.integration.helpers import remote_das_host # noqa F401 from tests.python.integration.helpers import ( - das_remote_fixture_module, get_remote_das_port, metta_animal_base_handles, ) @@ -35,12 +34,12 @@ def test_server_connection(self, das_remote_fixture_module): try: das = das_remote_fixture_module except Exception as e: - pytest.fail(f'Connection with OpenFaaS server fail, Details: {str(e)}') + pytest.fail(f"Connection with OpenFaaS server fail, Details: {str(e)}") if not das.query_engine.remote_das.url: - pytest.fail('Connection with server fail') + pytest.fail("Connection with server fail") assert ( das.query_engine.remote_das.url - == f'http://{remote_das_host}:{get_remote_das_port()}/function/query-engine' + == f"http://{remote_das_host}:{get_remote_das_port()}/function/query-engine" ) def test_cache_controller(self, das_remote_fixture_module: DistributedAtomSpace): @@ -51,13 +50,13 @@ def test_get_atom(self, das_remote_fixture_module: DistributedAtomSpace): result = das_remote_fixture_module.get_atom(handle=metta_animal_base_handles.human) assert result.handle == metta_animal_base_handles.human assert result.name == '"human"' - assert result.named_type == 'Symbol' + assert result.named_type == "Symbol" result = das_remote_fixture_module.get_atom( handle=metta_animal_base_handles.inheritance_dinosaur_reptile ) assert result.handle == metta_animal_base_handles.inheritance_dinosaur_reptile - assert result.named_type == 'Expression' + assert result.named_type == "Expression" assert result.targets == [ metta_animal_base_handles.Inheritance, metta_animal_base_handles.dinosaur, @@ -65,7 +64,7 @@ def test_get_atom(self, das_remote_fixture_module: DistributedAtomSpace): ] with pytest.raises(AtomDoesNotExist): - das_remote_fixture_module.get_atom(handle='fake') + das_remote_fixture_module.get_atom(handle="fake") @pytest.mark.skip("Wrong values") def test_get_links(self, das_remote_fixture_module: DistributedAtomSpace): @@ -85,7 +84,7 @@ def test_get_links(self, das_remote_fixture_module: DistributedAtomSpace): metta_animal_base_handles.inheritance_typedef, ] - links = das_remote_fixture_module.get_links(link_filters.NamedType('Expression')) + links = das_remote_fixture_module.get_links(link_filters.NamedType("Expression")) inheritance_links = [] for link in links: if metta_animal_base_handles.Inheritance in link.targets: @@ -94,7 +93,7 @@ def test_get_links(self, das_remote_fixture_module: DistributedAtomSpace): assert sorted(inheritance_links) == sorted(all_inheritance) links = das_remote_fixture_module.get_links( - link_filters.FlatTypeTemplate(['Symbol', 'Symbol', 'Symbol'], 'Expression') + link_filters.FlatTypeTemplate(["Symbol", "Symbol", "Symbol"], "Expression") ) inheritance_links = [] for link in links: @@ -110,7 +109,7 @@ def test_get_links(self, das_remote_fixture_module: DistributedAtomSpace): metta_animal_base_handles.earthworm, metta_animal_base_handles.animal, ], - 'Expression', + "Expression", ) ) assert link[0].handle == metta_animal_base_handles.inheritance_earthworm_animal @@ -137,9 +136,9 @@ def test_get_incoming_links(self, das_remote_fixture_module: DistributedAtomSpac @pytest.mark.skip("Wrong value, review") def test_count_atoms(self, das_remote_fixture_module: DistributedAtomSpace): response = das_remote_fixture_module.count_atoms(parameters={}) - assert response == {'atom_count': 66, 'node_count': 0, 'link_count': 0} - response_local = das_remote_fixture_module.count_atoms({'context': 'local'}) - assert response_local == {'atom_count': 0, 'node_count': 0, 'link_count': 0} + assert response == {"atom_count": 66, "node_count": 0, "link_count": 0} + response_local = das_remote_fixture_module.count_atoms({"context": "local"}) + assert response_local == {"atom_count": 0, "node_count": 0, "link_count": 0} def test_query(self, das_remote_fixture_module: DistributedAtomSpace): all_inheritance_mammal = [ @@ -159,7 +158,7 @@ def test_query(self, das_remote_fixture_module: DistributedAtomSpace): {"atom_type": "node", "type": "Symbol", "name": '"mammal"'}, ], }, - {'no_iterator': True}, + {"no_iterator": True}, ) answer = tuple([item.assignment, item.subgraph] for item in query_answer) @@ -173,19 +172,19 @@ def test_query(self, das_remote_fixture_module: DistributedAtomSpace): link.targets_documents, [ { - 'handle': metta_animal_base_handles.Inheritance, - 'named_type': 'Symbol', - 'name': "Inheritance", + "handle": metta_animal_base_handles.Inheritance, + "named_type": "Symbol", + "name": "Inheritance", }, { - 'handle': metta_animal_base_handles.chimp, - 'named_type': 'Symbol', - 'name': '"chimp"', + "handle": metta_animal_base_handles.chimp, + "named_type": "Symbol", + "name": '"chimp"', }, { - 'handle': metta_animal_base_handles.mammal, - 'named_type': 'Symbol', - 'name': '"mammal"', + "handle": metta_animal_base_handles.mammal, + "named_type": "Symbol", + "name": '"mammal"', }, ], ) @@ -194,19 +193,19 @@ def test_query(self, das_remote_fixture_module: DistributedAtomSpace): link.targets_documents, [ { - 'handle': metta_animal_base_handles.Inheritance, - 'named_type': 'Symbol', - 'name': "Inheritance", + "handle": metta_animal_base_handles.Inheritance, + "named_type": "Symbol", + "name": "Inheritance", }, { - 'handle': metta_animal_base_handles.human, - 'named_type': 'Symbol', - 'name': '"human"', + "handle": metta_animal_base_handles.human, + "named_type": "Symbol", + "name": '"human"', }, { - 'handle': metta_animal_base_handles.mammal, - 'named_type': 'Symbol', - 'name': '"mammal"', + "handle": metta_animal_base_handles.mammal, + "named_type": "Symbol", + "name": '"mammal"', }, ], ) @@ -215,19 +214,19 @@ def test_query(self, das_remote_fixture_module: DistributedAtomSpace): link.targets_documents, [ { - 'handle': metta_animal_base_handles.Inheritance, - 'named_type': 'Symbol', - 'name': "Inheritance", + "handle": metta_animal_base_handles.Inheritance, + "named_type": "Symbol", + "name": "Inheritance", }, { - 'handle': metta_animal_base_handles.monkey, - 'named_type': 'Symbol', - 'name': '"monkey"', + "handle": metta_animal_base_handles.monkey, + "named_type": "Symbol", + "name": '"monkey"', }, { - 'handle': metta_animal_base_handles.mammal, - 'named_type': 'Symbol', - 'name': '"mammal"', + "handle": metta_animal_base_handles.mammal, + "named_type": "Symbol", + "name": '"mammal"', }, ], ) @@ -236,19 +235,19 @@ def test_query(self, das_remote_fixture_module: DistributedAtomSpace): link.targets_documents, [ { - 'handle': metta_animal_base_handles.Inheritance, - 'named_type': 'Symbol', - 'name': "Inheritance", + "handle": metta_animal_base_handles.Inheritance, + "named_type": "Symbol", + "name": "Inheritance", }, { - 'handle': metta_animal_base_handles.rhino, - 'named_type': 'Symbol', - 'name': '"rhino"', + "handle": metta_animal_base_handles.rhino, + "named_type": "Symbol", + "name": '"rhino"', }, { - 'handle': metta_animal_base_handles.mammal, - 'named_type': 'Symbol', - 'name': '"mammal"', + "handle": metta_animal_base_handles.mammal, + "named_type": "Symbol", + "name": '"mammal"', }, ], ) @@ -257,7 +256,7 @@ def test_get_traversal_cursor(self, das_remote_fixture_module: DistributedAtomSp cursor = das_remote_fixture_module.get_traversal_cursor(metta_animal_base_handles.human) assert cursor.get().handle == metta_animal_base_handles.human with pytest.raises(GetTraversalCursorException): - das_remote_fixture_module.get_traversal_cursor('fake_handle') + das_remote_fixture_module.get_traversal_cursor("fake_handle") @pytest.mark.skip(reason="Disabled. Waiting for https://github.com/singnet/das/issues/73") def test_traverse_engine_methods(self, das_remote_fixture_module: DistributedAtomSpace): @@ -267,7 +266,7 @@ def test_traverse_engine_methods(self, das_remote_fixture_module: DistributedAto assert cursor.get().handle == metta_animal_base_handles.dinosaur def is_expression_link(link): - return True if link['type'] == 'Expression' else False + return True if link["type"] == "Expression" else False links_iter = cursor.get_links(filter=is_expression_link) @@ -288,23 +287,23 @@ def is_expression_link(link): assert count == 0 def is_literal(atom: dict): - return True if atom['is_literal'] is True else False + return True if atom["is_literal"] is True else False neighbors_iter = cursor.get_neighbors(cursor_position=1, filter=is_literal) - assert neighbors_iter.get()['handle'] == metta_animal_base_handles.reptile + assert neighbors_iter.get()["handle"] == metta_animal_base_handles.reptile atom = cursor.follow_link(cursor_position=2, filter=is_literal) - assert atom['handle'] == metta_animal_base_handles.triceratops + assert atom["handle"] == metta_animal_base_handles.triceratops cursor.goto(metta_animal_base_handles.human) - assert cursor.get()['handle'] == metta_animal_base_handles.human + assert cursor.get()["handle"] == metta_animal_base_handles.human - @pytest.mark.skip('Wrong values') + @pytest.mark.skip("Wrong values") def test_fetch_atoms(self, das_remote_fixture_module): assert das_remote_fixture_module.backend.count_atoms() == { - 'atom_count': 0, - 'node_count': 0, - 'link_count': 0, + "atom_count": 0, + "node_count": 0, + "link_count": 0, } das_remote_fixture_module.fetch( query={ @@ -318,39 +317,39 @@ def test_fetch_atoms(self, das_remote_fixture_module): } ) assert das_remote_fixture_module.backend.count_atoms() == { - 'atom_count': 10, - 'node_count': 6, - 'link_count': 4, + "atom_count": 10, + "node_count": 6, + "link_count": 4, } - @pytest.mark.skip('Wrong values') + @pytest.mark.skip("Wrong values") def test_fetch_all_data(self, das_remote_fixture_module): assert das_remote_fixture_module.backend.count_atoms() == { - 'atom_count': 0, - 'node_count': 0, - 'link_count': 0, + "atom_count": 0, + "node_count": 0, + "link_count": 0, } das_remote_fixture_module.fetch() assert das_remote_fixture_module.backend.count_atoms() == { - 'atom_count': 66, - 'node_count': 23, - 'link_count': 43, + "atom_count": 66, + "node_count": 23, + "link_count": 43, } def test_create_context(self, das_remote_fixture_module): - context_name = 'my context' + context_name = "my context" context = das_remote_fixture_module.create_context(context_name) assert context.name == context_name @pytest.mark.skip(reason="Disable. See https://github.com/singnet/das-query-engine/issues/259") def test_commit_changes(self, das_remote_fixture_module: DistributedAtomSpace): node = das_remote_fixture_module.get_atom(handle=metta_animal_base_handles.human) - assert hasattr(node, 'test_key') is False - assert 'test_key' not in node.custom_attributes - das_remote_fixture_module.add_node(NodeT(**{'type': 'Symbol', 'name': '"human"'})) + assert hasattr(node, "test_key") is False + assert "test_key" not in node.custom_attributes + das_remote_fixture_module.add_node(NodeT(**{"type": "Symbol", "name": '"human"'})) das_remote_fixture_module.commit_changes() node = das_remote_fixture_module.get_atom(handle=metta_animal_base_handles.human) - assert node.custom_attributes['test_key'] == 'test_value' + assert node.custom_attributes["test_key"] == "test_value" def test_commit_changes_method_with_mode_parameter(self, das_remote_fixture_module): das = das_remote_fixture_module @@ -361,6 +360,9 @@ def test_commit_changes_method_with_mode_parameter(self, das_remote_fixture_modu with pytest.raises(ValueError): das = DistributedAtomSpace( - mode='blah', query_engine='remote', host=remote_das_host, port=get_remote_das_port() + mode="blah", + query_engine="remote", + host=remote_das_host, + port=get_remote_das_port(), ) das.commit_changes() diff --git a/src/tests/python/integration/test_traverse_engine.py b/src/tests/python/integration/test_traverse_engine.py index 103106d..3d3567d 100644 --- a/src/tests/python/integration/test_traverse_engine.py +++ b/src/tests/python/integration/test_traverse_engine.py @@ -39,13 +39,13 @@ def _check_asserts(self, das: DistributedAtomSpace): # Get current_cursor = traverse.get() - assert current_cursor['handle'] == metta_animal_base_handles.human - assert current_cursor['name'] == '"human"' - assert current_cursor['named_type'] == 'Symbol' + assert current_cursor["handle"] == metta_animal_base_handles.human + assert current_cursor["name"] == '"human"' + assert current_cursor["named_type"] == "Symbol" # Get links links = traverse.get_links() - link_handles = sorted([link['handle'] for link in links]) + link_handles = sorted([link["handle"] for link in links]) assert link_handles == sorted( [ metta_animal_base_handles.similarity_human_chimp, @@ -67,8 +67,8 @@ def _check_asserts(self, das: DistributedAtomSpace): ) # Get links with filters - links = traverse.get_links(link_type='Expression', cursor_position=1, target_type='Symbol') - link_handles = sorted([link['handle'] for link in links]) + links = traverse.get_links(link_type="Expression", cursor_position=1, target_type="Symbol") + link_handles = sorted([link["handle"] for link in links]) assert link_handles == sorted( [ metta_animal_base_handles.similarity_human_chimp, @@ -81,7 +81,7 @@ def _check_asserts(self, das: DistributedAtomSpace): # Get neighbors neighbors = traverse.get_neighbors() - neighbors_handles = sorted([neighbor['handle'] for neighbor in neighbors]) + neighbors_handles = sorted([neighbor["handle"] for neighbor in neighbors]) assert neighbors_handles == sorted( [ metta_animal_base_handles.chimp, @@ -97,15 +97,15 @@ def _check_asserts(self, das: DistributedAtomSpace): # Get neighbors with filters def is_literal(atom: dict) -> bool: - return atom['is_literal'] is True + return atom["is_literal"] is True neighbors = traverse.get_neighbors( - link_type='Expression', + link_type="Expression", cursor_position=2, - target_type='Symbol', + target_type="Symbol", filters=(None, is_literal), ) - neighbors_handles = sorted([neighbor['handle'] for neighbor in neighbors]) + neighbors_handles = sorted([neighbor["handle"] for neighbor in neighbors]) assert neighbors_handles == sorted( [ metta_animal_base_handles.chimp, @@ -126,33 +126,36 @@ def is_literal(atom: dict) -> bool: metta_animal_base_handles.Inheritance, metta_animal_base_handles.typedef_mark, ] - assert traverse.get()['handle'] in expected_neighbors + assert traverse.get()["handle"] in expected_neighbors # Follow link with filters def is_ent(atom: dict) -> bool: - return atom['name'] == '"ent"' + return atom["name"] == '"ent"' traverse.goto(metta_animal_base_handles.human) traverse.follow_link( - link_type='Expression', cursor_position=2, target_type='Symbol', filters=(None, is_ent) + link_type="Expression", + cursor_position=2, + target_type="Symbol", + filters=(None, is_ent), ) - assert traverse.get()['name'] == '"ent"' + assert traverse.get()["name"] == '"ent"' # Get neighbors with filter as Tuple traverse = das.get_traversal_cursor(handle=metta_animal_base_handles.human) def is_expression_link(atom): - return atom['named_type'] == 'Expression' + return atom["named_type"] == "Expression" def is_mammal(atom): - return atom['name'] == '"mammal"' + return atom["name"] == '"mammal"' neighbors = traverse.get_neighbors(filters=(is_expression_link, is_mammal)) - assert [i['handle'] for i in neighbors] == [metta_animal_base_handles.mammal] + assert [i["handle"] for i in neighbors] == [metta_animal_base_handles.mammal] neighbors = traverse.get_neighbors(filters=(None, is_mammal)) - assert [i['handle'] for i in neighbors] == [metta_animal_base_handles.mammal] + assert [i["handle"] for i in neighbors] == [metta_animal_base_handles.mammal] neighbors = traverse.get_neighbors(filters=(is_expression_link, None)) - handles = sorted([i['handle'] for i in neighbors]) + handles = sorted([i["handle"] for i in neighbors]) assert handles == sorted( [ metta_animal_base_handles.chimp, @@ -166,7 +169,7 @@ def is_mammal(atom): ] ) neighbors = traverse.get_neighbors(filters=(is_expression_link, None)) - assert sorted([i['handle'] for i in neighbors]) == sorted( + assert sorted([i["handle"] for i in neighbors]) == sorted( [ metta_animal_base_handles.chimp, metta_animal_base_handles.monkey, @@ -193,11 +196,11 @@ def test_traverse_engine_with_das_ram_only(self): def test_traverse_engine_with_das_redis_mongo(self, _cleanup): _db_up() das = DistributedAtomSpace( - query_engine='local', - atomdb='redis_mongo', + query_engine="local", + atomdb="redis_mongo", mongo_port=mongo_port, - mongo_username='dbadmin', - mongo_password='dassecret', + mongo_username="dbadmin", + mongo_password="dassecret", redis_port=redis_port, redis_cluster=False, redis_ssl=False, @@ -209,6 +212,6 @@ def test_traverse_engine_with_das_redis_mongo(self, _cleanup): def test_traverse_engine_with_remote_das(self): das = DistributedAtomSpace( - query_engine='remote', host=remote_das_host, port=get_remote_das_port() + query_engine="remote", host=remote_das_host, port=get_remote_das_port() ) self._check_asserts(das) diff --git a/src/tests/python/unit/adapters/test_ram_only.py b/src/tests/python/unit/adapters/test_ram_only.py index 7d3a250..726a542 100644 --- a/src/tests/python/unit/adapters/test_ram_only.py +++ b/src/tests/python/unit/adapters/test_ram_only.py @@ -5,7 +5,11 @@ from hyperon_das_atomdb import AtomDB from hyperon_das_atomdb.adapters import InMemoryDB from hyperon_das_atomdb.database import LinkT, NodeT -from hyperon_das_atomdb.exceptions import AddLinkException, AddNodeException, AtomDoesNotExist +from hyperon_das_atomdb.exceptions import ( + AddLinkException, + AddNodeException, + AtomDoesNotExist, +) from hyperon_das_atomdb.utils.expression_hasher import ExpressionHasher from tests.python.helpers import dict_to_link_params, dict_to_node_params from tests.python.unit.fixtures import in_memory_db # noqa: F401 @@ -181,8 +185,16 @@ def test_get_link_targets_invalid(self, database: InMemoryDB): "*", {"c93e1e758c53912638438e2a7d7f7b7f"}, ), - ([("Concept", "ent"), ("Concept", "plant")], "*", {"ee1c03e6d1f104ccd811cfbba018451a"}), - ([("Concept", "ent"), ("Concept", "human")], "*", {"a45af31b43ee5ea271214338a5a5bd61"}), + ( + [("Concept", "ent"), ("Concept", "plant")], + "*", + {"ee1c03e6d1f104ccd811cfbba018451a"}, + ), + ( + [("Concept", "ent"), ("Concept", "human")], + "*", + {"a45af31b43ee5ea271214338a5a5bd61"}, + ), ( [("Concept", "human"), ("Concept", "chimp")], "*", @@ -191,7 +203,10 @@ def test_get_link_targets_invalid(self, database: InMemoryDB): ( ["*", ("Concept", "chimp")], "Similarity", - {"b5459e299a5c5e8662c427f7e01b3bf1", "31535ddf214f5b239d3b517823cb8144"}, + { + "b5459e299a5c5e8662c427f7e01b3bf1", + "31535ddf214f5b239d3b517823cb8144", + }, ), ( ["*", ("Concept", "human")], @@ -205,7 +220,10 @@ def test_get_link_targets_invalid(self, database: InMemoryDB): ( [("Concept", "chimp"), "*"], "Similarity", - {"abe6ad743fc81bd1c55ece2e1307a178", "2c927fdc6c0f1272ee439ceb76a6d1a4"}, + { + "abe6ad743fc81bd1c55ece2e1307a178", + "2c927fdc6c0f1272ee439ceb76a6d1a4", + }, ), ( [("Concept", "chimp"), "*"], diff --git a/src/tests/python/unit/adapters/test_redis_mongo_db.py b/src/tests/python/unit/adapters/test_redis_mongo_db.py index 621efc2..e2e9332 100644 --- a/src/tests/python/unit/adapters/test_redis_mongo_db.py +++ b/src/tests/python/unit/adapters/test_redis_mongo_db.py @@ -47,12 +47,15 @@ def database(self, redis_mongo_db: RedisMongoDB): # noqa: F811 @pytest.fixture def database_custom_index(self): - with mock.patch( - "hyperon_das_atomdb.adapters.redis_mongo_db.RedisMongoDB._connection_mongo_db", - return_value=mongo_mock(), - ), mock.patch( - "hyperon_das_atomdb.adapters.redis_mongo_db.RedisMongoDB._connection_redis", - return_value=redis_mock(), + with ( + mock.patch( + "hyperon_das_atomdb.adapters.redis_mongo_db.RedisMongoDB._connection_mongo_db", + return_value=mongo_mock(), + ), + mock.patch( + "hyperon_das_atomdb.adapters.redis_mongo_db.RedisMongoDB._connection_redis", + return_value=redis_mock(), + ), ): yield RedisMongoDB @@ -175,7 +178,12 @@ def test_get_link_targets(self, link_type, targets, expected_count, database: Re assert len(targets) == expected_count @pytest.mark.parametrize( - "handle", ["handle", "2a8a69c01305563932b957de4b3a9ba6", "2a8a69c0130556=z32b957de4b3a9ba6"] + "handle", + [ + "handle", + "2a8a69c01305563932b957de4b3a9ba6", + "2a8a69c0130556=z32b957de4b3a9ba6", + ], ) def test_get_link_targets_invalid(self, handle, database: RedisMongoDB): with pytest.raises(ValueError) as exc_info: @@ -187,7 +195,11 @@ def test_get_link_targets_invalid(self, handle, database: RedisMongoDB): "link_values,expected,expected_count", [ ( - {"link_type": "Evaluation", "target_handles": ["*", "*"], "toplevel_only": True}, + { + "link_type": "Evaluation", + "target_handles": ["*", "*"], + "toplevel_only": True, + }, {"bd2bb6c802a040b00659dfe7954e804d"}, 1, ), @@ -218,7 +230,10 @@ def test_get_link_targets_invalid(self, handle, database: RedisMongoDB): ( { "link_type": "Similarity", - "target_handles": ["*", ExpressionHasher.terminal_hash("Concept", "chimp")], + "target_handles": [ + "*", + ExpressionHasher.terminal_hash("Concept", "chimp"), + ], "toplevel_only": False, }, { @@ -350,7 +365,11 @@ def test_get_node_name(self, node_type, node_name, database: RedisMongoDB): @pytest.mark.parametrize( "handle,", - ["handle", "2a8a69c01305563932b957de4b3a9ba6", "2a8a69c0130556=z32b957de4b3a9ba6"], + [ + "handle", + "2a8a69c01305563932b957de4b3a9ba6", + "2a8a69c0130556=z32b957de4b3a9ba6", + ], ) def test_get_node_name_value_error(self, handle, database: RedisMongoDB): with pytest.raises(ValueError) as exc_info: @@ -430,7 +449,10 @@ def test_get_node_by_field(self, database: RedisMongoDB): "link", ["type"], [{"field": "type", "value": "Evaluation"}], - ["bd2bb6c802a040b00659dfe7954e804d", "cadd63b3fd14e34819bca4803925bf2c"], + [ + "bd2bb6c802a040b00659dfe7954e804d", + "cadd63b3fd14e34819bca4803925bf2c", + ], ), ], ) @@ -652,7 +674,10 @@ def test_redis_keys(self, key, database: RedisMongoDB): ("Concept", "triceratops"), ( "Evaluation", - ["d03e59654221c1e8fcda404fd5c8d6cb", "99d18c702e813b07260baf577c60c455"], + [ + "d03e59654221c1e8fcda404fd5c8d6cb", + "99d18c702e813b07260baf577c60c455", + ], ), ], ), @@ -699,17 +724,26 @@ def test_get_incoming_links_by_links(self, link_type, link_targets, database: Re ("Similarity", ["af12f10f9ae2002a1607ba0b47ba8407", "*"], 3), ( "Inheritance", - ["c1db9b517073e51eb7ef6fed608ec204", "b99ae727c787f1b13b452fd4c9ce1b9a"], + [ + "c1db9b517073e51eb7ef6fed608ec204", + "b99ae727c787f1b13b452fd4c9ce1b9a", + ], 1, ), ( "Evaluation", - ["d03e59654221c1e8fcda404fd5c8d6cb", "99d18c702e813b07260baf577c60c455"], + [ + "d03e59654221c1e8fcda404fd5c8d6cb", + "99d18c702e813b07260baf577c60c455", + ], 1, ), ( "Evaluation", - ["d03e59654221c1e8fcda404fd5c8d6cb", "99d18c702e813b07260baf577c60c455"], + [ + "d03e59654221c1e8fcda404fd5c8d6cb", + "99d18c702e813b07260baf577c60c455", + ], 1, ), ("Evaluation", ["*", "99d18c702e813b07260baf577c60c455"], 1), @@ -742,11 +776,26 @@ def test_redis_patterns(self, link_type, link_targets, expected_count, database: ], 8, ), - ([{"field": "named_type", "value": "Similarity", "positions": [], "arity": 0}], 0), + ( + [ + { + "field": "named_type", + "value": "Similarity", + "positions": [], + "arity": 0, + } + ], + 0, + ), ([{"field": "named_type", "value": "*", "positions": [], "arity": 0}], 1), ( [ - {"field": "named_type", "value": "*", "positions": [0, 1, 2], "arity": 3}, + { + "field": "named_type", + "value": "*", + "positions": [0, 1, 2], + "arity": 3, + }, ], 15, ), @@ -919,13 +968,23 @@ def test_custom_index_templates_load_error( ), ( [ - {"field": "named_type", "value": "*", "positions": [1, "a"], "arity": 3}, + { + "field": "named_type", + "value": "*", + "positions": [1, "a"], + "arity": 3, + }, ], "Value '[1, 'a']' is not supported in 'positions'.", ), ( [ - {"field": "named_type", "value": "*", "positions": [1, 2], "arity": "a"}, + { + "field": "named_type", + "value": "*", + "positions": [1, 2], + "arity": "a", + }, ], "Value 'a' is not supported in 'arity'.", ), @@ -1077,42 +1136,72 @@ def test_custom_index_templates_reindex_find( ), ( [ - {"field": "named_type", "value": "Similarity", "positions": [1], "arity": 2}, + { + "field": "named_type", + "value": "Similarity", + "positions": [1], + "arity": 2, + }, ], ["*", ["*", "*"]], 0, ), ( [ - {"field": "named_type", "value": "Similarity", "positions": [1], "arity": 2}, + { + "field": "named_type", + "value": "Similarity", + "positions": [1], + "arity": 2, + }, ], ["Similarity", ["bb34ce95f161a6b37ff54b3d4c817857", "*"]], 1, ), ( [ - {"field": "named_type", "value": "Similarity", "positions": [1], "arity": 2}, + { + "field": "named_type", + "value": "Similarity", + "positions": [1], + "arity": 2, + }, ], ["Similarity", ["*", "bb34ce95f161a6b37ff54b3d4c817857"]], 0, ), ( [ - {"field": "named_type", "value": "Evaluation", "positions": [0, 1], "arity": 2}, + { + "field": "named_type", + "value": "Evaluation", + "positions": [0, 1], + "arity": 2, + }, ], ["Evaluation", ["*", "*"]], 2, ), ( [ - {"field": "named_type", "value": "*", "positions": [0, 1], "arity": 2}, + { + "field": "named_type", + "value": "*", + "positions": [0, 1], + "arity": 2, + }, ], ["Evaluation", ["*", "*"]], 2, ), ( [ - {"field": "named_type", "value": "Evaluation", "positions": [0, 1], "arity": 2}, + { + "field": "named_type", + "value": "Evaluation", + "positions": [0, 1], + "arity": 2, + }, ], ["*", ["*", "*"]], 0, @@ -1138,7 +1227,12 @@ def test_custom_index_templates_reindex_find( ), ( [ - {"field": "named_type", "value": "*", "positions": [0, 1], "arity": 2}, + { + "field": "named_type", + "value": "*", + "positions": [0, 1], + "arity": 2, + }, ], ["*", ["af12f10f9ae2002a1607ba0b47ba8407", "*"]], 4, @@ -1176,7 +1270,12 @@ def test_custom_index_templates_reindex_find( ), ( [ - {"field": "named_type", "value": "*", "positions": [0, 1, 2, 3], "arity": 5}, + { + "field": "named_type", + "value": "*", + "positions": [0, 1, 2, 3], + "arity": 5, + }, ], ["*", ["*", "*", "*", "*", "af12f10f9ae2002a1607ba0b47ba8407"]], 1, @@ -1207,7 +1306,12 @@ def test_custom_index_templates_reindex_find( ), ( [ - {"field": "named_type", "value": "*", "positions": [1, 2, 3, 4], "arity": 5}, + { + "field": "named_type", + "value": "*", + "positions": [1, 2, 3, 4], + "arity": 5, + }, ], ["*", ["0a32b476852eeb954979b87f5f6cb7af", "*", "*", "*", "*"]], 1, @@ -1289,12 +1393,15 @@ def test_get_atom_type(self, database: RedisMongoDB): def test_create_field_index_node_collection(self, database: RedisMongoDB): database.mongo_atoms_collection = mock.Mock() database.mongo_atoms_collection.create_index.return_value = "name_index_asc" - with mock.patch( - "hyperon_das_atomdb.index.Index.generate_index_id", - return_value="name_index_asc", - ), mock.patch( - "hyperon_das_atomdb.adapters.redis_mongo_db.MongoDBIndex.index_exists", - return_value=False, + with ( + mock.patch( + "hyperon_das_atomdb.index.Index.generate_index_id", + return_value="name_index_asc", + ), + mock.patch( + "hyperon_das_atomdb.adapters.redis_mongo_db.MongoDBIndex.index_exists", + return_value=False, + ), ): result = database.create_field_index("node", ["name"], "Type") @@ -1308,12 +1415,15 @@ def test_create_field_index_node_collection(self, database: RedisMongoDB): def test_create_field_index_link_collection(self, database: RedisMongoDB): database.mongo_atoms_collection = mock.Mock() database.mongo_atoms_collection.create_index.return_value = "field_index_asc" - with mock.patch( - "hyperon_das_atomdb.index.Index.generate_index_id", - return_value="field_index_asc", - ), mock.patch( - "hyperon_das_atomdb.adapters.redis_mongo_db.MongoDBIndex.index_exists", - return_value=False, + with ( + mock.patch( + "hyperon_das_atomdb.index.Index.generate_index_id", + return_value="field_index_asc", + ), + mock.patch( + "hyperon_das_atomdb.adapters.redis_mongo_db.MongoDBIndex.index_exists", + return_value=False, + ), ): result = database.create_field_index("link", ["field"], "Type") @@ -1327,12 +1437,15 @@ def test_create_field_index_link_collection(self, database: RedisMongoDB): def test_create_text_index(self, database: RedisMongoDB): database.mongo_atoms_collection = mock.Mock() database.mongo_atoms_collection.create_index.return_value = "field_index_asc" - with mock.patch( - "hyperon_das_atomdb.index.Index.generate_index_id", - return_value="field_index_asc", - ), mock.patch( - "hyperon_das_atomdb.adapters.redis_mongo_db.MongoDBIndex.index_exists", - return_value=False, + with ( + mock.patch( + "hyperon_das_atomdb.index.Index.generate_index_id", + return_value="field_index_asc", + ), + mock.patch( + "hyperon_das_atomdb.adapters.redis_mongo_db.MongoDBIndex.index_exists", + return_value=False, + ), ): result = database.create_field_index( "link", ["field"], index_type=FieldIndexType.TOKEN_INVERTED_LIST @@ -1346,12 +1459,15 @@ def test_create_text_index(self, database: RedisMongoDB): def test_create_text_index_type(self, database: RedisMongoDB): database.mongo_atoms_collection = mock.Mock() database.mongo_atoms_collection.create_index.return_value = "field_index_asc" - with mock.patch( - "hyperon_das_atomdb.index.Index.generate_index_id", - return_value="field_index_asc", - ), mock.patch( - "hyperon_das_atomdb.adapters.redis_mongo_db.MongoDBIndex.index_exists", - return_value=False, + with ( + mock.patch( + "hyperon_das_atomdb.index.Index.generate_index_id", + return_value="field_index_asc", + ), + mock.patch( + "hyperon_das_atomdb.adapters.redis_mongo_db.MongoDBIndex.index_exists", + return_value=False, + ), ): result = database.create_field_index( "link", ["field"], "Type", index_type=FieldIndexType.TOKEN_INVERTED_LIST @@ -1367,12 +1483,15 @@ def test_create_text_index_type(self, database: RedisMongoDB): def test_create_compound_index_type(self, database: RedisMongoDB): database.mongo_atoms_collection = mock.Mock() database.mongo_atoms_collection.create_index.return_value = "field_index_asc" - with mock.patch( - "hyperon_das_atomdb.index.Index.generate_index_id", - return_value="field_index_asc", - ), mock.patch( - "hyperon_das_atomdb.adapters.redis_mongo_db.MongoDBIndex.index_exists", - return_value=False, + with ( + mock.patch( + "hyperon_das_atomdb.index.Index.generate_index_id", + return_value="field_index_asc", + ), + mock.patch( + "hyperon_das_atomdb.adapters.redis_mongo_db.MongoDBIndex.index_exists", + return_value=False, + ), ): result = database.create_field_index("link", fields=["field", "name"]) @@ -1385,12 +1504,15 @@ def test_create_compound_index_type(self, database: RedisMongoDB): def test_create_compound_index_type_filter(self, database: RedisMongoDB): database.mongo_atoms_collection = mock.Mock() database.mongo_atoms_collection.create_index.return_value = "field_index_asc" - with mock.patch( - "hyperon_das_atomdb.index.Index.generate_index_id", - return_value="field_index_asc", - ), mock.patch( - "hyperon_das_atomdb.adapters.redis_mongo_db.MongoDBIndex.index_exists", - return_value=False, + with ( + mock.patch( + "hyperon_das_atomdb.index.Index.generate_index_id", + return_value="field_index_asc", + ), + mock.patch( + "hyperon_das_atomdb.adapters.redis_mongo_db.MongoDBIndex.index_exists", + return_value=False, + ), ): result = database.create_field_index( "link", named_type="Type", fields=["field", "name"] @@ -1425,12 +1547,15 @@ def test_create_field_index_already_exists(self, database: RedisMongoDB): database.mongo_atoms_collection = mock.Mock() database.mongo_atoms_collection.list_indexes.return_value = [] database.mongo_atoms_collection.create_index.return_value = "name_index_asc" - with mock.patch( - "hyperon_das_atomdb.index.Index.generate_index_id", - return_value="name_index_asc", - ), mock.patch( - "hyperon_das_atomdb.adapters.redis_mongo_db.MongoDBIndex.index_exists", - return_value=False, + with ( + mock.patch( + "hyperon_das_atomdb.index.Index.generate_index_id", + return_value="name_index_asc", + ), + mock.patch( + "hyperon_das_atomdb.adapters.redis_mongo_db.MongoDBIndex.index_exists", + return_value=False, + ), ): database.create_field_index("node", "name", "Type") assert database.create_field_index("node", ["name"], "Type") == "name_index_asc" diff --git a/src/tests/python/unit/adapters/test_redis_mongo_extra.py b/src/tests/python/unit/adapters/test_redis_mongo_extra.py index 4291ff7..22e48c4 100644 --- a/src/tests/python/unit/adapters/test_redis_mongo_extra.py +++ b/src/tests/python/unit/adapters/test_redis_mongo_extra.py @@ -2,7 +2,11 @@ import pytest -from hyperon_das_atomdb.adapters.redis_mongo_db import MongoDBIndex, RedisMongoDB, _HashableDocument +from hyperon_das_atomdb.adapters.redis_mongo_db import ( + MongoDBIndex, + RedisMongoDB, + _HashableDocument, +) from tests.python.helpers import dict_to_node_params from tests.python.unit.fixtures import redis_mongo_db # noqa: F401 @@ -31,11 +35,16 @@ def test_index_create_exceptions(self, params, request): mi.create(**params) @mock.patch( - "hyperon_das_atomdb.adapters.redis_mongo_db.MongoClient", return_value=mock.MagicMock() + "hyperon_das_atomdb.adapters.redis_mongo_db.MongoClient", + return_value=mock.MagicMock(), ) - @mock.patch("hyperon_das_atomdb.adapters.redis_mongo_db.Redis", return_value=mock.MagicMock()) @mock.patch( - "hyperon_das_atomdb.adapters.redis_mongo_db.RedisCluster", return_value=mock.MagicMock() + "hyperon_das_atomdb.adapters.redis_mongo_db.Redis", + return_value=mock.MagicMock(), + ) + @mock.patch( + "hyperon_das_atomdb.adapters.redis_mongo_db.RedisCluster", + return_value=mock.MagicMock(), ) def test_create_db_connection_mongo(self, mock_mongo, mock_redis, mock_redis_cluster): RedisMongoDB(mongo_tls_ca_file="/tmp/mock", redis_password="12", redis_username="A") diff --git a/src/tests/python/unit/fixtures.py b/src/tests/python/unit/fixtures.py index 77adb70..0492e76 100644 --- a/src/tests/python/unit/fixtures.py +++ b/src/tests/python/unit/fixtures.py @@ -39,8 +39,8 @@ def exists(self, key): return 1 return 0 - def cache_overwrite(self, cache=dict()): - self.cache = cache + def cache_overwrite(self, cache): + self.cache = cache or dict() def sadd(self, key, *members): if key not in self.cache: @@ -107,12 +107,15 @@ def redis_mock(): def redis_mongo_db(): mongo_db = mongo_mock() redis_db = redis_mock() - with mock.patch( - "hyperon_das_atomdb.adapters.redis_mongo_db.RedisMongoDB._connection_mongo_db", - return_value=mongo_db, - ), mock.patch( - "hyperon_das_atomdb.adapters.redis_mongo_db.RedisMongoDB._connection_redis", - return_value=redis_db, + with ( + mock.patch( + "hyperon_das_atomdb.adapters.redis_mongo_db.RedisMongoDB._connection_mongo_db", + return_value=mongo_db, + ), + mock.patch( + "hyperon_das_atomdb.adapters.redis_mongo_db.RedisMongoDB._connection_redis", + return_value=redis_db, + ), ): db = RedisMongoDB() diff --git a/src/tests/python/unit/helpers.py b/src/tests/python/unit/helpers.py index 9a44ffe..b63b0da 100644 --- a/src/tests/python/unit/helpers.py +++ b/src/tests/python/unit/helpers.py @@ -5,15 +5,15 @@ def load_n_random_links_by_type( - das: DistributedAtomSpace, n: int, type: str = 'Inheritance' + das: DistributedAtomSpace, n: int, type: str = "Inheritance" ) -> None: - for name in [''.join([choice(ascii_lowercase) for c in range(5)]) for i in range(n)]: + for name in ["".join([choice(ascii_lowercase) for c in range(5)]) for i in range(n)]: das.add_link( { - 'type': type, - 'targets': [ - {'type': 'Concept', 'name': 'human'}, - {'type': 'Concept', 'name': name}, + "type": type, + "targets": [ + {"type": "Concept", "name": "human"}, + {"type": "Concept", "name": name}, ], } ) diff --git a/src/tests/python/unit/mock.py b/src/tests/python/unit/mock.py index d469a67..bddeae3 100644 --- a/src/tests/python/unit/mock.py +++ b/src/tests/python/unit/mock.py @@ -19,26 +19,26 @@ def _build_node_handle(node_type: str, node_name: str) -> str: - return f'<{node_type}: {node_name}>' + return f"<{node_type}: {node_name}>" def _split_node_handle(node_handle: str) -> Tuple[str, str]: - v = re.split('[<: >]', node_handle) + v = re.split("[<: >]", node_handle) return v[1], v[3] def _build_link_handle(link_type: str, target_handles: List[str]) -> str: - if link_type == 'Similarity' or link_type == 'Set': + if link_type == "Similarity" or link_type == "Set": target_handles.sort() - return f'<{link_type}: {target_handles}>' + return f"<{link_type}: {target_handles}>" class DistributedAtomSpaceMock(DistributedAtomSpace): - def __init__(self, query_engine: Optional[str] = 'local', **kwargs) -> None: + def __init__(self, query_engine: Optional[str] = "local", **kwargs) -> None: self.backend = DatabaseAnimals() self.cache_controller = CacheController({}) - if query_engine == 'remote': - with patch('hyperon_das.client.connect_to_server', return_value=(200, 'OK')): + if query_engine == "remote": + with patch("hyperon_das.client.connect_to_server", return_value=(200, "OK")): self.query_engine = RemoteQueryEngine( self.backend, self.cache_controller, {}, **kwargs ) @@ -74,60 +74,60 @@ def __init__(self): for name in self.node_names } - self.human = _build_node_handle(self.node_type, 'human') - self.monkey = _build_node_handle(self.node_type, 'monkey') - self.chimp = _build_node_handle(self.node_type, 'chimp') - self.snake = _build_node_handle(self.node_type, 'snake') - self.earthworm = _build_node_handle(self.node_type, 'earthworm') - self.rhino = _build_node_handle(self.node_type, 'rhino') - self.triceratops = _build_node_handle(self.node_type, 'triceratops') - self.vine = _build_node_handle(self.node_type, 'vine') - self.ent = _build_node_handle(self.node_type, 'ent') - self.mammal = _build_node_handle(self.node_type, 'mammal') - self.animal = _build_node_handle(self.node_type, 'animal') - self.reptile = _build_node_handle(self.node_type, 'reptile') - self.dinosaur = _build_node_handle(self.node_type, 'dinosaur') - self.plant = _build_node_handle(self.node_type, 'plant') + self.human = _build_node_handle(self.node_type, "human") + self.monkey = _build_node_handle(self.node_type, "monkey") + self.chimp = _build_node_handle(self.node_type, "chimp") + self.snake = _build_node_handle(self.node_type, "snake") + self.earthworm = _build_node_handle(self.node_type, "earthworm") + self.rhino = _build_node_handle(self.node_type, "rhino") + self.triceratops = _build_node_handle(self.node_type, "triceratops") + self.vine = _build_node_handle(self.node_type, "vine") + self.ent = _build_node_handle(self.node_type, "ent") + self.mammal = _build_node_handle(self.node_type, "mammal") + self.animal = _build_node_handle(self.node_type, "animal") + self.reptile = _build_node_handle(self.node_type, "reptile") + self.dinosaur = _build_node_handle(self.node_type, "dinosaur") + self.plant = _build_node_handle(self.node_type, "plant") self.all_links: list[list[str]] = [ - ['Similarity', self.human, self.monkey], - ['Similarity', self.human, self.chimp], - ['Similarity', self.chimp, self.monkey], - ['Similarity', self.snake, self.earthworm], - ['Similarity', self.rhino, self.triceratops], - ['Similarity', self.snake, self.vine], - ['Similarity', self.human, self.ent], - ['Inheritance', self.human, self.mammal], - ['Inheritance', self.monkey, self.mammal], - ['Inheritance', self.chimp, self.mammal], - ['Inheritance', self.mammal, self.animal], - ['Inheritance', self.reptile, self.animal], - ['Inheritance', self.snake, self.reptile], - ['Inheritance', self.dinosaur, self.reptile], - ['Inheritance', self.triceratops, self.dinosaur], - ['Inheritance', self.earthworm, self.animal], - ['Inheritance', self.rhino, self.mammal], - ['Inheritance', self.vine, self.plant], - ['Inheritance', self.ent, self.plant], + ["Similarity", self.human, self.monkey], + ["Similarity", self.human, self.chimp], + ["Similarity", self.chimp, self.monkey], + ["Similarity", self.snake, self.earthworm], + ["Similarity", self.rhino, self.triceratops], + ["Similarity", self.snake, self.vine], + ["Similarity", self.human, self.ent], + ["Inheritance", self.human, self.mammal], + ["Inheritance", self.monkey, self.mammal], + ["Inheritance", self.chimp, self.mammal], + ["Inheritance", self.mammal, self.animal], + ["Inheritance", self.reptile, self.animal], + ["Inheritance", self.snake, self.reptile], + ["Inheritance", self.dinosaur, self.reptile], + ["Inheritance", self.triceratops, self.dinosaur], + ["Inheritance", self.earthworm, self.animal], + ["Inheritance", self.rhino, self.mammal], + ["Inheritance", self.vine, self.plant], + ["Inheritance", self.ent, self.plant], [ - 'List', - _build_link_handle('Inheritance', [self.dinosaur, self.reptile]), - _build_link_handle('Inheritance', [self.triceratops, self.dinosaur]), + "List", + _build_link_handle("Inheritance", [self.dinosaur, self.reptile]), + _build_link_handle("Inheritance", [self.triceratops, self.dinosaur]), ], [ - 'Set', - _build_link_handle('Inheritance', [self.dinosaur, self.reptile]), - _build_link_handle('Inheritance', [self.triceratops, self.dinosaur]), + "Set", + _build_link_handle("Inheritance", [self.dinosaur, self.reptile]), + _build_link_handle("Inheritance", [self.triceratops, self.dinosaur]), ], - ['List', self.human, self.ent, self.monkey, self.chimp], - ['List', self.human, self.mammal, self.triceratops, self.vine], - ['List', self.human, self.monkey, self.chimp], - ['List', self.triceratops, self.ent, self.monkey, self.snake], - ['Set', self.triceratops, self.vine, self.monkey, self.snake], - ['Set', self.triceratops, self.ent, self.monkey, self.snake], - ['Set', self.human, self.ent, self.monkey, self.chimp], - ['Set', self.mammal, self.monkey, self.human, self.chimp], - ['Set', self.human, self.monkey, self.chimp], + ["List", self.human, self.ent, self.monkey, self.chimp], + ["List", self.human, self.mammal, self.triceratops, self.vine], + ["List", self.human, self.monkey, self.chimp], + ["List", self.triceratops, self.ent, self.monkey, self.snake], + ["Set", self.triceratops, self.vine, self.monkey, self.snake], + ["Set", self.triceratops, self.ent, self.monkey, self.snake], + ["Set", self.human, self.ent, self.monkey, self.chimp], + ["Set", self.mammal, self.monkey, self.human, self.chimp], + ["Set", self.human, self.monkey, self.chimp], ] self.template_index: dict[str, list[tuple[str, tuple[str, ...]]]] = {} @@ -145,9 +145,13 @@ def __init__(self): self._add_incoming_set(str(link), link[1:]) nested_link = [ - 'Evaluation', + "Evaluation", self.human, - ['Evaluation', self.human, _build_link_handle('Set', [self.monkey, self.mammal])], + [ + "Evaluation", + self.human, + _build_link_handle("Set", [self.monkey, self.mammal]), + ], ] self.all_links.append(nested_link) # type: ignore @@ -191,16 +195,16 @@ def _get_atom(self, handle: str) -> AtomT | None: def is_ordered(self, link_handle: str) -> bool: for link in self.all_links: if _build_link_handle(link[0], link[1:]) == link_handle: - return link[0] != 'Similarity' and link[0] != 'Set' + return link[0] != "Similarity" and link[0] != "Set" return True def get_link_handle(self, link_type: str, target_handles: list[str]) -> str: for link in self.all_links: if link[0] == link_type and len(target_handles) == (len(link) - 1): - if link_type == 'Similarity': + if link_type == "Similarity": if all(target in target_handles for target in link[1:]): return _build_link_handle(link_type, link[1:]) - elif link_type == 'Inheritance': + elif link_type == "Inheritance": for i in range(0, len(target_handles)): if target_handles[i] != link[i + 1]: break @@ -218,17 +222,17 @@ def get_matched_links(self, link_type: str, target_handles: list[str], **kwargs) answer = [] for link in self.all_links: if len(target_handles) == (len(link) - 1) and link[0] == link_type: - if link[0] == 'Similarity' or link[0] == 'Set': + if link[0] == "Similarity" or link[0] == "Set": if all(target == WILDCARD or target in link[1:] for target in target_handles): answer.append(_build_link_handle(link[0], link[1:])) - elif link[0] == 'Inheritance' or link[0] == 'List': + elif link[0] == "Inheritance" or link[0] == "List": for i in range(0, len(target_handles)): if target_handles[i] != WILDCARD and target_handles[i] != link[i + 1]: break else: answer.append(_build_link_handle(link[0], [])) - elif link[0] == 'Evaluation': - answer.append('test') + elif link[0] == "Evaluation": + answer.append("test") else: raise ValueError(f"Invalid link type: {link[0]}") return answer @@ -269,9 +273,9 @@ def get_matched_type(self, link_type: str, **kwargs) -> HandleListT: def get_atom_as_dict(self, handle: str, arity: int | None = 0) -> dict[str, Any]: if handle in self.all_nodes: return { - 'handle': handle, - 'type': handle.split()[0][1:-1], - 'name': handle.split()[1][:-1], + "handle": handle, + "type": handle.split()[0][1:-1], + "name": handle.split()[1][:-1], } match = re.search(r"<([^:]+): (.+)>", handle) _type = match.group(1) @@ -281,10 +285,10 @@ def get_atom_as_dict(self, handle: str, arity: int | None = 0) -> dict[str, Any] template.append(_split_node_handle(target)[0]) if match: return { - 'handle': handle, - 'type': _type, - 'template': template, - 'targets': targets, + "handle": handle, + "type": _type, + "template": template, + "targets": targets, } def get_link_type(self, link_handle: str) -> str | None: @@ -297,9 +301,9 @@ def get_node_type(self, node_handle: str) -> str | None: def count_atoms(self, parameters: dict[str, Any] | None = None) -> dict[str, int]: return { - 'link_count': len(self.all_links), - 'node_count': len(self.all_nodes), - 'atom_count': len(self.all_links) + len(self.all_nodes), + "link_count": len(self.all_links), + "node_count": len(self.all_nodes), + "atom_count": len(self.all_links) + len(self.all_nodes), } # return (len(self.all_nodes), len(self.all_links)) @@ -355,7 +359,7 @@ def get_atoms_by_field(self, query: list[OrderedDict[str, str]]) -> list[str]: def _append_atom(atom, named_type, name): for q in query: - if q['field'] == named_type and q['value'] in name: + if q["field"] == named_type and q["value"] in name: return True return False @@ -419,32 +423,32 @@ def __init__(self): super().__init__() self.all_links = [ - ['Similarity', self.human, self.monkey], - ['Similarity', self.human, self.chimp], - ['Similarity', self.chimp, self.monkey], - ['Similarity', self.snake, self.earthworm], - ['Similarity', self.rhino, self.triceratops], - ['Similarity', self.snake, self.vine], - ['Similarity', self.human, self.ent], - ['Inheritance', self.human, self.mammal], - ['Inheritance', self.monkey, self.mammal], - ['Inheritance', self.chimp, self.mammal], - ['Inheritance', self.mammal, self.animal], - ['Inheritance', self.reptile, self.animal], - ['Inheritance', self.snake, self.reptile], - ['Inheritance', self.dinosaur, self.reptile], - ['Inheritance', self.triceratops, self.dinosaur], - ['Inheritance', self.earthworm, self.animal], - ['Inheritance', self.rhino, self.mammal], - ['Inheritance', self.vine, self.plant], - ['Inheritance', self.ent, self.plant], - ['Similarity', self.monkey, self.human], - ['Similarity', self.chimp, self.human], - ['Similarity', self.monkey, self.chimp], - ['Similarity', self.earthworm, self.snake], - ['Similarity', self.triceratops, self.rhino], - ['Similarity', self.vine, self.snake], - ['Similarity', self.ent, self.human], + ["Similarity", self.human, self.monkey], + ["Similarity", self.human, self.chimp], + ["Similarity", self.chimp, self.monkey], + ["Similarity", self.snake, self.earthworm], + ["Similarity", self.rhino, self.triceratops], + ["Similarity", self.snake, self.vine], + ["Similarity", self.human, self.ent], + ["Inheritance", self.human, self.mammal], + ["Inheritance", self.monkey, self.mammal], + ["Inheritance", self.chimp, self.mammal], + ["Inheritance", self.mammal, self.animal], + ["Inheritance", self.reptile, self.animal], + ["Inheritance", self.snake, self.reptile], + ["Inheritance", self.dinosaur, self.reptile], + ["Inheritance", self.triceratops, self.dinosaur], + ["Inheritance", self.earthworm, self.animal], + ["Inheritance", self.rhino, self.mammal], + ["Inheritance", self.vine, self.plant], + ["Inheritance", self.ent, self.plant], + ["Similarity", self.monkey, self.human], + ["Similarity", self.chimp, self.human], + ["Similarity", self.monkey, self.chimp], + ["Similarity", self.earthworm, self.snake], + ["Similarity", self.triceratops, self.rhino], + ["Similarity", self.vine, self.snake], + ["Similarity", self.ent, self.human], ] self.incoming_set = {} diff --git a/src/tests/python/unit/test_attention_broker_gateway.py b/src/tests/python/unit/test_attention_broker_gateway.py index 1b76a75..c95f7bf 100644 --- a/src/tests/python/unit/test_attention_broker_gateway.py +++ b/src/tests/python/unit/test_attention_broker_gateway.py @@ -8,8 +8,8 @@ def test_creation(self): with pytest.raises(ValueError): AttentionBrokerGateway({}) with pytest.raises(ValueError): - AttentionBrokerGateway({'attention_broker_hostname': 'localhost'}) + AttentionBrokerGateway({"attention_broker_hostname": "localhost"}) with pytest.raises(ValueError): - AttentionBrokerGateway({'attention_broker_port': 27000}) + AttentionBrokerGateway({"attention_broker_port": 27000}) # successful creation is tested in a integration test because it requires # actual connection to a GRPC server diff --git a/src/tests/python/unit/test_cache.py b/src/tests/python/unit/test_cache.py index 03f5c7e..e4a5131 100644 --- a/src/tests/python/unit/test_cache.py +++ b/src/tests/python/unit/test_cache.py @@ -18,11 +18,11 @@ class TestListIterator: def test_list_iterator(self): iterator = ListIterator(None) - for element in iterator: + for _element in iterator: assert False iterator = ListIterator([]) - for element in iterator: + for _element in iterator: assert False iterator = ListIterator( @@ -134,30 +134,30 @@ def test_product_iterator(self): for arg in [[ln, l1], [ln, l1, l2], [ln]]: iterator = ProductIterator([ListIterator(v) for v in arg]) assert iterator.is_empty() - for element in iterator: + for _element in iterator: assert False assert iterator.is_empty() for arg in [[l0, l1], [l0, l1, l2], [l0]]: iterator = ProductIterator([ListIterator(v) for v in arg]) assert iterator.is_empty() - for element in iterator: + for _element in iterator: assert False assert iterator.is_empty() class ConcreteBaseLinksIterator(BaseLinksIterator): def get_current_value(self): - return 'current_value' + return "current_value" def get_fetch_data(self, **kwargs): return 2024, [] def get_fetch_data_kwargs(self): - return {'fetch_data_kwargs': True} + return {"fetch_data_kwargs": True} def get_next_value(self): - return 'next_value' + return "next_value" class TestBaseLinksIterator: @@ -200,13 +200,13 @@ def test_fetch_data(self): def test_refresh_iterator(self): source = ListIterator([1, 2, 3]) iterator = ConcreteBaseLinksIterator(source, cursor=1) - iterator.get_current_value = mock.MagicMock(return_value='current_value') + iterator.get_current_value = mock.MagicMock(return_value="current_value") iterator._refresh_iterator() iterator.get_current_value.assert_called_once() assert iterator.source.source == ListIterator(list(iterator.buffer_queue)).source assert iterator.iterator == iterator.source - assert iterator.current_value == 'current_value' + assert iterator.current_value == "current_value" assert iterator.buffer_queue == deque() def test_is_empty(self): @@ -220,7 +220,7 @@ class TestLocalIncomingLinks: @pytest.fixture def backend(self): backend = mock.MagicMock() - backend.get_atom.side_effect = lambda x, targets_document=None: {'handle': x} + backend.get_atom.side_effect = lambda x, targets_document=None: {"handle": x} return backend def test_get_next_value(self, backend): @@ -258,14 +258,14 @@ def test_get_current_value(self, backend): def test_get_fetch_data_kwargs(self, backend): iterator = LocalIncomingLinks(ListIterator([1, 2, 3]), backend=backend) assert iterator.get_fetch_data_kwargs() == { - 'handles_only': True, - 'cursor': iterator.cursor, - 'chunk_size': iterator.chunk_size, + "handles_only": True, + "cursor": iterator.cursor, + "chunk_size": iterator.chunk_size, } def test_get_fetch_data(self, backend): iterator = LocalIncomingLinks(ListIterator([1, 2, 3]), backend=backend) - kwargs = {'param1': 'value1', 'param2': 'value2'} + kwargs = {"param1": "value1", "param2": "value2"} result = iterator.get_fetch_data(**kwargs) assert result == backend.get_incoming_links(iterator.atom_handle, **kwargs) @@ -273,31 +273,36 @@ def test_get_fetch_data(self, backend): class TestRemoteIncomingLinks: def test_get_next_value(self): source = ListIterator( - [{'handle': 'link1'}, {'handle': 'link2'}, {'handle': 'link3'}, {'handle': 'link4'}] + [ + {"handle": "link1"}, + {"handle": "link2"}, + {"handle": "link3"}, + {"handle": "link4"}, + ] ) iterator = RemoteIncomingLinks(source) - iterator.returned_handles = set(['link2', 'link3']) + iterator.returned_handles = set(["link2", "link3"]) iterator.get_next_value() - assert iterator.current_value == {'handle': 'link1'} + assert iterator.current_value == {"handle": "link1"} iterator.get_next_value() - assert iterator.current_value == {'handle': 'link4'} + assert iterator.current_value == {"handle": "link4"} def test_get_current_value(self): source = ListIterator( [ - {'handle': 'link1'}, - {'handle': 'link2'}, + {"handle": "link1"}, + {"handle": "link2"}, ] ) iterator = RemoteIncomingLinks(source) iterator.get_next_value() - assert iterator.get_current_value() == {'handle': 'link1'} + assert iterator.get_current_value() == {"handle": "link1"} iterator.get_next_value() - assert iterator.get_current_value() == {'handle': 'link2'} + assert iterator.get_current_value() == {"handle": "link2"} iterator = RemoteIncomingLinks(ListIterator([])) assert iterator.is_empty() is True @@ -305,44 +310,50 @@ def test_get_current_value(self): def test_get_fetch_data_kwargs(self): source = ListIterator( [ - {'handle': 'link1'}, - {'handle': 'link2'}, + {"handle": "link1"}, + {"handle": "link2"}, ] ) - iterator = RemoteIncomingLinks(source, atom_handle='atom1', targets_document=True) + iterator = RemoteIncomingLinks(source, atom_handle="atom1", targets_document=True) kwargs = iterator.get_fetch_data_kwargs() assert kwargs == { - 'cursor': iterator.cursor, - 'chunk_size': iterator.chunk_size, - 'targets_document': iterator.targets_document, + "cursor": iterator.cursor, + "chunk_size": iterator.chunk_size, + "targets_document": iterator.targets_document, } def test_get_fetch_data(self): backend = mock.MagicMock() - backend.get_incoming_links.return_value = (123, [{'handle': 'link1'}, {'handle': 'link2'}]) + backend.get_incoming_links.return_value = ( + 123, + [{"handle": "link1"}, {"handle": "link2"}], + ) source = ListIterator([]) - iterator = RemoteIncomingLinks(source, atom_handle='atom1') + iterator = RemoteIncomingLinks(source, atom_handle="atom1") iterator.backend = backend result = iterator.get_fetch_data(cursor=0, chunk_size=100) - assert result == (123, [{'handle': 'link1'}, {'handle': 'link2'}]) - backend.get_incoming_links.assert_called_once_with('atom1', cursor=0, chunk_size=100) + assert result == (123, [{"handle": "link1"}, {"handle": "link2"}]) + backend.get_incoming_links.assert_called_once_with("atom1", cursor=0, chunk_size=100) class TestTraverseLinksIterator: @pytest.fixture def incoming_links(self): - source = ListIterator(['link1', 'link2', 'link3']) + source = ListIterator(["link1", "link2", "link3"]) backend = mock.Mock() targets_document = True backend.get_atom.side_effect = lambda handle, targets_document=targets_document: ( { - 'handle': handle, - 'named_type': f'Type{handle[-1]}', - 'targets': ['node11', f'node{handle[-1]}2'], + "handle": handle, + "named_type": f"Type{handle[-1]}", + "targets": ["node11", f"node{handle[-1]}2"], }, [ - {'handle': 'node11', 'named_type': 'Type2'}, - {'handle': f'node{handle[-1]}2', 'named_type': f'Type{int(handle[-1]) + 1}'}, + {"handle": "node11", "named_type": "Type2"}, + { + "handle": f"node{handle[-1]}2", + "named_type": f"Type{int(handle[-1]) + 1}", + }, ], ) return LocalIncomingLinks(source=source, backend=backend, targets_document=targets_document) @@ -359,19 +370,19 @@ def test_no_filters(self, incoming_links): assert iterator.is_empty() is False assert next(iterator) == { - 'handle': 'link1', - 'named_type': 'Type1', - 'targets': ['node11', 'node12'], + "handle": "link1", + "named_type": "Type1", + "targets": ["node11", "node12"], } assert next(iterator) == { - 'handle': 'link2', - 'named_type': 'Type2', - 'targets': ['node11', 'node22'], + "handle": "link2", + "named_type": "Type2", + "targets": ["node11", "node22"], } assert next(iterator) == { - 'handle': 'link3', - 'named_type': 'Type3', - 'targets': ['node11', 'node32'], + "handle": "link3", + "named_type": "Type3", + "targets": ["node11", "node32"], } with pytest.raises(StopIteration): next(iterator) @@ -379,36 +390,36 @@ def test_no_filters(self, incoming_links): def test_with_filters(self, incoming_links): iterator = TraverseLinksIterator( - source=incoming_links, link_type='Type2', target_type='Type3' + source=incoming_links, link_type="Type2", target_type="Type3" ) assert iterator.is_empty() is False assert next(iterator) == { - 'handle': 'link2', - 'named_type': 'Type2', - 'targets': ['node11', 'node22'], + "handle": "link2", + "named_type": "Type2", + "targets": ["node11", "node22"], } with pytest.raises(StopIteration): next(iterator) assert iterator.is_empty() is True def test_cursor_position(self, incoming_links): - iterator = TraverseLinksIterator(incoming_links, cursor_position=0, cursor='node11') + iterator = TraverseLinksIterator(incoming_links, cursor_position=0, cursor="node11") assert iterator.is_empty() is False assert next(iterator) == { - 'handle': 'link1', - 'named_type': 'Type1', - 'targets': ['node11', 'node12'], + "handle": "link1", + "named_type": "Type1", + "targets": ["node11", "node12"], } assert next(iterator) == { - 'handle': 'link2', - 'named_type': 'Type2', - 'targets': ['node11', 'node22'], + "handle": "link2", + "named_type": "Type2", + "targets": ["node11", "node22"], } assert next(iterator) == { - 'handle': 'link3', - 'named_type': 'Type3', - 'targets': ['node11', 'node32'], + "handle": "link3", + "named_type": "Type3", + "targets": ["node11", "node32"], } with pytest.raises(StopIteration): next(iterator) @@ -416,15 +427,15 @@ def test_cursor_position(self, incoming_links): def test_custom_filter(self, incoming_links): def custom_filter(link): - return link['named_type'] == 'Type3' + return link["named_type"] == "Type3" iterator = TraverseLinksIterator(incoming_links, filter=custom_filter) assert iterator.is_empty() is False assert next(iterator) == { - 'handle': 'link3', - 'named_type': 'Type3', - 'targets': ['node11', 'node32'], + "handle": "link3", + "named_type": "Type3", + "targets": ["node11", "node32"], } with pytest.raises(StopIteration): next(iterator) @@ -434,16 +445,16 @@ def test_targets_only(self, incoming_links): iterator = TraverseLinksIterator(incoming_links, targets_only=True) assert iterator.is_empty() is False assert next(iterator) == [ - {'handle': 'node11', 'named_type': 'Type2'}, - {'handle': 'node12', 'named_type': 'Type2'}, + {"handle": "node11", "named_type": "Type2"}, + {"handle": "node12", "named_type": "Type2"}, ] assert next(iterator) == [ - {'handle': 'node11', 'named_type': 'Type2'}, - {'handle': 'node22', 'named_type': 'Type3'}, + {"handle": "node11", "named_type": "Type2"}, + {"handle": "node22", "named_type": "Type3"}, ] assert next(iterator) == [ - {'handle': 'node11', 'named_type': 'Type2'}, - {'handle': 'node32', 'named_type': 'Type4'}, + {"handle": "node11", "named_type": "Type2"}, + {"handle": "node32", "named_type": "Type4"}, ] with pytest.raises(StopIteration): next(iterator) @@ -453,25 +464,28 @@ def test_targets_only(self, incoming_links): class TestTraverseNeighborsIterator: @pytest.fixture def traverse_links_iterator(self): - source = ListIterator(['link1', 'link2', 'link3']) + source = ListIterator(["link1", "link2", "link3"]) backend = mock.Mock() targets_document = True backend.get_atom.side_effect = lambda handle, targets_document=targets_document: ( { - 'handle': handle, - 'named_type': f'Type{handle[-1]}', - 'targets': ['node11', f'node{handle[-1]}2'], + "handle": handle, + "named_type": f"Type{handle[-1]}", + "targets": ["node11", f"node{handle[-1]}2"], }, [ - {'handle': 'node11', 'named_type': 'Type2'}, - {'handle': f'node{handle[-1]}2', 'named_type': f'Type{int(handle[-1]) + 1}'}, + {"handle": "node11", "named_type": "Type2"}, + { + "handle": f"node{handle[-1]}2", + "named_type": f"Type{int(handle[-1]) + 1}", + }, ], ) incoming_links = LocalIncomingLinks( source=source, backend=backend, targets_document=targets_document ) - return TraverseLinksIterator(incoming_links, targets_only=True, cursor='node11') + return TraverseLinksIterator(incoming_links, targets_only=True, cursor="node11") def test_init(self, traverse_links_iterator): iterator = TraverseNeighborsIterator(source=traverse_links_iterator) @@ -479,9 +493,9 @@ def test_init(self, traverse_links_iterator): assert iterator.buffered_answer is not None assert iterator.cursor == traverse_links_iterator.cursor assert iterator.target_type == traverse_links_iterator.target_type - assert iterator.visited_neighbors == ['node12'] + assert iterator.visited_neighbors == ["node12"] assert iterator.iterator == traverse_links_iterator - assert iterator.current_value == {'handle': 'node12', 'named_type': 'Type2'} + assert iterator.current_value == {"handle": "node12", "named_type": "Type2"} def test_next_with_buffered_answer(self): iterator = TraverseNeighborsIterator(source=mock.Mock()) @@ -492,29 +506,29 @@ def test_next_with_buffered_answer(self): def test_next_without_buffered_answer(self, traverse_links_iterator): iterator = TraverseNeighborsIterator(source=traverse_links_iterator) - assert next(iterator) == {'handle': 'node12', 'named_type': 'Type2'} - assert next(iterator) == {'handle': 'node22', 'named_type': 'Type3'} - assert next(iterator) == {'handle': 'node32', 'named_type': 'Type4'} + assert next(iterator) == {"handle": "node12", "named_type": "Type2"} + assert next(iterator) == {"handle": "node22", "named_type": "Type3"} + assert next(iterator) == {"handle": "node32", "named_type": "Type4"} with pytest.raises(StopIteration): next(iterator) def test_process_targets(self, traverse_links_iterator): iterator = TraverseNeighborsIterator(source=traverse_links_iterator) targets = [ - {'handle': 'node11', 'named_type': 'Type2'}, - {'handle': 'node22', 'named_type': 'Type3'}, + {"handle": "node11", "named_type": "Type2"}, + {"handle": "node22", "named_type": "Type3"}, ] answer, match_found = iterator._process_targets(targets) - assert answer == [{'handle': 'node22', 'named_type': 'Type3'}] + assert answer == [{"handle": "node22", "named_type": "Type3"}] assert match_found is True def test_filter(self, traverse_links_iterator): iterator = TraverseNeighborsIterator(source=traverse_links_iterator) - target = {'handle': 'node11', 'named_type': 'Type2'} + target = {"handle": "node11", "named_type": "Type2"} assert iterator._filter(target) is False - target = {'handle': 'node22', 'named_type': 'Type3'} + target = {"handle": "node22", "named_type": "Type3"} assert iterator._filter(target) is True def test_is_empty(self): @@ -524,5 +538,5 @@ def test_is_empty(self): iterator.current_value = None assert iterator.is_empty() is True - iterator.current_value = {'handle': 1} + iterator.current_value = {"handle": 1} assert iterator.is_empty() is False diff --git a/src/tests/python/unit/test_cache_controller.py b/src/tests/python/unit/test_cache_controller.py index 5c2ac44..32e6553 100644 --- a/src/tests/python/unit/test_cache_controller.py +++ b/src/tests/python/unit/test_cache_controller.py @@ -9,9 +9,9 @@ from hyperon_das.utils import QueryAnswer SYSTEM_PARAMETERS = { - 'attention_broker_hostname': None, - 'attention_broker_port': None, - 'cache_enabled': False, + "attention_broker_hostname": None, + "attention_broker_port": None, + "cache_enabled": False, } @@ -31,7 +31,7 @@ class TestCacheController: def _build_controller(self): params = SYSTEM_PARAMETERS.copy() controller = CacheController(params) - params['cache_enabled'] = True + params["cache_enabled"] = True controller.attention_broker = AttentionBrokerGatewayMock() return controller @@ -40,71 +40,77 @@ def test_creation(self): controller = CacheController({}) assert not controller.enabled() # assert default == False with pytest.raises(ValueError): - controller = CacheController({'cache_enabled': True}) - controller = CacheController({'cache_enabled': False}) + controller = CacheController({"cache_enabled": True}) + controller = CacheController({"cache_enabled": False}) assert not controller.enabled() def test_get_atom(self): controller = CacheController({}) - assert controller.get_atom('blah') is None + assert controller.get_atom("blah") is None def test_add_context(self): controller = self._build_controller() - node = NodeT(type='Context', name='blah') - node.handle = node._id = 'h1' + node = NodeT(type="Context", name="blah") + node.handle = node._id = "h1" context = Context( node, [ - [QueryAnswer({'handle': 'h1'}, None), QueryAnswer({'handle': 'h2'}, None)], - [QueryAnswer({'handle': 'h1'}, None), QueryAnswer({'handle': 'h3'}, None)], + [ + QueryAnswer({"handle": "h1"}, None), + QueryAnswer({"handle": "h2"}, None), + ], + [ + QueryAnswer({"handle": "h1"}, None), + QueryAnswer({"handle": "h3"}, None), + ], ], ) controller.add_context(context) broker = controller.attention_broker assert len(controller.attention_broker.handle_set_list) == 4 - assert broker.handle_set_list[0] == set(['h1']) - assert broker.handle_set_list[1] == set(['h2']) - assert broker.handle_set_list[2] == set(['h1']) - assert broker.handle_set_list[3] == set(['h3']) + assert broker.handle_set_list[0] == set(["h1"]) + assert broker.handle_set_list[1] == set(["h2"]) + assert broker.handle_set_list[2] == set(["h1"]) + assert broker.handle_set_list[3] == set(["h3"]) assert len(broker.handle_count) == 2 - assert broker.handle_count['h1'] == 1 - assert broker.handle_count['h3'] == 1 + assert broker.handle_count["h1"] == 1 + assert broker.handle_count["h3"] == 1 def test_regard_query_answer(self): controller = self._build_controller() - query_answer_1 = QueryAnswer({'handle': 'h7'}, None) + query_answer_1 = QueryAnswer({"handle": "h7"}, None) query_answer_2 = QueryAnswer( { - 'handle': 'h1', - 'targets': [ - {'handle': 'h8'}, - {'handle': 'h9'}, + "handle": "h1", + "targets": [ + {"handle": "h8"}, + {"handle": "h9"}, ], }, None, ) query_answer_3 = QueryAnswer( { - 'handle': 'h1', - 'targets': [ - {'handle': 'h2'}, + "handle": "h1", + "targets": [ + {"handle": "h2"}, { - 'handle': 'h2', - 'targets': [ - {'handle': 'h4'}, - {'handle': 'h1'}, + "handle": "h2", + "targets": [ + {"handle": "h4"}, + {"handle": "h1"}, ], }, { - 'handle': 'h5', - 'targets': [ - {'handle': 'h1'}, - {'handle': 'h6'}, + "handle": "h5", + "targets": [ + {"handle": "h1"}, + {"handle": "h6"}, ], }, - {'handle': 'h3'}, + {"handle": "h3"}, ], }, None, @@ -114,20 +120,20 @@ def test_regard_query_answer(self): broker = controller.attention_broker assert len(controller.attention_broker.handle_set_list) == 3 - assert broker.handle_set_list[0] == set(['h7']) - assert broker.handle_set_list[1] == set(['h1', 'h8', 'h9']) - assert broker.handle_set_list[2] == set(['h1', 'h2', 'h3', 'h4', 'h5', 'h6']) + assert broker.handle_set_list[0] == set(["h7"]) + assert broker.handle_set_list[1] == set(["h1", "h8", "h9"]) + assert broker.handle_set_list[2] == set(["h1", "h2", "h3", "h4", "h5", "h6"]) all_handles = set() for handle_set in broker.handle_set_list: all_handles.update(handle_set) assert len(broker.handle_count) == len(all_handles) - assert broker.handle_count['h1'] == 4 - assert broker.handle_count['h2'] == 2 - assert broker.handle_count['h3'] == 1 - assert broker.handle_count['h4'] == 1 - assert broker.handle_count['h5'] == 1 - assert broker.handle_count['h6'] == 1 - assert broker.handle_count['h7'] == 1 - assert broker.handle_count['h8'] == 1 - assert broker.handle_count['h9'] == 1 + assert broker.handle_count["h1"] == 4 + assert broker.handle_count["h2"] == 2 + assert broker.handle_count["h3"] == 1 + assert broker.handle_count["h4"] == 1 + assert broker.handle_count["h5"] == 1 + assert broker.handle_count["h6"] == 1 + assert broker.handle_count["h7"] == 1 + assert broker.handle_count["h8"] == 1 + assert broker.handle_count["h9"] == 1 diff --git a/src/tests/python/unit/test_client.py b/src/tests/python/unit/test_client.py index b24a602..55170da 100644 --- a/src/tests/python/unit/test_client.py +++ b/src/tests/python/unit/test_client.py @@ -6,20 +6,24 @@ import hyperon_das.link_filters as link_filter from hyperon_das.client import FunctionsClient -from hyperon_das.exceptions import FunctionsConnectionError, FunctionsTimeoutError, RequestError +from hyperon_das.exceptions import ( + FunctionsConnectionError, + FunctionsTimeoutError, + RequestError, +) from hyperon_das.utils import serialize class TestFunctionsClient: @pytest.fixture def mock_request(self): - with patch('requests.sessions.Session.request') as mock_request: + with patch("requests.sessions.Session.request") as mock_request: yield mock_request @pytest.fixture def client(self): - with patch('hyperon_das.utils.check_server_connection', return_value=(200, 'OK')): - return FunctionsClient(host='0.0.0.0', port=1000) + with patch("hyperon_das.utils.check_server_connection", return_value=(200, "OK")): + return FunctionsClient(host="0.0.0.0", port=1000) def test_get_atom_success(self, mock_request, client): expected_request_data = {"action": "get_atom", "input": {"handle": "123"}} @@ -33,13 +37,13 @@ def test_get_atom_success(self, mock_request, client): mock_request.return_value.status_code = 200 mock_request.return_value.content = serialize(expected_response) - result = client.get_atom(handle='123') + result = client.get_atom(handle="123") mock_request.assert_called_with( - method='POST', - url='http://0.0.0.0:1000/function/query-engine', + method="POST", + url="http://0.0.0.0:1000/function/query-engine", data=serialize(expected_request_data), - headers={'Content-Type': 'application/octet-stream'}, + headers={"Content-Type": "application/octet-stream"}, ) assert result == expected_response @@ -57,13 +61,13 @@ def test_create_context_success(self, mock_request, client): mock_request.return_value.status_code = 200 mock_request.return_value.content = serialize(expected_response) - result = client.create_context(name='n', queries=[]) + result = client.create_context(name="n", queries=[]) mock_request.assert_called_with( - method='POST', - url='http://0.0.0.0:1000/function/query-engine', + method="POST", + url="http://0.0.0.0:1000/function/query-engine", data=serialize(expected_request_data), - headers={'Content-Type': 'application/octet-stream'}, + headers={"Content-Type": "application/octet-stream"}, ) assert result == expected_response @@ -89,7 +93,10 @@ def test_get_links_success(self, mock_request, client): "handle": "ee1c03e6d1f104ccd811cfbba018451a", "type": "Inheritance", "template": ["Inheritance", "Concept", "Concept"], - "targets": ["4e8e26e3276af8a5c2ac2cc2dc95c6d2", "80aff30094874e75028033a38ce677bb"], + "targets": [ + "4e8e26e3276af8a5c2ac2cc2dc95c6d2", + "80aff30094874e75028033a38ce677bb", + ], } ] @@ -98,16 +105,19 @@ def test_get_links_success(self, mock_request, client): result = client.get_links( link_filter.Targets( - ['4e8e26e3276af8a5c2ac2cc2dc95c6d2', '80aff30094874e75028033a38ce677bb'], - 'Inheritance', + [ + "4e8e26e3276af8a5c2ac2cc2dc95c6d2", + "80aff30094874e75028033a38ce677bb", + ], + "Inheritance", ) ) mock_request.assert_called_with( - method='POST', - url='http://0.0.0.0:1000/function/query-engine', + method="POST", + url="http://0.0.0.0:1000/function/query-engine", data=serialize(expected_request_data), - headers={'Content-Type': 'application/octet-stream'}, + headers={"Content-Type": "application/octet-stream"}, ) assert result == expected_response @@ -162,10 +172,10 @@ def test_query_success(self, mock_request, client): result = client.query(query, parameters=[]) mock_request.assert_called_with( - method='POST', - url='http://0.0.0.0:1000/function/query-engine', + method="POST", + url="http://0.0.0.0:1000/function/query-engine", data=serialize(expected_request_data), - headers={'Content-Type': 'application/octet-stream'}, + headers={"Content-Type": "application/octet-stream"}, ) assert result == expected_response @@ -178,9 +188,13 @@ def test_query_success(self, mock_request, client): "query": { "atom_type": "link", "targets": [ - {'atom_type': 'variable', 'name': 'v1'}, - {'atom_type': 'node', 'type': 'Symbol', 'name': '"earthworm"'}, - {'atom_type': 'variable', 'name': 'v2'}, + {"atom_type": "variable", "name": "v1"}, + { + "atom_type": "node", + "type": "Symbol", + "name": '"earthworm"', + }, + {"atom_type": "variable", "name": "v2"}, ], }, "parameters": [], @@ -188,7 +202,7 @@ def test_query_success(self, mock_request, client): ), ( { - "query": {"atom_type": "link", 'type': 'Expression'}, + "query": {"atom_type": "link", "type": "Expression"}, "parameters": [], } ), @@ -196,11 +210,15 @@ def test_query_success(self, mock_request, client): { "query": { "atom_type": "node", - 'type': 'Expression', + "type": "Expression", "targets": [ - {'atom_type': 'variable', 'name': 'v1'}, - {'atom_type': 'node', 'type': 'Symbol', 'name': '"earthworm"'}, - {'atom_type': 'variable', 'name': 'v2'}, + {"atom_type": "variable", "name": "v1"}, + { + "atom_type": "node", + "type": "Symbol", + "name": '"earthworm"', + }, + {"atom_type": "variable", "name": "v2"}, ], }, "parameters": [], @@ -230,10 +248,10 @@ def test_query_malformed(self, query, mock_request, client): client.query(query, parameters=[]) mock_request.assert_called_with( - method='POST', - url='http://0.0.0.0:1000/function/query-engine', + method="POST", + url="http://0.0.0.0:1000/function/query-engine", data=serialize(expected_request_data), - headers={'Content-Type': 'application/octet-stream'}, + headers={"Content-Type": "application/octet-stream"}, ) def test_count_atoms_success(self, mock_request, client): @@ -245,37 +263,37 @@ def test_count_atoms_success(self, mock_request, client): result = client.count_atoms() mock_request.assert_called_once_with( - method='POST', - url='http://0.0.0.0:1000/function/query-engine', + method="POST", + url="http://0.0.0.0:1000/function/query-engine", data=serialize(expected_request_data), - headers={'Content-Type': 'application/octet-stream'}, + headers={"Content-Type": "application/octet-stream"}, ) assert result == expected_response def test_count_atoms_success_parameters(self, mock_request, client): - values = {'parameters': {'context': 'local'}} + values = {"parameters": {"context": "local"}} expected_request_data = {"action": "count_atoms", "input": values} expected_response = (14, 26) mock_request.return_value.status_code = 200 mock_request.return_value.content = serialize(expected_response) - result = client.count_atoms(values['parameters']) + result = client.count_atoms(values["parameters"]) mock_request.assert_called_once_with( - method='POST', - url='http://0.0.0.0:1000/function/query-engine', + method="POST", + url="http://0.0.0.0:1000/function/query-engine", data=serialize(expected_request_data), - headers={'Content-Type': 'application/octet-stream'}, + headers={"Content-Type": "application/octet-stream"}, ) assert result == expected_response def test_get_atoms_by_field(self, mock_request, client): - query = [{'field': 'name', 'value': 'test'}] + query = [{"field": "name", "value": "test"}] expected_request_data = { "action": "get_atoms_by_field", - "input": {'query': {k['field']: k['value'] for k in query}}, + "input": {"query": {k["field"]: k["value"] for k in query}}, } expected_response = (14, 26) mock_request.return_value.status_code = 200 @@ -283,35 +301,38 @@ def test_get_atoms_by_field(self, mock_request, client): result = client.get_atoms_by_field(query=query) mock_request.assert_called_once_with( - method='POST', - url='http://0.0.0.0:1000/function/query-engine', + method="POST", + url="http://0.0.0.0:1000/function/query-engine", data=serialize(expected_request_data), - headers={'Content-Type': 'application/octet-stream'}, + headers={"Content-Type": "application/octet-stream"}, ) assert result == expected_response def test_get_atoms_by_text_field(self, mock_request, client): - expected_input = {'text_value': 'value'} - expected_request_data = {"action": "get_atoms_by_text_field", "input": expected_input} + expected_input = {"text_value": "value"} + expected_request_data = { + "action": "get_atoms_by_text_field", + "input": expected_input, + } expected_response = (14, 26) mock_request.return_value.status_code = 200 mock_request.return_value.content = serialize(expected_response) result = client.get_atoms_by_text_field(**expected_input) mock_request.assert_called_once_with( - method='POST', - url='http://0.0.0.0:1000/function/query-engine', + method="POST", + url="http://0.0.0.0:1000/function/query-engine", data=serialize(expected_request_data), - headers={'Content-Type': 'application/octet-stream'}, + headers={"Content-Type": "application/octet-stream"}, ) assert result == expected_response def test_get_node_by_name_starting_with(self, mock_request, client): expected_input = { - 'node_type': 'Concept', - 'startswith': 'nam', + "node_type": "Concept", + "startswith": "nam", } expected_request_data = { "action": "get_node_by_name_starting_with", @@ -323,10 +344,10 @@ def test_get_node_by_name_starting_with(self, mock_request, client): result = client.get_node_by_name_starting_with(**expected_input) mock_request.assert_called_once_with( - method='POST', - url='http://0.0.0.0:1000/function/query-engine', + method="POST", + url="http://0.0.0.0:1000/function/query-engine", data=serialize(expected_request_data), - headers={'Content-Type': 'application/octet-stream'}, + headers={"Content-Type": "application/octet-stream"}, ) assert result == expected_response @@ -346,10 +367,10 @@ def test_send_request_success(self, mock_request, client): result = client._send_request(payload) mock_request.assert_called_with( - method='POST', - url='http://0.0.0.0:1000/function/query-engine', + method="POST", + url="http://0.0.0.0:1000/function/query-engine", data=serialize(payload), - headers={'Content-Type': 'application/octet-stream'}, + headers={"Content-Type": "application/octet-stream"}, ) assert result == expected_response diff --git a/src/tests/python/unit/test_context.py b/src/tests/python/unit/test_context.py index 1e3a4e9..6bf421d 100644 --- a/src/tests/python/unit/test_context.py +++ b/src/tests/python/unit/test_context.py @@ -5,9 +5,9 @@ class TestContext: def test_creation(self): - context_name = 'blah' - context_handle = 'h' - node = NodeT(type='Context', name=context_name) + context_name = "blah" + context_handle = "h" + node = NodeT(type="Context", name=context_name) node.handle = node._id = context_handle context = Context(node, []) assert context.name == context_name diff --git a/src/tests/python/unit/test_das.py b/src/tests/python/unit/test_das.py index ae192ea..86b3d78 100644 --- a/src/tests/python/unit/test_das.py +++ b/src/tests/python/unit/test_das.py @@ -18,46 +18,47 @@ def test_create_das(self): assert isinstance(das.backend, InMemoryDB) assert isinstance(das.query_engine, LocalQueryEngine) - with mock.patch('hyperon_das.utils.check_server_connection', return_value=(200, 'OK')): - das = DistributedAtomSpace(query_engine='remote', host='0.0.0.0', port=1234) + with mock.patch("hyperon_das.utils.check_server_connection", return_value=(200, "OK")): + das = DistributedAtomSpace(query_engine="remote", host="0.0.0.0", port=1234) assert isinstance(das.backend, InMemoryDB) assert isinstance(das.query_engine, RemoteQueryEngine) with pytest.raises(InvalidAtomDB): - das = DistributedAtomSpace(atomdb='snet') + das = DistributedAtomSpace(atomdb="snet") with pytest.raises(InvalidQueryEngine) as exc: - das = DistributedAtomSpace(query_engine='snet') + das = DistributedAtomSpace(query_engine="snet") assert exc.value.message == "Use either 'local' or 'remote'" - assert exc.value.details == 'query_engine=snet' + assert exc.value.details == "query_engine=snet" def test_get_incoming_links(self): das = DistributedAtomSpaceMock() - links = das.get_incoming_links('', handles_only=True) + links = das.get_incoming_links("", handles_only=True) assert len(links) == 7 - links = das.get_incoming_links('') + links = das.get_incoming_links("") assert len(links) == 7 - with mock.patch('hyperon_das.utils.check_server_connection', return_value=(200, 'OK')): - das_remote = DistributedAtomSpaceMock('remote', host='test', port=8080) + with mock.patch("hyperon_das.utils.check_server_connection", return_value=(200, "OK")): + das_remote = DistributedAtomSpaceMock("remote", host="test", port=8080) - with mock.patch('hyperon_das.client.FunctionsClient.get_incoming_links', return_value=[]): - links = das_remote.get_incoming_links('') + with mock.patch("hyperon_das.client.FunctionsClient.get_incoming_links", return_value=[]): + links = das_remote.get_incoming_links("") assert len(links) == 7 with mock.patch( - 'hyperon_das.client.FunctionsClient.get_incoming_links', return_value=[1, 2, 3, 4] + "hyperon_das.client.FunctionsClient.get_incoming_links", + return_value=[1, 2, 3, 4], ): - links = das_remote.get_incoming_links('') + links = das_remote.get_incoming_links("") assert links == [1, 2, 3, 4] with mock.patch( - 'hyperon_das.client.FunctionsClient.get_incoming_links', + "hyperon_das.client.FunctionsClient.get_incoming_links", return_value=["['Inheritance', '', '']"], ): - links = das_remote.get_incoming_links('', handles_only=True) + links = das_remote.get_incoming_links("", handles_only=True) assert set(links) == { "['Inheritance', '', '']", "['Similarity', '', '']", @@ -67,30 +68,30 @@ def test_get_incoming_links(self): def test_get_traversal_cursor(self): das = DistributedAtomSpace() - das.add_node(NodeT(type='Concept', name='human')) - human = das.compute_node_handle('Concept', 'human') + das.add_node(NodeT(type="Concept", name="human")) + human = das.compute_node_handle("Concept", "human") cursor = das.get_traversal_cursor(human) assert isinstance(cursor, TraverseEngine) with pytest.raises(GetTraversalCursorException) as exc: - das.get_traversal_cursor(handle='snet') + das.get_traversal_cursor(handle="snet") - assert exc.value.message == 'Cannot start Traversal. Atom does not exist' + assert exc.value.message == "Cannot start Traversal. Atom does not exist" def test_get_atom(self): das = DistributedAtomSpace() das.add_link( LinkT( - type='expression', + type="expression", targets=[ - NodeT(type='symbol', name='a'), + NodeT(type="symbol", name="a"), LinkT( - type='expression', + type="expression", targets=[ - NodeT(type='symbol', name='b'), - NodeT(type='symbol', name='c'), + NodeT(type="symbol", name="b"), + NodeT(type="symbol", name="c"), ], ), ], @@ -98,43 +99,43 @@ def test_get_atom(self): ) handle = {} - for n in ['a', 'b', 'c']: - handle[n] = das.compute_node_handle('symbol', n) + for n in ["a", "b", "c"]: + handle[n] = das.compute_node_handle("symbol", n) - handle['internal_link'] = das.compute_link_handle('expression', [handle['b'], handle['c']]) - handle['external_link'] = das.compute_link_handle( - 'expression', [handle['a'], handle['internal_link']] + handle["internal_link"] = das.compute_link_handle("expression", [handle["b"], handle["c"]]) + handle["external_link"] = das.compute_link_handle( + "expression", [handle["a"], handle["internal_link"]] ) - for n in ['a', 'b', 'c']: + for n in ["a", "b", "c"]: document = das.get_atom(handle[n]) - assert document.named_type == 'symbol' + assert document.named_type == "symbol" assert document.name == n assert document.handle == handle[n] - document = das.get_atom(handle['internal_link']) - assert document.named_type == 'expression' - assert document.handle == handle['internal_link'] - assert document.targets == [handle['b'], handle['c']] + document = das.get_atom(handle["internal_link"]) + assert document.named_type == "expression" + assert document.handle == handle["internal_link"] + assert document.targets == [handle["b"], handle["c"]] - document = das.get_atom(handle['external_link']) - assert document.named_type == 'expression' - assert document.handle == handle['external_link'] - assert document.targets == [handle['a'], handle['internal_link']] + document = das.get_atom(handle["external_link"]) + assert document.named_type == "expression" + assert document.handle == handle["external_link"] + assert document.targets == [handle["a"], handle["internal_link"]] - assert das.get_atoms([handle['a'], handle['external_link'], handle['c']]) == [ - das.get_atom(handle['a']), - das.get_atom(handle['external_link']), - das.get_atom(handle['c']), + assert das.get_atoms([handle["a"], handle["external_link"], handle["c"]]) == [ + das.get_atom(handle["a"]), + das.get_atom(handle["external_link"]), + das.get_atom(handle["c"]), ] def test_about(self): das = DistributedAtomSpace() assert isinstance(das.about(), dict) - assert 'das' in das.about() - assert 'atom_db' in das.about() - assert {'name', 'version', 'summary'} == set(das.about().get('das').keys()) - assert {'name', 'version', 'summary'} == set(das.about().get('atom_db').keys()) + assert "das" in das.about() + assert "atom_db" in das.about() + assert {"name", "version", "summary"} == set(das.about().get("das").keys()) + assert {"name", "version", "summary"} == set(das.about().get("atom_db").keys()) def test_create_context(self): das = DistributedAtomSpace() @@ -143,55 +144,55 @@ def test_create_context(self): def test_get_atoms_by_field(self): das = DistributedAtomSpaceMock() - atom_field = das.get_atoms_by_field({'Concept': 'human'}) + atom_field = das.get_atoms_by_field({"Concept": "human"}) assert atom_field def test_get_atoms_by_text_field(self): das = DistributedAtomSpaceMock() - atom_text_field = das.get_atoms_by_text_field(text_value='human', field='name') + atom_text_field = das.get_atoms_by_text_field(text_value="human", field="name") assert atom_text_field def test_get_node_by_name_starting_with(self): das = DistributedAtomSpaceMock() - atom_starting_with = das.get_node_by_name_starting_with('Concept', 'mon') + atom_starting_with = das.get_node_by_name_starting_with("Concept", "mon") assert atom_starting_with def test_count_atoms(self): das = DistributedAtomSpaceMock() atom_count = das.count_atoms() - assert atom_count == {'link_count': 26, 'node_count': 14, 'atom_count': 40} + assert atom_count == {"link_count": 26, "node_count": 14, "atom_count": 40} def test_count_atoms_local(self): das = DistributedAtomSpaceMock() - atom_count = das.count_atoms({'context': 'local'}) - assert atom_count == {'link_count': 26, 'node_count': 14, 'atom_count': 40} + atom_count = das.count_atoms({"context": "local"}) + assert atom_count == {"link_count": 26, "node_count": 14, "atom_count": 40} def test_count_atoms_local_remote(self): das = DistributedAtomSpaceMock() - atom_count = das.count_atoms({'context': 'remote'}) + atom_count = das.count_atoms({"context": "remote"}) assert atom_count == {} def test_count_atoms_local_both(self): das = DistributedAtomSpaceMock() - atom_count = das.count_atoms({'context': 'both'}) - assert atom_count == {'link_count': 26, 'node_count': 14, 'atom_count': 40} + atom_count = das.count_atoms({"context": "both"}) + assert atom_count == {"link_count": 26, "node_count": 14, "atom_count": 40} # assert atom_count == (14, 26) def test_count_atoms_remote(self): - das = DistributedAtomSpaceMock('remote', host='localhost', port=123) + das = DistributedAtomSpaceMock("remote", host="localhost", port=123) with mock.patch( - 'hyperon_das.client.FunctionsClient.count_atoms', + "hyperon_das.client.FunctionsClient.count_atoms", return_value=(10, 0), ): - atom_count = das.count_atoms({'context': 'remote'}) + atom_count = das.count_atoms({"context": "remote"}) assert atom_count == (10, 0) def test_count_atoms_both(self): - das = DistributedAtomSpaceMock('remote', host='localhost', port=123) + das = DistributedAtomSpaceMock("remote", host="localhost", port=123) with mock.patch( - 'hyperon_das.client.FunctionsClient.count_atoms', - return_value={'link_count': 0, 'node_count': 10, 'atom_count': 0}, + "hyperon_das.client.FunctionsClient.count_atoms", + return_value={"link_count": 0, "node_count": 10, "atom_count": 0}, ): - atom_count = das.count_atoms({'context': 'both'}) + atom_count = das.count_atoms({"context": "both"}) # assert atom_count == (24, 26) - assert atom_count == {'link_count': 26, 'node_count': 24, 'atom_count': 40} + assert atom_count == {"link_count": 26, "node_count": 24, "atom_count": 40} diff --git a/src/tests/python/unit/test_database_private_methods.py b/src/tests/python/unit/test_database_private_methods.py index 42d297a..78efc9c 100644 --- a/src/tests/python/unit/test_database_private_methods.py +++ b/src/tests/python/unit/test_database_private_methods.py @@ -1,7 +1,11 @@ import pytest from hyperon_das_atomdb.database import AtomDB, LinkT, NodeT -from hyperon_das_atomdb.exceptions import AddLinkException, AddNodeException, AtomDoesNotExist +from hyperon_das_atomdb.exceptions import ( + AddLinkException, + AddNodeException, + AtomDoesNotExist, +) from tests.python.helpers import add_link, add_node, check_handle from .fixtures import in_memory_db, redis_mongo_db # noqa: F401 @@ -49,9 +53,9 @@ def test__reformat_document(self, database, kwlist, request): assert len(answer.targets) == 2 assert len(answer.targets_documents) == 2 assert answer.named_type == "Relation" - assert all( - isinstance(t, NodeT) for t in answer.targets_documents - ), answer.targets_documents + assert all(isinstance(t, NodeT) for t in answer.targets_documents), ( + answer.targets_documents + ) @pytest.mark.parametrize( "database,kwlist", diff --git a/src/tests/python/unit/test_database_public_methods.py b/src/tests/python/unit/test_database_public_methods.py index 6d31210..3abc1c5 100644 --- a/src/tests/python/unit/test_database_public_methods.py +++ b/src/tests/python/unit/test_database_public_methods.py @@ -4,7 +4,13 @@ import pytest from hyperon_das_atomdb.database import AtomDB, AtomT, LinkT, NodeT -from tests.python.helpers import add_link, add_node, check_handle, dict_to_link_params, dict_to_node_params +from tests.python.helpers import ( + add_link, + add_node, + check_handle, + dict_to_link_params, + dict_to_node_params, +) from tests.python.unit.fixtures import in_memory_db, redis_mongo_db # noqa: F401 diff --git a/src/tests/python/unit/test_decorators.py b/src/tests/python/unit/test_decorators.py index edc5f01..aaf743a 100644 --- a/src/tests/python/unit/test_decorators.py +++ b/src/tests/python/unit/test_decorators.py @@ -8,24 +8,24 @@ logger_mock = Mock() -@patch('hyperon_das.logger') +@patch("hyperon_das.logger") def test_retry_successful_connection(logger_mock): @retry(attempts=3, timeout_seconds=5) def successful_function(self, host, port): return 200, "Success" - result = successful_function({}, 'localhost', 80) + result = successful_function({}, "localhost", 80) - assert result == (200, 'Success') + assert result == (200, "Success") -@patch('hyperon_das.logger') +@patch("hyperon_das.logger") def test_retry_exception_raised(logger_mock): @retry(attempts=3, timeout_seconds=5) def exception_function(): raise ValueError("Simulated exception") with pytest.raises( - RetryConnectionError, match='An error occurs while connecting to the server' + RetryConnectionError, match="An error occurs while connecting to the server" ): exception_function() diff --git a/src/tests/python/unit/test_dict_query_tokenizer.py b/src/tests/python/unit/test_dict_query_tokenizer.py index 41fc0c0..815dca5 100644 --- a/src/tests/python/unit/test_dict_query_tokenizer.py +++ b/src/tests/python/unit/test_dict_query_tokenizer.py @@ -24,14 +24,14 @@ def test_tokenize_link(self): ], } expected_tokens = ( - 'LINK_TEMPLATE Expression 3 NODE Symbol Similarity LINK Expression 2 ' + "LINK_TEMPLATE Expression 3 NODE Symbol Similarity LINK Expression 2 " 'NODE Symbol Concept NODE Symbol "human" VARIABLE v1' ) assert DictQueryTokenizer.tokenize(query) == expected_tokens def test_untokenize_link(self): tokens = ( - 'LINK_TEMPLATE Expression 3 NODE Symbol Similarity LINK Expression 2 ' + "LINK_TEMPLATE Expression 3 NODE Symbol Similarity LINK Expression 2 " 'NODE Symbol Concept NODE Symbol "human" VARIABLE v1' ) expected_query = { @@ -55,7 +55,8 @@ def test_untokenize_link(self): def test_tokenize_invalid_query(self): query = {"atom_type": "unknown", "name": "InvalidQuery"} with pytest.raises( - ValueError, match="Unsupported query, it should start with a link or an operator:" + ValueError, + match="Unsupported query, it should start with a link or an operator:", ): DictQueryTokenizer.tokenize(query) @@ -91,14 +92,16 @@ def test_untokenize_wrong_elements_count(self): def test_tokenize_invalid_start_node(self): query = {"atom_type": "node", "type": "Symbol", "name": "TestNode"} with pytest.raises( - ValueError, match="Unsupported query, it should start with a link or an operator:" + ValueError, + match="Unsupported query, it should start with a link or an operator:", ): DictQueryTokenizer.tokenize(query) def test_tokenize_invalid_start_variable(self): query = {"atom_type": "variable", "name": "TestVariable"} with pytest.raises( - ValueError, match="Unsupported query, it should start with a link or an operator:" + ValueError, + match="Unsupported query, it should start with a link or an operator:", ): DictQueryTokenizer.tokenize(query) diff --git a/src/tests/python/unit/test_queries.py b/src/tests/python/unit/test_queries.py index d570a1a..3183d46 100644 --- a/src/tests/python/unit/test_queries.py +++ b/src/tests/python/unit/test_queries.py @@ -5,16 +5,16 @@ def _name(link, index, typed=False): - named_type = f"{link['targets'][index]['type']}:" if typed else '' + named_type = f"{link['targets'][index]['type']}:" if typed else "" return f"{named_type}{link['targets'][index]['name']}" def _print_query_answer(query_answer, typed=False): if query_answer: for link in query_answer: - if len(link['targets']) == 2: + if len(link["targets"]) == 2: print(f"{link['type']}: {_name(link, 0)} -> {_name(link, 1)}") - elif len(link['targets']) == 3: + elif len(link["targets"]) == 3: print( f"{link['type']}: {_name(link, 0)}({_name(link, 1, typed)}) -> {_name(link, 2, typed)}" ) @@ -391,32 +391,32 @@ def test_conjunction(self): answer, [ [ - 'c93e1e758c53912638438e2a7d7f7b7f', - '1c3bf151ea200b2d9e088a1178d060cb', + "c93e1e758c53912638438e2a7d7f7b7f", + "1c3bf151ea200b2d9e088a1178d060cb", ], [ - 'f31dfe97db782e8cec26de18dddf8965', - '1c3bf151ea200b2d9e088a1178d060cb', + "f31dfe97db782e8cec26de18dddf8965", + "1c3bf151ea200b2d9e088a1178d060cb", ], [ - '75756335011dcedb71a0d9a7bd2da9e8', - '1c3bf151ea200b2d9e088a1178d060cb', + "75756335011dcedb71a0d9a7bd2da9e8", + "1c3bf151ea200b2d9e088a1178d060cb", ], [ - '116df61c01859c710d178ba14a483509', - 'b0f428929706d1d991e4d712ad08f9ab', + "116df61c01859c710d178ba14a483509", + "b0f428929706d1d991e4d712ad08f9ab", ], [ - '959924e3aab197af80a84c1ab261fd65', - 'b0f428929706d1d991e4d712ad08f9ab', + "959924e3aab197af80a84c1ab261fd65", + "b0f428929706d1d991e4d712ad08f9ab", ], [ - '906fa505ae3bc6336d80a5f9aaa47b3b', - '959924e3aab197af80a84c1ab261fd65', + "906fa505ae3bc6336d80a5f9aaa47b3b", + "959924e3aab197af80a84c1ab261fd65", ], [ - 'fbf03d17d6a40feff828a3f2c6e86f05', - '1c3bf151ea200b2d9e088a1178d060cb', + "fbf03d17d6a40feff828a3f2c6e86f05", + "1c3bf151ea200b2d9e088a1178d060cb", ], ], ) diff --git a/src/tests/python/unit/test_traverse_engine.py b/src/tests/python/unit/test_traverse_engine.py index 84d2406..b29644c 100644 --- a/src/tests/python/unit/test_traverse_engine.py +++ b/src/tests/python/unit/test_traverse_engine.py @@ -9,8 +9,8 @@ def simplify_links(links: list, das: DistributedAtomSpace) -> set: answers = set() for link in links: targets_name = [] - for target in link['targets']: - targets_name.append(das.get_atom(target)['name']) + for target in link["targets"]: + targets_name.append(das.get_atom(target)["name"]) answers.add(f"{link['named_type']} : {targets_name}") return answers @@ -18,7 +18,7 @@ def simplify_links(links: list, das: DistributedAtomSpace) -> set: def get_names(handles: str, das: DistributedAtomSpace) -> set: answer = set() for handle in handles: - answer.add(das.get_atom(handle)['name']) + answer.add(das.get_atom(handle)["name"]) return answer @@ -36,9 +36,9 @@ def test_get(self, das): cursor = das.get_traversal_cursor(animal_base_handles.human) current_cursor = cursor.get() - assert current_cursor['handle'] == animal_base_handles.human - assert current_cursor['name'] == 'human' - assert current_cursor['named_type'] == 'Concept' + assert current_cursor["handle"] == animal_base_handles.human + assert current_cursor["name"] == "human" + assert current_cursor["named_type"] == "Concept" def test_get_links(self, das): def _build_atom_answer(handle: str) -> dict: @@ -177,7 +177,10 @@ def _vine_links(): def _plant_links(): answers = _build_atom_answer(animal_base_handles.plant) assert len(answers) == 2 - assert answers == {"Inheritance : ['vine', 'plant']", "Inheritance : ['ent', 'plant']"} + assert answers == { + "Inheritance : ['vine', 'plant']", + "Inheritance : ['ent', 'plant']", + } def _similarity_inheritance_links(): answers = _build_atom_answer(animal_base_handles.similarity_human_monkey) @@ -281,7 +284,7 @@ def _build_atom_answer(handle: str, **filters) -> dict: return simplify_links(links, das) def _human_links(): - answers = _build_atom_answer(animal_base_handles.human, link_type='Similarity') + answers = _build_atom_answer(animal_base_handles.human, link_type="Similarity") assert answers == { "Similarity : ['human', 'chimp']", "Similarity : ['human', 'monkey']", @@ -291,7 +294,7 @@ def _human_links(): "Similarity : ['chimp', 'human']", } answers = _build_atom_answer( - animal_base_handles.human, link_type='Similarity', cursor_position=0 + animal_base_handles.human, link_type="Similarity", cursor_position=0 ) assert answers == { "Similarity : ['human', 'chimp']", @@ -299,7 +302,7 @@ def _human_links(): "Similarity : ['human', 'ent']", } answers = _build_atom_answer( - animal_base_handles.human, link_type='Similarity', cursor_position=1 + animal_base_handles.human, link_type="Similarity", cursor_position=1 ) assert answers == { "Similarity : ['ent', 'human']", @@ -308,49 +311,49 @@ def _human_links(): } answers = _build_atom_answer( animal_base_handles.human, - link_type='Similarity', + link_type="Similarity", cursor_position=0, - target_type='Concept', + target_type="Concept", ) assert answers == { "Similarity : ['human', 'chimp']", "Similarity : ['human', 'monkey']", "Similarity : ['human', 'ent']", } - answers = _build_atom_answer(animal_base_handles.human, link_type='Fake') + answers = _build_atom_answer(animal_base_handles.human, link_type="Fake") assert len(answers) == 0 answers = _build_atom_answer(animal_base_handles.human, cursor_position=2) assert len(answers) == 0 - answers = _build_atom_answer(animal_base_handles.human, target_type='Fake') + answers = _build_atom_answer(animal_base_handles.human, target_type="Fake") assert len(answers) == 0 das.add_link( { - 'type': 'Similarity', - 'targets': [ - {'type': 'Concept', 'name': 'human'}, - {'type': 'Concept', 'name': 'snet'}, + "type": "Similarity", + "targets": [ + {"type": "Concept", "name": "human"}, + {"type": "Concept", "name": "snet"}, ], - 'weight': 0.5, + "weight": 0.5, } ) def my_filter(link) -> bool: - if 'weight' in link: + if "weight" in link: return True return False answers = _build_atom_answer( animal_base_handles.human, - link_type='Similarity', + link_type="Similarity", cursor_position=0, - target_type='Concept', + target_type="Concept", filter=my_filter, ) assert answers == {"Similarity : ['human', 'snet']"} def _mammal_links(): - answers = _build_atom_answer(animal_base_handles.mammal, link_type='Inheritance') + answers = _build_atom_answer(animal_base_handles.mammal, link_type="Inheritance") assert answers == { "Inheritance : ['mammal', 'animal']", "Inheritance : ['monkey', 'mammal']", @@ -359,11 +362,11 @@ def _mammal_links(): "Inheritance : ['rhino', 'mammal']", } answers = _build_atom_answer( - animal_base_handles.mammal, link_type='Inheritance', cursor_position=0 + animal_base_handles.mammal, link_type="Inheritance", cursor_position=0 ) assert answers == {"Inheritance : ['mammal', 'animal']"} answers = _build_atom_answer( - animal_base_handles.mammal, link_type='Inheritance', cursor_position=1 + animal_base_handles.mammal, link_type="Inheritance", cursor_position=1 ) assert answers == { "Inheritance : ['monkey', 'mammal']", @@ -373,9 +376,9 @@ def _mammal_links(): } answers = _build_atom_answer( animal_base_handles.mammal, - link_type='Inheritance', + link_type="Inheritance", cursor_position=1, - target_type='Concept', + target_type="Concept", ) assert answers == { "Inheritance : ['monkey', 'mammal']", @@ -383,50 +386,50 @@ def _mammal_links(): "Inheritance : ['human', 'mammal']", "Inheritance : ['rhino', 'mammal']", } - answers = _build_atom_answer(animal_base_handles.mammal, link_type='Similarity') + answers = _build_atom_answer(animal_base_handles.mammal, link_type="Similarity") assert len(answers) == 0 answers = _build_atom_answer(animal_base_handles.mammal, cursor_position=5) assert len(answers) == 0 - answers = _build_atom_answer(animal_base_handles.mammal, target_type='Snet') + answers = _build_atom_answer(animal_base_handles.mammal, target_type="Snet") assert len(answers) == 0 das.add_link( { - 'type': 'Inheritance', - 'targets': [ - {'type': 'Fake', 'name': 'fake1'}, - {'type': 'Concept', 'name': 'mammal'}, + "type": "Inheritance", + "targets": [ + {"type": "Fake", "name": "fake1"}, + {"type": "Concept", "name": "mammal"}, ], - 'weight': 0.4, + "weight": 0.4, } ) das.add_link( { - 'type': 'Inheritance', - 'targets': [ - {'type': 'Fake', 'name': 'fake2'}, - {'type': 'Concept', 'name': 'mammal'}, + "type": "Inheritance", + "targets": [ + {"type": "Fake", "name": "fake2"}, + {"type": "Concept", "name": "mammal"}, ], - 'weight': 0.5, + "weight": 0.5, } ) def my_filter(link) -> bool: - if 'weight' in link and link['weight'] >= 0.5: + if "weight" in link and link["weight"] >= 0.5: return True return False answers = _build_atom_answer( animal_base_handles.mammal, - link_type='Inheritance', + link_type="Inheritance", cursor_position=1, - target_type='Fake', + target_type="Fake", filter=my_filter, ) assert answers == {"Inheritance : ['fake2', 'mammal']"} def _snake_links(): - answers = _build_atom_answer(animal_base_handles.snake, link_type='Similarity') + answers = _build_atom_answer(animal_base_handles.snake, link_type="Similarity") assert answers == { "Similarity : ['snake', 'earthworm']", "Similarity : ['earthworm', 'snake']", @@ -434,24 +437,24 @@ def _snake_links(): "Similarity : ['vine', 'snake']", } answers = _build_atom_answer( - animal_base_handles.snake, link_type='Inheritance', cursor_position=0 + animal_base_handles.snake, link_type="Inheritance", cursor_position=0 ) assert answers == { "Inheritance : ['snake', 'reptile']", } answers = _build_atom_answer( - animal_base_handles.snake, link_type='Inheritance', cursor_position=1 + animal_base_handles.snake, link_type="Inheritance", cursor_position=1 ) assert len(answers) == 0 answers = _build_atom_answer( - animal_base_handles.snake, link_type='Similarity', cursor_position=0 + animal_base_handles.snake, link_type="Similarity", cursor_position=0 ) assert answers == { "Similarity : ['snake', 'earthworm']", "Similarity : ['snake', 'vine']", } answers = _build_atom_answer( - animal_base_handles.snake, link_type='Similarity', cursor_position=1 + animal_base_handles.snake, link_type="Similarity", cursor_position=1 ) assert answers == { "Similarity : ['earthworm', 'snake']", @@ -459,73 +462,73 @@ def _snake_links(): } answers = _build_atom_answer( animal_base_handles.snake, - link_type='Inheritance', + link_type="Inheritance", cursor_position=0, - target_type='Concept', + target_type="Concept", ) assert answers == {"Inheritance : ['snake', 'reptile']"} - answers = _build_atom_answer(animal_base_handles.snake, link_type='Evaluation') + answers = _build_atom_answer(animal_base_handles.snake, link_type="Evaluation") assert len(answers) == 0 answers = _build_atom_answer(animal_base_handles.snake, cursor_position=5) assert len(answers) == 0 answers = _build_atom_answer( animal_base_handles.snake, - link_type='Inheritance', + link_type="Inheritance", cursor_position=0, - target_type='Snet', + target_type="Snet", ) assert len(answers) == 0 das.add_link( { - 'type': 'Similarity', - 'targets': [ - {'type': 'Fake', 'name': 'fake1'}, - {'type': 'Concept', 'name': 'snake'}, + "type": "Similarity", + "targets": [ + {"type": "Fake", "name": "fake1"}, + {"type": "Concept", "name": "snake"}, ], - 'weight': 0.2, + "weight": 0.2, } ) das.add_link( { - 'type': 'Similarity', - 'targets': [ - {'type': 'Concept', 'name': 'snake'}, - {'type': 'Fake', 'name': 'fake1'}, + "type": "Similarity", + "targets": [ + {"type": "Concept", "name": "snake"}, + {"type": "Fake", "name": "fake1"}, ], - 'weight': 0.5, + "weight": 0.5, } ) def my_filter(link) -> bool: - if 'weight' in link and link['weight'] >= 0.5: + if "weight" in link and link["weight"] >= 0.5: return True return False answers = _build_atom_answer( animal_base_handles.snake, - link_type='Similarity', - target_type='Fake', + link_type="Similarity", + target_type="Fake", filter=my_filter, ) assert answers == {"Similarity : ['snake', 'fake1']"} def _similarity_human_monkey_links(): answers = _build_atom_answer( - animal_base_handles.similarity_human_monkey, link_type='Similarity' + animal_base_handles.similarity_human_monkey, link_type="Similarity" ) assert len(answers) == 0 das.add_link( { - 'type': 'Inheritance', - 'targets': [ - {'type': 'Fake', 'name': 'fake'}, + "type": "Inheritance", + "targets": [ + {"type": "Fake", "name": "fake"}, { - 'type': 'Similarity', - 'targets': [ - {'type': 'Concept', 'name': 'human'}, - {'type': 'Concept', 'name': 'monkey'}, + "type": "Similarity", + "targets": [ + {"type": "Concept", "name": "human"}, + {"type": "Concept", "name": "monkey"}, ], }, ], @@ -533,7 +536,7 @@ def _similarity_human_monkey_links(): ) cursor = das.get_traversal_cursor(animal_base_handles.similarity_human_monkey) - links = cursor.get_links(link_type='Inheritance') + links = cursor.get_links(link_type="Inheritance") answers = [link for link in links] assert len(answers) == 1 @@ -747,17 +750,17 @@ def _build_neighbors(handle: str, **filters) -> dict: return ret def _human_neighbors(): - neighbors = _build_neighbors(animal_base_handles.human, link_type='Inheritance') + neighbors = _build_neighbors(animal_base_handles.human, link_type="Inheritance") assert das.get_atom(animal_base_handles.mammal) in neighbors assert len(neighbors) == 1 - neighbors = _build_neighbors(animal_base_handles.human, link_type='Similarity') + neighbors = _build_neighbors(animal_base_handles.human, link_type="Similarity") assert das.get_atom(animal_base_handles.monkey) in neighbors assert das.get_atom(animal_base_handles.chimp) in neighbors assert das.get_atom(animal_base_handles.ent) in neighbors assert len(neighbors) == 3 - neighbors = _build_neighbors(animal_base_handles.human, target_type='Concept') + neighbors = _build_neighbors(animal_base_handles.human, target_type="Concept") assert das.get_atom(animal_base_handles.mammal) in neighbors assert das.get_atom(animal_base_handles.monkey) in neighbors assert das.get_atom(animal_base_handles.chimp) in neighbors @@ -765,66 +768,66 @@ def _human_neighbors(): assert len(neighbors) == 4 neighbors = _build_neighbors( - animal_base_handles.human, link_type='Inheritance', target_type='Snet' + animal_base_handles.human, link_type="Inheritance", target_type="Snet" ) assert len(neighbors) == 0 neighbors = _build_neighbors( - animal_base_handles.human, link_type='Similarity', target_type='Snet' + animal_base_handles.human, link_type="Similarity", target_type="Snet" ) assert len(neighbors) == 0 das.add_link( { - 'type': 'Similarity', - 'targets': [ - {'type': 'Concept', 'name': 'human'}, - {'type': 'Fake', 'name': 'fake-h', 'weight': 0.7}, + "type": "Similarity", + "targets": [ + {"type": "Concept", "name": "human"}, + {"type": "Fake", "name": "fake-h", "weight": 0.7}, ], } ) das.add_link( { - 'type': 'Similarity', - 'targets': [ - {'type': 'Fake', 'name': 'fake-h', 'weight': 0.3}, - {'type': 'Concept', 'name': 'human'}, + "type": "Similarity", + "targets": [ + {"type": "Fake", "name": "fake-h", "weight": 0.3}, + {"type": "Concept", "name": "human"}, ], } ) das.add_link( { - 'type': 'Inheritance', - 'targets': [ + "type": "Inheritance", + "targets": [ { - 'type': 'Fake', - 'name': 'fake-h2', - 'weight': 0.3, + "type": "Fake", + "name": "fake-h2", + "weight": 0.3, }, { - 'type': 'Fake', - 'name': 'fake-h3', - 'weight': 0.3, + "type": "Fake", + "name": "fake-h3", + "weight": 0.3, }, { - 'type': 'Fake', - 'name': 'fake-h4', - 'weight': 1.3, + "type": "Fake", + "name": "fake-h4", + "weight": 1.3, }, - {'type': 'Concept', 'name': 'human'}, + {"type": "Concept", "name": "human"}, ], } ) def my_filter(target) -> bool: - if 'weight' in target and target['weight'] >= 1: + if "weight" in target and target["weight"] >= 1: return True return False - fake_h = AtomDB.node_handle('Fake', 'fake-h') - fake_h2 = AtomDB.node_handle('Fake', 'fake-h2') - fake_h3 = AtomDB.node_handle('Fake', 'fake-h3') - fake_h4 = AtomDB.node_handle('Fake', 'fake-h4') + fake_h = AtomDB.node_handle("Fake", "fake-h") + fake_h2 = AtomDB.node_handle("Fake", "fake-h2") + fake_h3 = AtomDB.node_handle("Fake", "fake-h3") + fake_h4 = AtomDB.node_handle("Fake", "fake-h4") neighbors = _build_neighbors(animal_base_handles.human) assert das.get_atom(animal_base_handles.mammal) in neighbors @@ -838,23 +841,23 @@ def my_filter(target) -> bool: assert len(neighbors) == 8 neighbors = _build_neighbors( - animal_base_handles.human, link_type='Similarity', target_type='Fake' + animal_base_handles.human, link_type="Similarity", target_type="Fake" ) assert das.get_atom(fake_h) in neighbors assert len(neighbors) == 1 neighbors = _build_neighbors( animal_base_handles.human, - link_type='Inheritance', - target_type='Fake', + link_type="Inheritance", + target_type="Fake", filters=(None, my_filter), ) assert len(neighbors) == 1 neighbors = _build_neighbors( animal_base_handles.human, - link_type='Inheritance', - target_type='Fake', + link_type="Inheritance", + target_type="Fake", filters=None, ) @@ -863,103 +866,107 @@ def my_filter(target) -> bool: with pytest.raises(ValueError): _build_neighbors( animal_base_handles.human, - link_type='Inheritance', - target_type='Fake', + link_type="Inheritance", + target_type="Fake", filters=my_filter, ) def _vine_neighbors(): - neighbors = _build_neighbors(animal_base_handles.vine, link_type='Similarity') + neighbors = _build_neighbors(animal_base_handles.vine, link_type="Similarity") assert das.get_atom(animal_base_handles.snake) in neighbors assert len(neighbors) == 1 - neighbors = _build_neighbors(animal_base_handles.vine, link_type='Inheritance') + neighbors = _build_neighbors(animal_base_handles.vine, link_type="Inheritance") assert das.get_atom(animal_base_handles.plant) in neighbors assert len(neighbors) == 1 - fake_v1 = AtomDB.node_handle('Fake', 'fake-v1') - fake_v2 = AtomDB.node_handle('Fake', 'fake-v2') + fake_v1 = AtomDB.node_handle("Fake", "fake-v1") + fake_v2 = AtomDB.node_handle("Fake", "fake-v2") das.add_link( { - 'type': 'Inheritance', - 'targets': [ + "type": "Inheritance", + "targets": [ { - 'type': 'Fake', - 'name': 'fake-v1', - 'weight': 1, + "type": "Fake", + "name": "fake-v1", + "weight": 1, }, - {'type': 'Concept', 'name': 'vine'}, + {"type": "Concept", "name": "vine"}, ], } ) das.add_link( { - 'type': 'Similarity', - 'targets': [ - {'type': 'Concept', 'name': 'vine'}, + "type": "Similarity", + "targets": [ + {"type": "Concept", "name": "vine"}, { - 'type': 'Fake', - 'name': 'fake-v2', - 'weight': 0.7, + "type": "Fake", + "name": "fake-v2", + "weight": 0.7, }, ], } ) das.add_link( { - 'type': 'Similarity', - 'targets': [ + "type": "Similarity", + "targets": [ { - 'type': 'Fake', - 'name': 'fake-v2', - 'weight': 0.3, + "type": "Fake", + "name": "fake-v2", + "weight": 0.3, }, - {'type': 'Concept', 'name': 'vine'}, + {"type": "Concept", "name": "vine"}, ], } ) - neighbors = _build_neighbors(animal_base_handles.vine, link_type='Inheritance') + neighbors = _build_neighbors(animal_base_handles.vine, link_type="Inheritance") assert das.get_atom(animal_base_handles.plant) in neighbors assert das.get_atom(fake_v1) in neighbors assert len(neighbors) == 2 - neighbors = _build_neighbors(animal_base_handles.vine, link_type='Similarity') + neighbors = _build_neighbors(animal_base_handles.vine, link_type="Similarity") assert das.get_atom(animal_base_handles.snake) in neighbors assert das.get_atom(fake_v2) in neighbors assert len(neighbors) == 2 neighbors = _build_neighbors( - animal_base_handles.vine, link_type='Similarity', target_type='Concept' + animal_base_handles.vine, link_type="Similarity", target_type="Concept" ) assert das.get_atom(animal_base_handles.snake) in neighbors assert len(neighbors) == 1 neighbors = _build_neighbors( - animal_base_handles.vine, link_type='Inheritance', target_type='Fake' + animal_base_handles.vine, link_type="Inheritance", target_type="Fake" ) assert das.get_atom(fake_v1) in neighbors assert len(neighbors) == 1 neighbors = _build_neighbors( - animal_base_handles.vine, link_type='Similarity', target_type='Fake' + animal_base_handles.vine, link_type="Similarity", target_type="Fake" ) assert das.get_atom(fake_v2) in neighbors assert len(neighbors) == 1 def my_filter(target) -> bool: - if 'weight' in target and target['weight'] >= 1: + if "weight" in target and target["weight"] >= 1: return True return False neighbors = _build_neighbors( - animal_base_handles.vine, link_type='Similarity', filters=(None, my_filter) + animal_base_handles.vine, + link_type="Similarity", + filters=(None, my_filter), ) assert len(neighbors) == 0 neighbors = _build_neighbors( - animal_base_handles.vine, link_type='Inheritance', filters=(None, my_filter) + animal_base_handles.vine, + link_type="Inheritance", + filters=(None, my_filter), ) assert das.get_atom(fake_v1) in neighbors assert len(neighbors) == 1 @@ -968,55 +975,55 @@ def _inheritance_dinosaur_reptile(): neighbors = _build_neighbors(animal_base_handles.inheritance_dinosaur_reptile) assert len(neighbors) == 0 - fake_dr1 = AtomDB.node_handle('Fake', 'fake-dr1') - fake_dr2 = AtomDB.node_handle('Fake', 'fake-dr2') + fake_dr1 = AtomDB.node_handle("Fake", "fake-dr1") + fake_dr2 = AtomDB.node_handle("Fake", "fake-dr2") das.add_link( { - 'type': 'Inheritance', - 'targets': [ - {'type': 'Fake', 'name': 'fake-dr1'}, + "type": "Inheritance", + "targets": [ + {"type": "Fake", "name": "fake-dr1"}, { - 'type': 'Inheritance', - 'targets': [ - {'type': 'Concept', 'name': 'dinosaur'}, - {'type': 'Concept', 'name': 'reptile'}, + "type": "Inheritance", + "targets": [ + {"type": "Concept", "name": "dinosaur"}, + {"type": "Concept", "name": "reptile"}, ], }, ], - 'weight': 1, + "weight": 1, } ) das.add_link( { - 'type': 'Similarity', - 'targets': [ + "type": "Similarity", + "targets": [ { - 'type': 'Inheritance', - 'targets': [ - {'type': 'Concept', 'name': 'dinosaur'}, - {'type': 'Concept', 'name': 'reptile'}, + "type": "Inheritance", + "targets": [ + {"type": "Concept", "name": "dinosaur"}, + {"type": "Concept", "name": "reptile"}, ], }, - {'type': 'Fake', 'name': 'fake-dr2'}, + {"type": "Fake", "name": "fake-dr2"}, ], - 'weight': 0.7, + "weight": 0.7, } ) das.add_link( { - 'type': 'Similarity', - 'targets': [ - {'type': 'Fake', 'name': 'fake-dr2'}, + "type": "Similarity", + "targets": [ + {"type": "Fake", "name": "fake-dr2"}, { - 'type': 'Inheritance', - 'targets': [ - {'type': 'Concept', 'name': 'dinosaur'}, - {'type': 'Concept', 'name': 'reptile'}, + "type": "Inheritance", + "targets": [ + {"type": "Concept", "name": "dinosaur"}, + {"type": "Concept", "name": "reptile"}, ], }, ], - 'weight': 0.3, + "weight": 0.3, } ) @@ -1026,39 +1033,40 @@ def _inheritance_dinosaur_reptile(): assert len(neighbors) == 2 neighbors = _build_neighbors( - animal_base_handles.inheritance_dinosaur_reptile, link_type='Similarity' + animal_base_handles.inheritance_dinosaur_reptile, link_type="Similarity" ) assert das.get_atom(fake_dr2) in neighbors assert len(neighbors) == 1 neighbors = _build_neighbors( - animal_base_handles.inheritance_dinosaur_reptile, link_type='Inheritance' + animal_base_handles.inheritance_dinosaur_reptile, + link_type="Inheritance", ) assert das.get_atom(fake_dr1) in neighbors assert len(neighbors) == 1 neighbors = _build_neighbors( animal_base_handles.inheritance_dinosaur_reptile, - link_type='Inheritance', - target_type='Fake', + link_type="Inheritance", + target_type="Fake", ) assert das.get_atom(fake_dr1) in neighbors assert len(neighbors) == 1 neighbors = _build_neighbors( animal_base_handles.inheritance_dinosaur_reptile, - link_type='Inheritance', - target_type='Concept', + link_type="Inheritance", + target_type="Concept", ) assert len(neighbors) == 0 neighbors = _build_neighbors( - animal_base_handles.inheritance_dinosaur_reptile, target_type='Concept' + animal_base_handles.inheritance_dinosaur_reptile, target_type="Concept" ) assert len(neighbors) == 0 neighbors = _build_neighbors( - animal_base_handles.inheritance_dinosaur_reptile, target_type='Fake' + animal_base_handles.inheritance_dinosaur_reptile, target_type="Fake" ) assert das.get_atom(fake_dr1) in neighbors assert das.get_atom(fake_dr2) in neighbors @@ -1072,42 +1080,42 @@ def _inheritance_dinosaur_reptile(): def test_follow_link(self, das, n): def _mammal(): cursor = das.get_traversal_cursor(animal_base_handles.mammal) - assert cursor.get()['name'] == 'mammal' + assert cursor.get()["name"] == "mammal" cursor.follow_link() - current_cursor = cursor.get()['name'] - assert current_cursor in ('monkey', 'chimp', 'human', 'animal', 'rhino') + current_cursor = cursor.get()["name"] + assert current_cursor in ("monkey", "chimp", "human", "animal", "rhino") cursor.follow_link() previous_cursor = current_cursor - current_cursor = cursor.get()['name'] - if previous_cursor == 'monkey': - assert current_cursor in ('mammal', 'chimp', 'human') - elif previous_cursor == 'chimp': - assert current_cursor in ('mammal', 'monkey', 'human') - elif previous_cursor == 'human': - assert current_cursor in ('mammal', 'monkey', 'chimp', 'ent') - elif previous_cursor == 'animal': - assert current_cursor in ('mammal', 'reptile', 'earthworm') - elif previous_cursor == 'rhino': - assert current_cursor in ('mammal', 'triceratops') + current_cursor = cursor.get()["name"] + if previous_cursor == "monkey": + assert current_cursor in ("mammal", "chimp", "human") + elif previous_cursor == "chimp": + assert current_cursor in ("mammal", "monkey", "human") + elif previous_cursor == "human": + assert current_cursor in ("mammal", "monkey", "chimp", "ent") + elif previous_cursor == "animal": + assert current_cursor in ("mammal", "reptile", "earthworm") + elif previous_cursor == "rhino": + assert current_cursor in ("mammal", "triceratops") def _earthworm(): cursor = das.get_traversal_cursor(animal_base_handles.earthworm) - assert cursor.get()['name'] == 'earthworm' + assert cursor.get()["name"] == "earthworm" cursor.follow_link() - current_cursor = cursor.get()['name'] - assert current_cursor in ('animal', 'snake') + current_cursor = cursor.get()["name"] + assert current_cursor in ("animal", "snake") cursor.follow_link() previous_cursor = current_cursor - current_cursor = cursor.get()['name'] + current_cursor = cursor.get()["name"] - if previous_cursor == 'animal': - assert current_cursor in ('mammal', 'reptile', 'earthworm') - elif previous_cursor == 'snake': - assert current_cursor in ('earthworm', 'reptile', 'vine') + if previous_cursor == "animal": + assert current_cursor in ("mammal", "reptile", "earthworm") + elif previous_cursor == "snake": + assert current_cursor in ("earthworm", "reptile", "vine") _mammal() _earthworm() @@ -1116,42 +1124,42 @@ def _earthworm(): def test_follow_link_with_filters(self, das, n): def _mammal(): cursor = das.get_traversal_cursor(animal_base_handles.mammal) - assert cursor.get()['name'] == 'mammal' + assert cursor.get()["name"] == "mammal" - cursor.follow_link(link_type='Similarity') - assert cursor.get()['name'] == 'mammal' + cursor.follow_link(link_type="Similarity") + assert cursor.get()["name"] == "mammal" - cursor.follow_link(link_type='Inheritance') - current_cursor = cursor.get()['name'] - assert current_cursor in ('monkey', 'chimp', 'human', 'animal', 'rhino') + cursor.follow_link(link_type="Inheritance") + current_cursor = cursor.get()["name"] + assert current_cursor in ("monkey", "chimp", "human", "animal", "rhino") - cursor.follow_link(link_type='Inheritance', target_type='Concept') + cursor.follow_link(link_type="Inheritance", target_type="Concept") previous_cursor = current_cursor - current_cursor = cursor.get()['name'] - if previous_cursor == 'monkey': - assert current_cursor in ('mammal', 'chimp') - elif previous_cursor == 'chimp': - assert current_cursor in ('mammal', 'monkey', 'human') - elif previous_cursor == 'human': - assert current_cursor in ('mammal', 'monkey', 'chimp', 'ent') - elif previous_cursor == 'animal': - assert current_cursor in ('mammal', 'reptile', 'earthworm') - elif previous_cursor == 'rhino': - assert current_cursor in ('mammal', 'triceratops') - - cursor.follow_link(link_type='Inheritance', target_type='Fake') + current_cursor = cursor.get()["name"] + if previous_cursor == "monkey": + assert current_cursor in ("mammal", "chimp") + elif previous_cursor == "chimp": + assert current_cursor in ("mammal", "monkey", "human") + elif previous_cursor == "human": + assert current_cursor in ("mammal", "monkey", "chimp", "ent") + elif previous_cursor == "animal": + assert current_cursor in ("mammal", "reptile", "earthworm") + elif previous_cursor == "rhino": + assert current_cursor in ("mammal", "triceratops") + + cursor.follow_link(link_type="Inheritance", target_type="Fake") previous_cursor = current_cursor - current_cursor = cursor.get()['name'] + current_cursor = cursor.get()["name"] assert previous_cursor == current_cursor _mammal() def test_goto(self, das): cursor = das.get_traversal_cursor(animal_base_handles.human) - cursor.get()['name'] == 'human' + assert cursor.get()["name"] == "human" cursor.goto(animal_base_handles.ent) - assert cursor.get()['name'] == 'ent' + assert cursor.get()["name"] == "ent" with pytest.raises(AtomDoesNotExist): - cursor.goto('snet') + cursor.goto("snet") diff --git a/src/tools/bazel/pytest/main.py b/src/tools/bazel/pytest/main.py index fb23061..9dedbb2 100644 --- a/src/tools/bazel/pytest/main.py +++ b/src/tools/bazel/pytest/main.py @@ -4,5 +4,3 @@ if __name__ == "__main__": sys.exit(pytest.main(sys.argv[1:])) - - From d931e894964ed36615c6a0bae12f9193c9ee21a8 Mon Sep 17 00:00:00 2001 From: Pedro Costa Date: Thu, 20 Feb 2025 19:35:44 +0000 Subject: [PATCH 18/19] fix(tests): annotate to fix later B006 problem --- src/hyperon_das/das.py | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/src/hyperon_das/das.py b/src/hyperon_das/das.py index 15fdb22..3db2812 100644 --- a/src/hyperon_das/das.py +++ b/src/hyperon_das/das.py @@ -33,7 +33,8 @@ class DistributedAtomSpace: backend: AtomDB - def __init__(self, system_parameters: Dict[str, Any], **kwargs) -> None: + # FIXME: B006 Do not use mutable data structures for argumnet defaults + def __init__(self, system_parameters: Dict[str, Any] = {}, **kwargs) -> None: # noqa: B006 """ Creates a new DAS object. A DAS client can run locally or locally and remote, connecting to remote DAS instances to query remote atoms. If there are different @@ -82,8 +83,6 @@ def __init__(self, system_parameters: Dict[str, Any], **kwargs) -> None: mode. Defaults to True. redis_ssl (bool, optional): Set Redis to encrypt the connection. Defaults to True. """ - if not system_parameters: - system_parameters = {} self.system_parameters = system_parameters self.atomdb = kwargs.get("atomdb", "ram") self.query_engine_type = kwargs.get("query_engine", "local") @@ -140,13 +139,12 @@ def _start_query_engine( ) logger().info(f"Started {das_type} DAS") + # FIXME: B006 Do not use mutable data structures for argumnet defaults def _create_context( self, name: str, - queries: List[Query], + queries: List[Query] = [], # noqa: B006 ) -> Context: - if not queries: - queries = [] context_node = self.add_node(NodeT(type=Context.CONTEXT_NODE_TYPE, name=name)) query_answer = [self.query(query, {"no_iterator": True}) for query in queries] context = Context(context_node, query_answer) @@ -407,7 +405,8 @@ def get_incoming_links(self, atom_handle: HandleT, **kwargs) -> IncomingLinksT: """ return self.query_engine.get_incoming_links(atom_handle, **kwargs) - def count_atoms(self, parameters: Dict[str, Any]) -> Dict[str, int]: + # FIXME: B006 Do not use mutable data structures for argumnet defaults + def count_atoms(self, parameters: Dict[str, Any] = {}) -> Dict[str, int]: # noqa: B006 """ Count atoms, nodes and links in DAS. @@ -428,14 +427,13 @@ def count_atoms(self, parameters: Dict[str, Any]) -> Dict[str, int]: Returns: Dict[str, int]: Dict containing the keys 'node_count', 'atom_count', 'link_count'. """ - if not parameters: - parameters = {} return self.query_engine.count_atoms(parameters) + # FIXME: B006 Do not use mutable data structures for argumnet defaults def query( self, query: Query, - parameters: Dict[str, Any], + parameters: Dict[str, Any] = {}, # noqa: B006 ) -> Union[Iterator[QueryAnswer], List[QueryAnswer]]: """ Perform a query on the knowledge base using a dict as input and return an @@ -530,8 +528,6 @@ def query( } ] """ - if not parameters: - parameters = {} return self.query_engine.query(query, parameters) def custom_query(self, index_id: str, query: Query, **kwargs) -> Union[Iterator, List[AtomT]]: @@ -956,13 +952,12 @@ def fetch( self.backend.bulk_insert(documents) return documents + # FIXME: B006 Do not use mutable data structures for argumnet defaults def create_context( self, name: str, - queries: List[Query], + queries: List[Query] = [], # noqa: B006 ) -> Context: - if not queries: - queries = [] if self.query_engine_type == "local": return self._create_context(name, queries) else: From 6a6a6aaa90063ad9b5a0f841b8879fb5cf740ded Mon Sep 17 00:00:00 2001 From: Pedro Costa Date: Fri, 21 Feb 2025 19:37:24 +0000 Subject: [PATCH 19/19] task: improved lint-all command filtering success lines out --- Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 938f861..f6d3af9 100644 --- a/Makefile +++ b/Makefile @@ -57,7 +57,8 @@ test-all: build-image lint-all: @$(MAKE) bazel lint \ - "//... --define=ATOMDB_VERSION=0.8.11 --define=DAS_VERSION=0.9.0 --define=DAS_NODE_VERSION=0.9.0 --fix" + "//... --fix --report --diff" \ + | grep -vE "(Lint results|All checks passed|^[[:blank:]]*$$)" format-all: @$(MAKE) bazel run format