nucliadb 2.46.1.post382__py3-none-any.whl → 6.2.1.post2777__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- migrations/0002_rollover_shards.py +1 -2
- migrations/0003_allfields_key.py +2 -37
- migrations/0004_rollover_shards.py +1 -2
- migrations/0005_rollover_shards.py +1 -2
- migrations/0006_rollover_shards.py +2 -4
- migrations/0008_cleanup_leftover_rollover_metadata.py +1 -2
- migrations/0009_upgrade_relations_and_texts_to_v2.py +5 -4
- migrations/0010_fix_corrupt_indexes.py +11 -12
- migrations/0011_materialize_labelset_ids.py +2 -18
- migrations/0012_rollover_shards.py +6 -12
- migrations/0013_rollover_shards.py +2 -4
- migrations/0014_rollover_shards.py +5 -7
- migrations/0015_targeted_rollover.py +6 -12
- migrations/0016_upgrade_to_paragraphs_v2.py +27 -32
- migrations/0017_multiple_writable_shards.py +3 -6
- migrations/0018_purge_orphan_kbslugs.py +59 -0
- migrations/0019_upgrade_to_paragraphs_v3.py +66 -0
- migrations/0020_drain_nodes_from_cluster.py +83 -0
- nucliadb/standalone/tests/unit/test_run.py → migrations/0021_overwrite_vectorsets_key.py +17 -18
- nucliadb/tests/unit/test_openapi.py → migrations/0022_fix_paragraph_deletion_bug.py +16 -11
- migrations/0023_backfill_pg_catalog.py +80 -0
- migrations/0025_assign_models_to_kbs_v2.py +113 -0
- migrations/0026_fix_high_cardinality_content_types.py +61 -0
- migrations/0027_rollover_texts3.py +73 -0
- nucliadb/ingest/fields/date.py → migrations/pg/0001_bootstrap.py +10 -12
- migrations/pg/0002_catalog.py +42 -0
- nucliadb/ingest/tests/unit/test_settings.py → migrations/pg/0003_catalog_kbid_index.py +5 -3
- nucliadb/common/cluster/base.py +41 -24
- nucliadb/common/cluster/discovery/base.py +6 -14
- nucliadb/common/cluster/discovery/k8s.py +9 -19
- nucliadb/common/cluster/discovery/manual.py +1 -3
- nucliadb/common/cluster/discovery/single.py +1 -2
- nucliadb/common/cluster/discovery/utils.py +1 -3
- nucliadb/common/cluster/grpc_node_dummy.py +11 -16
- nucliadb/common/cluster/index_node.py +10 -19
- nucliadb/common/cluster/manager.py +223 -102
- nucliadb/common/cluster/rebalance.py +42 -37
- nucliadb/common/cluster/rollover.py +377 -204
- nucliadb/common/cluster/settings.py +16 -9
- nucliadb/common/cluster/standalone/grpc_node_binding.py +24 -76
- nucliadb/common/cluster/standalone/index_node.py +4 -11
- nucliadb/common/cluster/standalone/service.py +2 -6
- nucliadb/common/cluster/standalone/utils.py +9 -6
- nucliadb/common/cluster/utils.py +43 -29
- nucliadb/common/constants.py +20 -0
- nucliadb/common/context/__init__.py +6 -4
- nucliadb/common/context/fastapi.py +8 -5
- nucliadb/{tests/knowledgeboxes/__init__.py → common/counters.py} +8 -2
- nucliadb/common/datamanagers/__init__.py +24 -5
- nucliadb/common/datamanagers/atomic.py +102 -0
- nucliadb/common/datamanagers/cluster.py +5 -5
- nucliadb/common/datamanagers/entities.py +6 -16
- nucliadb/common/datamanagers/fields.py +84 -0
- nucliadb/common/datamanagers/kb.py +101 -24
- nucliadb/common/datamanagers/labels.py +26 -56
- nucliadb/common/datamanagers/processing.py +2 -6
- nucliadb/common/datamanagers/resources.py +214 -117
- nucliadb/common/datamanagers/rollover.py +77 -16
- nucliadb/{ingest/orm → common/datamanagers}/synonyms.py +16 -28
- nucliadb/common/datamanagers/utils.py +19 -11
- nucliadb/common/datamanagers/vectorsets.py +110 -0
- nucliadb/common/external_index_providers/base.py +257 -0
- nucliadb/{ingest/tests/unit/test_cache.py → common/external_index_providers/exceptions.py} +9 -8
- nucliadb/common/external_index_providers/manager.py +101 -0
- nucliadb/common/external_index_providers/pinecone.py +933 -0
- nucliadb/common/external_index_providers/settings.py +52 -0
- nucliadb/common/http_clients/auth.py +3 -6
- nucliadb/common/http_clients/processing.py +6 -11
- nucliadb/common/http_clients/utils.py +1 -3
- nucliadb/common/ids.py +240 -0
- nucliadb/common/locking.py +43 -13
- nucliadb/common/maindb/driver.py +11 -35
- nucliadb/common/maindb/exceptions.py +6 -6
- nucliadb/common/maindb/local.py +22 -9
- nucliadb/common/maindb/pg.py +206 -111
- nucliadb/common/maindb/utils.py +13 -44
- nucliadb/common/models_utils/from_proto.py +479 -0
- nucliadb/common/models_utils/to_proto.py +60 -0
- nucliadb/common/nidx.py +260 -0
- nucliadb/export_import/datamanager.py +25 -19
- nucliadb/export_import/exceptions.py +8 -0
- nucliadb/export_import/exporter.py +20 -7
- nucliadb/export_import/importer.py +6 -11
- nucliadb/export_import/models.py +5 -5
- nucliadb/export_import/tasks.py +4 -4
- nucliadb/export_import/utils.py +94 -54
- nucliadb/health.py +1 -3
- nucliadb/ingest/app.py +15 -11
- nucliadb/ingest/consumer/auditing.py +30 -147
- nucliadb/ingest/consumer/consumer.py +96 -52
- nucliadb/ingest/consumer/materializer.py +10 -12
- nucliadb/ingest/consumer/pull.py +12 -27
- nucliadb/ingest/consumer/service.py +20 -19
- nucliadb/ingest/consumer/shard_creator.py +7 -14
- nucliadb/ingest/consumer/utils.py +1 -3
- nucliadb/ingest/fields/base.py +139 -188
- nucliadb/ingest/fields/conversation.py +18 -5
- nucliadb/ingest/fields/exceptions.py +1 -4
- nucliadb/ingest/fields/file.py +7 -25
- nucliadb/ingest/fields/link.py +11 -16
- nucliadb/ingest/fields/text.py +9 -4
- nucliadb/ingest/orm/brain.py +255 -262
- nucliadb/ingest/orm/broker_message.py +181 -0
- nucliadb/ingest/orm/entities.py +36 -51
- nucliadb/ingest/orm/exceptions.py +12 -0
- nucliadb/ingest/orm/knowledgebox.py +334 -278
- nucliadb/ingest/orm/processor/__init__.py +2 -697
- nucliadb/ingest/orm/processor/auditing.py +117 -0
- nucliadb/ingest/orm/processor/data_augmentation.py +164 -0
- nucliadb/ingest/orm/processor/pgcatalog.py +84 -0
- nucliadb/ingest/orm/processor/processor.py +752 -0
- nucliadb/ingest/orm/processor/sequence_manager.py +1 -1
- nucliadb/ingest/orm/resource.py +280 -520
- nucliadb/ingest/orm/utils.py +25 -31
- nucliadb/ingest/partitions.py +3 -9
- nucliadb/ingest/processing.py +76 -81
- nucliadb/ingest/py.typed +0 -0
- nucliadb/ingest/serialize.py +37 -173
- nucliadb/ingest/service/__init__.py +1 -3
- nucliadb/ingest/service/writer.py +186 -577
- nucliadb/ingest/settings.py +13 -22
- nucliadb/ingest/utils.py +3 -6
- nucliadb/learning_proxy.py +264 -51
- nucliadb/metrics_exporter.py +30 -19
- nucliadb/middleware/__init__.py +1 -3
- nucliadb/migrator/command.py +1 -3
- nucliadb/migrator/datamanager.py +13 -13
- nucliadb/migrator/migrator.py +57 -37
- nucliadb/migrator/settings.py +2 -1
- nucliadb/migrator/utils.py +18 -10
- nucliadb/purge/__init__.py +139 -33
- nucliadb/purge/orphan_shards.py +7 -13
- nucliadb/reader/__init__.py +1 -3
- nucliadb/reader/api/models.py +3 -14
- nucliadb/reader/api/v1/__init__.py +0 -1
- nucliadb/reader/api/v1/download.py +27 -94
- nucliadb/reader/api/v1/export_import.py +4 -4
- nucliadb/reader/api/v1/knowledgebox.py +13 -13
- nucliadb/reader/api/v1/learning_config.py +8 -12
- nucliadb/reader/api/v1/resource.py +67 -93
- nucliadb/reader/api/v1/services.py +70 -125
- nucliadb/reader/app.py +16 -46
- nucliadb/reader/lifecycle.py +18 -4
- nucliadb/reader/py.typed +0 -0
- nucliadb/reader/reader/notifications.py +10 -31
- nucliadb/search/__init__.py +1 -3
- nucliadb/search/api/v1/__init__.py +2 -2
- nucliadb/search/api/v1/ask.py +112 -0
- nucliadb/search/api/v1/catalog.py +184 -0
- nucliadb/search/api/v1/feedback.py +17 -25
- nucliadb/search/api/v1/find.py +41 -41
- nucliadb/search/api/v1/knowledgebox.py +90 -62
- nucliadb/search/api/v1/predict_proxy.py +2 -2
- nucliadb/search/api/v1/resource/ask.py +66 -117
- nucliadb/search/api/v1/resource/search.py +51 -72
- nucliadb/search/api/v1/router.py +1 -0
- nucliadb/search/api/v1/search.py +50 -197
- nucliadb/search/api/v1/suggest.py +40 -54
- nucliadb/search/api/v1/summarize.py +9 -5
- nucliadb/search/api/v1/utils.py +2 -1
- nucliadb/search/app.py +16 -48
- nucliadb/search/lifecycle.py +10 -3
- nucliadb/search/predict.py +176 -188
- nucliadb/search/py.typed +0 -0
- nucliadb/search/requesters/utils.py +41 -63
- nucliadb/search/search/cache.py +149 -20
- nucliadb/search/search/chat/ask.py +918 -0
- nucliadb/search/{tests/unit/test_run.py → search/chat/exceptions.py} +14 -13
- nucliadb/search/search/chat/images.py +41 -17
- nucliadb/search/search/chat/prompt.py +851 -282
- nucliadb/search/search/chat/query.py +274 -267
- nucliadb/{writer/resource/slug.py → search/search/cut.py} +8 -6
- nucliadb/search/search/fetch.py +43 -36
- nucliadb/search/search/filters.py +9 -15
- nucliadb/search/search/find.py +214 -54
- nucliadb/search/search/find_merge.py +408 -391
- nucliadb/search/search/hydrator.py +191 -0
- nucliadb/search/search/merge.py +198 -234
- nucliadb/search/search/metrics.py +73 -2
- nucliadb/search/search/paragraphs.py +64 -106
- nucliadb/search/search/pgcatalog.py +233 -0
- nucliadb/search/search/predict_proxy.py +1 -1
- nucliadb/search/search/query.py +386 -257
- nucliadb/search/search/query_parser/exceptions.py +22 -0
- nucliadb/search/search/query_parser/models.py +101 -0
- nucliadb/search/search/query_parser/parser.py +183 -0
- nucliadb/search/search/rank_fusion.py +204 -0
- nucliadb/search/search/rerankers.py +270 -0
- nucliadb/search/search/shards.py +4 -38
- nucliadb/search/search/summarize.py +14 -18
- nucliadb/search/search/utils.py +27 -4
- nucliadb/search/settings.py +15 -1
- nucliadb/standalone/api_router.py +4 -10
- nucliadb/standalone/app.py +17 -14
- nucliadb/standalone/auth.py +7 -21
- nucliadb/standalone/config.py +9 -12
- nucliadb/standalone/introspect.py +5 -5
- nucliadb/standalone/lifecycle.py +26 -25
- nucliadb/standalone/migrations.py +58 -0
- nucliadb/standalone/purge.py +9 -8
- nucliadb/standalone/py.typed +0 -0
- nucliadb/standalone/run.py +25 -18
- nucliadb/standalone/settings.py +10 -14
- nucliadb/standalone/versions.py +15 -5
- nucliadb/tasks/consumer.py +8 -12
- nucliadb/tasks/producer.py +7 -6
- nucliadb/tests/config.py +53 -0
- nucliadb/train/__init__.py +1 -3
- nucliadb/train/api/utils.py +1 -2
- nucliadb/train/api/v1/shards.py +2 -2
- nucliadb/train/api/v1/trainset.py +4 -6
- nucliadb/train/app.py +14 -47
- nucliadb/train/generator.py +10 -19
- nucliadb/train/generators/field_classifier.py +7 -19
- nucliadb/train/generators/field_streaming.py +156 -0
- nucliadb/train/generators/image_classifier.py +12 -18
- nucliadb/train/generators/paragraph_classifier.py +5 -9
- nucliadb/train/generators/paragraph_streaming.py +6 -9
- nucliadb/train/generators/question_answer_streaming.py +19 -20
- nucliadb/train/generators/sentence_classifier.py +9 -15
- nucliadb/train/generators/token_classifier.py +45 -36
- nucliadb/train/generators/utils.py +14 -18
- nucliadb/train/lifecycle.py +7 -3
- nucliadb/train/nodes.py +23 -32
- nucliadb/train/py.typed +0 -0
- nucliadb/train/servicer.py +13 -21
- nucliadb/train/settings.py +2 -6
- nucliadb/train/types.py +13 -10
- nucliadb/train/upload.py +3 -6
- nucliadb/train/uploader.py +20 -25
- nucliadb/train/utils.py +1 -1
- nucliadb/writer/__init__.py +1 -3
- nucliadb/writer/api/constants.py +0 -5
- nucliadb/{ingest/fields/keywordset.py → writer/api/utils.py} +13 -10
- nucliadb/writer/api/v1/export_import.py +102 -49
- nucliadb/writer/api/v1/field.py +196 -620
- nucliadb/writer/api/v1/knowledgebox.py +221 -71
- nucliadb/writer/api/v1/learning_config.py +2 -2
- nucliadb/writer/api/v1/resource.py +114 -216
- nucliadb/writer/api/v1/services.py +64 -132
- nucliadb/writer/api/v1/slug.py +61 -0
- nucliadb/writer/api/v1/transaction.py +67 -0
- nucliadb/writer/api/v1/upload.py +184 -215
- nucliadb/writer/app.py +11 -61
- nucliadb/writer/back_pressure.py +62 -43
- nucliadb/writer/exceptions.py +0 -4
- nucliadb/writer/lifecycle.py +21 -15
- nucliadb/writer/py.typed +0 -0
- nucliadb/writer/resource/audit.py +2 -1
- nucliadb/writer/resource/basic.py +48 -62
- nucliadb/writer/resource/field.py +45 -135
- nucliadb/writer/resource/origin.py +1 -2
- nucliadb/writer/settings.py +14 -5
- nucliadb/writer/tus/__init__.py +17 -15
- nucliadb/writer/tus/azure.py +111 -0
- nucliadb/writer/tus/dm.py +17 -5
- nucliadb/writer/tus/exceptions.py +1 -3
- nucliadb/writer/tus/gcs.py +56 -84
- nucliadb/writer/tus/local.py +21 -37
- nucliadb/writer/tus/s3.py +28 -68
- nucliadb/writer/tus/storage.py +5 -56
- nucliadb/writer/vectorsets.py +125 -0
- nucliadb-6.2.1.post2777.dist-info/METADATA +148 -0
- nucliadb-6.2.1.post2777.dist-info/RECORD +343 -0
- {nucliadb-2.46.1.post382.dist-info → nucliadb-6.2.1.post2777.dist-info}/WHEEL +1 -1
- nucliadb/common/maindb/redis.py +0 -194
- nucliadb/common/maindb/tikv.py +0 -412
- nucliadb/ingest/fields/layout.py +0 -58
- nucliadb/ingest/tests/conftest.py +0 -30
- nucliadb/ingest/tests/fixtures.py +0 -771
- nucliadb/ingest/tests/integration/consumer/__init__.py +0 -18
- nucliadb/ingest/tests/integration/consumer/test_auditing.py +0 -80
- nucliadb/ingest/tests/integration/consumer/test_materializer.py +0 -89
- nucliadb/ingest/tests/integration/consumer/test_pull.py +0 -144
- nucliadb/ingest/tests/integration/consumer/test_service.py +0 -81
- nucliadb/ingest/tests/integration/consumer/test_shard_creator.py +0 -68
- nucliadb/ingest/tests/integration/ingest/test_ingest.py +0 -691
- nucliadb/ingest/tests/integration/ingest/test_processing_engine.py +0 -95
- nucliadb/ingest/tests/integration/ingest/test_relations.py +0 -272
- nucliadb/ingest/tests/unit/consumer/__init__.py +0 -18
- nucliadb/ingest/tests/unit/consumer/test_auditing.py +0 -140
- nucliadb/ingest/tests/unit/consumer/test_consumer.py +0 -69
- nucliadb/ingest/tests/unit/consumer/test_pull.py +0 -60
- nucliadb/ingest/tests/unit/consumer/test_shard_creator.py +0 -139
- nucliadb/ingest/tests/unit/consumer/test_utils.py +0 -67
- nucliadb/ingest/tests/unit/orm/__init__.py +0 -19
- nucliadb/ingest/tests/unit/orm/test_brain.py +0 -247
- nucliadb/ingest/tests/unit/orm/test_processor.py +0 -131
- nucliadb/ingest/tests/unit/orm/test_resource.py +0 -275
- nucliadb/ingest/tests/unit/test_partitions.py +0 -40
- nucliadb/ingest/tests/unit/test_processing.py +0 -171
- nucliadb/middleware/transaction.py +0 -117
- nucliadb/reader/api/v1/learning_collector.py +0 -63
- nucliadb/reader/tests/__init__.py +0 -19
- nucliadb/reader/tests/conftest.py +0 -31
- nucliadb/reader/tests/fixtures.py +0 -136
- nucliadb/reader/tests/test_list_resources.py +0 -75
- nucliadb/reader/tests/test_reader_file_download.py +0 -273
- nucliadb/reader/tests/test_reader_resource.py +0 -379
- nucliadb/reader/tests/test_reader_resource_field.py +0 -219
- nucliadb/search/api/v1/chat.py +0 -258
- nucliadb/search/api/v1/resource/chat.py +0 -94
- nucliadb/search/tests/__init__.py +0 -19
- nucliadb/search/tests/conftest.py +0 -33
- nucliadb/search/tests/fixtures.py +0 -199
- nucliadb/search/tests/node.py +0 -465
- nucliadb/search/tests/unit/__init__.py +0 -18
- nucliadb/search/tests/unit/api/__init__.py +0 -19
- nucliadb/search/tests/unit/api/v1/__init__.py +0 -19
- nucliadb/search/tests/unit/api/v1/resource/__init__.py +0 -19
- nucliadb/search/tests/unit/api/v1/resource/test_ask.py +0 -67
- nucliadb/search/tests/unit/api/v1/resource/test_chat.py +0 -97
- nucliadb/search/tests/unit/api/v1/test_chat.py +0 -96
- nucliadb/search/tests/unit/api/v1/test_predict_proxy.py +0 -98
- nucliadb/search/tests/unit/api/v1/test_summarize.py +0 -93
- nucliadb/search/tests/unit/search/__init__.py +0 -18
- nucliadb/search/tests/unit/search/requesters/__init__.py +0 -18
- nucliadb/search/tests/unit/search/requesters/test_utils.py +0 -210
- nucliadb/search/tests/unit/search/search/__init__.py +0 -19
- nucliadb/search/tests/unit/search/search/test_shards.py +0 -45
- nucliadb/search/tests/unit/search/search/test_utils.py +0 -82
- nucliadb/search/tests/unit/search/test_chat_prompt.py +0 -266
- nucliadb/search/tests/unit/search/test_fetch.py +0 -108
- nucliadb/search/tests/unit/search/test_filters.py +0 -125
- nucliadb/search/tests/unit/search/test_paragraphs.py +0 -157
- nucliadb/search/tests/unit/search/test_predict_proxy.py +0 -106
- nucliadb/search/tests/unit/search/test_query.py +0 -201
- nucliadb/search/tests/unit/test_app.py +0 -79
- nucliadb/search/tests/unit/test_find_merge.py +0 -112
- nucliadb/search/tests/unit/test_merge.py +0 -34
- nucliadb/search/tests/unit/test_predict.py +0 -584
- nucliadb/standalone/tests/__init__.py +0 -19
- nucliadb/standalone/tests/conftest.py +0 -33
- nucliadb/standalone/tests/fixtures.py +0 -38
- nucliadb/standalone/tests/unit/__init__.py +0 -18
- nucliadb/standalone/tests/unit/test_api_router.py +0 -61
- nucliadb/standalone/tests/unit/test_auth.py +0 -169
- nucliadb/standalone/tests/unit/test_introspect.py +0 -35
- nucliadb/standalone/tests/unit/test_versions.py +0 -68
- nucliadb/tests/benchmarks/__init__.py +0 -19
- nucliadb/tests/benchmarks/test_search.py +0 -99
- nucliadb/tests/conftest.py +0 -32
- nucliadb/tests/fixtures.py +0 -736
- nucliadb/tests/knowledgeboxes/philosophy_books.py +0 -203
- nucliadb/tests/knowledgeboxes/ten_dummy_resources.py +0 -109
- nucliadb/tests/migrations/__init__.py +0 -19
- nucliadb/tests/migrations/test_migration_0017.py +0 -80
- nucliadb/tests/tikv.py +0 -240
- nucliadb/tests/unit/__init__.py +0 -19
- nucliadb/tests/unit/common/__init__.py +0 -19
- nucliadb/tests/unit/common/cluster/__init__.py +0 -19
- nucliadb/tests/unit/common/cluster/discovery/__init__.py +0 -19
- nucliadb/tests/unit/common/cluster/discovery/test_k8s.py +0 -170
- nucliadb/tests/unit/common/cluster/standalone/__init__.py +0 -18
- nucliadb/tests/unit/common/cluster/standalone/test_service.py +0 -113
- nucliadb/tests/unit/common/cluster/standalone/test_utils.py +0 -59
- nucliadb/tests/unit/common/cluster/test_cluster.py +0 -399
- nucliadb/tests/unit/common/cluster/test_kb_shard_manager.py +0 -178
- nucliadb/tests/unit/common/cluster/test_rollover.py +0 -279
- nucliadb/tests/unit/common/maindb/__init__.py +0 -18
- nucliadb/tests/unit/common/maindb/test_driver.py +0 -127
- nucliadb/tests/unit/common/maindb/test_tikv.py +0 -53
- nucliadb/tests/unit/common/maindb/test_utils.py +0 -81
- nucliadb/tests/unit/common/test_context.py +0 -36
- nucliadb/tests/unit/export_import/__init__.py +0 -19
- nucliadb/tests/unit/export_import/test_datamanager.py +0 -37
- nucliadb/tests/unit/export_import/test_utils.py +0 -294
- nucliadb/tests/unit/migrator/__init__.py +0 -19
- nucliadb/tests/unit/migrator/test_migrator.py +0 -87
- nucliadb/tests/unit/tasks/__init__.py +0 -19
- nucliadb/tests/unit/tasks/conftest.py +0 -42
- nucliadb/tests/unit/tasks/test_consumer.py +0 -93
- nucliadb/tests/unit/tasks/test_producer.py +0 -95
- nucliadb/tests/unit/tasks/test_tasks.py +0 -60
- nucliadb/tests/unit/test_field_ids.py +0 -49
- nucliadb/tests/unit/test_health.py +0 -84
- nucliadb/tests/unit/test_kb_slugs.py +0 -54
- nucliadb/tests/unit/test_learning_proxy.py +0 -252
- nucliadb/tests/unit/test_metrics_exporter.py +0 -77
- nucliadb/tests/unit/test_purge.py +0 -138
- nucliadb/tests/utils/__init__.py +0 -74
- nucliadb/tests/utils/aiohttp_session.py +0 -44
- nucliadb/tests/utils/broker_messages/__init__.py +0 -167
- nucliadb/tests/utils/broker_messages/fields.py +0 -181
- nucliadb/tests/utils/broker_messages/helpers.py +0 -33
- nucliadb/tests/utils/entities.py +0 -78
- nucliadb/train/api/v1/check.py +0 -60
- nucliadb/train/tests/__init__.py +0 -19
- nucliadb/train/tests/conftest.py +0 -29
- nucliadb/train/tests/fixtures.py +0 -342
- nucliadb/train/tests/test_field_classification.py +0 -122
- nucliadb/train/tests/test_get_entities.py +0 -80
- nucliadb/train/tests/test_get_info.py +0 -51
- nucliadb/train/tests/test_get_ontology.py +0 -34
- nucliadb/train/tests/test_get_ontology_count.py +0 -63
- nucliadb/train/tests/test_image_classification.py +0 -222
- nucliadb/train/tests/test_list_fields.py +0 -39
- nucliadb/train/tests/test_list_paragraphs.py +0 -73
- nucliadb/train/tests/test_list_resources.py +0 -39
- nucliadb/train/tests/test_list_sentences.py +0 -71
- nucliadb/train/tests/test_paragraph_classification.py +0 -123
- nucliadb/train/tests/test_paragraph_streaming.py +0 -118
- nucliadb/train/tests/test_question_answer_streaming.py +0 -239
- nucliadb/train/tests/test_sentence_classification.py +0 -143
- nucliadb/train/tests/test_token_classification.py +0 -136
- nucliadb/train/tests/utils.py +0 -108
- nucliadb/writer/layouts/__init__.py +0 -51
- nucliadb/writer/layouts/v1.py +0 -59
- nucliadb/writer/resource/vectors.py +0 -120
- nucliadb/writer/tests/__init__.py +0 -19
- nucliadb/writer/tests/conftest.py +0 -31
- nucliadb/writer/tests/fixtures.py +0 -192
- nucliadb/writer/tests/test_fields.py +0 -486
- nucliadb/writer/tests/test_files.py +0 -743
- nucliadb/writer/tests/test_knowledgebox.py +0 -49
- nucliadb/writer/tests/test_reprocess_file_field.py +0 -139
- nucliadb/writer/tests/test_resources.py +0 -546
- nucliadb/writer/tests/test_service.py +0 -137
- nucliadb/writer/tests/test_tus.py +0 -203
- nucliadb/writer/tests/utils.py +0 -35
- nucliadb/writer/tus/pg.py +0 -125
- nucliadb-2.46.1.post382.dist-info/METADATA +0 -134
- nucliadb-2.46.1.post382.dist-info/RECORD +0 -451
- {nucliadb/ingest/tests → migrations/pg}/__init__.py +0 -0
- /nucliadb/{ingest/tests/integration → common/external_index_providers}/__init__.py +0 -0
- /nucliadb/{ingest/tests/integration/ingest → common/models_utils}/__init__.py +0 -0
- /nucliadb/{ingest/tests/unit → search/search/query_parser}/__init__.py +0 -0
- /nucliadb/{ingest/tests → tests}/vectors.py +0 -0
- {nucliadb-2.46.1.post382.dist-info → nucliadb-6.2.1.post2777.dist-info}/entry_points.txt +0 -0
- {nucliadb-2.46.1.post382.dist-info → nucliadb-6.2.1.post2777.dist-info}/top_level.txt +0 -0
- {nucliadb-2.46.1.post382.dist-info → nucliadb-6.2.1.post2777.dist-info}/zip-safe +0 -0
@@ -1,203 +0,0 @@
|
|
1
|
-
# Copyright (C) 2021 Bosutech XXI S.L.
|
2
|
-
#
|
3
|
-
# nucliadb is offered under the AGPL v3.0 and as commercial software.
|
4
|
-
# For commercial licensing, contact us at info@nuclia.com.
|
5
|
-
#
|
6
|
-
# AGPL:
|
7
|
-
# This program is free software: you can redistribute it and/or modify
|
8
|
-
# it under the terms of the GNU Affero General Public License as
|
9
|
-
# published by the Free Software Foundation, either version 3 of the
|
10
|
-
# License, or (at your option) any later version.
|
11
|
-
#
|
12
|
-
# This program is distributed in the hope that it will be useful,
|
13
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
-
# GNU Affero General Public License for more details.
|
16
|
-
#
|
17
|
-
# You should have received a copy of the GNU Affero General Public License
|
18
|
-
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
19
|
-
#
|
20
|
-
|
21
|
-
import pytest
|
22
|
-
from httpx import AsyncClient
|
23
|
-
|
24
|
-
|
25
|
-
@pytest.fixture(scope="function")
|
26
|
-
async def philosophy_books_kb(
|
27
|
-
nucliadb_manager: AsyncClient,
|
28
|
-
nucliadb_writer: AsyncClient,
|
29
|
-
):
|
30
|
-
payloads = [
|
31
|
-
{
|
32
|
-
"slug": "meditations",
|
33
|
-
"title": "Meditations",
|
34
|
-
"summary": (
|
35
|
-
"Series of personal writings by Marcus Aurelius recording his private notes to "
|
36
|
-
"himself and ideas on Stoic philosophy"
|
37
|
-
),
|
38
|
-
"usermetadata": {
|
39
|
-
"relations": [
|
40
|
-
{
|
41
|
-
"relation": "ENTITY",
|
42
|
-
"to": {
|
43
|
-
"type": "entity",
|
44
|
-
"value": "Marcus Aurelius",
|
45
|
-
"group": "PERSON",
|
46
|
-
},
|
47
|
-
}
|
48
|
-
]
|
49
|
-
},
|
50
|
-
},
|
51
|
-
{
|
52
|
-
"slug": "nicomachean-ethics",
|
53
|
-
"title": "Nicomachean Ethics",
|
54
|
-
"summary": (
|
55
|
-
"Aristotle's best-known work on ethics, the science of human life"
|
56
|
-
),
|
57
|
-
"usermetadata": {
|
58
|
-
"relations": [
|
59
|
-
{
|
60
|
-
"relation": "ENTITY",
|
61
|
-
"to": {
|
62
|
-
"type": "entity",
|
63
|
-
"value": "Aristotle",
|
64
|
-
"group": "PERSON",
|
65
|
-
},
|
66
|
-
}
|
67
|
-
]
|
68
|
-
},
|
69
|
-
},
|
70
|
-
{
|
71
|
-
"slug": "beyond-good-and-evil",
|
72
|
-
"title": "Beyond Good and Evil: Prelude to a philosophy of the Future",
|
73
|
-
"summary": (
|
74
|
-
"Nietzsche acuse past philosophers of lacking critical sense and blindly accepting "
|
75
|
-
"dogmatic premises in their consideration of morality"
|
76
|
-
),
|
77
|
-
"usermetadata": {
|
78
|
-
"relations": [
|
79
|
-
{
|
80
|
-
"relation": "ENTITY",
|
81
|
-
"to": {
|
82
|
-
"type": "entity",
|
83
|
-
"value": "Friedrich Nietzsche",
|
84
|
-
"group": "PERSON",
|
85
|
-
},
|
86
|
-
}
|
87
|
-
]
|
88
|
-
},
|
89
|
-
},
|
90
|
-
{
|
91
|
-
"slug": "meditations-on-first-philosophy",
|
92
|
-
"title": "Meditations on First Philosophy",
|
93
|
-
"summary": (
|
94
|
-
"Six meditations in which Descartes first discards all belief in things that are "
|
95
|
-
"not absolutely certain, and then tries to establish what can be known for sure"
|
96
|
-
),
|
97
|
-
"usermetadata": {
|
98
|
-
"relations": [
|
99
|
-
{
|
100
|
-
"relation": "ENTITY",
|
101
|
-
"to": {
|
102
|
-
"type": "entity",
|
103
|
-
"value": "René Descartes",
|
104
|
-
"group": "PERSON",
|
105
|
-
},
|
106
|
-
}
|
107
|
-
]
|
108
|
-
},
|
109
|
-
},
|
110
|
-
{
|
111
|
-
"slug": "the-principles-of-the-most-ancient-and-modern-philosophy",
|
112
|
-
"title": "The Principles of the most Ancient and Modern Philosophy",
|
113
|
-
"summary": (
|
114
|
-
"Conway's monistic view of the world as created from one substance"
|
115
|
-
),
|
116
|
-
"usermetadata": {
|
117
|
-
"relations": [
|
118
|
-
{
|
119
|
-
"relation": "ENTITY",
|
120
|
-
"to": {
|
121
|
-
"type": "entity",
|
122
|
-
"value": "Anne Conway",
|
123
|
-
"group": "PERSON",
|
124
|
-
},
|
125
|
-
}
|
126
|
-
]
|
127
|
-
},
|
128
|
-
},
|
129
|
-
{
|
130
|
-
"slug": "ethics",
|
131
|
-
"title": "Ethics",
|
132
|
-
"summary": (
|
133
|
-
"Spinoza puts forward a small number of definitions and axioms from which he "
|
134
|
-
"attempts to derive hundreds of propositions and corollaries"
|
135
|
-
),
|
136
|
-
"usermetadata": {
|
137
|
-
"relations": [
|
138
|
-
{
|
139
|
-
"relation": "ENTITY",
|
140
|
-
"to": {
|
141
|
-
"type": "entity",
|
142
|
-
"value": "Baruch Spinoza",
|
143
|
-
"group": "PERSON",
|
144
|
-
},
|
145
|
-
}
|
146
|
-
]
|
147
|
-
},
|
148
|
-
},
|
149
|
-
{
|
150
|
-
"slug": "critique-of-pure-reason",
|
151
|
-
"title": "Critique of Pure Reason",
|
152
|
-
"summary": ("Kant seeks to determine the limits and scope of metaphysics"),
|
153
|
-
"usermetadata": {
|
154
|
-
"relations": [
|
155
|
-
{
|
156
|
-
"relation": "ENTITY",
|
157
|
-
"to": {
|
158
|
-
"type": "entity",
|
159
|
-
"value": "Immanuel Kant",
|
160
|
-
"group": "PERSON",
|
161
|
-
},
|
162
|
-
}
|
163
|
-
]
|
164
|
-
},
|
165
|
-
},
|
166
|
-
{
|
167
|
-
"slug": "the-human-condition",
|
168
|
-
"title": "The Human Condition",
|
169
|
-
"summary": (
|
170
|
-
"Arendt differentiates political and social concepts, labor and work, and various "
|
171
|
-
"forms of actions; she then explores the implications of those distinctions"
|
172
|
-
),
|
173
|
-
"usermetadata": {
|
174
|
-
"relations": [
|
175
|
-
{
|
176
|
-
"relation": "ENTITY",
|
177
|
-
"to": {
|
178
|
-
"type": "entity",
|
179
|
-
"value": "Hannah Arendt",
|
180
|
-
"group": "PERSON",
|
181
|
-
},
|
182
|
-
}
|
183
|
-
]
|
184
|
-
},
|
185
|
-
},
|
186
|
-
]
|
187
|
-
|
188
|
-
resp = await nucliadb_manager.post("/kbs", json={"slug": "philosophy-books"})
|
189
|
-
assert resp.status_code == 201
|
190
|
-
kbid = resp.json().get("uuid")
|
191
|
-
|
192
|
-
for payload in payloads:
|
193
|
-
resp = await nucliadb_writer.post(
|
194
|
-
f"/kb/{kbid}/resources",
|
195
|
-
headers={"X-Synchronous": "true"},
|
196
|
-
json=payload,
|
197
|
-
)
|
198
|
-
assert resp.status_code == 201
|
199
|
-
|
200
|
-
yield kbid
|
201
|
-
|
202
|
-
resp = await nucliadb_manager.delete(f"/kb/{kbid}")
|
203
|
-
assert resp.status_code == 200
|
@@ -1,109 +0,0 @@
|
|
1
|
-
# Copyright (C) 2021 Bosutech XXI S.L.
|
2
|
-
#
|
3
|
-
# nucliadb is offered under the AGPL v3.0 and as commercial software.
|
4
|
-
# For commercial licensing, contact us at info@nuclia.com.
|
5
|
-
#
|
6
|
-
# AGPL:
|
7
|
-
# This program is free software: you can redistribute it and/or modify
|
8
|
-
# it under the terms of the GNU Affero General Public License as
|
9
|
-
# published by the Free Software Foundation, either version 3 of the
|
10
|
-
# License, or (at your option) any later version.
|
11
|
-
#
|
12
|
-
# This program is distributed in the hope that it will be useful,
|
13
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
-
# GNU Affero General Public License for more details.
|
16
|
-
#
|
17
|
-
# You should have received a copy of the GNU Affero General Public License
|
18
|
-
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
19
|
-
#
|
20
|
-
import asyncio
|
21
|
-
|
22
|
-
import pytest
|
23
|
-
from httpx import AsyncClient
|
24
|
-
|
25
|
-
|
26
|
-
@pytest.fixture(scope="function")
|
27
|
-
async def ten_dummy_resources_kb(
|
28
|
-
nucliadb_manager: AsyncClient,
|
29
|
-
nucliadb_reader: AsyncClient,
|
30
|
-
nucliadb_writer: AsyncClient,
|
31
|
-
):
|
32
|
-
N_RESOURCES = 10
|
33
|
-
|
34
|
-
payloads = [
|
35
|
-
{
|
36
|
-
"slug": f"dummy-resource-{i}",
|
37
|
-
"title": f"Dummy resource {i}",
|
38
|
-
"summary": f"Dummy resource {i} summary",
|
39
|
-
}
|
40
|
-
for i in range(N_RESOURCES)
|
41
|
-
]
|
42
|
-
|
43
|
-
resp = await nucliadb_manager.post("/kbs", json={"slug": "ten-dummy-resources"})
|
44
|
-
assert resp.status_code == 201
|
45
|
-
kbid = resp.json().get("uuid")
|
46
|
-
|
47
|
-
for payload in payloads:
|
48
|
-
resp = await nucliadb_writer.post(
|
49
|
-
f"/kb/{kbid}/resources",
|
50
|
-
headers={"X-Synchronous": "true"},
|
51
|
-
json=payload,
|
52
|
-
)
|
53
|
-
assert resp.status_code == 201
|
54
|
-
|
55
|
-
await asyncio.sleep(1)
|
56
|
-
|
57
|
-
resp = await nucliadb_reader.get(
|
58
|
-
f"/kb/{kbid}/resources",
|
59
|
-
)
|
60
|
-
assert resp.status_code == 200
|
61
|
-
body = resp.json()
|
62
|
-
assert len(body["resources"]) == N_RESOURCES
|
63
|
-
|
64
|
-
yield kbid
|
65
|
-
|
66
|
-
resp = await nucliadb_manager.delete(f"/kb/{kbid}")
|
67
|
-
assert resp.status_code == 200
|
68
|
-
|
69
|
-
|
70
|
-
@pytest.fixture(scope="function")
|
71
|
-
async def ten_quick_dummy_resources_kb(
|
72
|
-
nucliadb_manager: AsyncClient,
|
73
|
-
nucliadb_reader: AsyncClient,
|
74
|
-
nucliadb_writer: AsyncClient,
|
75
|
-
):
|
76
|
-
N_RESOURCES = 10
|
77
|
-
|
78
|
-
payloads = [
|
79
|
-
{
|
80
|
-
"slug": f"dummy-resource-{i}",
|
81
|
-
"title": f"Dummy resource {i}",
|
82
|
-
"summary": f"Dummy resource {i} summary",
|
83
|
-
}
|
84
|
-
for i in range(N_RESOURCES)
|
85
|
-
]
|
86
|
-
|
87
|
-
resp = await nucliadb_manager.post("/kbs", json={"slug": "ten-dummy-resources"})
|
88
|
-
assert resp.status_code == 201
|
89
|
-
kbid = resp.json().get("uuid")
|
90
|
-
|
91
|
-
for payload in payloads:
|
92
|
-
resp = await nucliadb_writer.post(
|
93
|
-
f"/kb/{kbid}/resources",
|
94
|
-
headers={"X-Synchronous": "true"},
|
95
|
-
json=payload,
|
96
|
-
)
|
97
|
-
assert resp.status_code == 201
|
98
|
-
|
99
|
-
resp = await nucliadb_reader.get(
|
100
|
-
f"/kb/{kbid}/resources",
|
101
|
-
)
|
102
|
-
assert resp.status_code == 200
|
103
|
-
body = resp.json()
|
104
|
-
assert len(body["resources"]) == N_RESOURCES
|
105
|
-
|
106
|
-
yield kbid
|
107
|
-
|
108
|
-
resp = await nucliadb_manager.delete(f"/kb/{kbid}")
|
109
|
-
assert resp.status_code == 200
|
@@ -1,19 +0,0 @@
|
|
1
|
-
# Copyright (C) 2021 Bosutech XXI S.L.
|
2
|
-
#
|
3
|
-
# nucliadb is offered under the AGPL v3.0 and as commercial software.
|
4
|
-
# For commercial licensing, contact us at info@nuclia.com.
|
5
|
-
#
|
6
|
-
# AGPL:
|
7
|
-
# This program is free software: you can redistribute it and/or modify
|
8
|
-
# it under the terms of the GNU Affero General Public License as
|
9
|
-
# published by the Free Software Foundation, either version 3 of the
|
10
|
-
# License, or (at your option) any later version.
|
11
|
-
#
|
12
|
-
# This program is distributed in the hope that it will be useful,
|
13
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
-
# GNU Affero General Public License for more details.
|
16
|
-
#
|
17
|
-
# You should have received a copy of the GNU Affero General Public License
|
18
|
-
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
19
|
-
#
|
@@ -1,80 +0,0 @@
|
|
1
|
-
# Copyright (C) 2021 Bosutech XXI S.L.
|
2
|
-
#
|
3
|
-
# nucliadb is offered under the AGPL v3.0 and as commercial software.
|
4
|
-
# For commercial licensing, contact us at info@nuclia.com.
|
5
|
-
#
|
6
|
-
# AGPL:
|
7
|
-
# This program is free software: you can redistribute it and/or modify
|
8
|
-
# it under the terms of the GNU Affero General Public License as
|
9
|
-
# published by the Free Software Foundation, either version 3 of the
|
10
|
-
# License, or (at your option) any later version.
|
11
|
-
#
|
12
|
-
# This program is distributed in the hope that it will be useful,
|
13
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
-
# GNU Affero General Public License for more details.
|
16
|
-
#
|
17
|
-
# You should have received a copy of the GNU Affero General Public License
|
18
|
-
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
19
|
-
#
|
20
|
-
from unittest.mock import Mock
|
21
|
-
|
22
|
-
import pytest
|
23
|
-
|
24
|
-
from nucliadb.common import datamanagers
|
25
|
-
from nucliadb.common.maindb.driver import Driver
|
26
|
-
from nucliadb.migrator.models import Migration
|
27
|
-
from nucliadb.migrator.utils import get_migrations
|
28
|
-
from nucliadb_protos import writer_pb2
|
29
|
-
|
30
|
-
MIGRATION_UNDER_TEST = 17
|
31
|
-
migration: Migration = get_migrations(
|
32
|
-
from_version=MIGRATION_UNDER_TEST - 1, to_version=MIGRATION_UNDER_TEST
|
33
|
-
)[0]
|
34
|
-
assert migration.version == MIGRATION_UNDER_TEST
|
35
|
-
|
36
|
-
|
37
|
-
@pytest.mark.asyncio
|
38
|
-
async def test_migration_0017_kb(maindb_driver: Driver):
|
39
|
-
execution_context = Mock()
|
40
|
-
execution_context.kv_driver = maindb_driver
|
41
|
-
|
42
|
-
# setup a KB with the old format
|
43
|
-
kbid = "my-kbid"
|
44
|
-
async with maindb_driver.transaction() as txn:
|
45
|
-
shards = writer_pb2.Shards(
|
46
|
-
kbid=kbid,
|
47
|
-
shards=[
|
48
|
-
writer_pb2.ShardObject(
|
49
|
-
shard="shard-0",
|
50
|
-
replicas=[
|
51
|
-
writer_pb2.ShardReplica(),
|
52
|
-
writer_pb2.ShardReplica(),
|
53
|
-
],
|
54
|
-
),
|
55
|
-
writer_pb2.ShardObject(
|
56
|
-
shard="shard-1",
|
57
|
-
replicas=[
|
58
|
-
writer_pb2.ShardReplica(),
|
59
|
-
writer_pb2.ShardReplica(),
|
60
|
-
],
|
61
|
-
),
|
62
|
-
],
|
63
|
-
# this field is an index to shards list indicating which is the
|
64
|
-
# writable shard
|
65
|
-
actual=1,
|
66
|
-
)
|
67
|
-
await datamanagers.cluster.update_kb_shards(txn, kbid=kbid, shards=shards)
|
68
|
-
await txn.commit()
|
69
|
-
|
70
|
-
await migration.module.migrate_kb(execution_context, kbid)
|
71
|
-
|
72
|
-
async with maindb_driver.transaction(read_only=True) as txn:
|
73
|
-
migrated = await datamanagers.cluster.get_kb_shards(txn, kbid=kbid)
|
74
|
-
assert migrated is not None
|
75
|
-
|
76
|
-
# actual is the same
|
77
|
-
assert shards.actual == 1
|
78
|
-
|
79
|
-
# Writable shard now is pointed by `ShardObject.read_only` field
|
80
|
-
assert [True, False] == [shard.read_only for shard in migrated.shards]
|
nucliadb/tests/tikv.py
DELETED
@@ -1,240 +0,0 @@
|
|
1
|
-
# Copyright (C) 2021 Bosutech XXI S.L.
|
2
|
-
#
|
3
|
-
# nucliadb is offered under the AGPL v3.0 and as commercial software.
|
4
|
-
# For commercial licensing, contact us at info@nuclia.com.
|
5
|
-
#
|
6
|
-
# AGPL:
|
7
|
-
# This program is free software: you can redistribute it and/or modify
|
8
|
-
# it under the terms of the GNU Affero General Public License as
|
9
|
-
# published by the Free Software Foundation, either version 3 of the
|
10
|
-
# License, or (at your option) any later version.
|
11
|
-
#
|
12
|
-
# This program is distributed in the hope that it will be useful,
|
13
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
-
# GNU Affero General Public License for more details.
|
16
|
-
#
|
17
|
-
# You should have received a copy of the GNU Affero General Public License
|
18
|
-
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
19
|
-
#
|
20
|
-
import os
|
21
|
-
import platform
|
22
|
-
import signal
|
23
|
-
import subprocess
|
24
|
-
import tarfile
|
25
|
-
import tempfile
|
26
|
-
import time
|
27
|
-
from io import BytesIO
|
28
|
-
|
29
|
-
import pytest
|
30
|
-
import requests
|
31
|
-
from tikv_client import TransactionClient # type: ignore
|
32
|
-
|
33
|
-
|
34
|
-
class TiKVd(object):
|
35
|
-
def __init__(
|
36
|
-
self,
|
37
|
-
port=20160,
|
38
|
-
pd_port=2379,
|
39
|
-
peer_port=2380,
|
40
|
-
tikv_bin_name="tikv-server",
|
41
|
-
pd_bin_name="pd-server",
|
42
|
-
host="127.0.0.1",
|
43
|
-
path="",
|
44
|
-
debug=False,
|
45
|
-
):
|
46
|
-
self.port = port
|
47
|
-
self.pd_port = pd_port
|
48
|
-
self.peer_port = peer_port
|
49
|
-
self.tikv_bin_name = tikv_bin_name
|
50
|
-
self.pd_bin_name = pd_bin_name
|
51
|
-
self.path = path
|
52
|
-
self.host = host
|
53
|
-
self.tmpfolder = None
|
54
|
-
self.debug = debug
|
55
|
-
self.proc = None
|
56
|
-
self.proc2 = None
|
57
|
-
|
58
|
-
def start(self):
|
59
|
-
self.tmpfolder = tempfile.TemporaryDirectory()
|
60
|
-
|
61
|
-
cmd = [
|
62
|
-
f"{self.path}/{self.tikv_bin_name}",
|
63
|
-
f"--pd-endpoints={self.host}:{self.pd_port}",
|
64
|
-
f"--addr={self.host}:{self.port}",
|
65
|
-
f"--data-dir={self.tmpfolder.name}/tikv1",
|
66
|
-
f"--log-file={self.tmpfolder.name}/tikv1.log",
|
67
|
-
]
|
68
|
-
|
69
|
-
if self.debug:
|
70
|
-
self.proc2 = subprocess.Popen(cmd)
|
71
|
-
else:
|
72
|
-
self.proc2 = subprocess.Popen(
|
73
|
-
cmd, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL
|
74
|
-
)
|
75
|
-
|
76
|
-
if self.debug:
|
77
|
-
if self.proc2 is None:
|
78
|
-
print(
|
79
|
-
"[\031[0;33mDEBUG\033[0;0m] Failed to start server listening on port %d started."
|
80
|
-
% self.port
|
81
|
-
)
|
82
|
-
else:
|
83
|
-
print(
|
84
|
-
"[\033[0;33mDEBUG\033[0;0m] Server listening on port %d started."
|
85
|
-
% self.port
|
86
|
-
)
|
87
|
-
cmd = [
|
88
|
-
f"{self.path}/{self.pd_bin_name}",
|
89
|
-
"--name=pd",
|
90
|
-
f"--data-dir={self.tmpfolder.name}",
|
91
|
-
f"--client-urls=http://{self.host}:{self.pd_port}",
|
92
|
-
f"--peer-urls=http://{self.host}:{self.peer_port}",
|
93
|
-
f"--initial-cluster=pd=http://{self.host}:{self.peer_port}",
|
94
|
-
]
|
95
|
-
|
96
|
-
if self.debug:
|
97
|
-
self.proc = subprocess.Popen(cmd)
|
98
|
-
else:
|
99
|
-
self.proc = subprocess.Popen(
|
100
|
-
cmd, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL
|
101
|
-
)
|
102
|
-
|
103
|
-
if self.debug:
|
104
|
-
if self.proc is None:
|
105
|
-
print(
|
106
|
-
"[\031[0;33mDEBUG\033[0;0m] Failed to start server listening on port %d started."
|
107
|
-
% self.pd_port
|
108
|
-
)
|
109
|
-
else:
|
110
|
-
print(
|
111
|
-
"[\033[0;33mDEBUG\033[0;0m] Server listening on port %d started."
|
112
|
-
% self.pd_port
|
113
|
-
)
|
114
|
-
return self.proc
|
115
|
-
|
116
|
-
def stop(self):
|
117
|
-
if self.debug:
|
118
|
-
print(
|
119
|
-
"[\033[0;33mDEBUG\033[0;0m] Server listening on %d will stop."
|
120
|
-
% self.port
|
121
|
-
)
|
122
|
-
|
123
|
-
if self.debug:
|
124
|
-
if self.proc is None:
|
125
|
-
print(
|
126
|
-
"[\033[0;31mDEBUG\033[0;0m] Failed terminating server listening on port %d"
|
127
|
-
% self.port
|
128
|
-
)
|
129
|
-
if self.proc2 is None:
|
130
|
-
print(
|
131
|
-
"[\033[0;31mDEBUG\033[0;0m] Failed terminating server listening on port %d"
|
132
|
-
% self.port
|
133
|
-
)
|
134
|
-
|
135
|
-
if self.proc.returncode is not None:
|
136
|
-
if self.debug:
|
137
|
-
print(
|
138
|
-
"[\033[0;31mDEBUG\033[0;0m] Server listening on port {port} finished running already with exit {ret}".format( # noqa
|
139
|
-
port=self.pd_port, ret=self.proc.returncode
|
140
|
-
)
|
141
|
-
)
|
142
|
-
elif self.proc2.returncode is not None:
|
143
|
-
if self.debug:
|
144
|
-
print(
|
145
|
-
"[\033[0;31mDEBUG\033[0;0m] Server listening on port {port} finished running already with exit {ret}".format( # noqa
|
146
|
-
port=self.port, ret=self.proc2.returncode
|
147
|
-
)
|
148
|
-
)
|
149
|
-
else:
|
150
|
-
os.kill(self.proc.pid, signal.SIGKILL)
|
151
|
-
self.proc.wait()
|
152
|
-
os.kill(self.proc2.pid, signal.SIGKILL)
|
153
|
-
self.proc2.wait()
|
154
|
-
if self.debug:
|
155
|
-
print(
|
156
|
-
"[\033[0;33mDEBUG\033[0;0m] Server listening on %d was stopped."
|
157
|
-
% self.port
|
158
|
-
)
|
159
|
-
if self.tmpfolder is not None:
|
160
|
-
self.tmpfolder.cleanup()
|
161
|
-
self.tmpfolder = None
|
162
|
-
|
163
|
-
|
164
|
-
def start_tikvd(tikvd: TiKVd):
|
165
|
-
tikvd.start()
|
166
|
-
|
167
|
-
endpoint = "127.0.0.1:{port}".format(port=tikvd.port)
|
168
|
-
retries = 0
|
169
|
-
while True:
|
170
|
-
if retries > 100:
|
171
|
-
break
|
172
|
-
|
173
|
-
try:
|
174
|
-
connection = TransactionClient.connect(endpoint)
|
175
|
-
txn = connection.begin(pessimistic=True)
|
176
|
-
txn.rollback()
|
177
|
-
except: # noqa
|
178
|
-
retries += 1
|
179
|
-
time.sleep(0.1)
|
180
|
-
|
181
|
-
|
182
|
-
@pytest.fixture(scope="session")
|
183
|
-
def tikvd():
|
184
|
-
if os.environ.get("TESTING_TIKV_LOCAL", None):
|
185
|
-
yield "localhost", "XX", "2379"
|
186
|
-
return
|
187
|
-
|
188
|
-
if not os.path.isfile("tikv-server"):
|
189
|
-
version = "v5.3.1"
|
190
|
-
arch = platform.machine()
|
191
|
-
if arch == "x86_64":
|
192
|
-
arch = "amd64"
|
193
|
-
system = platform.system().lower()
|
194
|
-
|
195
|
-
resp = requests.get(
|
196
|
-
f"https://tiup-mirrors.pingcap.com/tikv-{version}-{system}-{arch}.tar.gz"
|
197
|
-
)
|
198
|
-
|
199
|
-
zipfile = tarfile.open(fileobj=BytesIO(resp.content), mode="r:gz")
|
200
|
-
|
201
|
-
zipfile.extract(f"tikv-server")
|
202
|
-
os.chmod("tikv-server", 755)
|
203
|
-
|
204
|
-
if not os.path.isfile("pd-server"):
|
205
|
-
version = "v5.3.1"
|
206
|
-
arch = platform.machine()
|
207
|
-
if arch == "x86_64":
|
208
|
-
arch = "amd64"
|
209
|
-
system = platform.system().lower()
|
210
|
-
|
211
|
-
resp = requests.get(
|
212
|
-
f"https://tiup-mirrors.pingcap.com/pd-{version}-{system}-{arch}.tar.gz"
|
213
|
-
)
|
214
|
-
|
215
|
-
zipfile = tarfile.open(fileobj=BytesIO(resp.content), mode="r:gz")
|
216
|
-
|
217
|
-
zipfile.extract(f"pd-server")
|
218
|
-
os.chmod("pd-server", 755)
|
219
|
-
|
220
|
-
server = TiKVd(debug=True)
|
221
|
-
server.tikv_bin_name = "tikv-server"
|
222
|
-
server.pd_bin_name = "pd-server"
|
223
|
-
server.path = os.getcwd()
|
224
|
-
|
225
|
-
start_tikvd(server)
|
226
|
-
print("Started TiKVd")
|
227
|
-
|
228
|
-
for i in range(100):
|
229
|
-
resp = requests.get(f"http://{server.host}:{server.pd_port}/pd/api/v1/stores")
|
230
|
-
if (
|
231
|
-
resp.status_code == 200
|
232
|
-
and resp.json()["stores"][0]["store"]["state_name"] == "Up"
|
233
|
-
):
|
234
|
-
break
|
235
|
-
print(resp.status_code)
|
236
|
-
print(resp.json())
|
237
|
-
time.sleep(1)
|
238
|
-
|
239
|
-
yield server.host, server.port, server.pd_port
|
240
|
-
server.stop()
|
nucliadb/tests/unit/__init__.py
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
# Copyright (C) 2021 Bosutech XXI S.L.
|
2
|
-
#
|
3
|
-
# nucliadb is offered under the AGPL v3.0 and as commercial software.
|
4
|
-
# For commercial licensing, contact us at info@nuclia.com.
|
5
|
-
#
|
6
|
-
# AGPL:
|
7
|
-
# This program is free software: you can redistribute it and/or modify
|
8
|
-
# it under the terms of the GNU Affero General Public License as
|
9
|
-
# published by the Free Software Foundation, either version 3 of the
|
10
|
-
# License, or (at your option) any later version.
|
11
|
-
#
|
12
|
-
# This program is distributed in the hope that it will be useful,
|
13
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
-
# GNU Affero General Public License for more details.
|
16
|
-
#
|
17
|
-
# You should have received a copy of the GNU Affero General Public License
|
18
|
-
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
19
|
-
#
|
@@ -1,19 +0,0 @@
|
|
1
|
-
# Copyright (C) 2021 Bosutech XXI S.L.
|
2
|
-
#
|
3
|
-
# nucliadb is offered under the AGPL v3.0 and as commercial software.
|
4
|
-
# For commercial licensing, contact us at info@nuclia.com.
|
5
|
-
#
|
6
|
-
# AGPL:
|
7
|
-
# This program is free software: you can redistribute it and/or modify
|
8
|
-
# it under the terms of the GNU Affero General Public License as
|
9
|
-
# published by the Free Software Foundation, either version 3 of the
|
10
|
-
# License, or (at your option) any later version.
|
11
|
-
#
|
12
|
-
# This program is distributed in the hope that it will be useful,
|
13
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
-
# GNU Affero General Public License for more details.
|
16
|
-
#
|
17
|
-
# You should have received a copy of the GNU Affero General Public License
|
18
|
-
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
19
|
-
#
|