From 232e581e1ab6806be2690fbf368d374e92aed789 Mon Sep 17 00:00:00 2001 From: tmcgroul Date: Fri, 15 Dec 2023 23:34:19 +0300 Subject: [PATCH] define queries estimation --- MODULE_NAME/__init__.py | 1 - README.md | 6 +-- ape_subsquid/__init__.py | 8 +++ {MODULE_NAME => ape_subsquid}/py.typed | 0 ape_subsquid/query.py | 71 ++++++++++++++++++++++++++ pyproject.toml | 4 +- setup.py | 10 ++-- 7 files changed, 89 insertions(+), 11 deletions(-) delete mode 100644 MODULE_NAME/__init__.py create mode 100644 ape_subsquid/__init__.py rename {MODULE_NAME => ape_subsquid}/py.typed (100%) create mode 100644 ape_subsquid/query.py diff --git a/MODULE_NAME/__init__.py b/MODULE_NAME/__init__.py deleted file mode 100644 index 57e12c5..0000000 --- a/MODULE_NAME/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# Add module top-level imports here diff --git a/README.md b/README.md index ab397e7..b9333cc 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ TODO: Description You can install the latest release via [`pip`](https://pypi.org/project/pip/): ```bash -pip install +pip install ape-subsquid ``` ### via `setuptools` @@ -21,8 +21,8 @@ pip install You can clone the repository and use [`setuptools`](https://github.com/pypa/setuptools) for the most up-to-date version: ```bash -git clone https://github.com/ApeWorX/.git -cd +git clone https://github.com/ApeWorX/ape-subsquid.git +cd ape-subsquid python3 setup.py install ``` diff --git a/ape_subsquid/__init__.py b/ape_subsquid/__init__.py new file mode 100644 index 0000000..40d9d18 --- /dev/null +++ b/ape_subsquid/__init__.py @@ -0,0 +1,8 @@ +from ape import plugins + +from ape_subsquid.query import SubsquidQueryEngine + + +@plugins.register(plugins.QueryPlugin) +def query_engines(): + yield SubsquidQueryEngine diff --git a/MODULE_NAME/py.typed b/ape_subsquid/py.typed similarity index 100% rename from MODULE_NAME/py.typed rename to ape_subsquid/py.typed diff --git a/ape_subsquid/query.py b/ape_subsquid/query.py new file mode 100644 index 0000000..b643737 --- /dev/null +++ b/ape_subsquid/query.py @@ -0,0 +1,71 @@ +from typing import Iterator, Optional + +from ape.api.query import ( + AccountTransactionQuery, + BlockQuery, + BlockTransactionQuery, + ContractCreationQuery, + ContractEventQuery, + QueryAPI, + QueryType, +) +from ape.exceptions import QueryEngineError +from ape.utils import singledispatchmethod + + +class SubsquidQueryEngine(QueryAPI): + @singledispatchmethod + def estimate_query(self, query: QueryType) -> Optional[int]: + return None + + @estimate_query.register + def estimate_block_query(self, query: BlockQuery) -> int: + router_ms = 400 + query_ms = 300 + return router_ms + query_ms + + @estimate_query.register + def estimate_block_transaction_query(self, query: BlockTransactionQuery) -> int: + router_ms = 400 + query_ms = 1500 + return router_ms + query_ms + + @estimate_query.register + def estimate_account_transaction_query(self, query: AccountTransactionQuery) -> int: + return 0 + + @estimate_query.register + def estimate_contract_creation_query(self, query: ContractCreationQuery) -> int: + return 0 + + @estimate_query.register + def estimate_contract_event_query(self, query: ContractEventQuery) -> int: + router_ms = 400 + query_ms = 400 + (1 + query.stop_block - query.start_block) * 1.4 + return router_ms + query_ms + + @singledispatchmethod + def perform_query(self, query: QueryType) -> Iterator: + raise QueryEngineError( + f"{self.__class__.__name__} cannot handle {query.__class__.__name__} queries." + ) + + @perform_query.register + def perform_block_query(self, query: BlockQuery): + return None + + @perform_query.register + def perform_block_transaction_query(self, query: BlockTransactionQuery): + return None + + @perform_query.register + def perform_account_transaction_query(self, query: AccountTransactionQuery): + return None + + @perform_query.register + def perform_contract_creation_query(self, query: ContractCreationQuery): + return None + + @perform_query.register + def perform_contract_event_query(self, query: ContractEventQuery): + return None diff --git a/pyproject.toml b/pyproject.toml index 9e8ace2..c25a358 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,7 +6,7 @@ exclude = "build/" plugins = ["pydantic.mypy"] [tool.setuptools_scm] -write_to = "/version.py" +write_to = "ape_subsquid/version.py" # NOTE: you have to use single-quoted strings in TOML for regular expressions. # It's the equivalent of r-strings in Python. Multiline strings are treated as @@ -25,7 +25,7 @@ addopts = """ --cov-report term --cov-report html --cov-report xml - --cov= + --cov=ape_subsquid """ python_files = "test_*.py" testpaths = "tests" diff --git a/setup.py b/setup.py index beedd3b..b0ec347 100644 --- a/setup.py +++ b/setup.py @@ -50,25 +50,25 @@ setup( - name="", + name="ape-subsquid", use_scm_version=True, setup_requires=["setuptools_scm"], - description=""": """, + description="""ape-subsquid: """, long_description=long_description, long_description_content_type="text/markdown", author="ApeWorX Ltd.", author_email="admin@apeworx.io", url="https://github.com/ApeWorX/", include_package_data=True, - install_requires=[], + install_requires=["eth-ape>=0.6.27,<0.7"], python_requires=">=3.8,<4", extras_require=extras_require, - py_modules=[""], + py_modules=["ape_subsquid"], license="Apache-2.0", zip_safe=False, keywords="ethereum", packages=find_packages(exclude=["tests", "tests.*"]), - package_data={"": ["py.typed"]}, + package_data={"ape_subsquid": ["py.typed"]}, classifiers=[ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers",