From 3cff6e4074ff5d520fce1f98036807a93ccd64ee Mon Sep 17 00:00:00 2001 From: angrybayblade Date: Fri, 7 Jun 2024 20:17:38 +0530 Subject: [PATCH 01/29] feat: entrypoint for pearl backend --- .gitignore | 7 ++++++- pearl.py | 8 ++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 pearl.py diff --git a/.gitignore b/.gitignore index c7eba5391..844288d36 100644 --- a/.gitignore +++ b/.gitignore @@ -32,8 +32,13 @@ tmp/ temp/ !operate/data -dist/ electron/.next +dist/ +build/ + cache leak_report + +*.dist +*.build \ No newline at end of file diff --git a/pearl.py b/pearl.py new file mode 100644 index 000000000..f56112743 --- /dev/null +++ b/pearl.py @@ -0,0 +1,8 @@ +from google.protobuf.descriptor_pb2 import FileDescriptorProto +from aea.mail.base_pb2 import DESCRIPTOR +from multiaddr.codecs.idna import to_bytes as _ +from multiaddr.codecs.uint16be import to_bytes as _ +from operate.cli import main + +if __name__ == "__main__": + main() From 62591173f264bc445beb0c302a41468452aa125f Mon Sep 17 00:00:00 2001 From: Ardian Date: Fri, 14 Jun 2024 11:03:58 +0200 Subject: [PATCH 02/29] feat: add specs --- electron/install.js | 2 +- pearl.py => operate/pearl.py | 5 + operate/services/service.py | 49 +----- operate/services/utils/tendermint.py | 6 + pearl_operate.spec | 63 +++++++ poetry.lock | 238 ++++++++++++++++++++++++++- pyproject.toml | 3 +- tendermint.spec | 44 +++++ 8 files changed, 364 insertions(+), 46 deletions(-) rename pearl.py => operate/pearl.py (59%) create mode 100644 pearl_operate.spec create mode 100644 tendermint.spec diff --git a/electron/install.js b/electron/install.js index 15334e1ab..41a102faa 100644 --- a/electron/install.js +++ b/electron/install.js @@ -23,7 +23,7 @@ const TempDir = `${OperateDirectory}/temp`; const VersionFile = `${OperateDirectory}/version.txt`; const LogFile = `${OperateDirectory}/logs.txt`; const OperateInstallationLog = `${os.homedir()}/operate.log`; -const OperateCmd = `${os.homedir()}/.operate/venv/bin/operate`; +const OperateCmd = `${os.homedir()}/dist/${os.platform()}/pearl/pearl`; const Env = { ...process.env, PATH: `${process.env.PATH}:/opt/homebrew/bin:/usr/local/bin`, diff --git a/pearl.py b/operate/pearl.py similarity index 59% rename from pearl.py rename to operate/pearl.py index f56112743..5c6849121 100644 --- a/pearl.py +++ b/operate/pearl.py @@ -2,6 +2,11 @@ from aea.mail.base_pb2 import DESCRIPTOR from multiaddr.codecs.idna import to_bytes as _ from multiaddr.codecs.uint16be import to_bytes as _ +from aea_ledger_ethereum.ethereum import * +from aea_ledger_cosmos.cosmos import * +from aea_ledger_ethereum_flashbots.ethereum_flashbots import * +from aea.crypto.registries.base import * + from operate.cli import main if __name__ == "__main__": diff --git a/operate/services/service.py b/operate/services/service.py index ce3d75eaa..39cb47f35 100644 --- a/operate/services/service.py +++ b/operate/services/service.py @@ -30,10 +30,8 @@ from copy import copy, deepcopy from dataclasses import dataclass from pathlib import Path -from venv import main as venv_cli import psutil -from aea.__version__ import __version__ as aea_version from aea.configurations.constants import ( DEFAULT_LEDGER, LEDGER, @@ -44,7 +42,6 @@ from aea.configurations.data_types import PackageType from aea.helpers.yaml_utils import yaml_dump, yaml_load, yaml_load_all from aea_cli_ipfs.ipfs_utils import IPFSTool -from autonomy.__version__ import __version__ as autonomy_version from autonomy.cli.helpers.deployment import run_deployment, stop_deployment from autonomy.configurations.loader import load_service_config from autonomy.deploy.base import BaseDeploymentGenerator @@ -83,7 +80,6 @@ OnChainUserParams, ) - SAFE_CONTRACT_ADDRESS = "safe_contract_address" ALL_PARTICIPANTS = "all_participants" CONSENSUS_THRESHOLD = "consensus_threshold" @@ -299,7 +295,7 @@ def generate_config_tendermint(self) -> "HostDeploymentGenerator": encoding="utf-8", ) shutil.copy( - tendermint.__file__, + tendermint.__file__.replace('.pyc', '.py'), self.build_dir / "tendermint.py", ) return self @@ -317,7 +313,6 @@ def generate( json.dumps(agent, indent=2), encoding="utf-8", ) - venv_cli(args=[str(self.build_dir / "venv")]) return self def _populate_keys(self) -> None: @@ -344,6 +339,8 @@ def populate_private_keys(self) -> "DockerComposeGenerator": def _run_cmd(args: t.List[str], cwd: t.Optional[Path] = None) -> None: """Run command in a subprocess.""" print(f"Running: {' '.join(args)}") + # print working dir + print(f"Working dir: {os.getcwd()}") result = subprocess.run( # pylint: disable=subprocess-run-check # nosec args=args, cwd=cwd, @@ -387,27 +384,8 @@ def _setup_agent(working_dir: Path) -> None: json.dumps(env, indent=4), encoding="utf-8", ) - venv = working_dir / "venv" - pbin = str(venv / "bin" / "python") - - # Install agent dependencies - _run_cmd( - args=[ - pbin, - "-m", - "pip", - "install", - f"open-autonomy[all]=={autonomy_version}", - f"open-aea-ledger-ethereum=={aea_version}", - f"open-aea-ledger-ethereum-flashbots=={aea_version}", - f"open-aea-ledger-cosmos=={aea_version}", - ], - ) - - # Install tendermint dependencies - _run_cmd(args=[pbin, "-m", "pip", "install", "flask", "requests"]) - abin = str(venv / "bin" / "aea") + abin = os.getcwd() + '/dist/aea_bin/aea_bin' # Fetch agent _run_cmd( args=[ @@ -434,12 +412,6 @@ def _setup_agent(working_dir: Path) -> None: cwd=working_dir, ) - # Install agent dependencies - _run_cmd( - args=[abin, "-v", "debug", "install", "--timeout", "600"], - cwd=working_dir / "agent", - ) - # Add keys shutil.copy( working_dir / "ethereum_private_key.txt", @@ -458,8 +430,9 @@ def _setup_agent(working_dir: Path) -> None: def _start_agent(working_dir: Path) -> None: """Start agent process.""" env = json.loads((working_dir / "agent.json").read_text(encoding="utf-8")) + aea_bin = os.getcwd() + '/dist/aea_bin/aea_bin' process = subprocess.Popen( # pylint: disable=consider-using-with # nosec - args=[str(working_dir / "venv" / "bin" / "aea"), "run"], + args=[aea_bin, "run"], cwd=working_dir / "agent", stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, @@ -477,15 +450,9 @@ def _start_agent(working_dir: Path) -> None: def _start_tendermint(working_dir: Path) -> None: """Start tendermint process.""" env = json.loads((working_dir / "tendermint.json").read_text(encoding="utf-8")) + tendermint_com = os.getcwd() + "/dist/tendermint/tendermint" process = subprocess.Popen( # pylint: disable=consider-using-with # nosec - args=[ - str(working_dir / "venv" / "bin" / "flask"), - "run", - "--host", - "localhost", - "--port", - "8080", - ], + args=[tendermint_com], cwd=working_dir, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, diff --git a/operate/services/utils/tendermint.py b/operate/services/utils/tendermint.py index 9d69d1e27..c8b4f0ef4 100644 --- a/operate/services/utils/tendermint.py +++ b/operate/services/utils/tendermint.py @@ -637,3 +637,9 @@ def create_server() -> Any: """Function to retrieve just the app to be used by flask entry point.""" flask_app, _ = create_app() return flask_app + + +if __name__ == '__main__': + # Start the Flask server programmatically + app = create_server() + app.run(host='localhost', port=8080) diff --git a/pearl_operate.spec b/pearl_operate.spec new file mode 100644 index 000000000..34c5a9df4 --- /dev/null +++ b/pearl_operate.spec @@ -0,0 +1,63 @@ +# -*- mode: python ; coding: utf-8 -*- +from PyInstaller.utils.hooks import collect_data_files +from PyInstaller.utils.hooks import collect_all + +datas = [] +binaries = [] +hiddenimports = ['aea_ledger_ethereum', 'aea_ledger_cosmos', 'aea_ledger_ethereum_flashbots'] +datas += collect_data_files('eth_account') +tmp_ret = collect_all('aea') +datas += tmp_ret[0]; binaries += tmp_ret[1]; hiddenimports += tmp_ret[2] +tmp_ret = collect_all('autonomy') +datas += tmp_ret[0]; binaries += tmp_ret[1]; hiddenimports += tmp_ret[2] +tmp_ret = collect_all('operate') +datas += tmp_ret[0]; binaries += tmp_ret[1]; hiddenimports += tmp_ret[2] +tmp_ret = collect_all('aea_ledger_ethereum') +datas += tmp_ret[0]; binaries += tmp_ret[1]; hiddenimports += tmp_ret[2] +tmp_ret = collect_all('aea_ledger_cosmos') +datas += tmp_ret[0]; binaries += tmp_ret[1]; hiddenimports += tmp_ret[2] +tmp_ret = collect_all('aea_ledger_ethereum_flashbots') +datas += tmp_ret[0]; binaries += tmp_ret[1]; hiddenimports += tmp_ret[2] + + +a = Analysis( + ['operate/pearl.py'], + pathex=[], + binaries=binaries, + datas=datas, + hiddenimports=hiddenimports, + hookspath=[], + hooksconfig={}, + runtime_hooks=[], + excludes=[], + noarchive=False, + optimize=0, +) +pyz = PYZ(a.pure) + +exe = EXE( + pyz, + a.scripts, + [], + exclude_binaries=True, + name='pearl', + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=True, + console=True, + disable_windowed_traceback=False, + argv_emulation=False, + target_arch=None, + codesign_identity=None, + entitlements_file=None, +) +coll = COLLECT( + exe, + a.binaries, + a.datas, + strip=False, + upx=True, + upx_exclude=[], + name='pearl', +) diff --git a/poetry.lock b/poetry.lock index 545b014ac..079038d6d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,9 +1,10 @@ -# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. +# This file is automatically @generated by Poetry and should not be changed by hand. [[package]] name = "aiohttp" version = "3.9.5" description = "Async http client/server framework (asyncio)" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -100,6 +101,7 @@ speedups = ["Brotli", "aiodns", "brotlicffi"] name = "aiosignal" version = "1.3.1" description = "aiosignal: a list of registered asynchronous callbacks" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -110,10 +112,23 @@ files = [ [package.dependencies] frozenlist = ">=1.1.0" +[[package]] +name = "altgraph" +version = "0.17.4" +description = "Python graph (network) package" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "altgraph-0.17.4-py2.py3-none-any.whl", hash = "sha256:642743b4750de17e655e6711601b077bc6598dbfa3ba5fa2b2a35ce12b508dff"}, + {file = "altgraph-0.17.4.tar.gz", hash = "sha256:1b5afbb98f6c4dcadb2e2ae6ab9fa994bbb8c1d75f4fa96d340f9437ae454406"}, +] + [[package]] name = "annotated-types" version = "0.7.0" description = "Reusable constraint types to use with typing.Annotated" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -128,6 +143,7 @@ typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.9\""} name = "anyio" version = "4.4.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -150,6 +166,7 @@ trio = ["trio (>=0.23)"] name = "async-timeout" version = "4.0.3" description = "Timeout context manager for asyncio programs" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -161,6 +178,7 @@ files = [ name = "attrs" version = "23.2.0" description = "Classes Without Boilerplate" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -180,6 +198,7 @@ tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "p name = "backoff" version = "2.2.1" description = "Function decoration for backoff and retry" +category = "main" optional = false python-versions = ">=3.7,<4.0" files = [ @@ -191,6 +210,7 @@ files = [ name = "base58" version = "2.1.1" description = "Base58 and Base58Check implementation." +category = "main" optional = false python-versions = ">=3.5" files = [ @@ -205,6 +225,7 @@ tests = ["PyHamcrest (>=2.0.2)", "mypy", "pytest (>=4.6)", "pytest-benchmark", " name = "bcrypt" version = "4.1.3" description = "Modern password hashing for your software and your servers" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -245,6 +266,7 @@ typecheck = ["mypy"] name = "bitarray" version = "2.9.2" description = "efficient arrays of booleans -- C extension" +category = "main" optional = false python-versions = "*" files = [ @@ -376,6 +398,7 @@ files = [ name = "certifi" version = "2024.6.2" description = "Python package for providing Mozilla's CA Bundle." +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -387,6 +410,7 @@ files = [ name = "cffi" version = "1.16.0" description = "Foreign Function Interface for Python calling C code." +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -451,6 +475,7 @@ pycparser = "*" name = "charset-normalizer" version = "2.1.1" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +category = "main" optional = false python-versions = ">=3.6.0" files = [ @@ -465,6 +490,7 @@ unicode-backport = ["unicodedata2"] name = "clea" version = "0.1.0rc4" description = "Framework for writing CLI application quickly" +category = "main" optional = false python-versions = ">=3.8,<4.0" files = [ @@ -479,6 +505,7 @@ typing-extensions = ">=4.7.1,<5.0.0" name = "click" version = "8.0.2" description = "Composable command line interface toolkit" +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -493,6 +520,7 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." +category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -504,6 +532,7 @@ files = [ name = "coverage" version = "7.5.3" description = "Code coverage measurement for Python" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -568,6 +597,7 @@ toml = ["tomli"] name = "cryptography" version = "42.0.8" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -622,6 +652,7 @@ test-randomorder = ["pytest-randomly"] name = "cytoolz" version = "0.12.3" description = "Cython implementation of Toolz: High performance functional utilities" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -741,6 +772,7 @@ cython = ["cython"] name = "distro" version = "1.9.0" description = "Distro - an OS platform information API" +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -752,6 +784,7 @@ files = [ name = "docker" version = "6.1.2" description = "A Python library for the Docker Engine API." +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -774,6 +807,7 @@ ssh = ["paramiko (>=2.4.3)"] name = "dockerpty" version = "0.4.1" description = "Python library to use the pseudo-tty of a docker container" +category = "main" optional = false python-versions = "*" files = [ @@ -787,6 +821,7 @@ six = ">=1.3.0" name = "docopt" version = "0.6.2" description = "Pythonic argument parser, that will make you smile" +category = "main" optional = false python-versions = "*" files = [ @@ -797,6 +832,7 @@ files = [ name = "ecdsa" version = "0.16.1" description = "ECDSA cryptographic signature library (pure python)" +category = "main" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -815,6 +851,7 @@ gmpy2 = ["gmpy2"] name = "eth-abi" version = "5.1.0" description = "eth_abi: Python utilities for working with Ethereum ABI definitions, especially encoding and decoding" +category = "main" optional = false python-versions = "<4,>=3.8" files = [ @@ -837,6 +874,7 @@ tools = ["hypothesis (>=4.18.2,<5.0.0)"] name = "eth-account" version = "0.8.0" description = "eth-account: Sign Ethereum transactions and messages with local private keys" +category = "main" optional = false python-versions = ">=3.6, <4" files = [ @@ -864,6 +902,7 @@ test = ["coverage", "hypothesis (>=4.18.0,<5)", "pytest (>=6.2.5,<7)", "pytest-x name = "eth-hash" version = "0.7.0" description = "eth-hash: The Ethereum hashing function, keccak256, sometimes (erroneously) called sha3" +category = "main" optional = false python-versions = ">=3.8, <4" files = [ @@ -885,6 +924,7 @@ test = ["pytest (>=7.0.0)", "pytest-xdist (>=2.4.0)"] name = "eth-keyfile" version = "0.6.1" description = "A library for handling the encrypted keyfiles used to store ethereum private keys." +category = "main" optional = false python-versions = "*" files = [ @@ -907,6 +947,7 @@ test = ["pytest (>=6.2.5,<7)"] name = "eth-keys" version = "0.4.0" description = "Common API for Ethereum key operations." +category = "main" optional = false python-versions = "*" files = [ @@ -929,6 +970,7 @@ test = ["asn1tools (>=0.146.2,<0.147)", "eth-hash[pycryptodome]", "eth-hash[pysh name = "eth-rlp" version = "0.3.0" description = "eth-rlp: RLP definitions for common Ethereum objects in Python" +category = "main" optional = false python-versions = ">=3.7, <4" files = [ @@ -951,6 +993,7 @@ test = ["eth-hash[pycryptodome]", "pytest (>=6.2.5,<7)", "pytest-xdist", "tox (= name = "eth-typing" version = "3.5.2" description = "eth-typing: Common type annotations for ethereum python packages" +category = "main" optional = false python-versions = ">=3.7.2, <4" files = [ @@ -971,6 +1014,7 @@ test = ["pytest (>=7.0.0)", "pytest-xdist (>=2.4.0)"] name = "eth-utils" version = "2.3.1" description = "eth-utils: Common utility functions for python code that interacts with Ethereum" +category = "main" optional = false python-versions = ">=3.7,<4" files = [ @@ -994,6 +1038,7 @@ test = ["hypothesis (>=4.43.0)", "mypy (==0.971)", "pytest (>=7.0.0)", "pytest-x name = "exceptiongroup" version = "1.2.1" description = "Backport of PEP 654 (exception groups)" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1008,6 +1053,7 @@ test = ["pytest (>=6)"] name = "fastapi" version = "0.110.0" description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1027,6 +1073,7 @@ all = ["email-validator (>=2.0.0)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)" name = "flask" version = "2.1.3" description = "A simple framework for building complex web applications." +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1049,6 +1096,7 @@ dotenv = ["python-dotenv"] name = "frozenlist" version = "1.4.1" description = "A list-like structure which implements collections.abc.MutableSequence" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1135,6 +1183,7 @@ files = [ name = "gql" version = "3.5.0" description = "GraphQL client for Python" +category = "main" optional = false python-versions = "*" files = [ @@ -1163,6 +1212,7 @@ websockets = ["websockets (>=10,<12)"] name = "graphql-core" version = "3.2.3" description = "GraphQL implementation for Python, a port of GraphQL.js, the JavaScript reference implementation for GraphQL." +category = "main" optional = false python-versions = ">=3.6,<4" files = [ @@ -1174,6 +1224,7 @@ files = [ name = "h11" version = "0.14.0" description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1185,6 +1236,7 @@ files = [ name = "hexbytes" version = "0.3.1" description = "hexbytes: Python `bytes` subclass that decodes hex, with a readable console output" +category = "main" optional = false python-versions = ">=3.7, <4" files = [ @@ -1202,6 +1254,7 @@ test = ["eth-utils (>=1.0.1,<3)", "hypothesis (>=3.44.24,<=6.31.6)", "pytest (>= name = "idna" version = "3.7" description = "Internationalized Domain Names in Applications (IDNA)" +category = "main" optional = false python-versions = ">=3.5" files = [ @@ -1213,6 +1266,7 @@ files = [ name = "importlib-metadata" version = "7.1.0" description = "Read metadata from Python packages" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1232,6 +1286,7 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", name = "importlib-resources" version = "6.4.0" description = "Read resources from Python packages" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1250,6 +1305,7 @@ testing = ["jaraco.test (>=5.4)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "p name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1261,6 +1317,7 @@ files = [ name = "ipfshttpclient" version = "0.8.0a2" description = "Python IPFS HTTP CLIENT library" +category = "main" optional = false python-versions = ">=3.6.2,!=3.7.0,!=3.7.1" files = [ @@ -1276,6 +1333,7 @@ requests = ">=2.11" name = "itsdangerous" version = "2.2.0" description = "Safely pass data to untrusted environments and back." +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1287,6 +1345,7 @@ files = [ name = "jinja2" version = "3.1.4" description = "A very fast and expressive template engine." +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1304,6 +1363,7 @@ i18n = ["Babel (>=2.7)"] name = "jsonschema" version = "4.3.3" description = "An implementation of JSON Schema validation for Python" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1324,6 +1384,7 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- name = "lru-dict" version = "1.3.0" description = "An Dict like LRU container." +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1413,10 +1474,26 @@ files = [ [package.extras] test = ["pytest"] +[[package]] +name = "macholib" +version = "1.16.3" +description = "Mach-O header analysis and editing" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "macholib-1.16.3-py2.py3-none-any.whl", hash = "sha256:0e315d7583d38b8c77e815b1ecbdbf504a8258d8b3e17b61165c6feb60d18f2c"}, + {file = "macholib-1.16.3.tar.gz", hash = "sha256:07ae9e15e8e4cd9a788013d81f5908b3609aa76f9b1421bae9c4d7606ec86a30"}, +] + +[package.dependencies] +altgraph = ">=0.17" + [[package]] name = "markupsafe" version = "2.1.5" description = "Safely add untrusted strings to HTML/XML markup." +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1486,6 +1563,7 @@ files = [ name = "morphys" version = "1.0" description = "Smart conversions between unicode and bytes types for common cases" +category = "main" optional = false python-versions = "*" files = [ @@ -1496,6 +1574,7 @@ files = [ name = "multiaddr" version = "0.0.9" description = "Python implementation of jbenet's multiaddr" +category = "main" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" files = [ @@ -1513,6 +1592,7 @@ varint = "*" name = "multidict" version = "6.0.5" description = "multidict implementation" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1612,6 +1692,7 @@ files = [ name = "netaddr" version = "1.3.0" description = "A network address manipulation library for Python" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1626,6 +1707,7 @@ nicer-shell = ["ipython"] name = "open-aea" version = "1.51.0" description = "Open Autonomous Economic Agent framework (without vendor lock-in)" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1665,6 +1747,7 @@ test-tools = ["click (==8.0.2)", "coverage (>=6.4.4,<8.0.0)", "jsonschema (>=4.3 name = "open-aea-cli-ipfs" version = "1.51.0" description = "CLI extension for open AEA framework wrapping IPFS functionality." +category = "main" optional = false python-versions = "*" files = [ @@ -1681,6 +1764,7 @@ pytest = ">=7.0.0,<7.3.0" name = "open-aea-ledger-ethereum" version = "1.51.0" description = "Python package wrapping the public and private key cryptography and ledger api of Ethereum." +category = "main" optional = false python-versions = "*" files = [ @@ -1698,6 +1782,7 @@ web3 = ">=6.0.0,<7" name = "open-autonomy" version = "0.14.11.post1" description = "A framework for the creation of autonomous agent services." +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1734,6 +1819,7 @@ cli = ["click (==8.0.2)", "coverage (>=6.4.4,<8.0.0)", "open-aea-cli-ipfs (==1.5 name = "packaging" version = "23.2" description = "Core utilities for Python packages" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1745,6 +1831,7 @@ files = [ name = "paramiko" version = "3.4.0" description = "SSH2 protocol library" +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1766,6 +1853,7 @@ invoke = ["invoke (>=2.0)"] name = "parsimonious" version = "0.10.0" description = "(Soon to be) the fastest pure-Python PEG parser I could muster" +category = "main" optional = false python-versions = "*" files = [ @@ -1776,10 +1864,23 @@ files = [ [package.dependencies] regex = ">=2022.3.15" +[[package]] +name = "pefile" +version = "2023.2.7" +description = "Python PE parsing module" +category = "main" +optional = false +python-versions = ">=3.6.0" +files = [ + {file = "pefile-2023.2.7-py3-none-any.whl", hash = "sha256:da185cd2af68c08a6cd4481f7325ed600a88f6a813bad9dea07ab3ef73d8d8d6"}, + {file = "pefile-2023.2.7.tar.gz", hash = "sha256:82e6114004b3d6911c77c3953e3838654b04511b8b66e8583db70c65998017dc"}, +] + [[package]] name = "pluggy" version = "1.5.0" description = "plugin and hook calling mechanisms for python" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1795,6 +1896,7 @@ testing = ["pytest", "pytest-benchmark"] name = "protobuf" version = "4.24.4" description = "" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1817,6 +1919,7 @@ files = [ name = "psutil" version = "5.9.8" description = "Cross-platform lib for process and system monitoring in Python." +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ @@ -1845,6 +1948,7 @@ test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] name = "py-multibase" version = "1.0.3" description = "Multibase implementation for Python" +category = "main" optional = false python-versions = "*" files = [ @@ -1861,6 +1965,7 @@ six = ">=1.10.0,<2.0" name = "py-multicodec" version = "0.2.1" description = "Multicodec implementation in Python" +category = "main" optional = false python-versions = "*" files = [ @@ -1877,6 +1982,7 @@ varint = ">=1.0.2,<2.0.0" name = "pycparser" version = "2.22" description = "C parser in Python" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1888,6 +1994,7 @@ files = [ name = "pycryptodome" version = "3.20.0" description = "Cryptographic library for Python" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -1929,6 +2036,7 @@ files = [ name = "pydantic" version = "2.7.3" description = "Data validation using Python type hints" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1948,6 +2056,7 @@ email = ["email-validator (>=2.0.0)"] name = "pydantic-core" version = "2.18.4" description = "Core functionality for Pydantic validation and serialization" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2035,10 +2144,64 @@ files = [ [package.dependencies] typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" +[[package]] +name = "pyinstaller" +version = "6.8.0" +description = "PyInstaller bundles a Python application and all its dependencies into a single package." +category = "main" +optional = false +python-versions = "<3.13,>=3.8" +files = [ + {file = "pyinstaller-6.8.0-py3-none-macosx_10_13_universal2.whl", hash = "sha256:5ff6bc2784c1026f8e2f04aa3760cbed41408e108a9d4cf1dd52ee8351a3f6e1"}, + {file = "pyinstaller-6.8.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:39ac424d2ee2457d2ab11a5091436e75a0cccae207d460d180aa1fcbbafdd528"}, + {file = "pyinstaller-6.8.0-py3-none-manylinux2014_i686.whl", hash = "sha256:355832a3acc7de90a255ecacd4b9f9e166a547a79c8905d49f14e3a75c1acdb9"}, + {file = "pyinstaller-6.8.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:6303c7a009f47e6a96ef65aed49f41e36ece8d079b9193ca92fe807403e5fe80"}, + {file = "pyinstaller-6.8.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2b71509468c811968c0b5decb5bbe85b6292ea52d7b1f26313d2aabb673fa9a5"}, + {file = "pyinstaller-6.8.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:ff31c5b99e05a4384bbe2071df67ec8b2b347640a375eae9b40218be2f1754c6"}, + {file = "pyinstaller-6.8.0-py3-none-musllinux_1_1_aarch64.whl", hash = "sha256:000c36b13fe4cd8d0d8c2bc855b1ddcf39867b5adf389e6b5ca45b25fa3e619d"}, + {file = "pyinstaller-6.8.0-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:fe0af018d7d5077180e3144ada89a4da5df8d07716eb7e9482834a56dc57a4e8"}, + {file = "pyinstaller-6.8.0-py3-none-win32.whl", hash = "sha256:d257f6645c7334cbd66f38a4fac62c3ad614cc46302b2b5d9f8cc48c563bce0e"}, + {file = "pyinstaller-6.8.0-py3-none-win_amd64.whl", hash = "sha256:81cccfa9b16699b457f4788c5cc119b50f3cd4d0db924955f15c33f2ad27a50d"}, + {file = "pyinstaller-6.8.0-py3-none-win_arm64.whl", hash = "sha256:1c3060a263758cf7f0144ab4c016097b20451b2469d468763414665db1bb743d"}, + {file = "pyinstaller-6.8.0.tar.gz", hash = "sha256:3f4b6520f4423fe19bcc2fd63ab7238851ae2bdcbc98f25bc5d2f97cc62012e9"}, +] + +[package.dependencies] +altgraph = "*" +importlib-metadata = {version = ">=4.6", markers = "python_version < \"3.10\""} +macholib = {version = ">=1.8", markers = "sys_platform == \"darwin\""} +packaging = ">=22.0" +pefile = {version = ">=2022.5.30", markers = "sys_platform == \"win32\""} +pyinstaller-hooks-contrib = ">=2024.6" +pywin32-ctypes = {version = ">=0.2.1", markers = "sys_platform == \"win32\""} +setuptools = ">=42.0.0" + +[package.extras] +completion = ["argcomplete"] +hook-testing = ["execnet (>=1.5.0)", "psutil", "pytest (>=2.7.3)"] + +[[package]] +name = "pyinstaller-hooks-contrib" +version = "2024.7" +description = "Community maintained hooks for PyInstaller" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pyinstaller_hooks_contrib-2024.7-py2.py3-none-any.whl", hash = "sha256:8bf0775771fbaf96bcd2f4dfd6f7ae6c1dd1b1efe254c7e50477b3c08e7841d8"}, + {file = "pyinstaller_hooks_contrib-2024.7.tar.gz", hash = "sha256:fd5f37dcf99bece184e40642af88be16a9b89613ecb958a8bd1136634fc9fac5"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=4.6", markers = "python_version < \"3.10\""} +packaging = ">=22.0" +setuptools = ">=42.0.0" + [[package]] name = "pymultihash" version = "0.8.2" description = "Python implementation of the multihash specification" +category = "main" optional = false python-versions = "*" files = [ @@ -2054,6 +2217,7 @@ sha3 = ["pysha3"] name = "pynacl" version = "1.5.0" description = "Python binding to the Networking and Cryptography (NaCl) library" +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2080,6 +2244,7 @@ tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"] name = "pyrsistent" version = "0.20.0" description = "Persistent/Functional/Immutable data structures" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2121,6 +2286,7 @@ files = [ name = "pytest" version = "7.2.1" description = "pytest: simple powerful testing with Python" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2144,6 +2310,7 @@ testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2. name = "python-baseconv" version = "1.2.2" description = "Convert numbers from base 10 integers to base X strings and back again." +category = "main" optional = false python-versions = "*" files = [ @@ -2154,6 +2321,7 @@ files = [ name = "python-dotenv" version = "0.21.1" description = "Read key-value pairs from a .env file and set them as environment variables" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2168,6 +2336,7 @@ cli = ["click (>=5.0)"] name = "pywin32" version = "306" description = "Python for Window Extensions" +category = "main" optional = false python-versions = "*" files = [ @@ -2187,10 +2356,23 @@ files = [ {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, ] +[[package]] +name = "pywin32-ctypes" +version = "0.2.2" +description = "A (partial) reimplementation of pywin32 using ctypes/cffi" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pywin32-ctypes-0.2.2.tar.gz", hash = "sha256:3426e063bdd5fd4df74a14fa3cf80a0b42845a87e1d1e81f6549f9daec593a60"}, + {file = "pywin32_ctypes-0.2.2-py3-none-any.whl", hash = "sha256:bf490a1a709baf35d688fe0ecf980ed4de11d2b3e37b51e5442587a75d9957e7"}, +] + [[package]] name = "pyyaml" version = "6.0.1" description = "YAML parser and emitter for Python" +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2199,6 +2381,7 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -2206,8 +2389,16 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -2224,6 +2415,7 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -2231,6 +2423,7 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, @@ -2240,6 +2433,7 @@ files = [ name = "regex" version = "2024.5.15" description = "Alternative regular expression module, to replace re." +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2328,6 +2522,7 @@ files = [ name = "requests" version = "2.28.1" description = "Python HTTP for Humans." +category = "main" optional = false python-versions = ">=3.7, <4" files = [ @@ -2349,6 +2544,7 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "requests-toolbelt" version = "1.0.0" description = "A utility belt for advanced users of python-requests" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2363,6 +2559,7 @@ requests = ">=2.0.1,<3.0.0" name = "rlp" version = "3.0.0" description = "A package for Recursive Length Prefix encoding and decoding" +category = "main" optional = false python-versions = "*" files = [ @@ -2384,6 +2581,7 @@ test = ["hypothesis (==5.19.0)", "pytest (>=6.2.5,<7)", "tox (>=2.9.1,<3)"] name = "semver" version = "2.13.0" description = "Python helper for Semantic Versioning (http://semver.org/)" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2391,10 +2589,27 @@ files = [ {file = "semver-2.13.0.tar.gz", hash = "sha256:fa0fe2722ee1c3f57eac478820c3a5ae2f624af8264cbdf9000c980ff7f75e3f"}, ] +[[package]] +name = "setuptools" +version = "70.0.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "setuptools-70.0.0-py3-none-any.whl", hash = "sha256:54faa7f2e8d2d11bcd2c07bed282eef1046b5c080d1c32add737d7b5817b1ad4"}, + {file = "setuptools-70.0.0.tar.gz", hash = "sha256:f211a66637b8fa059bb28183da127d4e86396c991a942b028c6650d4319c3fd0"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] + [[package]] name = "six" version = "1.16.0" description = "Python 2 and 3 compatibility utilities" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -2406,6 +2621,7 @@ files = [ name = "sniffio" version = "1.3.1" description = "Sniff out which async library your code is running under" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2417,6 +2633,7 @@ files = [ name = "starlette" version = "0.36.3" description = "The little ASGI library that shines." +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2435,6 +2652,7 @@ full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.7 name = "texttable" version = "1.6.7" description = "module to create simple ASCII tables" +category = "main" optional = false python-versions = "*" files = [ @@ -2446,6 +2664,7 @@ files = [ name = "tomli" version = "2.0.1" description = "A lil' TOML parser" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2457,6 +2676,7 @@ files = [ name = "toolz" version = "0.12.1" description = "List processing tools and functional utilities" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2468,6 +2688,7 @@ files = [ name = "typing-extensions" version = "4.12.1" description = "Backported and Experimental Type Hints for Python 3.8+" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2479,6 +2700,7 @@ files = [ name = "urllib3" version = "1.26.18" description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ @@ -2495,6 +2717,7 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] name = "uvicorn" version = "0.27.0" description = "The lightning-fast ASGI server." +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2514,6 +2737,7 @@ standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", name = "valory-docker-compose" version = "1.29.3" description = "Multi-container orchestration for Docker" +category = "main" optional = false python-versions = ">=3.4" files = [ @@ -2542,6 +2766,7 @@ tests = ["ddt (>=1.2.2,<2)", "pytest (<6)"] name = "varint" version = "1.0.2" description = "Simple python varint implementation" +category = "main" optional = false python-versions = "*" files = [ @@ -2552,6 +2777,7 @@ files = [ name = "watchdog" version = "4.0.1" description = "Filesystem events monitoring" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2596,6 +2822,7 @@ watchmedo = ["PyYAML (>=3.10)"] name = "web3" version = "6.1.0" description = "web3.py" +category = "main" optional = false python-versions = ">=3.7.2" files = [ @@ -2629,6 +2856,7 @@ tester = ["eth-tester[py-evm] (==v0.8.0-b.3)", "py-geth (>=3.11.0)"] name = "websocket-client" version = "0.59.0" description = "WebSocket client for Python with low level API options" +category = "main" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2643,6 +2871,7 @@ six = "*" name = "websockets" version = "12.0" description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2724,6 +2953,7 @@ files = [ name = "werkzeug" version = "2.0.3" description = "The comprehensive WSGI web application library." +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2738,6 +2968,7 @@ watchdog = ["watchdog"] name = "yarl" version = "1.9.4" description = "Yet another URL library" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2841,6 +3072,7 @@ multidict = ">=4.0" name = "zipp" version = "3.19.2" description = "Backport of pathlib-compatible object wrapper for zip files" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2854,5 +3086,5 @@ test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", [metadata] lock-version = "2.0" -python-versions = "<4.0,>=3.8" -content-hash = "5fa061baee21213f2d471e79e7c00fd6f4bca217f7d53bd74c29e0637d447bd3" +python-versions = "<3.13,>=3.8" +content-hash = "94db3cf2e0549ba7881ab1b6837d9b42dc74d6301043972cf935472149354fdc" diff --git a/pyproject.toml b/pyproject.toml index bfc56416a..4d5a85c5a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,7 +18,7 @@ include = [ operate = "operate.cli:main" [tool.poetry.dependencies] -python = "<4.0,>=3.8" +python = "<3.13,>=3.8" open-autonomy = "==0.14.11.post1" open-aea-ledger-ethereum = "==1.51.0" open-aea-cli-ipfs = "==1.51.0" @@ -44,6 +44,7 @@ starlette = "==0.36.3" uvicorn = "==0.27.0" web3 = "==6.1.0" psutil = "^5.9.8" +pyinstaller = "^6.8.0" [build-system] requires = ["poetry-core"] diff --git a/tendermint.spec b/tendermint.spec new file mode 100644 index 000000000..5d0c2477d --- /dev/null +++ b/tendermint.spec @@ -0,0 +1,44 @@ +# -*- mode: python ; coding: utf-8 -*- + + +a = Analysis( + ['operate/services/utils/tendermint.py'], + pathex=[], + binaries=[], + datas=[], + hiddenimports=[], + hookspath=[], + hooksconfig={}, + runtime_hooks=[], + excludes=[], + noarchive=False, + optimize=0, +) +pyz = PYZ(a.pure) + +exe = EXE( + pyz, + a.scripts, + [], + exclude_binaries=True, + name='tendermint', + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=True, + console=True, + disable_windowed_traceback=False, + argv_emulation=False, + target_arch=None, + codesign_identity=None, + entitlements_file=None, +) +coll = COLLECT( + exe, + a.binaries, + a.datas, + strip=False, + upx=True, + upx_exclude=[], + name='tendermint', +) From 55ac463e5269130566f98d787c7c2570f7f373dc Mon Sep 17 00:00:00 2001 From: Ardian Date: Fri, 14 Jun 2024 17:04:40 +0200 Subject: [PATCH 03/29] chore: operate path --- electron/install.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/electron/install.js b/electron/install.js index 41a102faa..19feaa51a 100644 --- a/electron/install.js +++ b/electron/install.js @@ -23,7 +23,7 @@ const TempDir = `${OperateDirectory}/temp`; const VersionFile = `${OperateDirectory}/version.txt`; const LogFile = `${OperateDirectory}/logs.txt`; const OperateInstallationLog = `${os.homedir()}/operate.log`; -const OperateCmd = `${os.homedir()}/dist/${os.platform()}/pearl/pearl`; +const OperateCmd = `${os.homedir()}/dist/pearl/pearl`; const Env = { ...process.env, PATH: `${process.env.PATH}:/opt/homebrew/bin:/usr/local/bin`, From e01ce95e56dd9fe8e6e8f6e94c58db4b480d489a Mon Sep 17 00:00:00 2001 From: Ardian Date: Fri, 14 Jun 2024 17:36:46 +0200 Subject: [PATCH 04/29] fix: cwd --- electron/install.js | 2 +- electron/main.js | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/electron/install.js b/electron/install.js index 19feaa51a..5c86c0a8a 100644 --- a/electron/install.js +++ b/electron/install.js @@ -23,7 +23,7 @@ const TempDir = `${OperateDirectory}/temp`; const VersionFile = `${OperateDirectory}/version.txt`; const LogFile = `${OperateDirectory}/logs.txt`; const OperateInstallationLog = `${os.homedir()}/operate.log`; -const OperateCmd = `${os.homedir()}/dist/pearl/pearl`; +const OperateCmd = `${process.cwd()}/dist/pearl/pearl`; const Env = { ...process.env, PATH: `${process.env.PATH}:/opt/homebrew/bin:/usr/local/bin`, diff --git a/electron/main.js b/electron/main.js index ab1b8abcc..c13be4104 100644 --- a/electron/main.js +++ b/electron/main.js @@ -330,9 +330,7 @@ async function launchDaemon() { async function launchDaemonDev() { const check = new Promise(function (resolve, _reject) { - operateDaemon = spawn('poetry', [ - 'run', - 'operate', + operateDaemon = spawn(OperateCmd, [ 'daemon', `--port=${appConfig.ports.dev.operate}`, '--home=.operate', From 2f7b37266035a14062111be45daf63a29da7a5db Mon Sep 17 00:00:00 2001 From: Ardian Date: Mon, 17 Jun 2024 22:47:17 +0200 Subject: [PATCH 05/29] feat: single binary --- electron/install.js | 2 +- operate/services/service.py | 6 +++--- tendermint.spec | 14 ++++---------- 3 files changed, 8 insertions(+), 14 deletions(-) diff --git a/electron/install.js b/electron/install.js index e1953a19f..2306808f1 100644 --- a/electron/install.js +++ b/electron/install.js @@ -23,7 +23,7 @@ const TempDir = `${OperateDirectory}/temp`; const VersionFile = `${OperateDirectory}/version.txt`; const LogFile = `${OperateDirectory}/logs.txt`; const OperateInstallationLog = `${os.homedir()}/operate.log`; -const OperateCmd = `${process.cwd()}/dist/pearl/pearl`; +const OperateCmd = `${process.cwd()}/dist/pearl`; const Env = { ...process.env, PATH: `${process.env.PATH}:/opt/homebrew/bin:/usr/local/bin`, diff --git a/operate/services/service.py b/operate/services/service.py index 023e08cc6..e9cefdca6 100644 --- a/operate/services/service.py +++ b/operate/services/service.py @@ -385,7 +385,7 @@ def _setup_agent(working_dir: Path) -> None: encoding="utf-8", ) - abin = os.getcwd() + '/dist/aea_bin/aea_bin' + abin = 'aea_bin' # Fetch agent _run_cmd( args=[ @@ -430,7 +430,7 @@ def _setup_agent(working_dir: Path) -> None: def _start_agent(working_dir: Path) -> None: """Start agent process.""" env = json.loads((working_dir / "agent.json").read_text(encoding="utf-8")) - aea_bin = os.getcwd() + '/dist/aea_bin/aea_bin' + aea_bin = 'aea_bin' process = subprocess.Popen( # pylint: disable=consider-using-with # nosec args=[aea_bin, "run"], cwd=working_dir / "agent", @@ -450,7 +450,7 @@ def _start_agent(working_dir: Path) -> None: def _start_tendermint(working_dir: Path) -> None: """Start tendermint process.""" env = json.loads((working_dir / "tendermint.json").read_text(encoding="utf-8")) - tendermint_com = os.getcwd() + "/dist/tendermint/tendermint" + tendermint_com = "tendermint" process = subprocess.Popen( # pylint: disable=consider-using-with # nosec args=[tendermint_com], cwd=working_dir, diff --git a/tendermint.spec b/tendermint.spec index 5d0c2477d..ee8b870ed 100644 --- a/tendermint.spec +++ b/tendermint.spec @@ -19,13 +19,16 @@ pyz = PYZ(a.pure) exe = EXE( pyz, a.scripts, + a.binaries, + a.datas, [], - exclude_binaries=True, name='tendermint', debug=False, bootloader_ignore_signals=False, strip=False, upx=True, + upx_exclude=[], + runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, @@ -33,12 +36,3 @@ exe = EXE( codesign_identity=None, entitlements_file=None, ) -coll = COLLECT( - exe, - a.binaries, - a.datas, - strip=False, - upx=True, - upx_exclude=[], - name='tendermint', -) From 39be1ad202772976d55b9afbc3d31472f2167347 Mon Sep 17 00:00:00 2001 From: Ardian Date: Mon, 17 Jun 2024 23:04:59 +0200 Subject: [PATCH 06/29] feat: use dist binary --- .gitignore | 3 ++- electron/install.js | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 90213905e..1a841eec3 100644 --- a/.gitignore +++ b/.gitignore @@ -42,4 +42,5 @@ cache leak_report *.dist -*.build \ No newline at end of file +*.build +/electron/bins/ diff --git a/electron/install.js b/electron/install.js index 2306808f1..dcbe49a81 100644 --- a/electron/install.js +++ b/electron/install.js @@ -23,7 +23,7 @@ const TempDir = `${OperateDirectory}/temp`; const VersionFile = `${OperateDirectory}/version.txt`; const LogFile = `${OperateDirectory}/logs.txt`; const OperateInstallationLog = `${os.homedir()}/operate.log`; -const OperateCmd = `${process.cwd()}/dist/pearl`; +const OperateCmd = `${__dirname}/bins/pearl`; const Env = { ...process.env, PATH: `${process.env.PATH}:/opt/homebrew/bin:/usr/local/bin`, From 48dfbb49e7e7fdcb13e5cb650484f4fbaed938a7 Mon Sep 17 00:00:00 2001 From: Ardian Date: Tue, 18 Jun 2024 10:59:49 +0200 Subject: [PATCH 07/29] temp: add binary --- operate/services/service.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/operate/services/service.py b/operate/services/service.py index e9cefdca6..f96e3f3cf 100644 --- a/operate/services/service.py +++ b/operate/services/service.py @@ -25,6 +25,7 @@ import shutil import signal import subprocess # nosec +import sys import time import typing as t from copy import copy, deepcopy @@ -385,7 +386,7 @@ def _setup_agent(working_dir: Path) -> None: encoding="utf-8", ) - abin = 'aea_bin' + abin = str(Path(sys._MEIPASS) / 'aea_bin') # Fetch agent _run_cmd( args=[ @@ -430,7 +431,7 @@ def _setup_agent(working_dir: Path) -> None: def _start_agent(working_dir: Path) -> None: """Start agent process.""" env = json.loads((working_dir / "agent.json").read_text(encoding="utf-8")) - aea_bin = 'aea_bin' + aea_bin = str(Path(sys._MEIPASS) / 'aea_bin') process = subprocess.Popen( # pylint: disable=consider-using-with # nosec args=[aea_bin, "run"], cwd=working_dir / "agent", @@ -450,7 +451,7 @@ def _start_agent(working_dir: Path) -> None: def _start_tendermint(working_dir: Path) -> None: """Start tendermint process.""" env = json.loads((working_dir / "tendermint.json").read_text(encoding="utf-8")) - tendermint_com = "tendermint" + tendermint_com = str(Path(sys._MEIPASS) / "tendermint") process = subprocess.Popen( # pylint: disable=consider-using-with # nosec args=[tendermint_com], cwd=working_dir, From da18e0c9b9fa8ce5f8acfec76af67a0641079567 Mon Sep 17 00:00:00 2001 From: Ardian Date: Tue, 18 Jun 2024 13:04:28 +0200 Subject: [PATCH 08/29] feat: download pearl on the fly --- .github/workflows/release.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 71bf0b5f1..323123f80 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -50,6 +50,8 @@ jobs: - uses: actions/setup-node@v1 with: node-version: "20.11" + - name: Download binary + run: curl -L -o electron/bins/pearl https://tempfileserver.staging.autonolas.tech/pearl && chmod +x electron/bins/pearl - uses: snok/install-poetry@v1 with: version: "1.7.1" From 52b35485c0f994673e66d55410c6b0f8e8808795 Mon Sep 17 00:00:00 2001 From: Ardian Date: Tue, 18 Jun 2024 13:09:01 +0200 Subject: [PATCH 09/29] release: rc48 --- electron/install.js | 2 +- package.json | 2 +- pyproject.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/electron/install.js b/electron/install.js index dcbe49a81..d0587c09b 100644 --- a/electron/install.js +++ b/electron/install.js @@ -16,7 +16,7 @@ const { BrewScript } = require('./scripts'); * - use "" (nothing as a suffix) for latest release candidate, for example "0.1.0rc26" * - use "alpha" for alpha release, for example "0.1.0rc26-alpha" */ -const OlasMiddlewareVersion = '0.1.0rc47'; +const OlasMiddlewareVersion = '0.1.0rc48'; const OperateDirectory = `${os.homedir()}/.operate`; const VenvDir = `${OperateDirectory}/venv`; const TempDir = `${OperateDirectory}/temp`; diff --git a/package.json b/package.json index 3cb35748b..7ab96fe70 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "main": "electron/main.js", "name": "olas-operate-app", "productName": "Pearl", - "version": "0.1.0-rc47", + "version": "0.1.0-rc48", "dependencies": { "@ant-design/cssinjs": "^1.18.4", "@ant-design/icons": "^5.3.0", diff --git a/pyproject.toml b/pyproject.toml index d4e919a35..a26fe9091 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "olas-operate-middleware" -version = "0.1.0-rc47" +version = "0.1.0-rc48" description = "" authors = ["David Vilela ", "Viraj Patel "] readme = "README.md" From 2334b9bd4ed7cd109c2c344f0591cda760e63cd0 Mon Sep 17 00:00:00 2001 From: Ardian Date: Tue, 18 Jun 2024 13:17:47 +0200 Subject: [PATCH 10/29] fix: add mkdir --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 323123f80..8af867b58 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -51,7 +51,7 @@ jobs: with: node-version: "20.11" - name: Download binary - run: curl -L -o electron/bins/pearl https://tempfileserver.staging.autonolas.tech/pearl && chmod +x electron/bins/pearl + run: mkdir electron/bins && curl -L -o electron/bins/pearl https://tempfileserver.staging.autonolas.tech/pearl && chmod +x electron/bins/pearl - uses: snok/install-poetry@v1 with: version: "1.7.1" From f31885534fe61c041657bd105a1b79800bd0aef9 Mon Sep 17 00:00:00 2001 From: Ardian Date: Tue, 18 Jun 2024 13:19:45 +0200 Subject: [PATCH 11/29] release: rc49 --- electron/install.js | 2 +- package.json | 2 +- pyproject.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/electron/install.js b/electron/install.js index d0587c09b..7bdff34a0 100644 --- a/electron/install.js +++ b/electron/install.js @@ -16,7 +16,7 @@ const { BrewScript } = require('./scripts'); * - use "" (nothing as a suffix) for latest release candidate, for example "0.1.0rc26" * - use "alpha" for alpha release, for example "0.1.0rc26-alpha" */ -const OlasMiddlewareVersion = '0.1.0rc48'; +const OlasMiddlewareVersion = '0.1.0rc49'; const OperateDirectory = `${os.homedir()}/.operate`; const VenvDir = `${OperateDirectory}/venv`; const TempDir = `${OperateDirectory}/temp`; diff --git a/package.json b/package.json index 7ab96fe70..90d666913 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "main": "electron/main.js", "name": "olas-operate-app", "productName": "Pearl", - "version": "0.1.0-rc48", + "version": "0.1.0-rc49", "dependencies": { "@ant-design/cssinjs": "^1.18.4", "@ant-design/icons": "^5.3.0", diff --git a/pyproject.toml b/pyproject.toml index a26fe9091..d4a43b32b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "olas-operate-middleware" -version = "0.1.0-rc48" +version = "0.1.0-rc49" description = "" authors = ["David Vilela ", "Viraj Patel "] readme = "README.md" From a7789af9c03722451959741bf47f137af58571df Mon Sep 17 00:00:00 2001 From: Ardian Date: Tue, 18 Jun 2024 18:25:40 +0200 Subject: [PATCH 12/29] release: rc51 --- .github/workflows/release.yml | 2 +- electron/install.js | 106 +++++++++++++++++----------------- package.json | 2 +- pyproject.toml | 2 +- 4 files changed, 56 insertions(+), 56 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8af867b58..a0671a2a8 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -51,7 +51,7 @@ jobs: with: node-version: "20.11" - name: Download binary - run: mkdir electron/bins && curl -L -o electron/bins/pearl https://tempfileserver.staging.autonolas.tech/pearl && chmod +x electron/bins/pearl + run: mkdir electron/bins && curl -L -o electron/bins/pearl_arm64 https://tempfileserver.staging.autonolas.tech/pearl_arm64 && chmod +x electron/bins/pearl_arm64 - uses: snok/install-poetry@v1 with: version: "1.7.1" diff --git a/electron/install.js b/electron/install.js index 5d216df1a..5cff51cc7 100644 --- a/electron/install.js +++ b/electron/install.js @@ -16,14 +16,14 @@ const { BrewScript } = require('./scripts'); * - use "" (nothing as a suffix) for latest release candidate, for example "0.1.0rc26" * - use "alpha" for alpha release, for example "0.1.0rc26-alpha" */ -const OlasMiddlewareVersion = '0.1.0rc50'; +const OlasMiddlewareVersion = '0.1.0rc51'; const OperateDirectory = `${os.homedir()}/.operate`; const VenvDir = `${OperateDirectory}/venv`; const TempDir = `${OperateDirectory}/temp`; const VersionFile = `${OperateDirectory}/version.txt`; const LogFile = `${OperateDirectory}/logs.txt`; const OperateInstallationLog = `${os.homedir()}/operate.log`; -const OperateCmd = `${__dirname}/bins/pearl`; +const OperateCmd = `${__dirname}/bins/pearl_${process.arch}`; const Env = { ...process.env, PATH: `${process.env.PATH}:/opt/homebrew/bin:/usr/local/bin`, @@ -336,57 +336,57 @@ function removeInstallationLogFile() { /*******************************/ async function setupDarwin(ipcChannel) { - removeInstallationLogFile(); - console.log(appendLog('Checking brew installation')); - if (!isBrewInstalled()) { - ipcChannel.send('response', 'Installing Pearl Daemon'); - console.log(appendLog('Installing brew')); - await installBrew(); - } - - console.log(appendLog('Checking python installation')); - if (!isPythonInstalledDarwin()) { - ipcChannel.send('response', 'Installing Pearl Daemon'); - console.log(appendLog('Installing python')); - installPythonDarwin(); - } - - console.log(appendLog('Creating required directories')); - await createDirectory(`${OperateDirectory}`); - await createDirectory(`${OperateDirectory}/temp`); - - console.log(appendLog('Checking tendermint installation')); - if (!isTendermintInstalledUnix()) { - ipcChannel.send('response', 'Installing Pearl Daemon'); - console.log(appendLog('Installing tendermint')); - await installTendermintUnix(); - } - - if (!fs.existsSync(VenvDir)) { - ipcChannel.send('response', 'Installing Pearl Daemon'); - console.log(appendLog('Creating virtual environment')); - createVirtualEnvUnix(VenvDir); - - console.log(appendLog('Installing pearl backend')); - installOperatePackageUnix(OperateDirectory); - } - - console.log(appendLog('Checking if upgrade is required')); - if (versionBumpRequired()) { - console.log( - appendLog(`Upgrading pearl daemon to ${OlasMiddlewareVersion}`), - ); - reInstallOperatePackageUnix(OperateDirectory); - writeVersion(); - removeLogFile(); - } - - if (!fs.existsSync(`${OperateDirectory}/venv/bin/operate`)) { - reInstallOperatePackageUnix(OperateDirectory); - } - - console.log(appendLog('Installing pearl CLI')); - await installOperateCli('/opt/homebrew/bin/operate'); + // removeInstallationLogFile(); + // console.log(appendLog('Checking brew installation')); + // if (!isBrewInstalled()) { + // ipcChannel.send('response', 'Installing Pearl Daemon'); + // console.log(appendLog('Installing brew')); + // await installBrew(); + // } + // + // console.log(appendLog('Checking python installation')); + // if (!isPythonInstalledDarwin()) { + // ipcChannel.send('response', 'Installing Pearl Daemon'); + // console.log(appendLog('Installing python')); + // installPythonDarwin(); + // } + // + // console.log(appendLog('Creating required directories')); + // await createDirectory(`${OperateDirectory}`); + // await createDirectory(`${OperateDirectory}/temp`); + // + // console.log(appendLog('Checking tendermint installation')); + // if (!isTendermintInstalledUnix()) { + // ipcChannel.send('response', 'Installing Pearl Daemon'); + // console.log(appendLog('Installing tendermint')); + // await installTendermintUnix(); + // } + // + // if (!fs.existsSync(VenvDir)) { + // ipcChannel.send('response', 'Installing Pearl Daemon'); + // console.log(appendLog('Creating virtual environment')); + // createVirtualEnvUnix(VenvDir); + // + // console.log(appendLog('Installing pearl backend')); + // installOperatePackageUnix(OperateDirectory); + // } + // + // console.log(appendLog('Checking if upgrade is required')); + // if (versionBumpRequired()) { + // console.log( + // appendLog(`Upgrading pearl daemon to ${OlasMiddlewareVersion}`), + // ); + // reInstallOperatePackageUnix(OperateDirectory); + // writeVersion(); + // removeLogFile(); + // } + // + // if (!fs.existsSync(`${OperateDirectory}/venv/bin/operate`)) { + // reInstallOperatePackageUnix(OperateDirectory); + // } + // + // console.log(appendLog('Installing pearl CLI')); + // await installOperateCli('/opt/homebrew/bin/operate'); } // TODO: Add Tendermint installation diff --git a/package.json b/package.json index 7a22390d0..a05c2fb55 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "main": "electron/main.js", "name": "olas-operate-app", "productName": "Pearl", - "version": "0.1.0-rc50", + "version": "0.1.0-rc51", "dependencies": { "@ant-design/cssinjs": "^1.18.4", "@ant-design/icons": "^5.3.0", diff --git a/pyproject.toml b/pyproject.toml index d4a43b32b..68aab958c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "olas-operate-middleware" -version = "0.1.0-rc49" +version = "0.1.0-rc51" description = "" authors = ["David Vilela ", "Viraj Patel "] readme = "README.md" From 17fce783b3ec5dbd52a3f0daa02709529c9adb01 Mon Sep 17 00:00:00 2001 From: Ardian Date: Tue, 18 Jun 2024 19:38:41 +0200 Subject: [PATCH 13/29] fix: add setup --- electron/install.js | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/electron/install.js b/electron/install.js index 5cff51cc7..b24444097 100644 --- a/electron/install.js +++ b/electron/install.js @@ -336,7 +336,7 @@ function removeInstallationLogFile() { /*******************************/ async function setupDarwin(ipcChannel) { - // removeInstallationLogFile(); + removeInstallationLogFile(); // console.log(appendLog('Checking brew installation')); // if (!isBrewInstalled()) { // ipcChannel.send('response', 'Installing Pearl Daemon'); @@ -351,16 +351,16 @@ async function setupDarwin(ipcChannel) { // installPythonDarwin(); // } // - // console.log(appendLog('Creating required directories')); - // await createDirectory(`${OperateDirectory}`); - // await createDirectory(`${OperateDirectory}/temp`); - // - // console.log(appendLog('Checking tendermint installation')); - // if (!isTendermintInstalledUnix()) { - // ipcChannel.send('response', 'Installing Pearl Daemon'); - // console.log(appendLog('Installing tendermint')); - // await installTendermintUnix(); - // } + console.log(appendLog('Creating required directories')); + await createDirectory(`${OperateDirectory}`); + await createDirectory(`${OperateDirectory}/temp`); + + console.log(appendLog('Checking tendermint installation')); + if (!isTendermintInstalledUnix()) { + ipcChannel.send('response', 'Installing Pearl Daemon'); + console.log(appendLog('Installing tendermint')); + await installTendermintUnix(); + } // // if (!fs.existsSync(VenvDir)) { // ipcChannel.send('response', 'Installing Pearl Daemon'); @@ -371,15 +371,15 @@ async function setupDarwin(ipcChannel) { // installOperatePackageUnix(OperateDirectory); // } // - // console.log(appendLog('Checking if upgrade is required')); - // if (versionBumpRequired()) { - // console.log( - // appendLog(`Upgrading pearl daemon to ${OlasMiddlewareVersion}`), - // ); - // reInstallOperatePackageUnix(OperateDirectory); - // writeVersion(); - // removeLogFile(); - // } + console.log(appendLog('Checking if upgrade is required')); + if (versionBumpRequired()) { + console.log( + appendLog(`Upgrading pearl daemon to ${OlasMiddlewareVersion}`), + ); + reInstallOperatePackageUnix(OperateDirectory); + writeVersion(); + removeLogFile(); + } // // if (!fs.existsSync(`${OperateDirectory}/venv/bin/operate`)) { // reInstallOperatePackageUnix(OperateDirectory); From 971797eb09d14e8c4d30a36f2df3b858494b7c5e Mon Sep 17 00:00:00 2001 From: Ardian Date: Tue, 18 Jun 2024 19:39:37 +0200 Subject: [PATCH 14/29] fix: skip bumping --- electron/install.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/electron/install.js b/electron/install.js index b24444097..92265ff5a 100644 --- a/electron/install.js +++ b/electron/install.js @@ -371,15 +371,15 @@ async function setupDarwin(ipcChannel) { // installOperatePackageUnix(OperateDirectory); // } // - console.log(appendLog('Checking if upgrade is required')); - if (versionBumpRequired()) { - console.log( - appendLog(`Upgrading pearl daemon to ${OlasMiddlewareVersion}`), - ); - reInstallOperatePackageUnix(OperateDirectory); - writeVersion(); - removeLogFile(); - } + // console.log(appendLog('Checking if upgrade is required')); + // if (versionBumpRequired()) { + // console.log( + // appendLog(`Upgrading pearl daemon to ${OlasMiddlewareVersion}`), + // ); + // // reInstallOperatePackageUnix(OperateDirectory); + // writeVersion(); + // removeLogFile(); + // } // // if (!fs.existsSync(`${OperateDirectory}/venv/bin/operate`)) { // reInstallOperatePackageUnix(OperateDirectory); From 82a16d607d8de3d27167d0f55691b13c70a3ac68 Mon Sep 17 00:00:00 2001 From: Ardian Date: Tue, 18 Jun 2024 19:48:08 +0200 Subject: [PATCH 15/29] release: rc52 --- electron/install.js | 2 +- package.json | 2 +- pyproject.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/electron/install.js b/electron/install.js index 92265ff5a..9a012e9cd 100644 --- a/electron/install.js +++ b/electron/install.js @@ -16,7 +16,7 @@ const { BrewScript } = require('./scripts'); * - use "" (nothing as a suffix) for latest release candidate, for example "0.1.0rc26" * - use "alpha" for alpha release, for example "0.1.0rc26-alpha" */ -const OlasMiddlewareVersion = '0.1.0rc51'; +const OlasMiddlewareVersion = '0.1.0rc52'; const OperateDirectory = `${os.homedir()}/.operate`; const VenvDir = `${OperateDirectory}/venv`; const TempDir = `${OperateDirectory}/temp`; diff --git a/package.json b/package.json index a05c2fb55..09095d416 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "main": "electron/main.js", "name": "olas-operate-app", "productName": "Pearl", - "version": "0.1.0-rc51", + "version": "0.1.0-rc52", "dependencies": { "@ant-design/cssinjs": "^1.18.4", "@ant-design/icons": "^5.3.0", diff --git a/pyproject.toml b/pyproject.toml index 68aab958c..c36f9926c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "olas-operate-middleware" -version = "0.1.0-rc51" +version = "0.1.0-rc52" description = "" authors = ["David Vilela ", "Viraj Patel "] readme = "README.md" From f2c8f465810143738a8123688df1e1db39eb31b7 Mon Sep 17 00:00:00 2001 From: Ardian Date: Wed, 19 Jun 2024 11:10:59 +0200 Subject: [PATCH 16/29] fix: version bump --- electron/install.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/electron/install.js b/electron/install.js index 9a012e9cd..a0bac5277 100644 --- a/electron/install.js +++ b/electron/install.js @@ -371,15 +371,15 @@ async function setupDarwin(ipcChannel) { // installOperatePackageUnix(OperateDirectory); // } // - // console.log(appendLog('Checking if upgrade is required')); - // if (versionBumpRequired()) { - // console.log( - // appendLog(`Upgrading pearl daemon to ${OlasMiddlewareVersion}`), - // ); - // // reInstallOperatePackageUnix(OperateDirectory); - // writeVersion(); - // removeLogFile(); - // } + console.log(appendLog('Checking if upgrade is required')); + if (versionBumpRequired()) { + console.log( + appendLog(`Upgrading pearl daemon to ${OlasMiddlewareVersion}`), + ); + // reInstallOperatePackageUnix(OperateDirectory); + writeVersion(); + removeLogFile(); + } // // if (!fs.existsSync(`${OperateDirectory}/venv/bin/operate`)) { // reInstallOperatePackageUnix(OperateDirectory); From a98f657c04be6df37ccb50ebfd6171b757ba0bc6 Mon Sep 17 00:00:00 2001 From: Ardian Date: Wed, 19 Jun 2024 11:58:57 +0200 Subject: [PATCH 17/29] release: rc53 --- electron/install.js | 2 +- package.json | 2 +- pyproject.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/electron/install.js b/electron/install.js index a0bac5277..dbd61b81a 100644 --- a/electron/install.js +++ b/electron/install.js @@ -16,7 +16,7 @@ const { BrewScript } = require('./scripts'); * - use "" (nothing as a suffix) for latest release candidate, for example "0.1.0rc26" * - use "alpha" for alpha release, for example "0.1.0rc26-alpha" */ -const OlasMiddlewareVersion = '0.1.0rc52'; +const OlasMiddlewareVersion = '0.1.0rc53'; const OperateDirectory = `${os.homedir()}/.operate`; const VenvDir = `${OperateDirectory}/venv`; const TempDir = `${OperateDirectory}/temp`; diff --git a/package.json b/package.json index 09095d416..1f19df4ec 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "main": "electron/main.js", "name": "olas-operate-app", "productName": "Pearl", - "version": "0.1.0-rc52", + "version": "0.1.0-rc53", "dependencies": { "@ant-design/cssinjs": "^1.18.4", "@ant-design/icons": "^5.3.0", diff --git a/pyproject.toml b/pyproject.toml index c36f9926c..05f924bad 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "olas-operate-middleware" -version = "0.1.0-rc52" +version = "0.1.0-rc53" description = "" authors = ["David Vilela ", "Viraj Patel "] readme = "README.md" From 62132d8bed67c88a4c9ae74935ccadf49a9871c0 Mon Sep 17 00:00:00 2001 From: Ardian Date: Wed, 19 Jun 2024 15:59:40 +0200 Subject: [PATCH 18/29] chore: more logs --- build.js | 8 ++++---- electron/main.js | 5 +++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/build.js b/build.js index a5059c953..9b07feefc 100644 --- a/build.js +++ b/build.js @@ -24,7 +24,7 @@ const main = async () => { target: [ { target: 'default', - arch: ['x64', 'arm64'], + arch: ['arm64'], }, ], publish: publishOptions, @@ -34,9 +34,9 @@ const main = async () => { gatekeeperAssess: false, entitlements: 'electron/entitlements.mac.plist', entitlementsInherit: 'electron/entitlements.mac.plist', - notarize: { - teamId: process.env.APPLETEAMID, - }, + // notarize: { + // teamId: process.env.APPLETEAMID, + // }, }, }, }); diff --git a/electron/main.js b/electron/main.js index c13be4104..4902e737e 100644 --- a/electron/main.js +++ b/electron/main.js @@ -280,7 +280,7 @@ async function launchDaemon() { // Free up backend port if already occupied try { await fetch(`http://localhost:${appConfig.ports.prod.operate}/api`); - console.log('Killing backend server!'); + appendLog('Killing backend server!'); let endpoint = fs .readFileSync(`${OperateDirectory}/operate.kill`) .toString() @@ -288,8 +288,9 @@ async function launchDaemon() { .trimRight(); await fetch(`http://localhost:${appConfig.ports.prod.operate}/${endpoint}`); } catch (err) { - console.log('Backend not running!'); + appendLog('Backend not running!'); } + appendLog(`Starting backend server! Opeate cmd: ${OperateCmd}`); const check = new Promise(function (resolve, _reject) { operateDaemon = spawn( From 1d8ab2330696a50c3282e7104a13c94c930433be Mon Sep 17 00:00:00 2001 From: Ardian Date: Wed, 19 Jun 2024 16:46:41 +0200 Subject: [PATCH 19/29] chore: more logs --- electron/install.js | 1 + electron/main.js | 40 +++++++++++++++++++++------------------- 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/electron/install.js b/electron/install.js index dbd61b81a..22dafcbd6 100644 --- a/electron/install.js +++ b/electron/install.js @@ -479,6 +479,7 @@ module.exports = { OperateDirectory, OperateCmd, Env, + appendLog, dirs: { VersionFile, LogFile, diff --git a/electron/main.js b/electron/main.js index 4902e737e..03edaead0 100644 --- a/electron/main.js +++ b/electron/main.js @@ -25,7 +25,7 @@ const { OperateCmd, OperateDirectory, Env, - dirs, + dirs, appendLog, } = require('./install'); const { killProcesses } = require('./processes'); const { isPortAvailable, findAvailablePort } = require('./ports'); @@ -409,23 +409,23 @@ async function launchNextAppDev() { ipcMain.on('check', async function (event, _argument) { // Update try { - macUpdater.checkForUpdates().then((res) => { - if (!res) return; - if (!res.downloadPromise) return; - - new Notification({ - title: 'Update Available', - body: 'Downloading update...', - }).show(); - - res.downloadPromise.then(() => { - new Notification({ - title: 'Update Downloaded', - body: 'Restarting application...', - }).show(); - macUpdater.quitAndInstall(); - }); - }); + // macUpdater.checkForUpdates().then((res) => { + // if (!res) return; + // if (!res.downloadPromise) return; + // + // new Notification({ + // title: 'Update Available', + // body: 'Downloading update...', + // }).show(); + // + // res.downloadPromise.then(() => { + // new Notification({ + // title: 'Update Downloaded', + // body: 'Restarting application...', + // }).show(); + // macUpdater.quitAndInstall(); + // }); + // }); } catch (e) { console.error(e); } @@ -436,6 +436,7 @@ ipcMain.on('check', async function (event, _argument) { if (!isDev) { if (platform === 'darwin') { await setupDarwin(event.sender); + appendLog('Darwin setup complete') } else if (platform === 'win32') { // TODO } else { @@ -477,8 +478,9 @@ ipcMain.on('check', async function (event, _argument) { await launchNextAppDev(); } else { event.sender.send('response', 'Starting Pearl Daemon'); + appendLog('Launching daemon') await launchDaemon(); - + appendLog('Launched daemon') event.sender.send('response', 'Starting Frontend Server'); const frontendPortAvailable = await isPortAvailable( appConfig.ports.prod.next, From bb03cf9783df6e66723c8250b529f48c3a6f30ce Mon Sep 17 00:00:00 2001 From: Ardian Date: Wed, 19 Jun 2024 17:00:36 +0200 Subject: [PATCH 20/29] chore: add extra files --- build.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/build.js b/build.js index 9b07feefc..1d57b44b8 100644 --- a/build.js +++ b/build.js @@ -18,6 +18,9 @@ const main = async () => { directories: { output: 'dist', }, + extraFiles: [ + "bins/" + ], cscKeyPassword: process.env.CSC_KEY_PASSWORD, cscLink: process.env.CSC_LINK, mac: { From 1a17645e51435bf29dee33f6034d64ad3c7e26d2 Mon Sep 17 00:00:00 2001 From: Ardian Date: Thu, 20 Jun 2024 10:13:22 +0200 Subject: [PATCH 21/29] release: rc55 --- build.js | 14 ++++++---- electron/install.js | 4 +-- electron/main.js | 67 +++++++++++++++++++++++++-------------------- package.json | 2 +- pyproject.toml | 2 +- 5 files changed, 50 insertions(+), 39 deletions(-) diff --git a/build.js b/build.js index 1d57b44b8..8051402cd 100644 --- a/build.js +++ b/build.js @@ -18,8 +18,12 @@ const main = async () => { directories: { output: 'dist', }, - extraFiles: [ - "bins/" + extraResources: [ + { + from: 'electron/bins', + to: 'bins', + filter: ['**/*'], + }, ], cscKeyPassword: process.env.CSC_KEY_PASSWORD, cscLink: process.env.CSC_LINK, @@ -37,9 +41,9 @@ const main = async () => { gatekeeperAssess: false, entitlements: 'electron/entitlements.mac.plist', entitlementsInherit: 'electron/entitlements.mac.plist', - // notarize: { - // teamId: process.env.APPLETEAMID, - // }, + notarize: { + teamId: process.env.APPLETEAMID, + }, }, }, }); diff --git a/electron/install.js b/electron/install.js index 22dafcbd6..19cc03f6f 100644 --- a/electron/install.js +++ b/electron/install.js @@ -16,14 +16,14 @@ const { BrewScript } = require('./scripts'); * - use "" (nothing as a suffix) for latest release candidate, for example "0.1.0rc26" * - use "alpha" for alpha release, for example "0.1.0rc26-alpha" */ -const OlasMiddlewareVersion = '0.1.0rc53'; +const OlasMiddlewareVersion = '0.1.0rc55'; const OperateDirectory = `${os.homedir()}/.operate`; const VenvDir = `${OperateDirectory}/venv`; const TempDir = `${OperateDirectory}/temp`; const VersionFile = `${OperateDirectory}/version.txt`; const LogFile = `${OperateDirectory}/logs.txt`; const OperateInstallationLog = `${os.homedir()}/operate.log`; -const OperateCmd = `${__dirname}/bins/pearl_${process.arch}`; +const OperateCmd = `${process.env.PORTABLE_EXECUTABLE_DIR}./bins/pearl_${process.arch}`; const Env = { ...process.env, PATH: `${process.env.PATH}:/opt/homebrew/bin:/usr/local/bin`, diff --git a/electron/main.js b/electron/main.js index 03edaead0..9d7956bd1 100644 --- a/electron/main.js +++ b/electron/main.js @@ -1,5 +1,8 @@ const dotenv = require('dotenv'); +const console = require('electron-log/main'); // Supports log levels and file logging +console.initialize(); + const { app, BrowserWindow, @@ -19,14 +22,8 @@ const http = require('http'); const AdmZip = require('adm-zip'); const { TRAY_ICONS, TRAY_ICONS_PATHS } = require('./icons'); -const { - setupDarwin, - setupUbuntu, - OperateCmd, - OperateDirectory, - Env, - dirs, appendLog, -} = require('./install'); +const { OperateDirectory, Env, dirs } = require('./install'); + const { killProcesses } = require('./processes'); const { isPortAvailable, findAvailablePort } = require('./ports'); const { PORT_RANGE, isWindows, isMac } = require('./constants'); @@ -43,6 +40,18 @@ if (!singleInstanceLock) app.quit(); const platform = os.platform(); const isDev = process.env.NODE_ENV === 'development'; +const cliPaths = { + prod: { + darwin: 'bins/pearl_arm64', + win32: 'bins/pearl.exe', + linux: 'bins/pearl', + }, +}; + +const cliPath = path.join(process.resourcesPath, cliPaths.prod[platform]); + +console.log('CLI Path:', cliPath); + let appConfig = { ports: { dev: { @@ -280,21 +289,20 @@ async function launchDaemon() { // Free up backend port if already occupied try { await fetch(`http://localhost:${appConfig.ports.prod.operate}/api`); - appendLog('Killing backend server!'); + console.log('Killing backend server!'); let endpoint = fs .readFileSync(`${OperateDirectory}/operate.kill`) .toString() - .trimLeft() - .trimRight(); + .trim(); + await fetch(`http://localhost:${appConfig.ports.prod.operate}/${endpoint}`); } catch (err) { - appendLog('Backend not running!'); + console.log('Backend not running!'); } - appendLog(`Starting backend server! Opeate cmd: ${OperateCmd}`); const check = new Promise(function (resolve, _reject) { operateDaemon = spawn( - OperateCmd, + cliPath, [ 'daemon', `--port=${appConfig.ports.prod.operate}`, @@ -303,13 +311,13 @@ async function launchDaemon() { { env: Env }, ); operateDaemonPid = operateDaemon.pid; - fs.appendFileSync( - `${OperateDirectory}/operate.pip`, - `${operateDaemon.pid}`, - { - encoding: 'utf-8', - }, - ); + // fs.appendFileSync( + // `${OperateDirectory}/operate.pip`, + // `${operateDaemon.pid}`, + // { + // encoding: 'utf-8', + // }, + // ); operateDaemon.stderr.on('data', (data) => { if (data.toString().includes('Uvicorn running on')) { @@ -326,12 +334,15 @@ async function launchDaemon() { console.log(appendLog(data.toString().trim())); }); }); + return await check; } async function launchDaemonDev() { const check = new Promise(function (resolve, _reject) { - operateDaemon = spawn(OperateCmd, [ + operateDaemon = spawn('poetry', [ + 'run', + 'operate', 'daemon', `--port=${appConfig.ports.dev.operate}`, '--home=.operate', @@ -412,12 +423,10 @@ ipcMain.on('check', async function (event, _argument) { // macUpdater.checkForUpdates().then((res) => { // if (!res) return; // if (!res.downloadPromise) return; - // // new Notification({ // title: 'Update Available', // body: 'Downloading update...', // }).show(); - // // res.downloadPromise.then(() => { // new Notification({ // title: 'Update Downloaded', @@ -435,12 +444,11 @@ ipcMain.on('check', async function (event, _argument) { event.sender.send('response', 'Checking installation'); if (!isDev) { if (platform === 'darwin') { - await setupDarwin(event.sender); - appendLog('Darwin setup complete') + //await setupDarwin(event.sender); } else if (platform === 'win32') { // TODO } else { - await setupUbuntu(event.sender); + //await setupUbuntu(event.sender); } } @@ -478,9 +486,8 @@ ipcMain.on('check', async function (event, _argument) { await launchNextAppDev(); } else { event.sender.send('response', 'Starting Pearl Daemon'); - appendLog('Launching daemon') await launchDaemon(); - appendLog('Launched daemon') + event.sender.send('response', 'Starting Frontend Server'); const frontendPortAvailable = await isPortAvailable( appConfig.ports.prod.next, @@ -644,4 +651,4 @@ ipcMain.handle('save-logs', async (_, data) => { if (debugDataFilePath) fs.unlinkSync(debugDataFilePath); return result; -}); +}); \ No newline at end of file diff --git a/package.json b/package.json index 1f19df4ec..b44728783 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "main": "electron/main.js", "name": "olas-operate-app", "productName": "Pearl", - "version": "0.1.0-rc53", + "version": "0.1.0-rc55", "dependencies": { "@ant-design/cssinjs": "^1.18.4", "@ant-design/icons": "^5.3.0", diff --git a/pyproject.toml b/pyproject.toml index 05f924bad..24cfe0937 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "olas-operate-middleware" -version = "0.1.0-rc53" +version = "0.1.0-rc55" description = "" authors = ["David Vilela ", "Viraj Patel "] readme = "README.md" From ef391a14e2f88708d238aaf3102872b7a4efa8bf Mon Sep 17 00:00:00 2001 From: Ardian Date: Thu, 20 Jun 2024 16:36:29 +0200 Subject: [PATCH 22/29] feat: add x64 --- .github/workflows/release.yml | 2 +- electron/main.js | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a0671a2a8..ba87b8612 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -51,7 +51,7 @@ jobs: with: node-version: "20.11" - name: Download binary - run: mkdir electron/bins && curl -L -o electron/bins/pearl_arm64 https://tempfileserver.staging.autonolas.tech/pearl_arm64 && chmod +x electron/bins/pearl_arm64 + run: mkdir electron/bins && curl -L -o electron/bins/pearl_arm64 https://tempfileserver.staging.autonolas.tech/pearl_arm64 && chmod +x electron/bins/pearl_arm64 && curl -L -o electron/bins/pearl_x64 https://tempfileserver.staging.autonolas.tech/pearl_arm64 && chmod +x electron/bins/pearl_x64 - uses: snok/install-poetry@v1 with: version: "1.7.1" diff --git a/electron/main.js b/electron/main.js index 9d7956bd1..bdd75e55f 100644 --- a/electron/main.js +++ b/electron/main.js @@ -41,14 +41,15 @@ const platform = os.platform(); const isDev = process.env.NODE_ENV === 'development'; const cliPaths = { - prod: { - darwin: 'bins/pearl_arm64', - win32: 'bins/pearl.exe', - linux: 'bins/pearl', - }, + prod: { + darwin: { + arm64: 'bins/pearl_arm64', + x64: 'bins/pearl_x64', + } + }, }; -const cliPath = path.join(process.resourcesPath, cliPaths.prod[platform]); +const cliPath = path.join(process.resourcesPath, cliPaths.prod[platform][process.arch.toString()]); console.log('CLI Path:', cliPath); From 7f1a7a9777e9540f43a22ff92d8e3ffddc30509f Mon Sep 17 00:00:00 2001 From: Ardian Date: Thu, 20 Jun 2024 17:38:16 +0200 Subject: [PATCH 23/29] release: rc57 --- build.js | 2 +- package.json | 2 +- pyproject.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.js b/build.js index 8051402cd..660efc6b4 100644 --- a/build.js +++ b/build.js @@ -31,7 +31,7 @@ const main = async () => { target: [ { target: 'default', - arch: ['arm64'], + arch: ['x64', 'arm64'], }, ], publish: publishOptions, diff --git a/package.json b/package.json index b44728783..a79e0a464 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "main": "electron/main.js", "name": "olas-operate-app", "productName": "Pearl", - "version": "0.1.0-rc55", + "version": "0.1.0-rc57", "dependencies": { "@ant-design/cssinjs": "^1.18.4", "@ant-design/icons": "^5.3.0", diff --git a/pyproject.toml b/pyproject.toml index 24cfe0937..99da0f6c5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "olas-operate-middleware" -version = "0.1.0-rc55" +version = "0.1.0-rc57" description = "" authors = ["David Vilela ", "Viraj Patel "] readme = "README.md" From 6df3feed004b3ece383453f7d8d9eff19f69ce6b Mon Sep 17 00:00:00 2001 From: Ardian Date: Fri, 21 Jun 2024 19:41:42 +0200 Subject: [PATCH 24/29] chore: poetry.lock --- poetry.lock | 281 ++++++++++++++++++++++++++++------------------------ 1 file changed, 152 insertions(+), 129 deletions(-) diff --git a/poetry.lock b/poetry.lock index 079038d6d..5aa28b550 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,10 +1,9 @@ -# This file is automatically @generated by Poetry and should not be changed by hand. +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. [[package]] name = "aiohttp" version = "3.9.5" description = "Async http client/server framework (asyncio)" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -101,7 +100,6 @@ speedups = ["Brotli", "aiodns", "brotlicffi"] name = "aiosignal" version = "1.3.1" description = "aiosignal: a list of registered asynchronous callbacks" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -116,7 +114,6 @@ frozenlist = ">=1.1.0" name = "altgraph" version = "0.17.4" description = "Python graph (network) package" -category = "main" optional = false python-versions = "*" files = [ @@ -128,7 +125,6 @@ files = [ name = "annotated-types" version = "0.7.0" description = "Reusable constraint types to use with typing.Annotated" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -143,7 +139,6 @@ typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.9\""} name = "anyio" version = "4.4.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -166,7 +161,6 @@ trio = ["trio (>=0.23)"] name = "async-timeout" version = "4.0.3" description = "Timeout context manager for asyncio programs" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -178,7 +172,6 @@ files = [ name = "attrs" version = "23.2.0" description = "Classes Without Boilerplate" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -198,7 +191,6 @@ tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "p name = "backoff" version = "2.2.1" description = "Function decoration for backoff and retry" -category = "main" optional = false python-versions = ">=3.7,<4.0" files = [ @@ -210,7 +202,6 @@ files = [ name = "base58" version = "2.1.1" description = "Base58 and Base58Check implementation." -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -225,7 +216,6 @@ tests = ["PyHamcrest (>=2.0.2)", "mypy", "pytest (>=4.6)", "pytest-benchmark", " name = "bcrypt" version = "4.1.3" description = "Modern password hashing for your software and your servers" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -266,7 +256,6 @@ typecheck = ["mypy"] name = "bitarray" version = "2.9.2" description = "efficient arrays of booleans -- C extension" -category = "main" optional = false python-versions = "*" files = [ @@ -398,7 +387,6 @@ files = [ name = "certifi" version = "2024.6.2" description = "Python package for providing Mozilla's CA Bundle." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -410,7 +398,6 @@ files = [ name = "cffi" version = "1.16.0" description = "Foreign Function Interface for Python calling C code." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -475,7 +462,6 @@ pycparser = "*" name = "charset-normalizer" version = "2.1.1" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "main" optional = false python-versions = ">=3.6.0" files = [ @@ -490,7 +476,6 @@ unicode-backport = ["unicodedata2"] name = "clea" version = "0.1.0rc4" description = "Framework for writing CLI application quickly" -category = "main" optional = false python-versions = ">=3.8,<4.0" files = [ @@ -505,7 +490,6 @@ typing-extensions = ">=4.7.1,<5.0.0" name = "click" version = "8.0.2" description = "Composable command line interface toolkit" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -520,7 +504,6 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -532,7 +515,6 @@ files = [ name = "coverage" version = "7.5.3" description = "Code coverage measurement for Python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -597,7 +579,6 @@ toml = ["tomli"] name = "cryptography" version = "42.0.8" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -652,7 +633,6 @@ test-randomorder = ["pytest-randomly"] name = "cytoolz" version = "0.12.3" description = "Cython implementation of Toolz: High performance functional utilities" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -768,11 +748,21 @@ toolz = ">=0.8.0" [package.extras] cython = ["cython"] +[[package]] +name = "distlib" +version = "0.3.8" +description = "Distribution utilities" +optional = false +python-versions = "*" +files = [ + {file = "distlib-0.3.8-py2.py3-none-any.whl", hash = "sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784"}, + {file = "distlib-0.3.8.tar.gz", hash = "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64"}, +] + [[package]] name = "distro" version = "1.9.0" description = "Distro - an OS platform information API" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -784,7 +774,6 @@ files = [ name = "docker" version = "6.1.2" description = "A Python library for the Docker Engine API." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -807,7 +796,6 @@ ssh = ["paramiko (>=2.4.3)"] name = "dockerpty" version = "0.4.1" description = "Python library to use the pseudo-tty of a docker container" -category = "main" optional = false python-versions = "*" files = [ @@ -821,7 +809,6 @@ six = ">=1.3.0" name = "docopt" version = "0.6.2" description = "Pythonic argument parser, that will make you smile" -category = "main" optional = false python-versions = "*" files = [ @@ -832,7 +819,6 @@ files = [ name = "ecdsa" version = "0.16.1" description = "ECDSA cryptographic signature library (pure python)" -category = "main" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -851,7 +837,6 @@ gmpy2 = ["gmpy2"] name = "eth-abi" version = "5.1.0" description = "eth_abi: Python utilities for working with Ethereum ABI definitions, especially encoding and decoding" -category = "main" optional = false python-versions = "<4,>=3.8" files = [ @@ -874,7 +859,6 @@ tools = ["hypothesis (>=4.18.2,<5.0.0)"] name = "eth-account" version = "0.8.0" description = "eth-account: Sign Ethereum transactions and messages with local private keys" -category = "main" optional = false python-versions = ">=3.6, <4" files = [ @@ -902,7 +886,6 @@ test = ["coverage", "hypothesis (>=4.18.0,<5)", "pytest (>=6.2.5,<7)", "pytest-x name = "eth-hash" version = "0.7.0" description = "eth-hash: The Ethereum hashing function, keccak256, sometimes (erroneously) called sha3" -category = "main" optional = false python-versions = ">=3.8, <4" files = [ @@ -924,7 +907,6 @@ test = ["pytest (>=7.0.0)", "pytest-xdist (>=2.4.0)"] name = "eth-keyfile" version = "0.6.1" description = "A library for handling the encrypted keyfiles used to store ethereum private keys." -category = "main" optional = false python-versions = "*" files = [ @@ -947,7 +929,6 @@ test = ["pytest (>=6.2.5,<7)"] name = "eth-keys" version = "0.4.0" description = "Common API for Ethereum key operations." -category = "main" optional = false python-versions = "*" files = [ @@ -970,7 +951,6 @@ test = ["asn1tools (>=0.146.2,<0.147)", "eth-hash[pycryptodome]", "eth-hash[pysh name = "eth-rlp" version = "0.3.0" description = "eth-rlp: RLP definitions for common Ethereum objects in Python" -category = "main" optional = false python-versions = ">=3.7, <4" files = [ @@ -993,7 +973,6 @@ test = ["eth-hash[pycryptodome]", "pytest (>=6.2.5,<7)", "pytest-xdist", "tox (= name = "eth-typing" version = "3.5.2" description = "eth-typing: Common type annotations for ethereum python packages" -category = "main" optional = false python-versions = ">=3.7.2, <4" files = [ @@ -1014,7 +993,6 @@ test = ["pytest (>=7.0.0)", "pytest-xdist (>=2.4.0)"] name = "eth-utils" version = "2.3.1" description = "eth-utils: Common utility functions for python code that interacts with Ethereum" -category = "main" optional = false python-versions = ">=3.7,<4" files = [ @@ -1038,7 +1016,6 @@ test = ["hypothesis (>=4.43.0)", "mypy (==0.971)", "pytest (>=7.0.0)", "pytest-x name = "exceptiongroup" version = "1.2.1" description = "Backport of PEP 654 (exception groups)" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1053,7 +1030,6 @@ test = ["pytest (>=6)"] name = "fastapi" version = "0.110.0" description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1069,11 +1045,26 @@ typing-extensions = ">=4.8.0" [package.extras] all = ["email-validator (>=2.0.0)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.7)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] +[[package]] +name = "filelock" +version = "3.15.3" +description = "A platform independent file lock." +optional = false +python-versions = ">=3.8" +files = [ + {file = "filelock-3.15.3-py3-none-any.whl", hash = "sha256:0151273e5b5d6cf753a61ec83b3a9b7d8821c39ae9af9d7ecf2f9e2f17404103"}, + {file = "filelock-3.15.3.tar.gz", hash = "sha256:e1199bf5194a2277273dacd50269f0d87d0682088a3c561c15674ea9005d8635"}, +] + +[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-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]] name = "flask" version = "2.1.3" description = "A simple framework for building complex web applications." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1096,7 +1087,6 @@ dotenv = ["python-dotenv"] name = "frozenlist" version = "1.4.1" description = "A list-like structure which implements collections.abc.MutableSequence" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1183,7 +1173,6 @@ files = [ name = "gql" version = "3.5.0" description = "GraphQL client for Python" -category = "main" optional = false python-versions = "*" files = [ @@ -1212,7 +1201,6 @@ websockets = ["websockets (>=10,<12)"] name = "graphql-core" version = "3.2.3" description = "GraphQL implementation for Python, a port of GraphQL.js, the JavaScript reference implementation for GraphQL." -category = "main" optional = false python-versions = ">=3.6,<4" files = [ @@ -1224,7 +1212,6 @@ files = [ name = "h11" version = "0.14.0" description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1236,7 +1223,6 @@ files = [ name = "hexbytes" version = "0.3.1" description = "hexbytes: Python `bytes` subclass that decodes hex, with a readable console output" -category = "main" optional = false python-versions = ">=3.7, <4" files = [ @@ -1254,7 +1240,6 @@ test = ["eth-utils (>=1.0.1,<3)", "hypothesis (>=3.44.24,<=6.31.6)", "pytest (>= name = "idna" version = "3.7" description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -1264,29 +1249,27 @@ files = [ [[package]] name = "importlib-metadata" -version = "7.1.0" +version = "7.2.0" description = "Read metadata from Python packages" -category = "main" 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-7.2.0-py3-none-any.whl", hash = "sha256:04e4aad329b8b948a5711d394fa8759cb80f009225441b4f2a02bd4d8e5f426c"}, + {file = "importlib_metadata-7.2.0.tar.gz", hash = "sha256:3ff4519071ed42740522d494d04819b666541b9752c43012f85afb2cc220fcc6"}, ] [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 = "importlib-resources" version = "6.4.0" description = "Read resources from Python packages" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1305,7 +1288,6 @@ testing = ["jaraco.test (>=5.4)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "p name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1317,7 +1299,6 @@ files = [ name = "ipfshttpclient" version = "0.8.0a2" description = "Python IPFS HTTP CLIENT library" -category = "main" optional = false python-versions = ">=3.6.2,!=3.7.0,!=3.7.1" files = [ @@ -1333,7 +1314,6 @@ requests = ">=2.11" name = "itsdangerous" version = "2.2.0" description = "Safely pass data to untrusted environments and back." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1345,7 +1325,6 @@ files = [ name = "jinja2" version = "3.1.4" description = "A very fast and expressive template engine." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1363,7 +1342,6 @@ i18n = ["Babel (>=2.7)"] name = "jsonschema" version = "4.3.3" description = "An implementation of JSON Schema validation for Python" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1384,7 +1362,6 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- name = "lru-dict" version = "1.3.0" description = "An Dict like LRU container." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1478,7 +1455,6 @@ test = ["pytest"] name = "macholib" version = "1.16.3" description = "Mach-O header analysis and editing" -category = "main" optional = false python-versions = "*" files = [ @@ -1493,7 +1469,6 @@ altgraph = ">=0.17" name = "markupsafe" version = "2.1.5" description = "Safely add untrusted strings to HTML/XML markup." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1563,7 +1538,6 @@ files = [ name = "morphys" version = "1.0" description = "Smart conversions between unicode and bytes types for common cases" -category = "main" optional = false python-versions = "*" files = [ @@ -1574,7 +1548,6 @@ files = [ name = "multiaddr" version = "0.0.9" description = "Python implementation of jbenet's multiaddr" -category = "main" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" files = [ @@ -1592,7 +1565,6 @@ varint = "*" name = "multidict" version = "6.0.5" description = "multidict implementation" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1692,7 +1664,6 @@ files = [ name = "netaddr" version = "1.3.0" description = "A network address manipulation library for Python" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1707,7 +1678,6 @@ nicer-shell = ["ipython"] name = "open-aea" version = "1.51.0" description = "Open Autonomous Economic Agent framework (without vendor lock-in)" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1747,7 +1717,6 @@ test-tools = ["click (==8.0.2)", "coverage (>=6.4.4,<8.0.0)", "jsonschema (>=4.3 name = "open-aea-cli-ipfs" version = "1.51.0" description = "CLI extension for open AEA framework wrapping IPFS functionality." -category = "main" optional = false python-versions = "*" files = [ @@ -1764,7 +1733,6 @@ pytest = ">=7.0.0,<7.3.0" name = "open-aea-ledger-ethereum" version = "1.51.0" description = "Python package wrapping the public and private key cryptography and ledger api of Ethereum." -category = "main" optional = false python-versions = "*" files = [ @@ -1782,7 +1750,6 @@ web3 = ">=6.0.0,<7" name = "open-autonomy" version = "0.14.11.post1" description = "A framework for the creation of autonomous agent services." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1819,7 +1786,6 @@ cli = ["click (==8.0.2)", "coverage (>=6.4.4,<8.0.0)", "open-aea-cli-ipfs (==1.5 name = "packaging" version = "23.2" description = "Core utilities for Python packages" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1831,7 +1797,6 @@ files = [ name = "paramiko" version = "3.4.0" description = "SSH2 protocol library" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1853,7 +1818,6 @@ invoke = ["invoke (>=2.0)"] name = "parsimonious" version = "0.10.0" description = "(Soon to be) the fastest pure-Python PEG parser I could muster" -category = "main" optional = false python-versions = "*" files = [ @@ -1868,7 +1832,6 @@ regex = ">=2022.3.15" name = "pefile" version = "2023.2.7" description = "Python PE parsing module" -category = "main" optional = false python-versions = ">=3.6.0" files = [ @@ -1876,11 +1839,26 @@ files = [ {file = "pefile-2023.2.7.tar.gz", hash = "sha256:82e6114004b3d6911c77c3953e3838654b04511b8b66e8583db70c65998017dc"}, ] +[[package]] +name = "platformdirs" +version = "4.2.2" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." +optional = false +python-versions = ">=3.8" +files = [ + {file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"}, + {file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"}, +] + +[package.extras] +docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] +type = ["mypy (>=1.8)"] + [[package]] name = "pluggy" version = "1.5.0" description = "plugin and hook calling mechanisms for python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1896,7 +1874,6 @@ testing = ["pytest", "pytest-benchmark"] name = "protobuf" version = "4.24.4" description = "" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1919,7 +1896,6 @@ files = [ name = "psutil" version = "5.9.8" description = "Cross-platform lib for process and system monitoring in Python." -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ @@ -1944,11 +1920,21 @@ files = [ [package.extras] test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] +[[package]] +name = "py" +version = "1.11.0" +description = "library with cross-python path, ini-parsing, io, code, log facilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, + {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, +] + [[package]] name = "py-multibase" version = "1.0.3" description = "Multibase implementation for Python" -category = "main" optional = false python-versions = "*" files = [ @@ -1965,7 +1951,6 @@ six = ">=1.10.0,<2.0" name = "py-multicodec" version = "0.2.1" description = "Multicodec implementation in Python" -category = "main" optional = false python-versions = "*" files = [ @@ -1982,7 +1967,6 @@ varint = ">=1.0.2,<2.0.0" name = "pycparser" version = "2.22" description = "C parser in Python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1994,7 +1978,6 @@ files = [ name = "pycryptodome" version = "3.20.0" description = "Cryptographic library for Python" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -2034,14 +2017,13 @@ files = [ [[package]] name = "pydantic" -version = "2.7.3" +version = "2.7.4" description = "Data validation using Python type hints" -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.7.3-py3-none-any.whl", hash = "sha256:ea91b002777bf643bb20dd717c028ec43216b24a6001a280f83877fd2655d0b4"}, - {file = "pydantic-2.7.3.tar.gz", hash = "sha256:c46c76a40bb1296728d7a8b99aa73dd70a48c3510111ff290034f860c99c419e"}, + {file = "pydantic-2.7.4-py3-none-any.whl", hash = "sha256:ee8538d41ccb9c0a9ad3e0e5f07bf15ed8015b481ced539a1759d8cc89ae90d0"}, + {file = "pydantic-2.7.4.tar.gz", hash = "sha256:0c84efd9548d545f63ac0060c1e4d39bb9b14db8b3c0652338aecc07b5adec52"}, ] [package.dependencies] @@ -2056,7 +2038,6 @@ email = ["email-validator (>=2.0.0)"] name = "pydantic-core" version = "2.18.4" description = "Core functionality for Pydantic validation and serialization" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2148,7 +2129,6 @@ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" name = "pyinstaller" version = "6.8.0" description = "PyInstaller bundles a Python application and all its dependencies into a single package." -category = "main" optional = false python-versions = "<3.13,>=3.8" files = [ @@ -2184,7 +2164,6 @@ hook-testing = ["execnet (>=1.5.0)", "psutil", "pytest (>=2.7.3)"] name = "pyinstaller-hooks-contrib" version = "2024.7" description = "Community maintained hooks for PyInstaller" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2201,7 +2180,6 @@ setuptools = ">=42.0.0" name = "pymultihash" version = "0.8.2" description = "Python implementation of the multihash specification" -category = "main" optional = false python-versions = "*" files = [ @@ -2217,7 +2195,6 @@ sha3 = ["pysha3"] name = "pynacl" version = "1.5.0" description = "Python binding to the Networking and Cryptography (NaCl) library" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2244,7 +2221,6 @@ tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"] name = "pyrsistent" version = "0.20.0" description = "Persistent/Functional/Immutable data structures" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2286,7 +2262,6 @@ files = [ name = "pytest" version = "7.2.1" description = "pytest: simple powerful testing with Python" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2310,7 +2285,6 @@ testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2. name = "python-baseconv" version = "1.2.2" description = "Convert numbers from base 10 integers to base X strings and back again." -category = "main" optional = false python-versions = "*" files = [ @@ -2321,7 +2295,6 @@ files = [ name = "python-dotenv" version = "0.21.1" description = "Read key-value pairs from a .env file and set them as environment variables" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2336,7 +2309,6 @@ cli = ["click (>=5.0)"] name = "pywin32" version = "306" description = "Python for Window Extensions" -category = "main" optional = false python-versions = "*" files = [ @@ -2360,7 +2332,6 @@ files = [ name = "pywin32-ctypes" version = "0.2.2" description = "A (partial) reimplementation of pywin32 using ctypes/cffi" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2372,7 +2343,6 @@ files = [ name = "pyyaml" version = "6.0.1" description = "YAML parser and emitter for Python" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2433,7 +2403,6 @@ files = [ name = "regex" version = "2024.5.15" description = "Alternative regular expression module, to replace re." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2522,7 +2491,6 @@ files = [ name = "requests" version = "2.28.1" description = "Python HTTP for Humans." -category = "main" optional = false python-versions = ">=3.7, <4" files = [ @@ -2544,7 +2512,6 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "requests-toolbelt" version = "1.0.0" description = "A utility belt for advanced users of python-requests" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2559,7 +2526,6 @@ requests = ">=2.0.1,<3.0.0" name = "rlp" version = "3.0.0" description = "A package for Recursive Length Prefix encoding and decoding" -category = "main" optional = false python-versions = "*" files = [ @@ -2581,7 +2547,6 @@ test = ["hypothesis (==5.19.0)", "pytest (>=6.2.5,<7)", "tox (>=2.9.1,<3)"] name = "semver" version = "2.13.0" description = "Python helper for Semantic Versioning (http://semver.org/)" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2591,25 +2556,23 @@ files = [ [[package]] name = "setuptools" -version = "70.0.0" +version = "70.1.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-70.0.0-py3-none-any.whl", hash = "sha256:54faa7f2e8d2d11bcd2c07bed282eef1046b5c080d1c32add737d7b5817b1ad4"}, - {file = "setuptools-70.0.0.tar.gz", hash = "sha256:f211a66637b8fa059bb28183da127d4e86396c991a942b028c6650d4319c3fd0"}, + {file = "setuptools-70.1.0-py3-none-any.whl", hash = "sha256:d9b8b771455a97c8a9f3ab3448ebe0b29b5e105f1228bba41028be116985a267"}, + {file = "setuptools-70.1.0.tar.gz", hash = "sha256:01a1e793faa5bd89abc851fa15d0a0db26f160890c7102cd8dce643e886b47f5"}, ] [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test", "mypy (==1.10.0)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.3.2)", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "six" version = "1.16.0" description = "Python 2 and 3 compatibility utilities" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -2621,7 +2584,6 @@ files = [ name = "sniffio" version = "1.3.1" description = "Sniff out which async library your code is running under" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2633,7 +2595,6 @@ files = [ name = "starlette" version = "0.36.3" description = "The little ASGI library that shines." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2652,7 +2613,6 @@ full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.7 name = "texttable" version = "1.6.7" description = "module to create simple ASCII tables" -category = "main" optional = false python-versions = "*" files = [ @@ -2664,7 +2624,6 @@ files = [ name = "tomli" version = "2.0.1" description = "A lil' TOML parser" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2672,11 +2631,42 @@ files = [ {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, ] +[[package]] +name = "tomte" +version = "0.2.15" +description = "A library that wraps many useful tools (linters, analysers, etc) to keep Python code clean, secure, well-documented and optimised." +optional = false +python-versions = ">=3.8,<4" +files = [ + {file = "tomte-0.2.15-py3-none-any.whl", hash = "sha256:c1ec71bdb919290e42671d83098232bf7cf46cddf1a736c5d1c9f12ab1308c34"}, + {file = "tomte-0.2.15.tar.gz", hash = "sha256:662f3cdd616347969c3fea557c47545b555f5f82798b978e78ade3d23d43c92d"}, +] + +[package.dependencies] +click = {version = "8.0.2", optional = true, markers = "extra == \"black\" or extra == \"cli\" or extra == \"docs\""} +requests = {version = "2.28.1", optional = true, markers = "extra == \"cli\""} +tox = {version = "3.28.0", optional = true, markers = "extra == \"cli\" or extra == \"tox\""} + +[package.extras] +bandit = ["bandit (==1.7.4)"] +black = ["black (==23.1.0)", "click (==8.0.2)"] +cli = ["click (==8.0.2)", "requests (==2.28.1)", "tox (==3.28.0)"] +darglint = ["darglint (==1.8.1)"] +docs = ["Markdown (==3.3.7)", "Pygments (>=2.16,<3.0)", "bs4 (==0.0.1)", "click (==8.0.2)", "markdown-include (==0.8.0)", "mkdocs (>=1.5.3,<2.0)", "mkdocs-macros-plugin (==0.7.0)", "mkdocs-material (==9.4.10)", "mkdocs-material-extensions (==1.3)", "mkdocs-redirects (==1.2.0)", "pydoc-markdown (==4.8.2)", "pydocstyle (==6.2.3)", "pymdown-extensions (>=10.2,<11.0)"] +flake8 = ["flake8 (==3.9.2)", "flake8-bugbear (==23.1.14)", "flake8-docstrings (==1.6.0)", "flake8-eradicate (==1.4.0)", "flake8-isort (==6.0.0)", "pydocstyle (==6.2.3)"] +isort = ["isort (==5.11.4)"] +liccheck = ["liccheck (==0.8.3)"] +mypy = ["mypy (==0.991)"] +pylint = ["pylint (==2.13.9)"] +safety = ["safety (==2.4.0b1)"] +tests = ["pytest (==7.2.1)", "pytest-asyncio (==0.20.3)", "pytest-cov (==4.0.0)", "pytest-randomly (==3.12.0)", "pytest-rerunfailures (==11.0)"] +tox = ["tox (==3.28.0)"] +vulture = ["vulture (==2.7)"] + [[package]] name = "toolz" version = "0.12.1" description = "List processing tools and functional utilities" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2684,28 +2674,51 @@ files = [ {file = "toolz-0.12.1.tar.gz", hash = "sha256:ecca342664893f177a13dac0e6b41cbd8ac25a358e5f215316d43e2100224f4d"}, ] +[[package]] +name = "tox" +version = "3.28.0" +description = "tox is a generic virtualenv management and test command line tool" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +files = [ + {file = "tox-3.28.0-py2.py3-none-any.whl", hash = "sha256:57b5ab7e8bb3074edc3c0c0b4b192a4f3799d3723b2c5b76f1fa9f2d40316eea"}, + {file = "tox-3.28.0.tar.gz", hash = "sha256:d0d28f3fe6d6d7195c27f8b054c3e99d5451952b54abdae673b71609a581f640"}, +] + +[package.dependencies] +colorama = {version = ">=0.4.1", markers = "platform_system == \"Windows\""} +filelock = ">=3.0.0" +packaging = ">=14" +pluggy = ">=0.12.0" +py = ">=1.4.17" +six = ">=1.14.0" +tomli = {version = ">=2.0.1", markers = "python_version >= \"3.7\" and python_version < \"3.11\""} +virtualenv = ">=16.0.0,<20.0.0 || >20.0.0,<20.0.1 || >20.0.1,<20.0.2 || >20.0.2,<20.0.3 || >20.0.3,<20.0.4 || >20.0.4,<20.0.5 || >20.0.5,<20.0.6 || >20.0.6,<20.0.7 || >20.0.7" + +[package.extras] +docs = ["pygments-github-lexers (>=0.0.5)", "sphinx (>=2.0.0)", "sphinxcontrib-autoprogram (>=0.1.5)", "towncrier (>=18.5.0)"] +testing = ["flaky (>=3.4.0)", "freezegun (>=0.3.11)", "pathlib2 (>=2.3.3)", "psutil (>=5.6.1)", "pytest (>=4.0.0)", "pytest-cov (>=2.5.1)", "pytest-mock (>=1.10.0)", "pytest-randomly (>=1.0.0)"] + [[package]] name = "typing-extensions" -version = "4.12.1" +version = "4.12.2" description = "Backported and Experimental Type Hints for Python 3.8+" -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.12.1-py3-none-any.whl", hash = "sha256:6024b58b69089e5a89c347397254e35f1bf02a907728ec7fee9bf0fe837d203a"}, - {file = "typing_extensions-4.12.1.tar.gz", hash = "sha256:915f5e35ff76f56588223f15fdd5938f9a1cf9195c0de25130c627e4d597f6d1"}, + {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]] name = "urllib3" -version = "1.26.18" +version = "1.26.19" description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ - {file = "urllib3-1.26.18-py2.py3-none-any.whl", hash = "sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07"}, - {file = "urllib3-1.26.18.tar.gz", hash = "sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0"}, + {file = "urllib3-1.26.19-py2.py3-none-any.whl", hash = "sha256:37a0344459b199fce0e80b0d3569837ec6b6937435c5244e7fd73fa6006830f3"}, + {file = "urllib3-1.26.19.tar.gz", hash = "sha256:3e3d753a8618b86d7de333b4223005f68720bcd6a7d2bcb9fbd2229ec7c1e429"}, ] [package.extras] @@ -2717,7 +2730,6 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] name = "uvicorn" version = "0.27.0" description = "The lightning-fast ASGI server." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2737,7 +2749,6 @@ standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", name = "valory-docker-compose" version = "1.29.3" description = "Multi-container orchestration for Docker" -category = "main" optional = false python-versions = ">=3.4" files = [ @@ -2766,18 +2777,36 @@ tests = ["ddt (>=1.2.2,<2)", "pytest (<6)"] name = "varint" version = "1.0.2" description = "Simple python varint implementation" -category = "main" optional = false python-versions = "*" files = [ {file = "varint-1.0.2.tar.gz", hash = "sha256:a6ecc02377ac5ee9d65a6a8ad45c9ff1dac8ccee19400a5950fb51d594214ca5"}, ] +[[package]] +name = "virtualenv" +version = "20.26.2" +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"}, +] + +[package.dependencies] +distlib = ">=0.3.7,<1" +filelock = ">=3.12.2,<4" +platformdirs = ">=3.9.1,<5" + +[package.extras] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] + [[package]] name = "watchdog" version = "4.0.1" description = "Filesystem events monitoring" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2822,7 +2851,6 @@ watchmedo = ["PyYAML (>=3.10)"] name = "web3" version = "6.1.0" description = "web3.py" -category = "main" optional = false python-versions = ">=3.7.2" files = [ @@ -2856,7 +2884,6 @@ tester = ["eth-tester[py-evm] (==v0.8.0-b.3)", "py-geth (>=3.11.0)"] name = "websocket-client" version = "0.59.0" description = "WebSocket client for Python with low level API options" -category = "main" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2871,7 +2898,6 @@ six = "*" name = "websockets" version = "12.0" description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2953,7 +2979,6 @@ files = [ name = "werkzeug" version = "2.0.3" description = "The comprehensive WSGI web application library." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2968,7 +2993,6 @@ watchdog = ["watchdog"] name = "yarl" version = "1.9.4" description = "Yet another URL library" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3072,7 +3096,6 @@ multidict = ">=4.0" name = "zipp" version = "3.19.2" description = "Backport of pathlib-compatible object wrapper for zip files" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -3087,4 +3110,4 @@ test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", [metadata] lock-version = "2.0" python-versions = "<3.13,>=3.8" -content-hash = "94db3cf2e0549ba7881ab1b6837d9b42dc74d6301043972cf935472149354fdc" +content-hash = "1450a7ae9b7bf6c04d93100f0f3fb5677d8678ba4223834b18a828c5bc0d61b6" From 8cb551d37d558d024b8e96a643d8f8ab19884294 Mon Sep 17 00:00:00 2001 From: Ardian Date: Fri, 21 Jun 2024 19:44:09 +0200 Subject: [PATCH 25/29] chore: lint --- operate/pearl.py | 11 ++++++----- operate/services/service.py | 7 ++++--- operate/services/utils/tendermint.py | 4 ++-- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/operate/pearl.py b/operate/pearl.py index 5c6849121..ffc5b9b43 100644 --- a/operate/pearl.py +++ b/operate/pearl.py @@ -1,13 +1,14 @@ -from google.protobuf.descriptor_pb2 import FileDescriptorProto +from aea.crypto.registries.base import * from aea.mail.base_pb2 import DESCRIPTOR -from multiaddr.codecs.idna import to_bytes as _ -from multiaddr.codecs.uint16be import to_bytes as _ -from aea_ledger_ethereum.ethereum import * from aea_ledger_cosmos.cosmos import * +from aea_ledger_ethereum.ethereum import * from aea_ledger_ethereum_flashbots.ethereum_flashbots import * -from aea.crypto.registries.base import * +from google.protobuf.descriptor_pb2 import FileDescriptorProto +from multiaddr.codecs.idna import to_bytes as _ +from multiaddr.codecs.uint16be import to_bytes as _ from operate.cli import main + if __name__ == "__main__": main() diff --git a/operate/services/service.py b/operate/services/service.py index 71d0a010e..7a2c21e8f 100644 --- a/operate/services/service.py +++ b/operate/services/service.py @@ -81,6 +81,7 @@ OnChainUserParams, ) + SAFE_CONTRACT_ADDRESS = "safe_contract_address" ALL_PARTICIPANTS = "all_participants" CONSENSUS_THRESHOLD = "consensus_threshold" @@ -296,7 +297,7 @@ def generate_config_tendermint(self) -> "HostDeploymentGenerator": encoding="utf-8", ) shutil.copy( - tendermint.__file__.replace('.pyc', '.py'), + tendermint.__file__.replace(".pyc", ".py"), self.build_dir / "tendermint.py", ) return self @@ -386,7 +387,7 @@ def _setup_agent(working_dir: Path) -> None: encoding="utf-8", ) - abin = str(Path(sys._MEIPASS) / 'aea_bin') + abin = str(Path(sys._MEIPASS) / "aea_bin") # Fetch agent _run_cmd( args=[ @@ -431,7 +432,7 @@ def _setup_agent(working_dir: Path) -> None: def _start_agent(working_dir: Path) -> None: """Start agent process.""" env = json.loads((working_dir / "agent.json").read_text(encoding="utf-8")) - aea_bin = str(Path(sys._MEIPASS) / 'aea_bin') + aea_bin = str(Path(sys._MEIPASS) / "aea_bin") process = subprocess.Popen( # pylint: disable=consider-using-with # nosec args=[aea_bin, "run"], cwd=working_dir / "agent", diff --git a/operate/services/utils/tendermint.py b/operate/services/utils/tendermint.py index c8b4f0ef4..77c9097a9 100644 --- a/operate/services/utils/tendermint.py +++ b/operate/services/utils/tendermint.py @@ -639,7 +639,7 @@ def create_server() -> Any: return flask_app -if __name__ == '__main__': +if __name__ == "__main__": # Start the Flask server programmatically app = create_server() - app.run(host='localhost', port=8080) + app.run(host="localhost", port=8080) From a0b688214d44469bc4785f036b575cd7c587ff00 Mon Sep 17 00:00:00 2001 From: Ardian Date: Fri, 21 Jun 2024 19:58:57 +0200 Subject: [PATCH 26/29] chore: lint --- operate/pearl.py | 28 ++++++++++++++++++++++++++-- operate/services/manage.py | 9 +++++++-- operate/services/service.py | 8 +++++--- operate/services/utils/tendermint.py | 2 +- operate/wallet/master.py | 3 +++ 5 files changed, 42 insertions(+), 8 deletions(-) diff --git a/operate/pearl.py b/operate/pearl.py index ffc5b9b43..46aa28d83 100644 --- a/operate/pearl.py +++ b/operate/pearl.py @@ -1,8 +1,32 @@ +# -*- coding: utf-8 -*- +# ------------------------------------------------------------------------------ +# +# Copyright 2024 Valory AG +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# ------------------------------------------------------------------------------ + +"""File used for pyinstaller to create a single executable file.""" + +# pylint: disable=all +# mypy: ignore-errors +# flake8: noqa from aea.crypto.registries.base import * from aea.mail.base_pb2 import DESCRIPTOR -from aea_ledger_cosmos.cosmos import * +from aea_ledger_cosmos.cosmos import * # noqa from aea_ledger_ethereum.ethereum import * -from aea_ledger_ethereum_flashbots.ethereum_flashbots import * +from aea_ledger_ethereum_flashbots.ethereum_flashbots import * # noqa from google.protobuf.descriptor_pb2 import FileDescriptorProto from multiaddr.codecs.idna import to_bytes as _ from multiaddr.codecs.uint16be import to_bytes as _ diff --git a/operate/services/manage.py b/operate/services/manage.py index 2014e6afe..6ac1b788a 100644 --- a/operate/services/manage.py +++ b/operate/services/manage.py @@ -85,8 +85,8 @@ def __init__( Initialze service manager :param path: Path to service storage. - :param keys: Keys manager. - :param master_key_path: Path to master key. + :param keys_manager: Keys manager. + :param wallet_manager: Wallet manager instance. :param logger: logging.Logger object. """ self.path = path @@ -141,6 +141,9 @@ def create_or_load( :param hash: Service hash :param rpc: RPC string + :param on_chain_user_params: On-chain user parameters + :param keys: Keys + :return: Service instance """ path = self.path / hash if path.exists(): @@ -946,6 +949,7 @@ def deploy_service_locally(self, hash: str, force: bool = True) -> Deployment: :param hash: Service hash :param force: Remove previous deployment and start a new one. + :return: Deployment instance """ deployment = self.create_or_load(hash=hash).deployment deployment.build(force=force) @@ -958,6 +962,7 @@ def stop_service_locally(self, hash: str, delete: bool = False) -> Deployment: :param hash: Service hash :param delete: Delete local deployment. + :return: Deployment instance """ deployment = self.create_or_load(hash=hash).deployment deployment.stop() diff --git a/operate/services/service.py b/operate/services/service.py index 7a2c21e8f..e8d500a3a 100644 --- a/operate/services/service.py +++ b/operate/services/service.py @@ -387,7 +387,7 @@ def _setup_agent(working_dir: Path) -> None: encoding="utf-8", ) - abin = str(Path(sys._MEIPASS) / "aea_bin") + abin = str(Path(sys._MEIPASS) / "aea_bin") # type: ignore # pylint: disable=protected-access # Fetch agent _run_cmd( args=[ @@ -432,7 +432,7 @@ def _setup_agent(working_dir: Path) -> None: def _start_agent(working_dir: Path) -> None: """Start agent process.""" env = json.loads((working_dir / "agent.json").read_text(encoding="utf-8")) - aea_bin = str(Path(sys._MEIPASS) / "aea_bin") + aea_bin = str(Path(sys._MEIPASS) / "aea_bin") # type: ignore # pylint: disable=protected-access process = subprocess.Popen( # pylint: disable=consider-using-with # nosec args=[aea_bin, "run"], cwd=working_dir / "agent", @@ -452,7 +452,7 @@ def _start_agent(working_dir: Path) -> None: def _start_tendermint(working_dir: Path) -> None: """Start tendermint process.""" env = json.loads((working_dir / "tendermint.json").read_text(encoding="utf-8")) - tendermint_com = str(Path(sys._MEIPASS) / "tendermint") + tendermint_com = str(Path(sys._MEIPASS) / "tendermint") # type: ignore # pylint: disable=protected-access process = subprocess.Popen( # pylint: disable=consider-using-with # nosec args=[tendermint_com], cwd=working_dir, @@ -549,6 +549,7 @@ def new(path: Path) -> "Deployment": Create a new deployment :param path: Path to service + :return: Deployment object """ deployment = Deployment( status=DeploymentStatus.CREATED, @@ -761,6 +762,7 @@ def build( """ Build a deployment + :param use_docker: Use docker deployment :param force: Remove existing deployment and build a new one :return: Deployment object """ diff --git a/operate/services/utils/tendermint.py b/operate/services/utils/tendermint.py index 77c9097a9..9fa90d439 100644 --- a/operate/services/utils/tendermint.py +++ b/operate/services/utils/tendermint.py @@ -502,7 +502,7 @@ def create_app( # pylint: disable=too-many-statements use_grpc=os.environ["USE_GRPC"] == "true", ) - app = Flask(__name__) + app = Flask(__name__) # pylint: disable=redefined-outer-name period_dumper = PeriodDumper( logger=app.logger, dump_dir=Path(os.environ["TMSTATE"]), diff --git a/operate/wallet/master.py b/operate/wallet/master.py index 2daed309a..ecbd60fc9 100644 --- a/operate/wallet/master.py +++ b/operate/wallet/master.py @@ -375,6 +375,7 @@ def create(self, ledger_type: LedgerType) -> t.Tuple[MasterWallet, t.List[str]]: Create a master wallet :param ledger_type: Ledger type for the wallet. + :return: Tuple of master wallet and mnemonic """ if ledger_type == LedgerType.ETHEREUM: return EthereumMasterWallet.new(password=self.password, path=self.path) @@ -385,6 +386,7 @@ def exists(self, ledger_type: LedgerType) -> bool: Check if a wallet exists or not :param ledger_type: Ledger type for the wallet. + :return: True if wallet exists, False otherwise. """ return (self.path / ledger_type.config_file).exists() and ( self.path / ledger_type.key_file @@ -395,6 +397,7 @@ def load(self, ledger_type: LedgerType) -> MasterWallet: Load master wallet :param ledger_type: Ledger type for the wallet. + :return: Master wallet object """ if ledger_type == LedgerType.ETHEREUM: wallet = EthereumMasterWallet.load(path=self.path) From d8f0ce6cd55579074635d3640a952903c9228abc Mon Sep 17 00:00:00 2001 From: Ardian Date: Fri, 21 Jun 2024 20:05:18 +0200 Subject: [PATCH 27/29] release: rc58 --- electron/install.js | 2 +- package.json | 2 +- pyproject.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/electron/install.js b/electron/install.js index f66c2b3eb..a02305c42 100644 --- a/electron/install.js +++ b/electron/install.js @@ -16,7 +16,7 @@ const { BrewScript } = require('./scripts'); * - use "" (nothing as a suffix) for latest release candidate, for example "0.1.0rc26" * - use "alpha" for alpha release, for example "0.1.0rc26-alpha" */ -const OlasMiddlewareVersion = '0.1.0rc55'; +const OlasMiddlewareVersion = '0.1.0rc58'; const OperateDirectory = `${os.homedir()}/.operate`; const VenvDir = `${OperateDirectory}/venv`; const TempDir = `${OperateDirectory}/temp`; diff --git a/package.json b/package.json index a79e0a464..8d7195df0 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "main": "electron/main.js", "name": "olas-operate-app", "productName": "Pearl", - "version": "0.1.0-rc57", + "version": "0.1.0-rc58", "dependencies": { "@ant-design/cssinjs": "^1.18.4", "@ant-design/icons": "^5.3.0", diff --git a/pyproject.toml b/pyproject.toml index fff3be171..064534dc0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "olas-operate-middleware" -version = "0.1.0-rc50" +version = "0.1.0-rc58" description = "" authors = ["David Vilela ", "Viraj Patel "] readme = "README.md" From 0c45fb58f04280681391e4704dc82191a9df5f7d Mon Sep 17 00:00:00 2001 From: truemiller <31908788+truemiller@users.noreply.github.com> Date: Fri, 21 Jun 2024 20:27:01 +0100 Subject: [PATCH 28/29] chore: Remove unused code and update binary paths --- electron/install.js | 6 ++---- electron/main.js | 23 ++++++++++------------- 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/electron/install.js b/electron/install.js index a02305c42..0eae86c3c 100644 --- a/electron/install.js +++ b/electron/install.js @@ -23,7 +23,6 @@ const TempDir = `${OperateDirectory}/temp`; const VersionFile = `${OperateDirectory}/version.txt`; const LogFile = `${OperateDirectory}/logs.txt`; const OperateInstallationLog = `${os.homedir()}/operate.log`; -const OperateCmd = `${process.env.PORTABLE_EXECUTABLE_DIR}./bins/pearl_${process.arch}`; const Env = { ...process.env, PATH: `${process.env.PATH}:/opt/homebrew/bin:/usr/local/bin`, @@ -354,8 +353,8 @@ async function setupDarwin(ipcChannel) { appendLog(`Upgrading pearl daemon to ${OlasMiddlewareVersion}`), ); writeVersion(); - removeLogF // reInstallOperatePackageUnix(OperateDirectory); -ile(); + removeLogFile(); + // reInstallOperatePackageUnix(OperateDirectory); } } @@ -447,7 +446,6 @@ module.exports = { startDocker, setupUbuntu, OperateDirectory, - OperateCmd, Env, appendLog, dirs: { diff --git a/electron/main.js b/electron/main.js index bdd75e55f..f9f50d250 100644 --- a/electron/main.js +++ b/electron/main.js @@ -40,19 +40,13 @@ if (!singleInstanceLock) app.quit(); const platform = os.platform(); const isDev = process.env.NODE_ENV === 'development'; -const cliPaths = { - prod: { - darwin: { - arm64: 'bins/pearl_arm64', - x64: 'bins/pearl_x64', - } - }, +const binaryPaths = { + darwin: { + arm64: 'bins/pearl_arm64', + x64: 'bins/pearl_x64', + }, }; -const cliPath = path.join(process.resourcesPath, cliPaths.prod[platform][process.arch.toString()]); - -console.log('CLI Path:', cliPath); - let appConfig = { ports: { dev: { @@ -303,7 +297,10 @@ async function launchDaemon() { const check = new Promise(function (resolve, _reject) { operateDaemon = spawn( - cliPath, + path.join( + process.resourcesPath, + binaryPaths.prod[platform][process.arch.toString()], + ), [ 'daemon', `--port=${appConfig.ports.prod.operate}`, @@ -652,4 +649,4 @@ ipcMain.handle('save-logs', async (_, data) => { if (debugDataFilePath) fs.unlinkSync(debugDataFilePath); return result; -}); \ No newline at end of file +}); From 496ab152cd7b6af699466663a845a2650170e506 Mon Sep 17 00:00:00 2001 From: truemiller <31908788+truemiller@users.noreply.github.com> Date: Fri, 21 Jun 2024 20:34:11 +0100 Subject: [PATCH 29/29] chore: Update OlasMiddlewareVersion to '0.1.0rc59' in install.js, package.json, and pyproject.toml --- electron/install.js | 2 +- package.json | 2 +- pyproject.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/electron/install.js b/electron/install.js index 0eae86c3c..f5dadb311 100644 --- a/electron/install.js +++ b/electron/install.js @@ -16,7 +16,7 @@ const { BrewScript } = require('./scripts'); * - use "" (nothing as a suffix) for latest release candidate, for example "0.1.0rc26" * - use "alpha" for alpha release, for example "0.1.0rc26-alpha" */ -const OlasMiddlewareVersion = '0.1.0rc58'; +const OlasMiddlewareVersion = '0.1.0rc59'; const OperateDirectory = `${os.homedir()}/.operate`; const VenvDir = `${OperateDirectory}/venv`; const TempDir = `${OperateDirectory}/temp`; diff --git a/package.json b/package.json index 8d7195df0..97972a9a7 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "main": "electron/main.js", "name": "olas-operate-app", "productName": "Pearl", - "version": "0.1.0-rc58", + "version": "0.1.0-rc59", "dependencies": { "@ant-design/cssinjs": "^1.18.4", "@ant-design/icons": "^5.3.0", diff --git a/pyproject.toml b/pyproject.toml index 064534dc0..f07163663 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "olas-operate-middleware" -version = "0.1.0-rc58" +version = "0.1.0-rc59" description = "" authors = ["David Vilela ", "Viraj Patel "] readme = "README.md"