From f93c611f6e6aa7cb63f81edc2b4807e42502a3b2 Mon Sep 17 00:00:00 2001 From: YoshihitoAso Date: Fri, 26 Jul 2024 10:07:40 +0900 Subject: [PATCH] Introducing ruff --- .github/workflows/pr.yml | 6 +- .pre-commit-config.yaml | 10 +- Makefile | 12 +- alembic.ini | 12 - app/main.py | 8 +- app/model/__init__.py | 8 +- app/model/db/batch_issue_redeem.py | 4 +- app/model/db/batch_register_personal_info.py | 4 +- app/model/db/bulk_transfer.py | 2 +- app/model/db/idx_issue_redeem.py | 6 +- app/model/db/idx_transfer.py | 4 +- app/model/db/idx_transfer_approval.py | 4 +- app/model/db/ledger_template.py | 4 +- app/model/db/notification.py | 4 +- app/model/db/scheduled_events.py | 4 +- app/model/db/token.py | 4 +- app/model/db/token_holders.py | 4 +- app/model/db/transfer_appoval_history.py | 4 +- app/model/schema/base/base.py | 4 +- app/model/schema/bulk_transfer.py | 2 - app/model/schema/position.py | 6 +- app/model/schema/token.py | 6 +- app/model/schema/transfer.py | 10 +- app/routers/issuer/account.py | 4 +- app/routers/issuer/bond.py | 17 +- app/routers/issuer/settlement_issuer.py | 2 +- app/routers/issuer/share.py | 18 +- app/routers/misc/settlement_agent.py | 1 - app/utils/ledger_utils.py | 7 +- batch/indexer_block_tx_data.py | 2 +- batch/indexer_e2e_messaging.py | 2 +- batch/indexer_token_holders.py | 4 +- .../processor_batch_register_personal_info.py | 14 +- batch/processor_bulk_transfer.py | 2 +- batch/processor_create_utxo.py | 12 +- batch/processor_monitor_block_sync.py | 2 +- batch/processor_scheduled_events.py | 2 +- cmd/explorer/Makefile | 13 +- cmd/explorer/src/gui/consts.py | 6 +- cmd/explorer/src/gui/explorer.py | 8 +- .../src/gui/rendarable/block_detail_info.py | 2 +- cmd/explorer/src/gui/screen/block.py | 34 +- cmd/explorer/src/gui/screen/traceback.py | 7 +- cmd/explorer/src/gui/screen/transaction.py | 14 +- .../src/gui/widget/block_detail_view.py | 6 +- .../src/gui/widget/block_list_table.py | 2 +- .../src/gui/widget/block_list_view.py | 8 +- cmd/explorer/src/gui/widget/menu.py | 5 +- cmd/explorer/src/gui/widget/query_panel.py | 20 +- cmd/explorer/src/gui/widget/traceback.py | 1 + cmd/explorer/src/gui/widget/tx_detail_view.py | 6 +- cmd/explorer/src/gui/widget/tx_list_view.py | 7 +- cmd/explorer/src/main.py | 1 + cmd/settlement/Makefile | 13 +- config.py | 4 +- poetry.lock | 1096 ++++++++--------- pyproject.toml | 43 +- tests/account_config.py | 2 +- tests/app/model/blockchain/test_TokenList.py | 6 +- .../test_exchange_IbetExchangeInterface.py | 2 +- .../test_exchange_IbetSecurityTokenEscrow.py | 2 +- .../model/blockchain/test_token_IbetShare.py | 79 +- .../blockchain/test_token_IbetStraightBond.py | 62 +- ...test_blockchain_explorer_block_data_GET.py | 7 +- .../test_blockchain_explorer_tx_data_GET.py | 7 +- tests/app/test_bond_tokens_POST.py | 17 +- ...bond_tokens_{token_address}_history_GET.py | 14 +- ...kens_{token_address}_personal_info_POST.py | 24 +- ...fer_approvals_{token_address}_{id}_POST.py | 9 +- tests/app/test_e2e_messaging_accounts_POST.py | 36 +- tests/app/test_files_{file_id}_DELETE.py | 2 - .../test_freezelog_CreateFreezeLogAccount.py | 16 +- .../app/test_freezelog_RecordNewFreezeLog.py | 37 +- tests/app/test_freezelog_UpdateFreezeLog.py | 37 +- ...{token_address}_history_{ledger_id}_GET.py | 139 ++- ...test_settlement_dvp_agent_accounts_POST.py | 10 +- ...agent_{exchange_address}_deliveries_GET.py | 1 - ..._dvp_{exchange_address}_deliveries_POST.py | 42 +- ...ge_address}_delivery_{delivery_id}_POST.py | 31 +- tests/app/test_share_tokens_POST.py | 39 +- ...hare_tokens_{token_address}_history_GET.py | 8 +- ...kens_{token_address}_personal_info_POST.py | 24 +- ...fer_approvals_{token_address}_{id}_POST.py | 9 +- tests/app/utils/test_asynccontract_utils.py | 4 +- tests/app/utils/test_contract_utils.py | 2 +- tests/app/utils/test_ledger_utils.py | 4 +- tests/batch/test_indexer_block_tx_data.py | 18 +- tests/batch/test_indexer_delivery.py | 58 +- tests/batch/test_indexer_e2e_messaging.py | 32 +- tests/batch/test_indexer_issue_redeem.py | 24 +- tests/batch/test_indexer_personal_info.py | 24 +- tests/batch/test_indexer_position_bond.py | 24 +- tests/batch/test_indexer_position_share.py | 24 +- tests/batch/test_indexer_token_cache.py | 11 +- tests/batch/test_indexer_token_holders.py | 23 +- tests/batch/test_indexer_transfer.py | 20 +- tests/batch/test_indexer_transfer_approval.py | 33 +- .../test_processor_batch_issue_redeem.py | 17 +- ...test_processor_batch_issue_redeem_v2406.py | 17 +- tests/batch/test_processor_create_utxo.py | 4 +- ..._processor_rotate_e2e_messaging_rsa_key.py | 6 +- tests/batch/test_processor_update_token.py | 496 ++++---- tests/contract_utils.py | 78 +- 103 files changed, 1444 insertions(+), 1654 deletions(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 0c6f5f89..bc0f82e0 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -8,12 +8,12 @@ jobs: steps: - uses: actions/checkout@v4 - uses: ./.github/actions/setup-test-image - lint-black: - name: 'Lint check (black)' + lint-ruff: + name: 'Lint check (ruff)' runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: psf/black@stable + - uses: chartboost/ruff-action@v1 unit-test-postgres: name: 'Unit tests (PostgreSQL)' runs-on: ubuntu-latest diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 08fe14c4..39399dc1 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,8 @@ repos: - - repo: https://github.com/psf/black - rev: 24.4.2 + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.5.4 hooks: - - id: black - language_version: python3.12 + - id: ruff-format + name: ruff-format + entry: make format + language_version: python3.12 \ No newline at end of file diff --git a/Makefile b/Makefile index 5e623c90..a8f22726 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: format isort black doc test test_migrations run +.PHONY: format doc test test_migrations run install: poetry install --no-root --all-extras @@ -7,13 +7,11 @@ install: update: poetry update -format: isort black +format: + poetry run ruff format && poetry run ruff check --fix --select I -isort: - isort . - -black: - black . +lint: + poetry run ruff check --fix doc: poetry run python docs/generate_openapi_doc.py diff --git a/alembic.ini b/alembic.ini index f10a6f04..bc109fcb 100644 --- a/alembic.ini +++ b/alembic.ini @@ -41,18 +41,6 @@ prepend_sys_path = . sqlalchemy.url = driver://user:pass@localhost/dbname - -[post_write_hooks] -# post_write_hooks defines scripts or Python functions that are run -# on newly generated revision scripts. See the documentation for further -# detail and examples - -# format using "black" - use the console_scripts runner, against the "black" entrypoint -# hooks=black -# black.type=console_scripts -# black.entrypoint=black -# black.options=-l 79 - # Logging configuration [loggers] keys = root,sqlalchemy,alembic diff --git a/app/main.py b/app/main.py index 791d2892..64b40564 100644 --- a/app/main.py +++ b/app/main.py @@ -25,9 +25,15 @@ from fastapi.responses import JSONResponse from pydantic import ValidationError from pydantic_core import ArgsKwargs, ErrorDetails +from starlette import status from starlette.exceptions import HTTPException as StarletteHTTPException -from app.exceptions import * +from app.exceptions import ( + AuthorizationError, + BadRequestError, + ContractRevertError, + ServiceUnavailableError, +) from app.log import output_access_log from app.routers.issuer import ( account, diff --git a/app/model/__init__.py b/app/model/__init__.py index 3684b4dd..149e2d03 100644 --- a/app/model/__init__.py +++ b/app/model/__init__.py @@ -31,7 +31,7 @@ def ethereum_address_validator( """Validator for ethereum address""" if value is not None: if not isinstance(value, str): - raise ValueError(f"value must be of string") + raise ValueError("value must be of string") if not Web3.is_address(value): raise ValueError("invalid ethereum address") return value @@ -51,14 +51,14 @@ def datetime_string_validator( datetime_format = "%Y-%m-%d %H:%M:%S" if not isinstance(value, str): - raise ValueError(f"value must be of string datetime format") + raise ValueError("value must be of string datetime format") try: converted = datetime.strptime(value, datetime_format) if value != converted.strftime(datetime_format): - raise ValueError(f"value must be string datetime format") + raise ValueError("value must be string datetime format") except ValueError: - raise ValueError(f"value must be of string datetime format") + raise ValueError("value must be of string datetime format") return value diff --git a/app/model/db/batch_issue_redeem.py b/app/model/db/batch_issue_redeem.py index 85c60772..13dd3241 100644 --- a/app/model/db/batch_issue_redeem.py +++ b/app/model/db/batch_issue_redeem.py @@ -17,7 +17,7 @@ SPDX-License-Identifier: Apache-2.0 """ -from enum import Enum +from enum import StrEnum from sqlalchemy import BigInteger, Boolean, Integer, String from sqlalchemy.orm import Mapped, mapped_column @@ -44,7 +44,7 @@ class BatchIssueRedeemUpload(Base): processed: Mapped[bool | None] = mapped_column(Boolean, default=False, index=True) -class BatchIssueRedeemProcessingCategory(str, Enum): +class BatchIssueRedeemProcessingCategory(StrEnum): """Batch Issue/Redeem Category""" ISSUE = "Issue" diff --git a/app/model/db/batch_register_personal_info.py b/app/model/db/batch_register_personal_info.py index 3a60d4b1..672665f0 100644 --- a/app/model/db/batch_register_personal_info.py +++ b/app/model/db/batch_register_personal_info.py @@ -17,7 +17,7 @@ SPDX-License-Identifier: Apache-2.0 """ -from enum import Enum +from enum import StrEnum from sqlalchemy import JSON, Integer, String from sqlalchemy.ext.hybrid import hybrid_property @@ -39,7 +39,7 @@ class BatchRegisterPersonalInfoUpload(Base): status: Mapped[str] = mapped_column(String, nullable=False, index=True) -class BatchRegisterPersonalInfoUploadStatus(str, Enum): +class BatchRegisterPersonalInfoUploadStatus(StrEnum): """Batch Register PersonalInfo Upload Status""" PENDING = "pending" diff --git a/app/model/db/bulk_transfer.py b/app/model/db/bulk_transfer.py index 44c8f0f3..9b6eb858 100644 --- a/app/model/db/bulk_transfer.py +++ b/app/model/db/bulk_transfer.py @@ -17,7 +17,7 @@ SPDX-License-Identifier: Apache-2.0 """ -from sqlalchemy import BigInteger, Boolean, Integer, String +from sqlalchemy import BigInteger, Integer, String from sqlalchemy.orm import Mapped, mapped_column from .base import Base diff --git a/app/model/db/idx_issue_redeem.py b/app/model/db/idx_issue_redeem.py index df0d33be..8b4968f5 100644 --- a/app/model/db/idx_issue_redeem.py +++ b/app/model/db/idx_issue_redeem.py @@ -18,7 +18,7 @@ """ from datetime import datetime -from enum import Enum +from enum import StrEnum from sqlalchemy import BigInteger, DateTime, String from sqlalchemy.orm import Mapped, mapped_column @@ -48,14 +48,14 @@ class IDXIssueRedeem(Base): block_timestamp: Mapped[datetime | None] = mapped_column(DateTime) -class IDXIssueRedeemEventType(str, Enum): +class IDXIssueRedeemEventType(StrEnum): """Issue/Redeem event type""" ISSUE = "Issue" REDEEM = "Redeem" -class IDXIssueRedeemSortItem(str, Enum): +class IDXIssueRedeemSortItem(StrEnum): """Issue/Redeem sort item""" BLOCK_TIMESTAMP = "block_timestamp" diff --git a/app/model/db/idx_transfer.py b/app/model/db/idx_transfer.py index 0098ea69..17edf776 100644 --- a/app/model/db/idx_transfer.py +++ b/app/model/db/idx_transfer.py @@ -18,7 +18,7 @@ """ from datetime import datetime -from enum import Enum +from enum import StrEnum from sqlalchemy import JSON, BigInteger, DateTime, String from sqlalchemy.orm import Mapped, mapped_column @@ -26,7 +26,7 @@ from .base import Base -class IDXTransferSourceEventType(str, Enum): +class IDXTransferSourceEventType(StrEnum): """Transfer source event type""" TRANSFER = "Transfer" diff --git a/app/model/db/idx_transfer_approval.py b/app/model/db/idx_transfer_approval.py index 56169722..2c0f5ed1 100644 --- a/app/model/db/idx_transfer_approval.py +++ b/app/model/db/idx_transfer_approval.py @@ -18,7 +18,7 @@ """ from datetime import datetime -from enum import Enum +from enum import StrEnum from sqlalchemy import BigInteger, Boolean, DateTime, String from sqlalchemy.orm import Mapped, mapped_column @@ -85,7 +85,7 @@ def json(self): } -class IDXTransferApprovalsSortItem(str, Enum): +class IDXTransferApprovalsSortItem(StrEnum): ID = "id" EXCHANGE_ADDRESS = "exchange_address" APPLICATION_ID = "application_id" diff --git a/app/model/db/ledger_template.py b/app/model/db/ledger_template.py index 24557b38..cfd70b77 100644 --- a/app/model/db/ledger_template.py +++ b/app/model/db/ledger_template.py @@ -17,7 +17,7 @@ SPDX-License-Identifier: Apache-2.0 """ -from enum import Enum +from enum import StrEnum from sqlalchemy import JSON, Integer, String from sqlalchemy.orm import Mapped, mapped_column @@ -66,6 +66,6 @@ class LedgerDetailsTemplate(Base): data_source: Mapped[str | None] = mapped_column(String(42)) -class LedgerDetailsDataType(str, Enum): +class LedgerDetailsDataType(StrEnum): IBET_FIN = "ibetfin" DB = "db" diff --git a/app/model/db/notification.py b/app/model/db/notification.py index f3995ea7..7dec5d2a 100644 --- a/app/model/db/notification.py +++ b/app/model/db/notification.py @@ -17,7 +17,7 @@ SPDX-License-Identifier: Apache-2.0 """ -from enum import Enum +from enum import StrEnum from sqlalchemy import JSON, Integer, String from sqlalchemy.orm import Mapped, mapped_column @@ -92,7 +92,7 @@ class Notification(Base): metainfo: Mapped[dict | None] = mapped_column(JSON) -class NotificationType(str, Enum): +class NotificationType(StrEnum): ISSUE_ERROR = "IssueError" BULK_TRANSFER_ERROR = "BulkTransferError" BATCH_REGISTER_PERSONAL_INFO_ERROR = "BatchRegisterPersonalInfoError" diff --git a/app/model/db/scheduled_events.py b/app/model/db/scheduled_events.py index d30ced74..39b16c0e 100644 --- a/app/model/db/scheduled_events.py +++ b/app/model/db/scheduled_events.py @@ -15,7 +15,7 @@ # # SPDX-License-Identifier: Apache-2.0 from datetime import datetime -from enum import Enum +from enum import StrEnum from sqlalchemy import JSON, DateTime, Integer, String from sqlalchemy.orm import Mapped, mapped_column @@ -48,5 +48,5 @@ class ScheduledEvents(Base): data: Mapped[dict] = mapped_column(JSON, nullable=False) -class ScheduledEventType(str, Enum): +class ScheduledEventType(StrEnum): UPDATE = "Update" diff --git a/app/model/db/token.py b/app/model/db/token.py index 005302fe..bf66ec16 100644 --- a/app/model/db/token.py +++ b/app/model/db/token.py @@ -18,7 +18,7 @@ """ from datetime import datetime -from enum import Enum, StrEnum +from enum import StrEnum from sqlalchemy import JSON, Boolean, DateTime, Integer, String from sqlalchemy.orm import Mapped, mapped_column @@ -26,7 +26,7 @@ from .base import Base, naive_utcnow -class TokenType(str, Enum): +class TokenType(StrEnum): IBET_STRAIGHT_BOND = "IbetStraightBond" IBET_SHARE = "IbetShare" diff --git a/app/model/db/token_holders.py b/app/model/db/token_holders.py index eb51dd3a..9f487343 100644 --- a/app/model/db/token_holders.py +++ b/app/model/db/token_holders.py @@ -17,7 +17,7 @@ SPDX-License-Identifier: Apache-2.0 """ -from enum import Enum +from enum import StrEnum from sqlalchemy import BigInteger, String from sqlalchemy.orm import Mapped, mapped_column @@ -41,7 +41,7 @@ class TokenHoldersList(Base): batch_status: Mapped[str | None] = mapped_column(String(256)) -class TokenHolderBatchStatus(str, Enum): +class TokenHolderBatchStatus(StrEnum): PENDING = "pending" DONE = "done" FAILED = "failed" diff --git a/app/model/db/transfer_appoval_history.py b/app/model/db/transfer_appoval_history.py index 5fa6c367..db32bba8 100644 --- a/app/model/db/transfer_appoval_history.py +++ b/app/model/db/transfer_appoval_history.py @@ -17,7 +17,7 @@ SPDX-License-Identifier: Apache-2.0 """ -from enum import Enum +from enum import StrEnum from typing import Optional from sqlalchemy import JSON, BigInteger, String @@ -59,6 +59,6 @@ def json(self): } -class TransferApprovalOperationType(str, Enum): +class TransferApprovalOperationType(StrEnum): APPROVE = "approve" CANCEL = "cancel" diff --git a/app/model/schema/base/base.py b/app/model/schema/base/base.py index f6652e4e..8c0da4cc 100644 --- a/app/model/schema/base/base.py +++ b/app/model/schema/base/base.py @@ -17,7 +17,7 @@ SPDX-License-Identifier: Apache-2.0 """ -from enum import Enum, IntEnum, StrEnum +from enum import IntEnum, StrEnum from typing import Literal, Optional from pydantic import BaseModel, Field, StringConstraints @@ -53,7 +53,7 @@ class IbetShareContractVersion(StrEnum): EMPTY_str = Literal[""] -class TokenType(str, Enum): +class TokenType(StrEnum): IBET_STRAIGHT_BOND = "IbetStraightBond" IBET_SHARE = "IbetShare" diff --git a/app/model/schema/bulk_transfer.py b/app/model/schema/bulk_transfer.py index 16513268..8cb898c1 100644 --- a/app/model/schema/bulk_transfer.py +++ b/app/model/schema/bulk_transfer.py @@ -17,8 +17,6 @@ SPDX-License-Identifier: Apache-2.0 """ -from typing import Optional - from pydantic import BaseModel, Field from .base import TokenType diff --git a/app/model/schema/position.py b/app/model/schema/position.py index f00ffddc..00819c7b 100644 --- a/app/model/schema/position.py +++ b/app/model/schema/position.py @@ -17,7 +17,7 @@ SPDX-License-Identifier: Apache-2.0 """ -from enum import Enum +from enum import StrEnum from typing import Annotated, List, Optional from fastapi import Query @@ -58,7 +58,7 @@ class LockedPosition(BaseModel): locked: int = Field(description="Locked amount") -class LockEventCategory(str, Enum): +class LockEventCategory(StrEnum): Lock = "Lock" Unlock = "Unlock" @@ -88,7 +88,7 @@ class LockEvent(BaseModel): ############################ -class ListAllLockEventsSortItem(str, Enum): +class ListAllLockEventsSortItem(StrEnum): token_address = "token_address" lock_address = "lock_address" recipient_address = "recipient_address" diff --git a/app/model/schema/token.py b/app/model/schema/token.py index 0f4a47c8..10222c78 100644 --- a/app/model/schema/token.py +++ b/app/model/schema/token.py @@ -20,7 +20,7 @@ import math from datetime import datetime from decimal import Decimal -from enum import Enum, StrEnum +from enum import StrEnum from typing import Annotated, Optional, Self from fastapi import Query @@ -304,7 +304,7 @@ class IbetShareRedeem(BaseModel): amount: int = Field(..., ge=1, le=1_000_000_000_000) -class IssueRedeemSortItem(str, Enum): +class IssueRedeemSortItem(StrEnum): """Issue/Redeem sort item""" BLOCK_TIMESTAMP = "block_timestamp" @@ -423,7 +423,7 @@ class ListAllHoldersQuery: limit: Annotated[Optional[int], Query(description="Number of set", ge=0)] = None -class ListAllTokenLockEventsSortItem(str, Enum): +class ListAllTokenLockEventsSortItem(StrEnum): account_address = "account_address" lock_address = "lock_address" recipient_address = "recipient_address" diff --git a/app/model/schema/transfer.py b/app/model/schema/transfer.py index 203811ea..89d0a168 100644 --- a/app/model/schema/transfer.py +++ b/app/model/schema/transfer.py @@ -18,7 +18,7 @@ """ from datetime import datetime -from enum import Enum, IntEnum +from enum import IntEnum, StrEnum from typing import Annotated, List, Optional from fastapi import Query @@ -35,7 +35,7 @@ ############################ -class TransferSourceEventType(str, Enum): +class TransferSourceEventType(StrEnum): Transfer = "Transfer" Unlock = "Unlock" @@ -52,7 +52,7 @@ class TransferApprovalStatus(IntEnum): ############################ -class ListTransferHistorySortItem(str, Enum): +class ListTransferHistorySortItem(StrEnum): BLOCK_TIMESTAMP = "block_timestamp" FROM_ADDRESS = "from_address" TO_ADDRESS = "to_address" @@ -107,7 +107,7 @@ class ListTransferHistoryQuery: ) -class UpdateTransferApprovalOperationType(str, Enum): +class UpdateTransferApprovalOperationType(StrEnum): APPROVE = "approve" CANCEL = "cancel" @@ -118,7 +118,7 @@ class UpdateTransferApprovalRequest(BaseModel): operation_type: UpdateTransferApprovalOperationType = Field(...) -class ListTransferApprovalHistorySortItem(str, Enum): +class ListTransferApprovalHistorySortItem(StrEnum): ID = "id" EXCHANGE_ADDRESS = "exchange_address" APPLICATION_ID = "application_id" diff --git a/app/routers/issuer/account.py b/app/routers/issuer/account.py index 35b98cf9..b573f4f5 100644 --- a/app/routers/issuer/account.py +++ b/app/routers/issuer/account.py @@ -441,7 +441,7 @@ async def create_auth_token( ) # Authentication - issuer_account, _ = await check_auth( + await check_auth( request=request, db=db, issuer_address=issuer_address, @@ -524,7 +524,7 @@ async def delete_auth_token( ) # Authentication - issuer_account, _ = await check_auth( + await check_auth( request=request, db=db, issuer_address=issuer_address, diff --git a/app/routers/issuer/bond.py b/app/routers/issuer/bond.py index 32194f48..270f2fca 100644 --- a/app/routers/issuer/bond.py +++ b/app/routers/issuer/bond.py @@ -148,7 +148,6 @@ ScheduledEventIdResponse, ScheduledEventResponse, TokenAddressResponse, - TokenUpdateOperationCategory, TransferApprovalHistoryResponse, TransferApprovalsResponse, TransferApprovalTokenDetailResponse, @@ -1954,7 +1953,7 @@ async def list_all_holders( _holders: Sequence[ tuple[IDXPosition, int, IDXPersonalInfo | None, datetime | None] - ] = ((await db.execute(stmt)).tuples().all()) + ] = (await db.execute(stmt)).tuples().all() personal_info_default = { "key_manager": None, @@ -3568,14 +3567,12 @@ async def update_transfer_approval( "data": now, } try: - _, tx_receipt = await IbetStraightBondContract( - token_address - ).approve_transfer( + await IbetStraightBondContract(token_address).approve_transfer( data=ApproveTransferParams(**_data), tx_from=issuer_address, private_key=private_key, ) - except ContractRevertError as approve_transfer_err: + except ContractRevertError: # If approveTransfer end with revert, # cancelTransfer should be performed immediately. # After cancelTransfer, ContractRevertError is returned. @@ -3585,7 +3582,7 @@ async def update_transfer_approval( tx_from=issuer_address, private_key=private_key, ) - except ContractRevertError as cancel_transfer_err: + except ContractRevertError: raise except Exception: raise SendTransactionError @@ -3595,7 +3592,7 @@ async def update_transfer_approval( _data = {"escrow_id": _transfer_approval.application_id, "data": now} escrow = IbetSecurityTokenEscrow(_transfer_approval.exchange_address) try: - _, tx_receipt = await escrow.approve_transfer( + await escrow.approve_transfer( data=EscrowApproveTransferParams(**_data), tx_from=issuer_address, private_key=private_key, @@ -3608,9 +3605,7 @@ async def update_transfer_approval( else: # CANCEL _data = {"application_id": _transfer_approval.application_id, "data": now} try: - _, tx_receipt = await IbetStraightBondContract( - token_address - ).cancel_transfer( + await IbetStraightBondContract(token_address).cancel_transfer( data=CancelTransferParams(**_data), tx_from=issuer_address, private_key=private_key, diff --git a/app/routers/issuer/settlement_issuer.py b/app/routers/issuer/settlement_issuer.py index 63523692..eca37b3b 100644 --- a/app/routers/issuer/settlement_issuer.py +++ b/app/routers/issuer/settlement_issuer.py @@ -141,7 +141,7 @@ async def list_all_dvp_deliveries( _deliveries: Sequence[ tuple[IDXDelivery, IDXPersonalInfo | None, IDXPersonalInfo | None] - ] = ((await db.execute(stmt)).tuples().all()) + ] = (await db.execute(stmt)).tuples().all() deliveries = [] for _delivery, _buyer_info, _seller_info in _deliveries: diff --git a/app/routers/issuer/share.py b/app/routers/issuer/share.py index f32659d6..1f019a04 100644 --- a/app/routers/issuer/share.py +++ b/app/routers/issuer/share.py @@ -149,7 +149,6 @@ ScheduledEventIdResponse, ScheduledEventResponse, TokenAddressResponse, - TokenUpdateOperationCategory, TransferApprovalHistoryResponse, TransferApprovalsResponse, TransferApprovalTokenDetailResponse, @@ -244,7 +243,7 @@ async def issue_token( contract_address, abi, tx_hash = await IbetShareContract().create( args=arguments, tx_from=issuer_address, private_key=private_key ) - except SendTransactionError as e: + except SendTransactionError: raise SendTransactionError("failed to send transaction") # Check need update @@ -1207,7 +1206,6 @@ async def list_all_redeem_upload( get_query: ListAllRedeemUploadQuery = Depends(), issuer_address: Optional[str] = Header(None), ): - # Get a list of uploads stmt = select(BatchIssueRedeemUpload).where( and_( @@ -1917,7 +1915,7 @@ async def list_all_holders( _holders: Sequence[ tuple[IDXPosition, int, IDXPersonalInfo | None, datetime | None] - ] = ((await db.execute(stmt)).tuples().all()) + ] = (await db.execute(stmt)).tuples().all() personal_info_default = { "key_manager": None, @@ -3533,14 +3531,12 @@ async def update_transfer_approval( "data": now, } try: - _, tx_receipt = await IbetShareContract( - token_address - ).approve_transfer( + await IbetShareContract(token_address).approve_transfer( data=ApproveTransferParams(**_data), tx_from=issuer_address, private_key=private_key, ) - except ContractRevertError as approve_transfer_err: + except ContractRevertError: # If approveTransfer end with revert, # cancelTransfer should be performed immediately. # After cancelTransfer, ContractRevertError is returned. @@ -3550,7 +3546,7 @@ async def update_transfer_approval( tx_from=issuer_address, private_key=private_key, ) - except ContractRevertError as cancel_transfer_err: + except ContractRevertError: raise except Exception: raise SendTransactionError @@ -3560,7 +3556,7 @@ async def update_transfer_approval( _data = {"escrow_id": _transfer_approval.application_id, "data": now} escrow = IbetSecurityTokenEscrow(_transfer_approval.exchange_address) try: - _, tx_receipt = await escrow.approve_transfer( + await escrow.approve_transfer( data=EscrowApproveTransferParams(**_data), tx_from=issuer_address, private_key=private_key, @@ -3573,7 +3569,7 @@ async def update_transfer_approval( else: # CANCEL _data = {"application_id": _transfer_approval.application_id, "data": now} try: - _, tx_receipt = await IbetShareContract(token_address).cancel_transfer( + await IbetShareContract(token_address).cancel_transfer( data=CancelTransferParams(**_data), tx_from=issuer_address, private_key=private_key, diff --git a/app/routers/misc/settlement_agent.py b/app/routers/misc/settlement_agent.py index eb047aea..701576b7 100644 --- a/app/routers/misc/settlement_agent.py +++ b/app/routers/misc/settlement_agent.py @@ -49,7 +49,6 @@ ListAllDVPAgentAccountResponse, ListAllDVPAgentDeliveriesQuery, ListAllDVPAgentDeliveriesResponse, - ListAllDVPDeliveriesResponse, ) from app.utils.docs_utils import get_routers_responses from app.utils.e2ee_utils import E2EEUtils diff --git a/app/utils/ledger_utils.py b/app/utils/ledger_utils.py index 79f87bf1..e74c2461 100644 --- a/app/utils/ledger_utils.py +++ b/app/utils/ledger_utils.py @@ -191,9 +191,10 @@ async def __get_details_data_list( # NOTE: # If there is an account with no personal information registered, # some_personal_info_not_registered will be True. - data_list, some_personal_info_not_registered = ( - await __get_details_data_list_from_ibetfin(token_address, token_type, db) - ) + ( + data_list, + some_personal_info_not_registered, + ) = await __get_details_data_list_from_ibetfin(token_address, token_type, db) return data_list, some_personal_info_not_registered diff --git a/batch/indexer_block_tx_data.py b/batch/indexer_block_tx_data.py index 7d432bfe..488367b8 100644 --- a/batch/indexer_block_tx_data.py +++ b/batch/indexer_block_tx_data.py @@ -119,7 +119,7 @@ async def process(self): await self.__set_indexed_block_number(local_session, block_number) await local_session.commit() - except Exception as e: + except Exception: await local_session.rollback() raise finally: diff --git a/batch/indexer_e2e_messaging.py b/batch/indexer_e2e_messaging.py index ae8e1d09..9cf4cbe0 100644 --- a/batch/indexer_e2e_messaging.py +++ b/batch/indexer_e2e_messaging.py @@ -212,7 +212,7 @@ async def __sync_message( message=message, block_timestamp=block_timestamp, ) - except Exception as e: + except Exception: raise @staticmethod diff --git a/batch/indexer_token_holders.py b/batch/indexer_token_holders.py index f022ca1e..9e919eb9 100644 --- a/batch/indexer_token_holders.py +++ b/batch/indexer_token_holders.py @@ -185,10 +185,10 @@ async def collect(self): local_session = self.__get_db_session() try: if not (await self.__load_target(local_session)): - LOG.debug(f"There are no pending collect batch") + LOG.debug("There are no pending collect batch") return if not (await self.__load_token_info(local_session)): - LOG.debug(f"Token contract must be listed to TokenList contract.") + LOG.debug("Token contract must be listed to TokenList contract.") await self.__update_status(local_session, TokenHolderBatchStatus.FAILED) await local_session.commit() return diff --git a/batch/processor_batch_register_personal_info.py b/batch/processor_batch_register_personal_info.py index b3783413..5a050c01 100644 --- a/batch/processor_batch_register_personal_info.py +++ b/batch/processor_batch_register_personal_info.py @@ -86,9 +86,9 @@ def __init__(self, worker_num, is_shutdown: Event): async def process(self): db_session: AsyncSession = BatchAsyncSessionLocal() try: - upload_list: list[BatchRegisterPersonalInfoUpload] = ( - await self.__get_uploads(db_session=db_session) - ) + upload_list: list[ + BatchRegisterPersonalInfoUpload + ] = await self.__get_uploads(db_session=db_session) if len(upload_list) < 1: return @@ -352,9 +352,9 @@ async def __get_uploads( processing_issuer[self.worker_num] = {} for upload in upload_list: - processing_issuer[self.worker_num][ - upload.upload_id - ] = upload.issuer_address + processing_issuer[self.worker_num][upload.upload_id] = ( + upload.issuer_address + ) return upload_list @staticmethod @@ -468,7 +468,7 @@ async def main(): finally: # Ensure that all workers is shutdown await asyncio.gather(*workers) - LOG.info(f"Service is shutdown") + LOG.info("Service is shutdown") if __name__ == "__main__": diff --git a/batch/processor_bulk_transfer.py b/batch/processor_bulk_transfer.py index 1fb56442..76445e09 100644 --- a/batch/processor_bulk_transfer.py +++ b/batch/processor_bulk_transfer.py @@ -598,7 +598,7 @@ async def main(): finally: # Ensure that all workers is shutdown await asyncio.gather(*workers) - LOG.info(f"Service is shutdown") + LOG.info("Service is shutdown") if __name__ == "__main__": diff --git a/batch/processor_create_utxo.py b/batch/processor_create_utxo.py index c4ee4989..8dafc24c 100644 --- a/batch/processor_create_utxo.py +++ b/batch/processor_create_utxo.py @@ -300,9 +300,7 @@ async def __process_transfer( block_number = event["block_number"] block_timestamp = datetime.fromtimestamp( (await web3.eth.get_block(block_number))["timestamp"], UTC - ).replace( - tzinfo=None - ) # UTC + ).replace(tzinfo=None) # UTC if amount is not None and amount <= sys.maxsize: event_triggered = True @@ -374,9 +372,7 @@ async def __process_issue( block_number = event["blockNumber"] block_timestamp = datetime.fromtimestamp( (await web3.eth.get_block(block_number))["timestamp"], UTC - ).replace( - tzinfo=None - ) # UTC + ).replace(tzinfo=None) # UTC if amount is not None and amount <= sys.maxsize: event_triggered = True @@ -436,9 +432,7 @@ async def __process_redeem( block_number = event["blockNumber"] block_timestamp = datetime.fromtimestamp( (await web3.eth.get_block(block_number))["timestamp"], UTC - ).replace( - tzinfo=None - ) # UTC + ).replace(tzinfo=None) # UTC if amount is not None and amount <= sys.maxsize: event_triggered = True diff --git a/batch/processor_monitor_block_sync.py b/batch/processor_monitor_block_sync.py index 754726be..c76ea55a 100644 --- a/batch/processor_monitor_block_sync.py +++ b/batch/processor_monitor_block_sync.py @@ -25,7 +25,7 @@ from sqlalchemy import delete, select from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.ext.asyncio import AsyncSession -from web3 import AsyncHTTPProvider, AsyncWeb3, Web3 +from web3 import AsyncHTTPProvider, AsyncWeb3 from web3.middleware import ExtraDataToPOAMiddleware from app.database import BatchAsyncSessionLocal diff --git a/batch/processor_scheduled_events.py b/batch/processor_scheduled_events.py index a931d8c9..2aa07210 100644 --- a/batch/processor_scheduled_events.py +++ b/batch/processor_scheduled_events.py @@ -380,7 +380,7 @@ async def main(): finally: # Ensure that all workers is shutdown await asyncio.gather(*workers) - LOG.info(f"Service is shutdown") + LOG.info("Service is shutdown") if __name__ == "__main__": diff --git a/cmd/explorer/Makefile b/cmd/explorer/Makefile index 7fe492ed..33d2edc8 100644 --- a/cmd/explorer/Makefile +++ b/cmd/explorer/Makefile @@ -1,15 +1,4 @@ -.PHONY: isort black test run - -format: isort black - -isort: - isort src/. - -black: - poetry run black src - -test: - pytest . +.PHONY: console dev run console: textual console diff --git a/cmd/explorer/src/gui/consts.py b/cmd/explorer/src/gui/consts.py index 0a4f9487..5cfef5a1 100644 --- a/cmd/explorer/src/gui/consts.py +++ b/cmd/explorer/src/gui/consts.py @@ -23,9 +23,9 @@ DOWN = "\u2193" LEFT = "\u2190" RIGHT = "\u2192" -RIGHT_TRIANGLE = "\u25B6" -BIG_RIGHT_TRIANGLE = "\uE0B0" -DOWN_TRIANGLE = "\u25BC" +RIGHT_TRIANGLE = "\u25b6" +BIG_RIGHT_TRIANGLE = "\ue0b0" +DOWN_TRIANGLE = "\u25bc" THINKING_FACE = ":thinking_face:" FIRE = ":fire:" diff --git a/cmd/explorer/src/gui/explorer.py b/cmd/explorer/src/gui/explorer.py index 04b836af..2c1afce8 100644 --- a/cmd/explorer/src/gui/explorer.py +++ b/cmd/explorer/src/gui/explorer.py @@ -20,15 +20,15 @@ import os from pydantic import ValidationError +from textual.app import App, ReturnType +from textual.binding import Binding + +from app.model.schema import ListBlockDataQuery, ListTxDataQuery from src.connector import ApiNotEnabledException from src.gui.error import Error from src.gui.screen.block import BlockScreen from src.gui.screen.traceback import TracebackScreen from src.gui.screen.transaction import TransactionScreen -from textual.app import App, ReturnType -from textual.binding import Binding - -from app.model.schema import ListBlockDataQuery, ListTxDataQuery class AppState: diff --git a/cmd/explorer/src/gui/rendarable/block_detail_info.py b/cmd/explorer/src/gui/rendarable/block_detail_info.py index ce50c7b9..c51b7098 100644 --- a/cmd/explorer/src/gui/rendarable/block_detail_info.py +++ b/cmd/explorer/src/gui/rendarable/block_detail_info.py @@ -24,9 +24,9 @@ from rich.progress_bar import ProgressBar from rich.table import Table from rich.text import Text -from src.utils.time import human_time, unix_to_iso from app.model.schema import BlockDataDetail +from src.utils.time import human_time, unix_to_iso class BlockDetailInfo: diff --git a/cmd/explorer/src/gui/screen/block.py b/cmd/explorer/src/gui/screen/block.py index 4bfda81b..a9b4c751 100644 --- a/cmd/explorer/src/gui/screen/block.py +++ b/cmd/explorer/src/gui/screen/block.py @@ -24,19 +24,6 @@ from aiohttp import ClientSession, ClientTimeout, TCPConnector from rich.text import Text -from src import connector -from src.gui.consts import ID -from src.gui.error import Error -from src.gui.screen.base import TuiScreen -from src.gui.widget.block_detail_view import BlockDetailView -from src.gui.widget.block_list_table import BlockListTable -from src.gui.widget.block_list_view import ( - BlockListQueryPanel, - BlockListSummaryPanel, - BlockListView, -) -from src.gui.widget.menu import Menu, MenuInstruction -from src.gui.widget.query_panel import QuerySetting from textual.app import ComposeResult from textual.binding import Binding from textual.containers import Horizontal, Vertical @@ -51,6 +38,19 @@ ListTxDataQuery, ) from app.model.schema.base import SortOrder +from src import connector +from src.gui.consts import ID +from src.gui.error import Error +from src.gui.screen.base import TuiScreen +from src.gui.widget.block_detail_view import BlockDetailView +from src.gui.widget.block_list_table import BlockListTable +from src.gui.widget.block_list_view import ( + BlockListQueryPanel, + BlockListSummaryPanel, + BlockListView, +) +from src.gui.widget.menu import Menu, MenuInstruction +from src.gui.widget.query_panel import QuerySetting class BlockScreen(TuiScreen): @@ -172,9 +172,9 @@ def reload_block(self) -> None: ): return - self.query_one(BlockListQueryPanel).block_list_query = ( - self.tui.state.block_list_query - ) + self.query_one( + BlockListQueryPanel + ).block_list_query = self.tui.state.block_list_query asyncio.create_task(self.fetch_block_list()) ################################################## @@ -285,5 +285,5 @@ def update_is_synced(self, is_synced: bool): f"Is Synced: {is_synced}" ) self.query_one(f"#{ID.BLOCK_NOTION}", Static).update( - f"Press [E] To Load Block List" + "Press [E] To Load Block List" ) diff --git a/cmd/explorer/src/gui/screen/traceback.py b/cmd/explorer/src/gui/screen/traceback.py index 3238a77d..390bfbbc 100644 --- a/cmd/explorer/src/gui/screen/traceback.py +++ b/cmd/explorer/src/gui/screen/traceback.py @@ -17,13 +17,14 @@ SPDX-License-Identifier: Apache-2.0 """ -from src.gui.screen.base import TuiScreen -from src.gui.widget.block_list_table import BlockListTable -from src.gui.widget.traceback import TracebackWidget from textual.app import ComposeResult from textual.binding import Binding from textual.widgets import Footer +from src.gui.screen.base import TuiScreen +from src.gui.widget.block_list_table import BlockListTable +from src.gui.widget.traceback import TracebackWidget + class TracebackScreen(TuiScreen): BINDINGS = [Binding("q,enter,space", "quit", "Close", priority=True)] diff --git a/cmd/explorer/src/gui/screen/transaction.py b/cmd/explorer/src/gui/screen/transaction.py index 257aba55..05017a29 100644 --- a/cmd/explorer/src/gui/screen/transaction.py +++ b/cmd/explorer/src/gui/screen/transaction.py @@ -19,6 +19,12 @@ from aiohttp import ClientSession, ClientTimeout, TCPConnector from rich.text import Text +from textual.app import ComposeResult +from textual.binding import Binding +from textual.containers import Horizontal, Vertical +from textual.widgets import DataTable, Footer, Label + +from app.model.schema.bc_explorer import TxDataDetail from src import connector from src.gui.consts import ID from src.gui.screen.base import TuiScreen @@ -26,12 +32,6 @@ from src.gui.widget.tx_detail_view import TxDetailView from src.gui.widget.tx_list_table import TxListTable from src.gui.widget.tx_list_view import TxListView -from textual.app import ComposeResult -from textual.binding import Binding -from textual.containers import Horizontal, Vertical -from textual.widgets import DataTable, Footer, Label - -from app.model.schema.bc_explorer import TxDataDetail class TransactionScreen(TuiScreen): @@ -43,7 +43,7 @@ def compose(self) -> ComposeResult: Horizontal( Label(Text.from_markup(" [bold]ibet-Prime BC Explorer[/bold]")), Label(" | "), - Label(f"Selected block: -", id=ID.TX_SELECTED_BLOCK_NUMBER), + Label("Selected block: -", id=ID.TX_SELECTED_BLOCK_NUMBER), id="tx_list_header", ), Horizontal( diff --git a/cmd/explorer/src/gui/widget/block_detail_view.py b/cmd/explorer/src/gui/widget/block_detail_view.py index 23e4fb4e..cdc33de8 100644 --- a/cmd/explorer/src/gui/widget/block_detail_view.py +++ b/cmd/explorer/src/gui/widget/block_detail_view.py @@ -22,12 +22,12 @@ from rich.align import Align from rich.panel import Panel from rich.style import Style -from src.gui import styles -from src.gui.rendarable.block_detail_info import BlockDetailInfo -from src.gui.widget.base import TuiWidget from textual.reactive import Reactive, reactive from app.model.schema import BlockDataDetail +from src.gui import styles +from src.gui.rendarable.block_detail_info import BlockDetailInfo +from src.gui.widget.base import TuiWidget class BlockDetailView(TuiWidget): diff --git a/cmd/explorer/src/gui/widget/block_list_table.py b/cmd/explorer/src/gui/widget/block_list_table.py index a338961a..917a1b4d 100644 --- a/cmd/explorer/src/gui/widget/block_list_table.py +++ b/cmd/explorer/src/gui/widget/block_list_table.py @@ -21,13 +21,13 @@ from typing import Iterable from rich.progress_bar import ProgressBar -from src.utils.time import human_time from textual.binding import Binding from textual.coordinate import Coordinate from textual.reactive import reactive from textual.widgets import DataTable from app.model.schema.bc_explorer import BlockData +from src.utils.time import human_time class BlockListTable(DataTable): diff --git a/cmd/explorer/src/gui/widget/block_list_view.py b/cmd/explorer/src/gui/widget/block_list_view.py index 0b2be91f..c2265e3c 100644 --- a/cmd/explorer/src/gui/widget/block_list_view.py +++ b/cmd/explorer/src/gui/widget/block_list_view.py @@ -22,10 +22,6 @@ from rich.panel import Panel from rich.spinner import Spinner from rich.table import Table -from src.gui import styles -from src.gui.consts import ID -from src.gui.widget.base import TuiStatic, TuiWidget -from src.gui.widget.block_list_table import BlockListTable from textual.app import ComposeResult from textual.binding import Binding from textual.containers import Horizontal @@ -33,6 +29,10 @@ from textual.timer import Timer from app.model.schema import ListBlockDataQuery +from src.gui import styles +from src.gui.consts import ID +from src.gui.widget.base import TuiStatic, TuiWidget +from src.gui.widget.block_list_table import BlockListTable class BlockListQueryPanel(TuiStatic): diff --git a/cmd/explorer/src/gui/widget/menu.py b/cmd/explorer/src/gui/widget/menu.py index 90f7c1ed..dc7cf98e 100644 --- a/cmd/explorer/src/gui/widget/menu.py +++ b/cmd/explorer/src/gui/widget/menu.py @@ -19,12 +19,13 @@ from pydantic import BaseModel from rich.text import Text -from src.gui.consts import ID -from src.gui.widget.base import TuiWidget from textual.app import ComposeResult from textual.binding import Binding from textual.widgets import Button +from src.gui.consts import ID +from src.gui.widget.base import TuiWidget + class MenuInstruction(BaseModel): block_number: int diff --git a/cmd/explorer/src/gui/widget/query_panel.py b/cmd/explorer/src/gui/widget/query_panel.py index 737e55b8..95b12084 100644 --- a/cmd/explorer/src/gui/widget/query_panel.py +++ b/cmd/explorer/src/gui/widget/query_panel.py @@ -20,11 +20,6 @@ from typing import TYPE_CHECKING, cast from rich.markdown import Markdown -from src.gui.consts import ID -from src.gui.widget.base import TuiWidget -from src.gui.widget.block_list_table import BlockListTable -from src.gui.widget.block_list_view import BlockListQueryPanel -from src.gui.widget.choice import Choices from textual import events from textual.app import ComposeResult from textual.binding import Binding @@ -33,6 +28,11 @@ from app.model.schema import ListBlockDataQuery from app.model.schema.base import SortOrder +from src.gui.consts import ID +from src.gui.widget.base import TuiWidget +from src.gui.widget.block_list_table import BlockListTable +from src.gui.widget.block_list_view import BlockListQueryPanel +from src.gui.widget.choice import Choices if TYPE_CHECKING: from src.gui.explorer import ExplorerApp @@ -201,11 +201,11 @@ def show(self): ) item = "ASC" if query.sort_order.value == 0 else "DESC" - self.query_one(f"#{ID.QUERY_PANEL_SORT_ORDER_CHOICE}", Choices).index = ( - self.query_one( - f"#{ID.QUERY_PANEL_SORT_ORDER_CHOICE}", Choices - ).choices.index(item) - ) + self.query_one( + f"#{ID.QUERY_PANEL_SORT_ORDER_CHOICE}", Choices + ).index = self.query_one( + f"#{ID.QUERY_PANEL_SORT_ORDER_CHOICE}", Choices + ).choices.index(item) def hide(self) -> None: self.remove_class("visible") diff --git a/cmd/explorer/src/gui/widget/traceback.py b/cmd/explorer/src/gui/widget/traceback.py index 2933652b..26bfb477 100644 --- a/cmd/explorer/src/gui/widget/traceback.py +++ b/cmd/explorer/src/gui/widget/traceback.py @@ -23,6 +23,7 @@ from rich.panel import Panel from rich.style import Style from rich.traceback import Traceback + from src.gui import styles from src.gui.widget.base import TuiWidget diff --git a/cmd/explorer/src/gui/widget/tx_detail_view.py b/cmd/explorer/src/gui/widget/tx_detail_view.py index c32f69a2..b0031cc5 100644 --- a/cmd/explorer/src/gui/widget/tx_detail_view.py +++ b/cmd/explorer/src/gui/widget/tx_detail_view.py @@ -22,12 +22,12 @@ from rich.align import Align from rich.panel import Panel from rich.style import Style -from src.gui import styles -from src.gui.rendarable.tx_detail_info import TxDetailInfo -from src.gui.widget.base import TuiWidget from textual.reactive import Reactive, reactive from app.model.schema import TxDataDetail +from src.gui import styles +from src.gui.rendarable.tx_detail_info import TxDetailInfo +from src.gui.widget.base import TuiWidget class TxDetailView(TuiWidget): diff --git a/cmd/explorer/src/gui/widget/tx_list_view.py b/cmd/explorer/src/gui/widget/tx_list_view.py index fa0b1c01..c14e1275 100644 --- a/cmd/explorer/src/gui/widget/tx_list_view.py +++ b/cmd/explorer/src/gui/widget/tx_list_view.py @@ -17,13 +17,14 @@ SPDX-License-Identifier: Apache-2.0 """ -from src.gui.widget.base import TuiWidget -from src.gui.widget.tx_list_table import TxListTable from textual.app import ComposeResult from textual.containers import Horizontal from textual.widget import Widget from textual.widgets import Static +from src.gui.widget.base import TuiWidget +from src.gui.widget.tx_list_table import TxListTable + class TxListView(TuiWidget): BINDINGS = [] @@ -33,7 +34,7 @@ def __init__( *children: Widget, name: str | None = None, id: str | None = None, - classes: str | None = None + classes: str | None = None, ): super().__init__(*children, name=name, id=id, classes=classes) diff --git a/cmd/explorer/src/main.py b/cmd/explorer/src/main.py index 2b39b072..48d28489 100644 --- a/cmd/explorer/src/main.py +++ b/cmd/explorer/src/main.py @@ -24,6 +24,7 @@ logging.getLogger("psycopg").setLevel(logging.WARNING) import typer + from src.gui.explorer import ExplorerApp app = typer.Typer(pretty_exceptions_show_locals=False) diff --git a/cmd/settlement/Makefile b/cmd/settlement/Makefile index fe3aafb4..9f2ee9a0 100644 --- a/cmd/settlement/Makefile +++ b/cmd/settlement/Makefile @@ -1,15 +1,4 @@ -.PHONY: isort black test run - -format: isort black - -isort: - isort src/. - -black: - poetry run black src - -test: - pytest . +.PHONY: console run console: textual console diff --git a/config.py b/config.py index d8583e31..0caec525 100644 --- a/config.py +++ b/config.py @@ -44,11 +44,11 @@ else: if NETWORK == "IBET": # ibet INI_FILE = os.path.join( - os.path.dirname(os.path.realpath(__file__)), f"conf/live.ini" + os.path.dirname(os.path.realpath(__file__)), "conf/live.ini" ) else: # ibet for Fin INI_FILE = os.path.join( - os.path.dirname(os.path.realpath(__file__)), f"conf/live_fin.ini" + os.path.dirname(os.path.realpath(__file__)), "conf/live_fin.ini" ) CONFIG = configparser.ConfigParser() CONFIG.read(INI_FILE) diff --git a/poetry.lock b/poetry.lock index fb7df888..0abc02fc 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. [[package]] name = "aiohttp" @@ -111,13 +111,13 @@ frozenlist = ">=1.1.0" [[package]] name = "alembic" -version = "1.13.1" +version = "1.13.2" description = "A database migration tool for SQLAlchemy." optional = false python-versions = ">=3.8" files = [ - {file = "alembic-1.13.1-py3-none-any.whl", hash = "sha256:2edcc97bed0bd3272611ce3a98d98279e9c209e7186e43e75bbb1b2bdfdbcc43"}, - {file = "alembic-1.13.1.tar.gz", hash = "sha256:4932c8558bf68f2ee92b9bbcb8218671c627064d5b08939437af6d77dc05e595"}, + {file = "alembic-1.13.2-py3-none-any.whl", hash = "sha256:6b8733129a6224a9a711e17c99b08462dbf7cc9670ba8f2e2ae9af860ceb1953"}, + {file = "alembic-1.13.2.tar.gz", hash = "sha256:1ff0ae32975f4fd96028c39ed9bb3c867fe3af956bd7bb37343b54c9fe7445ef"}, ] [package.dependencies] @@ -330,63 +330,19 @@ files = [ {file = "bitarray-2.9.2.tar.gz", hash = "sha256:a8f286a51a32323715d77755ed959f94bef13972e9a2fe71b609e40e6d27957e"}, ] -[[package]] -name = "black" -version = "24.4.2" -description = "The uncompromising code formatter." -optional = false -python-versions = ">=3.8" -files = [ - {file = "black-24.4.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dd1b5a14e417189db4c7b64a6540f31730713d173f0b63e55fabd52d61d8fdce"}, - {file = "black-24.4.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e537d281831ad0e71007dcdcbe50a71470b978c453fa41ce77186bbe0ed6021"}, - {file = "black-24.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eaea3008c281f1038edb473c1aa8ed8143a5535ff18f978a318f10302b254063"}, - {file = "black-24.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:7768a0dbf16a39aa5e9a3ded568bb545c8c2727396d063bbaf847df05b08cd96"}, - {file = "black-24.4.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:257d724c2c9b1660f353b36c802ccece186a30accc7742c176d29c146df6e474"}, - {file = "black-24.4.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bdde6f877a18f24844e381d45e9947a49e97933573ac9d4345399be37621e26c"}, - {file = "black-24.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e151054aa00bad1f4e1f04919542885f89f5f7d086b8a59e5000e6c616896ffb"}, - {file = "black-24.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:7e122b1c4fb252fd85df3ca93578732b4749d9be076593076ef4d07a0233c3e1"}, - {file = "black-24.4.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:accf49e151c8ed2c0cdc528691838afd217c50412534e876a19270fea1e28e2d"}, - {file = "black-24.4.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:88c57dc656038f1ab9f92b3eb5335ee9b021412feaa46330d5eba4e51fe49b04"}, - {file = "black-24.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be8bef99eb46d5021bf053114442914baeb3649a89dc5f3a555c88737e5e98fc"}, - {file = "black-24.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:415e686e87dbbe6f4cd5ef0fbf764af7b89f9057b97c908742b6008cc554b9c0"}, - {file = "black-24.4.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bf10f7310db693bb62692609b397e8d67257c55f949abde4c67f9cc574492cc7"}, - {file = "black-24.4.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:98e123f1d5cfd42f886624d84464f7756f60ff6eab89ae845210631714f6db94"}, - {file = "black-24.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48a85f2cb5e6799a9ef05347b476cce6c182d6c71ee36925a6c194d074336ef8"}, - {file = "black-24.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:b1530ae42e9d6d5b670a34db49a94115a64596bc77710b1d05e9801e62ca0a7c"}, - {file = "black-24.4.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:37aae07b029fa0174d39daf02748b379399b909652a806e5708199bd93899da1"}, - {file = "black-24.4.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:da33a1a5e49c4122ccdfd56cd021ff1ebc4a1ec4e2d01594fef9b6f267a9e741"}, - {file = "black-24.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef703f83fc32e131e9bcc0a5094cfe85599e7109f896fe8bc96cc402f3eb4b6e"}, - {file = "black-24.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:b9176b9832e84308818a99a561e90aa479e73c523b3f77afd07913380ae2eab7"}, - {file = "black-24.4.2-py3-none-any.whl", hash = "sha256:d36ed1124bb81b32f8614555b34cc4259c3fbc7eec17870e8ff8ded335b58d8c"}, - {file = "black-24.4.2.tar.gz", hash = "sha256:c872b53057f000085da66a19c55d68f6f8ddcac2642392ad3a355878406fbd4d"}, -] - -[package.dependencies] -click = ">=8.0.0" -mypy-extensions = ">=0.4.3" -packaging = ">=22.0" -pathspec = ">=0.9.0" -platformdirs = ">=2" - -[package.extras] -colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"] -jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -uvloop = ["uvloop (>=0.15.2)"] - [[package]] name = "boto3" -version = "1.34.116" +version = "1.34.149" description = "The AWS SDK for Python" optional = false python-versions = ">=3.8" files = [ - {file = "boto3-1.34.116-py3-none-any.whl", hash = "sha256:e7f5ab2d1f1b90971a2b9369760c2c6bae49dae98c084a5c3f5c78e3968ace15"}, - {file = "boto3-1.34.116.tar.gz", hash = "sha256:53cb8aeb405afa1cd2b25421e27a951aeb568026675dec020587861fac96ac87"}, + {file = "boto3-1.34.149-py3-none-any.whl", hash = "sha256:11edeeacdd517bda3b7615b754d8440820cdc9ddd66794cc995a9693ddeaa3be"}, + {file = "boto3-1.34.149.tar.gz", hash = "sha256:f4e6489ba9dc7fb37d53e0e82dbc97f2cb0a4969ef3970e2c88b8f94023ae81a"}, ] [package.dependencies] -botocore = ">=1.34.116,<1.35.0" +botocore = ">=1.34.149,<1.35.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.10.0,<0.11.0" @@ -395,13 +351,13 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.34.116" +version = "1.34.149" description = "Low-level, data-driven core of boto 3." optional = false python-versions = ">=3.8" files = [ - {file = "botocore-1.34.116-py3-none-any.whl", hash = "sha256:ec4d42c816e9b2d87a2439ad277e7dda16a4a614ef6839cf66f4c1a58afa547c"}, - {file = "botocore-1.34.116.tar.gz", hash = "sha256:269cae7ba99081519a9f87d7298e238d9e68ba94eb4f8ddfa906224c34cb8b6c"}, + {file = "botocore-1.34.149-py3-none-any.whl", hash = "sha256:ae6c4be52eeee96f68c116b27d252bab069cd046d61a17cfe8e9da411cf22906"}, + {file = "botocore-1.34.149.tar.gz", hash = "sha256:2e1eb5ef40102a3d796bb3dd05f2ac5e8fb43fe1ff114b4f6d33153437f5a372"}, ] [package.dependencies] @@ -410,17 +366,17 @@ python-dateutil = ">=2.1,<3.0.0" urllib3 = {version = ">=1.25.4,<2.2.0 || >2.2.0,<3", markers = "python_version >= \"3.10\""} [package.extras] -crt = ["awscrt (==0.20.9)"] +crt = ["awscrt (==0.20.11)"] [[package]] name = "certifi" -version = "2024.2.2" +version = "2024.7.4" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, - {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, + {file = "certifi-2024.7.4-py3-none-any.whl", hash = "sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90"}, + {file = "certifi-2024.7.4.tar.gz", hash = "sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b"}, ] [[package]] @@ -774,63 +730,63 @@ files = [ [[package]] name = "coverage" -version = "7.5.3" +version = "7.6.0" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.8" files = [ - {file = "coverage-7.5.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a6519d917abb15e12380406d721e37613e2a67d166f9fb7e5a8ce0375744cd45"}, - {file = "coverage-7.5.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aea7da970f1feccf48be7335f8b2ca64baf9b589d79e05b9397a06696ce1a1ec"}, - {file = "coverage-7.5.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:923b7b1c717bd0f0f92d862d1ff51d9b2b55dbbd133e05680204465f454bb286"}, - {file = "coverage-7.5.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62bda40da1e68898186f274f832ef3e759ce929da9a9fd9fcf265956de269dbc"}, - {file = "coverage-7.5.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8b7339180d00de83e930358223c617cc343dd08e1aa5ec7b06c3a121aec4e1d"}, - {file = "coverage-7.5.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:25a5caf742c6195e08002d3b6c2dd6947e50efc5fc2c2205f61ecb47592d2d83"}, - {file = "coverage-7.5.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:05ac5f60faa0c704c0f7e6a5cbfd6f02101ed05e0aee4d2822637a9e672c998d"}, - {file = "coverage-7.5.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:239a4e75e09c2b12ea478d28815acf83334d32e722e7433471fbf641c606344c"}, - {file = "coverage-7.5.3-cp310-cp310-win32.whl", hash = "sha256:a5812840d1d00eafae6585aba38021f90a705a25b8216ec7f66aebe5b619fb84"}, - {file = "coverage-7.5.3-cp310-cp310-win_amd64.whl", hash = "sha256:33ca90a0eb29225f195e30684ba4a6db05dbef03c2ccd50b9077714c48153cac"}, - {file = "coverage-7.5.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f81bc26d609bf0fbc622c7122ba6307993c83c795d2d6f6f6fd8c000a770d974"}, - {file = "coverage-7.5.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7cec2af81f9e7569280822be68bd57e51b86d42e59ea30d10ebdbb22d2cb7232"}, - {file = "coverage-7.5.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55f689f846661e3f26efa535071775d0483388a1ccfab899df72924805e9e7cd"}, - {file = "coverage-7.5.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50084d3516aa263791198913a17354bd1dc627d3c1639209640b9cac3fef5807"}, - {file = "coverage-7.5.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:341dd8f61c26337c37988345ca5c8ccabeff33093a26953a1ac72e7d0103c4fb"}, - {file = "coverage-7.5.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ab0b028165eea880af12f66086694768f2c3139b2c31ad5e032c8edbafca6ffc"}, - {file = "coverage-7.5.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5bc5a8c87714b0c67cfeb4c7caa82b2d71e8864d1a46aa990b5588fa953673b8"}, - {file = "coverage-7.5.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:38a3b98dae8a7c9057bd91fbf3415c05e700a5114c5f1b5b0ea5f8f429ba6614"}, - {file = "coverage-7.5.3-cp311-cp311-win32.whl", hash = "sha256:fcf7d1d6f5da887ca04302db8e0e0cf56ce9a5e05f202720e49b3e8157ddb9a9"}, - {file = "coverage-7.5.3-cp311-cp311-win_amd64.whl", hash = "sha256:8c836309931839cca658a78a888dab9676b5c988d0dd34ca247f5f3e679f4e7a"}, - {file = "coverage-7.5.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:296a7d9bbc598e8744c00f7a6cecf1da9b30ae9ad51c566291ff1314e6cbbed8"}, - {file = "coverage-7.5.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:34d6d21d8795a97b14d503dcaf74226ae51eb1f2bd41015d3ef332a24d0a17b3"}, - {file = "coverage-7.5.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e317953bb4c074c06c798a11dbdd2cf9979dbcaa8ccc0fa4701d80042d4ebf1"}, - {file = "coverage-7.5.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:705f3d7c2b098c40f5b81790a5fedb274113373d4d1a69e65f8b68b0cc26f6db"}, - {file = "coverage-7.5.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1196e13c45e327d6cd0b6e471530a1882f1017eb83c6229fc613cd1a11b53cd"}, - {file = "coverage-7.5.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:015eddc5ccd5364dcb902eaecf9515636806fa1e0d5bef5769d06d0f31b54523"}, - {file = "coverage-7.5.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:fd27d8b49e574e50caa65196d908f80e4dff64d7e592d0c59788b45aad7e8b35"}, - {file = "coverage-7.5.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:33fc65740267222fc02975c061eb7167185fef4cc8f2770267ee8bf7d6a42f84"}, - {file = "coverage-7.5.3-cp312-cp312-win32.whl", hash = "sha256:7b2a19e13dfb5c8e145c7a6ea959485ee8e2204699903c88c7d25283584bfc08"}, - {file = "coverage-7.5.3-cp312-cp312-win_amd64.whl", hash = "sha256:0bbddc54bbacfc09b3edaec644d4ac90c08ee8ed4844b0f86227dcda2d428fcb"}, - {file = "coverage-7.5.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f78300789a708ac1f17e134593f577407d52d0417305435b134805c4fb135adb"}, - {file = "coverage-7.5.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b368e1aee1b9b75757942d44d7598dcd22a9dbb126affcbba82d15917f0cc155"}, - {file = "coverage-7.5.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f836c174c3a7f639bded48ec913f348c4761cbf49de4a20a956d3431a7c9cb24"}, - {file = "coverage-7.5.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:244f509f126dc71369393ce5fea17c0592c40ee44e607b6d855e9c4ac57aac98"}, - {file = "coverage-7.5.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4c2872b3c91f9baa836147ca33650dc5c172e9273c808c3c3199c75490e709d"}, - {file = "coverage-7.5.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:dd4b3355b01273a56b20c219e74e7549e14370b31a4ffe42706a8cda91f19f6d"}, - {file = "coverage-7.5.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:f542287b1489c7a860d43a7d8883e27ca62ab84ca53c965d11dac1d3a1fab7ce"}, - {file = "coverage-7.5.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:75e3f4e86804023e991096b29e147e635f5e2568f77883a1e6eed74512659ab0"}, - {file = "coverage-7.5.3-cp38-cp38-win32.whl", hash = "sha256:c59d2ad092dc0551d9f79d9d44d005c945ba95832a6798f98f9216ede3d5f485"}, - {file = "coverage-7.5.3-cp38-cp38-win_amd64.whl", hash = "sha256:fa21a04112c59ad54f69d80e376f7f9d0f5f9123ab87ecd18fbb9ec3a2beed56"}, - {file = "coverage-7.5.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f5102a92855d518b0996eb197772f5ac2a527c0ec617124ad5242a3af5e25f85"}, - {file = "coverage-7.5.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d1da0a2e3b37b745a2b2a678a4c796462cf753aebf94edcc87dcc6b8641eae31"}, - {file = "coverage-7.5.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8383a6c8cefba1b7cecc0149415046b6fc38836295bc4c84e820872eb5478b3d"}, - {file = "coverage-7.5.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9aad68c3f2566dfae84bf46295a79e79d904e1c21ccfc66de88cd446f8686341"}, - {file = "coverage-7.5.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e079c9ec772fedbade9d7ebc36202a1d9ef7291bc9b3a024ca395c4d52853d7"}, - {file = "coverage-7.5.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bde997cac85fcac227b27d4fb2c7608a2c5f6558469b0eb704c5726ae49e1c52"}, - {file = "coverage-7.5.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:990fb20b32990b2ce2c5f974c3e738c9358b2735bc05075d50a6f36721b8f303"}, - {file = "coverage-7.5.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3d5a67f0da401e105753d474369ab034c7bae51a4c31c77d94030d59e41df5bd"}, - {file = "coverage-7.5.3-cp39-cp39-win32.whl", hash = "sha256:e08c470c2eb01977d221fd87495b44867a56d4d594f43739a8028f8646a51e0d"}, - {file = "coverage-7.5.3-cp39-cp39-win_amd64.whl", hash = "sha256:1d2a830ade66d3563bb61d1e3c77c8def97b30ed91e166c67d0632c018f380f0"}, - {file = "coverage-7.5.3-pp38.pp39.pp310-none-any.whl", hash = "sha256:3538d8fb1ee9bdd2e2692b3b18c22bb1c19ffbefd06880f5ac496e42d7bb3884"}, - {file = "coverage-7.5.3.tar.gz", hash = "sha256:04aefca5190d1dc7a53a4c1a5a7f8568811306d7a8ee231c42fb69215571944f"}, + {file = "coverage-7.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dff044f661f59dace805eedb4a7404c573b6ff0cdba4a524141bc63d7be5c7fd"}, + {file = "coverage-7.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a8659fd33ee9e6ca03950cfdcdf271d645cf681609153f218826dd9805ab585c"}, + {file = "coverage-7.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7792f0ab20df8071d669d929c75c97fecfa6bcab82c10ee4adb91c7a54055463"}, + {file = "coverage-7.6.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d4b3cd1ca7cd73d229487fa5caca9e4bc1f0bca96526b922d61053ea751fe791"}, + {file = "coverage-7.6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7e128f85c0b419907d1f38e616c4f1e9f1d1b37a7949f44df9a73d5da5cd53c"}, + {file = "coverage-7.6.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a94925102c89247530ae1dab7dc02c690942566f22e189cbd53579b0693c0783"}, + {file = "coverage-7.6.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:dcd070b5b585b50e6617e8972f3fbbee786afca71b1936ac06257f7e178f00f6"}, + {file = "coverage-7.6.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d50a252b23b9b4dfeefc1f663c568a221092cbaded20a05a11665d0dbec9b8fb"}, + {file = "coverage-7.6.0-cp310-cp310-win32.whl", hash = "sha256:0e7b27d04131c46e6894f23a4ae186a6a2207209a05df5b6ad4caee6d54a222c"}, + {file = "coverage-7.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:54dece71673b3187c86226c3ca793c5f891f9fc3d8aa183f2e3653da18566169"}, + {file = "coverage-7.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c7b525ab52ce18c57ae232ba6f7010297a87ced82a2383b1afd238849c1ff933"}, + {file = "coverage-7.6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bea27c4269234e06f621f3fac3925f56ff34bc14521484b8f66a580aacc2e7d"}, + {file = "coverage-7.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed8d1d1821ba5fc88d4a4f45387b65de52382fa3ef1f0115a4f7a20cdfab0e94"}, + {file = "coverage-7.6.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01c322ef2bbe15057bc4bf132b525b7e3f7206f071799eb8aa6ad1940bcf5fb1"}, + {file = "coverage-7.6.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03cafe82c1b32b770a29fd6de923625ccac3185a54a5e66606da26d105f37dac"}, + {file = "coverage-7.6.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0d1b923fc4a40c5832be4f35a5dab0e5ff89cddf83bb4174499e02ea089daf57"}, + {file = "coverage-7.6.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4b03741e70fb811d1a9a1d75355cf391f274ed85847f4b78e35459899f57af4d"}, + {file = "coverage-7.6.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a73d18625f6a8a1cbb11eadc1d03929f9510f4131879288e3f7922097a429f63"}, + {file = "coverage-7.6.0-cp311-cp311-win32.whl", hash = "sha256:65fa405b837060db569a61ec368b74688f429b32fa47a8929a7a2f9b47183713"}, + {file = "coverage-7.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:6379688fb4cfa921ae349c76eb1a9ab26b65f32b03d46bb0eed841fd4cb6afb1"}, + {file = "coverage-7.6.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f7db0b6ae1f96ae41afe626095149ecd1b212b424626175a6633c2999eaad45b"}, + {file = "coverage-7.6.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bbdf9a72403110a3bdae77948b8011f644571311c2fb35ee15f0f10a8fc082e8"}, + {file = "coverage-7.6.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cc44bf0315268e253bf563f3560e6c004efe38f76db03a1558274a6e04bf5d5"}, + {file = "coverage-7.6.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da8549d17489cd52f85a9829d0e1d91059359b3c54a26f28bec2c5d369524807"}, + {file = "coverage-7.6.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0086cd4fc71b7d485ac93ca4239c8f75732c2ae3ba83f6be1c9be59d9e2c6382"}, + {file = "coverage-7.6.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1fad32ee9b27350687035cb5fdf9145bc9cf0a094a9577d43e909948ebcfa27b"}, + {file = "coverage-7.6.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:044a0985a4f25b335882b0966625270a8d9db3d3409ddc49a4eb00b0ef5e8cee"}, + {file = "coverage-7.6.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:76d5f82213aa78098b9b964ea89de4617e70e0d43e97900c2778a50856dac605"}, + {file = "coverage-7.6.0-cp312-cp312-win32.whl", hash = "sha256:3c59105f8d58ce500f348c5b56163a4113a440dad6daa2294b5052a10db866da"}, + {file = "coverage-7.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:ca5d79cfdae420a1d52bf177de4bc2289c321d6c961ae321503b2ca59c17ae67"}, + {file = "coverage-7.6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d39bd10f0ae453554798b125d2f39884290c480f56e8a02ba7a6ed552005243b"}, + {file = "coverage-7.6.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:beb08e8508e53a568811016e59f3234d29c2583f6b6e28572f0954a6b4f7e03d"}, + {file = "coverage-7.6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2e16f4cd2bc4d88ba30ca2d3bbf2f21f00f382cf4e1ce3b1ddc96c634bc48ca"}, + {file = "coverage-7.6.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6616d1c9bf1e3faea78711ee42a8b972367d82ceae233ec0ac61cc7fec09fa6b"}, + {file = "coverage-7.6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad4567d6c334c46046d1c4c20024de2a1c3abc626817ae21ae3da600f5779b44"}, + {file = "coverage-7.6.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d17c6a415d68cfe1091d3296ba5749d3d8696e42c37fca5d4860c5bf7b729f03"}, + {file = "coverage-7.6.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:9146579352d7b5f6412735d0f203bbd8d00113a680b66565e205bc605ef81bc6"}, + {file = "coverage-7.6.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:cdab02a0a941af190df8782aafc591ef3ad08824f97850b015c8c6a8b3877b0b"}, + {file = "coverage-7.6.0-cp38-cp38-win32.whl", hash = "sha256:df423f351b162a702c053d5dddc0fc0ef9a9e27ea3f449781ace5f906b664428"}, + {file = "coverage-7.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:f2501d60d7497fd55e391f423f965bbe9e650e9ffc3c627d5f0ac516026000b8"}, + {file = "coverage-7.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7221f9ac9dad9492cecab6f676b3eaf9185141539d5c9689d13fd6b0d7de840c"}, + {file = "coverage-7.6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ddaaa91bfc4477d2871442bbf30a125e8fe6b05da8a0015507bfbf4718228ab2"}, + {file = "coverage-7.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4cbe651f3904e28f3a55d6f371203049034b4ddbce65a54527a3f189ca3b390"}, + {file = "coverage-7.6.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:831b476d79408ab6ccfadaaf199906c833f02fdb32c9ab907b1d4aa0713cfa3b"}, + {file = "coverage-7.6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46c3d091059ad0b9c59d1034de74a7f36dcfa7f6d3bde782c49deb42438f2450"}, + {file = "coverage-7.6.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4d5fae0a22dc86259dee66f2cc6c1d3e490c4a1214d7daa2a93d07491c5c04b6"}, + {file = "coverage-7.6.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:07ed352205574aad067482e53dd606926afebcb5590653121063fbf4e2175166"}, + {file = "coverage-7.6.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:49c76cdfa13015c4560702574bad67f0e15ca5a2872c6a125f6327ead2b731dd"}, + {file = "coverage-7.6.0-cp39-cp39-win32.whl", hash = "sha256:482855914928c8175735a2a59c8dc5806cf7d8f032e4820d52e845d1f731dca2"}, + {file = "coverage-7.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:543ef9179bc55edfd895154a51792b01c017c87af0ebaae092720152e19e42ca"}, + {file = "coverage-7.6.0-pp38.pp39.pp310-none-any.whl", hash = "sha256:6fe885135c8a479d3e37a7aae61cbd3a0fb2deccb4dda3c25f92a49189f766d6"}, + {file = "coverage-7.6.0.tar.gz", hash = "sha256:289cc803fa1dc901f84701ac10c9ee873619320f2f9aff38794db4a4a0268d51"}, ] [package.extras] @@ -988,13 +944,13 @@ wmi = ["wmi (>=1.5.1)"] [[package]] name = "email-validator" -version = "2.1.1" +version = "2.2.0" description = "A robust email address syntax and deliverability validation library." optional = false python-versions = ">=3.8" files = [ - {file = "email_validator-2.1.1-py3-none-any.whl", hash = "sha256:97d882d174e2a65732fb43bfce81a3a834cbc1bde8bf419e30ef5ea976370a05"}, - {file = "email_validator-2.1.1.tar.gz", hash = "sha256:200a70680ba08904be6d1eef729205cc0d687634399a5924d842533efb824b84"}, + {file = "email_validator-2.2.0-py3-none-any.whl", hash = "sha256:561977c2d73ce3611850a06fa56b414621e0c8faa9d66f2611407d87465da631"}, + {file = "email_validator-2.2.0.tar.gz", hash = "sha256:cb690f344c617a714f22e66ae771445a1ceb46821152df8e165c5f9a364582b7"}, ] [package.dependencies] @@ -1025,13 +981,13 @@ tools = ["hypothesis (>=4.18.2,<5.0.0)"] [[package]] name = "eth-account" -version = "0.13.0" +version = "0.13.1" description = "eth-account: Sign Ethereum transactions and messages with local private keys" optional = false python-versions = "<4,>=3.8" files = [ - {file = "eth_account-0.13.0-py3-none-any.whl", hash = "sha256:84d27664038c68e6bee28fa5de803c3b629dc5d97cd61d12e5f442c561a5b8af"}, - {file = "eth_account-0.13.0.tar.gz", hash = "sha256:ccea4383d9d37b46e17c977b0a5ea397cef1ac1ad3330431ae4b0c10b62d4fcd"}, + {file = "eth_account-0.13.1-py3-none-any.whl", hash = "sha256:da864838a766345f25c66ead579b1077e3a5b8a825dd728055f341a13ee657d8"}, + {file = "eth_account-0.13.1.tar.gz", hash = "sha256:a42a613481fda9d27e5e355f15e0ea24fd42ebdf01b0c074e399acddce5087a3"}, ] [package.dependencies] @@ -1047,7 +1003,7 @@ pydantic = ">=2.0.0" rlp = ">=1.0.0" [package.extras] -dev = ["build (>=0.9.0)", "bumpversion (>=0.5.3)", "coverage", "hypothesis (>=4.18.0,<5)", "ipython", "pre-commit (>=3.4.0)", "pytest (>=7.0.0)", "pytest-xdist (>=2.4.0)", "sphinx (>=6.0.0)", "sphinx-autobuild (>=2021.3.14)", "sphinx-rtd-theme (>=1.0.0)", "towncrier (>=21,<22)", "tox (>=4.0.0)", "twine", "wheel"] +dev = ["build (>=0.9.0)", "bumpversion (>=0.5.3)", "coverage", "hypothesis (>=4.18.0,<5)", "ipython", "mypy (==1.10.0)", "pre-commit (>=3.4.0)", "pytest (>=7.0.0)", "pytest-xdist (>=2.4.0)", "sphinx (>=6.0.0)", "sphinx-autobuild (>=2021.3.14)", "sphinx-rtd-theme (>=1.0.0)", "towncrier (>=21,<22)", "tox (>=4.0.0)", "twine", "wheel"] docs = ["sphinx (>=6.0.0)", "sphinx-autobuild (>=2021.3.14)", "sphinx-rtd-theme (>=1.0.0)", "towncrier (>=21,<22)"] test = ["coverage", "hypothesis (>=4.18.0,<5)", "pytest (>=7.0.0)", "pytest-xdist (>=2.4.0)"] @@ -1137,15 +1093,18 @@ test = ["eth-hash[pycryptodome]", "pytest (>=7.0.0)", "pytest-xdist (>=2.4.0)"] [[package]] name = "eth-typing" -version = "4.2.3" +version = "4.4.0" description = "eth-typing: Common type annotations for ethereum python packages" optional = false python-versions = "<4,>=3.8" files = [ - {file = "eth_typing-4.2.3-py3-none-any.whl", hash = "sha256:b2df49fa89d2e85f2cc3fb1c903b0cd183d524f7a045e3db8cc720cf41adcd3d"}, - {file = "eth_typing-4.2.3.tar.gz", hash = "sha256:8ee3ae7d4136d14fcb955c34f9dbef8e52170984d4dc68c0ab0d61621eab29d8"}, + {file = "eth_typing-4.4.0-py3-none-any.whl", hash = "sha256:a5e30a6e69edda7b1d1e96e9d71bab48b9bb988a77909d8d1666242c5562f841"}, + {file = "eth_typing-4.4.0.tar.gz", hash = "sha256:93848083ac6bb4c20cc209ea9153a08b0a528be23337c889f89e1e5ffbe9807d"}, ] +[package.dependencies] +typing-extensions = ">=4.5.0" + [package.extras] dev = ["build (>=0.9.0)", "bumpversion (>=0.5.3)", "ipython", "pre-commit (>=3.4.0)", "pytest (>=7.0.0)", "pytest-xdist (>=2.4.0)", "sphinx (>=6.0.0)", "sphinx-rtd-theme (>=1.0.0)", "towncrier (>=21,<22)", "tox (>=4.0.0)", "twine", "wheel"] docs = ["sphinx (>=6.0.0)", "sphinx-rtd-theme (>=1.0.0)", "towncrier (>=21,<22)"] @@ -1175,13 +1134,13 @@ test = ["hypothesis (>=4.43.0)", "mypy (==1.5.1)", "pytest (>=7.0.0)", "pytest-x [[package]] name = "fastapi" -version = "0.111.0" +version = "0.111.1" description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" optional = false python-versions = ">=3.8" files = [ - {file = "fastapi-0.111.0-py3-none-any.whl", hash = "sha256:97ecbf994be0bcbdadedf88c3150252bed7b2087075ac99735403b1b76cc8fc0"}, - {file = "fastapi-0.111.0.tar.gz", hash = "sha256:b9db9dd147c91cb8b769f7183535773d8741dd46f9dc6676cd82eab510228cd7"}, + {file = "fastapi-0.111.1-py3-none-any.whl", hash = "sha256:4f51cfa25d72f9fbc3280832e84b32494cf186f50158d364a8765aabf22587bf"}, + {file = "fastapi-0.111.1.tar.gz", hash = "sha256:ddd1ac34cb1f76c2e2d7f8545a4bcb5463bce4834e81abf0b189e0c359ab2413"}, ] [package.dependencies] @@ -1189,12 +1148,10 @@ email_validator = ">=2.0.0" fastapi-cli = ">=0.0.2" httpx = ">=0.23.0" jinja2 = ">=2.11.2" -orjson = ">=3.2.1" pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0" python-multipart = ">=0.0.7" starlette = ">=0.37.2,<0.38.0" typing-extensions = ">=4.8.0" -ujson = ">=4.0.1,<4.0.2 || >4.0.2,<4.1.0 || >4.1.0,<4.2.0 || >4.2.0,<4.3.0 || >4.3.0,<5.0.0 || >5.0.0,<5.1.0 || >5.1.0" uvicorn = {version = ">=0.12.0", extras = ["standard"]} [package.extras] @@ -1219,18 +1176,18 @@ standard = ["fastapi", "uvicorn[standard] (>=0.15.0)"] [[package]] name = "filelock" -version = "3.14.0" +version = "3.15.4" description = "A platform independent file lock." optional = false python-versions = ">=3.8" files = [ - {file = "filelock-3.14.0-py3-none-any.whl", hash = "sha256:43339835842f110ca7ae60f1e1c160714c5a6afd15a2873419ab185334975c0f"}, - {file = "filelock-3.14.0.tar.gz", hash = "sha256:6ea72da3be9b8c82afd3edcf99f2fffbb5076335a5ae4d03248bb5b6c3eae78a"}, + {file = "filelock-3.15.4-py3-none-any.whl", hash = "sha256:6ca1fffae96225dab4c6eaf1c4f4f28cd2568d3ec2a44e15a08520504de468e7"}, + {file = "filelock-3.15.4.tar.gz", hash = "sha256:2207938cbc1844345cb01a5a95524dae30f0ce089eba5b00378295a17e3e90cb"}, ] [package.extras] docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-asyncio (>=0.21)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)", "virtualenv (>=20.26.2)"] typing = ["typing-extensions (>=4.8)"] [[package]] @@ -1438,17 +1395,17 @@ files = [ [[package]] name = "hexbytes" -version = "1.2.0" +version = "1.2.1" description = "hexbytes: Python `bytes` subclass that decodes hex, with a readable console output" optional = false -python-versions = ">=3.8, <4" +python-versions = "<4,>=3.8" files = [ - {file = "hexbytes-1.2.0-py3-none-any.whl", hash = "sha256:bb243ab58b8d8390e3a753fbc9e3616f0f958df43d874e19ae0e4b746722a7e9"}, - {file = "hexbytes-1.2.0.tar.gz", hash = "sha256:965f1cc712e7b263c41fdf3fb36cf671ba6f59b895937cf33941a5c996ec3a5c"}, + {file = "hexbytes-1.2.1-py3-none-any.whl", hash = "sha256:e64890b203a31f4a23ef11470ecfcca565beaee9198df623047df322b757471a"}, + {file = "hexbytes-1.2.1.tar.gz", hash = "sha256:515f00dddf31053db4d0d7636dd16061c1d896c3109b8e751005db4ca46bcca7"}, ] [package.extras] -dev = ["build (>=0.9.0)", "bumpversion (>=0.5.3)", "eth-utils (>=2.0.0)", "hypothesis (>=3.44.24,<=6.31.6)", "ipython", "pre-commit (>=3.4.0)", "pytest (>=7.0.0)", "pytest-xdist (>=2.4.0)", "sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.0.0)", "towncrier (>=21,<22)", "tox (>=4.0.0)", "twine", "wheel"] +dev = ["build (>=0.9.0)", "bump-my-version (>=0.19.0)", "eth-utils (>=2.0.0)", "hypothesis (>=3.44.24,<=6.31.6)", "ipython", "mypy (==1.10.0)", "pre-commit (>=3.4.0)", "pytest (>=7.0.0)", "pytest-xdist (>=2.4.0)", "sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.0.0)", "towncrier (>=21,<22)", "tox (>=4.0.0)", "twine", "wheel"] docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.0.0)", "towncrier (>=21,<22)"] test = ["eth-utils (>=2.0.0)", "hypothesis (>=3.44.24,<=6.31.6)", "pytest (>=7.0.0)", "pytest-xdist (>=2.4.0)"] @@ -1573,13 +1530,13 @@ url = "cmd/settlement" [[package]] name = "identify" -version = "2.5.36" +version = "2.6.0" description = "File identification library for Python" optional = false python-versions = ">=3.8" files = [ - {file = "identify-2.5.36-py2.py3-none-any.whl", hash = "sha256:37d93f380f4de590500d9dba7db359d0d3da95ffe7f9de1753faa159e71e7dfa"}, - {file = "identify-2.5.36.tar.gz", hash = "sha256:e5e00f54165f9047fbebeb4a560f9acfb8af4c88232be60a488e9b68d122745d"}, + {file = "identify-2.6.0-py2.py3-none-any.whl", hash = "sha256:e79ae4406387a9d300332b5fd366d8994f1525e8414984e1a59e058b2eda2dd0"}, + {file = "identify-2.6.0.tar.gz", hash = "sha256:cb171c685bdc31bcc4c1734698736a7d5b6c8bf2e0c15117f4d469c8640ae5cf"}, ] [package.extras] @@ -1598,22 +1555,22 @@ files = [ [[package]] name = "importlib-metadata" -version = "7.1.0" +version = "8.2.0" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-7.1.0-py3-none-any.whl", hash = "sha256:30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570"}, - {file = "importlib_metadata-7.1.0.tar.gz", hash = "sha256:b78938b926ee8d5f020fc4772d487045805a55ddbad2ecf21c6d60938dc7fcd2"}, + {file = "importlib_metadata-8.2.0-py3-none-any.whl", hash = "sha256:11901fa0c2f97919b288679932bb64febaeacf289d18ac84dd68cb2e74213369"}, + {file = "importlib_metadata-8.2.0.tar.gz", hash = "sha256:72e8d4399996132204f9a16dcc751af254a48f8d1b20b9ff0f98d4a8f901e73d"}, ] [package.dependencies] zipp = ">=0.5" [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] -testing = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] +test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] [[package]] name = "iniconfig" @@ -1626,20 +1583,6 @@ files = [ {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, ] -[[package]] -name = "isort" -version = "5.13.2" -description = "A Python utility / library to sort Python imports." -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6"}, - {file = "isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109"}, -] - -[package.extras] -colors = ["colorama (>=0.4.6)"] - [[package]] name = "jinja2" version = "3.1.4" @@ -1834,48 +1777,48 @@ files = [ [[package]] name = "memray" -version = "1.12.0" +version = "1.13.4" description = "A memory profiler for Python applications" optional = false python-versions = ">=3.7.0" files = [ - {file = "memray-1.12.0-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:27b6ad53081b2f588485393df6498be6d07c2331435625472dc6111b265bef44"}, - {file = "memray-1.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:64b4e881262c60768ddfbbf062f3861f2bd0cd04414d4ee4cf4f8834285d3d7c"}, - {file = "memray-1.12.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:df79afd83b4c3b5139c7d47ca1d40f5859d7c5be38759a4a698de181414b7cd6"}, - {file = "memray-1.12.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:28f543f5c42491e233dbcb4c87da4a890cef1634b1cd6d0746092d74dc5adcb0"}, - {file = "memray-1.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9a2ad07e0a0bcf15772f7887a1739e1e0679223ee4025493e0011ef35e30aa75"}, - {file = "memray-1.12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:621ceb522614e0076fdec78ad4d4ef34de6eeb62f63bbdd6a27c56d5ef07bde8"}, - {file = "memray-1.12.0-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:ff94c5471d72e616d9b80f7d5b7839b9de740088f04b2b5a13eb457d571db073"}, - {file = "memray-1.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:21ec3d82f9535dd66bdad2a33aeb46ebc03801b7d9db1f4ca1c96bc96d2c6253"}, - {file = "memray-1.12.0-cp311-cp311-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7ab5d0d7c566fc5f9bec28276a5219b20e6b5df4cdce16e506d9eda6cbb207e1"}, - {file = "memray-1.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7252b98ca98e0ce6f95ad81d161f468ce9ada12e66e64e18e8e7c3b95b203035"}, - {file = "memray-1.12.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3abf058226e72caef0d68f2e850954668305934c20d2ccfef89c3eac2ccf7a40"}, - {file = "memray-1.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3236d5fbc2576847d6c40741b61f6fa2fe5b0079011c4d3843bd9fc3d0b86ba7"}, - {file = "memray-1.12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:df5ac32d9e4458af1a8c7d6864095c8dd3bbbad4978fead3dd2d939368b1606b"}, - {file = "memray-1.12.0-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:22f10a95e74675ce96ae29e968a978e27b9ce466bdcaa322c15edb6ea6ff661a"}, - {file = "memray-1.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fcfe985ce1b019987258a2edb71edc07a38d96d9c0ab28a91880b1e048b68d8e"}, - {file = "memray-1.12.0-cp312-cp312-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ef93e74548d55533f02f7e27417f88e2606f54f5cfd58ed84e0f2d6839e4ad48"}, - {file = "memray-1.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a60d2a70077f091f51d9bacb387d5f3d9db37a409ab6b071398a5b5eccffe3ec"}, - {file = "memray-1.12.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee72ca364f65f8a74da2c16c17ffb6768331fae9a14bec955932d2a3203c389d"}, - {file = "memray-1.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8da8a7088b7b434d77ee40c843c5a66c4c10ded711f876122fb661265a950250"}, - {file = "memray-1.12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:0a43b7ea24db0469b26dd2da6058f24bd0882fae35eaff9eb3dd572234869771"}, - {file = "memray-1.12.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2be213607228a56ee2e9de598cd4b14aded45e19d404fba1945d2008fd4e0bb6"}, - {file = "memray-1.12.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a7fd3e5f614666faa380a3094ac03793ada9c69239ea4a4716e929efaa7d8ff4"}, - {file = "memray-1.12.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57f04aeba911dd082c7c057e79bb338449621e58ae4e885dde05b5a45d6edcac"}, - {file = "memray-1.12.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:dcc2f96f7cdd0a7bbfd86dafad4e76bb6adc4f41560f474185c8722ed6e653d1"}, - {file = "memray-1.12.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:d3367e3748c64797c4986fa543e784067c5de08037621f5f1e628d6fc98cefe5"}, - {file = "memray-1.12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:dee3eff75b6a47841fb58c909723c140e72915de24a712e1ee4c157c3e1b44af"}, - {file = "memray-1.12.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2bdbcd44e31fe27822b1920814f87c9cc305d731d38c5d32d93f5f9bfa797a9e"}, - {file = "memray-1.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:702a502b8c9a2ca64a34605aa32381f94c6443ba6608a6bf877e10f94d342de9"}, - {file = "memray-1.12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8031156adf4a4ab471c5b835bfa773e2d36a3bbf4338236969d8c0b9d76beda"}, - {file = "memray-1.12.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8e0dd3e4440c9d64e174cc9663cb6a8ccefa0f45ee967b4de3c31f1d620008e9"}, - {file = "memray-1.12.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:ae2176753be2157235ad766ec662cd98f1d78de2581b30366942c696b9f8da05"}, - {file = "memray-1.12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f464861ddce2d4322412f2d408b796027716a623ef67ada9e4fb95300691dd52"}, - {file = "memray-1.12.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e6760685eb69997c8684358f1070c7252929b2b0e0863ed9adf7c684dc6cdf99"}, - {file = "memray-1.12.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b2f39ad9fc06ddc6f9e506e05a2e4036a6678447673f9134a1827266485a124b"}, - {file = "memray-1.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5693b6210c51f1e66ce33a8d6a6fb5bd84c83a3fca644244c7f417e74cc93480"}, - {file = "memray-1.12.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bf282a90f0f01ee419d4c184416ae22f7e26450dd80897fb7998633ffde4ffab"}, - {file = "memray-1.12.0.tar.gz", hash = "sha256:3b61c199a60197ae6164a2b44cd828c52de24083ecc49e9ac7d6287686bd68f3"}, + {file = "memray-1.13.4-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:ed0bfcffbd857cbf78a4db942019e9e153019b754048b0522065844d1c538e8c"}, + {file = "memray-1.13.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fcf71802b2c6d68c5336b1e4ae341eab64dcccd0dcf67687af53f18bc020237b"}, + {file = "memray-1.13.4-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6c9ae675131492bdfafcc44e86d0b81401ea8d052a9cab7793b1dab642cd58e6"}, + {file = "memray-1.13.4-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:bac9d30ce39aaee40601087d09c1639a071293f414b5e726a152ed3581d25e50"}, + {file = "memray-1.13.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a437c7e28734028a2f43f942c3146e9737033718cea092ea910f6de3cf46221d"}, + {file = "memray-1.13.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3cae161d5b6769cc3af574cfa0c7ea77f98d6ae714ba5ec508f6f05b84800801"}, + {file = "memray-1.13.4-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:bf407123e175de4f5a7264886eb64ea514f4b388b617f05dfcd857d99ecadd1c"}, + {file = "memray-1.13.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a6f1bd3d0adf84f864e24f74552c1533224e64283dfee33641011acf384fc138"}, + {file = "memray-1.13.4-cp311-cp311-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ba5bb9a3b7c3c08752f3b55a3b5b360963c9f666e2220eb388ab6f7d1271d843"}, + {file = "memray-1.13.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1e8cec70e51e81c0e9448e62a5366914b74a3dbb60826cdec8f0e7559e58e74"}, + {file = "memray-1.13.4-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:81497e578017feb57a46e19c349450888e57ff7fb8f0f5134d3e07605c435500"}, + {file = "memray-1.13.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e585d866c82ce92060fa1c925298aa8b89936ca22df9698a25a5f0cf7ca81fa2"}, + {file = "memray-1.13.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3d048da01dc138711a2c9c70ba693d186690c98fb0ca26fdc3483486d4849238"}, + {file = "memray-1.13.4-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:b6459761046ab46638d2c62d7f3f55eaaf45a947bd1d36dcfb5e860047280557"}, + {file = "memray-1.13.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:637651f5ca2870e9156f189c337e8c6d0002e3f6f7d44d6486ff5baf12a6115e"}, + {file = "memray-1.13.4-cp312-cp312-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d5b9e10fde6f652ea176cbc0d4d4c563d2831faec4434d3e03c4c0aff8ddc6c0"}, + {file = "memray-1.13.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1f3ab803b703b9be29259039caf43803ad5abf37f04e77cd9e8373054dd91f6"}, + {file = "memray-1.13.4-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bfdc070da2df9241f78b7429d44f6ee16e924d43eddc587f6ed7218c4cb792d3"}, + {file = "memray-1.13.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:523a63dee71cd4d55eddca866244a045e7549ca5137ec906c62893b87a2161ce"}, + {file = "memray-1.13.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3bf06f8883a26b779cc828addad97a2d39d7587263e348655dae3ec90b6ee079"}, + {file = "memray-1.13.4-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ee47b798d5712faa2a38ff60b5c77f73ed8342709e15bd6ed3a46edd9feee089"}, + {file = "memray-1.13.4-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:daed9ae6ceea6a4dcc96ac62cfa00d90f7365ed54ee90886e5287251855a2c02"}, + {file = "memray-1.13.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc194c5564f5b33d33bbbeca54b0e3f637d985a144c3551f887bf668d896ffec"}, + {file = "memray-1.13.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:554cda50101a14e1bca2453bd1013949cdc4ebcd4709065139955578f8b0c354"}, + {file = "memray-1.13.4-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:e3e261995acc40f8bd4a10740b25f37eccc3e413449ceb73263216ec3c6fee7b"}, + {file = "memray-1.13.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5e8ef7cc755a5a3a4b5d9991cf70428220e9138bc5967b5764b2fa7a1fb4d7a6"}, + {file = "memray-1.13.4-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:7c8ea410c842a31ee07e76b409c273d23e0b670d166c2330488d1164ab42a4d1"}, + {file = "memray-1.13.4-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:22c9656c78a50b4569a8273d062cc6c139e9f7cfec3f793e60ef7e0cb46c2a76"}, + {file = "memray-1.13.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7096401ff3b7ce5f759e45bd71b0899ad50a607924ee23ad02423aa4fa505f52"}, + {file = "memray-1.13.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2072a454846e055d5833d17b1f5e6106ae18e425974c3968276a1952b0156f2b"}, + {file = "memray-1.13.4-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:f19fb4a20d796af869691531d2d6540d27bfbf0df9118bd17e547a23224a8b3e"}, + {file = "memray-1.13.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b1331de55aab1c409ec295b155770487004e0c6d08db0fe903e9377be978bacd"}, + {file = "memray-1.13.4-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f43bfa96114012d76025a0ee42206c7d914b6113c491dc221e1b7a901c51242a"}, + {file = "memray-1.13.4-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e0cc6299a09d3c51fd1a45bd816e9dd68a7092a3eaf62aeaa2ee01068f2a1d0b"}, + {file = "memray-1.13.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4cbaa39bf7041e32282ad84a9fd9bd98622f78f649ccb7d1075382fed84e8125"}, + {file = "memray-1.13.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:59bba975fbbced85fe6f61685aef459777faf3b8a5b4f0de4fa5b99cf6f1a5e7"}, + {file = "memray-1.13.4.tar.gz", hash = "sha256:48f8f9b89b3a84028668244151eb7248189fb3f4f2a761ec1211439adcbb2ad1"}, ] [package.dependencies] @@ -1885,10 +1828,10 @@ textual = ">=0.41.0" [package.extras] benchmark = ["asv"] -dev = ["Cython", "IPython", "asv", "black", "bump2version", "check-manifest", "flake8", "furo", "greenlet", "ipython", "isort", "mypy", "pytest", "pytest-cov", "pytest-textual-snapshot", "setuptools", "sphinx", "sphinx-argparse", "towncrier"] +dev = ["Cython", "asv", "black", "bump2version", "check-manifest", "flake8", "furo", "greenlet", "ipython", "isort", "mypy", "pytest", "pytest-cov", "pytest-textual-snapshot", "setuptools", "sphinx", "sphinx-argparse", "textual (>=0.43,!=0.65.2,!=0.66)", "towncrier"] docs = ["IPython", "bump2version", "furo", "sphinx", "sphinx-argparse", "towncrier"] lint = ["black", "check-manifest", "flake8", "isort", "mypy"] -test = ["Cython", "greenlet", "ipython", "pytest", "pytest-cov", "pytest-textual-snapshot", "setuptools"] +test = ["Cython", "greenlet", "ipython", "pytest", "pytest-cov", "pytest-textual-snapshot", "setuptools", "textual (>=0.43,!=0.65.2,!=0.66)"] [[package]] name = "msgpack" @@ -2054,92 +1997,86 @@ files = [ {file = "multidict-6.0.5.tar.gz", hash = "sha256:f7e301075edaf50500f0b341543c41194d8df3ae5caf4702f2095f3ca73dd8da"}, ] -[[package]] -name = "mypy-extensions" -version = "1.0.0" -description = "Type system extensions for programs checked with the mypy type checker." -optional = false -python-versions = ">=3.5" -files = [ - {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, - {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, -] - [[package]] name = "nodeenv" -version = "1.9.0" +version = "1.9.1" description = "Node.js virtual environment builder" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ - {file = "nodeenv-1.9.0-py2.py3-none-any.whl", hash = "sha256:508ecec98f9f3330b636d4448c0f1a56fc68017c68f1e7857ebc52acf0eb879a"}, - {file = "nodeenv-1.9.0.tar.gz", hash = "sha256:07f144e90dae547bf0d4ee8da0ee42664a42a04e02ed68e06324348dafe4bdb1"}, + {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, + {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, ] [[package]] name = "orjson" -version = "3.10.3" +version = "3.10.6" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" files = [ - {file = "orjson-3.10.3-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9fb6c3f9f5490a3eb4ddd46fc1b6eadb0d6fc16fb3f07320149c3286a1409dd8"}, - {file = "orjson-3.10.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:252124b198662eee80428f1af8c63f7ff077c88723fe206a25df8dc57a57b1fa"}, - {file = "orjson-3.10.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9f3e87733823089a338ef9bbf363ef4de45e5c599a9bf50a7a9b82e86d0228da"}, - {file = "orjson-3.10.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c8334c0d87103bb9fbbe59b78129f1f40d1d1e8355bbed2ca71853af15fa4ed3"}, - {file = "orjson-3.10.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1952c03439e4dce23482ac846e7961f9d4ec62086eb98ae76d97bd41d72644d7"}, - {file = "orjson-3.10.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c0403ed9c706dcd2809f1600ed18f4aae50be263bd7112e54b50e2c2bc3ebd6d"}, - {file = "orjson-3.10.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:382e52aa4270a037d41f325e7d1dfa395b7de0c367800b6f337d8157367bf3a7"}, - {file = "orjson-3.10.3-cp310-none-win32.whl", hash = "sha256:be2aab54313752c04f2cbaab4515291ef5af8c2256ce22abc007f89f42f49109"}, - {file = "orjson-3.10.3-cp310-none-win_amd64.whl", hash = "sha256:416b195f78ae461601893f482287cee1e3059ec49b4f99479aedf22a20b1098b"}, - {file = "orjson-3.10.3-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:73100d9abbbe730331f2242c1fc0bcb46a3ea3b4ae3348847e5a141265479700"}, - {file = "orjson-3.10.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:544a12eee96e3ab828dbfcb4d5a0023aa971b27143a1d35dc214c176fdfb29b3"}, - {file = "orjson-3.10.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:520de5e2ef0b4ae546bea25129d6c7c74edb43fc6cf5213f511a927f2b28148b"}, - {file = "orjson-3.10.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ccaa0a401fc02e8828a5bedfd80f8cd389d24f65e5ca3954d72c6582495b4bcf"}, - {file = "orjson-3.10.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a7bc9e8bc11bac40f905640acd41cbeaa87209e7e1f57ade386da658092dc16"}, - {file = "orjson-3.10.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3582b34b70543a1ed6944aca75e219e1192661a63da4d039d088a09c67543b08"}, - {file = "orjson-3.10.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1c23dfa91481de880890d17aa7b91d586a4746a4c2aa9a145bebdbaf233768d5"}, - {file = "orjson-3.10.3-cp311-none-win32.whl", hash = "sha256:1770e2a0eae728b050705206d84eda8b074b65ee835e7f85c919f5705b006c9b"}, - {file = "orjson-3.10.3-cp311-none-win_amd64.whl", hash = "sha256:93433b3c1f852660eb5abdc1f4dd0ced2be031ba30900433223b28ee0140cde5"}, - {file = "orjson-3.10.3-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:a39aa73e53bec8d410875683bfa3a8edf61e5a1c7bb4014f65f81d36467ea098"}, - {file = "orjson-3.10.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0943a96b3fa09bee1afdfccc2cb236c9c64715afa375b2af296c73d91c23eab2"}, - {file = "orjson-3.10.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e852baafceff8da3c9defae29414cc8513a1586ad93e45f27b89a639c68e8176"}, - {file = "orjson-3.10.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18566beb5acd76f3769c1d1a7ec06cdb81edc4d55d2765fb677e3eaa10fa99e0"}, - {file = "orjson-3.10.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bd2218d5a3aa43060efe649ec564ebedec8ce6ae0a43654b81376216d5ebd42"}, - {file = "orjson-3.10.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cf20465e74c6e17a104ecf01bf8cd3b7b252565b4ccee4548f18b012ff2f8069"}, - {file = "orjson-3.10.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ba7f67aa7f983c4345eeda16054a4677289011a478ca947cd69c0a86ea45e534"}, - {file = "orjson-3.10.3-cp312-none-win32.whl", hash = "sha256:17e0713fc159abc261eea0f4feda611d32eabc35708b74bef6ad44f6c78d5ea0"}, - {file = "orjson-3.10.3-cp312-none-win_amd64.whl", hash = "sha256:4c895383b1ec42b017dd2c75ae8a5b862fc489006afde06f14afbdd0309b2af0"}, - {file = "orjson-3.10.3-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:be2719e5041e9fb76c8c2c06b9600fe8e8584e6980061ff88dcbc2691a16d20d"}, - {file = "orjson-3.10.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0175a5798bdc878956099f5c54b9837cb62cfbf5d0b86ba6d77e43861bcec2"}, - {file = "orjson-3.10.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:978be58a68ade24f1af7758626806e13cff7748a677faf95fbb298359aa1e20d"}, - {file = "orjson-3.10.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16bda83b5c61586f6f788333d3cf3ed19015e3b9019188c56983b5a299210eb5"}, - {file = "orjson-3.10.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ad1f26bea425041e0a1adad34630c4825a9e3adec49079b1fb6ac8d36f8b754"}, - {file = "orjson-3.10.3-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:9e253498bee561fe85d6325ba55ff2ff08fb5e7184cd6a4d7754133bd19c9195"}, - {file = "orjson-3.10.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0a62f9968bab8a676a164263e485f30a0b748255ee2f4ae49a0224be95f4532b"}, - {file = "orjson-3.10.3-cp38-none-win32.whl", hash = "sha256:8d0b84403d287d4bfa9bf7d1dc298d5c1c5d9f444f3737929a66f2fe4fb8f134"}, - {file = "orjson-3.10.3-cp38-none-win_amd64.whl", hash = "sha256:8bc7a4df90da5d535e18157220d7915780d07198b54f4de0110eca6b6c11e290"}, - {file = "orjson-3.10.3-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9059d15c30e675a58fdcd6f95465c1522b8426e092de9fff20edebfdc15e1cb0"}, - {file = "orjson-3.10.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d40c7f7938c9c2b934b297412c067936d0b54e4b8ab916fd1a9eb8f54c02294"}, - {file = "orjson-3.10.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d4a654ec1de8fdaae1d80d55cee65893cb06494e124681ab335218be6a0691e7"}, - {file = "orjson-3.10.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:831c6ef73f9aa53c5f40ae8f949ff7681b38eaddb6904aab89dca4d85099cb78"}, - {file = "orjson-3.10.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99b880d7e34542db89f48d14ddecbd26f06838b12427d5a25d71baceb5ba119d"}, - {file = "orjson-3.10.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2e5e176c994ce4bd434d7aafb9ecc893c15f347d3d2bbd8e7ce0b63071c52e25"}, - {file = "orjson-3.10.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b69a58a37dab856491bf2d3bbf259775fdce262b727f96aafbda359cb1d114d8"}, - {file = "orjson-3.10.3-cp39-none-win32.whl", hash = "sha256:b8d4d1a6868cde356f1402c8faeb50d62cee765a1f7ffcfd6de732ab0581e063"}, - {file = "orjson-3.10.3-cp39-none-win_amd64.whl", hash = "sha256:5102f50c5fc46d94f2033fe00d392588564378260d64377aec702f21a7a22912"}, - {file = "orjson-3.10.3.tar.gz", hash = "sha256:2b166507acae7ba2f7c315dcf185a9111ad5e992ac81f2d507aac39193c2c818"}, + {file = "orjson-3.10.6-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:fb0ee33124db6eaa517d00890fc1a55c3bfe1cf78ba4a8899d71a06f2d6ff5c7"}, + {file = "orjson-3.10.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c1c4b53b24a4c06547ce43e5fee6ec4e0d8fe2d597f4647fc033fd205707365"}, + {file = "orjson-3.10.6-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eadc8fd310edb4bdbd333374f2c8fec6794bbbae99b592f448d8214a5e4050c0"}, + {file = "orjson-3.10.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:61272a5aec2b2661f4fa2b37c907ce9701e821b2c1285d5c3ab0207ebd358d38"}, + {file = "orjson-3.10.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57985ee7e91d6214c837936dc1608f40f330a6b88bb13f5a57ce5257807da143"}, + {file = "orjson-3.10.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:633a3b31d9d7c9f02d49c4ab4d0a86065c4a6f6adc297d63d272e043472acab5"}, + {file = "orjson-3.10.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1c680b269d33ec444afe2bdc647c9eb73166fa47a16d9a75ee56a374f4a45f43"}, + {file = "orjson-3.10.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f759503a97a6ace19e55461395ab0d618b5a117e8d0fbb20e70cfd68a47327f2"}, + {file = "orjson-3.10.6-cp310-none-win32.whl", hash = "sha256:95a0cce17f969fb5391762e5719575217bd10ac5a189d1979442ee54456393f3"}, + {file = "orjson-3.10.6-cp310-none-win_amd64.whl", hash = "sha256:df25d9271270ba2133cc88ee83c318372bdc0f2cd6f32e7a450809a111efc45c"}, + {file = "orjson-3.10.6-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:b1ec490e10d2a77c345def52599311849fc063ae0e67cf4f84528073152bb2ba"}, + {file = "orjson-3.10.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55d43d3feb8f19d07e9f01e5b9be4f28801cf7c60d0fa0d279951b18fae1932b"}, + {file = "orjson-3.10.6-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac3045267e98fe749408eee1593a142e02357c5c99be0802185ef2170086a863"}, + {file = "orjson-3.10.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c27bc6a28ae95923350ab382c57113abd38f3928af3c80be6f2ba7eb8d8db0b0"}, + {file = "orjson-3.10.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d27456491ca79532d11e507cadca37fb8c9324a3976294f68fb1eff2dc6ced5a"}, + {file = "orjson-3.10.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05ac3d3916023745aa3b3b388e91b9166be1ca02b7c7e41045da6d12985685f0"}, + {file = "orjson-3.10.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1335d4ef59ab85cab66fe73fd7a4e881c298ee7f63ede918b7faa1b27cbe5212"}, + {file = "orjson-3.10.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4bbc6d0af24c1575edc79994c20e1b29e6fb3c6a570371306db0993ecf144dc5"}, + {file = "orjson-3.10.6-cp311-none-win32.whl", hash = "sha256:450e39ab1f7694465060a0550b3f6d328d20297bf2e06aa947b97c21e5241fbd"}, + {file = "orjson-3.10.6-cp311-none-win_amd64.whl", hash = "sha256:227df19441372610b20e05bdb906e1742ec2ad7a66ac8350dcfd29a63014a83b"}, + {file = "orjson-3.10.6-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ea2977b21f8d5d9b758bb3f344a75e55ca78e3ff85595d248eee813ae23ecdfb"}, + {file = "orjson-3.10.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b6f3d167d13a16ed263b52dbfedff52c962bfd3d270b46b7518365bcc2121eed"}, + {file = "orjson-3.10.6-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f710f346e4c44a4e8bdf23daa974faede58f83334289df80bc9cd12fe82573c7"}, + {file = "orjson-3.10.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7275664f84e027dcb1ad5200b8b18373e9c669b2a9ec33d410c40f5ccf4b257e"}, + {file = "orjson-3.10.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0943e4c701196b23c240b3d10ed8ecd674f03089198cf503105b474a4f77f21f"}, + {file = "orjson-3.10.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:446dee5a491b5bc7d8f825d80d9637e7af43f86a331207b9c9610e2f93fee22a"}, + {file = "orjson-3.10.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:64c81456d2a050d380786413786b057983892db105516639cb5d3ee3c7fd5148"}, + {file = "orjson-3.10.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:960db0e31c4e52fa0fc3ecbaea5b2d3b58f379e32a95ae6b0ebeaa25b93dfd34"}, + {file = "orjson-3.10.6-cp312-none-win32.whl", hash = "sha256:a6ea7afb5b30b2317e0bee03c8d34c8181bc5a36f2afd4d0952f378972c4efd5"}, + {file = "orjson-3.10.6-cp312-none-win_amd64.whl", hash = "sha256:874ce88264b7e655dde4aeaacdc8fd772a7962faadfb41abe63e2a4861abc3dc"}, + {file = "orjson-3.10.6-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:66680eae4c4e7fc193d91cfc1353ad6d01b4801ae9b5314f17e11ba55e934183"}, + {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:caff75b425db5ef8e8f23af93c80f072f97b4fb3afd4af44482905c9f588da28"}, + {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3722fddb821b6036fd2a3c814f6bd9b57a89dc6337b9924ecd614ebce3271394"}, + {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c2c116072a8533f2fec435fde4d134610f806bdac20188c7bd2081f3e9e0133f"}, + {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6eeb13218c8cf34c61912e9df2de2853f1d009de0e46ea09ccdf3d757896af0a"}, + {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:965a916373382674e323c957d560b953d81d7a8603fbeee26f7b8248638bd48b"}, + {file = "orjson-3.10.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:03c95484d53ed8e479cade8628c9cea00fd9d67f5554764a1110e0d5aa2de96e"}, + {file = "orjson-3.10.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:e060748a04cccf1e0a6f2358dffea9c080b849a4a68c28b1b907f272b5127e9b"}, + {file = "orjson-3.10.6-cp38-none-win32.whl", hash = "sha256:738dbe3ef909c4b019d69afc19caf6b5ed0e2f1c786b5d6215fbb7539246e4c6"}, + {file = "orjson-3.10.6-cp38-none-win_amd64.whl", hash = "sha256:d40f839dddf6a7d77114fe6b8a70218556408c71d4d6e29413bb5f150a692ff7"}, + {file = "orjson-3.10.6-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:697a35a083c4f834807a6232b3e62c8b280f7a44ad0b759fd4dce748951e70db"}, + {file = "orjson-3.10.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd502f96bf5ea9a61cbc0b2b5900d0dd68aa0da197179042bdd2be67e51a1e4b"}, + {file = "orjson-3.10.6-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f215789fb1667cdc874c1b8af6a84dc939fd802bf293a8334fce185c79cd359b"}, + {file = "orjson-3.10.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a2debd8ddce948a8c0938c8c93ade191d2f4ba4649a54302a7da905a81f00b56"}, + {file = "orjson-3.10.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5410111d7b6681d4b0d65e0f58a13be588d01b473822483f77f513c7f93bd3b2"}, + {file = "orjson-3.10.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb1f28a137337fdc18384079fa5726810681055b32b92253fa15ae5656e1dddb"}, + {file = "orjson-3.10.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:bf2fbbce5fe7cd1aa177ea3eab2b8e6a6bc6e8592e4279ed3db2d62e57c0e1b2"}, + {file = "orjson-3.10.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:79b9b9e33bd4c517445a62b90ca0cc279b0f1f3970655c3df9e608bc3f91741a"}, + {file = "orjson-3.10.6-cp39-none-win32.whl", hash = "sha256:30b0a09a2014e621b1adf66a4f705f0809358350a757508ee80209b2d8dae219"}, + {file = "orjson-3.10.6-cp39-none-win_amd64.whl", hash = "sha256:49e3bc615652617d463069f91b867a4458114c5b104e13b7ae6872e5f79d0844"}, + {file = "orjson-3.10.6.tar.gz", hash = "sha256:e54b63d0a7c6c54a5f5f726bc93a2078111ef060fec4ecbf34c5db800ca3b3a7"}, ] [[package]] name = "packaging" -version = "24.0" +version = "24.1" description = "Core utilities for Python packages" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"}, - {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, + {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, + {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, ] [[package]] @@ -2156,17 +2093,6 @@ files = [ [package.dependencies] regex = ">=2022.3.15" -[[package]] -name = "pathspec" -version = "0.12.1" -description = "Utility library for gitignore style pattern matching of file paths." -optional = false -python-versions = ">=3.8" -files = [ - {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, - {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, -] - [[package]] name = "platformdirs" version = "4.2.2" @@ -2218,36 +2144,36 @@ virtualenv = ">=20.10.0" [[package]] name = "psycopg" -version = "3.1.19" +version = "3.2.1" description = "PostgreSQL database adapter for Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "psycopg-3.1.19-py3-none-any.whl", hash = "sha256:dca5e5521c859f6606686432ae1c94e8766d29cc91f2ee595378c510cc5b0731"}, - {file = "psycopg-3.1.19.tar.gz", hash = "sha256:92d7b78ad82426cdcf1a0440678209faa890c6e1721361c2f8901f0dccd62961"}, + {file = "psycopg-3.2.1-py3-none-any.whl", hash = "sha256:ece385fb413a37db332f97c49208b36cf030ff02b199d7635ed2fbd378724175"}, + {file = "psycopg-3.2.1.tar.gz", hash = "sha256:dc8da6dc8729dacacda3cc2f17d2c9397a70a66cf0d2b69c91065d60d5f00cb7"}, ] [package.dependencies] -psycopg-c = {version = "3.1.19", optional = true, markers = "implementation_name != \"pypy\" and extra == \"c\""} -typing-extensions = ">=4.1" +psycopg-c = {version = "3.2.1", optional = true, markers = "implementation_name != \"pypy\" and extra == \"c\""} +typing-extensions = ">=4.4" tzdata = {version = "*", markers = "sys_platform == \"win32\""} [package.extras] -binary = ["psycopg-binary (==3.1.19)"] -c = ["psycopg-c (==3.1.19)"] -dev = ["black (>=24.1.0)", "codespell (>=2.2)", "dnspython (>=2.1)", "flake8 (>=4.0)", "mypy (>=1.4.1)", "types-setuptools (>=57.4)", "wheel (>=0.37)"] +binary = ["psycopg-binary (==3.2.1)"] +c = ["psycopg-c (==3.2.1)"] +dev = ["ast-comments (>=1.1.2)", "black (>=24.1.0)", "codespell (>=2.2)", "dnspython (>=2.1)", "flake8 (>=4.0)", "mypy (>=1.6)", "types-setuptools (>=57.4)", "wheel (>=0.37)"] docs = ["Sphinx (>=5.0)", "furo (==2022.6.21)", "sphinx-autobuild (>=2021.3.14)", "sphinx-autodoc-typehints (>=1.12)"] pool = ["psycopg-pool"] -test = ["anyio (>=3.6.2,<4.0)", "mypy (>=1.4.1)", "pproxy (>=2.7)", "pytest (>=6.2.5)", "pytest-cov (>=3.0)", "pytest-randomly (>=3.5)"] +test = ["anyio (>=4.0)", "mypy (>=1.6)", "pproxy (>=2.7)", "pytest (>=6.2.5)", "pytest-cov (>=3.0)", "pytest-randomly (>=3.5)"] [[package]] name = "psycopg-c" -version = "3.1.19" +version = "3.2.1" description = "PostgreSQL database adapter for Python -- C optimisation distribution" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "psycopg_c-3.1.19.tar.gz", hash = "sha256:8e90f53c430e7d661cb3a9298e2761847212ead1b24c5fb058fc9d0fd9616017"}, + {file = "psycopg_c-3.2.1.tar.gz", hash = "sha256:2d09943cc8a855c42c1e23b4298957b7ce8f27bf3683258c52fd139f601f7cda"}, ] [[package]] @@ -2304,18 +2230,18 @@ files = [ [[package]] name = "pydantic" -version = "2.7.2" +version = "2.7.4" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.7.2-py3-none-any.whl", hash = "sha256:834ab954175f94e6e68258537dc49402c4a5e9d0409b9f1b86b7e934a8372de7"}, - {file = "pydantic-2.7.2.tar.gz", hash = "sha256:71b2945998f9c9b7919a45bde9a50397b289937d215ae141c1d0903ba7149fd7"}, + {file = "pydantic-2.7.4-py3-none-any.whl", hash = "sha256:ee8538d41ccb9c0a9ad3e0e5f07bf15ed8015b481ced539a1759d8cc89ae90d0"}, + {file = "pydantic-2.7.4.tar.gz", hash = "sha256:0c84efd9548d545f63ac0060c1e4d39bb9b14db8b3c0652338aecc07b5adec52"}, ] [package.dependencies] annotated-types = ">=0.4.0" -pydantic-core = "2.18.3" +pydantic-core = "2.18.4" typing-extensions = ">=4.6.1" [package.extras] @@ -2323,90 +2249,90 @@ email = ["email-validator (>=2.0.0)"] [[package]] name = "pydantic-core" -version = "2.18.3" +version = "2.18.4" description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_core-2.18.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:744697428fcdec6be5670460b578161d1ffe34743a5c15656be7ea82b008197c"}, - {file = "pydantic_core-2.18.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:37b40c05ced1ba4218b14986fe6f283d22e1ae2ff4c8e28881a70fb81fbfcda7"}, - {file = "pydantic_core-2.18.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:544a9a75622357076efb6b311983ff190fbfb3c12fc3a853122b34d3d358126c"}, - {file = "pydantic_core-2.18.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e2e253af04ceaebde8eb201eb3f3e3e7e390f2d275a88300d6a1959d710539e2"}, - {file = "pydantic_core-2.18.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:855ec66589c68aa367d989da5c4755bb74ee92ccad4fdb6af942c3612c067e34"}, - {file = "pydantic_core-2.18.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d3e42bb54e7e9d72c13ce112e02eb1b3b55681ee948d748842171201a03a98a"}, - {file = "pydantic_core-2.18.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c6ac9ffccc9d2e69d9fba841441d4259cb668ac180e51b30d3632cd7abca2b9b"}, - {file = "pydantic_core-2.18.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c56eca1686539fa0c9bda992e7bd6a37583f20083c37590413381acfc5f192d6"}, - {file = "pydantic_core-2.18.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:17954d784bf8abfc0ec2a633108207ebc4fa2df1a0e4c0c3ccbaa9bb01d2c426"}, - {file = "pydantic_core-2.18.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:98ed737567d8f2ecd54f7c8d4f8572ca7c7921ede93a2e52939416170d357812"}, - {file = "pydantic_core-2.18.3-cp310-none-win32.whl", hash = "sha256:9f9e04afebd3ed8c15d67a564ed0a34b54e52136c6d40d14c5547b238390e779"}, - {file = "pydantic_core-2.18.3-cp310-none-win_amd64.whl", hash = "sha256:45e4ffbae34f7ae30d0047697e724e534a7ec0a82ef9994b7913a412c21462a0"}, - {file = "pydantic_core-2.18.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:b9ebe8231726c49518b16b237b9fe0d7d361dd221302af511a83d4ada01183ab"}, - {file = "pydantic_core-2.18.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b8e20e15d18bf7dbb453be78a2d858f946f5cdf06c5072453dace00ab652e2b2"}, - {file = "pydantic_core-2.18.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c0d9ff283cd3459fa0bf9b0256a2b6f01ac1ff9ffb034e24457b9035f75587cb"}, - {file = "pydantic_core-2.18.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2f7ef5f0ebb77ba24c9970da18b771711edc5feaf00c10b18461e0f5f5949231"}, - {file = "pydantic_core-2.18.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73038d66614d2e5cde30435b5afdced2b473b4c77d4ca3a8624dd3e41a9c19be"}, - {file = "pydantic_core-2.18.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6afd5c867a74c4d314c557b5ea9520183fadfbd1df4c2d6e09fd0d990ce412cd"}, - {file = "pydantic_core-2.18.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd7df92f28d351bb9f12470f4c533cf03d1b52ec5a6e5c58c65b183055a60106"}, - {file = "pydantic_core-2.18.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:80aea0ffeb1049336043d07799eace1c9602519fb3192916ff525b0287b2b1e4"}, - {file = "pydantic_core-2.18.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:aaee40f25bba38132e655ffa3d1998a6d576ba7cf81deff8bfa189fb43fd2bbe"}, - {file = "pydantic_core-2.18.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9128089da8f4fe73f7a91973895ebf2502539d627891a14034e45fb9e707e26d"}, - {file = "pydantic_core-2.18.3-cp311-none-win32.whl", hash = "sha256:fec02527e1e03257aa25b1a4dcbe697b40a22f1229f5d026503e8b7ff6d2eda7"}, - {file = "pydantic_core-2.18.3-cp311-none-win_amd64.whl", hash = "sha256:58ff8631dbab6c7c982e6425da8347108449321f61fe427c52ddfadd66642af7"}, - {file = "pydantic_core-2.18.3-cp311-none-win_arm64.whl", hash = "sha256:3fc1c7f67f34c6c2ef9c213e0f2a351797cda98249d9ca56a70ce4ebcaba45f4"}, - {file = "pydantic_core-2.18.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f0928cde2ae416a2d1ebe6dee324709c6f73e93494d8c7aea92df99aab1fc40f"}, - {file = "pydantic_core-2.18.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0bee9bb305a562f8b9271855afb6ce00223f545de3d68560b3c1649c7c5295e9"}, - {file = "pydantic_core-2.18.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e862823be114387257dacbfa7d78547165a85d7add33b446ca4f4fae92c7ff5c"}, - {file = "pydantic_core-2.18.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6a36f78674cbddc165abab0df961b5f96b14461d05feec5e1f78da58808b97e7"}, - {file = "pydantic_core-2.18.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba905d184f62e7ddbb7a5a751d8a5c805463511c7b08d1aca4a3e8c11f2e5048"}, - {file = "pydantic_core-2.18.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7fdd362f6a586e681ff86550b2379e532fee63c52def1c666887956748eaa326"}, - {file = "pydantic_core-2.18.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24b214b7ee3bd3b865e963dbed0f8bc5375f49449d70e8d407b567af3222aae4"}, - {file = "pydantic_core-2.18.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:691018785779766127f531674fa82bb368df5b36b461622b12e176c18e119022"}, - {file = "pydantic_core-2.18.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:60e4c625e6f7155d7d0dcac151edf5858102bc61bf959d04469ca6ee4e8381bd"}, - {file = "pydantic_core-2.18.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a4e651e47d981c1b701dcc74ab8fec5a60a5b004650416b4abbef13db23bc7be"}, - {file = "pydantic_core-2.18.3-cp312-none-win32.whl", hash = "sha256:ffecbb5edb7f5ffae13599aec33b735e9e4c7676ca1633c60f2c606beb17efc5"}, - {file = "pydantic_core-2.18.3-cp312-none-win_amd64.whl", hash = "sha256:2c8333f6e934733483c7eddffdb094c143b9463d2af7e6bd85ebcb2d4a1b82c6"}, - {file = "pydantic_core-2.18.3-cp312-none-win_arm64.whl", hash = "sha256:7a20dded653e516a4655f4c98e97ccafb13753987434fe7cf044aa25f5b7d417"}, - {file = "pydantic_core-2.18.3-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:eecf63195be644b0396f972c82598cd15693550f0ff236dcf7ab92e2eb6d3522"}, - {file = "pydantic_core-2.18.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2c44efdd3b6125419c28821590d7ec891c9cb0dff33a7a78d9d5c8b6f66b9702"}, - {file = "pydantic_core-2.18.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e59fca51ffbdd1638b3856779342ed69bcecb8484c1d4b8bdb237d0eb5a45e2"}, - {file = "pydantic_core-2.18.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:70cf099197d6b98953468461d753563b28e73cf1eade2ffe069675d2657ed1d5"}, - {file = "pydantic_core-2.18.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:63081a49dddc6124754b32a3774331467bfc3d2bd5ff8f10df36a95602560361"}, - {file = "pydantic_core-2.18.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:370059b7883485c9edb9655355ff46d912f4b03b009d929220d9294c7fd9fd60"}, - {file = "pydantic_core-2.18.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a64faeedfd8254f05f5cf6fc755023a7e1606af3959cfc1a9285744cc711044"}, - {file = "pydantic_core-2.18.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:19d2e725de0f90d8671f89e420d36c3dd97639b98145e42fcc0e1f6d492a46dc"}, - {file = "pydantic_core-2.18.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:67bc078025d70ec5aefe6200ef094576c9d86bd36982df1301c758a9fff7d7f4"}, - {file = "pydantic_core-2.18.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:adf952c3f4100e203cbaf8e0c907c835d3e28f9041474e52b651761dc248a3c0"}, - {file = "pydantic_core-2.18.3-cp38-none-win32.whl", hash = "sha256:9a46795b1f3beb167eaee91736d5d17ac3a994bf2215a996aed825a45f897558"}, - {file = "pydantic_core-2.18.3-cp38-none-win_amd64.whl", hash = "sha256:200ad4e3133cb99ed82342a101a5abf3d924722e71cd581cc113fe828f727fbc"}, - {file = "pydantic_core-2.18.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:304378b7bf92206036c8ddd83a2ba7b7d1a5b425acafff637172a3aa72ad7083"}, - {file = "pydantic_core-2.18.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c826870b277143e701c9ccf34ebc33ddb4d072612683a044e7cce2d52f6c3fef"}, - {file = "pydantic_core-2.18.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e201935d282707394f3668380e41ccf25b5794d1b131cdd96b07f615a33ca4b1"}, - {file = "pydantic_core-2.18.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5560dda746c44b48bf82b3d191d74fe8efc5686a9ef18e69bdabccbbb9ad9442"}, - {file = "pydantic_core-2.18.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6b32c2a1f8032570842257e4c19288eba9a2bba4712af542327de9a1204faff8"}, - {file = "pydantic_core-2.18.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:929c24e9dea3990bc8bcd27c5f2d3916c0c86f5511d2caa69e0d5290115344a9"}, - {file = "pydantic_core-2.18.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1a8376fef60790152564b0eab376b3e23dd6e54f29d84aad46f7b264ecca943"}, - {file = "pydantic_core-2.18.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dccf3ef1400390ddd1fb55bf0632209d39140552d068ee5ac45553b556780e06"}, - {file = "pydantic_core-2.18.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:41dbdcb0c7252b58fa931fec47937edb422c9cb22528f41cb8963665c372caf6"}, - {file = "pydantic_core-2.18.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:666e45cf071669fde468886654742fa10b0e74cd0fa0430a46ba6056b24fb0af"}, - {file = "pydantic_core-2.18.3-cp39-none-win32.whl", hash = "sha256:f9c08cabff68704a1b4667d33f534d544b8a07b8e5d039c37067fceb18789e78"}, - {file = "pydantic_core-2.18.3-cp39-none-win_amd64.whl", hash = "sha256:4afa5f5973e8572b5c0dcb4e2d4fda7890e7cd63329bd5cc3263a25c92ef0026"}, - {file = "pydantic_core-2.18.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:77319771a026f7c7d29c6ebc623de889e9563b7087911b46fd06c044a12aa5e9"}, - {file = "pydantic_core-2.18.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:df11fa992e9f576473038510d66dd305bcd51d7dd508c163a8c8fe148454e059"}, - {file = "pydantic_core-2.18.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d531076bdfb65af593326ffd567e6ab3da145020dafb9187a1d131064a55f97c"}, - {file = "pydantic_core-2.18.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d33ce258e4e6e6038f2b9e8b8a631d17d017567db43483314993b3ca345dcbbb"}, - {file = "pydantic_core-2.18.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1f9cd7f5635b719939019be9bda47ecb56e165e51dd26c9a217a433e3d0d59a9"}, - {file = "pydantic_core-2.18.3-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:cd4a032bb65cc132cae1fe3e52877daecc2097965cd3914e44fbd12b00dae7c5"}, - {file = "pydantic_core-2.18.3-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:82f2718430098bcdf60402136c845e4126a189959d103900ebabb6774a5d9fdb"}, - {file = "pydantic_core-2.18.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:c0037a92cf0c580ed14e10953cdd26528e8796307bb8bb312dc65f71547df04d"}, - {file = "pydantic_core-2.18.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b95a0972fac2b1ff3c94629fc9081b16371dad870959f1408cc33b2f78ad347a"}, - {file = "pydantic_core-2.18.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a62e437d687cc148381bdd5f51e3e81f5b20a735c55f690c5be94e05da2b0d5c"}, - {file = "pydantic_core-2.18.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b367a73a414bbb08507da102dc2cde0fa7afe57d09b3240ce82a16d608a7679c"}, - {file = "pydantic_core-2.18.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ecce4b2360aa3f008da3327d652e74a0e743908eac306198b47e1c58b03dd2b"}, - {file = "pydantic_core-2.18.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bd4435b8d83f0c9561a2a9585b1de78f1abb17cb0cef5f39bf6a4b47d19bafe3"}, - {file = "pydantic_core-2.18.3-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:616221a6d473c5b9aa83fa8982745441f6a4a62a66436be9445c65f241b86c94"}, - {file = "pydantic_core-2.18.3-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:7e6382ce89a92bc1d0c0c5edd51e931432202b9080dc921d8d003e616402efd1"}, - {file = "pydantic_core-2.18.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ff58f379345603d940e461eae474b6bbb6dab66ed9a851ecd3cb3709bf4dcf6a"}, - {file = "pydantic_core-2.18.3.tar.gz", hash = "sha256:432e999088d85c8f36b9a3f769a8e2b57aabd817bbb729a90d1fe7f18f6f1f39"}, + {file = "pydantic_core-2.18.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:f76d0ad001edd426b92233d45c746fd08f467d56100fd8f30e9ace4b005266e4"}, + {file = "pydantic_core-2.18.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:59ff3e89f4eaf14050c8022011862df275b552caef8082e37b542b066ce1ff26"}, + {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a55b5b16c839df1070bc113c1f7f94a0af4433fcfa1b41799ce7606e5c79ce0a"}, + {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4d0dcc59664fcb8974b356fe0a18a672d6d7cf9f54746c05f43275fc48636851"}, + {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8951eee36c57cd128f779e641e21eb40bc5073eb28b2d23f33eb0ef14ffb3f5d"}, + {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4701b19f7e3a06ea655513f7938de6f108123bf7c86bbebb1196eb9bd35cf724"}, + {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e00a3f196329e08e43d99b79b286d60ce46bed10f2280d25a1718399457e06be"}, + {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:97736815b9cc893b2b7f663628e63f436018b75f44854c8027040e05230eeddb"}, + {file = "pydantic_core-2.18.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6891a2ae0e8692679c07728819b6e2b822fb30ca7445f67bbf6509b25a96332c"}, + {file = "pydantic_core-2.18.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bc4ff9805858bd54d1a20efff925ccd89c9d2e7cf4986144b30802bf78091c3e"}, + {file = "pydantic_core-2.18.4-cp310-none-win32.whl", hash = "sha256:1b4de2e51bbcb61fdebd0ab86ef28062704f62c82bbf4addc4e37fa4b00b7cbc"}, + {file = "pydantic_core-2.18.4-cp310-none-win_amd64.whl", hash = "sha256:6a750aec7bf431517a9fd78cb93c97b9b0c496090fee84a47a0d23668976b4b0"}, + {file = "pydantic_core-2.18.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:942ba11e7dfb66dc70f9ae66b33452f51ac7bb90676da39a7345e99ffb55402d"}, + {file = "pydantic_core-2.18.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b2ebef0e0b4454320274f5e83a41844c63438fdc874ea40a8b5b4ecb7693f1c4"}, + {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a642295cd0c8df1b86fc3dced1d067874c353a188dc8e0f744626d49e9aa51c4"}, + {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f09baa656c904807e832cf9cce799c6460c450c4ad80803517032da0cd062e2"}, + {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:98906207f29bc2c459ff64fa007afd10a8c8ac080f7e4d5beff4c97086a3dabd"}, + {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:19894b95aacfa98e7cb093cd7881a0c76f55731efad31073db4521e2b6ff5b7d"}, + {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fbbdc827fe5e42e4d196c746b890b3d72876bdbf160b0eafe9f0334525119c8"}, + {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f85d05aa0918283cf29a30b547b4df2fbb56b45b135f9e35b6807cb28bc47951"}, + {file = "pydantic_core-2.18.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e85637bc8fe81ddb73fda9e56bab24560bdddfa98aa64f87aaa4e4b6730c23d2"}, + {file = "pydantic_core-2.18.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2f5966897e5461f818e136b8451d0551a2e77259eb0f73a837027b47dc95dab9"}, + {file = "pydantic_core-2.18.4-cp311-none-win32.whl", hash = "sha256:44c7486a4228413c317952e9d89598bcdfb06399735e49e0f8df643e1ccd0558"}, + {file = "pydantic_core-2.18.4-cp311-none-win_amd64.whl", hash = "sha256:8a7164fe2005d03c64fd3b85649891cd4953a8de53107940bf272500ba8a788b"}, + {file = "pydantic_core-2.18.4-cp311-none-win_arm64.whl", hash = "sha256:4e99bc050fe65c450344421017f98298a97cefc18c53bb2f7b3531eb39bc7805"}, + {file = "pydantic_core-2.18.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:6f5c4d41b2771c730ea1c34e458e781b18cc668d194958e0112455fff4e402b2"}, + {file = "pydantic_core-2.18.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2fdf2156aa3d017fddf8aea5adfba9f777db1d6022d392b682d2a8329e087cef"}, + {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4748321b5078216070b151d5271ef3e7cc905ab170bbfd27d5c83ee3ec436695"}, + {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:847a35c4d58721c5dc3dba599878ebbdfd96784f3fb8bb2c356e123bdcd73f34"}, + {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3c40d4eaad41f78e3bbda31b89edc46a3f3dc6e171bf0ecf097ff7a0ffff7cb1"}, + {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:21a5e440dbe315ab9825fcd459b8814bb92b27c974cbc23c3e8baa2b76890077"}, + {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01dd777215e2aa86dfd664daed5957704b769e726626393438f9c87690ce78c3"}, + {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4b06beb3b3f1479d32befd1f3079cc47b34fa2da62457cdf6c963393340b56e9"}, + {file = "pydantic_core-2.18.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:564d7922e4b13a16b98772441879fcdcbe82ff50daa622d681dd682175ea918c"}, + {file = "pydantic_core-2.18.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:0eb2a4f660fcd8e2b1c90ad566db2b98d7f3f4717c64fe0a83e0adb39766d5b8"}, + {file = "pydantic_core-2.18.4-cp312-none-win32.whl", hash = "sha256:8b8bab4c97248095ae0c4455b5a1cd1cdd96e4e4769306ab19dda135ea4cdb07"}, + {file = "pydantic_core-2.18.4-cp312-none-win_amd64.whl", hash = "sha256:14601cdb733d741b8958224030e2bfe21a4a881fb3dd6fbb21f071cabd48fa0a"}, + {file = "pydantic_core-2.18.4-cp312-none-win_arm64.whl", hash = "sha256:c1322d7dd74713dcc157a2b7898a564ab091ca6c58302d5c7b4c07296e3fd00f"}, + {file = "pydantic_core-2.18.4-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:823be1deb01793da05ecb0484d6c9e20baebb39bd42b5d72636ae9cf8350dbd2"}, + {file = "pydantic_core-2.18.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ebef0dd9bf9b812bf75bda96743f2a6c5734a02092ae7f721c048d156d5fabae"}, + {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae1d6df168efb88d7d522664693607b80b4080be6750c913eefb77e34c12c71a"}, + {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f9899c94762343f2cc2fc64c13e7cae4c3cc65cdfc87dd810a31654c9b7358cc"}, + {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99457f184ad90235cfe8461c4d70ab7dd2680e28821c29eca00252ba90308c78"}, + {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18f469a3d2a2fdafe99296a87e8a4c37748b5080a26b806a707f25a902c040a8"}, + {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7cdf28938ac6b8b49ae5e92f2735056a7ba99c9b110a474473fd71185c1af5d"}, + {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:938cb21650855054dc54dfd9120a851c974f95450f00683399006aa6e8abb057"}, + {file = "pydantic_core-2.18.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:44cd83ab6a51da80fb5adbd9560e26018e2ac7826f9626bc06ca3dc074cd198b"}, + {file = "pydantic_core-2.18.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:972658f4a72d02b8abfa2581d92d59f59897d2e9f7e708fdabe922f9087773af"}, + {file = "pydantic_core-2.18.4-cp38-none-win32.whl", hash = "sha256:1d886dc848e60cb7666f771e406acae54ab279b9f1e4143babc9c2258213daa2"}, + {file = "pydantic_core-2.18.4-cp38-none-win_amd64.whl", hash = "sha256:bb4462bd43c2460774914b8525f79b00f8f407c945d50881568f294c1d9b4443"}, + {file = "pydantic_core-2.18.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:44a688331d4a4e2129140a8118479443bd6f1905231138971372fcde37e43528"}, + {file = "pydantic_core-2.18.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a2fdd81edd64342c85ac7cf2753ccae0b79bf2dfa063785503cb85a7d3593223"}, + {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:86110d7e1907ab36691f80b33eb2da87d780f4739ae773e5fc83fb272f88825f"}, + {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:46387e38bd641b3ee5ce247563b60c5ca098da9c56c75c157a05eaa0933ed154"}, + {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:123c3cec203e3f5ac7b000bd82235f1a3eced8665b63d18be751f115588fea30"}, + {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dc1803ac5c32ec324c5261c7209e8f8ce88e83254c4e1aebdc8b0a39f9ddb443"}, + {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53db086f9f6ab2b4061958d9c276d1dbe3690e8dd727d6abf2321d6cce37fa94"}, + {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:abc267fa9837245cc28ea6929f19fa335f3dc330a35d2e45509b6566dc18be23"}, + {file = "pydantic_core-2.18.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a0d829524aaefdebccb869eed855e2d04c21d2d7479b6cada7ace5448416597b"}, + {file = "pydantic_core-2.18.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:509daade3b8649f80d4e5ff21aa5673e4ebe58590b25fe42fac5f0f52c6f034a"}, + {file = "pydantic_core-2.18.4-cp39-none-win32.whl", hash = "sha256:ca26a1e73c48cfc54c4a76ff78df3727b9d9f4ccc8dbee4ae3f73306a591676d"}, + {file = "pydantic_core-2.18.4-cp39-none-win_amd64.whl", hash = "sha256:c67598100338d5d985db1b3d21f3619ef392e185e71b8d52bceacc4a7771ea7e"}, + {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:574d92eac874f7f4db0ca653514d823a0d22e2354359d0759e3f6a406db5d55d"}, + {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1f4d26ceb5eb9eed4af91bebeae4b06c3fb28966ca3a8fb765208cf6b51102ab"}, + {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77450e6d20016ec41f43ca4a6c63e9fdde03f0ae3fe90e7c27bdbeaece8b1ed4"}, + {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d323a01da91851a4f17bf592faf46149c9169d68430b3146dcba2bb5e5719abc"}, + {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43d447dd2ae072a0065389092a231283f62d960030ecd27565672bd40746c507"}, + {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:578e24f761f3b425834f297b9935e1ce2e30f51400964ce4801002435a1b41ef"}, + {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:81b5efb2f126454586d0f40c4d834010979cb80785173d1586df845a632e4e6d"}, + {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ab86ce7c8f9bea87b9d12c7f0af71102acbf5ecbc66c17796cff45dae54ef9a5"}, + {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:90afc12421df2b1b4dcc975f814e21bc1754640d502a2fbcc6d41e77af5ec312"}, + {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:51991a89639a912c17bef4b45c87bd83593aee0437d8102556af4885811d59f5"}, + {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:293afe532740370aba8c060882f7d26cfd00c94cae32fd2e212a3a6e3b7bc15e"}, + {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b48ece5bde2e768197a2d0f6e925f9d7e3e826f0ad2271120f8144a9db18d5c8"}, + {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:eae237477a873ab46e8dd748e515c72c0c804fb380fbe6c85533c7de51f23a8f"}, + {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:834b5230b5dfc0c1ec37b2fda433b271cbbc0e507560b5d1588e2cc1148cf1ce"}, + {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e858ac0a25074ba4bce653f9b5d0a85b7456eaddadc0ce82d3878c22489fa4ee"}, + {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2fd41f6eff4c20778d717af1cc50eca52f5afe7805ee530a4fbd0bae284f16e9"}, + {file = "pydantic_core-2.18.4.tar.gz", hash = "sha256:ec3beeada09ff865c344ff3bc2f427f5e6c26401cc6113d77e372c3fdac73864"}, ] [package.dependencies] @@ -2534,13 +2460,13 @@ pytest = ">=3.6" [[package]] name = "pytest-memray" -version = "1.6.0" +version = "1.7.0" description = "A simple plugin to use with pytest" optional = false python-versions = ">=3.8" files = [ - {file = "pytest_memray-1.6.0-py3-none-any.whl", hash = "sha256:267db3f9d3ad3e443c6743e5261ce64caff3e2e8d632850b58c0ae0925fed765"}, - {file = "pytest_memray-1.6.0.tar.gz", hash = "sha256:364152252afd563fc8b58459325f360030d2b0d5673896018a68badb35402339"}, + {file = "pytest_memray-1.7.0-py3-none-any.whl", hash = "sha256:b896718c1adf6d0cd339dfaaaa5620f035c9919e1199a79b3453804a1254306f"}, + {file = "pytest_memray-1.7.0.tar.gz", hash = "sha256:c18fa907d2210b42f4096c093e2d3416dfc002dcaa450ef3f9ba819bc3dd8f5f"}, ] [package.dependencies] @@ -2550,7 +2476,7 @@ pytest = ">=7.2" [package.extras] docs = ["furo (>=2022.12.7)", "sphinx (>=6.1.3)", "sphinx-argparse (>=0.4)", "sphinx-inline-tabs (>=2022.1.2b11)", "sphinxcontrib-programoutput (>=0.17)", "towncrier (>=22.12)"] lint = ["black (==22.12)", "isort (==5.11.4)", "mypy (==0.991)", "ruff (==0.0.272)"] -test = ["covdefaults (>=2.2.2)", "coverage (>=7.0.5)", "flaky (>=3.7)", "pytest (>=7.2)", "pytest-xdist (>=3.1)"] +test = ["anyio (>=4.4.0)", "covdefaults (>=2.2.2)", "coverage (>=7.0.5)", "flaky (>=3.7)", "pytest (>=7.2)", "pytest-xdist (>=3.1)"] [[package]] name = "python-dateutil" @@ -2689,90 +2615,90 @@ files = [ [[package]] name = "regex" -version = "2024.5.15" +version = "2024.7.24" description = "Alternative regular expression module, to replace re." optional = false python-versions = ">=3.8" files = [ - {file = "regex-2024.5.15-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a81e3cfbae20378d75185171587cbf756015ccb14840702944f014e0d93ea09f"}, - {file = "regex-2024.5.15-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7b59138b219ffa8979013be7bc85bb60c6f7b7575df3d56dc1e403a438c7a3f6"}, - {file = "regex-2024.5.15-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a0bd000c6e266927cb7a1bc39d55be95c4b4f65c5be53e659537537e019232b1"}, - {file = "regex-2024.5.15-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5eaa7ddaf517aa095fa8da0b5015c44d03da83f5bd49c87961e3c997daed0de7"}, - {file = "regex-2024.5.15-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba68168daedb2c0bab7fd7e00ced5ba90aebf91024dea3c88ad5063c2a562cca"}, - {file = "regex-2024.5.15-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6e8d717bca3a6e2064fc3a08df5cbe366369f4b052dcd21b7416e6d71620dca1"}, - {file = "regex-2024.5.15-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1337b7dbef9b2f71121cdbf1e97e40de33ff114801263b275aafd75303bd62b5"}, - {file = "regex-2024.5.15-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9ebd0a36102fcad2f03696e8af4ae682793a5d30b46c647eaf280d6cfb32796"}, - {file = "regex-2024.5.15-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9efa1a32ad3a3ea112224897cdaeb6aa00381627f567179c0314f7b65d354c62"}, - {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1595f2d10dff3d805e054ebdc41c124753631b6a471b976963c7b28543cf13b0"}, - {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b802512f3e1f480f41ab5f2cfc0e2f761f08a1f41092d6718868082fc0d27143"}, - {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:a0981022dccabca811e8171f913de05720590c915b033b7e601f35ce4ea7019f"}, - {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:19068a6a79cf99a19ccefa44610491e9ca02c2be3305c7760d3831d38a467a6f"}, - {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1b5269484f6126eee5e687785e83c6b60aad7663dafe842b34691157e5083e53"}, - {file = "regex-2024.5.15-cp310-cp310-win32.whl", hash = "sha256:ada150c5adfa8fbcbf321c30c751dc67d2f12f15bd183ffe4ec7cde351d945b3"}, - {file = "regex-2024.5.15-cp310-cp310-win_amd64.whl", hash = "sha256:ac394ff680fc46b97487941f5e6ae49a9f30ea41c6c6804832063f14b2a5a145"}, - {file = "regex-2024.5.15-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f5b1dff3ad008dccf18e652283f5e5339d70bf8ba7c98bf848ac33db10f7bc7a"}, - {file = "regex-2024.5.15-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c6a2b494a76983df8e3d3feea9b9ffdd558b247e60b92f877f93a1ff43d26656"}, - {file = "regex-2024.5.15-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a32b96f15c8ab2e7d27655969a23895eb799de3665fa94349f3b2fbfd547236f"}, - {file = "regex-2024.5.15-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:10002e86e6068d9e1c91eae8295ef690f02f913c57db120b58fdd35a6bb1af35"}, - {file = "regex-2024.5.15-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ec54d5afa89c19c6dd8541a133be51ee1017a38b412b1321ccb8d6ddbeb4cf7d"}, - {file = "regex-2024.5.15-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:10e4ce0dca9ae7a66e6089bb29355d4432caed736acae36fef0fdd7879f0b0cb"}, - {file = "regex-2024.5.15-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e507ff1e74373c4d3038195fdd2af30d297b4f0950eeda6f515ae3d84a1770f"}, - {file = "regex-2024.5.15-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d1f059a4d795e646e1c37665b9d06062c62d0e8cc3c511fe01315973a6542e40"}, - {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0721931ad5fe0dda45d07f9820b90b2148ccdd8e45bb9e9b42a146cb4f695649"}, - {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:833616ddc75ad595dee848ad984d067f2f31be645d603e4d158bba656bbf516c"}, - {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:287eb7f54fc81546346207c533ad3c2c51a8d61075127d7f6d79aaf96cdee890"}, - {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:19dfb1c504781a136a80ecd1fff9f16dddf5bb43cec6871778c8a907a085bb3d"}, - {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:119af6e56dce35e8dfb5222573b50c89e5508d94d55713c75126b753f834de68"}, - {file = "regex-2024.5.15-cp311-cp311-win32.whl", hash = "sha256:1c1c174d6ec38d6c8a7504087358ce9213d4332f6293a94fbf5249992ba54efa"}, - {file = "regex-2024.5.15-cp311-cp311-win_amd64.whl", hash = "sha256:9e717956dcfd656f5055cc70996ee2cc82ac5149517fc8e1b60261b907740201"}, - {file = "regex-2024.5.15-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:632b01153e5248c134007209b5c6348a544ce96c46005d8456de1d552455b014"}, - {file = "regex-2024.5.15-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e64198f6b856d48192bf921421fdd8ad8eb35e179086e99e99f711957ffedd6e"}, - {file = "regex-2024.5.15-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68811ab14087b2f6e0fc0c2bae9ad689ea3584cad6917fc57be6a48bbd012c49"}, - {file = "regex-2024.5.15-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8ec0c2fea1e886a19c3bee0cd19d862b3aa75dcdfb42ebe8ed30708df64687a"}, - {file = "regex-2024.5.15-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d0c0c0003c10f54a591d220997dd27d953cd9ccc1a7294b40a4be5312be8797b"}, - {file = "regex-2024.5.15-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2431b9e263af1953c55abbd3e2efca67ca80a3de8a0437cb58e2421f8184717a"}, - {file = "regex-2024.5.15-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a605586358893b483976cffc1723fb0f83e526e8f14c6e6614e75919d9862cf"}, - {file = "regex-2024.5.15-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:391d7f7f1e409d192dba8bcd42d3e4cf9e598f3979cdaed6ab11288da88cb9f2"}, - {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9ff11639a8d98969c863d4617595eb5425fd12f7c5ef6621a4b74b71ed8726d5"}, - {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4eee78a04e6c67e8391edd4dad3279828dd66ac4b79570ec998e2155d2e59fd5"}, - {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8fe45aa3f4aa57faabbc9cb46a93363edd6197cbc43523daea044e9ff2fea83e"}, - {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:d0a3d8d6acf0c78a1fff0e210d224b821081330b8524e3e2bc5a68ef6ab5803d"}, - {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c486b4106066d502495b3025a0a7251bf37ea9540433940a23419461ab9f2a80"}, - {file = "regex-2024.5.15-cp312-cp312-win32.whl", hash = "sha256:c49e15eac7c149f3670b3e27f1f28a2c1ddeccd3a2812cba953e01be2ab9b5fe"}, - {file = "regex-2024.5.15-cp312-cp312-win_amd64.whl", hash = "sha256:673b5a6da4557b975c6c90198588181029c60793835ce02f497ea817ff647cb2"}, - {file = "regex-2024.5.15-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:87e2a9c29e672fc65523fb47a90d429b70ef72b901b4e4b1bd42387caf0d6835"}, - {file = "regex-2024.5.15-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c3bea0ba8b73b71b37ac833a7f3fd53825924165da6a924aec78c13032f20850"}, - {file = "regex-2024.5.15-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bfc4f82cabe54f1e7f206fd3d30fda143f84a63fe7d64a81558d6e5f2e5aaba9"}, - {file = "regex-2024.5.15-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5bb9425fe881d578aeca0b2b4b3d314ec88738706f66f219c194d67179337cb"}, - {file = "regex-2024.5.15-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:64c65783e96e563103d641760664125e91bd85d8e49566ee560ded4da0d3e704"}, - {file = "regex-2024.5.15-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cf2430df4148b08fb4324b848672514b1385ae3807651f3567871f130a728cc3"}, - {file = "regex-2024.5.15-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5397de3219a8b08ae9540c48f602996aa6b0b65d5a61683e233af8605c42b0f2"}, - {file = "regex-2024.5.15-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:455705d34b4154a80ead722f4f185b04c4237e8e8e33f265cd0798d0e44825fa"}, - {file = "regex-2024.5.15-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b2b6f1b3bb6f640c1a92be3bbfbcb18657b125b99ecf141fb3310b5282c7d4ed"}, - {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:3ad070b823ca5890cab606c940522d05d3d22395d432f4aaaf9d5b1653e47ced"}, - {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:5b5467acbfc153847d5adb21e21e29847bcb5870e65c94c9206d20eb4e99a384"}, - {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:e6662686aeb633ad65be2a42b4cb00178b3fbf7b91878f9446075c404ada552f"}, - {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:2b4c884767504c0e2401babe8b5b7aea9148680d2e157fa28f01529d1f7fcf67"}, - {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:3cd7874d57f13bf70078f1ff02b8b0aa48d5b9ed25fc48547516c6aba36f5741"}, - {file = "regex-2024.5.15-cp38-cp38-win32.whl", hash = "sha256:e4682f5ba31f475d58884045c1a97a860a007d44938c4c0895f41d64481edbc9"}, - {file = "regex-2024.5.15-cp38-cp38-win_amd64.whl", hash = "sha256:d99ceffa25ac45d150e30bd9ed14ec6039f2aad0ffa6bb87a5936f5782fc1569"}, - {file = "regex-2024.5.15-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:13cdaf31bed30a1e1c2453ef6015aa0983e1366fad2667657dbcac7b02f67133"}, - {file = "regex-2024.5.15-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cac27dcaa821ca271855a32188aa61d12decb6fe45ffe3e722401fe61e323cd1"}, - {file = "regex-2024.5.15-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7dbe2467273b875ea2de38ded4eba86cbcbc9a1a6d0aa11dcf7bd2e67859c435"}, - {file = "regex-2024.5.15-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64f18a9a3513a99c4bef0e3efd4c4a5b11228b48aa80743be822b71e132ae4f5"}, - {file = "regex-2024.5.15-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d347a741ea871c2e278fde6c48f85136c96b8659b632fb57a7d1ce1872547600"}, - {file = "regex-2024.5.15-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1878b8301ed011704aea4c806a3cadbd76f84dece1ec09cc9e4dc934cfa5d4da"}, - {file = "regex-2024.5.15-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4babf07ad476aaf7830d77000874d7611704a7fcf68c9c2ad151f5d94ae4bfc4"}, - {file = "regex-2024.5.15-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:35cb514e137cb3488bce23352af3e12fb0dbedd1ee6e60da053c69fb1b29cc6c"}, - {file = "regex-2024.5.15-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cdd09d47c0b2efee9378679f8510ee6955d329424c659ab3c5e3a6edea696294"}, - {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:72d7a99cd6b8f958e85fc6ca5b37c4303294954eac1376535b03c2a43eb72629"}, - {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:a094801d379ab20c2135529948cb84d417a2169b9bdceda2a36f5f10977ebc16"}, - {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:c0c18345010870e58238790a6779a1219b4d97bd2e77e1140e8ee5d14df071aa"}, - {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:16093f563098448ff6b1fa68170e4acbef94e6b6a4e25e10eae8598bb1694b5d"}, - {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e38a7d4e8f633a33b4c7350fbd8bad3b70bf81439ac67ac38916c4a86b465456"}, - {file = "regex-2024.5.15-cp39-cp39-win32.whl", hash = "sha256:71a455a3c584a88f654b64feccc1e25876066c4f5ef26cd6dd711308aa538694"}, - {file = "regex-2024.5.15-cp39-cp39-win_amd64.whl", hash = "sha256:cab12877a9bdafde5500206d1020a584355a97884dfd388af3699e9137bf7388"}, - {file = "regex-2024.5.15.tar.gz", hash = "sha256:d3ee02d9e5f482cc8309134a91eeaacbdd2261ba111b0fef3748eeb4913e6a2c"}, + {file = "regex-2024.7.24-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:228b0d3f567fafa0633aee87f08b9276c7062da9616931382993c03808bb68ce"}, + {file = "regex-2024.7.24-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3426de3b91d1bc73249042742f45c2148803c111d1175b283270177fdf669024"}, + {file = "regex-2024.7.24-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f273674b445bcb6e4409bf8d1be67bc4b58e8b46fd0d560055d515b8830063cd"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23acc72f0f4e1a9e6e9843d6328177ae3074b4182167e34119ec7233dfeccf53"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:65fd3d2e228cae024c411c5ccdffae4c315271eee4a8b839291f84f796b34eca"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c414cbda77dbf13c3bc88b073a1a9f375c7b0cb5e115e15d4b73ec3a2fbc6f59"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf7a89eef64b5455835f5ed30254ec19bf41f7541cd94f266ab7cbd463f00c41"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19c65b00d42804e3fbea9708f0937d157e53429a39b7c61253ff15670ff62cb5"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7a5486ca56c8869070a966321d5ab416ff0f83f30e0e2da1ab48815c8d165d46"}, + {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6f51f9556785e5a203713f5efd9c085b4a45aecd2a42573e2b5041881b588d1f"}, + {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a4997716674d36a82eab3e86f8fa77080a5d8d96a389a61ea1d0e3a94a582cf7"}, + {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:c0abb5e4e8ce71a61d9446040c1e86d4e6d23f9097275c5bd49ed978755ff0fe"}, + {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:18300a1d78cf1290fa583cd8b7cde26ecb73e9f5916690cf9d42de569c89b1ce"}, + {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:416c0e4f56308f34cdb18c3f59849479dde5b19febdcd6e6fa4d04b6c31c9faa"}, + {file = "regex-2024.7.24-cp310-cp310-win32.whl", hash = "sha256:fb168b5924bef397b5ba13aabd8cf5df7d3d93f10218d7b925e360d436863f66"}, + {file = "regex-2024.7.24-cp310-cp310-win_amd64.whl", hash = "sha256:6b9fc7e9cc983e75e2518496ba1afc524227c163e43d706688a6bb9eca41617e"}, + {file = "regex-2024.7.24-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:382281306e3adaaa7b8b9ebbb3ffb43358a7bbf585fa93821300a418bb975281"}, + {file = "regex-2024.7.24-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4fdd1384619f406ad9037fe6b6eaa3de2749e2e12084abc80169e8e075377d3b"}, + {file = "regex-2024.7.24-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3d974d24edb231446f708c455fd08f94c41c1ff4f04bcf06e5f36df5ef50b95a"}, + {file = "regex-2024.7.24-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2ec4419a3fe6cf8a4795752596dfe0adb4aea40d3683a132bae9c30b81e8d73"}, + {file = "regex-2024.7.24-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb563dd3aea54c797adf513eeec819c4213d7dbfc311874eb4fd28d10f2ff0f2"}, + {file = "regex-2024.7.24-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:45104baae8b9f67569f0f1dca5e1f1ed77a54ae1cd8b0b07aba89272710db61e"}, + {file = "regex-2024.7.24-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:994448ee01864501912abf2bad9203bffc34158e80fe8bfb5b031f4f8e16da51"}, + {file = "regex-2024.7.24-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3fac296f99283ac232d8125be932c5cd7644084a30748fda013028c815ba3364"}, + {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7e37e809b9303ec3a179085415cb5f418ecf65ec98cdfe34f6a078b46ef823ee"}, + {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:01b689e887f612610c869421241e075c02f2e3d1ae93a037cb14f88ab6a8934c"}, + {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f6442f0f0ff81775eaa5b05af8a0ffa1dda36e9cf6ec1e0d3d245e8564b684ce"}, + {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:871e3ab2838fbcb4e0865a6e01233975df3a15e6fce93b6f99d75cacbd9862d1"}, + {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c918b7a1e26b4ab40409820ddccc5d49871a82329640f5005f73572d5eaa9b5e"}, + {file = "regex-2024.7.24-cp311-cp311-win32.whl", hash = "sha256:2dfbb8baf8ba2c2b9aa2807f44ed272f0913eeeba002478c4577b8d29cde215c"}, + {file = "regex-2024.7.24-cp311-cp311-win_amd64.whl", hash = "sha256:538d30cd96ed7d1416d3956f94d54e426a8daf7c14527f6e0d6d425fcb4cca52"}, + {file = "regex-2024.7.24-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:fe4ebef608553aff8deb845c7f4f1d0740ff76fa672c011cc0bacb2a00fbde86"}, + {file = "regex-2024.7.24-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:74007a5b25b7a678459f06559504f1eec2f0f17bca218c9d56f6a0a12bfffdad"}, + {file = "regex-2024.7.24-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7df9ea48641da022c2a3c9c641650cd09f0cd15e8908bf931ad538f5ca7919c9"}, + {file = "regex-2024.7.24-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a1141a1dcc32904c47f6846b040275c6e5de0bf73f17d7a409035d55b76f289"}, + {file = "regex-2024.7.24-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80c811cfcb5c331237d9bad3bea2c391114588cf4131707e84d9493064d267f9"}, + {file = "regex-2024.7.24-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7214477bf9bd195894cf24005b1e7b496f46833337b5dedb7b2a6e33f66d962c"}, + {file = "regex-2024.7.24-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d55588cba7553f0b6ec33130bc3e114b355570b45785cebdc9daed8c637dd440"}, + {file = "regex-2024.7.24-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:558a57cfc32adcf19d3f791f62b5ff564922942e389e3cfdb538a23d65a6b610"}, + {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a512eed9dfd4117110b1881ba9a59b31433caed0c4101b361f768e7bcbaf93c5"}, + {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:86b17ba823ea76256b1885652e3a141a99a5c4422f4a869189db328321b73799"}, + {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5eefee9bfe23f6df09ffb6dfb23809f4d74a78acef004aa904dc7c88b9944b05"}, + {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:731fcd76bbdbf225e2eb85b7c38da9633ad3073822f5ab32379381e8c3c12e94"}, + {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:eaef80eac3b4cfbdd6de53c6e108b4c534c21ae055d1dbea2de6b3b8ff3def38"}, + {file = "regex-2024.7.24-cp312-cp312-win32.whl", hash = "sha256:185e029368d6f89f36e526764cf12bf8d6f0e3a2a7737da625a76f594bdfcbfc"}, + {file = "regex-2024.7.24-cp312-cp312-win_amd64.whl", hash = "sha256:2f1baff13cc2521bea83ab2528e7a80cbe0ebb2c6f0bfad15be7da3aed443908"}, + {file = "regex-2024.7.24-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:66b4c0731a5c81921e938dcf1a88e978264e26e6ac4ec96a4d21ae0354581ae0"}, + {file = "regex-2024.7.24-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:88ecc3afd7e776967fa16c80f974cb79399ee8dc6c96423321d6f7d4b881c92b"}, + {file = "regex-2024.7.24-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:64bd50cf16bcc54b274e20235bf8edbb64184a30e1e53873ff8d444e7ac656b2"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb462f0e346fcf41a901a126b50f8781e9a474d3927930f3490f38a6e73b6950"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a82465ebbc9b1c5c50738536fdfa7cab639a261a99b469c9d4c7dcbb2b3f1e57"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:68a8f8c046c6466ac61a36b65bb2395c74451df2ffb8458492ef49900efed293"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dac8e84fff5d27420f3c1e879ce9929108e873667ec87e0c8eeb413a5311adfe"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba2537ef2163db9e6ccdbeb6f6424282ae4dea43177402152c67ef869cf3978b"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:43affe33137fcd679bdae93fb25924979517e011f9dea99163f80b82eadc7e53"}, + {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:c9bb87fdf2ab2370f21e4d5636e5317775e5d51ff32ebff2cf389f71b9b13750"}, + {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:945352286a541406f99b2655c973852da7911b3f4264e010218bbc1cc73168f2"}, + {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:8bc593dcce679206b60a538c302d03c29b18e3d862609317cb560e18b66d10cf"}, + {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:3f3b6ca8eae6d6c75a6cff525c8530c60e909a71a15e1b731723233331de4169"}, + {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c51edc3541e11fbe83f0c4d9412ef6c79f664a3745fab261457e84465ec9d5a8"}, + {file = "regex-2024.7.24-cp38-cp38-win32.whl", hash = "sha256:d0a07763776188b4db4c9c7fb1b8c494049f84659bb387b71c73bbc07f189e96"}, + {file = "regex-2024.7.24-cp38-cp38-win_amd64.whl", hash = "sha256:8fd5afd101dcf86a270d254364e0e8dddedebe6bd1ab9d5f732f274fa00499a5"}, + {file = "regex-2024.7.24-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0ffe3f9d430cd37d8fa5632ff6fb36d5b24818c5c986893063b4e5bdb84cdf24"}, + {file = "regex-2024.7.24-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:25419b70ba00a16abc90ee5fce061228206173231f004437730b67ac77323f0d"}, + {file = "regex-2024.7.24-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:33e2614a7ce627f0cdf2ad104797d1f68342d967de3695678c0cb84f530709f8"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d33a0021893ede5969876052796165bab6006559ab845fd7b515a30abdd990dc"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:04ce29e2c5fedf296b1a1b0acc1724ba93a36fb14031f3abfb7abda2806c1535"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b16582783f44fbca6fcf46f61347340c787d7530d88b4d590a397a47583f31dd"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:836d3cc225b3e8a943d0b02633fb2f28a66e281290302a79df0e1eaa984ff7c1"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:438d9f0f4bc64e8dea78274caa5af971ceff0f8771e1a2333620969936ba10be"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:973335b1624859cb0e52f96062a28aa18f3a5fc77a96e4a3d6d76e29811a0e6e"}, + {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c5e69fd3eb0b409432b537fe3c6f44ac089c458ab6b78dcec14478422879ec5f"}, + {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:fbf8c2f00904eaf63ff37718eb13acf8e178cb940520e47b2f05027f5bb34ce3"}, + {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ae2757ace61bc4061b69af19e4689fa4416e1a04840f33b441034202b5cd02d4"}, + {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:44fc61b99035fd9b3b9453f1713234e5a7c92a04f3577252b45feefe1b327759"}, + {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:84c312cdf839e8b579f504afcd7b65f35d60b6285d892b19adea16355e8343c9"}, + {file = "regex-2024.7.24-cp39-cp39-win32.whl", hash = "sha256:ca5b2028c2f7af4e13fb9fc29b28d0ce767c38c7facdf64f6c2cd040413055f1"}, + {file = "regex-2024.7.24-cp39-cp39-win_amd64.whl", hash = "sha256:7c479f5ae937ec9985ecaf42e2e10631551d909f203e31308c12d703922742f9"}, + {file = "regex-2024.7.24.tar.gz", hash = "sha256:9cfd009eed1a46b27c14039ad5bbc5e71b6367c5b2e6d5f5da0ea91600817506"}, ] [[package]] @@ -2911,15 +2837,42 @@ files = [ {file = "ruamel.yaml.clib-0.2.8.tar.gz", hash = "sha256:beb2e0404003de9a4cab9753a8805a8fe9320ee6673136ed7f04255fe60bb512"}, ] +[[package]] +name = "ruff" +version = "0.5.5" +description = "An extremely fast Python linter and code formatter, written in Rust." +optional = false +python-versions = ">=3.7" +files = [ + {file = "ruff-0.5.5-py3-none-linux_armv6l.whl", hash = "sha256:605d589ec35d1da9213a9d4d7e7a9c761d90bba78fc8790d1c5e65026c1b9eaf"}, + {file = "ruff-0.5.5-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:00817603822a3e42b80f7c3298c8269e09f889ee94640cd1fc7f9329788d7bf8"}, + {file = "ruff-0.5.5-py3-none-macosx_11_0_arm64.whl", hash = "sha256:187a60f555e9f865a2ff2c6984b9afeffa7158ba6e1eab56cb830404c942b0f3"}, + {file = "ruff-0.5.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe26fc46fa8c6e0ae3f47ddccfbb136253c831c3289bba044befe68f467bfb16"}, + {file = "ruff-0.5.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4ad25dd9c5faac95c8e9efb13e15803cd8bbf7f4600645a60ffe17c73f60779b"}, + {file = "ruff-0.5.5-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f70737c157d7edf749bcb952d13854e8f745cec695a01bdc6e29c29c288fc36e"}, + {file = "ruff-0.5.5-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:cfd7de17cef6ab559e9f5ab859f0d3296393bc78f69030967ca4d87a541b97a0"}, + {file = "ruff-0.5.5-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a09b43e02f76ac0145f86a08e045e2ea452066f7ba064fd6b0cdccb486f7c3e7"}, + {file = "ruff-0.5.5-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d0b856cb19c60cd40198be5d8d4b556228e3dcd545b4f423d1ad812bfdca5884"}, + {file = "ruff-0.5.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3687d002f911e8a5faf977e619a034d159a8373514a587249cc00f211c67a091"}, + {file = "ruff-0.5.5-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:ac9dc814e510436e30d0ba535f435a7f3dc97f895f844f5b3f347ec8c228a523"}, + {file = "ruff-0.5.5-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:af9bdf6c389b5add40d89b201425b531e0a5cceb3cfdcc69f04d3d531c6be74f"}, + {file = "ruff-0.5.5-py3-none-musllinux_1_2_i686.whl", hash = "sha256:d40a8533ed545390ef8315b8e25c4bb85739b90bd0f3fe1280a29ae364cc55d8"}, + {file = "ruff-0.5.5-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:cab904683bf9e2ecbbe9ff235bfe056f0eba754d0168ad5407832928d579e7ab"}, + {file = "ruff-0.5.5-py3-none-win32.whl", hash = "sha256:696f18463b47a94575db635ebb4c178188645636f05e934fdf361b74edf1bb2d"}, + {file = "ruff-0.5.5-py3-none-win_amd64.whl", hash = "sha256:50f36d77f52d4c9c2f1361ccbfbd09099a1b2ea5d2b2222c586ab08885cf3445"}, + {file = "ruff-0.5.5-py3-none-win_arm64.whl", hash = "sha256:3191317d967af701f1b73a31ed5788795936e423b7acce82a2b63e26eb3e89d6"}, + {file = "ruff-0.5.5.tar.gz", hash = "sha256:cc5516bdb4858d972fbc31d246bdb390eab8df1a26e2353be2dbc0c2d7f5421a"}, +] + [[package]] name = "s3transfer" -version = "0.10.1" +version = "0.10.2" description = "An Amazon S3 Transfer Manager" optional = false -python-versions = ">= 3.8" +python-versions = ">=3.8" files = [ - {file = "s3transfer-0.10.1-py3-none-any.whl", hash = "sha256:ceb252b11bcf87080fb7850a224fb6e05c8a776bab8f2b64b7f25b969464839d"}, - {file = "s3transfer-0.10.1.tar.gz", hash = "sha256:5683916b4c724f799e600f41dd9e10a9ff19871bf87623cc8f491cb4f5fa0a19"}, + {file = "s3transfer-0.10.2-py3-none-any.whl", hash = "sha256:eca1c20de70a39daee580aef4986996620f365c4e0fda6a86100231d62f1bf69"}, + {file = "s3transfer-0.10.2.tar.gz", hash = "sha256:0711534e9356d3cc692fdde846b4a1e4b0cb6519971860796e6bc4c7aea00ef6"}, ] [package.dependencies] @@ -2979,64 +2932,64 @@ files = [ [[package]] name = "sqlalchemy" -version = "2.0.30" +version = "2.0.31" description = "Database Abstraction Library" optional = false python-versions = ">=3.7" files = [ - {file = "SQLAlchemy-2.0.30-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3b48154678e76445c7ded1896715ce05319f74b1e73cf82d4f8b59b46e9c0ddc"}, - {file = "SQLAlchemy-2.0.30-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2753743c2afd061bb95a61a51bbb6a1a11ac1c44292fad898f10c9839a7f75b2"}, - {file = "SQLAlchemy-2.0.30-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a7bfc726d167f425d4c16269a9a10fe8630ff6d14b683d588044dcef2d0f6be7"}, - {file = "SQLAlchemy-2.0.30-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4f61ada6979223013d9ab83a3ed003ded6959eae37d0d685db2c147e9143797"}, - {file = "SQLAlchemy-2.0.30-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3a365eda439b7a00732638f11072907c1bc8e351c7665e7e5da91b169af794af"}, - {file = "SQLAlchemy-2.0.30-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bba002a9447b291548e8d66fd8c96a6a7ed4f2def0bb155f4f0a1309fd2735d5"}, - {file = "SQLAlchemy-2.0.30-cp310-cp310-win32.whl", hash = "sha256:0138c5c16be3600923fa2169532205d18891b28afa817cb49b50e08f62198bb8"}, - {file = "SQLAlchemy-2.0.30-cp310-cp310-win_amd64.whl", hash = "sha256:99650e9f4cf3ad0d409fed3eec4f071fadd032e9a5edc7270cd646a26446feeb"}, - {file = "SQLAlchemy-2.0.30-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:955991a09f0992c68a499791a753523f50f71a6885531568404fa0f231832aa0"}, - {file = "SQLAlchemy-2.0.30-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f69e4c756ee2686767eb80f94c0125c8b0a0b87ede03eacc5c8ae3b54b99dc46"}, - {file = "SQLAlchemy-2.0.30-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69c9db1ce00e59e8dd09d7bae852a9add716efdc070a3e2068377e6ff0d6fdaa"}, - {file = "SQLAlchemy-2.0.30-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1429a4b0f709f19ff3b0cf13675b2b9bfa8a7e79990003207a011c0db880a13"}, - {file = "SQLAlchemy-2.0.30-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:efedba7e13aa9a6c8407c48facfdfa108a5a4128e35f4c68f20c3407e4376aa9"}, - {file = "SQLAlchemy-2.0.30-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:16863e2b132b761891d6c49f0a0f70030e0bcac4fd208117f6b7e053e68668d0"}, - {file = "SQLAlchemy-2.0.30-cp311-cp311-win32.whl", hash = "sha256:2ecabd9ccaa6e914e3dbb2aa46b76dede7eadc8cbf1b8083c94d936bcd5ffb49"}, - {file = "SQLAlchemy-2.0.30-cp311-cp311-win_amd64.whl", hash = "sha256:0b3f4c438e37d22b83e640f825ef0f37b95db9aa2d68203f2c9549375d0b2260"}, - {file = "SQLAlchemy-2.0.30-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5a79d65395ac5e6b0c2890935bad892eabb911c4aa8e8015067ddb37eea3d56c"}, - {file = "SQLAlchemy-2.0.30-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9a5baf9267b752390252889f0c802ea13b52dfee5e369527da229189b8bd592e"}, - {file = "SQLAlchemy-2.0.30-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cb5a646930c5123f8461f6468901573f334c2c63c795b9af350063a736d0134"}, - {file = "SQLAlchemy-2.0.30-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:296230899df0b77dec4eb799bcea6fbe39a43707ce7bb166519c97b583cfcab3"}, - {file = "SQLAlchemy-2.0.30-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c62d401223f468eb4da32627bffc0c78ed516b03bb8a34a58be54d618b74d472"}, - {file = "SQLAlchemy-2.0.30-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3b69e934f0f2b677ec111b4d83f92dc1a3210a779f69bf905273192cf4ed433e"}, - {file = "SQLAlchemy-2.0.30-cp312-cp312-win32.whl", hash = "sha256:77d2edb1f54aff37e3318f611637171e8ec71472f1fdc7348b41dcb226f93d90"}, - {file = "SQLAlchemy-2.0.30-cp312-cp312-win_amd64.whl", hash = "sha256:b6c7ec2b1f4969fc19b65b7059ed00497e25f54069407a8701091beb69e591a5"}, - {file = "SQLAlchemy-2.0.30-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5a8e3b0a7e09e94be7510d1661339d6b52daf202ed2f5b1f9f48ea34ee6f2d57"}, - {file = "SQLAlchemy-2.0.30-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b60203c63e8f984df92035610c5fb76d941254cf5d19751faab7d33b21e5ddc0"}, - {file = "SQLAlchemy-2.0.30-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1dc3eabd8c0232ee8387fbe03e0a62220a6f089e278b1f0aaf5e2d6210741ad"}, - {file = "SQLAlchemy-2.0.30-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:40ad017c672c00b9b663fcfcd5f0864a0a97828e2ee7ab0c140dc84058d194cf"}, - {file = "SQLAlchemy-2.0.30-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e42203d8d20dc704604862977b1470a122e4892791fe3ed165f041e4bf447a1b"}, - {file = "SQLAlchemy-2.0.30-cp37-cp37m-win32.whl", hash = "sha256:2a4f4da89c74435f2bc61878cd08f3646b699e7d2eba97144030d1be44e27584"}, - {file = "SQLAlchemy-2.0.30-cp37-cp37m-win_amd64.whl", hash = "sha256:b6bf767d14b77f6a18b6982cbbf29d71bede087edae495d11ab358280f304d8e"}, - {file = "SQLAlchemy-2.0.30-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bc0c53579650a891f9b83fa3cecd4e00218e071d0ba00c4890f5be0c34887ed3"}, - {file = "SQLAlchemy-2.0.30-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:311710f9a2ee235f1403537b10c7687214bb1f2b9ebb52702c5aa4a77f0b3af7"}, - {file = "SQLAlchemy-2.0.30-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:408f8b0e2c04677e9c93f40eef3ab22f550fecb3011b187f66a096395ff3d9fd"}, - {file = "SQLAlchemy-2.0.30-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37a4b4fb0dd4d2669070fb05b8b8824afd0af57587393015baee1cf9890242d9"}, - {file = "SQLAlchemy-2.0.30-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a943d297126c9230719c27fcbbeab57ecd5d15b0bd6bfd26e91bfcfe64220621"}, - {file = "SQLAlchemy-2.0.30-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0a089e218654e740a41388893e090d2e2c22c29028c9d1353feb38638820bbeb"}, - {file = "SQLAlchemy-2.0.30-cp38-cp38-win32.whl", hash = "sha256:fa561138a64f949f3e889eb9ab8c58e1504ab351d6cf55259dc4c248eaa19da6"}, - {file = "SQLAlchemy-2.0.30-cp38-cp38-win_amd64.whl", hash = "sha256:7d74336c65705b986d12a7e337ba27ab2b9d819993851b140efdf029248e818e"}, - {file = "SQLAlchemy-2.0.30-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ae8c62fe2480dd61c532ccafdbce9b29dacc126fe8be0d9a927ca3e699b9491a"}, - {file = "SQLAlchemy-2.0.30-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2383146973a15435e4717f94c7509982770e3e54974c71f76500a0136f22810b"}, - {file = "SQLAlchemy-2.0.30-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8409de825f2c3b62ab15788635ccaec0c881c3f12a8af2b12ae4910a0a9aeef6"}, - {file = "SQLAlchemy-2.0.30-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0094c5dc698a5f78d3d1539853e8ecec02516b62b8223c970c86d44e7a80f6c7"}, - {file = "SQLAlchemy-2.0.30-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:edc16a50f5e1b7a06a2dcc1f2205b0b961074c123ed17ebda726f376a5ab0953"}, - {file = "SQLAlchemy-2.0.30-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f7703c2010355dd28f53deb644a05fc30f796bd8598b43f0ba678878780b6e4c"}, - {file = "SQLAlchemy-2.0.30-cp39-cp39-win32.whl", hash = "sha256:1f9a727312ff6ad5248a4367358e2cf7e625e98b1028b1d7ab7b806b7d757513"}, - {file = "SQLAlchemy-2.0.30-cp39-cp39-win_amd64.whl", hash = "sha256:a0ef36b28534f2a5771191be6edb44cc2673c7b2edf6deac6562400288664221"}, - {file = "SQLAlchemy-2.0.30-py3-none-any.whl", hash = "sha256:7108d569d3990c71e26a42f60474b4c02c8586c4681af5fd67e51a044fdea86a"}, - {file = "SQLAlchemy-2.0.30.tar.gz", hash = "sha256:2b1708916730f4830bc69d6f49d37f7698b5bd7530aca7f04f785f8849e95255"}, + {file = "SQLAlchemy-2.0.31-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f2a213c1b699d3f5768a7272de720387ae0122f1becf0901ed6eaa1abd1baf6c"}, + {file = "SQLAlchemy-2.0.31-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9fea3d0884e82d1e33226935dac990b967bef21315cbcc894605db3441347443"}, + {file = "SQLAlchemy-2.0.31-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3ad7f221d8a69d32d197e5968d798217a4feebe30144986af71ada8c548e9fa"}, + {file = "SQLAlchemy-2.0.31-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f2bee229715b6366f86a95d497c347c22ddffa2c7c96143b59a2aa5cc9eebbc"}, + {file = "SQLAlchemy-2.0.31-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cd5b94d4819c0c89280b7c6109c7b788a576084bf0a480ae17c227b0bc41e109"}, + {file = "SQLAlchemy-2.0.31-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:750900a471d39a7eeba57580b11983030517a1f512c2cb287d5ad0fcf3aebd58"}, + {file = "SQLAlchemy-2.0.31-cp310-cp310-win32.whl", hash = "sha256:7bd112be780928c7f493c1a192cd8c5fc2a2a7b52b790bc5a84203fb4381c6be"}, + {file = "SQLAlchemy-2.0.31-cp310-cp310-win_amd64.whl", hash = "sha256:5a48ac4d359f058474fadc2115f78a5cdac9988d4f99eae44917f36aa1476327"}, + {file = "SQLAlchemy-2.0.31-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f68470edd70c3ac3b6cd5c2a22a8daf18415203ca1b036aaeb9b0fb6f54e8298"}, + {file = "SQLAlchemy-2.0.31-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2e2c38c2a4c5c634fe6c3c58a789712719fa1bf9b9d6ff5ebfce9a9e5b89c1ca"}, + {file = "SQLAlchemy-2.0.31-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd15026f77420eb2b324dcb93551ad9c5f22fab2c150c286ef1dc1160f110203"}, + {file = "SQLAlchemy-2.0.31-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2196208432deebdfe3b22185d46b08f00ac9d7b01284e168c212919891289396"}, + {file = "SQLAlchemy-2.0.31-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:352b2770097f41bff6029b280c0e03b217c2dcaddc40726f8f53ed58d8a85da4"}, + {file = "SQLAlchemy-2.0.31-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:56d51ae825d20d604583f82c9527d285e9e6d14f9a5516463d9705dab20c3740"}, + {file = "SQLAlchemy-2.0.31-cp311-cp311-win32.whl", hash = "sha256:6e2622844551945db81c26a02f27d94145b561f9d4b0c39ce7bfd2fda5776dac"}, + {file = "SQLAlchemy-2.0.31-cp311-cp311-win_amd64.whl", hash = "sha256:ccaf1b0c90435b6e430f5dd30a5aede4764942a695552eb3a4ab74ed63c5b8d3"}, + {file = "SQLAlchemy-2.0.31-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3b74570d99126992d4b0f91fb87c586a574a5872651185de8297c6f90055ae42"}, + {file = "SQLAlchemy-2.0.31-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f77c4f042ad493cb8595e2f503c7a4fe44cd7bd59c7582fd6d78d7e7b8ec52c"}, + {file = "SQLAlchemy-2.0.31-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd1591329333daf94467e699e11015d9c944f44c94d2091f4ac493ced0119449"}, + {file = "SQLAlchemy-2.0.31-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:74afabeeff415e35525bf7a4ecdab015f00e06456166a2eba7590e49f8db940e"}, + {file = "SQLAlchemy-2.0.31-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b9c01990d9015df2c6f818aa8f4297d42ee71c9502026bb074e713d496e26b67"}, + {file = "SQLAlchemy-2.0.31-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:66f63278db425838b3c2b1c596654b31939427016ba030e951b292e32b99553e"}, + {file = "SQLAlchemy-2.0.31-cp312-cp312-win32.whl", hash = "sha256:0b0f658414ee4e4b8cbcd4a9bb0fd743c5eeb81fc858ca517217a8013d282c96"}, + {file = "SQLAlchemy-2.0.31-cp312-cp312-win_amd64.whl", hash = "sha256:fa4b1af3e619b5b0b435e333f3967612db06351217c58bfb50cee5f003db2a5a"}, + {file = "SQLAlchemy-2.0.31-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f43e93057cf52a227eda401251c72b6fbe4756f35fa6bfebb5d73b86881e59b0"}, + {file = "SQLAlchemy-2.0.31-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d337bf94052856d1b330d5fcad44582a30c532a2463776e1651bd3294ee7e58b"}, + {file = "SQLAlchemy-2.0.31-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c06fb43a51ccdff3b4006aafee9fcf15f63f23c580675f7734245ceb6b6a9e05"}, + {file = "SQLAlchemy-2.0.31-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:b6e22630e89f0e8c12332b2b4c282cb01cf4da0d26795b7eae16702a608e7ca1"}, + {file = "SQLAlchemy-2.0.31-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:79a40771363c5e9f3a77f0e28b3302801db08040928146e6808b5b7a40749c88"}, + {file = "SQLAlchemy-2.0.31-cp37-cp37m-win32.whl", hash = "sha256:501ff052229cb79dd4c49c402f6cb03b5a40ae4771efc8bb2bfac9f6c3d3508f"}, + {file = "SQLAlchemy-2.0.31-cp37-cp37m-win_amd64.whl", hash = "sha256:597fec37c382a5442ffd471f66ce12d07d91b281fd474289356b1a0041bdf31d"}, + {file = "SQLAlchemy-2.0.31-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:dc6d69f8829712a4fd799d2ac8d79bdeff651c2301b081fd5d3fe697bd5b4ab9"}, + {file = "SQLAlchemy-2.0.31-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:23b9fbb2f5dd9e630db70fbe47d963c7779e9c81830869bd7d137c2dc1ad05fb"}, + {file = "SQLAlchemy-2.0.31-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2a21c97efcbb9f255d5c12a96ae14da873233597dfd00a3a0c4ce5b3e5e79704"}, + {file = "SQLAlchemy-2.0.31-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26a6a9837589c42b16693cf7bf836f5d42218f44d198f9343dd71d3164ceeeac"}, + {file = "SQLAlchemy-2.0.31-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:dc251477eae03c20fae8db9c1c23ea2ebc47331bcd73927cdcaecd02af98d3c3"}, + {file = "SQLAlchemy-2.0.31-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:2fd17e3bb8058359fa61248c52c7b09a97cf3c820e54207a50af529876451808"}, + {file = "SQLAlchemy-2.0.31-cp38-cp38-win32.whl", hash = "sha256:c76c81c52e1e08f12f4b6a07af2b96b9b15ea67ccdd40ae17019f1c373faa227"}, + {file = "SQLAlchemy-2.0.31-cp38-cp38-win_amd64.whl", hash = "sha256:4b600e9a212ed59355813becbcf282cfda5c93678e15c25a0ef896b354423238"}, + {file = "SQLAlchemy-2.0.31-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b6cf796d9fcc9b37011d3f9936189b3c8074a02a4ed0c0fbbc126772c31a6d4"}, + {file = "SQLAlchemy-2.0.31-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:78fe11dbe37d92667c2c6e74379f75746dc947ee505555a0197cfba9a6d4f1a4"}, + {file = "SQLAlchemy-2.0.31-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fc47dc6185a83c8100b37acda27658fe4dbd33b7d5e7324111f6521008ab4fe"}, + {file = "SQLAlchemy-2.0.31-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a41514c1a779e2aa9a19f67aaadeb5cbddf0b2b508843fcd7bafdf4c6864005"}, + {file = "SQLAlchemy-2.0.31-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:afb6dde6c11ea4525318e279cd93c8734b795ac8bb5dda0eedd9ebaca7fa23f1"}, + {file = "SQLAlchemy-2.0.31-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:3f9faef422cfbb8fd53716cd14ba95e2ef655400235c3dfad1b5f467ba179c8c"}, + {file = "SQLAlchemy-2.0.31-cp39-cp39-win32.whl", hash = "sha256:fc6b14e8602f59c6ba893980bea96571dd0ed83d8ebb9c4479d9ed5425d562e9"}, + {file = "SQLAlchemy-2.0.31-cp39-cp39-win_amd64.whl", hash = "sha256:3cb8a66b167b033ec72c3812ffc8441d4e9f5f78f5e31e54dcd4c90a4ca5bebc"}, + {file = "SQLAlchemy-2.0.31-py3-none-any.whl", hash = "sha256:69f3e3c08867a8e4856e92d7afb618b95cdee18e0bc1647b77599722c9a28911"}, + {file = "SQLAlchemy-2.0.31.tar.gz", hash = "sha256:b607489dd4a54de56984a0c7656247504bd5523d9d0ba799aef59d4add009484"}, ] [package.dependencies] -greenlet = {version = "!=0.4.17", optional = true, markers = "platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\" or extra == \"asyncio\""} +greenlet = {version = "!=0.4.17", optional = true, markers = "python_version < \"3.13\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\") or extra == \"asyncio\""} typing-extensions = ">=4.6.0" [package.extras] @@ -3149,13 +3102,13 @@ typing-extensions = ">=3.7.4.3" [[package]] name = "typing-extensions" -version = "4.12.0" +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.0-py3-none-any.whl", hash = "sha256:b349c66bea9016ac22978d800cfff206d5f9816951f12a7d0ec5578b0a819594"}, - {file = "typing_extensions-4.12.0.tar.gz", hash = "sha256:8cbcdc8606ebcb0d95453ad7dc5065e6237b6aa230a31e81d0f440c30fed5fd8"}, + {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, + {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, ] [[package]] @@ -3183,102 +3136,15 @@ files = [ [package.extras] test = ["coverage", "pytest", "pytest-cov"] -[[package]] -name = "ujson" -version = "5.10.0" -description = "Ultra fast JSON encoder and decoder for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "ujson-5.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2601aa9ecdbee1118a1c2065323bda35e2c5a2cf0797ef4522d485f9d3ef65bd"}, - {file = "ujson-5.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:348898dd702fc1c4f1051bc3aacbf894caa0927fe2c53e68679c073375f732cf"}, - {file = "ujson-5.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22cffecf73391e8abd65ef5f4e4dd523162a3399d5e84faa6aebbf9583df86d6"}, - {file = "ujson-5.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26b0e2d2366543c1bb4fbd457446f00b0187a2bddf93148ac2da07a53fe51569"}, - {file = "ujson-5.10.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:caf270c6dba1be7a41125cd1e4fc7ba384bf564650beef0df2dd21a00b7f5770"}, - {file = "ujson-5.10.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a245d59f2ffe750446292b0094244df163c3dc96b3ce152a2c837a44e7cda9d1"}, - {file = "ujson-5.10.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:94a87f6e151c5f483d7d54ceef83b45d3a9cca7a9cb453dbdbb3f5a6f64033f5"}, - {file = "ujson-5.10.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:29b443c4c0a113bcbb792c88bea67b675c7ca3ca80c3474784e08bba01c18d51"}, - {file = "ujson-5.10.0-cp310-cp310-win32.whl", hash = "sha256:c18610b9ccd2874950faf474692deee4223a994251bc0a083c114671b64e6518"}, - {file = "ujson-5.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:924f7318c31874d6bb44d9ee1900167ca32aa9b69389b98ecbde34c1698a250f"}, - {file = "ujson-5.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a5b366812c90e69d0f379a53648be10a5db38f9d4ad212b60af00bd4048d0f00"}, - {file = "ujson-5.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:502bf475781e8167f0f9d0e41cd32879d120a524b22358e7f205294224c71126"}, - {file = "ujson-5.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b91b5d0d9d283e085e821651184a647699430705b15bf274c7896f23fe9c9d8"}, - {file = "ujson-5.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:129e39af3a6d85b9c26d5577169c21d53821d8cf68e079060602e861c6e5da1b"}, - {file = "ujson-5.10.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f77b74475c462cb8b88680471193064d3e715c7c6074b1c8c412cb526466efe9"}, - {file = "ujson-5.10.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7ec0ca8c415e81aa4123501fee7f761abf4b7f386aad348501a26940beb1860f"}, - {file = "ujson-5.10.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ab13a2a9e0b2865a6c6db9271f4b46af1c7476bfd51af1f64585e919b7c07fd4"}, - {file = "ujson-5.10.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:57aaf98b92d72fc70886b5a0e1a1ca52c2320377360341715dd3933a18e827b1"}, - {file = "ujson-5.10.0-cp311-cp311-win32.whl", hash = "sha256:2987713a490ceb27edff77fb184ed09acdc565db700ee852823c3dc3cffe455f"}, - {file = "ujson-5.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:f00ea7e00447918ee0eff2422c4add4c5752b1b60e88fcb3c067d4a21049a720"}, - {file = "ujson-5.10.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:98ba15d8cbc481ce55695beee9f063189dce91a4b08bc1d03e7f0152cd4bbdd5"}, - {file = "ujson-5.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a9d2edbf1556e4f56e50fab7d8ff993dbad7f54bac68eacdd27a8f55f433578e"}, - {file = "ujson-5.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6627029ae4f52d0e1a2451768c2c37c0c814ffc04f796eb36244cf16b8e57043"}, - {file = "ujson-5.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8ccb77b3e40b151e20519c6ae6d89bfe3f4c14e8e210d910287f778368bb3d1"}, - {file = "ujson-5.10.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3caf9cd64abfeb11a3b661329085c5e167abbe15256b3b68cb5d914ba7396f3"}, - {file = "ujson-5.10.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6e32abdce572e3a8c3d02c886c704a38a1b015a1fb858004e03d20ca7cecbb21"}, - {file = "ujson-5.10.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a65b6af4d903103ee7b6f4f5b85f1bfd0c90ba4eeac6421aae436c9988aa64a2"}, - {file = "ujson-5.10.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:604a046d966457b6cdcacc5aa2ec5314f0e8c42bae52842c1e6fa02ea4bda42e"}, - {file = "ujson-5.10.0-cp312-cp312-win32.whl", hash = "sha256:6dea1c8b4fc921bf78a8ff00bbd2bfe166345f5536c510671bccececb187c80e"}, - {file = "ujson-5.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:38665e7d8290188b1e0d57d584eb8110951a9591363316dd41cf8686ab1d0abc"}, - {file = "ujson-5.10.0-cp313-cp313-macosx_10_9_x86_64.whl", hash = "sha256:618efd84dc1acbd6bff8eaa736bb6c074bfa8b8a98f55b61c38d4ca2c1f7f287"}, - {file = "ujson-5.10.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:38d5d36b4aedfe81dfe251f76c0467399d575d1395a1755de391e58985ab1c2e"}, - {file = "ujson-5.10.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67079b1f9fb29ed9a2914acf4ef6c02844b3153913eb735d4bf287ee1db6e557"}, - {file = "ujson-5.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7d0e0ceeb8fe2468c70ec0c37b439dd554e2aa539a8a56365fd761edb418988"}, - {file = "ujson-5.10.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:59e02cd37bc7c44d587a0ba45347cc815fb7a5fe48de16bf05caa5f7d0d2e816"}, - {file = "ujson-5.10.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2a890b706b64e0065f02577bf6d8ca3b66c11a5e81fb75d757233a38c07a1f20"}, - {file = "ujson-5.10.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:621e34b4632c740ecb491efc7f1fcb4f74b48ddb55e65221995e74e2d00bbff0"}, - {file = "ujson-5.10.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b9500e61fce0cfc86168b248104e954fead61f9be213087153d272e817ec7b4f"}, - {file = "ujson-5.10.0-cp313-cp313-win32.whl", hash = "sha256:4c4fc16f11ac1612f05b6f5781b384716719547e142cfd67b65d035bd85af165"}, - {file = "ujson-5.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:4573fd1695932d4f619928fd09d5d03d917274381649ade4328091ceca175539"}, - {file = "ujson-5.10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a984a3131da7f07563057db1c3020b1350a3e27a8ec46ccbfbf21e5928a43050"}, - {file = "ujson-5.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:73814cd1b9db6fc3270e9d8fe3b19f9f89e78ee9d71e8bd6c9a626aeaeaf16bd"}, - {file = "ujson-5.10.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:61e1591ed9376e5eddda202ec229eddc56c612b61ac6ad07f96b91460bb6c2fb"}, - {file = "ujson-5.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2c75269f8205b2690db4572a4a36fe47cd1338e4368bc73a7a0e48789e2e35a"}, - {file = "ujson-5.10.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7223f41e5bf1f919cd8d073e35b229295aa8e0f7b5de07ed1c8fddac63a6bc5d"}, - {file = "ujson-5.10.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d4dc2fd6b3067c0782e7002ac3b38cf48608ee6366ff176bbd02cf969c9c20fe"}, - {file = "ujson-5.10.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:232cc85f8ee3c454c115455195a205074a56ff42608fd6b942aa4c378ac14dd7"}, - {file = "ujson-5.10.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:cc6139531f13148055d691e442e4bc6601f6dba1e6d521b1585d4788ab0bfad4"}, - {file = "ujson-5.10.0-cp38-cp38-win32.whl", hash = "sha256:e7ce306a42b6b93ca47ac4a3b96683ca554f6d35dd8adc5acfcd55096c8dfcb8"}, - {file = "ujson-5.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:e82d4bb2138ab05e18f089a83b6564fee28048771eb63cdecf4b9b549de8a2cc"}, - {file = "ujson-5.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dfef2814c6b3291c3c5f10065f745a1307d86019dbd7ea50e83504950136ed5b"}, - {file = "ujson-5.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4734ee0745d5928d0ba3a213647f1c4a74a2a28edc6d27b2d6d5bd9fa4319e27"}, - {file = "ujson-5.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d47ebb01bd865fdea43da56254a3930a413f0c5590372a1241514abae8aa7c76"}, - {file = "ujson-5.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dee5e97c2496874acbf1d3e37b521dd1f307349ed955e62d1d2f05382bc36dd5"}, - {file = "ujson-5.10.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7490655a2272a2d0b072ef16b0b58ee462f4973a8f6bbe64917ce5e0a256f9c0"}, - {file = "ujson-5.10.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ba17799fcddaddf5c1f75a4ba3fd6441f6a4f1e9173f8a786b42450851bd74f1"}, - {file = "ujson-5.10.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:2aff2985cef314f21d0fecc56027505804bc78802c0121343874741650a4d3d1"}, - {file = "ujson-5.10.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:ad88ac75c432674d05b61184178635d44901eb749786c8eb08c102330e6e8996"}, - {file = "ujson-5.10.0-cp39-cp39-win32.whl", hash = "sha256:2544912a71da4ff8c4f7ab5606f947d7299971bdd25a45e008e467ca638d13c9"}, - {file = "ujson-5.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:3ff201d62b1b177a46f113bb43ad300b424b7847f9c5d38b1b4ad8f75d4a282a"}, - {file = "ujson-5.10.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5b6fee72fa77dc172a28f21693f64d93166534c263adb3f96c413ccc85ef6e64"}, - {file = "ujson-5.10.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:61d0af13a9af01d9f26d2331ce49bb5ac1fb9c814964018ac8df605b5422dcb3"}, - {file = "ujson-5.10.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ecb24f0bdd899d368b715c9e6664166cf694d1e57be73f17759573a6986dd95a"}, - {file = "ujson-5.10.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fbd8fd427f57a03cff3ad6574b5e299131585d9727c8c366da4624a9069ed746"}, - {file = "ujson-5.10.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:beeaf1c48e32f07d8820c705ff8e645f8afa690cca1544adba4ebfa067efdc88"}, - {file = "ujson-5.10.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:baed37ea46d756aca2955e99525cc02d9181de67f25515c468856c38d52b5f3b"}, - {file = "ujson-5.10.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7663960f08cd5a2bb152f5ee3992e1af7690a64c0e26d31ba7b3ff5b2ee66337"}, - {file = "ujson-5.10.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:d8640fb4072d36b08e95a3a380ba65779d356b2fee8696afeb7794cf0902d0a1"}, - {file = "ujson-5.10.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78778a3aa7aafb11e7ddca4e29f46bc5139131037ad628cc10936764282d6753"}, - {file = "ujson-5.10.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0111b27f2d5c820e7f2dbad7d48e3338c824e7ac4d2a12da3dc6061cc39c8e6"}, - {file = "ujson-5.10.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:c66962ca7565605b355a9ed478292da628b8f18c0f2793021ca4425abf8b01e5"}, - {file = "ujson-5.10.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ba43cc34cce49cf2d4bc76401a754a81202d8aa926d0e2b79f0ee258cb15d3a4"}, - {file = "ujson-5.10.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:ac56eb983edce27e7f51d05bc8dd820586c6e6be1c5216a6809b0c668bb312b8"}, - {file = "ujson-5.10.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f44bd4b23a0e723bf8b10628288c2c7c335161d6840013d4d5de20e48551773b"}, - {file = "ujson-5.10.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c10f4654e5326ec14a46bcdeb2b685d4ada6911050aa8baaf3501e57024b804"}, - {file = "ujson-5.10.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0de4971a89a762398006e844ae394bd46991f7c385d7a6a3b93ba229e6dac17e"}, - {file = "ujson-5.10.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:e1402f0564a97d2a52310ae10a64d25bcef94f8dd643fcf5d310219d915484f7"}, - {file = "ujson-5.10.0.tar.gz", hash = "sha256:b3cd8f3c5d8c7738257f1018880444f7b7d9b66232c64649f562d7ba86ad4bc1"}, -] - [[package]] name = "urllib3" -version = "2.2.1" +version = "2.2.2" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.8" files = [ - {file = "urllib3-2.2.1-py3-none-any.whl", hash = "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d"}, - {file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"}, + {file = "urllib3-2.2.2-py3-none-any.whl", hash = "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472"}, + {file = "urllib3-2.2.2.tar.gz", hash = "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"}, ] [package.extras] @@ -3289,13 +3155,13 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "uvicorn" -version = "0.30.0" +version = "0.30.3" description = "The lightning-fast ASGI server." optional = false python-versions = ">=3.8" files = [ - {file = "uvicorn-0.30.0-py3-none-any.whl", hash = "sha256:78fa0b5f56abb8562024a59041caeb555c86e48d0efdd23c3fe7de7a4075bdab"}, - {file = "uvicorn-0.30.0.tar.gz", hash = "sha256:f678dec4fa3a39706bbf49b9ec5fc40049d42418716cea52b53f07828a60aa37"}, + {file = "uvicorn-0.30.3-py3-none-any.whl", hash = "sha256:94a3608da0e530cea8f69683aa4126364ac18e3826b6630d1a65f4638aade503"}, + {file = "uvicorn-0.30.3.tar.gz", hash = "sha256:0d114d0831ff1adbf231d358cbf42f17333413042552a624ea6a9b4c33dcfd81"}, ] [package.dependencies] @@ -3358,13 +3224,13 @@ test = ["Cython (>=0.29.36,<0.30.0)", "aiohttp (==3.9.0b0)", "aiohttp (>=3.8.1)" [[package]] name = "virtualenv" -version = "20.26.2" +version = "20.26.3" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.7" files = [ - {file = "virtualenv-20.26.2-py3-none-any.whl", hash = "sha256:a624db5e94f01ad993d476b9ee5346fdf7b9de43ccaee0e0197012dc838a0e9b"}, - {file = "virtualenv-20.26.2.tar.gz", hash = "sha256:82bf0f4eebbb78d36ddaee0283d43fe5736b53880b8a8cdcd37390a07ac3741c"}, + {file = "virtualenv-20.26.3-py3-none-any.whl", hash = "sha256:8cc4a31139e796e9a7de2cd5cf2489de1217193116a8fd42328f1bd65f434589"}, + {file = "virtualenv-20.26.3.tar.gz", hash = "sha256:4c43a2a236279d9ea36a0d76f98d84bd6ca94ac4e0f4a3b9d46d05e10fea542a"}, ] [package.dependencies] @@ -3680,18 +3546,18 @@ multidict = ">=4.0" [[package]] name = "zipp" -version = "3.19.0" +version = "3.19.2" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.19.0-py3-none-any.whl", hash = "sha256:96dc6ad62f1441bcaccef23b274ec471518daf4fbbc580341204936a5a3dddec"}, - {file = "zipp-3.19.0.tar.gz", hash = "sha256:952df858fb3164426c976d9338d3961e8e8b3758e2e059e0f754b8c4262625ee"}, + {file = "zipp-3.19.2-py3-none-any.whl", hash = "sha256:f091755f667055f2d02b32c53771a7a6c8b47e1fdbc4b72a8b9072b3eef8015c"}, + {file = "zipp-3.19.2.tar.gz", hash = "sha256:bf1dcf6450f873a13e952a29504887c89e6de7506209e5b1bcc3460135d4de19"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] [extras] ibet-explorer = ["aiohttp", "async-cache", "ibet-prime-explorer", "textual", "typer"] @@ -3700,4 +3566,4 @@ settlement-cli = ["ibet-prime-settlement", "typer"] [metadata] lock-version = "2.0" python-versions = "3.12.2" -content-hash = "a3aa9da265176a0f230087f3eadd2880fcf610df97ff9915ed0f7a688f5f133c" +content-hash = "6e16dd3b6fa76e5a25f1cf9e7bec3ff57406ada215d82e4d4ac1c35a99db3b14" diff --git a/pyproject.toml b/pyproject.toml index 24736281..c5bd6306 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -44,8 +44,7 @@ pytest = "^7.4.4" pytest-cov = "^4.1.0" pyyaml = "^6.0" pre-commit = "^3.6.0" -isort = "^5.13.2" -black = "^24.1.1" +ruff = "^0.5.4" textual-dev = "^1.2.1" pytest-alembic = "^0.10.7" pytest-freezer = "^0.4.8" @@ -67,10 +66,42 @@ settlement-cli = [ "typer", ] -[tool.isort] -profile = "black" -combine_as_imports = true -skip_glob = ["migrations/*"] +[tool.ruff] +line-length = 88 +indent-width = 4 +target-version = "py312" + +[tool.ruff.format] +quote-style = "double" +indent-style = "space" +line-ending = "auto" +skip-magic-trailing-comma = false + +[tool.ruff.lint] +preview = true +explicit-preview-rules = true +# E: pycodestyle +# F: Pyflakes +select = ["E", "F"] +# UP042: Checks for classes that inherit from both str and enum.Enum +extend-select = ["UP042"] +# E711: Comparison to `None` should be `cond is None` +# E712: Avoid equality comparisons to False +# E721: Use is and is not for type comparisons, or isinstance() for isinstance checks +# E722: Do not use bare except +# E402: Module level import not at top of file +# E731: Do not assign a lambda expression, use a def +# E501: Line too long (trust formatter) +ignore = ["E402", "E711", "E712", "E721", "E722", "E731", "E501"] +exclude = ["migrations/*"] + +[tool.ruff.lint.extend-per-file-ignores] +# F401 [*] xxx imported but unused +# F403 from .main import * used; unable to detect undefined names +"__init__.py" = ["F401", "F403"] + +[tool.ruff.lint.isort] +combine-as-imports = true [build-system] requires = ["poetry-core"] diff --git a/tests/account_config.py b/tests/account_config.py index 12e84fcb..bcbfa83d 100644 --- a/tests/account_config.py +++ b/tests/account_config.py @@ -31,7 +31,7 @@ # Account Address(from local config) def config_eth_account(name): - account_config = yaml.safe_load(open(f"tests/data/account_config.yml", "r")) + account_config = yaml.safe_load(open("tests/data/account_config.yml", "r")) account_config[name]["keyfile_json"] = json.loads( account_config[name]["keyfile_json"] ) diff --git a/tests/app/model/blockchain/test_TokenList.py b/tests/app/model/blockchain/test_TokenList.py index 883acc0d..868cf200 100755 --- a/tests/app/model/blockchain/test_TokenList.py +++ b/tests/app/model/blockchain/test_TokenList.py @@ -48,7 +48,7 @@ def contract_list(db): raw_keyfile_json=test_account.get("keyfile_json"), password=test_account.get("password").encode("utf-8"), ) - contract_address, abi, tx_hash = ContractUtils.deploy_contract( + contract_address, _, _ = ContractUtils.deploy_contract( contract_name="TokenList", args=[], deployer=deployer_address, @@ -85,7 +85,7 @@ async def test_normal_1(self, db, contract_list): 10000, ] share_contract = IbetShareContract() - share_token_address, abi, tx_hash = await share_contract.create( + share_token_address, _, _ = await share_contract.create( args=arguments, tx_from=issuer_address, private_key=private_key ) @@ -117,7 +117,7 @@ async def test_normal_1(self, db, contract_list): "リターン内容", "発行目的", ] - bond_token_address, abi, tx_hash = await IbetStraightBondContract().create( + bond_token_address, _, _ = await IbetStraightBondContract().create( args=arguments, tx_from=issuer_address, private_key=private_key ) diff --git a/tests/app/model/blockchain/test_exchange_IbetExchangeInterface.py b/tests/app/model/blockchain/test_exchange_IbetExchangeInterface.py index a66ac9ad..94302cc1 100644 --- a/tests/app/model/blockchain/test_exchange_IbetExchangeInterface.py +++ b/tests/app/model/blockchain/test_exchange_IbetExchangeInterface.py @@ -96,7 +96,7 @@ async def issue_bond_token(issuer: dict, exchange_address: str): "リターン内容", "発行目的", ] - token_contract_address, abi, tx_hash = await IbetStraightBondContract().create( + token_contract_address, _, _ = await IbetStraightBondContract().create( args=arguments, tx_from=issuer_address, private_key=issuer_pk ) token_contract = ContractUtils.get_contract( diff --git a/tests/app/model/blockchain/test_exchange_IbetSecurityTokenEscrow.py b/tests/app/model/blockchain/test_exchange_IbetSecurityTokenEscrow.py index 96912b4c..e9806fd2 100644 --- a/tests/app/model/blockchain/test_exchange_IbetSecurityTokenEscrow.py +++ b/tests/app/model/blockchain/test_exchange_IbetSecurityTokenEscrow.py @@ -105,7 +105,7 @@ async def issue_bond_token(issuer: dict, exchange_address: str): "リターン内容", "発行目的", ] - token_contract_address, abi, tx_hash = await IbetStraightBondContract().create( + token_contract_address, _, _ = await IbetStraightBondContract().create( args=arguments, tx_from=issuer_address, private_key=issuer_pk ) token_contract = ContractUtils.get_contract( diff --git a/tests/app/model/blockchain/test_token_IbetShare.py b/tests/app/model/blockchain/test_token_IbetShare.py index d6c138cf..2248bfd7 100644 --- a/tests/app/model/blockchain/test_token_IbetShare.py +++ b/tests/app/model/blockchain/test_token_IbetShare.py @@ -86,7 +86,7 @@ async def test_normal_1(self, db): 10000, ] share_contract = IbetShareContract() - contract_address, abi, tx_hash = await share_contract.create( + contract_address, _, _ = await share_contract.create( args=arguments, tx_from=issuer_address, private_key=private_key ) @@ -255,7 +255,7 @@ async def test_error_5(self, db): "20221231", 10000, ] - contract_address, abi, tx_hash = await IbetShareContract().create( + contract_address, _, _ = await IbetShareContract().create( args=arguments, tx_from=issuer_address, private_key=private_key ) @@ -299,7 +299,7 @@ async def test_normal_1(self, db): 10001, ] share_contract = IbetShareContract() - contract_address, abi, tx_hash = await share_contract.create( + contract_address, _, _ = await share_contract.create( args=arguments, tx_from=issuer_address, private_key=private_key ) @@ -356,7 +356,7 @@ async def test_normal_2(self, db): 10001, ] share_contract = IbetShareContract() - contract_address, abi, tx_hash = await share_contract.create( + contract_address, _, _ = await share_contract.create( args=arguments, tx_from=issuer_address, private_key=private_key ) @@ -454,7 +454,7 @@ async def test_normal_3(self, db): 10001, ] share_contract = IbetShareContract() - contract_address, abi, tx_hash = await share_contract.create( + contract_address, _, _ = await share_contract.create( args=arguments, tx_from=issuer_address, private_key=private_key ) @@ -593,7 +593,7 @@ async def test_normal_1(self, db): 10000, ] share_contract = IbetShareContract() - contract_address, abi, tx_hash = await share_contract.create( + contract_address, _, _ = await share_contract.create( args=arguments, tx_from=issuer_address, private_key=private_key ) @@ -653,7 +653,7 @@ async def test_normal_2(self, db): 10000, ] share_contract = IbetShareContract() - contract_address, abi, tx_hash = await share_contract.create( + contract_address, _, _ = await share_contract.create( args=arguments, tx_from=issuer_address, private_key=private_key ) @@ -779,7 +779,7 @@ async def test_error_2(self, db): 10000, ] share_contract = IbetShareContract() - contract_address, abi, tx_hash = await share_contract.create( + await share_contract.create( args=arguments, tx_from=issuer_address, private_key=private_key ) @@ -819,7 +819,7 @@ async def test_error_3(self, db): 10000, ] share_contract = IbetShareContract() - contract_address, abi, tx_hash = await share_contract.create( + await share_contract.create( args=arguments, tx_from=issuer_address, private_key=private_key ) @@ -857,7 +857,7 @@ async def test_error_4(self, db): 10000, ] share_contract = IbetShareContract() - contract_address, abi, tx_hash = await share_contract.create( + await share_contract.create( args=arguments, tx_from=issuer_address, private_key=private_key ) @@ -903,7 +903,7 @@ async def test_error_5(self, db): 10000, ] share_contract = IbetShareContract() - contract_address, abi, tx_hash = await share_contract.create( + await share_contract.create( args=arguments, tx_from=issuer_address, private_key=private_key ) @@ -955,7 +955,7 @@ async def test_error_6(self, db): 10000, ] share_contract = IbetShareContract() - contract_address, abi, tx_hash = await share_contract.create( + await share_contract.create( args=arguments, tx_from=issuer_address, private_key=private_key ) @@ -1338,7 +1338,6 @@ async def test_error_7(self, db): class TestBulkForcedTransfer: - ########################################################################### # Normal Case ########################################################################### @@ -1783,7 +1782,7 @@ async def test_error_4(self, db): # bulk transfer _data = {"to_address_list": [to1_address, to2_address], "amount_list": [10, 20]} _transfer_data = BulkTransferParams(**_data) - with pytest.raises(SendTransactionError) as exc_info: + with pytest.raises(SendTransactionError): await share_contract.bulk_transfer( data=_transfer_data, tx_from=from_address, @@ -1985,7 +1984,7 @@ async def test_normal_1(self, db): 10000, ] share_contract = IbetShareContract() - contract_address, abi, tx_hash = await share_contract.create( + contract_address, _, _ = await share_contract.create( args=arguments, tx_from=issuer_address, private_key=private_key ) @@ -2270,7 +2269,6 @@ async def test_error_7(self, db): # additional issue _data = {"account_address": issuer_address, "amount": 10} _add_data = AdditionalIssueParams(**_data) - pre_datetime = datetime.now(UTC).replace(tzinfo=None) # mock # hardhatがrevertする際にweb3.pyからraiseされるExceptionはGethと異なるためモック化する。 @@ -2290,7 +2288,6 @@ async def test_error_7(self, db): class TestBulkAdditionalIssue: - ########################################################################### # Normal Case ########################################################################### @@ -2318,7 +2315,7 @@ async def test_normal_1(self, db): 10000, ] share_contract = IbetShareContract() - contract_address, abi, tx_hash = await share_contract.create( + contract_address, _, _ = await share_contract.create( args=arguments, tx_from=issuer_address, private_key=private_key ) @@ -2520,7 +2517,7 @@ async def test_normal_1(self, db): 10000, ] share_contract = IbetShareContract() - contract_address, abi, tx_hash = await share_contract.create( + contract_address, _, _ = await share_contract.create( args=arguments, tx_from=issuer_address, private_key=private_key ) @@ -2626,7 +2623,7 @@ async def test_error_3(self, db): 10000, ] share_contract = IbetShareContract() - contract_address, abi, tx_hash = await share_contract.create( + await share_contract.create( args=arguments, tx_from=issuer_address, private_key=private_key ) @@ -2664,7 +2661,7 @@ async def test_error_4(self, db): 10000, ] share_contract = IbetShareContract() - contract_address, abi, tx_hash = await share_contract.create( + await share_contract.create( args=arguments, tx_from=issuer_address, private_key=private_key ) @@ -2704,7 +2701,7 @@ async def test_error_5(self, db): 10000, ] share_contract = IbetShareContract() - contract_address, abi, tx_hash = await share_contract.create( + await share_contract.create( args=arguments, tx_from=issuer_address, private_key=private_key ) @@ -2748,7 +2745,7 @@ async def test_error_6(self, db): 10000, ] share_contract = IbetShareContract() - contract_address, abi, tx_hash = await share_contract.create( + await share_contract.create( args=arguments, tx_from=issuer_address, private_key=private_key ) @@ -2792,14 +2789,13 @@ async def test_error_7(self, db): 10000, ] share_contract = IbetShareContract() - contract_address, abi, tx_hash = await share_contract.create( + await share_contract.create( args=arguments, tx_from=issuer_address, private_key=private_key ) # redeem _data = {"account_address": issuer_address, "amount": 100_000_000} _add_data = RedeemParams(**_data) - pre_datetime = datetime.now(UTC).replace(tzinfo=None) # mock # hardhatがrevertする際にweb3.pyからraiseされるExceptionはGethと異なるためモック化する。 @@ -2822,7 +2818,6 @@ async def test_error_7(self, db): class TestBulkRedeem: - ########################################################################### # Normal Case ########################################################################### @@ -2850,7 +2845,7 @@ async def test_normal_1(self, db): 10000, ] share_contract = IbetShareContract() - contract_address, abi, tx_hash = await share_contract.create( + contract_address, _, _ = await share_contract.create( args=arguments, tx_from=issuer_address, private_key=private_key ) @@ -3043,7 +3038,7 @@ async def test_normal_1(self, db): 10000, ] share_contract = IbetShareContract() - contract_address, abi, tx_hash = await share_contract.create( + await share_contract.create( args=arguments, tx_from=issuer_address, private_key=private_key ) @@ -3418,7 +3413,7 @@ async def test_error_3(self, db): 10000, ] share_contract = IbetShareContract() - contract_address, abi, tx_hash = await share_contract.create( + await share_contract.create( args=arguments, tx_from=issuer_address, private_key=private_key ) @@ -3458,7 +3453,7 @@ async def test_error_4(self, db): ] share_contract = IbetShareContract() - contract_address, abi, tx_hash = await share_contract.create( + await share_contract.create( args=arguments, tx_from=issuer_address, private_key=private_key ) @@ -3772,7 +3767,7 @@ async def test_error_3(self, db): ] share_contract = IbetShareContract() - contract_address, abi, tx_hash = await share_contract.create( + await share_contract.create( args=arguments, tx_from=issuer_address, private_key=private_key ) @@ -3812,7 +3807,7 @@ async def test_error_4(self, db): ] share_contract = IbetShareContract() - contract_address, abi, tx_hash = await share_contract.create( + await share_contract.create( args=arguments, tx_from=issuer_address, private_key=private_key ) @@ -4084,7 +4079,7 @@ async def test_error_2_1(self, db): 10000, ] share_contract = IbetShareContract() - token_address, _, _ = await share_contract.create( + await share_contract.create( args=arguments, tx_from=issuer_address, private_key=issuer_pk ) @@ -4128,7 +4123,7 @@ async def test_error_2_2(self, db): 10000, ] share_contract = IbetShareContract() - token_address, _, _ = await share_contract.create( + await share_contract.create( args=arguments, tx_from=issuer_address, private_key=issuer_pk ) @@ -4172,7 +4167,7 @@ async def test_error_3(self, db): 10000, ] share_contract = IbetShareContract() - token_address, _, _ = await share_contract.create( + await share_contract.create( args=arguments, tx_from=issuer_address, private_key=issuer_pk ) @@ -4222,7 +4217,7 @@ async def test_error_4(self, db): 10000, ] share_contract = IbetShareContract() - token_address, _, _ = await share_contract.create( + await share_contract.create( args=arguments, tx_from=issuer_address, private_key=issuer_pk ) @@ -4271,7 +4266,7 @@ async def test_error_5(self, db): 10000, ] share_contract = IbetShareContract() - token_address, _, _ = await share_contract.create( + await share_contract.create( args=arguments, tx_from=issuer_address, private_key=issuer_pk ) @@ -4499,7 +4494,7 @@ async def test_error_2_1(self, db): 10000, ] share_contract = IbetShareContract() - token_address, _, _ = await share_contract.create( + await share_contract.create( args=arguments, tx_from=issuer_address, private_key=issuer_pk ) @@ -4557,7 +4552,7 @@ async def test_error_2_2(self, db): 10000, ] share_contract = IbetShareContract() - token_address, _, _ = await share_contract.create( + await share_contract.create( args=arguments, tx_from=issuer_address, private_key=issuer_pk ) @@ -4615,7 +4610,7 @@ async def test_error_3(self, db): 10000, ] share_contract = IbetShareContract() - token_address, _, _ = await share_contract.create( + await share_contract.create( args=arguments, tx_from=issuer_address, private_key=issuer_pk ) @@ -4679,7 +4674,7 @@ async def test_error_4(self, db): 10000, ] share_contract = IbetShareContract() - token_address, _, _ = await share_contract.create( + await share_contract.create( args=arguments, tx_from=issuer_address, private_key=issuer_pk ) @@ -4742,7 +4737,7 @@ async def test_error_5(self, db): 10000, ] share_contract = IbetShareContract() - token_address, _, _ = await share_contract.create( + await share_contract.create( args=arguments, tx_from=issuer_address, private_key=issuer_pk ) diff --git a/tests/app/model/blockchain/test_token_IbetStraightBond.py b/tests/app/model/blockchain/test_token_IbetStraightBond.py index 980881e1..6bd90d35 100644 --- a/tests/app/model/blockchain/test_token_IbetStraightBond.py +++ b/tests/app/model/blockchain/test_token_IbetStraightBond.py @@ -87,7 +87,7 @@ async def test_normal_1(self, db): "リターン内容", "発行目的", ] - contract_address, abi, tx_hash = await IbetStraightBondContract().create( + contract_address, _, _ = await IbetStraightBondContract().create( args=arguments, tx_from=issuer_address, private_key=private_key ) @@ -261,7 +261,7 @@ async def test_error_5(self, db): "リターン内容", "発行目的", ] - contract_address, abi, tx_hash = await IbetStraightBondContract().create( + contract_address, _, _ = await IbetStraightBondContract().create( args=arguments, tx_from=issuer_address, private_key=private_key ) @@ -304,12 +304,11 @@ async def test_normal_1(self, db): "リターン内容", "発行目的", ] - contract_address, abi, tx_hash = await IbetStraightBondContract().create( + contract_address, _, _ = await IbetStraightBondContract().create( args=arguments, tx_from=issuer_address, private_key=private_key ) # get token data - pre_datetime = datetime.now(UTC).replace(tzinfo=None) bond_contract = await IbetStraightBondContract(contract_address).get() # assertion @@ -381,9 +380,9 @@ async def test_normal_2(self, db): "リターン内容", "発行目的", ] - contract_address, abi, tx_hash = await IbetStraightBondContract( - ZERO_ADDRESS - ).create(args=arguments, tx_from=issuer_address, private_key=private_key) + contract_address, _, _ = await IbetStraightBondContract(ZERO_ADDRESS).create( + args=arguments, tx_from=issuer_address, private_key=private_key + ) # create cache token_attr = { @@ -517,9 +516,9 @@ async def test_normal_3(self, db): "リターン内容", "発行目的", ] - contract_address, abi, tx_hash = await IbetStraightBondContract( - ZERO_ADDRESS - ).create(args=arguments, tx_from=issuer_address, private_key=private_key) + contract_address, _, _ = await IbetStraightBondContract(ZERO_ADDRESS).create( + args=arguments, tx_from=issuer_address, private_key=private_key + ) # create cache token_attr = { @@ -713,7 +712,7 @@ async def test_normal_1(self, db): "発行目的", ] bond_contract = IbetStraightBondContract() - contract_address, abi, tx_hash = await bond_contract.create( + contract_address, _, _ = await bond_contract.create( args=arguments, tx_from=issuer_address, private_key=private_key ) @@ -795,7 +794,7 @@ async def test_normal_2(self, db): "発行目的", ] bond_contract = IbetStraightBondContract() - contract_address, abi, tx_hash = await bond_contract.create( + contract_address, _, _ = await bond_contract.create( args=arguments, tx_from=issuer_address, private_key=private_key ) @@ -1569,7 +1568,6 @@ async def test_error_7(self, db): class TestBulkForcedTransfer: - ########################################################################### # Normal Case ########################################################################### @@ -2027,7 +2025,7 @@ async def test_error_4(self, db): # bulk transfer _data = {"to_address_list": [to1_address, to2_address], "amount_list": [10, 20]} _transfer_data = BulkTransferParams(**_data) - with pytest.raises(SendTransactionError) as exc_info: + with pytest.raises(SendTransactionError): await bond_contract.bulk_transfer( data=_transfer_data, tx_from=from_address, @@ -2238,7 +2236,7 @@ async def test_normal_1(self, db): "発行目的", ] bond_contract = IbetStraightBondContract() - contract_address, abi, tx_hash = await bond_contract.create( + contract_address, _, _ = await bond_contract.create( args=arguments, tx_from=issuer_address, private_key=private_key ) @@ -2533,7 +2531,6 @@ async def test_error_7(self, db): # additional issue _data = {"account_address": issuer_address, "amount": 10} _add_data = AdditionalIssueParams(**_data) - pre_datetime = datetime.now(UTC).replace(tzinfo=None) # mock # hardhatがrevertする際にweb3.pyからraiseされるExceptionはGethと異なるためモック化する。 @@ -2553,7 +2550,6 @@ async def test_error_7(self, db): class TestBulkAdditionalIssue: - ########################################################################### # Normal Case ########################################################################### @@ -2583,7 +2579,7 @@ async def test_normal_1(self, db): "発行目的", ] bond_contract = IbetStraightBondContract() - contract_address, abi, tx_hash = await bond_contract.create( + contract_address, _, _ = await bond_contract.create( args=arguments, tx_from=issuer_address, private_key=private_key ) @@ -2794,7 +2790,7 @@ async def test_normal_1(self, db): "発行目的", ] bond_contract = IbetStraightBondContract() - contract_address, abi, tx_hash = await bond_contract.create( + contract_address, _, _ = await bond_contract.create( args=arguments, tx_from=issuer_address, private_key=private_key ) @@ -3083,7 +3079,6 @@ async def test_error_7(self, db): # redeem _data = {"account_address": issuer_address, "amount": 100_000_000} _add_data = RedeemParams(**_data) - pre_datetime = datetime.now(UTC).replace(tzinfo=None) # mock # hardhatがrevertする際にweb3.pyからraiseされるExceptionはGethと異なるためモック化する。 @@ -3106,7 +3101,6 @@ async def test_error_7(self, db): class TestBulkRedeem: - ########################################################################### # Normal Case ########################################################################### @@ -3136,7 +3130,7 @@ async def test_normal_1(self, db): "発行目的", ] bond_contract = IbetStraightBondContract() - contract_address, abi, tx_hash = await bond_contract.create( + contract_address, _, _ = await bond_contract.create( args=arguments, tx_from=issuer_address, private_key=private_key ) @@ -4078,7 +4072,7 @@ async def test_error_3(self, db): "発行目的", ] bond_contract = IbetStraightBondContract() - contract_address, abi, tx_hash = await bond_contract.create( + await bond_contract.create( args=arguments, tx_from=issuer_address, private_key=private_key ) @@ -4119,7 +4113,7 @@ async def test_error_4(self, db): "発行目的", ] bond_contract = IbetStraightBondContract() - contract_address, abi, tx_hash = await bond_contract.create( + await bond_contract.create( args=arguments, tx_from=issuer_address, private_key=private_key ) @@ -4396,7 +4390,7 @@ async def test_error_2_1(self, db): "発行目的", ] bond_contract = IbetStraightBondContract() - token_address, _, _ = await bond_contract.create( + await bond_contract.create( args=arguments, tx_from=issuer_address, private_key=issuer_pk ) @@ -4442,7 +4436,7 @@ async def test_error_2_2(self, db): "発行目的", ] bond_contract = IbetStraightBondContract() - token_address, _, _ = await bond_contract.create( + await bond_contract.create( args=arguments, tx_from=issuer_address, private_key=issuer_pk ) @@ -4488,7 +4482,7 @@ async def test_error_3(self, db): "発行目的", ] bond_contract = IbetStraightBondContract() - token_address, _, _ = await bond_contract.create( + await bond_contract.create( args=arguments, tx_from=issuer_address, private_key=issuer_pk ) @@ -4540,7 +4534,7 @@ async def test_error_4(self, db): "発行目的", ] bond_contract = IbetStraightBondContract() - token_address, _, _ = await bond_contract.create( + await bond_contract.create( args=arguments, tx_from=issuer_address, private_key=issuer_pk ) @@ -4591,7 +4585,7 @@ async def test_error_5(self, db): "発行目的", ] bond_contract = IbetStraightBondContract() - token_address, _, _ = await bond_contract.create( + await bond_contract.create( args=arguments, tx_from=issuer_address, private_key=issuer_pk ) @@ -4821,7 +4815,7 @@ async def test_error_2_1(self, db): "発行目的", ] bond_contract = IbetStraightBondContract() - token_address, _, _ = await bond_contract.create( + await bond_contract.create( args=arguments, tx_from=issuer_address, private_key=issuer_pk ) @@ -4881,7 +4875,7 @@ async def test_error_2_2(self, db): "発行目的", ] bond_contract = IbetStraightBondContract() - token_address, _, _ = await bond_contract.create( + await bond_contract.create( args=arguments, tx_from=issuer_address, private_key=issuer_pk ) @@ -4941,7 +4935,7 @@ async def test_error_3(self, db): "発行目的", ] bond_contract = IbetStraightBondContract() - token_address, _, _ = await bond_contract.create( + await bond_contract.create( args=arguments, tx_from=issuer_address, private_key=issuer_pk ) @@ -5007,7 +5001,7 @@ async def test_error_4(self, db): "発行目的", ] bond_contract = IbetStraightBondContract() - token_address, _, _ = await bond_contract.create( + await bond_contract.create( args=arguments, tx_from=issuer_address, private_key=issuer_pk ) @@ -5072,7 +5066,7 @@ async def test_error_5(self, db): "発行目的", ] bond_contract = IbetStraightBondContract() - token_address, _, _ = await bond_contract.create( + await bond_contract.create( args=arguments, tx_from=issuer_address, private_key=issuer_pk ) diff --git a/tests/app/test_blockchain_explorer_block_data_GET.py b/tests/app/test_blockchain_explorer_block_data_GET.py index c6d83257..57491d5c 100644 --- a/tests/app/test_blockchain_explorer_block_data_GET.py +++ b/tests/app/test_blockchain_explorer_block_data_GET.py @@ -407,9 +407,10 @@ def test_error_3(self, client: TestClient, db: Session): self.insert_block_data_block_number(db, latest_block_number=2) # Request target API - with mock.patch( - "app.routers.misc.bc_explorer.BC_EXPLORER_ENABLED", True - ), mock.patch("app.routers.misc.bc_explorer.BLOCK_RESPONSE_LIMIT", 2): + with ( + mock.patch("app.routers.misc.bc_explorer.BC_EXPLORER_ENABLED", True), + mock.patch("app.routers.misc.bc_explorer.BLOCK_RESPONSE_LIMIT", 2), + ): resp = client.get(self.apiurl) # Assertion diff --git a/tests/app/test_blockchain_explorer_tx_data_GET.py b/tests/app/test_blockchain_explorer_tx_data_GET.py index 4aebb7ee..364ccf6b 100644 --- a/tests/app/test_blockchain_explorer_tx_data_GET.py +++ b/tests/app/test_blockchain_explorer_tx_data_GET.py @@ -347,9 +347,10 @@ def test_error_3(self, client: TestClient, db: Session): self.insert_tx_data(db, self.B_tx_1) # Request target API - with mock.patch( - "app.routers.misc.bc_explorer.BC_EXPLORER_ENABLED", True - ), mock.patch("app.routers.misc.bc_explorer.TX_RESPONSE_LIMIT", 2): + with ( + mock.patch("app.routers.misc.bc_explorer.BC_EXPLORER_ENABLED", True), + mock.patch("app.routers.misc.bc_explorer.TX_RESPONSE_LIMIT", 2), + ): resp = client.get(self.apiurl) # Assertion diff --git a/tests/app/test_bond_tokens_POST.py b/tests/app/test_bond_tokens_POST.py index 739efc26..bb6c0ccb 100644 --- a/tests/app/test_bond_tokens_POST.py +++ b/tests/app/test_bond_tokens_POST.py @@ -98,8 +98,10 @@ async def test_normal_1(self, client, db): ) with ( - IbetStraightBondContract_create - ), TokenListContract_register, ContractUtils_get_block_by_transaction_hash: + IbetStraightBondContract_create, + TokenListContract_register, + ContractUtils_get_block_by_transaction_hash, + ): # request target api req_param = { "name": "name_test1", @@ -227,8 +229,9 @@ async def test_normal_2(self, client, db): ) with ( - IbetStraightBondContract_create - ), ContractUtils_get_block_by_transaction_hash: + IbetStraightBondContract_create, + ContractUtils_get_block_by_transaction_hash, + ): # request target api req_param = { "name": "name_test1", @@ -369,8 +372,10 @@ async def test_normal_3(self, client, db): ) with ( - IbetStraightBondContract_create - ), TokenListContract_register, ContractUtils_get_block_by_transaction_hash: + IbetStraightBondContract_create, + TokenListContract_register, + ContractUtils_get_block_by_transaction_hash, + ): # request target api req_param = { "name": "name_test1", diff --git a/tests/app/test_bond_tokens_{token_address}_history_GET.py b/tests/app/test_bond_tokens_{token_address}_history_GET.py index 01611293..16e6d677 100644 --- a/tests/app/test_bond_tokens_{token_address}_history_GET.py +++ b/tests/app/test_bond_tokens_{token_address}_history_GET.py @@ -18,11 +18,11 @@ """ import json +from _decimal import Decimal from datetime import datetime from unittest.mock import ANY import pytest -from _decimal import Decimal from eth_keyfile import decode_keyfile_json from pytz import timezone from starlette.testclient import TestClient @@ -258,10 +258,6 @@ def expected_original_after_issue( def test_normal_1(self, client, db, personal_info_contract): test_account = config_eth_account("user1") _issuer_address = test_account["address"] - issuer_private_key = decode_keyfile_json( - raw_keyfile_json=test_account["keyfile_json"], - password="password".encode("utf-8"), - ) _keyfile = test_account["keyfile_json"] # prepare data: Token @@ -568,7 +564,7 @@ async def test_normal_3_3(self, client, db, personal_info_contract, monkeypatch) _keyfile = test_account["keyfile_json"] # Prepare data : Token - token_contract, create_param = await deploy_bond_token_contract( + token_contract, _ = await deploy_bond_token_contract( db, _issuer_address, issuer_private_key, @@ -631,10 +627,6 @@ async def test_normal_3_3(self, client, db, personal_info_contract, monkeypatch) }, ) - original_after_issue = self.expected_original_after_issue( - create_param, _issuer_address, _token_address - ) - # assertion assert resp.status_code == 200 assert resp.json() == { @@ -1039,7 +1031,7 @@ async def test_normal_5_2(self, client, db, personal_info_contract): _keyfile = test_account["keyfile_json"] # Prepare data : Token - token_contract, create_param = await deploy_bond_token_contract( + token_contract, _ = await deploy_bond_token_contract( db, _issuer_address, issuer_private_key, personal_info_contract.address ) _token_address = token_contract.address diff --git a/tests/app/test_bond_tokens_{token_address}_personal_info_POST.py b/tests/app/test_bond_tokens_{token_address}_personal_info_POST.py index 1cdabe96..ae873629 100644 --- a/tests/app/test_bond_tokens_{token_address}_personal_info_POST.py +++ b/tests/app/test_bond_tokens_{token_address}_personal_info_POST.py @@ -83,8 +83,10 @@ def test_normal_1(self, client, db): ) with ( - IbetStraightBondContract_get - ), PersonalInfoContract_init, PersonalInfoContract_register_info: + IbetStraightBondContract_get, + PersonalInfoContract_init, + PersonalInfoContract_register_info, + ): # request target API req_param = { "account_address": _test_account_address, @@ -164,8 +166,10 @@ def test_normal_2(self, client, db): ) with ( - IbetStraightBondContract_get - ), PersonalInfoContract_init, PersonalInfoContract_register_info: + IbetStraightBondContract_get, + PersonalInfoContract_init, + PersonalInfoContract_register_info, + ): # request target API req_param = { "account_address": _test_account_address, @@ -251,8 +255,10 @@ def test_normal_3(self, client, db): ) with ( - IbetStraightBondContract_get - ), PersonalInfoContract_init, PersonalInfoContract_register_info: + IbetStraightBondContract_get, + PersonalInfoContract_init, + PersonalInfoContract_register_info, + ): # request target API req_param = { "account_address": _test_account_address, @@ -762,8 +768,10 @@ def test_error_5(self, client, db): ) with ( - IbetStraightBondContract_get - ), PersonalInfoContract_init, PersonalInfoContract_register_info: + IbetStraightBondContract_get, + PersonalInfoContract_init, + PersonalInfoContract_register_info, + ): # request target API req_param = { "account_address": _test_account_address, diff --git a/tests/app/test_bond_transfer_approvals_{token_address}_{id}_POST.py b/tests/app/test_bond_transfer_approvals_{token_address}_{id}_POST.py index 8f7865d7..7f4b4540 100644 --- a/tests/app/test_bond_transfer_approvals_{token_address}_{id}_POST.py +++ b/tests/app/test_bond_transfer_approvals_{token_address}_{id}_POST.py @@ -1421,8 +1421,9 @@ def test_error_5_2(self, client, db): # request target API with ( - IbetSecurityTokenContract_approve_transfer - ), IbetSecurityTokenContract_cancel_transfer: + IbetSecurityTokenContract_approve_transfer, + IbetSecurityTokenContract_cancel_transfer, + ): resp = client.post( self.base_url.format(self.test_token_address, id), json={"operation_type": "approve"}, @@ -1886,7 +1887,7 @@ def test_error_7_1(self, client, db): ) # request target API - with IbetSecurityTokenContract_approve_transfer as mock_transfer: + with IbetSecurityTokenContract_approve_transfer: resp = client.post( self.base_url.format(self.test_token_address, id), json={"operation_type": "approve"}, @@ -1969,7 +1970,7 @@ def test_error_7_2(self, client, db): ) # request target API - with IbetSecurityTokenContract_approve_transfer as mock_transfer: + with IbetSecurityTokenContract_approve_transfer: resp = client.post( self.base_url.format(self.test_token_address, id), json={"operation_type": "approve"}, diff --git a/tests/app/test_e2e_messaging_accounts_POST.py b/tests/app/test_e2e_messaging_accounts_POST.py index 2022ca5c..5744413a 100644 --- a/tests/app/test_e2e_messaging_accounts_POST.py +++ b/tests/app/test_e2e_messaging_accounts_POST.py @@ -76,12 +76,14 @@ def test_normal_1(self, client, db, e2e_messaging_contract): ], ) - with mock.patch( - "app.routers.misc.e2e_messaging.E2E_MESSAGING_CONTRACT_ADDRESS", - e2e_messaging_contract.address, - ), ( - mock_E2EMessaging_set_public_key - ), mock_ContractUtils_get_block_by_transaction_hash: + with ( + mock.patch( + "app.routers.misc.e2e_messaging.E2E_MESSAGING_CONTRACT_ADDRESS", + e2e_messaging_contract.address, + ), + mock_E2EMessaging_set_public_key, + mock_ContractUtils_get_block_by_transaction_hash, + ): # request target api req_param = {"eoa_password": E2EEUtils.encrypt(self.valid_password)} resp = client.post(self.base_url, json=req_param) @@ -178,16 +180,18 @@ def generate_random(self, NumberOfBytes): ], ) - with mock.patch( - "app.routers.misc.e2e_messaging.AWS_KMS_GENERATE_RANDOM_ENABLED", True - ), mock.patch( - "app.routers.misc.e2e_messaging.E2E_MESSAGING_CONTRACT_ADDRESS", - e2e_messaging_contract.address, - ), ( - mock_boto3_client - ), ( - mock_E2EMessaging_set_public_key - ), mock_ContractUtils_get_block_by_transaction_hash: + with ( + mock.patch( + "app.routers.misc.e2e_messaging.AWS_KMS_GENERATE_RANDOM_ENABLED", True + ), + mock.patch( + "app.routers.misc.e2e_messaging.E2E_MESSAGING_CONTRACT_ADDRESS", + e2e_messaging_contract.address, + ), + mock_boto3_client, + mock_E2EMessaging_set_public_key, + mock_ContractUtils_get_block_by_transaction_hash, + ): # request target api req_param = { "eoa_password": E2EEUtils.encrypt(self.valid_password), diff --git a/tests/app/test_files_{file_id}_DELETE.py b/tests/app/test_files_{file_id}_DELETE.py index fdf56d78..4f5e7e1e 100644 --- a/tests/app/test_files_{file_id}_DELETE.py +++ b/tests/app/test_files_{file_id}_DELETE.py @@ -17,8 +17,6 @@ SPDX-License-Identifier: Apache-2.0 """ -import base64 - from sqlalchemy import select from app.model.db import UploadFile diff --git a/tests/app/test_freezelog_CreateFreezeLogAccount.py b/tests/app/test_freezelog_CreateFreezeLogAccount.py index 42738e5b..60cf5f2e 100644 --- a/tests/app/test_freezelog_CreateFreezeLogAccount.py +++ b/tests/app/test_freezelog_CreateFreezeLogAccount.py @@ -80,12 +80,16 @@ def generate_random(self, NumberOfBytes): ) # Request target api - with mock.patch( - "app.routers.misc.freeze_log.AWS_KMS_GENERATE_RANDOM_ENABLED", True - ), mock.patch( - "app.routers.misc.freeze_log.FREEZE_LOG_CONTRACT_ADDRESS", - freeze_log_contract.address, - ), mock_boto3_client: + with ( + mock.patch( + "app.routers.misc.freeze_log.AWS_KMS_GENERATE_RANDOM_ENABLED", True + ), + mock.patch( + "app.routers.misc.freeze_log.FREEZE_LOG_CONTRACT_ADDRESS", + freeze_log_contract.address, + ), + mock_boto3_client, + ): req_param = {"eoa_password": E2EEUtils.encrypt(self.valid_password)} resp = client.post(self.test_url, json=req_param) diff --git a/tests/app/test_freezelog_RecordNewFreezeLog.py b/tests/app/test_freezelog_RecordNewFreezeLog.py index 4ccceffa..7b8506a8 100644 --- a/tests/app/test_freezelog_RecordNewFreezeLog.py +++ b/tests/app/test_freezelog_RecordNewFreezeLog.py @@ -97,15 +97,19 @@ async def test_normal_2(self, client, db, freeze_log_contract): db.commit() # Request target api - with mock.patch( - "app.routers.misc.freeze_log.E2EE_REQUEST_ENABLED", - False, - ), mock.patch( - "app.model.schema.freeze_log.E2EE_REQUEST_ENABLED", - False, - ), mock.patch( - "app.routers.misc.freeze_log.FREEZE_LOG_CONTRACT_ADDRESS", - freeze_log_contract.address, + with ( + mock.patch( + "app.routers.misc.freeze_log.E2EE_REQUEST_ENABLED", + False, + ), + mock.patch( + "app.model.schema.freeze_log.E2EE_REQUEST_ENABLED", + False, + ), + mock.patch( + "app.routers.misc.freeze_log.FREEZE_LOG_CONTRACT_ADDRESS", + freeze_log_contract.address, + ), ): req_param = { "account_address": user_address_1, @@ -383,12 +387,15 @@ def test_error_4(self, client, db, freeze_log_contract): db.commit() # Request target api - with mock.patch( - "app.utils.contract_utils.AsyncContractUtils.send_transaction", - MagicMock(side_effect=Exception("tx error")), - ), mock.patch( - "app.routers.misc.freeze_log.FREEZE_LOG_CONTRACT_ADDRESS", - freeze_log_contract.address, + with ( + mock.patch( + "app.utils.contract_utils.AsyncContractUtils.send_transaction", + MagicMock(side_effect=Exception("tx error")), + ), + mock.patch( + "app.routers.misc.freeze_log.FREEZE_LOG_CONTRACT_ADDRESS", + freeze_log_contract.address, + ), ): req_param = { "account_address": user_address_1, diff --git a/tests/app/test_freezelog_UpdateFreezeLog.py b/tests/app/test_freezelog_UpdateFreezeLog.py index e70db69e..77738f4d 100644 --- a/tests/app/test_freezelog_UpdateFreezeLog.py +++ b/tests/app/test_freezelog_UpdateFreezeLog.py @@ -107,15 +107,19 @@ async def test_normal_2(self, client, db, freeze_log_contract): db.commit() - with mock.patch( - "app.routers.misc.freeze_log.E2EE_REQUEST_ENABLED", - False, - ), mock.patch( - "app.model.schema.freeze_log.E2EE_REQUEST_ENABLED", - False, - ), mock.patch( - "app.routers.misc.freeze_log.FREEZE_LOG_CONTRACT_ADDRESS", - freeze_log_contract.address, + with ( + mock.patch( + "app.routers.misc.freeze_log.E2EE_REQUEST_ENABLED", + False, + ), + mock.patch( + "app.model.schema.freeze_log.E2EE_REQUEST_ENABLED", + False, + ), + mock.patch( + "app.routers.misc.freeze_log.FREEZE_LOG_CONTRACT_ADDRESS", + freeze_log_contract.address, + ), ): # Record new log resp_new = client.post( @@ -418,12 +422,15 @@ def test_error_4(self, client, db, freeze_log_contract): db.commit() - with mock.patch( - "app.utils.contract_utils.AsyncContractUtils.send_transaction", - MagicMock(side_effect=Exception("tx error")), - ), mock.patch( - "app.routers.misc.freeze_log.FREEZE_LOG_CONTRACT_ADDRESS", - freeze_log_contract.address, + with ( + mock.patch( + "app.utils.contract_utils.AsyncContractUtils.send_transaction", + MagicMock(side_effect=Exception("tx error")), + ), + mock.patch( + "app.routers.misc.freeze_log.FREEZE_LOG_CONTRACT_ADDRESS", + freeze_log_contract.address, + ), ): # Update log resp = client.post( diff --git a/tests/app/test_ledger_{token_address}_history_{ledger_id}_GET.py b/tests/app/test_ledger_{token_address}_history_{ledger_id}_GET.py index cee14ad6..e7634221 100644 --- a/tests/app/test_ledger_{token_address}_history_{ledger_id}_GET.py +++ b/tests/app/test_ledger_{token_address}_history_{ledger_id}_GET.py @@ -995,7 +995,10 @@ def test_normal_3_1(self, client, db): ) # request target API - with token_get_mock as token_get_mock_patch, personal_get_info_mock as personal_get_info_mock_patch: + with ( + token_get_mock, + personal_get_info_mock as personal_get_info_mock_patch, + ): # Note: # account_address_2 has no personal information in the DB # and gets information from the contract @@ -1304,7 +1307,10 @@ def test_normal_3_2(self, client, db): ) # request target API - with token_get_mock as token_get_mock_patch, personal_get_info_mock as personal_get_info_mock_patch: + with ( + token_get_mock, + personal_get_info_mock as personal_get_info_mock_patch, + ): # Note: # account_address_2 has no personal information in the DB # and gets information from the contract @@ -1553,7 +1559,7 @@ def test_normal_3_3(self, client, db): ) # request target API - with token_get_mock as token_get_mock_patch: + with token_get_mock: resp = client.get( self.base_url.format(token_address=token_address, ledger_id=1), params={ @@ -1630,7 +1636,6 @@ def test_normal_3_4(self, client, db): user_1 = config_eth_account("user1") issuer_address = user_1["address"] token_address = "0xABCdeF1234567890abcdEf123456789000000000" - account_address_1 = "0xABCdeF1234567890abCDeF123456789000000001" personal_info_contract_address = "0xabcDEF1234567890AbcDEf123456789000000003" # prepare data @@ -1740,7 +1745,7 @@ def test_normal_3_4(self, client, db): ) # request target API - with token_get_mock as token_get_mock_patch: + with token_get_mock: resp = client.get( self.base_url.format(token_address=token_address, ledger_id=1), params={ @@ -1753,62 +1758,65 @@ def test_normal_3_4(self, client, db): # assertion assert resp.status_code == 200 - assert resp.json() == { - "created": "2022/12/01", - "token_name": "テスト原簿", - "currency": "JPY", - "headers": [ - { - "key": "aaa", - "value": "aaa", - }, - { - "hoge": "aaaa", - "fuga": "bbbb", - }, - ], - "details": [ - { - "token_detail_type": "権利_test_1", - "headers": [ - { - "key": "aaa", - "value": "aaa", - }, - {"test1": "a", "test2": "b"}, - ], - "data": [ - { - "account_address": issuer_address, - "name": None, - "address": None, - "amount": 10, - "price": 20, - "balance": 30, - "acquisition_date": "2022/12/02", - }, - ], - "footers": [ - { - "key": "aaa", - "value": "aaa", - }, - {"f-test1": "a", "f-test2": "b"}, - ], - "some_personal_info_not_registered": False, # Issuer cannot have any personal info - }, - ], - "footers": [ - { - "key": "aaa", - "value": "aaa", - }, - { - "f-hoge": "aaaa", - "f-fuga": "bbbb", - }, - ], - } + assert ( + resp.json() + == { + "created": "2022/12/01", + "token_name": "テスト原簿", + "currency": "JPY", + "headers": [ + { + "key": "aaa", + "value": "aaa", + }, + { + "hoge": "aaaa", + "fuga": "bbbb", + }, + ], + "details": [ + { + "token_detail_type": "権利_test_1", + "headers": [ + { + "key": "aaa", + "value": "aaa", + }, + {"test1": "a", "test2": "b"}, + ], + "data": [ + { + "account_address": issuer_address, + "name": None, + "address": None, + "amount": 10, + "price": 20, + "balance": 30, + "acquisition_date": "2022/12/02", + }, + ], + "footers": [ + { + "key": "aaa", + "value": "aaa", + }, + {"f-test1": "a", "f-test2": "b"}, + ], + "some_personal_info_not_registered": False, # Issuer cannot have any personal info + }, + ], + "footers": [ + { + "key": "aaa", + "value": "aaa", + }, + { + "f-hoge": "aaaa", + "f-fuga": "bbbb", + }, + ], + } + ) # # latest_flg = 1 (Get the latest personal info) @@ -1943,9 +1951,7 @@ def test_normal_3_5(self, client, db): ) # JST 2022/01/02 db.add(_ledger_1) - _idx_personal_info_1 = ( - IDXPersonalInfo() - ) # Note: account_address_1 has personal information in DB but the values are null + _idx_personal_info_1 = IDXPersonalInfo() # Note: account_address_1 has personal information in DB but the values are null _idx_personal_info_1.account_address = account_address_1 _idx_personal_info_1.issuer_address = issuer_address _idx_personal_info_1.personal_info = { @@ -2001,7 +2007,10 @@ def test_normal_3_5(self, client, db): ) # request target API - with token_get_mock as token_get_mock_patch, personal_get_info_mock as personal_get_info_mock_patch: + with ( + token_get_mock, + personal_get_info_mock as personal_get_info_mock_patch, + ): # Note: # account_address_2 has no personal information in the DB # and gets information from the contract diff --git a/tests/app/test_settlement_dvp_agent_accounts_POST.py b/tests/app/test_settlement_dvp_agent_accounts_POST.py index 41aec323..f5146b65 100644 --- a/tests/app/test_settlement_dvp_agent_accounts_POST.py +++ b/tests/app/test_settlement_dvp_agent_accounts_POST.py @@ -76,9 +76,13 @@ def generate_random(self, NumberOfBytes): ) # Request target api - with mock.patch( - "app.routers.misc.settlement_agent.AWS_KMS_GENERATE_RANDOM_ENABLED", True - ), mock_boto3_client: + with ( + mock.patch( + "app.routers.misc.settlement_agent.AWS_KMS_GENERATE_RANDOM_ENABLED", + True, + ), + mock_boto3_client, + ): req_param = {"eoa_password": E2EEUtils.encrypt(self.valid_password)} resp = client.post(self.test_url, json=req_param) diff --git a/tests/app/test_settlement_dvp_agent_{exchange_address}_deliveries_GET.py b/tests/app/test_settlement_dvp_agent_{exchange_address}_deliveries_GET.py index 7af00434..e5f6b22d 100644 --- a/tests/app/test_settlement_dvp_agent_{exchange_address}_deliveries_GET.py +++ b/tests/app/test_settlement_dvp_agent_{exchange_address}_deliveries_GET.py @@ -23,7 +23,6 @@ class TestListAllDVPDeliveries: - agent_address_1 = "0x1234567890123456789012345678900000001000" agent_address_2 = "0x1234567890123456789012345678900000002000" diff --git a/tests/app/test_settlement_dvp_{exchange_address}_deliveries_POST.py b/tests/app/test_settlement_dvp_{exchange_address}_deliveries_POST.py index 122d7e82..e8b4fcb8 100644 --- a/tests/app/test_settlement_dvp_{exchange_address}_deliveries_POST.py +++ b/tests/app/test_settlement_dvp_{exchange_address}_deliveries_POST.py @@ -91,14 +91,9 @@ def test_normal_1( ) user_2 = config_eth_account("user2") user_address_1 = user_2["address"] - user_private_key_1 = decode_keyfile_json( - raw_keyfile_json=user_2["keyfile_json"], password="password".encode("utf-8") - ) + user_3 = config_eth_account("user3") agent_address = user_3["address"] - agent_private_key = decode_keyfile_json( - raw_keyfile_json=user_3["keyfile_json"], password="password".encode("utf-8") - ) # prepare data account = Account() @@ -175,14 +170,9 @@ def test_normal_2( ) user_2 = config_eth_account("user2") user_address_1 = user_2["address"] - user_private_key_1 = decode_keyfile_json( - raw_keyfile_json=user_2["keyfile_json"], password="password".encode("utf-8") - ) + user_3 = config_eth_account("user3") agent_address = user_3["address"] - agent_private_key = decode_keyfile_json( - raw_keyfile_json=user_3["keyfile_json"], password="password".encode("utf-8") - ) # prepare data account = Account() @@ -262,9 +252,6 @@ def test_error_1(self, client, db, ibet_security_token_dvp_contract): user_1 = config_eth_account("user1") issuer_address = user_1["address"] _keyfile = user_1["keyfile_json"] - issuer_private_key = decode_keyfile_json( - raw_keyfile_json=user_1["keyfile_json"], password="password".encode("utf-8") - ) # prepare data token = Token() @@ -340,9 +327,6 @@ def test_error_2(self, client, db, ibet_security_token_dvp_contract): user_1 = config_eth_account("user1") issuer_address = user_1["address"] _keyfile = user_1["keyfile_json"] - issuer_private_key = decode_keyfile_json( - raw_keyfile_json=user_1["keyfile_json"], password="password".encode("utf-8") - ) # prepare data token = Token() @@ -397,9 +381,6 @@ def test_error_3(self, client, db, ibet_security_token_dvp_contract): user_1 = config_eth_account("user1") issuer_address = user_1["address"] _keyfile = user_1["keyfile_json"] - issuer_private_key = decode_keyfile_json( - raw_keyfile_json=user_1["keyfile_json"], password="password".encode("utf-8") - ) # request target API req_param = { @@ -469,9 +450,6 @@ def test_error_4(self, client, db, ibet_security_token_dvp_contract): # # RequestValidationError: issuer-address def test_error_5(self, client, db, ibet_security_token_dvp_contract): - test_account = config_eth_account("user1") - issuer_address = test_account["address"] - # request target API req_param = { "token_address": "0x0000000000000000000000000000000000000000", @@ -509,9 +487,6 @@ def test_error_6(self, client, db, ibet_security_token_dvp_contract): user_1 = config_eth_account("user1") issuer_address = user_1["address"] _keyfile = user_1["keyfile_json"] - issuer_private_key = decode_keyfile_json( - raw_keyfile_json=user_1["keyfile_json"], password="password".encode("utf-8") - ) # prepare data account = Account() @@ -558,9 +533,6 @@ def test_error_7(self, client, db, ibet_security_token_dvp_contract): user_1 = config_eth_account("user1") issuer_address = user_1["address"] _keyfile = user_1["keyfile_json"] - issuer_private_key = decode_keyfile_json( - raw_keyfile_json=user_1["keyfile_json"], password="password".encode("utf-8") - ) # prepare data token = Token() @@ -607,9 +579,6 @@ def test_error_8(self, client, db, ibet_security_token_dvp_contract): user_1 = config_eth_account("user1") issuer_address = user_1["address"] _keyfile = user_1["keyfile_json"] - issuer_private_key = decode_keyfile_json( - raw_keyfile_json=user_1["keyfile_json"], password="password".encode("utf-8") - ) # prepare data account = Account() @@ -659,14 +628,9 @@ def test_error_9( ) user_2 = config_eth_account("user2") user_address_1 = user_2["address"] - user_private_key_1 = decode_keyfile_json( - raw_keyfile_json=user_2["keyfile_json"], password="password".encode("utf-8") - ) + user_3 = config_eth_account("user3") agent_address = user_3["address"] - agent_private_key = decode_keyfile_json( - raw_keyfile_json=user_3["keyfile_json"], password="password".encode("utf-8") - ) # prepare data account = Account() diff --git a/tests/app/test_settlement_dvp_{exchange_address}_delivery_{delivery_id}_POST.py b/tests/app/test_settlement_dvp_{exchange_address}_delivery_{delivery_id}_POST.py index bcbb8b8a..9ac755ae 100644 --- a/tests/app/test_settlement_dvp_{exchange_address}_delivery_{delivery_id}_POST.py +++ b/tests/app/test_settlement_dvp_{exchange_address}_delivery_{delivery_id}_POST.py @@ -96,16 +96,12 @@ def test_normal_1_1( issuer_private_key = decode_keyfile_json( raw_keyfile_json=user_1["keyfile_json"], password="password".encode("utf-8") ) + user_2 = config_eth_account("user2") user_address_1 = user_2["address"] - user_private_key_1 = decode_keyfile_json( - raw_keyfile_json=user_2["keyfile_json"], password="password".encode("utf-8") - ) + user_3 = config_eth_account("user3") agent_address = user_3["address"] - agent_private_key = decode_keyfile_json( - raw_keyfile_json=user_3["keyfile_json"], password="password".encode("utf-8") - ) # prepare data account = Account() @@ -195,16 +191,12 @@ def test_normal_1_2( issuer_private_key = decode_keyfile_json( raw_keyfile_json=user_1["keyfile_json"], password="password".encode("utf-8") ) + user_2 = config_eth_account("user2") user_address_1 = user_2["address"] - user_private_key_1 = decode_keyfile_json( - raw_keyfile_json=user_2["keyfile_json"], password="password".encode("utf-8") - ) + user_3 = config_eth_account("user3") agent_address = user_3["address"] - agent_private_key = decode_keyfile_json( - raw_keyfile_json=user_3["keyfile_json"], password="password".encode("utf-8") - ) # prepare data account = Account() @@ -298,9 +290,6 @@ def test_error_1(self, client, db, ibet_security_token_dvp_contract): user_1 = config_eth_account("user1") issuer_address = user_1["address"] _keyfile = user_1["keyfile_json"] - issuer_private_key = decode_keyfile_json( - raw_keyfile_json=user_1["keyfile_json"], password="password".encode("utf-8") - ) # request target API req_param = {"operation_type": "invalid_value"} @@ -359,9 +348,6 @@ def test_error_2(self, client, db, ibet_security_token_dvp_contract): # # RequestValidationError: issuer-address def test_error_3(self, client, db, ibet_security_token_dvp_contract): - test_account = config_eth_account("user1") - issuer_address = test_account["address"] - # request target API req_param = { "operation_type": "Cancel", @@ -395,9 +381,6 @@ def test_error_4(self, client, db, ibet_security_token_dvp_contract): user_1 = config_eth_account("user1") issuer_address = user_1["address"] _keyfile = user_1["keyfile_json"] - issuer_private_key = decode_keyfile_json( - raw_keyfile_json=user_1["keyfile_json"], password="password".encode("utf-8") - ) # prepare data account = Account() @@ -440,9 +423,6 @@ def test_error_5(self, client, db, ibet_security_token_dvp_contract): user_1 = config_eth_account("user1") issuer_address = user_1["address"] _keyfile = user_1["keyfile_json"] - issuer_private_key = decode_keyfile_json( - raw_keyfile_json=user_1["keyfile_json"], password="password".encode("utf-8") - ) # prepare data token = Token() @@ -485,9 +465,6 @@ def test_error_6(self, client, db, ibet_security_token_dvp_contract): user_1 = config_eth_account("user1") issuer_address = user_1["address"] _keyfile = user_1["keyfile_json"] - issuer_private_key = decode_keyfile_json( - raw_keyfile_json=user_1["keyfile_json"], password="password".encode("utf-8") - ) # prepare data account = Account() diff --git a/tests/app/test_share_tokens_POST.py b/tests/app/test_share_tokens_POST.py index ffa8a4d4..ec0ad988 100644 --- a/tests/app/test_share_tokens_POST.py +++ b/tests/app/test_share_tokens_POST.py @@ -99,8 +99,10 @@ async def test_normal_1_1(self, client, db): ) with ( - IbetShareContract_create - ), TokenListContract_register, ContractUtils_get_block_by_transaction_hash: + IbetShareContract_create, + TokenListContract_register, + ContractUtils_get_block_by_transaction_hash, + ): # request target api req_param = { "name": "name_test1", @@ -236,8 +238,10 @@ async def test_normal_1_2(self, client, db): ) with ( - IbetShareContract_create - ), TokenListContract_register, ContractUtils_get_block_by_transaction_hash: + IbetShareContract_create, + TokenListContract_register, + ContractUtils_get_block_by_transaction_hash, + ): # request target api req_param = { "name": "name_test1", @@ -357,8 +361,10 @@ async def test_normal_2(self, client, db): ) with ( - IbetShareContract_create - ), TokenListContract_register, ContractUtils_get_block_by_transaction_hash: + IbetShareContract_create, + TokenListContract_register, + ContractUtils_get_block_by_transaction_hash, + ): # request target api req_param = { "name": "name_test1", @@ -489,8 +495,10 @@ async def test_normal_3(self, client, db): ) with ( - IbetShareContract_create - ), TokenListContract_register, ContractUtils_get_block_by_transaction_hash: + IbetShareContract_create, + TokenListContract_register, + ContractUtils_get_block_by_transaction_hash, + ): # request target api req_param = { "name": "name_test1", @@ -622,8 +630,10 @@ def test_normal_4_1(self, client, db): ) with ( - IbetShareContract_create - ), TokenListContract_register, ContractUtils_get_block_by_transaction_hash: + IbetShareContract_create, + TokenListContract_register, + ContractUtils_get_block_by_transaction_hash, + ): # request target api req_param = { "name": "name_test1", @@ -702,8 +712,10 @@ def test_normal_4_2(self, client, db): ) with ( - IbetShareContract_create - ), TokenListContract_register, ContractUtils_get_block_by_transaction_hash: + IbetShareContract_create, + TokenListContract_register, + ContractUtils_get_block_by_transaction_hash, + ): # request target api req_param = { "name": "name_test1", @@ -836,8 +848,6 @@ def test_error_2_1(self, client, db): # Validation Error # required headers def test_error_2_2(self, client, db): - test_account = config_eth_account("user1") - # request target api req_param = { "name": "name_test1", @@ -1214,7 +1224,6 @@ def test_error_3_1(self, client, db): # Password Mismatch def test_error_3_2(self, client, db): test_account_1 = config_eth_account("user1") - test_account_2 = config_eth_account("user2") # prepare data account = Account() diff --git a/tests/app/test_share_tokens_{token_address}_history_GET.py b/tests/app/test_share_tokens_{token_address}_history_GET.py index 449a2d84..06616653 100644 --- a/tests/app/test_share_tokens_{token_address}_history_GET.py +++ b/tests/app/test_share_tokens_{token_address}_history_GET.py @@ -218,10 +218,6 @@ def expected_original_after_issue( def test_normal_1(self, client, db, personal_info_contract): test_account = config_eth_account("user1") _issuer_address = test_account["address"] - issuer_private_key = decode_keyfile_json( - raw_keyfile_json=test_account["keyfile_json"], - password="password".encode("utf-8"), - ) _keyfile = test_account["keyfile_json"] # prepare data: Token @@ -560,7 +556,7 @@ async def test_normal_3_3(self, client, db, personal_info_contract): _keyfile = test_account["keyfile_json"] # Prepare data : Token - token_contract, create_param = await deploy_share_token_contract( + token_contract, _ = await deploy_share_token_contract( db, _issuer_address, issuer_private_key, @@ -1067,7 +1063,7 @@ async def test_normal_5_2(self, client, db, personal_info_contract): _keyfile = test_account["keyfile_json"] # Prepare data : Token - token_contract, create_param = await deploy_share_token_contract( + token_contract, _ = await deploy_share_token_contract( db, _issuer_address, issuer_private_key, personal_info_contract.address ) _token_address = token_contract.address diff --git a/tests/app/test_share_tokens_{token_address}_personal_info_POST.py b/tests/app/test_share_tokens_{token_address}_personal_info_POST.py index 8154fb6e..6a9de0cc 100644 --- a/tests/app/test_share_tokens_{token_address}_personal_info_POST.py +++ b/tests/app/test_share_tokens_{token_address}_personal_info_POST.py @@ -83,8 +83,10 @@ def test_normal_1(self, client, db): ) with ( - IbetShareContract_get - ), PersonalInfoContract_init, PersonalInfoContract_register_info: + IbetShareContract_get, + PersonalInfoContract_init, + PersonalInfoContract_register_info, + ): # request target API req_param = { "account_address": _test_account_address, @@ -164,8 +166,10 @@ def test_normal_2(self, client, db): ) with ( - IbetShareContract_get - ), PersonalInfoContract_init, PersonalInfoContract_register_info: + IbetShareContract_get, + PersonalInfoContract_init, + PersonalInfoContract_register_info, + ): # request target API req_param = { "account_address": _test_account_address, @@ -251,8 +255,10 @@ def test_normal_3(self, client, db): ) with ( - IbetShareContract_get - ), PersonalInfoContract_init, PersonalInfoContract_register_info: + IbetShareContract_get, + PersonalInfoContract_init, + PersonalInfoContract_register_info, + ): # request target API req_param = { "account_address": _test_account_address, @@ -762,8 +768,10 @@ def test_error_5(self, client, db): ) with ( - IbetShareContract_get - ), PersonalInfoContract_init, PersonalInfoContract_register_info: + IbetShareContract_get, + PersonalInfoContract_init, + PersonalInfoContract_register_info, + ): # request target API req_param = { "account_address": _test_account_address, diff --git a/tests/app/test_share_transfer_approvals_{token_address}_{id}_POST.py b/tests/app/test_share_transfer_approvals_{token_address}_{id}_POST.py index c7c74da5..793b7771 100644 --- a/tests/app/test_share_transfer_approvals_{token_address}_{id}_POST.py +++ b/tests/app/test_share_transfer_approvals_{token_address}_{id}_POST.py @@ -1421,8 +1421,9 @@ def test_error_5_2(self, client, db): # request target API with ( - IbetSecurityTokenContract_approve_transfer - ), IbetSecurityTokenContract_cancel_transfer: + IbetSecurityTokenContract_approve_transfer, + IbetSecurityTokenContract_cancel_transfer, + ): resp = client.post( self.base_url.format(self.test_token_address, id), json={"operation_type": "approve"}, @@ -1886,7 +1887,7 @@ def test_error_7_1(self, client, db): ) # request target API - with IbetSecurityTokenContract_approve_transfer as mock_transfer: + with IbetSecurityTokenContract_approve_transfer: resp = client.post( self.base_url.format(self.test_token_address, id), json={"operation_type": "approve"}, @@ -1969,7 +1970,7 @@ def test_error_7_2(self, client, db): ) # request target API - with IbetSecurityTokenContract_approve_transfer as mock_transfer: + with IbetSecurityTokenContract_approve_transfer: resp = client.post( self.base_url.format(self.test_token_address, id), json={"operation_type": "approve"}, diff --git a/tests/app/utils/test_asynccontract_utils.py b/tests/app/utils/test_asynccontract_utils.py index dc019817..cb0bcdcf 100755 --- a/tests/app/utils/test_asynccontract_utils.py +++ b/tests/app/utils/test_asynccontract_utils.py @@ -118,9 +118,9 @@ class TestDeployContract: @pytest.mark.asyncio async def test_normal_1(self, db): ( - rtn_contract_address, + _, rtn_abi, - rtn_tx_hash, + _, ) = await AsyncContractUtils.deploy_contract( contract_name=self.test_contract_name, args=self.test_arg, diff --git a/tests/app/utils/test_contract_utils.py b/tests/app/utils/test_contract_utils.py index 8aa5e547..f7e33c5f 100755 --- a/tests/app/utils/test_contract_utils.py +++ b/tests/app/utils/test_contract_utils.py @@ -116,7 +116,7 @@ class TestDeployContract: ########################################################################### # def test_normal_1(self, db): - rtn_contract_address, rtn_abi, rtn_tx_hash = ContractUtils.deploy_contract( + _, rtn_abi, _ = ContractUtils.deploy_contract( contract_name=self.test_contract_name, args=self.test_arg, deployer=self.test_account["address"], diff --git a/tests/app/utils/test_ledger_utils.py b/tests/app/utils/test_ledger_utils.py index 51832d42..ecae0f7f 100644 --- a/tests/app/utils/test_ledger_utils.py +++ b/tests/app/utils/test_ledger_utils.py @@ -670,7 +670,7 @@ async def test_normal_1_1_2(self, db, async_db): ) user_2 = config_eth_account("user2") user_address_2 = user_2["address"] - user_private_key_2 = decode_keyfile_json( + decode_keyfile_json( raw_keyfile_json=user_2["keyfile_json"], password="password".encode("utf-8") ) @@ -1961,7 +1961,7 @@ async def test_normal_2_1_2(self, db, async_db): ) user_2 = config_eth_account("user2") user_address_2 = user_2["address"] - user_private_key_2 = decode_keyfile_json( + decode_keyfile_json( raw_keyfile_json=user_2["keyfile_json"], password="password".encode("utf-8") ) diff --git a/tests/batch/test_indexer_block_tx_data.py b/tests/batch/test_indexer_block_tx_data.py index 781aa0fe..72f56d3f 100644 --- a/tests/batch/test_indexer_block_tx_data.py +++ b/tests/batch/test_indexer_block_tx_data.py @@ -271,10 +271,13 @@ async def test_error_1(self, processor, db): self.set_block_number(db, before_block_number) # Execute batch processing - with mock.patch( - "web3.providers.rpc.async_rpc.AsyncHTTPProvider.make_request", - MagicMock(side_effect=ServiceUnavailableError()), - ), pytest.raises(ServiceUnavailableError): + with ( + mock.patch( + "web3.providers.rpc.async_rpc.AsyncHTTPProvider.make_request", + MagicMock(side_effect=ServiceUnavailableError()), + ), + pytest.raises(ServiceUnavailableError), + ): await processor.process() # Assertion @@ -301,9 +304,10 @@ async def test_error_2(self, processor, db): web3.provider.make_request(RPCEndpoint("evm_mine"), []) # Execute batch processing - with mock.patch.object( - AsyncSession, "commit", side_effect=SQLAlchemyError() - ), pytest.raises(SQLAlchemyError): + with ( + mock.patch.object(AsyncSession, "commit", side_effect=SQLAlchemyError()), + pytest.raises(SQLAlchemyError), + ): await processor.process() # Assertion diff --git a/tests/batch/test_indexer_delivery.py b/tests/batch/test_indexer_delivery.py index 3f7b3fff..feee1732 100644 --- a/tests/batch/test_indexer_delivery.py +++ b/tests/batch/test_indexer_delivery.py @@ -50,15 +50,10 @@ ) from app.utils.contract_utils import ContractUtils from app.utils.e2ee_utils import E2EEUtils -from app.utils.web3_utils import AsyncWeb3Wrapper, Web3Wrapper +from app.utils.web3_utils import AsyncWeb3Wrapper from batch.indexer_delivery import LOG, Processor, main from config import CHAIN_ID, TX_GAS_LIMIT from tests.account_config import config_eth_account -from tests.contract_utils import ( - IbetSecurityTokenContractTestUtils as STContractUtils, - IbetSecurityTokenEscrowContractTestUtils as STEscrowContractUtils, - PersonalInfoContractTestUtils, -) web3 = AsyncWeb3Wrapper() @@ -198,7 +193,7 @@ async def test_normal_1_1( db.commit() # Run target process - block_number = await web3.eth.block_number + await web3.eth.block_number await processor.sync_new_logs() # Assertion @@ -263,7 +258,7 @@ async def test_normal_1_2( db.commit() # Run target process - block_number = await web3.eth.block_number + await web3.eth.block_number await processor.sync_new_logs() # Assertion @@ -379,12 +374,12 @@ async def test_normal_2_1( ) user_2 = config_eth_account("user2") user_address_1 = user_2["address"] - user_private_key_1 = decode_keyfile_json( + decode_keyfile_json( raw_keyfile_json=user_2["keyfile_json"], password="password".encode("utf-8") ) user_3 = config_eth_account("user3") agent_address = user_3["address"] - agent_private_key = decode_keyfile_json( + decode_keyfile_json( raw_keyfile_json=user_3["keyfile_json"], password="password".encode("utf-8") ) @@ -529,16 +524,12 @@ async def test_normal_2_2_1( issuer_private_key = decode_keyfile_json( raw_keyfile_json=user_1["keyfile_json"], password="password".encode("utf-8") ) + user_2 = config_eth_account("user2") user_address_1 = user_2["address"] - user_private_key_1 = decode_keyfile_json( - raw_keyfile_json=user_2["keyfile_json"], password="password".encode("utf-8") - ) + user_3 = config_eth_account("user3") agent_address = user_3["address"] - agent_private_key = decode_keyfile_json( - raw_keyfile_json=user_3["keyfile_json"], password="password".encode("utf-8") - ) # Prepare data : Account account = Account() @@ -704,9 +695,6 @@ async def test_normal_2_2_2( ) user_3 = config_eth_account("user3") agent_address = user_3["address"] - agent_private_key = decode_keyfile_json( - raw_keyfile_json=user_3["keyfile_json"], password="password".encode("utf-8") - ) # Prepare data : Account account = Account() @@ -873,9 +861,6 @@ async def test_normal_2_3( ) user_3 = config_eth_account("user3") agent_address = user_3["address"] - agent_private_key = decode_keyfile_json( - raw_keyfile_json=user_3["keyfile_json"], password="password".encode("utf-8") - ) # Prepare data : Account account = Account() @@ -1663,13 +1648,6 @@ async def test_normal_4( issuer_private_key = decode_keyfile_json( raw_keyfile_json=user_1["keyfile_json"], password="password".encode("utf-8") ) - user_2 = config_eth_account("user2") - user_address_1 = user_2["address"] - user_private_key_1 = decode_keyfile_json( - raw_keyfile_json=user_2["keyfile_json"], password="password".encode("utf-8") - ) - user_3 = config_eth_account("user3") - user_address_2 = user_3["address"] # Prepare data : Account account = Account() @@ -1843,9 +1821,15 @@ async def test_error_1( db.commit() # Run mainloop once and fail with web3 utils error - with patch("batch.indexer_delivery.INDEXER_SYNC_INTERVAL", None), patch.object( - AsyncWeb3Wrapper().eth, "contract", side_effect=ServiceUnavailableError() - ), pytest.raises(TypeError): + with ( + patch("batch.indexer_delivery.INDEXER_SYNC_INTERVAL", None), + patch.object( + AsyncWeb3Wrapper().eth, + "contract", + side_effect=ServiceUnavailableError(), + ), + pytest.raises(TypeError), + ): await main_func() assert 1 == caplog.record_tuples.count( (LOG.name, logging.WARNING, "An external service was unavailable") @@ -1853,9 +1837,13 @@ async def test_error_1( caplog.clear() # Run mainloop once and fail with sqlalchemy Error - with patch("batch.indexer_delivery.INDEXER_SYNC_INTERVAL", None), patch.object( - AsyncSession, "commit", side_effect=SQLAlchemyError(code="dbapi") - ), pytest.raises(TypeError): + with ( + patch("batch.indexer_delivery.INDEXER_SYNC_INTERVAL", None), + patch.object( + AsyncSession, "commit", side_effect=SQLAlchemyError(code="dbapi") + ), + pytest.raises(TypeError), + ): await main_func() assert "A database error has occurred: code=dbapi" in caplog.text caplog.clear() diff --git a/tests/batch/test_indexer_e2e_messaging.py b/tests/batch/test_indexer_e2e_messaging.py index eef12eb7..0cf1c0e8 100644 --- a/tests/batch/test_indexer_e2e_messaging.py +++ b/tests/batch/test_indexer_e2e_messaging.py @@ -566,7 +566,7 @@ async def test_normal_4(self, processor, db, e2e_messaging_contract): } message_message_str = json.dumps(message) - sending_tx_hash, sending_tx_receipt = await E2EMessaging( + _, sending_tx_receipt = await E2EMessaging( e2e_messaging_contract.address ).send_message_external( user_address_3, # not target @@ -631,7 +631,7 @@ async def test_error_1_1(self, processor, db, e2e_messaging_contract): # Send Message message = "test" - sending_tx_hash, sending_tx_receipt = await E2EMessaging( + _, sending_tx_receipt = await E2EMessaging( e2e_messaging_contract.address ).send_message(user_address_1, message, user_address_2, user_private_key_2) sending_block = web3.eth.get_block(sending_tx_receipt["blockNumber"]) @@ -702,7 +702,7 @@ async def test_error_1_2(self, processor, db, e2e_messaging_contract): } } ) - sending_tx_hash, sending_tx_receipt = await E2EMessaging( + _, sending_tx_receipt = await E2EMessaging( e2e_messaging_contract.address ).send_message(user_address_1, message, user_address_2, user_private_key_2) sending_block = web3.eth.get_block(sending_tx_receipt["blockNumber"]) @@ -760,7 +760,7 @@ async def test_error_1_3(self, processor, db, e2e_messaging_contract): "type": "test_type", } ) - sending_tx_hash, sending_tx_receipt = await E2EMessaging( + _, sending_tx_receipt = await E2EMessaging( e2e_messaging_contract.address ).send_message(user_address_1, message, user_address_2, user_private_key_2) sending_block = web3.eth.get_block(sending_tx_receipt["blockNumber"]) @@ -829,7 +829,7 @@ async def test_error_1_4(self, processor, db, e2e_messaging_contract): "text": {"cipher_key": cipher_key, "message": encrypted_message}, } ) - sending_tx_hash, sending_tx_receipt = await E2EMessaging( + _, sending_tx_receipt = await E2EMessaging( e2e_messaging_contract.address ).send_message(user_address_1, message, user_address_2, user_private_key_2) sending_block = web3.eth.get_block(sending_tx_receipt["blockNumber"]) @@ -897,7 +897,7 @@ async def test_error_1_5(self, processor, db, e2e_messaging_contract): }, } ) - sending_tx_hash, sending_tx_receipt = await E2EMessaging( + _, sending_tx_receipt = await E2EMessaging( e2e_messaging_contract.address ).send_message(user_address_1, message, user_address_2, user_private_key_2) sending_block = web3.eth.get_block(sending_tx_receipt["blockNumber"]) @@ -964,7 +964,7 @@ async def test_error_1_6(self, processor, db, e2e_messaging_contract): }, } ) - sending_tx_hash, sending_tx_receipt = await E2EMessaging( + _, sending_tx_receipt = await E2EMessaging( e2e_messaging_contract.address ).send_message(user_address_1, message, user_address_2, user_private_key_2) sending_block = web3.eth.get_block(sending_tx_receipt["blockNumber"]) @@ -1031,7 +1031,7 @@ async def test_error_1_7(self, processor, db, e2e_messaging_contract): "text": {"cipher_key": cipher_key, "message": encrypted_message}, } ) - sending_tx_hash, sending_tx_receipt = await E2EMessaging( + _, sending_tx_receipt = await E2EMessaging( e2e_messaging_contract.address ).send_message(user_address_1, message, user_address_2, user_private_key_2) sending_block = web3.eth.get_block(sending_tx_receipt["blockNumber"]) @@ -1090,7 +1090,7 @@ async def test_error_2(self, processor, db, e2e_messaging_contract): } message_message_str = json.dumps(message) - sending_tx_hash, sending_tx_receipt = await E2EMessaging( + _, sending_tx_receipt = await E2EMessaging( e2e_messaging_contract.address ).send_message_external( user_address_1, @@ -1110,9 +1110,7 @@ async def test_error_2(self, processor, db, e2e_messaging_contract): _e2e_account_rsa_key.rsa_passphrase = E2EEUtils.encrypt(self.rsa_passphrase) _e2e_account_rsa_key.block_timestamp = datetime.fromtimestamp( sending_block["timestamp"] + 1, UTC - ).replace( - tzinfo=None - ) # Registry after send message + ).replace(tzinfo=None) # Registry after send message db.add(_e2e_account_rsa_key) db.commit() @@ -1165,7 +1163,7 @@ async def test_error_3_1(self, processor, db, e2e_messaging_contract): "text": {"cipher_key": "cipher_key", "message": encrypted_message}, } ) - sending_tx_hash, sending_tx_receipt = await E2EMessaging( + _, sending_tx_receipt = await E2EMessaging( e2e_messaging_contract.address ).send_message(user_address_1, message, user_address_2, user_private_key_2) sending_block = web3.eth.get_block(sending_tx_receipt["blockNumber"]) @@ -1232,7 +1230,7 @@ async def test_error_3_2(self, processor, db, e2e_messaging_contract): "text": {"cipher_key": cipher_key, "message": encrypted_message}, } ) - sending_tx_hash, sending_tx_receipt = await E2EMessaging( + _, sending_tx_receipt = await E2EMessaging( e2e_messaging_contract.address ).send_message(user_address_1, message, user_address_2, user_private_key_2) sending_block = web3.eth.get_block(sending_tx_receipt["blockNumber"]) @@ -1304,7 +1302,7 @@ async def test_error_3_3(self, processor, db, e2e_messaging_contract): "text": {"cipher_key": cipher_key, "message": encrypted_message}, } ) - sending_tx_hash, sending_tx_receipt = await E2EMessaging( + _, sending_tx_receipt = await E2EMessaging( e2e_messaging_contract.address ).send_message(user_address_1, message, user_address_2, user_private_key_2) sending_block = web3.eth.get_block(sending_tx_receipt["blockNumber"]) @@ -1367,7 +1365,7 @@ async def test_error_3_4(self, processor, db, e2e_messaging_contract): "text": {"cipher_key": cipher_key, "message": "test_message"}, } ) - sending_tx_hash, sending_tx_receipt = await E2EMessaging( + _, sending_tx_receipt = await E2EMessaging( e2e_messaging_contract.address ).send_message(user_address_1, message, user_address_2, user_private_key_2) sending_block = web3.eth.get_block(sending_tx_receipt["blockNumber"]) @@ -1437,7 +1435,7 @@ async def test_error_3_5(self, processor, db, e2e_messaging_contract): "text": {"cipher_key": cipher_key, "message": encrypted_message}, } ) - sending_tx_hash, sending_tx_receipt = await E2EMessaging( + _, sending_tx_receipt = await E2EMessaging( e2e_messaging_contract.address ).send_message(user_address_1, message, user_address_2, user_private_key_2) sending_block = web3.eth.get_block(sending_tx_receipt["blockNumber"]) diff --git a/tests/batch/test_indexer_issue_redeem.py b/tests/batch/test_indexer_issue_redeem.py index 87da5efb..7732b17d 100644 --- a/tests/batch/test_indexer_issue_redeem.py +++ b/tests/batch/test_indexer_issue_redeem.py @@ -771,12 +771,14 @@ async def test_error_1( db.commit() # Run mainloop once and fail with web3 utils error - with patch( - "batch.indexer_issue_redeem.INDEXER_SYNC_INTERVAL", None - ), patch.object( - AsyncWeb3Wrapper().eth, "contract", side_effect=ServiceUnavailableError() - ), pytest.raises( - TypeError + with ( + patch("batch.indexer_issue_redeem.INDEXER_SYNC_INTERVAL", None), + patch.object( + AsyncWeb3Wrapper().eth, + "contract", + side_effect=ServiceUnavailableError(), + ), + pytest.raises(TypeError), ): await main_func() assert 1 == caplog.record_tuples.count( @@ -785,12 +787,10 @@ async def test_error_1( caplog.clear() # Run mainloop once and fail with sqlalchemy InvalidRequestError - with patch( - "batch.indexer_issue_redeem.INDEXER_SYNC_INTERVAL", None - ), patch.object( - AsyncSession, "execute", side_effect=InvalidRequestError() - ), pytest.raises( - TypeError + with ( + patch("batch.indexer_issue_redeem.INDEXER_SYNC_INTERVAL", None), + patch.object(AsyncSession, "execute", side_effect=InvalidRequestError()), + pytest.raises(TypeError), ): await main_func() assert 1 == caplog.text.count("A database error has occurred") diff --git a/tests/batch/test_indexer_personal_info.py b/tests/batch/test_indexer_personal_info.py index 2c4754c0..9186a8ab 100644 --- a/tests/batch/test_indexer_personal_info.py +++ b/tests/batch/test_indexer_personal_info.py @@ -20,7 +20,6 @@ import base64 import json import logging -from unittest import mock from unittest.mock import patch import pytest @@ -32,7 +31,6 @@ from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.orm import Session -from app.exceptions import ServiceUnavailableError from app.model.blockchain import IbetStraightBondContract from app.model.blockchain.tx_params.ibet_straight_bond import ( UpdateParams as IbetStraightBondUpdateParams, @@ -49,7 +47,7 @@ ) from app.utils.contract_utils import AsyncContractUtils, ContractUtils from app.utils.e2ee_utils import E2EEUtils -from app.utils.web3_utils import AsyncWeb3Wrapper, Web3Wrapper +from app.utils.web3_utils import Web3Wrapper from batch.indexer_personal_info import LOG, Processor, main from config import CHAIN_ID, TX_GAS_LIMIT from tests.account_config import config_eth_account @@ -1029,24 +1027,20 @@ async def test_error_1( ContractUtils.send_transaction(tx, user_private_key_1) # Run mainloop once and fail with sqlalchemy InvalidRequestError - with patch( - "batch.indexer_personal_info.INDEXER_SYNC_INTERVAL", None - ), patch.object( - AsyncSession, "scalars", side_effect=InvalidRequestError() - ), pytest.raises( - TypeError + with ( + patch("batch.indexer_personal_info.INDEXER_SYNC_INTERVAL", None), + patch.object(AsyncSession, "scalars", side_effect=InvalidRequestError()), + pytest.raises(TypeError), ): await main_func() assert 1 == caplog.text.count("A database error has occurred") caplog.clear() # Run mainloop once and fail with connection to blockchain - with patch( - "batch.indexer_personal_info.INDEXER_SYNC_INTERVAL", None - ), patch.object( - AsyncContractUtils, "call_function", ConnectionError() - ), pytest.raises( - TypeError + with ( + patch("batch.indexer_personal_info.INDEXER_SYNC_INTERVAL", None), + patch.object(AsyncContractUtils, "call_function", ConnectionError()), + pytest.raises(TypeError), ): await main_func() assert 1 == caplog.record_tuples.count( diff --git a/tests/batch/test_indexer_position_bond.py b/tests/batch/test_indexer_position_bond.py index f72b4fd5..b37a3f09 100644 --- a/tests/batch/test_indexer_position_bond.py +++ b/tests/batch/test_indexer_position_bond.py @@ -4796,12 +4796,14 @@ async def test_error_1( db.commit() # Run mainloop once and fail with web3 utils error - with patch( - "batch.indexer_position_bond.INDEXER_SYNC_INTERVAL", None - ), patch.object( - AsyncWeb3Wrapper().eth, "contract", side_effect=ServiceUnavailableError() - ), pytest.raises( - TypeError + with ( + patch("batch.indexer_position_bond.INDEXER_SYNC_INTERVAL", None), + patch.object( + AsyncWeb3Wrapper().eth, + "contract", + side_effect=ServiceUnavailableError(), + ), + pytest.raises(TypeError), ): await main_func() assert 1 == caplog.record_tuples.count( @@ -4810,12 +4812,10 @@ async def test_error_1( caplog.clear() # Run mainloop once and fail with sqlalchemy InvalidRequestError - with patch( - "batch.indexer_position_bond.INDEXER_SYNC_INTERVAL", None - ), patch.object( - AsyncSession, "scalars", side_effect=InvalidRequestError() - ), pytest.raises( - TypeError + with ( + patch("batch.indexer_position_bond.INDEXER_SYNC_INTERVAL", None), + patch.object(AsyncSession, "scalars", side_effect=InvalidRequestError()), + pytest.raises(TypeError), ): await main_func() assert 1 == caplog.text.count("A database error has occurred") diff --git a/tests/batch/test_indexer_position_share.py b/tests/batch/test_indexer_position_share.py index 7e725132..e015c99f 100644 --- a/tests/batch/test_indexer_position_share.py +++ b/tests/batch/test_indexer_position_share.py @@ -4802,12 +4802,14 @@ async def test_error_1( ContractUtils.send_transaction(tx, issuer_private_key) # Run mainloop once and fail with web3 utils error - with patch( - "batch.indexer_position_share.INDEXER_SYNC_INTERVAL", None - ), patch.object( - AsyncWeb3Wrapper().eth, "contract", side_effect=ServiceUnavailableError() - ), pytest.raises( - TypeError + with ( + patch("batch.indexer_position_share.INDEXER_SYNC_INTERVAL", None), + patch.object( + AsyncWeb3Wrapper().eth, + "contract", + side_effect=ServiceUnavailableError(), + ), + pytest.raises(TypeError), ): await main_func() assert 1 == caplog.record_tuples.count( @@ -4816,12 +4818,10 @@ async def test_error_1( caplog.clear() # Run mainloop once and fail with sqlalchemy InvalidRequestError - with patch( - "batch.indexer_position_share.INDEXER_SYNC_INTERVAL", None - ), patch.object( - AsyncSession, "scalars", side_effect=InvalidRequestError() - ), pytest.raises( - TypeError + with ( + patch("batch.indexer_position_share.INDEXER_SYNC_INTERVAL", None), + patch.object(AsyncSession, "scalars", side_effect=InvalidRequestError()), + pytest.raises(TypeError), ): await main_func() assert 1 == caplog.text.count("A database error has occurred") diff --git a/tests/batch/test_indexer_token_cache.py b/tests/batch/test_indexer_token_cache.py index 065ee31a..5786a5db 100644 --- a/tests/batch/test_indexer_token_cache.py +++ b/tests/batch/test_indexer_token_cache.py @@ -380,12 +380,11 @@ async def test_error_1( caplog.clear() # Run mainloop once and fail with sqlalchemy InvalidRequestError - with patch("batch.indexer_token_cache.INDEXER_SYNC_INTERVAL", None), patch( - "batch.indexer_token_cache.INDEXER_SYNC_INTERVAL", None - ), patch.object( - AsyncSession, "scalars", side_effect=InvalidRequestError() - ), pytest.raises( - TypeError + with ( + patch("batch.indexer_token_cache.INDEXER_SYNC_INTERVAL", None), + patch("batch.indexer_token_cache.INDEXER_SYNC_INTERVAL", None), + patch.object(AsyncSession, "scalars", side_effect=InvalidRequestError()), + pytest.raises(TypeError), ): await main_func() assert 1 == caplog.text.count("A database error has occurred") diff --git a/tests/batch/test_indexer_token_holders.py b/tests/batch/test_indexer_token_holders.py index 2919b5bf..d4dfbc2c 100644 --- a/tests/batch/test_indexer_token_holders.py +++ b/tests/batch/test_indexer_token_holders.py @@ -25,9 +25,6 @@ import pytest from eth_keyfile import decode_keyfile_json from sqlalchemy import and_, select -from sqlalchemy.exc import SQLAlchemyError -from sqlalchemy.ext.asyncio import AsyncSession -from sqlalchemy.orm import Session from app.model.blockchain import IbetShareContract, IbetStraightBondContract from app.model.blockchain.tx_params.ibet_share import ( @@ -2321,34 +2318,34 @@ async def test_normal_10( await processor.collect() # Then processor call "__process_all" method 10 times. assert 1 == caplog.record_tuples.count( - (LOG.name, logging.INFO, f"syncing from=10000000, to=10999999") + (LOG.name, logging.INFO, "syncing from=10000000, to=10999999") ) assert 1 == caplog.record_tuples.count( - (LOG.name, logging.INFO, f"syncing from=11000000, to=11999999") + (LOG.name, logging.INFO, "syncing from=11000000, to=11999999") ) assert 1 == caplog.record_tuples.count( - (LOG.name, logging.INFO, f"syncing from=12000000, to=12999999") + (LOG.name, logging.INFO, "syncing from=12000000, to=12999999") ) assert 1 == caplog.record_tuples.count( - (LOG.name, logging.INFO, f"syncing from=13000000, to=13999999") + (LOG.name, logging.INFO, "syncing from=13000000, to=13999999") ) assert 1 == caplog.record_tuples.count( - (LOG.name, logging.INFO, f"syncing from=14000000, to=14999999") + (LOG.name, logging.INFO, "syncing from=14000000, to=14999999") ) assert 1 == caplog.record_tuples.count( - (LOG.name, logging.INFO, f"syncing from=15000000, to=15999999") + (LOG.name, logging.INFO, "syncing from=15000000, to=15999999") ) assert 1 == caplog.record_tuples.count( - (LOG.name, logging.INFO, f"syncing from=16000000, to=16999999") + (LOG.name, logging.INFO, "syncing from=16000000, to=16999999") ) assert 1 == caplog.record_tuples.count( - (LOG.name, logging.INFO, f"syncing from=17000000, to=17999999") + (LOG.name, logging.INFO, "syncing from=17000000, to=17999999") ) assert 1 == caplog.record_tuples.count( - (LOG.name, logging.INFO, f"syncing from=18000000, to=18999999") + (LOG.name, logging.INFO, "syncing from=18000000, to=18999999") ) assert 1 == caplog.record_tuples.count( - (LOG.name, logging.INFO, f"syncing from=19000000, to=19999999") + (LOG.name, logging.INFO, "syncing from=19000000, to=19999999") ) db.rollback() diff --git a/tests/batch/test_indexer_transfer.py b/tests/batch/test_indexer_transfer.py index 1ea08230..63a439ba 100644 --- a/tests/batch/test_indexer_transfer.py +++ b/tests/batch/test_indexer_transfer.py @@ -1161,9 +1161,15 @@ async def test_error_1( db.commit() # Run mainloop once and fail with web3 utils error - with patch("batch.indexer_transfer.INDEXER_SYNC_INTERVAL", None), patch.object( - AsyncWeb3Wrapper().eth, "contract", side_effect=ServiceUnavailableError() - ), pytest.raises(TypeError): + with ( + patch("batch.indexer_transfer.INDEXER_SYNC_INTERVAL", None), + patch.object( + AsyncWeb3Wrapper().eth, + "contract", + side_effect=ServiceUnavailableError(), + ), + pytest.raises(TypeError), + ): await main_func() assert 1 == caplog.record_tuples.count( (LOG.name, logging.WARNING, "An external service was unavailable") @@ -1171,9 +1177,11 @@ async def test_error_1( caplog.clear() # Run mainloop once and fail with sqlalchemy InvalidRequestError - with patch("batch.indexer_transfer.INDEXER_SYNC_INTERVAL", None), patch.object( - AsyncSession, "scalars", side_effect=InvalidRequestError() - ), pytest.raises(TypeError): + with ( + patch("batch.indexer_transfer.INDEXER_SYNC_INTERVAL", None), + patch.object(AsyncSession, "scalars", side_effect=InvalidRequestError()), + pytest.raises(TypeError), + ): await main_func() assert 1 == caplog.text.count("A database error has occurred") caplog.clear() diff --git a/tests/batch/test_indexer_transfer_approval.py b/tests/batch/test_indexer_transfer_approval.py index af7a28ac..e43ceae3 100644 --- a/tests/batch/test_indexer_transfer_approval.py +++ b/tests/batch/test_indexer_transfer_approval.py @@ -55,11 +55,6 @@ from batch.indexer_transfer_approval import LOG, Processor, main from config import CHAIN_ID, TX_GAS_LIMIT from tests.account_config import config_eth_account -from tests.contract_utils import ( - IbetSecurityTokenContractTestUtils as STContractUtils, - IbetSecurityTokenEscrowContractTestUtils as STEscrowContractUtils, - PersonalInfoContractTestUtils, -) web3 = Web3Wrapper() @@ -1228,7 +1223,7 @@ async def test_normal_2_6( "gasPrice": 0, } ) - _, tx_receipt_2 = ContractUtils.send_transaction(tx, user_private_key_1) + ContractUtils.send_transaction(tx, user_private_key_1) # Run target process block_number = web3.eth.block_number @@ -1591,12 +1586,14 @@ async def test_error_1( db.commit() # Run mainloop once and fail with web3 utils error - with patch( - "batch.indexer_transfer_approval.INDEXER_SYNC_INTERVAL", None - ), patch.object( - AsyncWeb3Wrapper().eth, "contract", side_effect=ServiceUnavailableError() - ), pytest.raises( - TypeError + with ( + patch("batch.indexer_transfer_approval.INDEXER_SYNC_INTERVAL", None), + patch.object( + AsyncWeb3Wrapper().eth, + "contract", + side_effect=ServiceUnavailableError(), + ), + pytest.raises(TypeError), ): await main_func() assert 1 == caplog.record_tuples.count( @@ -1605,12 +1602,12 @@ async def test_error_1( caplog.clear() # Run mainloop once and fail with sqlalchemy Error - with patch( - "batch.indexer_transfer_approval.INDEXER_SYNC_INTERVAL", None - ), patch.object( - AsyncSession, "commit", side_effect=SQLAlchemyError(code="dbapi") - ), pytest.raises( - TypeError + with ( + patch("batch.indexer_transfer_approval.INDEXER_SYNC_INTERVAL", None), + patch.object( + AsyncSession, "commit", side_effect=SQLAlchemyError(code="dbapi") + ), + pytest.raises(TypeError), ): await main_func() assert "A database error has occurred: code=dbapi" in caplog.text diff --git a/tests/batch/test_processor_batch_issue_redeem.py b/tests/batch/test_processor_batch_issue_redeem.py index e4a9709e..6950480e 100644 --- a/tests/batch/test_processor_batch_issue_redeem.py +++ b/tests/batch/test_processor_batch_issue_redeem.py @@ -824,7 +824,7 @@ async def test_error_3(self, processor, db, caplog): with patch( target="app.model.blockchain.token.IbetStraightBondContract.bulk_additional_issue", side_effect=SendTransactionError(), - ) as IbetStraightBondContract_bulk_additional_issue: + ): await processor.process() # Assertion: DB @@ -940,12 +940,15 @@ async def test_error_4( db.commit() # mock - with patch( - target="app.model.blockchain.token.IbetStraightBondContract.bulk_additional_issue", - side_effect=ContractRevertError("999999"), - ), patch( - target="app.model.blockchain.token.IbetShareContract.bulk_additional_issue", - side_effect=ContractRevertError("999999"), + with ( + patch( + target="app.model.blockchain.token.IbetStraightBondContract.bulk_additional_issue", + side_effect=ContractRevertError("999999"), + ), + patch( + target="app.model.blockchain.token.IbetShareContract.bulk_additional_issue", + side_effect=ContractRevertError("999999"), + ), ): await processor.process() diff --git a/tests/batch/test_processor_batch_issue_redeem_v2406.py b/tests/batch/test_processor_batch_issue_redeem_v2406.py index 9a1ba5e3..1caf6cee 100644 --- a/tests/batch/test_processor_batch_issue_redeem_v2406.py +++ b/tests/batch/test_processor_batch_issue_redeem_v2406.py @@ -707,7 +707,7 @@ async def test_error_3(self, processor, db, caplog): with patch( target="app.model.blockchain.token.IbetStraightBondContract.additional_issue", side_effect=SendTransactionError(), - ) as IbetStraightBondContract_additional_issue: + ): await processor.process() # Assertion: DB @@ -814,12 +814,15 @@ async def test_error_4( db.commit() # mock - with patch( - target="app.model.blockchain.token.IbetStraightBondContract.additional_issue", - side_effect=ContractRevertError("999999"), - ), patch( - target="app.model.blockchain.token.IbetShareContract.additional_issue", - side_effect=ContractRevertError("999999"), + with ( + patch( + target="app.model.blockchain.token.IbetStraightBondContract.additional_issue", + side_effect=ContractRevertError("999999"), + ), + patch( + target="app.model.blockchain.token.IbetShareContract.additional_issue", + side_effect=ContractRevertError("999999"), + ), ): await processor.process() diff --git a/tests/batch/test_processor_create_utxo.py b/tests/batch/test_processor_create_utxo.py index ddafa3ed..1ee6038c 100644 --- a/tests/batch/test_processor_create_utxo.py +++ b/tests/batch/test_processor_create_utxo.py @@ -770,7 +770,6 @@ async def test_normal_5( @mock.patch("batch.processor_create_utxo.create_ledger") @pytest.mark.asyncio async def test_normal_6(self, mock_func, processor, db): - user_1 = config_eth_account("user1") issuer_address = user_1["address"] issuer_private_key = decode_keyfile_json( @@ -1388,7 +1387,6 @@ async def test_normal_8_2(self, mock_func, processor, db): @mock.patch("batch.processor_create_utxo.create_ledger") @pytest.mark.asyncio async def test_normal_9(self, mock_func, processor, db): - user_1 = config_eth_account("user1") issuer_address = user_1["address"] issuer_private_key = decode_keyfile_json( @@ -1555,7 +1553,7 @@ async def test_error_1(self, processor, db): with mock.patch( "web3.eth.Eth.uninstall_filter", MagicMock(side_effect=Exception("mock test")), - ) as web3_mock: + ): await processor.process() _utxo_list = db.scalars(select(UTXO)).all() diff --git a/tests/batch/test_processor_rotate_e2e_messaging_rsa_key.py b/tests/batch/test_processor_rotate_e2e_messaging_rsa_key.py index 9a9ddea0..ab5fe6fe 100644 --- a/tests/batch/test_processor_rotate_e2e_messaging_rsa_key.py +++ b/tests/batch/test_processor_rotate_e2e_messaging_rsa_key.py @@ -17,7 +17,6 @@ SPDX-License-Identifier: Apache-2.0 """ -import asyncio import logging import time from datetime import UTC, datetime, timedelta @@ -285,8 +284,9 @@ async def test_normal_2(self, processor, db, e2e_messaging_contract): # Run target process with ( - mock_E2EMessaging_set_public_key - ), mock_ContractUtils_get_block_by_transaction_hash: + mock_E2EMessaging_set_public_key, + mock_ContractUtils_get_block_by_transaction_hash, + ): await processor.process() # # Assertion diff --git a/tests/batch/test_processor_update_token.py b/tests/batch/test_processor_update_token.py index c77a41e4..3539d617 100644 --- a/tests/batch/test_processor_update_token.py +++ b/tests/batch/test_processor_update_token.py @@ -186,19 +186,24 @@ async def test_normal_1(self, processor, db): "number": 12345, "timestamp": datetime(2021, 4, 27, 12, 34, 56, tzinfo=UTC).timestamp(), } - with patch( - target="app.model.blockchain.token.IbetShareContract.update", - return_value=None, - ) as IbetShareContract_update, patch( - target="app.model.blockchain.token.IbetStraightBondContract.update", - return_value=None, - ) as IbetStraightBondContract_update, patch( - target="app.model.blockchain.token_list.TokenListContract.register", - return_value=None, - ) as TokenListContract_register, patch( - target="app.utils.contract_utils.AsyncContractUtils.get_block_by_transaction_hash", - return_value=mock_block, - ) as ContractUtils_get_block_by_transaction_hash: + with ( + patch( + target="app.model.blockchain.token.IbetShareContract.update", + return_value=None, + ) as IbetShareContract_update, + patch( + target="app.model.blockchain.token.IbetStraightBondContract.update", + return_value=None, + ) as IbetStraightBondContract_update, + patch( + target="app.model.blockchain.token_list.TokenListContract.register", + return_value=None, + ) as TokenListContract_register, + patch( + target="app.utils.contract_utils.AsyncContractUtils.get_block_by_transaction_hash", + return_value=mock_block, + ) as ContractUtils_get_block_by_transaction_hash, + ): # Execute batch await processor.process() @@ -499,30 +504,33 @@ async def test_error_1(self, processor, db): assert _notification.priority == 1 assert _notification.type == NotificationType.ISSUE_ERROR assert _notification.code == 0 - assert _notification.metainfo == { - "token_address": _token_address_1, - "token_type": TokenType.IBET_SHARE.value, - "arguments": { - "name": "name_test1", - "symbol": "symbol_test1", - "issue_price": 1000, - "total_supply": 10000, - "dividends": 123.45, - "dividend_record_date": "20211231", - "dividend_payment_date": "20211231", - "cancellation_date": "20221231", - "tradable_exchange_contract_address": "0x0000000000000000000000000000000000000001", # update - "personal_info_contract_address": "0x0000000000000000000000000000000000000002", # update - "transferable": False, # update - "status": False, # update - "is_offering": True, # update - "contact_information": "contact info test", # update - "privacy_policy": "privacy policy test", # update - "transfer_approval_required": True, # update - "principal_value": 1000, - "is_canceled": True, # update - }, - } + assert ( + _notification.metainfo + == { + "token_address": _token_address_1, + "token_type": TokenType.IBET_SHARE.value, + "arguments": { + "name": "name_test1", + "symbol": "symbol_test1", + "issue_price": 1000, + "total_supply": 10000, + "dividends": 123.45, + "dividend_record_date": "20211231", + "dividend_payment_date": "20211231", + "cancellation_date": "20221231", + "tradable_exchange_contract_address": "0x0000000000000000000000000000000000000001", # update + "personal_info_contract_address": "0x0000000000000000000000000000000000000002", # update + "transferable": False, # update + "status": False, # update + "is_offering": True, # update + "contact_information": "contact info test", # update + "privacy_policy": "privacy policy test", # update + "transfer_approval_required": True, # update + "principal_value": 1000, + "is_canceled": True, # update + }, + } + ) _notification = _notification_list[1] assert _notification.id == 2 assert _notification.notice_id is not None @@ -530,32 +538,35 @@ async def test_error_1(self, processor, db): assert _notification.priority == 1 assert _notification.type == NotificationType.ISSUE_ERROR assert _notification.code == 0 - assert _notification.metainfo == { - "token_address": _token_address_2, - "token_type": TokenType.IBET_STRAIGHT_BOND.value, - "arguments": { - "name": "name_test1", - "symbol": "symbol_test1", - "total_supply": 2000, - "face_value": 200, - "redemption_date": "redemption_date_test1", - "redemption_value": 4000, - "return_date": "return_date_test1", - "return_amount": "return_amount_test1", - "purpose": "purpose_test1", - "interest_rate": 0.0001, # update - "interest_payment_date": ["0331", "0930"], # update - "transferable": False, # update - "status": False, # update - "is_offering": True, # update - "is_redeemed": True, # update - "tradable_exchange_contract_address": "0x0000000000000000000000000000000000000001", # update - "personal_info_contract_address": "0x0000000000000000000000000000000000000002", # update - "contact_information": "contact info test", # update - "privacy_policy": "privacy policy test", # update - "transfer_approval_required": True, # update - }, - } + assert ( + _notification.metainfo + == { + "token_address": _token_address_2, + "token_type": TokenType.IBET_STRAIGHT_BOND.value, + "arguments": { + "name": "name_test1", + "symbol": "symbol_test1", + "total_supply": 2000, + "face_value": 200, + "redemption_date": "redemption_date_test1", + "redemption_value": 4000, + "return_date": "return_date_test1", + "return_amount": "return_amount_test1", + "purpose": "purpose_test1", + "interest_rate": 0.0001, # update + "interest_payment_date": ["0331", "0930"], # update + "transferable": False, # update + "status": False, # update + "is_offering": True, # update + "is_redeemed": True, # update + "tradable_exchange_contract_address": "0x0000000000000000000000000000000000000001", # update + "personal_info_contract_address": "0x0000000000000000000000000000000000000002", # update + "contact_information": "contact info test", # update + "privacy_policy": "privacy policy test", # update + "transfer_approval_required": True, # update + }, + } + ) # # Issuing: Fail to get the private key @@ -716,30 +727,33 @@ async def test_error_2(self, processor, db): assert _notification.priority == 1 assert _notification.type == NotificationType.ISSUE_ERROR assert _notification.code == 1 - assert _notification.metainfo == { - "token_address": _token_address_1, - "token_type": TokenType.IBET_SHARE.value, - "arguments": { - "name": "name_test1", - "symbol": "symbol_test1", - "issue_price": 1000, - "total_supply": 10000, - "dividends": 123.45, - "dividend_record_date": "20211231", - "dividend_payment_date": "20211231", - "cancellation_date": "20221231", - "tradable_exchange_contract_address": "0x0000000000000000000000000000000000000001", # update - "personal_info_contract_address": "0x0000000000000000000000000000000000000002", # update - "transferable": False, # update - "status": False, # update - "is_offering": True, # update - "contact_information": "contact info test", # update - "privacy_policy": "privacy policy test", # update - "transfer_approval_required": True, # update - "principal_value": 1000, - "is_canceled": True, # update - }, - } + assert ( + _notification.metainfo + == { + "token_address": _token_address_1, + "token_type": TokenType.IBET_SHARE.value, + "arguments": { + "name": "name_test1", + "symbol": "symbol_test1", + "issue_price": 1000, + "total_supply": 10000, + "dividends": 123.45, + "dividend_record_date": "20211231", + "dividend_payment_date": "20211231", + "cancellation_date": "20221231", + "tradable_exchange_contract_address": "0x0000000000000000000000000000000000000001", # update + "personal_info_contract_address": "0x0000000000000000000000000000000000000002", # update + "transferable": False, # update + "status": False, # update + "is_offering": True, # update + "contact_information": "contact info test", # update + "privacy_policy": "privacy policy test", # update + "transfer_approval_required": True, # update + "principal_value": 1000, + "is_canceled": True, # update + }, + } + ) _notification = _notification_list[1] assert _notification.id == 2 assert _notification.notice_id is not None @@ -747,32 +761,35 @@ async def test_error_2(self, processor, db): assert _notification.priority == 1 assert _notification.type == NotificationType.ISSUE_ERROR assert _notification.code == 1 - assert _notification.metainfo == { - "token_address": _token_address_2, - "token_type": TokenType.IBET_STRAIGHT_BOND.value, - "arguments": { - "name": "name_test1", - "symbol": "symbol_test1", - "total_supply": 2000, - "face_value": 200, - "redemption_date": "redemption_date_test1", - "redemption_value": 4000, - "return_date": "return_date_test1", - "return_amount": "return_amount_test1", - "purpose": "purpose_test1", - "interest_rate": 0.0001, # update - "interest_payment_date": ["0331", "0930"], # update - "transferable": False, # update - "status": False, # update - "is_offering": True, # update - "is_redeemed": True, # update - "tradable_exchange_contract_address": "0x0000000000000000000000000000000000000001", # update - "personal_info_contract_address": "0x0000000000000000000000000000000000000002", # update - "contact_information": "contact info test", # update - "privacy_policy": "privacy policy test", # update - "transfer_approval_required": True, # update - }, - } + assert ( + _notification.metainfo + == { + "token_address": _token_address_2, + "token_type": TokenType.IBET_STRAIGHT_BOND.value, + "arguments": { + "name": "name_test1", + "symbol": "symbol_test1", + "total_supply": 2000, + "face_value": 200, + "redemption_date": "redemption_date_test1", + "redemption_value": 4000, + "return_date": "return_date_test1", + "return_amount": "return_amount_test1", + "purpose": "purpose_test1", + "interest_rate": 0.0001, # update + "interest_payment_date": ["0331", "0930"], # update + "transferable": False, # update + "status": False, # update + "is_offering": True, # update + "is_redeemed": True, # update + "tradable_exchange_contract_address": "0x0000000000000000000000000000000000000001", # update + "personal_info_contract_address": "0x0000000000000000000000000000000000000002", # update + "contact_information": "contact info test", # update + "privacy_policy": "privacy policy test", # update + "transfer_approval_required": True, # update + }, + } + ) # # Issuing: Send transaction error(token update) @@ -893,13 +910,16 @@ async def test_error_3(self, processor, db): db.commit() - with patch( - target="app.model.blockchain.token.IbetShareContract.update", - rside_effect=SendTransactionError(), - ) as IbetShareContract_update, patch( - target="app.model.blockchain.token.IbetStraightBondContract.update", - side_effect=SendTransactionError(), - ) as IbetStraightBondContract_update: + with ( + patch( + target="app.model.blockchain.token.IbetShareContract.update", + rside_effect=SendTransactionError(), + ), + patch( + target="app.model.blockchain.token.IbetStraightBondContract.update", + side_effect=SendTransactionError(), + ), + ): # Execute batch await processor.process() @@ -940,30 +960,33 @@ async def test_error_3(self, processor, db): assert _notification.priority == 1 assert _notification.type == NotificationType.ISSUE_ERROR assert _notification.code == 2 - assert _notification.metainfo == { - "token_address": _token_address_1, - "token_type": TokenType.IBET_SHARE.value, - "arguments": { - "name": "name_test1", - "symbol": "symbol_test1", - "issue_price": 1000, - "total_supply": 10000, - "dividends": 123.45, - "dividend_record_date": "20211231", - "dividend_payment_date": "20211231", - "cancellation_date": "20221231", - "tradable_exchange_contract_address": "0x0000000000000000000000000000000000000001", # update - "personal_info_contract_address": "0x0000000000000000000000000000000000000002", # update - "transferable": False, # update - "status": False, # update - "is_offering": True, # update - "contact_information": "contact info test", # update - "privacy_policy": "privacy policy test", # update - "transfer_approval_required": True, # update - "principal_value": 1000, - "is_canceled": True, # update - }, - } + assert ( + _notification.metainfo + == { + "token_address": _token_address_1, + "token_type": TokenType.IBET_SHARE.value, + "arguments": { + "name": "name_test1", + "symbol": "symbol_test1", + "issue_price": 1000, + "total_supply": 10000, + "dividends": 123.45, + "dividend_record_date": "20211231", + "dividend_payment_date": "20211231", + "cancellation_date": "20221231", + "tradable_exchange_contract_address": "0x0000000000000000000000000000000000000001", # update + "personal_info_contract_address": "0x0000000000000000000000000000000000000002", # update + "transferable": False, # update + "status": False, # update + "is_offering": True, # update + "contact_information": "contact info test", # update + "privacy_policy": "privacy policy test", # update + "transfer_approval_required": True, # update + "principal_value": 1000, + "is_canceled": True, # update + }, + } + ) _notification = _notification_list[1] assert _notification.id == 2 assert _notification.notice_id is not None @@ -971,32 +994,35 @@ async def test_error_3(self, processor, db): assert _notification.priority == 1 assert _notification.type == NotificationType.ISSUE_ERROR assert _notification.code == 2 - assert _notification.metainfo == { - "token_address": _token_address_2, - "token_type": TokenType.IBET_STRAIGHT_BOND.value, - "arguments": { - "name": "name_test1", - "symbol": "symbol_test1", - "total_supply": 2000, - "face_value": 200, - "redemption_date": "redemption_date_test1", - "redemption_value": 4000, - "return_date": "return_date_test1", - "return_amount": "return_amount_test1", - "purpose": "purpose_test1", - "interest_rate": 0.0001, # update - "interest_payment_date": ["0331", "0930"], # update - "transferable": False, # update - "status": False, # update - "is_offering": True, # update - "is_redeemed": True, # update - "tradable_exchange_contract_address": "0x0000000000000000000000000000000000000001", # update - "personal_info_contract_address": "0x0000000000000000000000000000000000000002", # update - "contact_information": "contact info test", # update - "privacy_policy": "privacy policy test", # update - "transfer_approval_required": True, # update - }, - } + assert ( + _notification.metainfo + == { + "token_address": _token_address_2, + "token_type": TokenType.IBET_STRAIGHT_BOND.value, + "arguments": { + "name": "name_test1", + "symbol": "symbol_test1", + "total_supply": 2000, + "face_value": 200, + "redemption_date": "redemption_date_test1", + "redemption_value": 4000, + "return_date": "return_date_test1", + "return_amount": "return_amount_test1", + "purpose": "purpose_test1", + "interest_rate": 0.0001, # update + "interest_payment_date": ["0331", "0930"], # update + "transferable": False, # update + "status": False, # update + "is_offering": True, # update + "is_redeemed": True, # update + "tradable_exchange_contract_address": "0x0000000000000000000000000000000000000001", # update + "personal_info_contract_address": "0x0000000000000000000000000000000000000002", # update + "contact_information": "contact info test", # update + "privacy_policy": "privacy policy test", # update + "transfer_approval_required": True, # update + }, + } + ) # # Issuing: Send transaction error(TokenList register) @@ -1117,16 +1143,20 @@ async def test_error_4(self, processor, db): db.commit() - with patch( - target="app.model.blockchain.token.IbetShareContract.update", - return_value=None, - ) as IbetShareContract_update, patch( - target="app.model.blockchain.token.IbetStraightBondContract.update", - return_value=None, - ) as IbetStraightBondContract_update, patch( - target="app.model.blockchain.token_list.TokenListContract.register", - side_effect=SendTransactionError(), - ) as TokenListContract_register: + with ( + patch( + target="app.model.blockchain.token.IbetShareContract.update", + return_value=None, + ) as IbetShareContract_update, + patch( + target="app.model.blockchain.token.IbetStraightBondContract.update", + return_value=None, + ) as IbetStraightBondContract_update, + patch( + target="app.model.blockchain.token_list.TokenListContract.register", + side_effect=SendTransactionError(), + ), + ): # Execute batch await processor.process() @@ -1206,30 +1236,33 @@ async def test_error_4(self, processor, db): assert _notification.priority == 1 assert _notification.type == NotificationType.ISSUE_ERROR assert _notification.code == 2 - assert _notification.metainfo == { - "token_address": _token_address_1, - "token_type": TokenType.IBET_SHARE.value, - "arguments": { - "name": "name_test1", - "symbol": "symbol_test1", - "issue_price": 1000, - "total_supply": 10000, - "dividends": 123.45, - "dividend_record_date": "20211231", - "dividend_payment_date": "20211231", - "cancellation_date": "20221231", - "tradable_exchange_contract_address": "0x0000000000000000000000000000000000000001", # update - "personal_info_contract_address": "0x0000000000000000000000000000000000000002", # update - "transferable": False, # update - "status": False, # update - "is_offering": True, # update - "contact_information": "contact info test", # update - "privacy_policy": "privacy policy test", # update - "transfer_approval_required": True, # update - "principal_value": 1000, - "is_canceled": True, # update - }, - } + assert ( + _notification.metainfo + == { + "token_address": _token_address_1, + "token_type": TokenType.IBET_SHARE.value, + "arguments": { + "name": "name_test1", + "symbol": "symbol_test1", + "issue_price": 1000, + "total_supply": 10000, + "dividends": 123.45, + "dividend_record_date": "20211231", + "dividend_payment_date": "20211231", + "cancellation_date": "20221231", + "tradable_exchange_contract_address": "0x0000000000000000000000000000000000000001", # update + "personal_info_contract_address": "0x0000000000000000000000000000000000000002", # update + "transferable": False, # update + "status": False, # update + "is_offering": True, # update + "contact_information": "contact info test", # update + "privacy_policy": "privacy policy test", # update + "transfer_approval_required": True, # update + "principal_value": 1000, + "is_canceled": True, # update + }, + } + ) _notification = _notification_list[1] assert _notification.id == 2 assert _notification.notice_id is not None @@ -1237,29 +1270,32 @@ async def test_error_4(self, processor, db): assert _notification.priority == 1 assert _notification.type == NotificationType.ISSUE_ERROR assert _notification.code == 2 - assert _notification.metainfo == { - "token_address": _token_address_2, - "token_type": TokenType.IBET_STRAIGHT_BOND.value, - "arguments": { - "name": "name_test1", - "symbol": "symbol_test1", - "total_supply": 2000, - "face_value": 200, - "redemption_date": "redemption_date_test1", - "redemption_value": 4000, - "return_date": "return_date_test1", - "return_amount": "return_amount_test1", - "purpose": "purpose_test1", - "interest_rate": 0.0001, # update - "interest_payment_date": ["0331", "0930"], # update - "transferable": False, # update - "status": False, # update - "is_offering": True, # update - "is_redeemed": True, # update - "tradable_exchange_contract_address": "0x0000000000000000000000000000000000000001", # update - "personal_info_contract_address": "0x0000000000000000000000000000000000000002", # update - "contact_information": "contact info test", # update - "privacy_policy": "privacy policy test", # update - "transfer_approval_required": True, # update - }, - } + assert ( + _notification.metainfo + == { + "token_address": _token_address_2, + "token_type": TokenType.IBET_STRAIGHT_BOND.value, + "arguments": { + "name": "name_test1", + "symbol": "symbol_test1", + "total_supply": 2000, + "face_value": 200, + "redemption_date": "redemption_date_test1", + "redemption_value": 4000, + "return_date": "return_date_test1", + "return_amount": "return_amount_test1", + "purpose": "purpose_test1", + "interest_rate": 0.0001, # update + "interest_payment_date": ["0331", "0930"], # update + "transferable": False, # update + "status": False, # update + "is_offering": True, # update + "is_redeemed": True, # update + "tradable_exchange_contract_address": "0x0000000000000000000000000000000000000001", # update + "personal_info_contract_address": "0x0000000000000000000000000000000000000002", # update + "contact_information": "contact info test", # update + "privacy_policy": "privacy policy test", # update + "transfer_approval_required": True, # update + }, + } + ) diff --git a/tests/contract_utils.py b/tests/contract_utils.py index 3c1171f5..8bebcae4 100644 --- a/tests/contract_utils.py +++ b/tests/contract_utils.py @@ -67,7 +67,7 @@ def issue(tx_from: str, private_key: str, args: Dict): args["contactInformation"], args["privacyPolicy"], ] - contract_address, abi, _ = ContractUtils.deploy_contract( + contract_address, _, _ = ContractUtils.deploy_contract( contract_name="IbetStandardToken", args=arguments, deployer=tx_from, @@ -461,79 +461,3 @@ def get_latest_delivery_id(contract_address: str): contract_name="IbetSecurityTokenDVP", contract_address=contract_address ) return escrow_contract.functions.latestDeliveryId().call() - - -class IbetSecurityTokenDVPContractTestUtils: - @staticmethod - def balance_of(contract_address: str, account_address: str, token_address: str): - dvp_contract = ContractUtils.get_contract( - contract_name="IbetSecurityTokenDVP", contract_address=contract_address - ) - return dvp_contract.functions.balanceOf(account_address, token_address).call() - - @staticmethod - def create_delivery( - contract_address: str, tx_from: str, private_key: str, args: list - ): - dvp_contract = ContractUtils.get_contract( - contract_name="IbetSecurityTokenDVP", contract_address=contract_address - ) - tx = dvp_contract.functions.createDelivery(*args).build_transaction( - {"chainId": CHAIN_ID, "from": tx_from, "gas": TX_GAS_LIMIT, "gasPrice": 0} - ) - ContractUtils.send_transaction(transaction=tx, private_key=private_key) - - @staticmethod - def cancel_delivery( - contract_address: str, tx_from: str, private_key: str, args: list - ): - dvp_contract = ContractUtils.get_contract( - contract_name="IbetSecurityTokenDVP", contract_address=contract_address - ) - tx = dvp_contract.functions.cancelDelivery(*args).build_transaction( - {"chainId": CHAIN_ID, "from": tx_from, "gas": TX_GAS_LIMIT, "gasPrice": 0} - ) - ContractUtils.send_transaction(transaction=tx, private_key=private_key) - - @staticmethod - def confirm_delivery( - contract_address: str, tx_from: str, private_key: str, args: list - ): - dvp_contract = ContractUtils.get_contract( - contract_name="IbetSecurityTokenDVP", contract_address=contract_address - ) - tx = dvp_contract.functions.confirmDelivery(*args).build_transaction( - {"chainId": CHAIN_ID, "from": tx_from, "gas": TX_GAS_LIMIT, "gasPrice": 0} - ) - ContractUtils.send_transaction(transaction=tx, private_key=private_key) - - @staticmethod - def finish_delivery( - contract_address: str, tx_from: str, private_key: str, args: list - ): - dvp_contract = ContractUtils.get_contract( - contract_name="IbetSecurityTokenDVP", contract_address=contract_address - ) - tx = dvp_contract.functions.finishDelivery(*args).build_transaction( - {"chainId": CHAIN_ID, "from": tx_from, "gas": TX_GAS_LIMIT, "gasPrice": 0} - ) - ContractUtils.send_transaction(transaction=tx, private_key=private_key) - - @staticmethod - def abort_delivery( - contract_address: str, tx_from: str, private_key: str, args: list - ): - dvp_contract = ContractUtils.get_contract( - contract_name="IbetSecurityTokenDVP", contract_address=contract_address - ) - tx = dvp_contract.functions.abortDelivery(*args).build_transaction( - {"chainId": CHAIN_ID, "from": tx_from, "gas": TX_GAS_LIMIT, "gasPrice": 0} - ) - ContractUtils.send_transaction(transaction=tx, private_key=private_key) - - @staticmethod - def get_latest_delivery_id(contract_address: str): - escrow_contract = ContractUtils.get_contract( - contract_name="IbetSecurityTokenDVP", contract_address=contract_address - ) - return escrow_contract.functions.latestDeliveryId().call()