kiba-core 0.5.3.dev72__tar.gz → 0.5.3.dev73__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/CHANGELOG.md +1 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/PKG-INFO +1 -1
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/queues/message_queue_processor.py +7 -2
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/kiba_core.egg-info/PKG-INFO +1 -1
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/kiba_core.egg-info/SOURCES.txt +1 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/pyproject.toml +1 -1
- kiba_core-0.5.3.dev73/tests/queues/test_message_queue_processor.py +46 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/.github/pull_request_template.md +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/.github/workflows/deploy.yml +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/.github/workflows/pull-request.yml +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/.github/workflows/release.yml +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/.gitignore +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/Dockerfile +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/README.md +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/__init__.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/api/__init__.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/api/api_request.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/api/api_response.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/api/authorizer.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/api/default_routes.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/api/health.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/api/json_route.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/api/middleware/__init__.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/api/middleware/database_connection_middleware.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/api/middleware/exception_handling_middleware.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/api/middleware/logging_middleware.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/api/middleware/origin_ip_middleware.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/api/middleware/server_headers_middleware.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/api/openapi.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/api/rate_limit.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/api/request_context.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/api/route.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/api/route_auth.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/api/route_metadata.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/api/streaming_json_route.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/aws_requester.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/caching/__init__.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/caching/cache.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/caching/dict_cache.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/caching/file_cache.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/cron/__init__.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/cron/api_request_cron_job_processor.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/cron/cron_executor.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/cron/cron_job_processor.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/cron/model.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/exceptions.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/http/__init__.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/http/basic_authentication.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/http/jwt.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/http/rest_method.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/locks/__init__.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/locks/lock.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/locks/model.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/locks/sql.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/logging.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/notifications/__init__.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/notifications/discord_client.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/notifications/notification_client.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/notifications/slack_client.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/py.typed +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/queues/__init__.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/queues/aqs.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/queues/cosmos.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/queues/message_queue.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/queues/model.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/queues/sql.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/queues/sqs.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/requester/__init__.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/requester/requester.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/s3_manager.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/service_client.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/store/__init__.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/store/database.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/store/retriever.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/store/saver.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/util/__init__.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/util/async_util.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/util/chain_util.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/util/date_util.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/util/dict_util.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/util/file_util.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/util/hashing_util.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/util/http_util.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/util/json_util.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/util/list_util.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/util/process_util.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/util/string_util.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/util/typing_util.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/util/url_util.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/util/value_holder.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/web3/__init__.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/web3/eth_client.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/web3/eth_client_registry.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/web3/multicall3.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/kiba_core.egg-info/dependency_links.txt +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/kiba_core.egg-info/requires.txt +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/kiba_core.egg-info/top_level.txt +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/makefile +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/setup.cfg +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/__init__.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/api/test_api_response.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/api/test_authorizer.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/api/test_exception_handling_middleware.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/api/test_json_route.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/api/test_openapi.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/api/test_origin_ip_middleware.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/api/test_rate_limit.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/api/test_request_context.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/api/test_route.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/api/test_streaming_json_route.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/caching/test_dict_cache.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/caching/test_file_cache.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/cron/__init__.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/cron/test_cron_executor.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/locks/test_sql_lock.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/queues/conftest.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/queues/test_aqs_queue.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/queues/test_cosmos_queue.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/queues/test_sql_queue.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/queues/test_sqs_queue.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/requester/__init__.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/requester/test_requester.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/test_database.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/test_exceptions.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/test_logging.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/util/__init__.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/util/test_async_util.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/util/test_chain_util.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/util/test_date_util.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/util/test_dict_util.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/util/test_file_util.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/util/test_json_util.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/util/test_list_util.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/util/test_process_util.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/util/test_string_util.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/util/test_url_util.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/web3/__init__.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/web3/test_eth_client_registry.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/web3/test_rest_eth_client.py +0 -0
- {kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/uv.lock +0 -0
|
@@ -8,6 +8,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
10
|
### Added
|
|
11
|
+
- [MINOR] Added `pollLogIntervalSeconds` (default 600) to `MessageQueueProcessor`: `Retrieving messages...` is now logged on the first poll and then at most once per interval instead of on every poll, so it still shows the worker is alive without flooding the logs; pass `0` to log every poll as before
|
|
11
12
|
- [MAJOR] Updated `RestEthClient` to raise `RpcServerException` (a `ServerException` keeping the original status code and message, with the original exception as its cause) when the node responds with a 5xx, so callers can tell node failures apart from other server errors; `RequesterTimeoutException` is still raised unchanged. Code catching `InternalServerErrorException` (or `BadGatewayException`, `ServiceUnavailableException`, …) around `RestEthClient` calls must catch `RpcServerException` instead
|
|
12
13
|
- [MINOR] Added `RestEthClient.get_code`
|
|
13
14
|
- [MINOR] Added optional `maxConcurrentRequestCount` and `semaphore` to `RestEthClient` to limit concurrent requests; pass the same `semaphore` to several clients to limit them together (it takes precedence over `maxConcurrentRequestCount`)
|
|
@@ -40,11 +40,13 @@ class MessageLeaseLostException(InternalServerErrorException):
|
|
|
40
40
|
|
|
41
41
|
|
|
42
42
|
class MessageQueueProcessor[MessageType: Message]:
|
|
43
|
-
def __init__(self, queue: MessageQueue[MessageType], messageProcessor: MessageProcessor, notificationClients: list[NotificationClient], requestIdHolder: RequestIdHolder | None = None) -> None:
|
|
43
|
+
def __init__(self, queue: MessageQueue[MessageType], messageProcessor: MessageProcessor, notificationClients: list[NotificationClient], requestIdHolder: RequestIdHolder | None = None, pollLogIntervalSeconds: float = 600) -> None:
|
|
44
44
|
self.queue = queue
|
|
45
45
|
self.messageProcessor = messageProcessor
|
|
46
46
|
self.notificationClients = notificationClients
|
|
47
47
|
self.requestIdHolder = requestIdHolder
|
|
48
|
+
self.pollLogIntervalSeconds = pollLogIntervalSeconds
|
|
49
|
+
self._lastPollLogTime: float | None = None
|
|
48
50
|
|
|
49
51
|
async def _handle_failure(self, message: MessageType, exception: Exception, requestId: str) -> int:
|
|
50
52
|
logging.error('Caught exception whilst processing message:')
|
|
@@ -117,7 +119,10 @@ class MessageQueueProcessor[MessageType: Message]:
|
|
|
117
119
|
self.requestIdHolder.set_value(value=None)
|
|
118
120
|
|
|
119
121
|
async def execute_batch(self, batchSize: int, expectedProcessingSeconds: int = 300, longPollSeconds: int = 20, shouldProcessInParallel: bool = False) -> int:
|
|
120
|
-
|
|
122
|
+
now = time.monotonic()
|
|
123
|
+
if self._lastPollLogTime is None or now - self._lastPollLogTime >= self.pollLogIntervalSeconds:
|
|
124
|
+
logging.info('Retrieving messages...')
|
|
125
|
+
self._lastPollLogTime = now
|
|
121
126
|
messages = await self.queue.get_messages(expectedProcessingSeconds=expectedProcessingSeconds, longPollSeconds=longPollSeconds, limit=batchSize)
|
|
122
127
|
if shouldProcessInParallel:
|
|
123
128
|
await asyncio.gather(*[self._process_message(message=message, expectedProcessingSeconds=expectedProcessingSeconds) for message in messages])
|
|
@@ -117,6 +117,7 @@ tests/locks/test_sql_lock.py
|
|
|
117
117
|
tests/queues/conftest.py
|
|
118
118
|
tests/queues/test_aqs_queue.py
|
|
119
119
|
tests/queues/test_cosmos_queue.py
|
|
120
|
+
tests/queues/test_message_queue_processor.py
|
|
120
121
|
tests/queues/test_sql_queue.py
|
|
121
122
|
tests/queues/test_sqs_queue.py
|
|
122
123
|
tests/requester/__init__.py
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
|
|
3
|
+
import pytest
|
|
4
|
+
|
|
5
|
+
from core.queues.message_queue_processor import MessageProcessor
|
|
6
|
+
from core.queues.message_queue_processor import MessageQueueProcessor
|
|
7
|
+
from core.queues.model import Message
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class EmptyQueue:
|
|
11
|
+
async def get_messages(self, expectedProcessingSeconds: int, longPollSeconds: int, limit: int) -> list[Message]: # noqa: ARG002
|
|
12
|
+
return []
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class NoopProcessor(MessageProcessor):
|
|
16
|
+
async def process_message(self, message: Message) -> None:
|
|
17
|
+
pass
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def _processor(pollLogIntervalSeconds: float) -> MessageQueueProcessor[Message]:
|
|
21
|
+
return MessageQueueProcessor(queue=EmptyQueue(), messageProcessor=NoopProcessor(), notificationClients=[], pollLogIntervalSeconds=pollLogIntervalSeconds) # type: ignore[arg-type]
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def _pollLogCount(caplog: pytest.LogCaptureFixture) -> int:
|
|
25
|
+
return sum(1 for record in caplog.records if record.getMessage() == 'Retrieving messages...')
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@pytest.mark.asyncio
|
|
29
|
+
async def test_poll_is_logged_once_per_interval(caplog: pytest.LogCaptureFixture) -> None:
|
|
30
|
+
caplog.set_level('INFO')
|
|
31
|
+
processor = _processor(pollLogIntervalSeconds=0.2)
|
|
32
|
+
await processor.execute_batch(batchSize=1)
|
|
33
|
+
await processor.execute_batch(batchSize=1)
|
|
34
|
+
assert _pollLogCount(caplog) == 1
|
|
35
|
+
await asyncio.sleep(0.25)
|
|
36
|
+
await processor.execute_batch(batchSize=1)
|
|
37
|
+
assert _pollLogCount(caplog) == 2 # noqa: PLR2004
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
@pytest.mark.asyncio
|
|
41
|
+
async def test_zero_interval_logs_every_poll(caplog: pytest.LogCaptureFixture) -> None:
|
|
42
|
+
caplog.set_level('INFO')
|
|
43
|
+
processor = _processor(pollLogIntervalSeconds=0)
|
|
44
|
+
for _ in range(3):
|
|
45
|
+
await processor.execute_batch(batchSize=1)
|
|
46
|
+
assert _pollLogCount(caplog) == 3 # noqa: PLR2004
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/api/middleware/exception_handling_middleware.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/core/api/middleware/server_headers_middleware.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kiba_core-0.5.3.dev72 → kiba_core-0.5.3.dev73}/tests/api/test_exception_handling_middleware.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|