diff --git a/package/test_tools/__private/hived/api/database_api/__init__.py b/package/test_tools/__private/hived/api/database_api/__init__.py index 1b917bc3a027385674318e557bd146abd00666dc..abf0794b54928e4081258a2ee26f27c6a193fc3e 100644 --- a/package/test_tools/__private/hived/api/database_api/__init__.py +++ b/package/test_tools/__private/hived/api/database_api/__init__.py @@ -1,5 +1,5 @@ from __future__ import annotations -from .sync_api import DatabaseApi as SyncDatabaseApi +from database_api.database_api_client_sync import DatabaseApi as SyncDatabaseApi __all__ = ["SyncDatabaseApi"] diff --git a/package/test_tools/__private/hived/api/database_api/sync_api.py b/package/test_tools/__private/hived/api/database_api/sync_api.py deleted file mode 100644 index 9ee5894c6541292139d2b7f285e2d5ff3e5c7d80..0000000000000000000000000000000000000000 --- a/package/test_tools/__private/hived/api/database_api/sync_api.py +++ /dev/null @@ -1,303 +0,0 @@ -from __future__ import annotations - -from datetime import datetime # noqa: TCH003 -from typing import Literal - -from beekeepy.handle.remote import AbstractSyncApi - -from schemas.apis import database_api -from schemas.transaction import Transaction -from test_tools.__private.hived.api.database_api.common import DatabaseApiCommons -from wax.helpy._interfaces.asset import Hf26Asset - - -class DatabaseApi(AbstractSyncApi, DatabaseApiCommons): - api = AbstractSyncApi.endpoint_jsonrpc - - @api - def find_account_recovery_requests(self, *, accounts: list[str]) -> database_api.FindAccountRecoveryRequests: - raise NotImplementedError - - @api - def find_accounts( - self, *, accounts: list[str], delayed_votes_active: bool | None = None - ) -> database_api.FindAccounts: - raise NotImplementedError - - @api - def find_change_recovery_account_requests( - self, *, accounts: list[str] - ) -> database_api.FindChangeRecoveryAccountRequests: - raise NotImplementedError - - @api - def find_collateralized_conversion_requests( - self, *, account: str - ) -> database_api.FindCollateralizedConversionRequests: - raise NotImplementedError - - @api - def find_comments(self, *, comments: list[tuple[str, str]]) -> database_api.FindComments: - raise NotImplementedError - - @api - def find_decline_voting_rights_requests( - self, *, accounts: list[str] - ) -> database_api.FindDeclineVotingRightsRequests: - raise NotImplementedError - - @api - def find_escrows(self, *, from_: str = "") -> database_api.FindEscrows: - raise NotImplementedError - - @api - def find_hbd_conversion_requests(self, *, account: str) -> database_api.FindHbdConversionRequests: - raise NotImplementedError - - @api - def find_limit_orders(self, *, account: str) -> database_api.FindLimitOrders: - raise NotImplementedError - - @api - def find_owner_histories(self, *, owner: str = "") -> database_api.FindOwnerHistories: - raise NotImplementedError - - @api - def find_proposals(self, *, proposal_ids: list[int]) -> database_api.FindProposals: - raise NotImplementedError - - @api - def find_recurrent_transfers(self, *, from_: str = "") -> database_api.FindRecurrentTransfers: - raise NotImplementedError - - @api - def find_savings_withdrawals(self, *, account: str) -> database_api.FindSavingsWithdrawals: - raise NotImplementedError - - @api - def find_vesting_delegation_expirations(self, *, account: str) -> database_api.FindVestingDelegationExpirations: - raise NotImplementedError - - @api - def find_vesting_delegations(self, *, account: str) -> database_api.FindVestingDelegations: - raise NotImplementedError - - @api - def find_withdraw_vesting_routes( - self, *, account: str, order: DatabaseApiCommons.SORT_TYPES - ) -> database_api.FindWithdrawVestingRoutes: - raise NotImplementedError - - @api - def find_witnesses(self, *, owners: list[str]) -> database_api.FindWitnesses: - raise NotImplementedError - - @api - def get_active_witnesses(self, *, include_future: bool = False) -> database_api.GetActiveWitnesses: - raise NotImplementedError - - @api - def get_comment_pending_payouts(self, *, comments: list[tuple[str, str]]) -> database_api.GetCommentPendingPayouts: - raise NotImplementedError - - @api - def get_config(self) -> database_api.GetConfig: - raise NotImplementedError - - @api - def get_current_price_feed(self) -> database_api.GetCurrentPriceFeed: - raise NotImplementedError - - @api - def get_dynamic_global_properties( - self, - ) -> database_api.GetDynamicGlobalProperties: - raise NotImplementedError - - @api - def get_feed_history(self) -> database_api.GetFeedHistory: - raise NotImplementedError - - @api - def get_hardfork_properties(self) -> database_api.GetHardforkProperties: - raise NotImplementedError - - @api - def get_order_book(self, *, limit: int, base: Hf26Asset.HiveT, quote: Hf26Asset.HbdT) -> database_api.GetOrderBook: - raise NotImplementedError - - @api - def get_potential_signatures(self, *, trx: Transaction) -> database_api.GetPotentialSignatures: - raise NotImplementedError - - @api - def get_required_signatures(self, *, trx: Transaction) -> database_api.GetRequiredSignatures: - raise NotImplementedError - - @api - def get_reward_funds(self) -> database_api.GetRewardFunds: - raise NotImplementedError - - @api - def get_transaction_hex(self, *, trx: Transaction) -> database_api.GetTransactionHex: - raise NotImplementedError - - @api - def get_version(self) -> database_api.GetVersion: - raise NotImplementedError - - @api - def get_witness_schedule(self) -> database_api.GetWitnessSchedule: - raise NotImplementedError - - @api - def is_known_transaction(self, *, id_: str) -> database_api.IsKnownTransaction: - raise NotImplementedError - - @api - def list_account_recovery_requests( - self, *, account: str, limit: int, order: DatabaseApiCommons.SORT_TYPES - ) -> database_api.ListAccountRecoveryRequests: - raise NotImplementedError - - @api - def list_accounts( - self, - *, - start: str | tuple[str, str] | tuple[datetime, str], - limit: int, - order: DatabaseApiCommons.SORT_TYPES, - delayed_votes_active: bool = True, - ) -> database_api.ListAccounts: - raise NotImplementedError - - @api - def list_change_recovery_account_requests( - self, *, start: str | tuple[datetime, str], limit: int, order: DatabaseApiCommons.SORT_TYPES - ) -> database_api.ListChangeRecoveryAccountRequests: - raise NotImplementedError - - @api - def list_collateralized_conversion_requests( - self, *, start: str | None, limit: int, order: DatabaseApiCommons.SORT_TYPES - ) -> database_api.ListCollateralizedConversionRequests: - raise NotImplementedError - - @api - def list_decline_voting_rights_requests( - self, *, start: str | tuple[datetime, str], limit: int, order: DatabaseApiCommons.SORT_TYPES - ) -> database_api.ListDeclineVotingRightsRequests: - raise NotImplementedError - - @api - def list_escrows( - self, *, start: tuple[str, int] | tuple[bool, datetime, int], limit: int, order: DatabaseApiCommons.SORT_TYPES - ) -> database_api.ListEscrows: - raise NotImplementedError - - @api - def list_hbd_conversion_requests( - self, *, limit: int, order: DatabaseApiCommons.SORT_TYPES - ) -> database_api.ListHbdConversionRequests: - raise NotImplementedError - - @api - def list_limit_orders( - self, *, start: tuple[str, int] | tuple[dict[Literal["base", "quote"], Hf26Asset.HiveT | Hf26Asset.HbdT], int] - ) -> database_api.ListLimitOrders: - raise NotImplementedError - - @api - def list_owner_histories(self, *, start: tuple[str, datetime], limit: int) -> database_api.ListOwnerHistories: - raise NotImplementedError - - @api - def list_proposal_votes( - self, - *, - start: list[str], - limit: int, - order: DatabaseApiCommons.SORT_TYPES, - order_direction: DatabaseApiCommons.SORT_DIRECTION, - status: DatabaseApiCommons.PROPOSAL_STATUS, - ) -> database_api.ListProposalVotes: - raise NotImplementedError - - @api - def list_proposals( - self, - *, - start: list[str] | list[int] | list[datetime], - limit: int, - order: DatabaseApiCommons.SORT_TYPES, - order_direction: DatabaseApiCommons.SORT_DIRECTION, - status: DatabaseApiCommons.PROPOSAL_STATUS, - ) -> database_api.ListProposals: - raise NotImplementedError - - @api - def list_savings_withdrawals( - self, - *, - start: tuple[int] | tuple[datetime, str, int] | tuple[str, datetime, int], - limit: int, - order: DatabaseApiCommons.SORT_TYPES, - ) -> database_api.ListSavingsWithdrawals: - raise NotImplementedError - - @api - def list_vesting_delegation_expirations( - self, - *, - start: tuple[str, datetime, int] | tuple[datetime, int], - limit: int, - order: DatabaseApiCommons.SORT_TYPES, - ) -> database_api.ListVestingDelegationExpirations: - raise NotImplementedError - - @api - def list_vesting_delegations( - self, *, start: tuple[str, str], limit: int, order: DatabaseApiCommons.SORT_TYPES - ) -> database_api.ListVestingDelegations: - raise NotImplementedError - - @api - def list_withdraw_vesting_routes( - self, *, start: tuple[str, str] | tuple[str, int], limit: int, order: DatabaseApiCommons.SORT_TYPES - ) -> database_api.ListWithdrawVestingRoutes: - raise NotImplementedError - - @api - def list_witness_votes( - self, *, start: tuple[str, str], limit: int, order: DatabaseApiCommons.SORT_TYPES - ) -> database_api.ListWitnessVotes: - raise NotImplementedError - - @api - def list_witnesses( - self, *, start: str | tuple[int, str] | tuple[str | int, str], limit: int, order: DatabaseApiCommons.SORT_TYPES - ) -> database_api.ListWitnesses: - raise NotImplementedError - - @api - def verify_account_authority(self, *, account: str, signers: list[str]) -> database_api.VerifyAccountAuthority: - raise NotImplementedError - - @api - def verify_authority( - self, *, trx: Transaction, pack: DatabaseApiCommons.PACK_TYPES = "hf26" - ) -> database_api.VerifyAuthority: - raise NotImplementedError - - @api - def verify_signatures( - self, - *, - hash_: str, - signatures: list[str], - required_owner: list[str], - required_active: list[str], - required_posting: list[str], - required_other: list[str], - ) -> database_api.VerifySignatures: - raise NotImplementedError diff --git a/package/test_tools/__private/hived/common_helpers.py b/package/test_tools/__private/hived/common_helpers.py index ef4a7dc3177b3cf5a91e63d8545e66a3033fbcca..43966ae78ce32c52d428b369b972843742261692 100644 --- a/package/test_tools/__private/hived/common_helpers.py +++ b/package/test_tools/__private/hived/common_helpers.py @@ -1,14 +1,15 @@ from __future__ import annotations +from datetime import datetime from typing import TYPE_CHECKING -from schemas.apis.database_api import GetDynamicGlobalProperties +from database_api.database_api_description import GetDynamicGlobalPropertiesResponse as GetDynamicGlobalProperties if TYPE_CHECKING: - from datetime import datetime from typing import TypeAlias - from schemas.apis.database_api import GetVersion + from database_api.database_api_description import GetVersionResponse as GetVersion + from schemas.fields.basic import AccountName @@ -22,7 +23,10 @@ class HiveHandleCommonHelpers: return dynamic_global_properties.last_irreversible_block_num def _get_head_block_time(self, dynamic_global_properties: GetDynamicGlobalPropertiesT) -> datetime: - return dynamic_global_properties.time + time_value = dynamic_global_properties.time + if isinstance(time_value, str): + return datetime.fromisoformat(time_value.replace("Z", "+00:00")) + return time_value def _get_current_witness(self, dynamic_global_properties: GetDynamicGlobalPropertiesT) -> AccountName: return dynamic_global_properties.current_witness diff --git a/package/test_tools/__private/hived/sync_handle.py b/package/test_tools/__private/hived/sync_handle.py index 6a9e8aabc2fc34f891477e66f9a68e2314a8d11b..7773dc1766c4f9f0eba310a8d35f005faf656def 100644 --- a/package/test_tools/__private/hived/sync_handle.py +++ b/package/test_tools/__private/hived/sync_handle.py @@ -26,7 +26,7 @@ class HivedTemplate( return self._hived_target_service_name() def get_dynamic_global_properties(self) -> HiveHandleCommonHelpers.GetDynamicGlobalPropertiesT: - return self.api.database.get_dynamic_global_properties() + return self.api.database.get_dynamic_global_properties() # type: ignore[no-any-return] def get_last_block_number(self) -> int: return self._get_last_block_number(self.get_dynamic_global_properties()) diff --git a/package/test_tools/__private/init_node.py b/package/test_tools/__private/init_node.py index c5a0c109e1ba32dc17e12b4fafb634fbfcb2e681..bd4380fab3d703cf44f5c7d967f39fdb7bb566a6 100644 --- a/package/test_tools/__private/init_node.py +++ b/package/test_tools/__private/init_node.py @@ -52,4 +52,4 @@ class InitNode(WitnessNode): def __log_vest_price_from_network(self) -> None: dgpo = self.api.wallet_bridge.get_dynamic_global_properties() - self.logger.info(f"new vests price (real): {VestPrice.from_dgpo(dgpo)}") + self.logger.info(f"new vests price (real): {VestPrice.from_dgpo(dgpo)}") # type: ignore[arg-type] diff --git a/package/test_tools/__private/remote_node.py b/package/test_tools/__private/remote_node.py index 1f0a8b0ee51abe56e8c24b975c8972ffaffcf981..7bb9b0e0f6d426282e9349ddd3f9676abf91e65e 100644 --- a/package/test_tools/__private/remote_node.py +++ b/package/test_tools/__private/remote_node.py @@ -7,6 +7,8 @@ from beekeepy.interfaces import HttpUrl, P2PUrl, WsUrl from test_tools.__private.base_node import BaseNode if TYPE_CHECKING: + from database_api.database_api_description import GetVersionResponse + from test_tools.__private.user_handles.handles.node_handles.remote_node_handle import RemoteNodeHandle @@ -23,8 +25,9 @@ class RemoteNode(BaseNode): self.http_endpoint = HttpUrl(http_endpoint, protocol="http") self.__ws_endpoint: WsUrl | None = WsUrl(ws_endpoint, protocol="ws") if ws_endpoint is not None else None - def get_version(self) -> dict[str, str]: - return self.api.database.get_version().dict() + def get_version(self) -> GetVersionResponse: + version: GetVersionResponse = self.api.database.get_version() + return version def get_ws_endpoint(self) -> WsUrl | None: if self.__ws_endpoint is None: diff --git a/package/test_tools/__private/user_handles/handles/node_handles/node_handle_base.py b/package/test_tools/__private/user_handles/handles/node_handles/node_handle_base.py index ed040dce78b5e63d444079f108bcf0f5f525dea6..2d9146eaa671fed248fe2553ed8cb34813b5823c 100644 --- a/package/test_tools/__private/user_handles/handles/node_handles/node_handle_base.py +++ b/package/test_tools/__private/user_handles/handles/node_handles/node_handle_base.py @@ -2,7 +2,7 @@ from __future__ import annotations import math from contextlib import contextmanager -from datetime import timedelta +from datetime import datetime, timedelta from typing import TYPE_CHECKING from test_tools.__private.base_node import BaseNode @@ -11,7 +11,6 @@ from test_tools.__private.user_handles.get_implementation import get_implementat from test_tools.__private.user_handles.handle import Handle if TYPE_CHECKING: - import datetime from collections.abc import Iterator from beekeepy.interfaces import HttpUrl @@ -46,7 +45,7 @@ class NodeHandleBase(Handle): """Returns number of the last irreversible block known to node.""" return self.__implementation.get_last_irreversible_block_number() - def get_head_block_time(self) -> datetime.datetime: + def get_head_block_time(self) -> datetime: """Returns head block time.""" return self.__implementation.get_head_block_time() diff --git a/package/test_tools/__private/vest_price.py b/package/test_tools/__private/vest_price.py index bfb50ff47154f1dd7f1bf2ccedbd65d7db6f6d29..51e53ad783d5fc1bdae5ff0d094e3329b553ad1a 100644 --- a/package/test_tools/__private/vest_price.py +++ b/package/test_tools/__private/vest_price.py @@ -6,7 +6,8 @@ from typing import TYPE_CHECKING from schemas.fields.compound import Price if TYPE_CHECKING: - from schemas.apis.database_api import GetDynamicGlobalProperties + from database_api.database_api_description import GetDynamicGlobalPropertiesResponse as GetDynamicGlobalProperties + from schemas.fields.assets._base import AssetNaiAmount from wax.helpy import Hf26Asset @@ -25,7 +26,7 @@ class VestPrice: @classmethod def from_dgpo(cls, dgpo: GetDynamicGlobalProperties) -> VestPrice: - return cls(quote=dgpo.total_vesting_shares, base=dgpo.total_vesting_fund_hive) + return cls(quote=dgpo.total_vesting_shares, base=dgpo.total_vesting_fund_hive) # type: ignore[arg-type] def as_nai(self) -> dict[str, dict[str, AssetNaiAmount | str]]: return {"quote": self.quote.as_nai(), "base": self.base.as_nai()} diff --git a/package/test_tools/__private/wallet/wallet.py b/package/test_tools/__private/wallet/wallet.py index 2d5af3140b87a7f544e4b4b2d1c2311eb94d7240..3087c6b4ab1468ec7dbcaeac6dc3cfe119865abf 100644 --- a/package/test_tools/__private/wallet/wallet.py +++ b/package/test_tools/__private/wallet/wallet.py @@ -49,6 +49,7 @@ if TYPE_CHECKING: from pathlib import Path from beekeepy import Session, UnlockedWallet + from database_api.database_api_description import GetConfigResponse from schemas.operations import Hf26Operations from test_tools.__private.user_handles.handles.wallet_handle import WalletHandle @@ -109,7 +110,7 @@ class Wallet(UserHandleImplementation, ScopedObject): return self.connected_node def __get_chain_id(self) -> Hex: - node_config = self._force_connected_node.api.database.get_config() + node_config: GetConfigResponse = self._force_connected_node.api.database.get_config() if self.__chain_id != "default": assert self.__chain_id.isdigit(), "Invalid chain_id value: it must be a digit string" chain_id = self.__chain_id[:64] diff --git a/package/test_tools/__private/wallet/wallet_api.py b/package/test_tools/__private/wallet/wallet_api.py index 4045f7fb502edd9c4e3019206b00e5de5bec89ff..1e57d34b5cc4b81ba3b9a37063230ae0b1655e19 100644 --- a/package/test_tools/__private/wallet/wallet_api.py +++ b/package/test_tools/__private/wallet/wallet_api.py @@ -94,8 +94,9 @@ if TYPE_CHECKING: from collections.abc import Callable from beekeepy import UnlockedWallet + from database_api.database_api_description import GetTransactionHexResponse + from database_api.database_api_description import OwnerAuth as OwnerHistoriesFundament - import schemas.apis.database_api.fundaments_of_reponses as fundaments_database_api from schemas.apis.block_api.fundaments_of_responses import Hf26Block from schemas.apis.wallet_bridge_api.response_schemas import ( FindProposals, @@ -1452,7 +1453,7 @@ class Api: @warn_if_only_result_set() def get_owner_history( self, account: AccountNameApiType, as_list: bool = False, only_result: bool | None = None # noqa: ARG002 - ) -> HiveList[fundaments_database_api.OwnerHistoriesFundament] | GetOwnerHistory: + ) -> HiveList[OwnerHistoriesFundament] | GetOwnerHistory: """ Retrieves the owner history for a given account. @@ -1463,7 +1464,7 @@ class Api: """ owner_history = self.__wallet._force_connected_node.api.wallet_bridge.get_owner_history(account) if as_list: - return owner_history.owner_auths + return owner_history.owner_auths # type: ignore[return-value] return owner_history @require_unlocked_wallet @@ -2037,8 +2038,10 @@ class Api: :param only_result: This argument is no longer active and should not be provided. :return: The serialized transaction. """ - transaction_hex = self.__wallet._force_connected_node.api.database.get_transaction_hex(trx=tx) - return transaction_hex.hex_ + transaction_hex: GetTransactionHexResponse = ( + self.__wallet._force_connected_node.api.database.get_transaction_hex(trx=tx) + ) + return transaction_hex.hex @warn_if_only_result_set() def set_password(self, password: str, only_result: bool | None = None) -> None: # noqa: ARG002 diff --git a/pyproject.toml b/pyproject.toml index 67defd8005df52b0765f683d37ee06e7cd622e54..49f1735586ebeb628db8bef3384c124cd8c21cde 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,9 +30,10 @@ msgspec = "^0.20.0" loguru = "0.7.2" # For Python 3.14: Pin exact beekeepy/schemas versions that use msgspec 0.20.0 # These override the transitive dependencies from wax -hiveio-wax = {version = ">=1.28.4rc1.dev60", allow-prereleases = true} +hiveio-wax = {version = ">=1.28.4rc1.dev66", allow-prereleases = true} hiveio-beekeepy = {version = ">=1.28.4.dev7", allow-prereleases = true} hiveio-schemas = {version = ">=1.28.1.dev3", allow-prereleases = true} +hiveio-database-api = {version = ">=1.28.2.dev332", allow-prereleases = true} [tool.poetry.group.dev.dependencies] diff --git a/tests/functional_tests/node_tests/test_node_api_errors.py b/tests/functional_tests/node_tests/test_node_api_errors.py index b048806f4cdee6bc0e184aec69d36c6918aab2dd..d35c1e23bd312a4be4fbabe750bb75a267de605b 100644 --- a/tests/functional_tests/node_tests/test_node_api_errors.py +++ b/tests/functional_tests/node_tests/test_node_api_errors.py @@ -11,4 +11,4 @@ if TYPE_CHECKING: def test_if_raise_when_parameters_are_bad(node: tt.InitNode) -> None: with pytest.raises(ErrorInResponseError): - node.api.database.list_accounts(name=[]) # type: ignore[call-arg] + node.api.database.list_accounts(name=[]) diff --git a/tests/local-tools/local_tools/network.py b/tests/local-tools/local_tools/network.py index 7f58ead74e4a8ac8a77146f299b15e160c4a62cf..96e00adb88f18a55e4ea3eaa181ac9b00314b69a 100644 --- a/tests/local-tools/local_tools/network.py +++ b/tests/local-tools/local_tools/network.py @@ -20,8 +20,8 @@ def get_head_block_number(*, node: AnyNode | None = None, network: tt.Network | _node = network.nodes[0] else: raise ValueError("Either node or network must be provided") - - return _node.api.database.get_dynamic_global_properties().head_block_number + gdgo: int = _node.api.database.get_dynamic_global_properties().head_block_number + return gdgo def get_head_block_numbers_for_networks(networks: Iterable[tt.Network]) -> dict[tt.Network, int]: