eth-portfolio-temp 0.1.1.dev0__tar.gz → 0.2.14__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/.github/workflows/black.yaml +6 -3
- eth_portfolio_temp-0.2.14/.github/workflows/compile.yaml +65 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/.github/workflows/deploy_docs.yaml +7 -7
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/.github/workflows/mypy.yaml +2 -2
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/.github/workflows/release.yaml +54 -38
- eth_portfolio_temp-0.2.14/PKG-INFO +26 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/README.md +2 -2
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/docs/exporter.rst +3 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/_cache.py +2 -2
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/_db/utils.py +6 -8
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/_decimal.py +11 -10
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/_ledgers/address.py +1 -1
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/_loaders/token_transfer.py +1 -1
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/_loaders/transaction.py +1 -1
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/_loaders/utils.py +1 -1
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/_shitcoins.py +52 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/_utils.py +12 -10
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/_ydb/token_transfers.py +6 -11
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/buckets.py +1 -1
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/portfolio.py +1 -1
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/protocols/lending/liquity.py +1 -1
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/protocols/lending/maker.py +13 -14
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/structs/structs.py +2 -2
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/typing/__init__.py +4 -4
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio_scripts/_portfolio.py +51 -38
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio_scripts/_utils.py +20 -6
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio_scripts/balances.py +7 -4
- eth_portfolio_temp-0.2.14/eth_portfolio_scripts/docker/check.py +67 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio_scripts/docker/docker-compose.yaml +2 -2
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio_scripts/docker/docker_compose.py +11 -8
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio_scripts/main.py +6 -0
- eth_portfolio_temp-0.2.14/eth_portfolio_temp.egg-info/PKG-INFO +26 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio_temp.egg-info/SOURCES.txt +1 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio_temp.egg-info/requires.txt +5 -4
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio_temp.egg-info/top_level.txt +1 -1
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/pyproject.toml +4 -3
- eth_portfolio_temp-0.2.14/renovate.json +6 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/requirements.txt +5 -4
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/setup.py +2 -1
- eth_portfolio_temp-0.1.1.dev0/.github/workflows/compile.yaml +0 -48
- eth_portfolio_temp-0.1.1.dev0/PKG-INFO +0 -8
- eth_portfolio_temp-0.1.1.dev0/eth_portfolio_scripts/docker/check.py +0 -56
- eth_portfolio_temp-0.1.1.dev0/eth_portfolio_temp.egg-info/PKG-INFO +0 -8
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/.env.sample +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/.gitignore +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/Makefile +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/brownie-config.yaml +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/docs/Makefile +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/docs/_build/html/_static/alabaster.css +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/docs/_build/html/_static/basic.css +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/docs/_build/html/_static/custom.css +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/docs/_build/html/_static/doctools.js +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/docs/_build/html/_static/documentation_options.js +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/docs/_build/html/_static/file.png +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/docs/_build/html/_static/language_data.js +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/docs/_build/html/_static/minus.png +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/docs/_build/html/_static/plus.png +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/docs/_build/html/_static/pygments.css +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/docs/_build/html/_static/searchtools.js +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/docs/_build/html/_static/sphinx_highlight.js +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/docs/caching.rst +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/docs/conf.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/docs/index.rst +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/docs/make.bat +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/docs/new-protocols.rst +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/__init__.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/_argspec.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/_config.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/_db/__init__.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/_db/decorators.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/_db/entities.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/_decorators.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/_exceptions.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/_ledgers/__init__.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/_ledgers/portfolio.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/_loaders/__init__.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/_loaders/_nonce.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/_loaders/balances.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/_stableish.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/_submodules.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/_ydb/__init__.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/address.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/constants.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/protocols/__init__.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/protocols/_base.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/protocols/convex.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/protocols/dsr.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/protocols/lending/README.md +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/protocols/lending/__init__.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/protocols/lending/_base.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/protocols/lending/compound.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/protocols/lending/unit.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/protocols/liquity.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/py.typed +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/structs/__init__.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/structs/modified.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/typing/balance/single.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio_scripts/__init__.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio_scripts/_args.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio_scripts/_logging.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio_scripts/docker/.grafana/dashboards/Portfolio/Balances.json +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio_scripts/docker/.grafana/dashboards/dashboards.yaml +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio_scripts/docker/.grafana/datasources/datasources.yml +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio_scripts/docker/__init__.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio_scripts/py.typed +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio_scripts/victoria/__init__.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio_scripts/victoria/types.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio_temp.egg-info/dependency_links.txt +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio_temp.egg-info/entry_points.txt +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio_temp.egg-info/not-zip-safe +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/setup.cfg +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/tests/_test_completeness.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/tests/conftest.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/tests/fixtures.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/tests/protocols/test_external.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/tests/scripts/test_utils.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/tests/test_portfolio.py +0 -0
- {eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/tests/test_typing.py +0 -0
|
@@ -4,6 +4,9 @@ on:
|
|
|
4
4
|
pull_request:
|
|
5
5
|
branches:
|
|
6
6
|
- master
|
|
7
|
+
paths-ignore:
|
|
8
|
+
- '.github/workflows/**'
|
|
9
|
+
- '!.github/workflows/black.yaml'
|
|
7
10
|
|
|
8
11
|
jobs:
|
|
9
12
|
format:
|
|
@@ -11,14 +14,14 @@ jobs:
|
|
|
11
14
|
|
|
12
15
|
steps:
|
|
13
16
|
- name: Checkout code
|
|
14
|
-
uses: actions/checkout@
|
|
17
|
+
uses: actions/checkout@v5
|
|
15
18
|
with:
|
|
16
19
|
ref: ${{ github.head_ref }} # Check out the PR branch
|
|
17
20
|
|
|
18
21
|
- name: Set up Python
|
|
19
|
-
uses: actions/setup-python@
|
|
22
|
+
uses: actions/setup-python@v6
|
|
20
23
|
with:
|
|
21
|
-
python-version: '3.
|
|
24
|
+
python-version: '3.13'
|
|
22
25
|
|
|
23
26
|
- name: Install Black
|
|
24
27
|
run: pip install black
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
name: Compile
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
branches:
|
|
6
|
+
- master
|
|
7
|
+
paths-ignore:
|
|
8
|
+
- '.github/workflows/**'
|
|
9
|
+
- '!.github/workflows/compile.yaml'
|
|
10
|
+
|
|
11
|
+
concurrency:
|
|
12
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
13
|
+
cancel-in-progress: true
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
build-ubuntu:
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
steps:
|
|
19
|
+
- name: Checkout code
|
|
20
|
+
uses: actions/checkout@v5
|
|
21
|
+
with:
|
|
22
|
+
# Check out the PR branch
|
|
23
|
+
ref: ${{ github.head_ref }}
|
|
24
|
+
|
|
25
|
+
- name: Set up Python 3.13
|
|
26
|
+
uses: actions/setup-python@v6
|
|
27
|
+
with:
|
|
28
|
+
python-version: "3.13"
|
|
29
|
+
|
|
30
|
+
- name: Delete existing build files
|
|
31
|
+
run: rm -rf build
|
|
32
|
+
|
|
33
|
+
- name: Install Eth Portfolio
|
|
34
|
+
run: pip install .
|
|
35
|
+
|
|
36
|
+
- name: Normalize C files for diffchecking
|
|
37
|
+
# This makes it much easier to diffcheck changes in the C files
|
|
38
|
+
run: |
|
|
39
|
+
# Insert DIFFCHECK_PLACEHOLDER macro at the top if not present
|
|
40
|
+
for f in build/*.c; do
|
|
41
|
+
if ! grep -q 'DIFFCHECK_PLACEHOLDER' "$f"; then
|
|
42
|
+
sed -i '1i#ifndef DIFFCHECK_PLACEHOLDER\n#define DIFFCHECK_PLACEHOLDER 0\n#endif' "$f"
|
|
43
|
+
fi
|
|
44
|
+
done
|
|
45
|
+
# Replace line number in CPy_AddTraceback with macro
|
|
46
|
+
sed -i 's/\(CPy_AddTraceback([^,]*, *[^,]*, *\)[0-9]\+\(, *[^)]*)\)/\1DIFFCHECK_PLACEHOLDER\2/g' build/*.c
|
|
47
|
+
# Replace index in CPyStatics[...] with macro
|
|
48
|
+
sed -i 's/CPyStatics\[[0-9]\+\]/CPyStatics[DIFFCHECK_PLACEHOLDER]/g' build/*.c
|
|
49
|
+
|
|
50
|
+
- name: Check for changes
|
|
51
|
+
run: |
|
|
52
|
+
if [[ -n $(git status --porcelain) ]]; then
|
|
53
|
+
echo "changes_detected=true" >> $GITHUB_ENV
|
|
54
|
+
else
|
|
55
|
+
echo "changes_detected=false" >> $GITHUB_ENV
|
|
56
|
+
fi
|
|
57
|
+
|
|
58
|
+
- name: Commit changes
|
|
59
|
+
if: env.changes_detected == 'true'
|
|
60
|
+
run: |
|
|
61
|
+
git config --local user.name "github-actions[bot]"
|
|
62
|
+
git config --local user.email "github-actions[bot]@users.noreply.github.com"
|
|
63
|
+
git add .
|
|
64
|
+
git commit -m "chore: compile C files for source control"
|
|
65
|
+
git push
|
{eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/.github/workflows/deploy_docs.yaml
RENAMED
|
@@ -16,12 +16,12 @@ jobs:
|
|
|
16
16
|
runs-on: ubuntu-latest
|
|
17
17
|
steps:
|
|
18
18
|
- name: Check out code
|
|
19
|
-
uses: actions/checkout@
|
|
19
|
+
uses: actions/checkout@v5
|
|
20
20
|
|
|
21
21
|
- name: Set up Python
|
|
22
|
-
uses: actions/setup-python@
|
|
22
|
+
uses: actions/setup-python@v6
|
|
23
23
|
with:
|
|
24
|
-
python-version: '3.
|
|
24
|
+
python-version: '3.12'
|
|
25
25
|
|
|
26
26
|
- name: Install dependencies
|
|
27
27
|
run: |
|
|
@@ -44,21 +44,21 @@ jobs:
|
|
|
44
44
|
BROWNIE_NETWORK_ID=mainnet ETHERSCAN_TOKEN=${{ secrets.ETHERSCAN_TOKEN }} make html
|
|
45
45
|
|
|
46
46
|
- name: Deploy to GitHub Pages
|
|
47
|
-
uses: peaceiris/actions-gh-pages@
|
|
47
|
+
uses: peaceiris/actions-gh-pages@v4
|
|
48
48
|
with:
|
|
49
49
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
50
50
|
publish_dir: ./docs/_build/html
|
|
51
51
|
|
|
52
52
|
- name: Checkout
|
|
53
|
-
uses: actions/checkout@
|
|
53
|
+
uses: actions/checkout@v5
|
|
54
54
|
with:
|
|
55
55
|
ref: gh-pages
|
|
56
56
|
|
|
57
57
|
- name: Setup Pages
|
|
58
|
-
uses: actions/configure-pages@
|
|
58
|
+
uses: actions/configure-pages@v5
|
|
59
59
|
|
|
60
60
|
- name: Upload artifact
|
|
61
|
-
uses: actions/upload-pages-artifact@
|
|
61
|
+
uses: actions/upload-pages-artifact@v4
|
|
62
62
|
with:
|
|
63
63
|
# Upload entire repository
|
|
64
64
|
path: '.'
|
|
@@ -20,13 +20,13 @@ jobs:
|
|
|
20
20
|
|
|
21
21
|
steps:
|
|
22
22
|
- name: Checkout
|
|
23
|
-
uses: actions/checkout@
|
|
23
|
+
uses: actions/checkout@v5
|
|
24
24
|
with:
|
|
25
25
|
fetch-depth: 0
|
|
26
26
|
persist-credentials: false
|
|
27
27
|
|
|
28
28
|
- name: Setup Python (faster than using Python container)
|
|
29
|
-
uses: actions/setup-python@
|
|
29
|
+
uses: actions/setup-python@v6
|
|
30
30
|
with:
|
|
31
31
|
python-version: ${{ matrix.pyversion }}
|
|
32
32
|
|
|
@@ -5,6 +5,11 @@ on:
|
|
|
5
5
|
branches:
|
|
6
6
|
- master
|
|
7
7
|
types: [published]
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
inputs:
|
|
10
|
+
fake_tag:
|
|
11
|
+
description: 'Fake tag name to use for dry run (e.g. v2.3.4)'
|
|
12
|
+
required: true
|
|
8
13
|
|
|
9
14
|
jobs:
|
|
10
15
|
build_wheels:
|
|
@@ -41,15 +46,6 @@ jobs:
|
|
|
41
46
|
cibw_archs_linux: x86_64
|
|
42
47
|
artifact_name: "wheels-ubuntu-latest-musllinux-x64"
|
|
43
48
|
|
|
44
|
-
# ----------------------------------------------------
|
|
45
|
-
# musllinux 32-bit
|
|
46
|
-
# ----------------------------------------------------
|
|
47
|
-
- os: ubuntu-latest
|
|
48
|
-
build_type: musllinux-x86
|
|
49
|
-
cibw_build: "*musllinux*"
|
|
50
|
-
cibw_archs_linux: i686
|
|
51
|
-
artifact_name: "wheels-ubuntu-latest-musllinux-x86"
|
|
52
|
-
|
|
53
49
|
# ----------------------------------------------------
|
|
54
50
|
# macOS (64-bit only)
|
|
55
51
|
# ----------------------------------------------------
|
|
@@ -79,16 +75,27 @@ jobs:
|
|
|
79
75
|
|
|
80
76
|
steps:
|
|
81
77
|
- name: Check out code
|
|
82
|
-
uses: actions/checkout@
|
|
78
|
+
uses: actions/checkout@v5
|
|
83
79
|
with:
|
|
84
80
|
fetch-depth: 0
|
|
85
|
-
|
|
86
|
-
|
|
81
|
+
|
|
82
|
+
# ----------------------------------------------------
|
|
83
|
+
# Extract version from git tag or use fake tag for dry run (strip leading 'v')
|
|
84
|
+
# ----------------------------------------------------
|
|
85
|
+
- name: Extract version from tag
|
|
86
|
+
id: get_version
|
|
87
|
+
shell: bash
|
|
88
|
+
run: |
|
|
89
|
+
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
|
|
90
|
+
echo "version=$(echo '${{ github.event.inputs.fake_tag }}' | sed 's/^v//')" >> $GITHUB_OUTPUT
|
|
91
|
+
else
|
|
92
|
+
echo "version=${GITHUB_REF_NAME#v}" >> $GITHUB_OUTPUT
|
|
93
|
+
fi
|
|
87
94
|
|
|
88
95
|
- name: Set up Python
|
|
89
|
-
uses: actions/setup-python@
|
|
96
|
+
uses: actions/setup-python@v6
|
|
90
97
|
with:
|
|
91
|
-
python-version: "3.
|
|
98
|
+
python-version: "3.13"
|
|
92
99
|
|
|
93
100
|
- name: Install cibuildwheel
|
|
94
101
|
run: |
|
|
@@ -104,13 +111,15 @@ jobs:
|
|
|
104
111
|
CIBW_ARCHS_WINDOWS: ${{ matrix.cibw_archs_windows || '' }}
|
|
105
112
|
# Which wheels to build for Linux (manylinux vs. musllinux)
|
|
106
113
|
CIBW_BUILD: ${{ matrix.cibw_build || '' }}
|
|
107
|
-
#
|
|
108
|
-
|
|
114
|
+
# Use version from git tag (stripped 'v')
|
|
115
|
+
SETUPTOOLS_SCM_PRETEND_VERSION: ${{ steps.get_version.outputs.version }}
|
|
116
|
+
# Pass version into Docker for Linux builds
|
|
117
|
+
CIBW_ENVIRONMENT: "SETUPTOOLS_SCM_PRETEND_VERSION=${{ steps.get_version.outputs.version }}"
|
|
109
118
|
run: |
|
|
110
119
|
python -m cibuildwheel --output-dir wheelhouse
|
|
111
120
|
|
|
112
121
|
- name: Upload wheels
|
|
113
|
-
uses: actions/upload-artifact@
|
|
122
|
+
uses: actions/upload-artifact@v5
|
|
114
123
|
with:
|
|
115
124
|
name: ${{ matrix.artifact_name }}
|
|
116
125
|
path: wheelhouse/*.whl
|
|
@@ -121,16 +130,27 @@ jobs:
|
|
|
121
130
|
runs-on: ubuntu-latest
|
|
122
131
|
steps:
|
|
123
132
|
- name: Check out code
|
|
124
|
-
uses: actions/checkout@
|
|
133
|
+
uses: actions/checkout@v5
|
|
125
134
|
with:
|
|
126
135
|
fetch-depth: 0
|
|
127
|
-
|
|
128
|
-
|
|
136
|
+
|
|
137
|
+
# ----------------------------------------------------
|
|
138
|
+
# Extract version from git tag or use fake tag for dry run (strip leading 'v')
|
|
139
|
+
# ----------------------------------------------------
|
|
140
|
+
- name: Extract version from tag
|
|
141
|
+
id: get_version
|
|
142
|
+
shell: bash
|
|
143
|
+
run: |
|
|
144
|
+
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
|
|
145
|
+
echo "version=$(echo '${{ github.event.inputs.fake_tag }}' | sed 's/^v//')" >> $GITHUB_OUTPUT
|
|
146
|
+
else
|
|
147
|
+
echo "version=${GITHUB_REF_NAME#v}" >> $GITHUB_OUTPUT
|
|
148
|
+
fi
|
|
129
149
|
|
|
130
150
|
- name: Set up Python
|
|
131
|
-
uses: actions/setup-python@
|
|
151
|
+
uses: actions/setup-python@v6
|
|
132
152
|
with:
|
|
133
|
-
python-version: "3.
|
|
153
|
+
python-version: "3.13"
|
|
134
154
|
|
|
135
155
|
- name: Install dependencies
|
|
136
156
|
run: |
|
|
@@ -138,58 +158,55 @@ jobs:
|
|
|
138
158
|
pip install setuptools wheel twine mypy[mypyc] types-aiofiles
|
|
139
159
|
|
|
140
160
|
- name: Build sdist
|
|
141
|
-
|
|
142
|
-
|
|
161
|
+
env:
|
|
162
|
+
# Use version from git tag (stripped 'v')
|
|
163
|
+
SETUPTOOLS_SCM_PRETEND_VERSION: ${{ steps.get_version.outputs.version }}
|
|
164
|
+
run: python setup.py sdist
|
|
143
165
|
|
|
144
166
|
# ----------------------------------------------------
|
|
145
167
|
# Download wheels built on each runner
|
|
146
168
|
# ----------------------------------------------------
|
|
147
169
|
- name: Download manylinux 64-bit wheels
|
|
148
|
-
uses: actions/download-artifact@
|
|
170
|
+
uses: actions/download-artifact@v6
|
|
149
171
|
with:
|
|
150
172
|
name: "wheels-ubuntu-latest-manylinux-x64"
|
|
151
173
|
path: wheelhouse/linux-many-x64
|
|
152
174
|
|
|
153
175
|
- name: Download manylinux 32-bit wheels
|
|
154
|
-
uses: actions/download-artifact@
|
|
176
|
+
uses: actions/download-artifact@v6
|
|
155
177
|
with:
|
|
156
178
|
name: "wheels-ubuntu-latest-manylinux-x86"
|
|
157
179
|
path: wheelhouse/linux-many-x86
|
|
158
180
|
|
|
159
181
|
- name: Download musllinux 64-bit wheels
|
|
160
|
-
uses: actions/download-artifact@
|
|
182
|
+
uses: actions/download-artifact@v6
|
|
161
183
|
with:
|
|
162
184
|
name: "wheels-ubuntu-latest-musllinux-x64"
|
|
163
185
|
path: wheelhouse/linux-musl-x64
|
|
164
186
|
|
|
165
|
-
- name: Download musllinux 32-bit wheels
|
|
166
|
-
uses: actions/download-artifact@v4
|
|
167
|
-
with:
|
|
168
|
-
name: "wheels-ubuntu-latest-musllinux-x86"
|
|
169
|
-
path: wheelhouse/linux-musl-x86
|
|
170
|
-
|
|
171
187
|
- name: Download macOS wheels
|
|
172
|
-
uses: actions/download-artifact@
|
|
188
|
+
uses: actions/download-artifact@v6
|
|
173
189
|
with:
|
|
174
190
|
name: "wheels-macos-latest"
|
|
175
191
|
path: wheelhouse/macos
|
|
176
192
|
|
|
177
193
|
- name: Download Windows 64-bit wheels
|
|
178
|
-
uses: actions/download-artifact@
|
|
194
|
+
uses: actions/download-artifact@v6
|
|
179
195
|
with:
|
|
180
196
|
name: "wheels-windows-latest-x64"
|
|
181
197
|
path: wheelhouse/windows-x64
|
|
182
198
|
|
|
183
199
|
- name: Download Windows 32-bit wheels
|
|
184
|
-
uses: actions/download-artifact@
|
|
200
|
+
uses: actions/download-artifact@v6
|
|
185
201
|
with:
|
|
186
202
|
name: "wheels-windows-latest-x86"
|
|
187
203
|
path: wheelhouse/windows-x86
|
|
188
204
|
|
|
189
205
|
# ----------------------------------------------------
|
|
190
|
-
# Publish
|
|
206
|
+
# Publish sdist and wheels to PyPI
|
|
191
207
|
# ----------------------------------------------------
|
|
192
208
|
- name: Publish sdist and wheels to PyPI
|
|
209
|
+
if: ${{ github.event_name != 'workflow_dispatch' }}
|
|
193
210
|
env:
|
|
194
211
|
TWINE_USERNAME: __token__
|
|
195
212
|
TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
|
|
@@ -199,7 +216,6 @@ jobs:
|
|
|
199
216
|
wheelhouse/linux-many-x64/*.whl \
|
|
200
217
|
wheelhouse/linux-many-x86/*.whl \
|
|
201
218
|
wheelhouse/linux-musl-x64/*.whl \
|
|
202
|
-
wheelhouse/linux-musl-x86/*.whl \
|
|
203
219
|
wheelhouse/macos/*.whl \
|
|
204
220
|
wheelhouse/windows-x64/*.whl \
|
|
205
221
|
wheelhouse/windows-x86/*.whl
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: eth_portfolio_temp
|
|
3
|
+
Version: 0.2.14
|
|
4
|
+
Summary: eth-portfolio makes it easy to analyze your portfolio.
|
|
5
|
+
Home-page: https://github.com/BobTheBuidler/eth-portfolio
|
|
6
|
+
Author: BobTheBuidler
|
|
7
|
+
Author-email: bobthebuidlerdefi@gmail.com
|
|
8
|
+
Requires-Python: >=3.10,<3.14
|
|
9
|
+
Requires-Dist: checksum_dict>=2.1.7
|
|
10
|
+
Requires-Dist: dank_mids>=4.20.154
|
|
11
|
+
Requires-Dist: eth-brownie<1.23,>=1.22.0.dev0
|
|
12
|
+
Requires-Dist: eth_retry<1,>=0.3.4
|
|
13
|
+
Requires-Dist: evmspec>=0.4.1
|
|
14
|
+
Requires-Dist: ez-a-sync>=0.32.27
|
|
15
|
+
Requires-Dist: faster-async-lru==2.0.5
|
|
16
|
+
Requires-Dist: faster-eth-utils
|
|
17
|
+
Requires-Dist: numpy<3
|
|
18
|
+
Requires-Dist: pandas<3,>=1.4.3
|
|
19
|
+
Requires-Dist: typed-envs>=0.0.9
|
|
20
|
+
Requires-Dist: ypricemagic<5,>=4.10.0
|
|
21
|
+
Dynamic: author
|
|
22
|
+
Dynamic: author-email
|
|
23
|
+
Dynamic: home-page
|
|
24
|
+
Dynamic: requires-dist
|
|
25
|
+
Dynamic: requires-python
|
|
26
|
+
Dynamic: summary
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
Use `eth-portfolio` to output information about your portfolio in a streamlined, speed-optimized way.
|
|
3
3
|
|
|
4
4
|
### Requirements
|
|
5
|
-
- Python 3.
|
|
6
|
-
- At least 16GB of RAM.
|
|
5
|
+
- Python 3.10 or higher.
|
|
6
|
+
- At least 16GB of RAM, 32GB for Base chain.
|
|
7
7
|
|
|
8
8
|
### Prerequisites
|
|
9
9
|
- First, you will need to bring your own archive node. This can be one you run yourself, or one from one of the common providers (Tenderly, Alchemy, QuickNode, etc.)
|
|
@@ -33,6 +33,9 @@ The Portfolio Exporter supports several command-line options to customize its be
|
|
|
33
33
|
- ``--interval <interval>``
|
|
34
34
|
The time interval between datapoints. default: 6h
|
|
35
35
|
|
|
36
|
+
- ``--concurrency <concurrency>``
|
|
37
|
+
The max number of historical blocks to export concurrently. default: 40
|
|
38
|
+
|
|
36
39
|
- ``--first-tx-block <block>``
|
|
37
40
|
The block of your portfolio's first transaction, if known. This value, if provided, allows us to speed up processing of your data by limiting the block range we need to query. If not provided, the whole blockchain will be scanned. default: 0
|
|
38
41
|
|
|
@@ -30,7 +30,7 @@ def cache_to_disk(fn: Callable[P, T]) -> Callable[P, T]:
|
|
|
30
30
|
cache_path_for_fn = f"{BASE_PATH}{fn.__module__.replace('.', '/')}/{name}"
|
|
31
31
|
logger = getLogger(f"eth_portfolio.cache_to_disk.{name}")
|
|
32
32
|
|
|
33
|
-
def get_cache_file_path(args, kwargs):
|
|
33
|
+
def get_cache_file_path(args: tuple[Any, ...], kwargs: dict[str, Any]) -> str:
|
|
34
34
|
# Create a unique filename based on the function arguments
|
|
35
35
|
key = md5(dumps((args, sorted(kwargs.items())))).hexdigest()
|
|
36
36
|
return join(cache_path_for_fn, f"{key}.json")
|
|
@@ -46,7 +46,7 @@ def cache_to_disk(fn: Callable[P, T]) -> Callable[P, T]:
|
|
|
46
46
|
|
|
47
47
|
queue: PriorityQueue = PriorityQueue()
|
|
48
48
|
|
|
49
|
-
async def cache_deco_worker_coro(func) -> NoReturn:
|
|
49
|
+
async def cache_deco_worker_coro(func: Callable[..., Any]) -> NoReturn:
|
|
50
50
|
try:
|
|
51
51
|
while True:
|
|
52
52
|
_, fut, cache_path, args, kwargs = await queue.get()
|
|
@@ -7,8 +7,7 @@ import evmspec
|
|
|
7
7
|
import y._db.common
|
|
8
8
|
import y._db.config as config
|
|
9
9
|
from a_sync import PruningThreadPoolExecutor, a_sync
|
|
10
|
-
from
|
|
11
|
-
from eth_typing import ChecksumAddress
|
|
10
|
+
from eth_typing import ChecksumAddress, HexAddress
|
|
12
11
|
from evmspec.data import _decode_hook
|
|
13
12
|
from logging import getLogger
|
|
14
13
|
from msgspec import ValidationError, json
|
|
@@ -32,7 +31,6 @@ from eth_portfolio._db.decorators import break_locks, requery_objs_on_diff_tx_er
|
|
|
32
31
|
from eth_portfolio._db.entities import (
|
|
33
32
|
AddressExtended,
|
|
34
33
|
BlockExtended,
|
|
35
|
-
ContractExtended,
|
|
36
34
|
TokenExtended,
|
|
37
35
|
)
|
|
38
36
|
from eth_portfolio._decimal import Decimal
|
|
@@ -42,7 +40,7 @@ from eth_portfolio.typing import _P, _T, Fn
|
|
|
42
40
|
logger = getLogger(__name__)
|
|
43
41
|
|
|
44
42
|
|
|
45
|
-
def __bind():
|
|
43
|
+
def __bind() -> None:
|
|
46
44
|
try:
|
|
47
45
|
db.bind(**config.connection_settings)
|
|
48
46
|
except BindingError as e:
|
|
@@ -176,7 +174,7 @@ def ensure_block(block: int) -> None:
|
|
|
176
174
|
# )
|
|
177
175
|
|
|
178
176
|
|
|
179
|
-
def is_token(address) -> bool:
|
|
177
|
+
def is_token(address: ChecksumAddress) -> bool:
|
|
180
178
|
if address == EEE_ADDRESS:
|
|
181
179
|
return False
|
|
182
180
|
# with suppress(NonStandardERC20):
|
|
@@ -188,7 +186,7 @@ def is_token(address) -> bool:
|
|
|
188
186
|
return get_event_loop().run_until_complete(_is_token(address))
|
|
189
187
|
|
|
190
188
|
|
|
191
|
-
async def _is_token(address) -> bool:
|
|
189
|
+
async def _is_token(address: HexAddress) -> bool:
|
|
192
190
|
# just breaking a weird lock, dont mind me
|
|
193
191
|
if retval := await get_event_loop().run_in_executor(process, __is_token, address): # type: ignore [name-defined]
|
|
194
192
|
logger.debug("%s is token")
|
|
@@ -197,7 +195,7 @@ async def _is_token(address) -> bool:
|
|
|
197
195
|
return retval
|
|
198
196
|
|
|
199
197
|
|
|
200
|
-
def __is_token(address) -> bool:
|
|
198
|
+
def __is_token(address: HexAddress) -> bool:
|
|
201
199
|
with suppress(NonStandardERC20):
|
|
202
200
|
erc = ERC20(address, asynchronous=True)
|
|
203
201
|
if all(
|
|
@@ -322,7 +320,7 @@ async def get_transaction(sender: ChecksumAddress, nonce: int) -> Optional[Trans
|
|
|
322
320
|
_decoded = 0
|
|
323
321
|
|
|
324
322
|
|
|
325
|
-
async def _yield_to_loop():
|
|
323
|
+
async def _yield_to_loop() -> None:
|
|
326
324
|
"""dont let the event loop get congested, let your rpc begin work asap"""
|
|
327
325
|
global _decoded
|
|
328
326
|
_decoded += 1
|
|
@@ -3,6 +3,7 @@ import logging
|
|
|
3
3
|
from typing import Union
|
|
4
4
|
|
|
5
5
|
from evmspec.data import Wei
|
|
6
|
+
from typing_extensions import Self
|
|
6
7
|
|
|
7
8
|
|
|
8
9
|
logger = logging.getLogger(__name__)
|
|
@@ -69,61 +70,61 @@ class Decimal(decimal.Decimal):
|
|
|
69
70
|
|
|
70
71
|
return string
|
|
71
72
|
|
|
72
|
-
def __add__(self, other):
|
|
73
|
+
def __add__(self, other) -> Self:
|
|
73
74
|
try:
|
|
74
75
|
return type(self)(super().__add__(other))
|
|
75
76
|
except TypeError as e:
|
|
76
77
|
raise TypeError(str(e), other) from e.__cause__
|
|
77
78
|
|
|
78
|
-
def __radd__(self, other):
|
|
79
|
+
def __radd__(self, other) -> Self:
|
|
79
80
|
try:
|
|
80
81
|
return type(self)(super().__radd__(other))
|
|
81
82
|
except TypeError as e:
|
|
82
83
|
raise TypeError(str(e), other) from e.__cause__
|
|
83
84
|
|
|
84
|
-
def __sub__(self, other):
|
|
85
|
+
def __sub__(self, other) -> Self:
|
|
85
86
|
try:
|
|
86
87
|
return type(self)(super().__sub__(other))
|
|
87
88
|
except TypeError as e:
|
|
88
89
|
raise TypeError(str(e), other) from e.__cause__
|
|
89
90
|
|
|
90
|
-
def __rsub__(self, other):
|
|
91
|
+
def __rsub__(self, other) -> Self:
|
|
91
92
|
try:
|
|
92
93
|
return type(self)(super().__rsub__(other))
|
|
93
94
|
except TypeError as e:
|
|
94
95
|
raise TypeError(str(e), other) from e.__cause__
|
|
95
96
|
|
|
96
|
-
def __mul__(self, other):
|
|
97
|
+
def __mul__(self, other) -> Self:
|
|
97
98
|
try:
|
|
98
99
|
return type(self)(super().__mul__(other))
|
|
99
100
|
except TypeError as e:
|
|
100
101
|
raise TypeError(str(e), other) from e.__cause__
|
|
101
102
|
|
|
102
|
-
def __rmul__(self, other):
|
|
103
|
+
def __rmul__(self, other) -> Self:
|
|
103
104
|
try:
|
|
104
105
|
return type(self)(super().__rmul__(other))
|
|
105
106
|
except TypeError as e:
|
|
106
107
|
raise TypeError(str(e), other) from e.__cause__
|
|
107
108
|
|
|
108
|
-
def __truediv__(self, other):
|
|
109
|
+
def __truediv__(self, other) -> Self:
|
|
109
110
|
try:
|
|
110
111
|
return type(self)(super().__truediv__(other))
|
|
111
112
|
except TypeError as e:
|
|
112
113
|
raise TypeError(str(e), other) from e.__cause__
|
|
113
114
|
|
|
114
|
-
def __rtruediv__(self, other):
|
|
115
|
+
def __rtruediv__(self, other) -> Self:
|
|
115
116
|
try:
|
|
116
117
|
return type(self)(super().__rtruediv__(other))
|
|
117
118
|
except TypeError as e:
|
|
118
119
|
raise TypeError(str(e), other) from e.__cause__
|
|
119
120
|
|
|
120
|
-
def __floordiv__(self, other):
|
|
121
|
+
def __floordiv__(self, other) -> Self:
|
|
121
122
|
try:
|
|
122
123
|
return type(self)(super().__floordiv__(other))
|
|
123
124
|
except TypeError as e:
|
|
124
125
|
raise TypeError(str(e), other) from e.__cause__
|
|
125
126
|
|
|
126
|
-
def __rfloordiv__(self, other):
|
|
127
|
+
def __rfloordiv__(self, other) -> Self:
|
|
127
128
|
try:
|
|
128
129
|
return type(self)(super().__rfloordiv__(other))
|
|
129
130
|
except TypeError as e:
|
{eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/_ledgers/address.py
RENAMED
|
@@ -37,13 +37,13 @@ import dank_mids
|
|
|
37
37
|
import eth_retry
|
|
38
38
|
from a_sync.asyncio import sleep0 as yield_to_loop
|
|
39
39
|
from aiohttp import ClientResponseError
|
|
40
|
-
from async_lru import alru_cache
|
|
41
40
|
from brownie import chain
|
|
42
41
|
from dank_mids.eth import TraceFilterParams
|
|
43
42
|
from eth_typing import BlockNumber, ChecksumAddress
|
|
44
43
|
from evmspec import FilterTrace
|
|
45
44
|
from evmspec.structs.receipt import Status
|
|
46
45
|
from evmspec.structs.trace import call, reward
|
|
46
|
+
from faster_async_lru import alru_cache
|
|
47
47
|
from typing_extensions import Unpack
|
|
48
48
|
from pandas import DataFrame # type: ignore
|
|
49
49
|
from tqdm import tqdm
|
{eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/_loaders/token_transfer.py
RENAMED
|
@@ -7,10 +7,10 @@ from logging import getLogger
|
|
|
7
7
|
from typing import Final, Optional, Set
|
|
8
8
|
|
|
9
9
|
from a_sync import create_task, gather
|
|
10
|
-
from async_lru import alru_cache
|
|
11
10
|
from dank_mids import BlockSemaphore
|
|
12
11
|
from eth_typing import ChecksumAddress
|
|
13
12
|
from evmspec.data import TransactionIndex
|
|
13
|
+
from faster_async_lru import alru_cache
|
|
14
14
|
from msgspec import Struct, ValidationError
|
|
15
15
|
from msgspec.json import decode
|
|
16
16
|
from pony.orm import TransactionIntegrityError, UnexpectedError
|
{eth_portfolio_temp-0.1.1.dev0 → eth_portfolio_temp-0.2.14}/eth_portfolio/_loaders/transaction.py
RENAMED
|
@@ -15,9 +15,9 @@ import eth_retry
|
|
|
15
15
|
import evmspec
|
|
16
16
|
import msgspec
|
|
17
17
|
from a_sync import SmartProcessingQueue
|
|
18
|
-
from async_lru import alru_cache
|
|
19
18
|
from eth_typing import ChecksumAddress
|
|
20
19
|
from evmspec import data
|
|
20
|
+
from faster_async_lru import alru_cache
|
|
21
21
|
from pony.orm import TransactionIntegrityError
|
|
22
22
|
from y import get_price
|
|
23
23
|
from y._decorators import stuck_coro_debugger
|