kiba-core 0.5.3.dev82__tar.gz → 0.5.3.dev83__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.
Files changed (143) hide show
  1. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/CHANGELOG.md +1 -0
  2. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/PKG-INFO +1 -1
  3. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/web3/eth_client.py +3 -1
  4. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/kiba_core.egg-info/PKG-INFO +1 -1
  5. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/pyproject.toml +1 -1
  6. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/web3/test_rest_eth_client.py +13 -0
  7. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/.github/pull_request_template.md +0 -0
  8. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/.github/workflows/deploy.yml +0 -0
  9. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/.github/workflows/publish.yml +0 -0
  10. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/.github/workflows/pull-request.yml +0 -0
  11. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/.github/workflows/release.yml +0 -0
  12. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/.gitignore +0 -0
  13. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/Dockerfile +0 -0
  14. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/README.md +0 -0
  15. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/__init__.py +0 -0
  16. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/api/__init__.py +0 -0
  17. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/api/api_request.py +0 -0
  18. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/api/api_response.py +0 -0
  19. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/api/authorizer.py +0 -0
  20. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/api/default_routes.py +0 -0
  21. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/api/health.py +0 -0
  22. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/api/json_route.py +0 -0
  23. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/api/middleware/__init__.py +0 -0
  24. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/api/middleware/database_connection_middleware.py +0 -0
  25. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/api/middleware/exception_handling_middleware.py +0 -0
  26. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/api/middleware/logging_middleware.py +0 -0
  27. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/api/middleware/origin_ip_middleware.py +0 -0
  28. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/api/middleware/server_headers_middleware.py +0 -0
  29. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/api/openapi.py +0 -0
  30. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/api/rate_limit.py +0 -0
  31. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/api/request_context.py +0 -0
  32. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/api/route.py +0 -0
  33. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/api/route_auth.py +0 -0
  34. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/api/route_metadata.py +0 -0
  35. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/api/streaming_json_route.py +0 -0
  36. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/aws_requester.py +0 -0
  37. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/caching/__init__.py +0 -0
  38. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/caching/cache.py +0 -0
  39. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/caching/dict_cache.py +0 -0
  40. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/caching/file_cache.py +0 -0
  41. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/cron/__init__.py +0 -0
  42. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/cron/api_request_cron_job_processor.py +0 -0
  43. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/cron/cron_executor.py +0 -0
  44. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/cron/cron_job_processor.py +0 -0
  45. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/cron/model.py +0 -0
  46. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/exceptions.py +0 -0
  47. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/http/__init__.py +0 -0
  48. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/http/basic_authentication.py +0 -0
  49. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/http/jwt.py +0 -0
  50. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/http/rest_method.py +0 -0
  51. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/locks/__init__.py +0 -0
  52. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/locks/lock.py +0 -0
  53. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/locks/model.py +0 -0
  54. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/locks/sql.py +0 -0
  55. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/logging.py +0 -0
  56. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/notifications/__init__.py +0 -0
  57. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/notifications/discord_client.py +0 -0
  58. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/notifications/notification_client.py +0 -0
  59. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/notifications/slack_client.py +0 -0
  60. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/py.typed +0 -0
  61. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/queues/__init__.py +0 -0
  62. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/queues/aqs.py +0 -0
  63. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/queues/cosmos.py +0 -0
  64. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/queues/message_queue.py +0 -0
  65. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/queues/message_queue_processor.py +0 -0
  66. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/queues/model.py +0 -0
  67. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/queues/sql.py +0 -0
  68. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/queues/sqs.py +0 -0
  69. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/requester/__init__.py +0 -0
  70. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/requester/requester.py +0 -0
  71. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/s3_manager.py +0 -0
  72. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/service_client.py +0 -0
  73. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/store/__init__.py +0 -0
  74. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/store/database.py +0 -0
  75. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/store/entity_repository.py +0 -0
  76. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/store/retriever.py +0 -0
  77. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/store/saver.py +0 -0
  78. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/util/__init__.py +0 -0
  79. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/util/async_util.py +0 -0
  80. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/util/chain_util.py +0 -0
  81. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/util/date_util.py +0 -0
  82. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/util/dict_util.py +0 -0
  83. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/util/file_util.py +0 -0
  84. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/util/hashing_util.py +0 -0
  85. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/util/http_util.py +0 -0
  86. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/util/json_util.py +0 -0
  87. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/util/list_util.py +0 -0
  88. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/util/process_util.py +0 -0
  89. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/util/string_util.py +0 -0
  90. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/util/typing_util.py +0 -0
  91. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/util/url_util.py +0 -0
  92. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/util/value_holder.py +0 -0
  93. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/web3/__init__.py +0 -0
  94. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/web3/eth_client_registry.py +0 -0
  95. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/core/web3/multicall3.py +0 -0
  96. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/kiba_core.egg-info/SOURCES.txt +0 -0
  97. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/kiba_core.egg-info/dependency_links.txt +0 -0
  98. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/kiba_core.egg-info/requires.txt +0 -0
  99. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/kiba_core.egg-info/top_level.txt +0 -0
  100. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/makefile +0 -0
  101. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/setup.cfg +0 -0
  102. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/__init__.py +0 -0
  103. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/api/test_api_response.py +0 -0
  104. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/api/test_authorizer.py +0 -0
  105. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/api/test_exception_handling_middleware.py +0 -0
  106. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/api/test_json_route.py +0 -0
  107. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/api/test_openapi.py +0 -0
  108. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/api/test_origin_ip_middleware.py +0 -0
  109. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/api/test_rate_limit.py +0 -0
  110. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/api/test_request_context.py +0 -0
  111. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/api/test_route.py +0 -0
  112. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/api/test_streaming_json_route.py +0 -0
  113. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/caching/test_dict_cache.py +0 -0
  114. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/caching/test_file_cache.py +0 -0
  115. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/cron/__init__.py +0 -0
  116. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/cron/test_cron_executor.py +0 -0
  117. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/locks/test_sql_lock.py +0 -0
  118. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/queues/conftest.py +0 -0
  119. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/queues/test_aqs_queue.py +0 -0
  120. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/queues/test_cosmos_queue.py +0 -0
  121. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/queues/test_message_queue_processor.py +0 -0
  122. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/queues/test_sql_queue.py +0 -0
  123. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/queues/test_sqs_queue.py +0 -0
  124. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/requester/__init__.py +0 -0
  125. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/requester/test_requester.py +0 -0
  126. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/test_database.py +0 -0
  127. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/test_entity_repository.py +0 -0
  128. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/test_exceptions.py +0 -0
  129. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/test_logging.py +0 -0
  130. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/util/__init__.py +0 -0
  131. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/util/test_async_util.py +0 -0
  132. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/util/test_chain_util.py +0 -0
  133. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/util/test_date_util.py +0 -0
  134. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/util/test_dict_util.py +0 -0
  135. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/util/test_file_util.py +0 -0
  136. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/util/test_json_util.py +0 -0
  137. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/util/test_list_util.py +0 -0
  138. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/util/test_process_util.py +0 -0
  139. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/util/test_string_util.py +0 -0
  140. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/util/test_url_util.py +0 -0
  141. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/web3/__init__.py +0 -0
  142. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/tests/web3/test_eth_client_registry.py +0 -0
  143. {kiba_core-0.5.3.dev82 → kiba_core-0.5.3.dev83}/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 optional `timeoutSeconds` (default 10) to `RestEthClient` to set the timeout of each request, e.g. a shorter one for an archive node so a degraded node fails fast
