From 9b6027d5d4f43a123dea130cb62723b94968efb8 Mon Sep 17 00:00:00 2001 From: Marvin Zhang Date: Sun, 24 Nov 2024 22:30:00 +0800 Subject: [PATCH] feat: added ipc message --- crawlab/client/__init__.py | 2 - crawlab/client/client.py | 54 -- crawlab/config/config.py | 29 +- crawlab/config/task.py | 13 - crawlab/{constants.py => core/__init__.py} | 0 crawlab/entity/address.py | 25 - crawlab/entity/ipc_message.py | 9 + crawlab/entity/result.py | 9 - .../grpc/entity/model_service_request_pb2.py | 55 -- .../entity/model_service_request_pb2_grpc.py | 29 - crawlab/grpc/entity/response_pb2.py | 29 - crawlab/grpc/entity/response_pb2_grpc.py | 29 - .../grpc/services/dependency_service_pb2.py | 40 - .../services/dependency_service_pb2_grpc.py | 189 ----- crawlab/grpc/services/metric_service_pb2.py | 30 - .../grpc/services/metric_service_pb2_grpc.py | 103 --- .../grpc/services/model_base_service_pb2.py | 29 - .../services/model_base_service_pb2_grpc.py | 705 ------------------ crawlab/grpc/services/node_service_pb2.py | 38 - .../grpc/services/node_service_pb2_grpc.py | 189 ----- crawlab/grpc/services/task_service_pb2.py | 44 -- .../grpc/services/task_service_pb2_grpc.py | 232 ------ crawlab/log.py | 0 crawlab/logger.py | 6 - crawlab/result.py | 79 +- crawlab/scrapy/pipelines.py | 17 +- crawlab/utils/config.py | 42 +- crawlab/{client => utils}/request.py | 0 poetry.lock | 187 ++++- pyproject.toml | 12 +- 30 files changed, 236 insertions(+), 1989 deletions(-) delete mode 100644 crawlab/client/__init__.py delete mode 100644 crawlab/client/client.py delete mode 100644 crawlab/config/task.py rename crawlab/{constants.py => core/__init__.py} (100%) delete mode 100644 crawlab/entity/address.py create mode 100644 crawlab/entity/ipc_message.py delete mode 100644 crawlab/entity/result.py delete mode 100644 crawlab/grpc/entity/model_service_request_pb2.py delete mode 100644 crawlab/grpc/entity/model_service_request_pb2_grpc.py delete mode 100644 crawlab/grpc/entity/response_pb2.py delete mode 100644 crawlab/grpc/entity/response_pb2_grpc.py delete mode 100644 crawlab/grpc/services/dependency_service_pb2.py delete mode 100644 crawlab/grpc/services/dependency_service_pb2_grpc.py delete mode 100644 crawlab/grpc/services/metric_service_pb2.py delete mode 100644 crawlab/grpc/services/metric_service_pb2_grpc.py delete mode 100644 crawlab/grpc/services/model_base_service_pb2.py delete mode 100644 crawlab/grpc/services/model_base_service_pb2_grpc.py delete mode 100644 crawlab/grpc/services/node_service_pb2.py delete mode 100644 crawlab/grpc/services/node_service_pb2_grpc.py delete mode 100644 crawlab/grpc/services/task_service_pb2.py delete mode 100644 crawlab/grpc/services/task_service_pb2_grpc.py delete mode 100644 crawlab/log.py delete mode 100644 crawlab/logger.py rename crawlab/{client => utils}/request.py (100%) diff --git a/crawlab/client/__init__.py b/crawlab/client/__init__.py deleted file mode 100644 index e306683..0000000 --- a/crawlab/client/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from .request import * -from .client import * diff --git a/crawlab/client/client.py b/crawlab/client/client.py deleted file mode 100644 index 261d059..0000000 --- a/crawlab/client/client.py +++ /dev/null @@ -1,54 +0,0 @@ -import os -from typing import Optional - -import grpc - -from crawlab.auth_token import get_auth_token_interceptor -from crawlab.entity.address import new_address_from_string, Address -from crawlab.grpc.services.model_base_service_pb2_grpc import ModelBaseServiceStub -from crawlab.grpc.services.node_service_pb2_grpc import NodeServiceStub -from crawlab.grpc.services.task_service_pb2_grpc import TaskServiceStub - - -class Client: - # settings - address: Address = None - timeout: int = 10 - - # internals - channel: grpc.Channel = None - - # dependencies - model_base_service_stub: ModelBaseServiceStub = None - node_service_stub: NodeServiceStub = None - task_service_stub: TaskServiceStub = None - - # plugin_client: Plugin = None - - def __init__(self): - try: - self.address = new_address_from_string(os.getenv('CRAWLAB_GRPC_ADDRESS')) - except Exception: - self.address = Address( - host=os.getenv('CRAWLAB_GRPC_ADDRESS_HOST'), - port=os.getenv('CRAWLAB_GRPC_ADDRESS_PORT'), - ) - _channel = grpc.insecure_channel(self.address.string()) - self.channel = grpc.intercept_channel(_channel, get_auth_token_interceptor()) - self._register() - - def _register(self): - self.model_base_service_stub = ModelBaseServiceStub(self.channel) - self.node_service_stub = NodeServiceStub(self.channel) - self.task_service_stub = TaskServiceStub(self.channel) - - -C: Optional[Client] = None - - -def get_client() -> Client: - global C - if C is not None: - return C - C = Client() - return C diff --git a/crawlab/config/config.py b/crawlab/config/config.py index 0bed273..ecbba91 100644 --- a/crawlab/config/config.py +++ b/crawlab/config/config.py @@ -2,21 +2,24 @@ import json import os -from crawlab.constants.upload import CLI_DEFAULT_CONFIG_ROOT_DIR, CLI_DEFAULT_CONFIG_CLI_DIR, \ - CLI_DEFAULT_CONFIG_FILE_NAME, \ - CLI_DEFAULT_CONFIG_KEY_PASSWORD +from crawlab.constants.upload import ( + CLI_DEFAULT_CONFIG_CLI_DIR, + CLI_DEFAULT_CONFIG_FILE_NAME, + CLI_DEFAULT_CONFIG_KEY_PASSWORD, + CLI_DEFAULT_CONFIG_ROOT_DIR, +) home = os.curdir -if 'HOME' in os.environ: - home = os.environ['HOME'] -elif os.name == 'posix': - home = os.path.expanduser('~/') -elif os.name == 'nt': - if 'HOMEPATH' in os.environ and 'HOMEDRIVE' in os.environ: - home = os.environ['HOMEDRIVE'] + os.environ['HOMEPATH'] -elif 'HOMEPATH' in os.environ: - home = os.environ['HOMEPATH'] +if "HOME" in os.environ: + home = os.environ["HOME"] +elif os.name == "posix": + home = os.path.expanduser("~/") +elif os.name == "nt": + if "HOMEPATH" in os.environ and "HOMEDRIVE" in os.environ: + home = os.environ["HOMEDRIVE"] + os.environ["HOMEPATH"] +elif "HOMEPATH" in os.environ: + home = os.environ["HOMEPATH"] CRAWLAB_ROOT_PATH = os.path.join(home, CLI_DEFAULT_CONFIG_ROOT_DIR) CRAWLAB_CLI_PATH = os.path.join(CRAWLAB_ROOT_PATH, CLI_DEFAULT_CONFIG_CLI_DIR) @@ -55,7 +58,7 @@ def load(self): self.data = ConfigData(json.loads(data_str)) def save(self): - with open(self.json_path, 'wb') as f: + with open(self.json_path, "wb") as f: f.write(self.data.json.encode()) def set(self, key: str, value: str): diff --git a/crawlab/config/task.py b/crawlab/config/task.py deleted file mode 100644 index dfde51c..0000000 --- a/crawlab/config/task.py +++ /dev/null @@ -1,13 +0,0 @@ -import os -import re -from typing import Optional - - -def get_task_id() -> Optional[str]: - task_id = os.getenv('CRAWLAB_TASK_ID') - - # Only allow ObjectId format - if task_id and re.match(r'^[a-fA-F0-9]{24}$', task_id): - return task_id - else: - return None diff --git a/crawlab/constants.py b/crawlab/core/__init__.py similarity index 100% rename from crawlab/constants.py rename to crawlab/core/__init__.py diff --git a/crawlab/entity/address.py b/crawlab/entity/address.py deleted file mode 100644 index f6bf0d6..0000000 --- a/crawlab/entity/address.py +++ /dev/null @@ -1,25 +0,0 @@ -class Address: - host = 'localhost' - port = '9666' - - def __init__(self, host=None, port=None): - if host is not None: - self.host = host - if port is not None: - self.port = port - - def is_empty(self) -> bool: - return self.host == '' or self.port == '' - - def string(self) -> str: - return f'{self.host}:{self.port}' - - -def new_address_from_string(address: str) -> Address: - parts = address.split(':') - if len(parts) == 1: - return Address(host=parts[0]) - elif len(parts) == 2: - return Address(host=parts[0], port=parts[1]) - else: - raise Exception(f'parsing address error: {address}') diff --git a/crawlab/entity/ipc_message.py b/crawlab/entity/ipc_message.py new file mode 100644 index 0000000..f11c886 --- /dev/null +++ b/crawlab/entity/ipc_message.py @@ -0,0 +1,9 @@ +from typing import Iterable, Literal, Optional + +from pydantic import BaseModel, Field + + +class IPCMessage(BaseModel): + type: Optional[Literal["data", "log"]] = Field(description="Message type") + ipc: bool = Field(description="The message is IPC", default=True) + payload: Iterable[dict] | dict = Field(description="Message payload") diff --git a/crawlab/entity/result.py b/crawlab/entity/result.py deleted file mode 100644 index f0d5365..0000000 --- a/crawlab/entity/result.py +++ /dev/null @@ -1,9 +0,0 @@ -class Result(dict): - def get_task_id(self) -> str: - return self.get('_tid') - - def set_task_id(self, tid: str): - self['_tid'] = tid - - def to_dict(self) -> dict: - return dict(self) diff --git a/crawlab/grpc/entity/model_service_request_pb2.py b/crawlab/grpc/entity/model_service_request_pb2.py deleted file mode 100644 index 49e9d5c..0000000 --- a/crawlab/grpc/entity/model_service_request_pb2.py +++ /dev/null @@ -1,55 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: entity/model_service_request.proto -# Protobuf Python Version: 5.26.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 -from google.protobuf.internal import builder as _builder -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - - - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\"entity/model_service_request.proto\x12\x04grpc\"N\n\x1aModelServiceGetByIdRequest\x12\x10\n\x08node_key\x18\x01 \x01(\t\x12\x12\n\nmodel_type\x18\x02 \x01(\t\x12\n\n\x02id\x18\x03 \x01(\t\"f\n\x19ModelServiceGetOneRequest\x12\x10\n\x08node_key\x18\x01 \x01(\t\x12\x12\n\nmodel_type\x18\x02 \x01(\t\x12\r\n\x05query\x18\x03 \x01(\x0c\x12\x14\n\x0c\x66ind_options\x18\x04 \x01(\x0c\"g\n\x1aModelServiceGetManyRequest\x12\x10\n\x08node_key\x18\x01 \x01(\t\x12\x12\n\nmodel_type\x18\x02 \x01(\t\x12\r\n\x05query\x18\x03 \x01(\x0c\x12\x14\n\x0c\x66ind_options\x18\x04 \x01(\x0c\"Q\n\x1dModelServiceDeleteByIdRequest\x12\x10\n\x08node_key\x18\x01 \x01(\t\x12\x12\n\nmodel_type\x18\x02 \x01(\t\x12\n\n\x02id\x18\x03 \x01(\t\"S\n\x1cModelServiceDeleteOneRequest\x12\x10\n\x08node_key\x18\x01 \x01(\t\x12\x12\n\nmodel_type\x18\x02 \x01(\t\x12\r\n\x05query\x18\x03 \x01(\x0c\"T\n\x1dModelServiceDeleteManyRequest\x12\x10\n\x08node_key\x18\x01 \x01(\t\x12\x12\n\nmodel_type\x18\x02 \x01(\t\x12\r\n\x05query\x18\x03 \x01(\x0c\"a\n\x1dModelServiceUpdateByIdRequest\x12\x10\n\x08node_key\x18\x01 \x01(\t\x12\x12\n\nmodel_type\x18\x02 \x01(\t\x12\n\n\x02id\x18\x03 \x01(\t\x12\x0e\n\x06update\x18\x04 \x01(\x0c\"c\n\x1cModelServiceUpdateOneRequest\x12\x10\n\x08node_key\x18\x01 \x01(\t\x12\x12\n\nmodel_type\x18\x02 \x01(\t\x12\r\n\x05query\x18\x03 \x01(\x0c\x12\x0e\n\x06update\x18\x04 \x01(\x0c\"d\n\x1dModelServiceUpdateManyRequest\x12\x10\n\x08node_key\x18\x01 \x01(\t\x12\x12\n\nmodel_type\x18\x02 \x01(\t\x12\r\n\x05query\x18\x03 \x01(\x0c\x12\x0e\n\x06update\x18\x04 \x01(\x0c\"a\n\x1eModelServiceReplaceByIdRequest\x12\x10\n\x08node_key\x18\x01 \x01(\t\x12\x12\n\nmodel_type\x18\x02 \x01(\t\x12\n\n\x02id\x18\x03 \x01(\t\x12\r\n\x05model\x18\x04 \x01(\x0c\"c\n\x1dModelServiceReplaceOneRequest\x12\x10\n\x08node_key\x18\x01 \x01(\t\x12\x12\n\nmodel_type\x18\x02 \x01(\t\x12\r\n\x05query\x18\x03 \x01(\x0c\x12\r\n\x05model\x18\x04 \x01(\x0c\"S\n\x1cModelServiceInsertOneRequest\x12\x10\n\x08node_key\x18\x01 \x01(\t\x12\x12\n\nmodel_type\x18\x02 \x01(\t\x12\r\n\x05model\x18\x03 \x01(\x0c\"U\n\x1dModelServiceInsertManyRequest\x12\x10\n\x08node_key\x18\x01 \x01(\t\x12\x12\n\nmodel_type\x18\x02 \x01(\t\x12\x0e\n\x06models\x18\x03 \x01(\x0c\"b\n\x1cModelServiceUpsertOneRequest\x12\x10\n\x08node_key\x18\x01 \x01(\t\x12\x12\n\nmodel_type\x18\x02 \x01(\t\x12\r\n\x05query\x18\x03 \x01(\x0c\x12\r\n\x05model\x18\x04 \x01(\x0c\"O\n\x18ModelServiceCountRequest\x12\x10\n\x08node_key\x18\x01 \x01(\t\x12\x12\n\nmodel_type\x18\x02 \x01(\t\x12\r\n\x05query\x18\x03 \x01(\x0c\x42\x08Z\x06.;grpcb\x06proto3') - -_globals = globals() -_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'entity.model_service_request_pb2', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'Z\006.;grpc' - _globals['_MODELSERVICEGETBYIDREQUEST']._serialized_start=44 - _globals['_MODELSERVICEGETBYIDREQUEST']._serialized_end=122 - _globals['_MODELSERVICEGETONEREQUEST']._serialized_start=124 - _globals['_MODELSERVICEGETONEREQUEST']._serialized_end=226 - _globals['_MODELSERVICEGETMANYREQUEST']._serialized_start=228 - _globals['_MODELSERVICEGETMANYREQUEST']._serialized_end=331 - _globals['_MODELSERVICEDELETEBYIDREQUEST']._serialized_start=333 - _globals['_MODELSERVICEDELETEBYIDREQUEST']._serialized_end=414 - _globals['_MODELSERVICEDELETEONEREQUEST']._serialized_start=416 - _globals['_MODELSERVICEDELETEONEREQUEST']._serialized_end=499 - _globals['_MODELSERVICEDELETEMANYREQUEST']._serialized_start=501 - _globals['_MODELSERVICEDELETEMANYREQUEST']._serialized_end=585 - _globals['_MODELSERVICEUPDATEBYIDREQUEST']._serialized_start=587 - _globals['_MODELSERVICEUPDATEBYIDREQUEST']._serialized_end=684 - _globals['_MODELSERVICEUPDATEONEREQUEST']._serialized_start=686 - _globals['_MODELSERVICEUPDATEONEREQUEST']._serialized_end=785 - _globals['_MODELSERVICEUPDATEMANYREQUEST']._serialized_start=787 - _globals['_MODELSERVICEUPDATEMANYREQUEST']._serialized_end=887 - _globals['_MODELSERVICEREPLACEBYIDREQUEST']._serialized_start=889 - _globals['_MODELSERVICEREPLACEBYIDREQUEST']._serialized_end=986 - _globals['_MODELSERVICEREPLACEONEREQUEST']._serialized_start=988 - _globals['_MODELSERVICEREPLACEONEREQUEST']._serialized_end=1087 - _globals['_MODELSERVICEINSERTONEREQUEST']._serialized_start=1089 - _globals['_MODELSERVICEINSERTONEREQUEST']._serialized_end=1172 - _globals['_MODELSERVICEINSERTMANYREQUEST']._serialized_start=1174 - _globals['_MODELSERVICEINSERTMANYREQUEST']._serialized_end=1259 - _globals['_MODELSERVICEUPSERTONEREQUEST']._serialized_start=1261 - _globals['_MODELSERVICEUPSERTONEREQUEST']._serialized_end=1359 - _globals['_MODELSERVICECOUNTREQUEST']._serialized_start=1361 - _globals['_MODELSERVICECOUNTREQUEST']._serialized_end=1440 -# @@protoc_insertion_point(module_scope) diff --git a/crawlab/grpc/entity/model_service_request_pb2_grpc.py b/crawlab/grpc/entity/model_service_request_pb2_grpc.py deleted file mode 100644 index 89d8eca..0000000 --- a/crawlab/grpc/entity/model_service_request_pb2_grpc.py +++ /dev/null @@ -1,29 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -"""Client and server classes corresponding to protobuf-defined services.""" -import grpc -import warnings - - -GRPC_GENERATED_VERSION = '1.64.1' -GRPC_VERSION = grpc.__version__ -EXPECTED_ERROR_RELEASE = '1.65.0' -SCHEDULED_RELEASE_DATE = 'June 25, 2024' -_version_not_supported = False - -try: - from grpc._utilities import first_version_is_lower - _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) -except ImportError: - _version_not_supported = True - -if _version_not_supported: - warnings.warn( - f'The grpc package installed is at version {GRPC_VERSION},' - + f' but the generated code in entity/model_service_request_pb2_grpc.py depends on' - + f' grpcio>={GRPC_GENERATED_VERSION}.' - + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' - + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' - + f' This warning will become an error in {EXPECTED_ERROR_RELEASE},' - + f' scheduled for release on {SCHEDULED_RELEASE_DATE}.', - RuntimeWarning - ) diff --git a/crawlab/grpc/entity/response_pb2.py b/crawlab/grpc/entity/response_pb2.py deleted file mode 100644 index 84dfe5d..0000000 --- a/crawlab/grpc/entity/response_pb2.py +++ /dev/null @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: entity/response.proto -# Protobuf Python Version: 5.26.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 -from google.protobuf.internal import builder as _builder -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - - - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x65ntity/response.proto\x12\x04grpc\"i\n\x08Response\x12 \n\x04\x63ode\x18\x01 \x01(\x0e\x32\x12.grpc.ResponseCode\x12\x0f\n\x07message\x18\x02 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\x12\r\n\x05\x65rror\x18\x04 \x01(\t\x12\r\n\x05total\x18\x05 \x01(\x03*!\n\x0cResponseCode\x12\x06\n\x02OK\x10\x00\x12\t\n\x05\x45RROR\x10\x01\x42\x08Z\x06.;grpcb\x06proto3') - -_globals = globals() -_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'entity.response_pb2', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'Z\006.;grpc' - _globals['_RESPONSECODE']._serialized_start=138 - _globals['_RESPONSECODE']._serialized_end=171 - _globals['_RESPONSE']._serialized_start=31 - _globals['_RESPONSE']._serialized_end=136 -# @@protoc_insertion_point(module_scope) diff --git a/crawlab/grpc/entity/response_pb2_grpc.py b/crawlab/grpc/entity/response_pb2_grpc.py deleted file mode 100644 index 69d2b42..0000000 --- a/crawlab/grpc/entity/response_pb2_grpc.py +++ /dev/null @@ -1,29 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -"""Client and server classes corresponding to protobuf-defined services.""" -import grpc -import warnings - - -GRPC_GENERATED_VERSION = '1.64.1' -GRPC_VERSION = grpc.__version__ -EXPECTED_ERROR_RELEASE = '1.65.0' -SCHEDULED_RELEASE_DATE = 'June 25, 2024' -_version_not_supported = False - -try: - from grpc._utilities import first_version_is_lower - _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) -except ImportError: - _version_not_supported = True - -if _version_not_supported: - warnings.warn( - f'The grpc package installed is at version {GRPC_VERSION},' - + f' but the generated code in entity/response_pb2_grpc.py depends on' - + f' grpcio>={GRPC_GENERATED_VERSION}.' - + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' - + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' - + f' This warning will become an error in {EXPECTED_ERROR_RELEASE},' - + f' scheduled for release on {SCHEDULED_RELEASE_DATE}.', - RuntimeWarning - ) diff --git a/crawlab/grpc/services/dependency_service_pb2.py b/crawlab/grpc/services/dependency_service_pb2.py deleted file mode 100644 index 56b6191..0000000 --- a/crawlab/grpc/services/dependency_service_pb2.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: services/dependency_service.proto -# Protobuf Python Version: 5.26.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 -from google.protobuf.internal import builder as _builder -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -from crawlab.grpc.entity import response_pb2 as entity_dot_response__pb2 - - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!services/dependency_service.proto\x12\x04grpc\x1a\x15\x65ntity/response.proto\"+\n\nDependency\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\t\"3\n\x1f\x44\x65pendencyServiceConnectRequest\x12\x10\n\x08node_key\x18\x01 \x01(\t\"\x90\x01\n DependencyServiceConnectResponse\x12)\n\x04\x63ode\x18\x01 \x01(\x0e\x32\x1b.grpc.DependencyServiceCode\x12\x0c\n\x04lang\x18\x02 \x01(\t\x12\r\n\x05proxy\x18\x03 \x01(\t\x12$\n\ndependency\x18\x04 \x01(\x0b\x32\x10.grpc.Dependency\"f\n\x1c\x44\x65pendencyServiceSyncRequest\x12\x10\n\x08node_key\x18\x01 \x01(\t\x12\x0c\n\x04lang\x18\x02 \x01(\t\x12&\n\x0c\x64\x65pendencies\x18\x03 \x03(\x0b\x32\x10.grpc.Dependency\"I\n\"DependencyServiceUpdateLogsRequest\x12\x15\n\rdependency_id\x18\x01 \x01(\t\x12\x0c\n\x04logs\x18\x02 \x03(\t*=\n\x15\x44\x65pendencyServiceCode\x12\x08\n\x04SYNC\x10\x00\x12\x0b\n\x07INSTALL\x10\x01\x12\r\n\tUNINSTALL\x10\x02\x32\xfb\x01\n\x11\x44\x65pendencyService\x12\\\n\x07\x43onnect\x12%.grpc.DependencyServiceConnectRequest\x1a&.grpc.DependencyServiceConnectResponse\"\x00\x30\x01\x12<\n\x04Sync\x12\".grpc.DependencyServiceSyncRequest\x1a\x0e.grpc.Response\"\x00\x12J\n\nUpdateLogs\x12(.grpc.DependencyServiceUpdateLogsRequest\x1a\x0e.grpc.Response\"\x00(\x01\x42\x08Z\x06.;grpcb\x06proto3') - -_globals = globals() -_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'services.dependency_service_pb2', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'Z\006.;grpc' - _globals['_DEPENDENCYSERVICECODE']._serialized_start=490 - _globals['_DEPENDENCYSERVICECODE']._serialized_end=551 - _globals['_DEPENDENCY']._serialized_start=66 - _globals['_DEPENDENCY']._serialized_end=109 - _globals['_DEPENDENCYSERVICECONNECTREQUEST']._serialized_start=111 - _globals['_DEPENDENCYSERVICECONNECTREQUEST']._serialized_end=162 - _globals['_DEPENDENCYSERVICECONNECTRESPONSE']._serialized_start=165 - _globals['_DEPENDENCYSERVICECONNECTRESPONSE']._serialized_end=309 - _globals['_DEPENDENCYSERVICESYNCREQUEST']._serialized_start=311 - _globals['_DEPENDENCYSERVICESYNCREQUEST']._serialized_end=413 - _globals['_DEPENDENCYSERVICEUPDATELOGSREQUEST']._serialized_start=415 - _globals['_DEPENDENCYSERVICEUPDATELOGSREQUEST']._serialized_end=488 - _globals['_DEPENDENCYSERVICE']._serialized_start=554 - _globals['_DEPENDENCYSERVICE']._serialized_end=805 -# @@protoc_insertion_point(module_scope) diff --git a/crawlab/grpc/services/dependency_service_pb2_grpc.py b/crawlab/grpc/services/dependency_service_pb2_grpc.py deleted file mode 100644 index 0d463e3..0000000 --- a/crawlab/grpc/services/dependency_service_pb2_grpc.py +++ /dev/null @@ -1,189 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -"""Client and server classes corresponding to protobuf-defined services.""" -import grpc -import warnings - -from crawlab.grpc.entity import response_pb2 as entity_dot_response__pb2 -from crawlab.grpc.services import dependency_service_pb2 as services_dot_dependency__service__pb2 - -GRPC_GENERATED_VERSION = '1.64.1' -GRPC_VERSION = grpc.__version__ -EXPECTED_ERROR_RELEASE = '1.65.0' -SCHEDULED_RELEASE_DATE = 'June 25, 2024' -_version_not_supported = False - -try: - from grpc._utilities import first_version_is_lower - _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) -except ImportError: - _version_not_supported = True - -if _version_not_supported: - warnings.warn( - f'The grpc package installed is at version {GRPC_VERSION},' - + f' but the generated code in services/dependency_service_pb2_grpc.py depends on' - + f' grpcio>={GRPC_GENERATED_VERSION}.' - + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' - + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' - + f' This warning will become an error in {EXPECTED_ERROR_RELEASE},' - + f' scheduled for release on {SCHEDULED_RELEASE_DATE}.', - RuntimeWarning - ) - - -class DependencyServiceStub(object): - """Missing associated documentation comment in .proto file.""" - - def __init__(self, channel): - """Constructor. - - Args: - channel: A grpc.Channel. - """ - self.Connect = channel.unary_stream( - '/grpc.DependencyService/Connect', - request_serializer=services_dot_dependency__service__pb2.DependencyServiceConnectRequest.SerializeToString, - response_deserializer=services_dot_dependency__service__pb2.DependencyServiceConnectResponse.FromString, - _registered_method=True) - self.Sync = channel.unary_unary( - '/grpc.DependencyService/Sync', - request_serializer=services_dot_dependency__service__pb2.DependencyServiceSyncRequest.SerializeToString, - response_deserializer=entity_dot_response__pb2.Response.FromString, - _registered_method=True) - self.UpdateLogs = channel.stream_unary( - '/grpc.DependencyService/UpdateLogs', - request_serializer=services_dot_dependency__service__pb2.DependencyServiceUpdateLogsRequest.SerializeToString, - response_deserializer=entity_dot_response__pb2.Response.FromString, - _registered_method=True) - - -class DependencyServiceServicer(object): - """Missing associated documentation comment in .proto file.""" - - def Connect(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!') - - def Sync(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!') - - def UpdateLogs(self, request_iterator, 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!') - - -def add_DependencyServiceServicer_to_server(servicer, server): - rpc_method_handlers = { - 'Connect': grpc.unary_stream_rpc_method_handler( - servicer.Connect, - request_deserializer=services_dot_dependency__service__pb2.DependencyServiceConnectRequest.FromString, - response_serializer=services_dot_dependency__service__pb2.DependencyServiceConnectResponse.SerializeToString, - ), - 'Sync': grpc.unary_unary_rpc_method_handler( - servicer.Sync, - request_deserializer=services_dot_dependency__service__pb2.DependencyServiceSyncRequest.FromString, - response_serializer=entity_dot_response__pb2.Response.SerializeToString, - ), - 'UpdateLogs': grpc.stream_unary_rpc_method_handler( - servicer.UpdateLogs, - request_deserializer=services_dot_dependency__service__pb2.DependencyServiceUpdateLogsRequest.FromString, - response_serializer=entity_dot_response__pb2.Response.SerializeToString, - ), - } - generic_handler = grpc.method_handlers_generic_handler( - 'grpc.DependencyService', rpc_method_handlers) - server.add_generic_rpc_handlers((generic_handler,)) - server.add_registered_method_handlers('grpc.DependencyService', rpc_method_handlers) - - - # This class is part of an EXPERIMENTAL API. -class DependencyService(object): - """Missing associated documentation comment in .proto file.""" - - @staticmethod - def Connect(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_stream( - request, - target, - '/grpc.DependencyService/Connect', - services_dot_dependency__service__pb2.DependencyServiceConnectRequest.SerializeToString, - services_dot_dependency__service__pb2.DependencyServiceConnectResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def Sync(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/grpc.DependencyService/Sync', - services_dot_dependency__service__pb2.DependencyServiceSyncRequest.SerializeToString, - entity_dot_response__pb2.Response.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def UpdateLogs(request_iterator, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.stream_unary( - request_iterator, - target, - '/grpc.DependencyService/UpdateLogs', - services_dot_dependency__service__pb2.DependencyServiceUpdateLogsRequest.SerializeToString, - entity_dot_response__pb2.Response.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) diff --git a/crawlab/grpc/services/metric_service_pb2.py b/crawlab/grpc/services/metric_service_pb2.py deleted file mode 100644 index 84e3836..0000000 --- a/crawlab/grpc/services/metric_service_pb2.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: services/metric_service.proto -# Protobuf Python Version: 5.26.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 -from google.protobuf.internal import builder as _builder -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -from crawlab.grpc.entity import response_pb2 as entity_dot_response__pb2 - - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dservices/metric_service.proto\x12\x04grpc\x1a\x15\x65ntity/response.proto\"\xa3\x03\n\x18MetricServiceSendRequest\x12\x0c\n\x04type\x18\x01 \x01(\t\x12\x10\n\x08node_key\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\x03\x12\x19\n\x11\x63pu_usage_percent\x18\x04 \x01(\x02\x12\x14\n\x0ctotal_memory\x18\x05 \x01(\x04\x12\x18\n\x10\x61vailable_memory\x18\x06 \x01(\x04\x12\x13\n\x0bused_memory\x18\x07 \x01(\x04\x12\x1b\n\x13used_memory_percent\x18\x08 \x01(\x02\x12\x12\n\ntotal_disk\x18\t \x01(\x04\x12\x16\n\x0e\x61vailable_disk\x18\n \x01(\x04\x12\x11\n\tused_disk\x18\x0b \x01(\x04\x12\x19\n\x11used_disk_percent\x18\x0c \x01(\x02\x12\x1c\n\x14\x64isk_read_bytes_rate\x18\x0f \x01(\x02\x12\x1d\n\x15\x64isk_write_bytes_rate\x18\x10 \x01(\x02\x12\x1f\n\x17network_bytes_sent_rate\x18\x11 \x01(\x02\x12\x1f\n\x17network_bytes_recv_rate\x18\x12 \x01(\x02\x32I\n\rMetricService\x12\x38\n\x04Send\x12\x1e.grpc.MetricServiceSendRequest\x1a\x0e.grpc.Response\"\x00\x42\x08Z\x06.;grpcb\x06proto3') - -_globals = globals() -_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'services.metric_service_pb2', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'Z\006.;grpc' - _globals['_METRICSERVICESENDREQUEST']._serialized_start=63 - _globals['_METRICSERVICESENDREQUEST']._serialized_end=482 - _globals['_METRICSERVICE']._serialized_start=484 - _globals['_METRICSERVICE']._serialized_end=557 -# @@protoc_insertion_point(module_scope) diff --git a/crawlab/grpc/services/metric_service_pb2_grpc.py b/crawlab/grpc/services/metric_service_pb2_grpc.py deleted file mode 100644 index e81d530..0000000 --- a/crawlab/grpc/services/metric_service_pb2_grpc.py +++ /dev/null @@ -1,103 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -"""Client and server classes corresponding to protobuf-defined services.""" -import grpc -import warnings - -from crawlab.grpc.entity import response_pb2 as entity_dot_response__pb2 -from crawlab.grpc.services import metric_service_pb2 as services_dot_metric__service__pb2 - -GRPC_GENERATED_VERSION = '1.64.1' -GRPC_VERSION = grpc.__version__ -EXPECTED_ERROR_RELEASE = '1.65.0' -SCHEDULED_RELEASE_DATE = 'June 25, 2024' -_version_not_supported = False - -try: - from grpc._utilities import first_version_is_lower - _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) -except ImportError: - _version_not_supported = True - -if _version_not_supported: - warnings.warn( - f'The grpc package installed is at version {GRPC_VERSION},' - + f' but the generated code in services/metric_service_pb2_grpc.py depends on' - + f' grpcio>={GRPC_GENERATED_VERSION}.' - + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' - + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' - + f' This warning will become an error in {EXPECTED_ERROR_RELEASE},' - + f' scheduled for release on {SCHEDULED_RELEASE_DATE}.', - RuntimeWarning - ) - - -class MetricServiceStub(object): - """Missing associated documentation comment in .proto file.""" - - def __init__(self, channel): - """Constructor. - - Args: - channel: A grpc.Channel. - """ - self.Send = channel.unary_unary( - '/grpc.MetricService/Send', - request_serializer=services_dot_metric__service__pb2.MetricServiceSendRequest.SerializeToString, - response_deserializer=entity_dot_response__pb2.Response.FromString, - _registered_method=True) - - -class MetricServiceServicer(object): - """Missing associated documentation comment in .proto file.""" - - def Send(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!') - - -def add_MetricServiceServicer_to_server(servicer, server): - rpc_method_handlers = { - 'Send': grpc.unary_unary_rpc_method_handler( - servicer.Send, - request_deserializer=services_dot_metric__service__pb2.MetricServiceSendRequest.FromString, - response_serializer=entity_dot_response__pb2.Response.SerializeToString, - ), - } - generic_handler = grpc.method_handlers_generic_handler( - 'grpc.MetricService', rpc_method_handlers) - server.add_generic_rpc_handlers((generic_handler,)) - server.add_registered_method_handlers('grpc.MetricService', rpc_method_handlers) - - - # This class is part of an EXPERIMENTAL API. -class MetricService(object): - """Missing associated documentation comment in .proto file.""" - - @staticmethod - def Send(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/grpc.MetricService/Send', - services_dot_metric__service__pb2.MetricServiceSendRequest.SerializeToString, - entity_dot_response__pb2.Response.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) diff --git a/crawlab/grpc/services/model_base_service_pb2.py b/crawlab/grpc/services/model_base_service_pb2.py deleted file mode 100644 index 27d4b1a..0000000 --- a/crawlab/grpc/services/model_base_service_pb2.py +++ /dev/null @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: services/model_base_service.proto -# Protobuf Python Version: 5.26.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 -from google.protobuf.internal import builder as _builder -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -from crawlab.grpc.entity import model_service_request_pb2 as entity_dot_model__service__request__pb2 -from crawlab.grpc.entity import response_pb2 as entity_dot_response__pb2 - - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!services/model_base_service.proto\x12\x04grpc\x1a\"entity/model_service_request.proto\x1a\x15\x65ntity/response.proto2\xf9\x07\n\x10ModelBaseService\x12=\n\x07GetById\x12 .grpc.ModelServiceGetByIdRequest\x1a\x0e.grpc.Response\"\x00\x12;\n\x06GetOne\x12\x1f.grpc.ModelServiceGetOneRequest\x1a\x0e.grpc.Response\"\x00\x12=\n\x07GetMany\x12 .grpc.ModelServiceGetManyRequest\x1a\x0e.grpc.Response\"\x00\x12\x43\n\nDeleteById\x12#.grpc.ModelServiceDeleteByIdRequest\x1a\x0e.grpc.Response\"\x00\x12\x41\n\tDeleteOne\x12\".grpc.ModelServiceDeleteOneRequest\x1a\x0e.grpc.Response\"\x00\x12\x43\n\nDeleteMany\x12#.grpc.ModelServiceDeleteManyRequest\x1a\x0e.grpc.Response\"\x00\x12\x43\n\nUpdateById\x12#.grpc.ModelServiceUpdateByIdRequest\x1a\x0e.grpc.Response\"\x00\x12\x41\n\tUpdateOne\x12\".grpc.ModelServiceUpdateOneRequest\x1a\x0e.grpc.Response\"\x00\x12\x43\n\nUpdateMany\x12#.grpc.ModelServiceUpdateManyRequest\x1a\x0e.grpc.Response\"\x00\x12\x45\n\x0bReplaceById\x12$.grpc.ModelServiceReplaceByIdRequest\x1a\x0e.grpc.Response\"\x00\x12\x43\n\nReplaceOne\x12#.grpc.ModelServiceReplaceOneRequest\x1a\x0e.grpc.Response\"\x00\x12\x41\n\tInsertOne\x12\".grpc.ModelServiceInsertOneRequest\x1a\x0e.grpc.Response\"\x00\x12\x43\n\nInsertMany\x12#.grpc.ModelServiceInsertManyRequest\x1a\x0e.grpc.Response\"\x00\x12\x41\n\tUpsertOne\x12\".grpc.ModelServiceUpsertOneRequest\x1a\x0e.grpc.Response\"\x00\x12\x39\n\x05\x43ount\x12\x1e.grpc.ModelServiceCountRequest\x1a\x0e.grpc.Response\"\x00\x42\x08Z\x06.;grpcb\x06proto3') - -_globals = globals() -_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'services.model_base_service_pb2', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'Z\006.;grpc' - _globals['_MODELBASESERVICE']._serialized_start=103 - _globals['_MODELBASESERVICE']._serialized_end=1120 -# @@protoc_insertion_point(module_scope) diff --git a/crawlab/grpc/services/model_base_service_pb2_grpc.py b/crawlab/grpc/services/model_base_service_pb2_grpc.py deleted file mode 100644 index 38fcebf..0000000 --- a/crawlab/grpc/services/model_base_service_pb2_grpc.py +++ /dev/null @@ -1,705 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -"""Client and server classes corresponding to protobuf-defined services.""" -import grpc -import warnings - -from crawlab.grpc.entity import model_service_request_pb2 as entity_dot_model__service__request__pb2 -from crawlab.grpc.entity import response_pb2 as entity_dot_response__pb2 - -GRPC_GENERATED_VERSION = '1.64.1' -GRPC_VERSION = grpc.__version__ -EXPECTED_ERROR_RELEASE = '1.65.0' -SCHEDULED_RELEASE_DATE = 'June 25, 2024' -_version_not_supported = False - -try: - from grpc._utilities import first_version_is_lower - _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) -except ImportError: - _version_not_supported = True - -if _version_not_supported: - warnings.warn( - f'The grpc package installed is at version {GRPC_VERSION},' - + f' but the generated code in services/model_base_service_pb2_grpc.py depends on' - + f' grpcio>={GRPC_GENERATED_VERSION}.' - + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' - + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' - + f' This warning will become an error in {EXPECTED_ERROR_RELEASE},' - + f' scheduled for release on {SCHEDULED_RELEASE_DATE}.', - RuntimeWarning - ) - - -class ModelBaseServiceStub(object): - """Missing associated documentation comment in .proto file.""" - - def __init__(self, channel): - """Constructor. - - Args: - channel: A grpc.Channel. - """ - self.GetById = channel.unary_unary( - '/grpc.ModelBaseService/GetById', - request_serializer=entity_dot_model__service__request__pb2.ModelServiceGetByIdRequest.SerializeToString, - response_deserializer=entity_dot_response__pb2.Response.FromString, - _registered_method=True) - self.GetOne = channel.unary_unary( - '/grpc.ModelBaseService/GetOne', - request_serializer=entity_dot_model__service__request__pb2.ModelServiceGetOneRequest.SerializeToString, - response_deserializer=entity_dot_response__pb2.Response.FromString, - _registered_method=True) - self.GetMany = channel.unary_unary( - '/grpc.ModelBaseService/GetMany', - request_serializer=entity_dot_model__service__request__pb2.ModelServiceGetManyRequest.SerializeToString, - response_deserializer=entity_dot_response__pb2.Response.FromString, - _registered_method=True) - self.DeleteById = channel.unary_unary( - '/grpc.ModelBaseService/DeleteById', - request_serializer=entity_dot_model__service__request__pb2.ModelServiceDeleteByIdRequest.SerializeToString, - response_deserializer=entity_dot_response__pb2.Response.FromString, - _registered_method=True) - self.DeleteOne = channel.unary_unary( - '/grpc.ModelBaseService/DeleteOne', - request_serializer=entity_dot_model__service__request__pb2.ModelServiceDeleteOneRequest.SerializeToString, - response_deserializer=entity_dot_response__pb2.Response.FromString, - _registered_method=True) - self.DeleteMany = channel.unary_unary( - '/grpc.ModelBaseService/DeleteMany', - request_serializer=entity_dot_model__service__request__pb2.ModelServiceDeleteManyRequest.SerializeToString, - response_deserializer=entity_dot_response__pb2.Response.FromString, - _registered_method=True) - self.UpdateById = channel.unary_unary( - '/grpc.ModelBaseService/UpdateById', - request_serializer=entity_dot_model__service__request__pb2.ModelServiceUpdateByIdRequest.SerializeToString, - response_deserializer=entity_dot_response__pb2.Response.FromString, - _registered_method=True) - self.UpdateOne = channel.unary_unary( - '/grpc.ModelBaseService/UpdateOne', - request_serializer=entity_dot_model__service__request__pb2.ModelServiceUpdateOneRequest.SerializeToString, - response_deserializer=entity_dot_response__pb2.Response.FromString, - _registered_method=True) - self.UpdateMany = channel.unary_unary( - '/grpc.ModelBaseService/UpdateMany', - request_serializer=entity_dot_model__service__request__pb2.ModelServiceUpdateManyRequest.SerializeToString, - response_deserializer=entity_dot_response__pb2.Response.FromString, - _registered_method=True) - self.ReplaceById = channel.unary_unary( - '/grpc.ModelBaseService/ReplaceById', - request_serializer=entity_dot_model__service__request__pb2.ModelServiceReplaceByIdRequest.SerializeToString, - response_deserializer=entity_dot_response__pb2.Response.FromString, - _registered_method=True) - self.ReplaceOne = channel.unary_unary( - '/grpc.ModelBaseService/ReplaceOne', - request_serializer=entity_dot_model__service__request__pb2.ModelServiceReplaceOneRequest.SerializeToString, - response_deserializer=entity_dot_response__pb2.Response.FromString, - _registered_method=True) - self.InsertOne = channel.unary_unary( - '/grpc.ModelBaseService/InsertOne', - request_serializer=entity_dot_model__service__request__pb2.ModelServiceInsertOneRequest.SerializeToString, - response_deserializer=entity_dot_response__pb2.Response.FromString, - _registered_method=True) - self.InsertMany = channel.unary_unary( - '/grpc.ModelBaseService/InsertMany', - request_serializer=entity_dot_model__service__request__pb2.ModelServiceInsertManyRequest.SerializeToString, - response_deserializer=entity_dot_response__pb2.Response.FromString, - _registered_method=True) - self.UpsertOne = channel.unary_unary( - '/grpc.ModelBaseService/UpsertOne', - request_serializer=entity_dot_model__service__request__pb2.ModelServiceUpsertOneRequest.SerializeToString, - response_deserializer=entity_dot_response__pb2.Response.FromString, - _registered_method=True) - self.Count = channel.unary_unary( - '/grpc.ModelBaseService/Count', - request_serializer=entity_dot_model__service__request__pb2.ModelServiceCountRequest.SerializeToString, - response_deserializer=entity_dot_response__pb2.Response.FromString, - _registered_method=True) - - -class ModelBaseServiceServicer(object): - """Missing associated documentation comment in .proto file.""" - - def GetById(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!') - - def GetOne(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!') - - def GetMany(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!') - - def DeleteById(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!') - - def DeleteOne(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!') - - def DeleteMany(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!') - - def UpdateById(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!') - - def UpdateOne(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!') - - def UpdateMany(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!') - - def ReplaceById(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!') - - def ReplaceOne(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!') - - def InsertOne(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!') - - def InsertMany(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!') - - def UpsertOne(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!') - - def Count(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!') - - -def add_ModelBaseServiceServicer_to_server(servicer, server): - rpc_method_handlers = { - 'GetById': grpc.unary_unary_rpc_method_handler( - servicer.GetById, - request_deserializer=entity_dot_model__service__request__pb2.ModelServiceGetByIdRequest.FromString, - response_serializer=entity_dot_response__pb2.Response.SerializeToString, - ), - 'GetOne': grpc.unary_unary_rpc_method_handler( - servicer.GetOne, - request_deserializer=entity_dot_model__service__request__pb2.ModelServiceGetOneRequest.FromString, - response_serializer=entity_dot_response__pb2.Response.SerializeToString, - ), - 'GetMany': grpc.unary_unary_rpc_method_handler( - servicer.GetMany, - request_deserializer=entity_dot_model__service__request__pb2.ModelServiceGetManyRequest.FromString, - response_serializer=entity_dot_response__pb2.Response.SerializeToString, - ), - 'DeleteById': grpc.unary_unary_rpc_method_handler( - servicer.DeleteById, - request_deserializer=entity_dot_model__service__request__pb2.ModelServiceDeleteByIdRequest.FromString, - response_serializer=entity_dot_response__pb2.Response.SerializeToString, - ), - 'DeleteOne': grpc.unary_unary_rpc_method_handler( - servicer.DeleteOne, - request_deserializer=entity_dot_model__service__request__pb2.ModelServiceDeleteOneRequest.FromString, - response_serializer=entity_dot_response__pb2.Response.SerializeToString, - ), - 'DeleteMany': grpc.unary_unary_rpc_method_handler( - servicer.DeleteMany, - request_deserializer=entity_dot_model__service__request__pb2.ModelServiceDeleteManyRequest.FromString, - response_serializer=entity_dot_response__pb2.Response.SerializeToString, - ), - 'UpdateById': grpc.unary_unary_rpc_method_handler( - servicer.UpdateById, - request_deserializer=entity_dot_model__service__request__pb2.ModelServiceUpdateByIdRequest.FromString, - response_serializer=entity_dot_response__pb2.Response.SerializeToString, - ), - 'UpdateOne': grpc.unary_unary_rpc_method_handler( - servicer.UpdateOne, - request_deserializer=entity_dot_model__service__request__pb2.ModelServiceUpdateOneRequest.FromString, - response_serializer=entity_dot_response__pb2.Response.SerializeToString, - ), - 'UpdateMany': grpc.unary_unary_rpc_method_handler( - servicer.UpdateMany, - request_deserializer=entity_dot_model__service__request__pb2.ModelServiceUpdateManyRequest.FromString, - response_serializer=entity_dot_response__pb2.Response.SerializeToString, - ), - 'ReplaceById': grpc.unary_unary_rpc_method_handler( - servicer.ReplaceById, - request_deserializer=entity_dot_model__service__request__pb2.ModelServiceReplaceByIdRequest.FromString, - response_serializer=entity_dot_response__pb2.Response.SerializeToString, - ), - 'ReplaceOne': grpc.unary_unary_rpc_method_handler( - servicer.ReplaceOne, - request_deserializer=entity_dot_model__service__request__pb2.ModelServiceReplaceOneRequest.FromString, - response_serializer=entity_dot_response__pb2.Response.SerializeToString, - ), - 'InsertOne': grpc.unary_unary_rpc_method_handler( - servicer.InsertOne, - request_deserializer=entity_dot_model__service__request__pb2.ModelServiceInsertOneRequest.FromString, - response_serializer=entity_dot_response__pb2.Response.SerializeToString, - ), - 'InsertMany': grpc.unary_unary_rpc_method_handler( - servicer.InsertMany, - request_deserializer=entity_dot_model__service__request__pb2.ModelServiceInsertManyRequest.FromString, - response_serializer=entity_dot_response__pb2.Response.SerializeToString, - ), - 'UpsertOne': grpc.unary_unary_rpc_method_handler( - servicer.UpsertOne, - request_deserializer=entity_dot_model__service__request__pb2.ModelServiceUpsertOneRequest.FromString, - response_serializer=entity_dot_response__pb2.Response.SerializeToString, - ), - 'Count': grpc.unary_unary_rpc_method_handler( - servicer.Count, - request_deserializer=entity_dot_model__service__request__pb2.ModelServiceCountRequest.FromString, - response_serializer=entity_dot_response__pb2.Response.SerializeToString, - ), - } - generic_handler = grpc.method_handlers_generic_handler( - 'grpc.ModelBaseService', rpc_method_handlers) - server.add_generic_rpc_handlers((generic_handler,)) - server.add_registered_method_handlers('grpc.ModelBaseService', rpc_method_handlers) - - - # This class is part of an EXPERIMENTAL API. -class ModelBaseService(object): - """Missing associated documentation comment in .proto file.""" - - @staticmethod - def GetById(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/grpc.ModelBaseService/GetById', - entity_dot_model__service__request__pb2.ModelServiceGetByIdRequest.SerializeToString, - entity_dot_response__pb2.Response.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def GetOne(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/grpc.ModelBaseService/GetOne', - entity_dot_model__service__request__pb2.ModelServiceGetOneRequest.SerializeToString, - entity_dot_response__pb2.Response.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def GetMany(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/grpc.ModelBaseService/GetMany', - entity_dot_model__service__request__pb2.ModelServiceGetManyRequest.SerializeToString, - entity_dot_response__pb2.Response.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def DeleteById(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/grpc.ModelBaseService/DeleteById', - entity_dot_model__service__request__pb2.ModelServiceDeleteByIdRequest.SerializeToString, - entity_dot_response__pb2.Response.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def DeleteOne(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/grpc.ModelBaseService/DeleteOne', - entity_dot_model__service__request__pb2.ModelServiceDeleteOneRequest.SerializeToString, - entity_dot_response__pb2.Response.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def DeleteMany(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/grpc.ModelBaseService/DeleteMany', - entity_dot_model__service__request__pb2.ModelServiceDeleteManyRequest.SerializeToString, - entity_dot_response__pb2.Response.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def UpdateById(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/grpc.ModelBaseService/UpdateById', - entity_dot_model__service__request__pb2.ModelServiceUpdateByIdRequest.SerializeToString, - entity_dot_response__pb2.Response.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def UpdateOne(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/grpc.ModelBaseService/UpdateOne', - entity_dot_model__service__request__pb2.ModelServiceUpdateOneRequest.SerializeToString, - entity_dot_response__pb2.Response.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def UpdateMany(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/grpc.ModelBaseService/UpdateMany', - entity_dot_model__service__request__pb2.ModelServiceUpdateManyRequest.SerializeToString, - entity_dot_response__pb2.Response.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def ReplaceById(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/grpc.ModelBaseService/ReplaceById', - entity_dot_model__service__request__pb2.ModelServiceReplaceByIdRequest.SerializeToString, - entity_dot_response__pb2.Response.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def ReplaceOne(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/grpc.ModelBaseService/ReplaceOne', - entity_dot_model__service__request__pb2.ModelServiceReplaceOneRequest.SerializeToString, - entity_dot_response__pb2.Response.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def InsertOne(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/grpc.ModelBaseService/InsertOne', - entity_dot_model__service__request__pb2.ModelServiceInsertOneRequest.SerializeToString, - entity_dot_response__pb2.Response.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def InsertMany(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/grpc.ModelBaseService/InsertMany', - entity_dot_model__service__request__pb2.ModelServiceInsertManyRequest.SerializeToString, - entity_dot_response__pb2.Response.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def UpsertOne(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/grpc.ModelBaseService/UpsertOne', - entity_dot_model__service__request__pb2.ModelServiceUpsertOneRequest.SerializeToString, - entity_dot_response__pb2.Response.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def Count(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/grpc.ModelBaseService/Count', - entity_dot_model__service__request__pb2.ModelServiceCountRequest.SerializeToString, - entity_dot_response__pb2.Response.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) diff --git a/crawlab/grpc/services/node_service_pb2.py b/crawlab/grpc/services/node_service_pb2.py deleted file mode 100644 index c65c16e..0000000 --- a/crawlab/grpc/services/node_service_pb2.py +++ /dev/null @@ -1,38 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: services/node_service.proto -# Protobuf Python Version: 5.26.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 -from google.protobuf.internal import builder as _builder -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -from crawlab.grpc.entity import response_pb2 as entity_dot_response__pb2 - - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1bservices/node_service.proto\x12\x04grpc\x1a\x15\x65ntity/response.proto\"V\n\x1aNodeServiceRegisterRequest\x12\x10\n\x08node_key\x18\x01 \x01(\t\x12\x11\n\tnode_name\x18\x02 \x01(\t\x12\x13\n\x0bmax_runners\x18\x03 \x01(\x05\"3\n\x1fNodeServiceSendHeartbeatRequest\x12\x10\n\x08node_key\x18\x01 \x01(\t\"/\n\x1bNodeServiceSubscribeRequest\x12\x10\n\x08node_key\x18\x01 \x01(\t\"L\n\x1cNodeServiceSubscribeResponse\x12,\n\x04\x63ode\x18\x01 \x01(\x0e\x32\x1e.grpc.NodeServiceSubscribeCode*$\n\x18NodeServiceSubscribeCode\x12\x08\n\x04PING\x10\x00\x32\xef\x01\n\x0bNodeService\x12>\n\x08Register\x12 .grpc.NodeServiceRegisterRequest\x1a\x0e.grpc.Response\"\x00\x12H\n\rSendHeartbeat\x12%.grpc.NodeServiceSendHeartbeatRequest\x1a\x0e.grpc.Response\"\x00\x12V\n\tSubscribe\x12!.grpc.NodeServiceSubscribeRequest\x1a\".grpc.NodeServiceSubscribeResponse\"\x00\x30\x01\x42\x08Z\x06.;grpcb\x06proto3') - -_globals = globals() -_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'services.node_service_pb2', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'Z\006.;grpc' - _globals['_NODESERVICESUBSCRIBECODE']._serialized_start=328 - _globals['_NODESERVICESUBSCRIBECODE']._serialized_end=364 - _globals['_NODESERVICEREGISTERREQUEST']._serialized_start=60 - _globals['_NODESERVICEREGISTERREQUEST']._serialized_end=146 - _globals['_NODESERVICESENDHEARTBEATREQUEST']._serialized_start=148 - _globals['_NODESERVICESENDHEARTBEATREQUEST']._serialized_end=199 - _globals['_NODESERVICESUBSCRIBEREQUEST']._serialized_start=201 - _globals['_NODESERVICESUBSCRIBEREQUEST']._serialized_end=248 - _globals['_NODESERVICESUBSCRIBERESPONSE']._serialized_start=250 - _globals['_NODESERVICESUBSCRIBERESPONSE']._serialized_end=326 - _globals['_NODESERVICE']._serialized_start=367 - _globals['_NODESERVICE']._serialized_end=606 -# @@protoc_insertion_point(module_scope) diff --git a/crawlab/grpc/services/node_service_pb2_grpc.py b/crawlab/grpc/services/node_service_pb2_grpc.py deleted file mode 100644 index b997c25..0000000 --- a/crawlab/grpc/services/node_service_pb2_grpc.py +++ /dev/null @@ -1,189 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -"""Client and server classes corresponding to protobuf-defined services.""" -import grpc -import warnings - -from crawlab.grpc.entity import response_pb2 as entity_dot_response__pb2 -from crawlab.grpc.services import node_service_pb2 as services_dot_node__service__pb2 - -GRPC_GENERATED_VERSION = '1.64.1' -GRPC_VERSION = grpc.__version__ -EXPECTED_ERROR_RELEASE = '1.65.0' -SCHEDULED_RELEASE_DATE = 'June 25, 2024' -_version_not_supported = False - -try: - from grpc._utilities import first_version_is_lower - _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) -except ImportError: - _version_not_supported = True - -if _version_not_supported: - warnings.warn( - f'The grpc package installed is at version {GRPC_VERSION},' - + f' but the generated code in services/node_service_pb2_grpc.py depends on' - + f' grpcio>={GRPC_GENERATED_VERSION}.' - + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' - + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' - + f' This warning will become an error in {EXPECTED_ERROR_RELEASE},' - + f' scheduled for release on {SCHEDULED_RELEASE_DATE}.', - RuntimeWarning - ) - - -class NodeServiceStub(object): - """Missing associated documentation comment in .proto file.""" - - def __init__(self, channel): - """Constructor. - - Args: - channel: A grpc.Channel. - """ - self.Register = channel.unary_unary( - '/grpc.NodeService/Register', - request_serializer=services_dot_node__service__pb2.NodeServiceRegisterRequest.SerializeToString, - response_deserializer=entity_dot_response__pb2.Response.FromString, - _registered_method=True) - self.SendHeartbeat = channel.unary_unary( - '/grpc.NodeService/SendHeartbeat', - request_serializer=services_dot_node__service__pb2.NodeServiceSendHeartbeatRequest.SerializeToString, - response_deserializer=entity_dot_response__pb2.Response.FromString, - _registered_method=True) - self.Subscribe = channel.unary_stream( - '/grpc.NodeService/Subscribe', - request_serializer=services_dot_node__service__pb2.NodeServiceSubscribeRequest.SerializeToString, - response_deserializer=services_dot_node__service__pb2.NodeServiceSubscribeResponse.FromString, - _registered_method=True) - - -class NodeServiceServicer(object): - """Missing associated documentation comment in .proto file.""" - - def Register(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!') - - def SendHeartbeat(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!') - - def Subscribe(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!') - - -def add_NodeServiceServicer_to_server(servicer, server): - rpc_method_handlers = { - 'Register': grpc.unary_unary_rpc_method_handler( - servicer.Register, - request_deserializer=services_dot_node__service__pb2.NodeServiceRegisterRequest.FromString, - response_serializer=entity_dot_response__pb2.Response.SerializeToString, - ), - 'SendHeartbeat': grpc.unary_unary_rpc_method_handler( - servicer.SendHeartbeat, - request_deserializer=services_dot_node__service__pb2.NodeServiceSendHeartbeatRequest.FromString, - response_serializer=entity_dot_response__pb2.Response.SerializeToString, - ), - 'Subscribe': grpc.unary_stream_rpc_method_handler( - servicer.Subscribe, - request_deserializer=services_dot_node__service__pb2.NodeServiceSubscribeRequest.FromString, - response_serializer=services_dot_node__service__pb2.NodeServiceSubscribeResponse.SerializeToString, - ), - } - generic_handler = grpc.method_handlers_generic_handler( - 'grpc.NodeService', rpc_method_handlers) - server.add_generic_rpc_handlers((generic_handler,)) - server.add_registered_method_handlers('grpc.NodeService', rpc_method_handlers) - - - # This class is part of an EXPERIMENTAL API. -class NodeService(object): - """Missing associated documentation comment in .proto file.""" - - @staticmethod - def Register(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/grpc.NodeService/Register', - services_dot_node__service__pb2.NodeServiceRegisterRequest.SerializeToString, - entity_dot_response__pb2.Response.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def SendHeartbeat(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/grpc.NodeService/SendHeartbeat', - services_dot_node__service__pb2.NodeServiceSendHeartbeatRequest.SerializeToString, - entity_dot_response__pb2.Response.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def Subscribe(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_stream( - request, - target, - '/grpc.NodeService/Subscribe', - services_dot_node__service__pb2.NodeServiceSubscribeRequest.SerializeToString, - services_dot_node__service__pb2.NodeServiceSubscribeResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) diff --git a/crawlab/grpc/services/task_service_pb2.py b/crawlab/grpc/services/task_service_pb2.py deleted file mode 100644 index 08d478f..0000000 --- a/crawlab/grpc/services/task_service_pb2.py +++ /dev/null @@ -1,44 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: services/task_service.proto -# Protobuf Python Version: 5.26.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 -from google.protobuf.internal import builder as _builder -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -from crawlab.grpc.entity import response_pb2 as entity_dot_response__pb2 - - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1bservices/task_service.proto\x12\x04grpc\x1a\x15\x65ntity/response.proto\".\n\x1bTaskServiceSubscribeRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\"l\n\x1cTaskServiceSubscribeResponse\x12,\n\x04\x63ode\x18\x01 \x01(\x0e\x32\x1e.grpc.TaskServiceSubscribeCode\x12\x0f\n\x07task_id\x18\x02 \x01(\t\x12\r\n\x05\x66orce\x18\x03 \x01(\x08\"f\n\x19TaskServiceConnectRequest\x12*\n\x04\x63ode\x18\x01 \x01(\x0e\x32\x1c.grpc.TaskServiceConnectCode\x12\x0f\n\x07task_id\x18\x02 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\"/\n\x1bTaskServiceFetchTaskRequest\x12\x10\n\x08node_key\x18\x01 \x01(\t\"/\n\x1cTaskServiceFetchTaskResponse\x12\x0f\n\x07task_id\x18\x02 \x01(\t\"G\n\"TaskServiceSendNotificationRequest\x12\x10\n\x08node_key\x18\x01 \x01(\t\x12\x0f\n\x07task_id\x18\x02 \x01(\t*&\n\x18TaskServiceSubscribeCode\x12\n\n\x06\x43\x41NCEL\x10\x00*:\n\x16TaskServiceConnectCode\x12\x0f\n\x0bINSERT_DATA\x10\x00\x12\x0f\n\x0bINSERT_LOGS\x10\x01\x32\xcb\x02\n\x0bTaskService\x12V\n\tSubscribe\x12!.grpc.TaskServiceSubscribeRequest\x1a\".grpc.TaskServiceSubscribeResponse\"\x00\x30\x01\x12>\n\x07\x43onnect\x12\x1f.grpc.TaskServiceConnectRequest\x1a\x0e.grpc.Response\"\x00(\x01\x12T\n\tFetchTask\x12!.grpc.TaskServiceFetchTaskRequest\x1a\".grpc.TaskServiceFetchTaskResponse\"\x00\x12N\n\x10SendNotification\x12(.grpc.TaskServiceSendNotificationRequest\x1a\x0e.grpc.Response\"\x00\x42\x08Z\x06.;grpcb\x06proto3') - -_globals = globals() -_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'services.task_service_pb2', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'Z\006.;grpc' - _globals['_TASKSERVICESUBSCRIBECODE']._serialized_start=493 - _globals['_TASKSERVICESUBSCRIBECODE']._serialized_end=531 - _globals['_TASKSERVICECONNECTCODE']._serialized_start=533 - _globals['_TASKSERVICECONNECTCODE']._serialized_end=591 - _globals['_TASKSERVICESUBSCRIBEREQUEST']._serialized_start=60 - _globals['_TASKSERVICESUBSCRIBEREQUEST']._serialized_end=106 - _globals['_TASKSERVICESUBSCRIBERESPONSE']._serialized_start=108 - _globals['_TASKSERVICESUBSCRIBERESPONSE']._serialized_end=216 - _globals['_TASKSERVICECONNECTREQUEST']._serialized_start=218 - _globals['_TASKSERVICECONNECTREQUEST']._serialized_end=320 - _globals['_TASKSERVICEFETCHTASKREQUEST']._serialized_start=322 - _globals['_TASKSERVICEFETCHTASKREQUEST']._serialized_end=369 - _globals['_TASKSERVICEFETCHTASKRESPONSE']._serialized_start=371 - _globals['_TASKSERVICEFETCHTASKRESPONSE']._serialized_end=418 - _globals['_TASKSERVICESENDNOTIFICATIONREQUEST']._serialized_start=420 - _globals['_TASKSERVICESENDNOTIFICATIONREQUEST']._serialized_end=491 - _globals['_TASKSERVICE']._serialized_start=594 - _globals['_TASKSERVICE']._serialized_end=925 -# @@protoc_insertion_point(module_scope) diff --git a/crawlab/grpc/services/task_service_pb2_grpc.py b/crawlab/grpc/services/task_service_pb2_grpc.py deleted file mode 100644 index edfa390..0000000 --- a/crawlab/grpc/services/task_service_pb2_grpc.py +++ /dev/null @@ -1,232 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -"""Client and server classes corresponding to protobuf-defined services.""" -import grpc -import warnings - -from crawlab.grpc.entity import response_pb2 as entity_dot_response__pb2 -from crawlab.grpc.services import task_service_pb2 as services_dot_task__service__pb2 - -GRPC_GENERATED_VERSION = '1.64.1' -GRPC_VERSION = grpc.__version__ -EXPECTED_ERROR_RELEASE = '1.65.0' -SCHEDULED_RELEASE_DATE = 'June 25, 2024' -_version_not_supported = False - -try: - from grpc._utilities import first_version_is_lower - _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) -except ImportError: - _version_not_supported = True - -if _version_not_supported: - warnings.warn( - f'The grpc package installed is at version {GRPC_VERSION},' - + f' but the generated code in services/task_service_pb2_grpc.py depends on' - + f' grpcio>={GRPC_GENERATED_VERSION}.' - + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' - + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' - + f' This warning will become an error in {EXPECTED_ERROR_RELEASE},' - + f' scheduled for release on {SCHEDULED_RELEASE_DATE}.', - RuntimeWarning - ) - - -class TaskServiceStub(object): - """Missing associated documentation comment in .proto file.""" - - def __init__(self, channel): - """Constructor. - - Args: - channel: A grpc.Channel. - """ - self.Subscribe = channel.unary_stream( - '/grpc.TaskService/Subscribe', - request_serializer=services_dot_task__service__pb2.TaskServiceSubscribeRequest.SerializeToString, - response_deserializer=services_dot_task__service__pb2.TaskServiceSubscribeResponse.FromString, - _registered_method=True) - self.Connect = channel.stream_unary( - '/grpc.TaskService/Connect', - request_serializer=services_dot_task__service__pb2.TaskServiceConnectRequest.SerializeToString, - response_deserializer=entity_dot_response__pb2.Response.FromString, - _registered_method=True) - self.FetchTask = channel.unary_unary( - '/grpc.TaskService/FetchTask', - request_serializer=services_dot_task__service__pb2.TaskServiceFetchTaskRequest.SerializeToString, - response_deserializer=services_dot_task__service__pb2.TaskServiceFetchTaskResponse.FromString, - _registered_method=True) - self.SendNotification = channel.unary_unary( - '/grpc.TaskService/SendNotification', - request_serializer=services_dot_task__service__pb2.TaskServiceSendNotificationRequest.SerializeToString, - response_deserializer=entity_dot_response__pb2.Response.FromString, - _registered_method=True) - - -class TaskServiceServicer(object): - """Missing associated documentation comment in .proto file.""" - - def Subscribe(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!') - - def Connect(self, request_iterator, 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!') - - def FetchTask(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!') - - def SendNotification(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!') - - -def add_TaskServiceServicer_to_server(servicer, server): - rpc_method_handlers = { - 'Subscribe': grpc.unary_stream_rpc_method_handler( - servicer.Subscribe, - request_deserializer=services_dot_task__service__pb2.TaskServiceSubscribeRequest.FromString, - response_serializer=services_dot_task__service__pb2.TaskServiceSubscribeResponse.SerializeToString, - ), - 'Connect': grpc.stream_unary_rpc_method_handler( - servicer.Connect, - request_deserializer=services_dot_task__service__pb2.TaskServiceConnectRequest.FromString, - response_serializer=entity_dot_response__pb2.Response.SerializeToString, - ), - 'FetchTask': grpc.unary_unary_rpc_method_handler( - servicer.FetchTask, - request_deserializer=services_dot_task__service__pb2.TaskServiceFetchTaskRequest.FromString, - response_serializer=services_dot_task__service__pb2.TaskServiceFetchTaskResponse.SerializeToString, - ), - 'SendNotification': grpc.unary_unary_rpc_method_handler( - servicer.SendNotification, - request_deserializer=services_dot_task__service__pb2.TaskServiceSendNotificationRequest.FromString, - response_serializer=entity_dot_response__pb2.Response.SerializeToString, - ), - } - generic_handler = grpc.method_handlers_generic_handler( - 'grpc.TaskService', rpc_method_handlers) - server.add_generic_rpc_handlers((generic_handler,)) - server.add_registered_method_handlers('grpc.TaskService', rpc_method_handlers) - - - # This class is part of an EXPERIMENTAL API. -class TaskService(object): - """Missing associated documentation comment in .proto file.""" - - @staticmethod - def Subscribe(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_stream( - request, - target, - '/grpc.TaskService/Subscribe', - services_dot_task__service__pb2.TaskServiceSubscribeRequest.SerializeToString, - services_dot_task__service__pb2.TaskServiceSubscribeResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def Connect(request_iterator, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.stream_unary( - request_iterator, - target, - '/grpc.TaskService/Connect', - services_dot_task__service__pb2.TaskServiceConnectRequest.SerializeToString, - entity_dot_response__pb2.Response.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def FetchTask(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/grpc.TaskService/FetchTask', - services_dot_task__service__pb2.TaskServiceFetchTaskRequest.SerializeToString, - services_dot_task__service__pb2.TaskServiceFetchTaskResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - - @staticmethod - def SendNotification(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/grpc.TaskService/SendNotification', - services_dot_task__service__pb2.TaskServiceSendNotificationRequest.SerializeToString, - entity_dot_response__pb2.Response.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) diff --git a/crawlab/log.py b/crawlab/log.py deleted file mode 100644 index e69de29..0000000 diff --git a/crawlab/logger.py b/crawlab/logger.py deleted file mode 100644 index 31bc4aa..0000000 --- a/crawlab/logger.py +++ /dev/null @@ -1,6 +0,0 @@ -class Logger: - def __init__(self): - pass - - def log(self, msg): - pass diff --git a/crawlab/result.py b/crawlab/result.py index d73bf73..0a33cff 100644 --- a/crawlab/result.py +++ b/crawlab/result.py @@ -1,72 +1,17 @@ -from typing import List, Optional, Dict +import sys +from typing import Iterable -from crawlab.client import get_client, Client -from crawlab.config import get_task_id +from crawlab.entity.ipc_message import IPCMessage -from crawlab.entity.result import Result -from crawlab.grpc.services.task_service_pb2_grpc import TaskServiceStub +def save_item(*items: dict): + return save_items(items) -class ResultService: - # internal - c: Client = None - task_stub: TaskServiceStub = None - def __init__(self): - self.c = get_client() - self.task_stub = self.c.task_service_stub - - def save_item(self, *items: Dict): - self.save(list(items)) - - def save_items(self, items: List[Dict]): - self.save(items) - - def save(self, items: List[Dict]): - _items: List[Dict] = [] - for i, item in enumerate(items): - _items.append(item) - if i > 0 and i % 50 == 0: - self._save(_items) - _items = [] - if len(_items) > 0: - self._save(_items) - - def _save(self, items: List[Dict]): - # task id - tid = get_task_id() - if tid is None: - return - - records = [] - for item in items: - result = Result(item) - result.set_task_id(tid) - records.append(result) - - # msg = stream_message_pb2.StreamMessage( - # code=stream_message_code_pb2.INSERT_DATA, - # data=data, - # ) - # self.task_stub.Subscribe(iter([msg])) - - # TODO: Use IPC to send data - - -RS: Optional[ResultService] = None - - -def get_result_service() -> ResultService: - global RS - if RS is not None: - return RS - RS = ResultService() - return RS - - -def save_item(*items: Dict): - get_result_service().save_item(*items) - - -def save_items(items: List[Dict]): - get_result_service().save_items(items) +def save_items(items: Iterable[dict]): + msg = IPCMessage( + type="data", + payload=items, + ) + sys.stdout.write(msg.model_dump_json()) + sys.stdout.flush() diff --git a/crawlab/scrapy/pipelines.py b/crawlab/scrapy/pipelines.py index 9d9f317..5f88c27 100644 --- a/crawlab/scrapy/pipelines.py +++ b/crawlab/scrapy/pipelines.py @@ -1,27 +1,12 @@ from crawlab import save_item -from crawlab.config import get_task_id -from crawlab.entity.result import Result class CrawlabPipeline(object): """Pipeline for saving scraped items to Crawlab's database.""" def process_item(self, item, spider): - # Get the task ID from the current crawling task - task_id = get_task_id() - - # Skip processing if no task ID is available - if not task_id: - return item - - # Convert the scraped item to a Crawlab Result object - result = Result(item) - - # Associate the result with the current task - result.set_task_id(task_id) - # Save the result to Crawlab's database - save_item(result) + save_item(item) # Return the item for potential further processing by other pipelines return item diff --git a/crawlab/utils/config.py b/crawlab/utils/config.py index df2e6a5..5f56dd7 100644 --- a/crawlab/utils/config.py +++ b/crawlab/utils/config.py @@ -1,37 +1,13 @@ -import json import os +import re +from typing import Optional -def get_task_id(): - return os.environ.get('CRAWLAB_TASK_ID') +def get_task_id() -> Optional[str]: + task_id = os.getenv("CRAWLAB_TASK_ID") - -def get_is_dedup(): - return os.environ.get('CRAWLAB_IS_DEDUP') - - -def get_dedup_field(): - return os.environ.get('CRAWLAB_DEDUP_FIELD') - - -def get_dedup_method(): - return os.environ.get('CRAWLAB_DEDUP_METHOD') - - -def get_collection(): - return os.environ.get('CRAWLAB_COLLECTION') - - -def get_data_source_type(): - ds = get_data_source() - return ds.get('type') or 'mongo' - - -def get_data_source(): - if os.environ.get('CRAWLAB_DATA_SOURCE') is None: - return {} - try: - ds = json.loads(os.environ.get('CRAWLAB_DATA_SOURCE')) - return ds - except: - return {} + # Only allow ObjectId format + if task_id and re.match(r"^[a-fA-F0-9]{24}$", task_id): + return task_id + else: + return None diff --git a/crawlab/client/request.py b/crawlab/utils/request.py similarity index 100% rename from crawlab/client/request.py rename to crawlab/utils/request.py diff --git a/poetry.lock b/poetry.lock index f932e8a..3a6f3f1 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,15 @@ -# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.4 and should not be changed by hand. + +[[package]] +name = "annotated-types" +version = "0.7.0" +description = "Reusable constraint types to use with typing.Annotated" +optional = false +python-versions = ">=3.8" +files = [ + {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, + {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, +] [[package]] name = "anyio" @@ -12,8 +23,10 @@ files = [ ] [package.dependencies] +exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} idna = ">=2.8" sniffio = ">=1.1" +typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} [package.extras] doc = ["Sphinx (>=7.4,<8.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] @@ -31,6 +44,20 @@ files = [ {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, ] +[[package]] +name = "exceptiongroup" +version = "1.2.2" +description = "Backport of PEP 654 (exception groups)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, + {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, +] + +[package.extras] +test = ["pytest (>=6)"] + [[package]] name = "grpc-interceptor-headers" version = "0.1.0" @@ -301,6 +328,138 @@ files = [ {file = "protobuf-5.28.3.tar.gz", hash = "sha256:64badbc49180a5e401f373f9ce7ab1d18b63f7dd4a9cdc43c92b9f0b481cef7b"}, ] +[[package]] +name = "pydantic" +version = "2.10.1" +description = "Data validation using Python type hints" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pydantic-2.10.1-py3-none-any.whl", hash = "sha256:a8d20db84de64cf4a7d59e899c2caf0fe9d660c7cfc482528e7020d7dd189a7e"}, + {file = "pydantic-2.10.1.tar.gz", hash = "sha256:a4daca2dc0aa429555e0656d6bf94873a7dc5f54ee42b1f5873d666fb3f35560"}, +] + +[package.dependencies] +annotated-types = ">=0.6.0" +pydantic-core = "2.27.1" +typing-extensions = ">=4.12.2" + +[package.extras] +email = ["email-validator (>=2.0.0)"] +timezone = ["tzdata"] + +[[package]] +name = "pydantic-core" +version = "2.27.1" +description = "Core functionality for Pydantic validation and serialization" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pydantic_core-2.27.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:71a5e35c75c021aaf400ac048dacc855f000bdfed91614b4a726f7432f1f3d6a"}, + {file = "pydantic_core-2.27.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f82d068a2d6ecfc6e054726080af69a6764a10015467d7d7b9f66d6ed5afa23b"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:121ceb0e822f79163dd4699e4c54f5ad38b157084d97b34de8b232bcaad70278"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4603137322c18eaf2e06a4495f426aa8d8388940f3c457e7548145011bb68e05"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a33cd6ad9017bbeaa9ed78a2e0752c5e250eafb9534f308e7a5f7849b0b1bfb4"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:15cc53a3179ba0fcefe1e3ae50beb2784dede4003ad2dfd24f81bba4b23a454f"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45d9c5eb9273aa50999ad6adc6be5e0ecea7e09dbd0d31bd0c65a55a2592ca08"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8bf7b66ce12a2ac52d16f776b31d16d91033150266eb796967a7e4621707e4f6"}, + {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:655d7dd86f26cb15ce8a431036f66ce0318648f8853d709b4167786ec2fa4807"}, + {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:5556470f1a2157031e676f776c2bc20acd34c1990ca5f7e56f1ebf938b9ab57c"}, + {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f69ed81ab24d5a3bd93861c8c4436f54afdf8e8cc421562b0c7504cf3be58206"}, + {file = "pydantic_core-2.27.1-cp310-none-win32.whl", hash = "sha256:f5a823165e6d04ccea61a9f0576f345f8ce40ed533013580e087bd4d7442b52c"}, + {file = "pydantic_core-2.27.1-cp310-none-win_amd64.whl", hash = "sha256:57866a76e0b3823e0b56692d1a0bf722bffb324839bb5b7226a7dbd6c9a40b17"}, + {file = "pydantic_core-2.27.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:ac3b20653bdbe160febbea8aa6c079d3df19310d50ac314911ed8cc4eb7f8cb8"}, + {file = "pydantic_core-2.27.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a5a8e19d7c707c4cadb8c18f5f60c843052ae83c20fa7d44f41594c644a1d330"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f7059ca8d64fea7f238994c97d91f75965216bcbe5f695bb44f354893f11d52"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bed0f8a0eeea9fb72937ba118f9db0cb7e90773462af7962d382445f3005e5a4"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a3cb37038123447cf0f3ea4c74751f6a9d7afef0eb71aa07bf5f652b5e6a132c"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:84286494f6c5d05243456e04223d5a9417d7f443c3b76065e75001beb26f88de"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acc07b2cfc5b835444b44a9956846b578d27beeacd4b52e45489e93276241025"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4fefee876e07a6e9aad7a8c8c9f85b0cdbe7df52b8a9552307b09050f7512c7e"}, + {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:258c57abf1188926c774a4c94dd29237e77eda19462e5bb901d88adcab6af919"}, + {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:35c14ac45fcfdf7167ca76cc80b2001205a8d5d16d80524e13508371fb8cdd9c"}, + {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d1b26e1dff225c31897696cab7d4f0a315d4c0d9e8666dbffdb28216f3b17fdc"}, + {file = "pydantic_core-2.27.1-cp311-none-win32.whl", hash = "sha256:2cdf7d86886bc6982354862204ae3b2f7f96f21a3eb0ba5ca0ac42c7b38598b9"}, + {file = "pydantic_core-2.27.1-cp311-none-win_amd64.whl", hash = "sha256:3af385b0cee8df3746c3f406f38bcbfdc9041b5c2d5ce3e5fc6637256e60bbc5"}, + {file = "pydantic_core-2.27.1-cp311-none-win_arm64.whl", hash = "sha256:81f2ec23ddc1b476ff96563f2e8d723830b06dceae348ce02914a37cb4e74b89"}, + {file = "pydantic_core-2.27.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9cbd94fc661d2bab2bc702cddd2d3370bbdcc4cd0f8f57488a81bcce90c7a54f"}, + {file = "pydantic_core-2.27.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5f8c4718cd44ec1580e180cb739713ecda2bdee1341084c1467802a417fe0f02"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15aae984e46de8d376df515f00450d1522077254ef6b7ce189b38ecee7c9677c"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1ba5e3963344ff25fc8c40da90f44b0afca8cfd89d12964feb79ac1411a260ac"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:992cea5f4f3b29d6b4f7f1726ed8ee46c8331c6b4eed6db5b40134c6fe1768bb"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0325336f348dbee6550d129b1627cb8f5351a9dc91aad141ffb96d4937bd9529"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7597c07fbd11515f654d6ece3d0e4e5093edc30a436c63142d9a4b8e22f19c35"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3bbd5d8cc692616d5ef6fbbbd50dbec142c7e6ad9beb66b78a96e9c16729b089"}, + {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:dc61505e73298a84a2f317255fcc72b710b72980f3a1f670447a21efc88f8381"}, + {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:e1f735dc43da318cad19b4173dd1ffce1d84aafd6c9b782b3abc04a0d5a6f5bb"}, + {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f4e5658dbffe8843a0f12366a4c2d1c316dbe09bb4dfbdc9d2d9cd6031de8aae"}, + {file = "pydantic_core-2.27.1-cp312-none-win32.whl", hash = "sha256:672ebbe820bb37988c4d136eca2652ee114992d5d41c7e4858cdd90ea94ffe5c"}, + {file = "pydantic_core-2.27.1-cp312-none-win_amd64.whl", hash = "sha256:66ff044fd0bb1768688aecbe28b6190f6e799349221fb0de0e6f4048eca14c16"}, + {file = "pydantic_core-2.27.1-cp312-none-win_arm64.whl", hash = "sha256:9a3b0793b1bbfd4146304e23d90045f2a9b5fd5823aa682665fbdaf2a6c28f3e"}, + {file = "pydantic_core-2.27.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f216dbce0e60e4d03e0c4353c7023b202d95cbaeff12e5fd2e82ea0a66905073"}, + {file = "pydantic_core-2.27.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a2e02889071850bbfd36b56fd6bc98945e23670773bc7a76657e90e6b6603c08"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42b0e23f119b2b456d07ca91b307ae167cc3f6c846a7b169fca5326e32fdc6cf"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:764be71193f87d460a03f1f7385a82e226639732214b402f9aa61f0d025f0737"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1c00666a3bd2f84920a4e94434f5974d7bbc57e461318d6bb34ce9cdbbc1f6b2"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3ccaa88b24eebc0f849ce0a4d09e8a408ec5a94afff395eb69baf868f5183107"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c65af9088ac534313e1963443d0ec360bb2b9cba6c2909478d22c2e363d98a51"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:206b5cf6f0c513baffaeae7bd817717140770c74528f3e4c3e1cec7871ddd61a"}, + {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:062f60e512fc7fff8b8a9d680ff0ddaaef0193dba9fa83e679c0c5f5fbd018bc"}, + {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:a0697803ed7d4af5e4c1adf1670af078f8fcab7a86350e969f454daf598c4960"}, + {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:58ca98a950171f3151c603aeea9303ef6c235f692fe555e883591103da709b23"}, + {file = "pydantic_core-2.27.1-cp313-none-win32.whl", hash = "sha256:8065914ff79f7eab1599bd80406681f0ad08f8e47c880f17b416c9f8f7a26d05"}, + {file = "pydantic_core-2.27.1-cp313-none-win_amd64.whl", hash = "sha256:ba630d5e3db74c79300d9a5bdaaf6200172b107f263c98a0539eeecb857b2337"}, + {file = "pydantic_core-2.27.1-cp313-none-win_arm64.whl", hash = "sha256:45cf8588c066860b623cd11c4ba687f8d7175d5f7ef65f7129df8a394c502de5"}, + {file = "pydantic_core-2.27.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:5897bec80a09b4084aee23f9b73a9477a46c3304ad1d2d07acca19723fb1de62"}, + {file = "pydantic_core-2.27.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d0165ab2914379bd56908c02294ed8405c252250668ebcb438a55494c69f44ab"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b9af86e1d8e4cfc82c2022bfaa6f459381a50b94a29e95dcdda8442d6d83864"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f6c8a66741c5f5447e047ab0ba7a1c61d1e95580d64bce852e3df1f895c4067"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a42d6a8156ff78981f8aa56eb6394114e0dedb217cf8b729f438f643608cbcd"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:64c65f40b4cd8b0e049a8edde07e38b476da7e3aaebe63287c899d2cff253fa5"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdcf339322a3fae5cbd504edcefddd5a50d9ee00d968696846f089b4432cf78"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bf99c8404f008750c846cb4ac4667b798a9f7de673ff719d705d9b2d6de49c5f"}, + {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8f1edcea27918d748c7e5e4d917297b2a0ab80cad10f86631e488b7cddf76a36"}, + {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_armv7l.whl", hash = "sha256:159cac0a3d096f79ab6a44d77a961917219707e2a130739c64d4dd46281f5c2a"}, + {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:029d9757eb621cc6e1848fa0b0310310de7301057f623985698ed7ebb014391b"}, + {file = "pydantic_core-2.27.1-cp38-none-win32.whl", hash = "sha256:a28af0695a45f7060e6f9b7092558a928a28553366519f64083c63a44f70e618"}, + {file = "pydantic_core-2.27.1-cp38-none-win_amd64.whl", hash = "sha256:2d4567c850905d5eaaed2f7a404e61012a51caf288292e016360aa2b96ff38d4"}, + {file = "pydantic_core-2.27.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:e9386266798d64eeb19dd3677051f5705bf873e98e15897ddb7d76f477131967"}, + {file = "pydantic_core-2.27.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4228b5b646caa73f119b1ae756216b59cc6e2267201c27d3912b592c5e323b60"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b3dfe500de26c52abe0477dde16192ac39c98f05bf2d80e76102d394bd13854"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aee66be87825cdf72ac64cb03ad4c15ffef4143dbf5c113f64a5ff4f81477bf9"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b748c44bb9f53031c8cbc99a8a061bc181c1000c60a30f55393b6e9c45cc5bd"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ca038c7f6a0afd0b2448941b6ef9d5e1949e999f9e5517692eb6da58e9d44be"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e0bd57539da59a3e4671b90a502da9a28c72322a4f17866ba3ac63a82c4498e"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ac6c2c45c847bbf8f91930d88716a0fb924b51e0c6dad329b793d670ec5db792"}, + {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b94d4ba43739bbe8b0ce4262bcc3b7b9f31459ad120fb595627eaeb7f9b9ca01"}, + {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:00e6424f4b26fe82d44577b4c842d7df97c20be6439e8e685d0d715feceb9fb9"}, + {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:38de0a70160dd97540335b7ad3a74571b24f1dc3ed33f815f0880682e6880131"}, + {file = "pydantic_core-2.27.1-cp39-none-win32.whl", hash = "sha256:7ccebf51efc61634f6c2344da73e366c75e735960b5654b63d7e6f69a5885fa3"}, + {file = "pydantic_core-2.27.1-cp39-none-win_amd64.whl", hash = "sha256:a57847b090d7892f123726202b7daa20df6694cbd583b67a592e856bff603d6c"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3fa80ac2bd5856580e242dbc202db873c60a01b20309c8319b5c5986fbe53ce6"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d950caa237bb1954f1b8c9227b5065ba6875ac9771bb8ec790d956a699b78676"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e4216e64d203e39c62df627aa882f02a2438d18a5f21d7f721621f7a5d3611d"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02a3d637bd387c41d46b002f0e49c52642281edacd2740e5a42f7017feea3f2c"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:161c27ccce13b6b0c8689418da3885d3220ed2eae2ea5e9b2f7f3d48f1d52c27"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:19910754e4cc9c63bc1c7f6d73aa1cfee82f42007e407c0f413695c2f7ed777f"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:e173486019cc283dc9778315fa29a363579372fe67045e971e89b6365cc035ed"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:af52d26579b308921b73b956153066481f064875140ccd1dfd4e77db89dbb12f"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:981fb88516bd1ae8b0cbbd2034678a39dedc98752f264ac9bc5839d3923fa04c"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5fde892e6c697ce3e30c61b239330fc5d569a71fefd4eb6512fc6caec9dd9e2f"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:816f5aa087094099fff7edabb5e01cc370eb21aa1a1d44fe2d2aefdfb5599b31"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c10c309e18e443ddb108f0ef64e8729363adbfd92d6d57beec680f6261556f3"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98476c98b02c8e9b2eec76ac4156fd006628b1b2d0ef27e548ffa978393fd154"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c3027001c28434e7ca5a6e1e527487051136aa81803ac812be51802150d880dd"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:7699b1df36a48169cdebda7ab5a2bac265204003f153b4bd17276153d997670a"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:1c39b07d90be6b48968ddc8c19e7585052088fd7ec8d568bb31ff64c70ae3c97"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:46ccfe3032b3915586e469d4972973f893c0a2bb65669194a5bdea9bacc088c2"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:62ba45e21cf6571d7f716d903b5b7b6d2617e2d5d67c0923dc47b9d41369f840"}, + {file = "pydantic_core-2.27.1.tar.gz", hash = "sha256:62a763352879b84aa31058fc931884055fd75089cccbd9d58bb6afd01141b235"}, +] + +[package.dependencies] +typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" + [[package]] name = "pygments" version = "2.18.0" @@ -346,6 +505,7 @@ files = [ [package.dependencies] markdown-it-py = ">=2.2.0" pygments = ">=2.13.0,<3.0.0" +typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.11\""} [package.extras] jupyter = ["ipywidgets (>=7.5.1,<9)"] @@ -378,23 +538,23 @@ files = [ [[package]] name = "setuptools" -version = "75.5.0" +version = "75.6.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.9" files = [ - {file = "setuptools-75.5.0-py3-none-any.whl", hash = "sha256:87cb777c3b96d638ca02031192d40390e0ad97737e27b6b4fa831bea86f2f829"}, - {file = "setuptools-75.5.0.tar.gz", hash = "sha256:5c4ccb41111392671f02bb5f8436dfc5a9a7185e80500531b133f5775c4163ef"}, + {file = "setuptools-75.6.0-py3-none-any.whl", hash = "sha256:ce74b49e8f7110f9bf04883b730f4765b774ef3ef28f722cce7c273d253aaf7d"}, + {file = "setuptools-75.6.0.tar.gz", hash = "sha256:8199222558df7c86216af4f84c30e9b34a61d8ba19366cc914424cdbd28252f6"}, ] [package.extras] check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.7.0)"] -core = ["importlib-metadata (>=6)", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more-itertools", "more-itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] +core = ["importlib_metadata (>=6)", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] enabler = ["pytest-enabler (>=2.2)"] test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] -type = ["importlib-metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (>=1.12,<1.14)", "pytest-mypy"] +type = ["importlib_metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (>=1.12,<1.14)", "pytest-mypy"] [[package]] name = "sniffio" @@ -407,7 +567,18 @@ files = [ {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, ] +[[package]] +name = "typing-extensions" +version = "4.12.2" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, + {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, +] + [metadata] lock-version = "2.0" -python-versions = "^3.11" -content-hash = "36e21406e857b5f8371547fd3da06166c8b985ffb1a1c5a570f7bc6e2964fd5c" +python-versions = "^3.9" +content-hash = "67a12aa4d9deb07069cbb387a9a055da23474aa9feebf5f4d77cc71c64ffae84" diff --git a/pyproject.toml b/pyproject.toml index e995126..74a4418 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "crawlab-sdk" -version = "0.7.0rc1" +version = "0.7.0rc2" description = "Python SDK for Crawlab" authors = ["Marvin Zhang "] readme = "README.md" @@ -23,6 +23,7 @@ grpcio-tools = "^1.59.0" httpx = "^0.23.0" rich = "^13.9.4" grpc-interceptor-headers = "^0.1.0" +pydantic = "^2.10.1" [tool.poetry.group.dev.dependencies] ruff = "^0.3.3" @@ -70,7 +71,7 @@ target-version = "py311" [tool.ruff.lint] # Enable Pyflakes (`F`) and a subset of the pycodestyle (`E`) codes by default. -select = ["E", "F"] +select = ["E", "F", "I"] ignore = [] # Allow fix for all enabled rules (when `--fix`) is provided. @@ -79,3 +80,10 @@ unfixable = [] # Allow unused variables when underscore-prefixed. dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$" + +[tool.ruff.lint.isort] +# Configure import sections and ordering +known-first-party = ["crawlab"] +section-order = ["future", "standard-library", "third-party", "first-party", "local-folder"] +combine-as-imports = true +split-on-trailing-comma = true