11
12
  - [MINOR] Added `UNDEFINED`, `Undefined` and `UpdateValue[T]` to `core.util.typing_util` for partial updates: `UpdateValue[T]` is `T` or the `UNDEFINED` sentinel, so an update can tell "not provided" apart from an explicit `None`. Use it as a pydantic field default (`title: UpdateValue[str | None] = UNDEFINED`); request input never validates to `UNDEFINED` (a JSON `"UNDEFINED"` stays a string), and `x is not UNDEFINED` narrows `x` to `T` for type checkers
12
13
  - [MINOR] Added `core.store.entity_repository.EntityRepository`, which reads and writes rows of a table as pydantic models: `create`, `update`, `upsert`, `upsert_many` (postgres and sqlite), `delete`, `list_many`, `get_first`, `get`, `get_one` and `get_one_or_none`. It exposes UUID columns as strings and datetimes as aware utc datetimes, dumps pydantic values in JSON columns, generates ids for UUID primary keys and stamps `createdDate`/`updatedDate` when the table has them; subclasses can override `_convert_value_from_db`/`_convert_value_to_db` for other columns
13
14
  - [MINOR] Added `UUIDFieldFilter` (accepts `uuid.UUID` or `str` values) and module-level `apply_orders`, `apply_field_filters` and `get_field_filters_conditions` (conditions usable on selects, updates and deletes) to `core.store.retriever`; `Retriever` now uses them
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kiba-core
3
- Version: 0.5.3.dev82
3
+ Version: 0.5.3.dev83
4
4
  Summary: Kiba Labs' python utilities
5
5
  Project-URL: repository, https://github.com/kibalabs/core-py
6
6
  Requires-Python: <4,>=3.12
@@ -316,10 +316,12 @@ class RestEthClient(EthClientInterface):
316
316
  retryLimit: int = 10,
317
317
  maxConcurrentRequestCount: int | None = None,
318
318
  semaphore: asyncio.Semaphore | None = None,
319
+ timeoutSeconds: int = 10,
319
320
  ) -> None:
320
321
  super().__init__(web3Connection=Web3(), chainId=chainId, isTestnet=isTestnet)
321
322
  self.url = url
322
323
  self.requester = requester
324
+ self.timeoutSeconds = timeoutSeconds
323
325
  self.shouldBackoffRetryOnRateLimit = shouldBackoffRetryOnRateLimit
324
326
  self.retryLimit = retryLimit
325
327
  # NOTE(krishan711): pass the same semaphore to several clients to cap their combined concurrent requests, or set maxConcurrentRequestCount to cap just this client
@@ -342,7 +344,7 @@ class RestEthClient(EthClientInterface):
342
344
  response = await self.requester.post_json(
343
345
  url=self.url,
344
346
  dataDict={'jsonrpc': '2.0', 'method': method, 'params': params or [], 'id': None},
345
- timeout=10,
347
+ timeout=self.timeoutSeconds,
346
348
  )
347
349
  responseDict = response.json()
348
350
  if responseDict.get('error'):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kiba-core
3
- Version: 0.5.3.dev82
3
+ Version: 0.5.3.dev83
4
4
  Summary: Kiba Labs' python utilities
5
5
  Project-URL: repository, https://github.com/kibalabs/core-py
6
6
  Requires-Python: <4,>=3.12
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "kiba-core"
3
- version = "0.5.3.dev82"
3
+ version = "0.5.3.dev83"
4
4
  description = "Kiba Labs' python utilities"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12, <4"
@@ -571,6 +571,19 @@ class TestRestEthClient:
571
571
  assert all(client.semaphore is semaphore for client in clients)
572
572
  assert await self._max_concurrent_request_count(mock_requester=mock_requester, clients=clients) == 2
573
573
 
574
+ @pytest.mark.asyncio
575
+ async def test_requests_use_default_timeout(self, client, mock_requester):
576
+ mock_requester.responses['eth_blockNumber'] = {'jsonrpc': '2.0', 'result': '0x1b4', 'id': None}
577
+ await client.get_latest_block_number()
578
+ assert mock_requester.requests_made[0]['timeout'] == 10
579
+
580
+ @pytest.mark.asyncio
581
+ async def test_requests_use_timeout_seconds(self, mock_requester):
582
+ mock_requester.responses['eth_blockNumber'] = {'jsonrpc': '2.0', 'result': '0x1b4', 'id': None}
583
+ client = RestEthClient(url='https://test-rpc-url.com', requester=mock_requester, chainId=1, timeoutSeconds=3)
584
+ await client.get_latest_block_number()
585
+ assert mock_requester.requests_made[0]['timeout'] == 3
586
+
574
587
  @pytest.mark.asyncio
575
588
  async def test_fill_transaction_params_all_provided(self, client, mock_requester):
576
589
  params = {
File without changes