eth-portfolio-temp 0.2.1.dev0__cp311-cp311-macosx_11_0_arm64.whl → 0.2.2.dev0__cp311-cp311-macosx_11_0_arm64.whl

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.

Potentially problematic release.


This version of eth-portfolio-temp might be problematic. Click here for more details.

Binary file
@@ -40,8 +40,10 @@ class ExportablePortfolio(Portfolio):
40
40
  def __init__(
41
41
  self,
42
42
  addresses: Addresses,
43
+ *,
43
44
  start_block: int = 0,
44
45
  label: str = _DEFAULT_LABEL,
46
+ concurrency: int = 60,
45
47
  load_prices: bool = True,
46
48
  get_bucket: Callable[[ChecksumAddress], Awaitable[str]] = get_token_bucket,
47
49
  num_workers_transactions: int = 1000,
@@ -51,6 +53,7 @@ class ExportablePortfolio(Portfolio):
51
53
  addresses, start_block, label, load_prices, num_workers_transactions, asynchronous
52
54
  )
53
55
  self.get_bucket = get_bucket
56
+ self._semaphore = a_sync.Semaphore(concurrency)
54
57
 
55
58
  @cached_property
56
59
  def _data_queries(self) -> Tuple[str, str]:
@@ -88,36 +91,36 @@ class ExportablePortfolio(Portfolio):
88
91
  except Exception as e:
89
92
  log_error("Error processing %s:", dt, exc_info=True)
90
93
 
91
- @a_sync.Semaphore(60)
92
94
  async def get_data_for_export(self, block: BlockNumber, ts: datetime) -> List[victoria.Metric]:
93
- print(f"exporting {ts} for {self.label}")
94
- start = datetime.now(tz=timezone.utc)
95
-
96
- metrics_to_export = []
97
- data: PortfolioBalances = await self.describe(block, sync=False)
98
-
99
- for wallet, wallet_data in dict.items(data):
100
- for section, section_data in wallet_data.items():
101
- if isinstance(section_data, TokenBalances):
102
- for token, bals in dict.items(section_data):
103
- metrics_to_export.extend(
104
- await self.__process_token(ts, section, wallet, token, bals)
105
- )
106
- elif isinstance(section_data, RemoteTokenBalances):
107
- if section == "external":
108
- section = "assets"
109
- for protocol, token_bals in section_data.items():
110
- for token, bals in dict.items(token_bals):
95
+ async with self._semaphore:
96
+ print(f"exporting {ts} for {self.label}")
97
+ start = datetime.now(tz=timezone.utc)
98
+
99
+ metrics_to_export = []
100
+ data: PortfolioBalances = await self.describe(block, sync=False)
101
+
102
+ for wallet, wallet_data in dict.items(data):
103
+ for section, section_data in wallet_data.items():
104
+ if isinstance(section_data, TokenBalances):
105
+ for token, bals in dict.items(section_data):
111
106
  metrics_to_export.extend(
112
- await self.__process_token(
113
- ts, section, wallet, token, bals, protocol=protocol
114
- )
107
+ await self.__process_token(ts, section, wallet, token, bals)
115
108
  )
116
- else:
117
- raise NotImplementedError()
109
+ elif isinstance(section_data, RemoteTokenBalances):
110
+ if section == "external":
111
+ section = "assets"
112
+ for protocol, token_bals in section_data.items():
113
+ for token, bals in dict.items(token_bals):
114
+ metrics_to_export.extend(
115
+ await self.__process_token(
116
+ ts, section, wallet, token, bals, protocol=protocol
117
+ )
118
+ )
119
+ else:
120
+ raise NotImplementedError()
118
121
 
119
- print(f"got data for {ts} in {datetime.now(tz=timezone.utc) - start}")
120
- return metrics_to_export
122
+ print(f"got data for {ts} in {datetime.now(tz=timezone.utc) - start}")
123
+ return metrics_to_export
121
124
 
122
125
  def __get_data_exists_coros(self, dt: datetime) -> Iterator[str]:
123
126
  for query in self._data_queries:
@@ -26,7 +26,11 @@ async def export_balances(args: Namespace) -> None:
26
26
 
27
27
  interval = parse_timedelta(args.interval)
28
28
  portfolio = ExportablePortfolio(
29
- args.wallet, label=args.label, start_block=args.first_tx_block, load_prices=False
29
+ args.wallet,
30
+ label=args.label,
31
+ start_block=args.first_tx_block,
32
+ concurrency=args.concurrency,
33
+ load_prices=False,
30
34
  )
31
35
 
32
36
  if export_start_block := args.export_start_block or args.first_tx_block:
@@ -54,6 +54,12 @@ export_parser.add_argument(
54
54
  help="The time interval between datapoints. default: 6h",
55
55
  default="6h",
56
56
  )
57
+ export_parser.add_argument(
58
+ "--concurrency",
59
+ type=int,
60
+ help="The max number of historical blocks to export concurrently. default: 60",
61
+ default=60,
62
+ )
57
63
  export_parser.add_argument(
58
64
  "--first-tx-block",
59
65
  type=int,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: eth_portfolio_temp
3
- Version: 0.2.1.dev0
3
+ Version: 0.2.2.dev0
4
4
  Summary: eth-portfolio makes it easy to analyze your portfolio.
5
5
  Home-page: https://github.com/BobTheBuidler/eth-portfolio
6
6
  Author: BobTheBuidler
@@ -1,34 +1,39 @@
1
- 295eace8438df6ec133b__mypyc.cpython-311-darwin.so,sha256=C9jQ3bC-lY7wr7YFS2SeWcJaZGULK1DsO4nXC0SM7pk,651696
1
+ 295eace8438df6ec133b__mypyc.cpython-311-darwin.so,sha256=Z1qDJVa1N3Z9C6e1tAXbinljmmnz0ak1twRXkY4FY8E,652256
2
+ eth_portfolio_temp-0.2.2.dev0.dist-info/RECORD,,
3
+ eth_portfolio_temp-0.2.2.dev0.dist-info/WHEEL,sha256=sunMa2yiYbrNLGeMVDqEA0ayyJbHlex7SCn1TZrEq60,136
4
+ eth_portfolio_temp-0.2.2.dev0.dist-info/entry_points.txt,sha256=yqoC6X3LU1NA_-oJ6mloEYEPNmS-0hPS9OtEwgIeDGU,66
5
+ eth_portfolio_temp-0.2.2.dev0.dist-info/top_level.txt,sha256=CmTLi8Lvs3RulV5ZNdziaDVvF_WRsgRpM17GSMECxrg,64
6
+ eth_portfolio_temp-0.2.2.dev0.dist-info/METADATA,sha256=O5Y4EOxRYl5K1a1VJU_lRk_Ak1bEn-shaJLH3whBfB4,779
2
7
  eth_portfolio/address.py,sha256=LvBh4Vp2DBC3gQ0WD-TZ6jfe9s6FZbET1krYG9_KMAA,14139
3
8
  eth_portfolio/_cache.py,sha256=PYkR-yExjuwd_t7swv4euxL2daJ-VFwh3EMb3MciRJE,4745
4
9
  eth_portfolio/_argspec.py,sha256=VzUZkbDkmOSgNUZBGbGblqtxBfDcmBAB89dY2OX0j-U,1595
5
- eth_portfolio/_argspec.cpython-311-darwin.so,sha256=0lEApMaoXttG13nbQhnrM3BWKr1N1TxotiDzF1osNf4,50640
6
- eth_portfolio/_config.cpython-311-darwin.so,sha256=WI8HwiuePwCxmHxztGYFrIBlZ2WTQtoiI3HV3IVJuWE,50640
10
+ eth_portfolio/_argspec.cpython-311-darwin.so,sha256=WrI3FvMHNtc_eXshwkxfrK9bI-_7kmn9_TpKYvjPaeA,50640
11
+ eth_portfolio/_config.cpython-311-darwin.so,sha256=-ComUA65XV1I3x7u9hBtYsKwM9hhf2bxMyhoR-jfZrI,50640
7
12
  eth_portfolio/_submodules.py,sha256=J8ht9bAAvblUXqwOGN7UIOXUPxrTiq7m1RWiB0-ObaE,2190
8
13
  eth_portfolio/constants.py,sha256=LS9H2P_Qfcreb6z6NknErxvq6OAtIHbHykXy0spol9E,3659
9
- eth_portfolio/_stableish.cpython-311-darwin.so,sha256=TZRaEr8dzTVvZEupX0ZZiPGT3fmYwjV6odOwlpCDqyI,50656
14
+ eth_portfolio/_stableish.cpython-311-darwin.so,sha256=Xwklwlcx_At7coVMDUZsJ4w_A21gLJf9gObEVQF-088,50656
10
15
  eth_portfolio/__init__.py,sha256=0sO4cSJaLYwJfnfVOJRFw7p5_Lzhsr95YuJ1aNQM83A,500
11
16
  eth_portfolio/_decimal.py,sha256=nuUl6DZHCtrbBN7snwvs4LLaoJ5k7mn3dt4qmlFCkTU,4731
12
17
  eth_portfolio/buckets.py,sha256=QwdqWzW9iWBmRcJ2aktRtL-obvtBnND179krY5ISbhY,6695
13
- eth_portfolio/constants.cpython-311-darwin.so,sha256=n4PYxEdW82fKuht61a6MzPD2WYbe_2jtlrrToF9mnq8,50656
18
+ eth_portfolio/constants.cpython-311-darwin.so,sha256=iw81wCF-VgtPhuxpVtZIY8Nf48ygMZjtXzuVFp5qbg4,50656
14
19
  eth_portfolio/_decorators.py,sha256=_ZSurUFEIwZRiMFMhLcIXkD-Ey1CqfBqGaE24hLzOuA,2815
15
20
  eth_portfolio/_stableish.py,sha256=VTv69Q91AHxbNbbY0LB4PFwKEseHdkE4_6fLPKH1uW0,2021
16
21
  eth_portfolio/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
22
  eth_portfolio/_shitcoins.py,sha256=FrqttZzQdheTAabdIK0oVHayqHF0UkLQLEiMz8njQe0,15563
18
23
  eth_portfolio/_config.py,sha256=mw-OA3M8rUA2hqy5wNt30AZRHkWFgR8K2sJg0o5Baxg,98
19
- eth_portfolio/_shitcoins.cpython-311-darwin.so,sha256=PPEQEMAmtV-4nKskgRDaUG9IHtbtP-t9Tash1fdL6Fs,50656
24
+ eth_portfolio/_shitcoins.cpython-311-darwin.so,sha256=BnJCYfPThWFPE8f5byozB8Hw8r_jlOi_kd3fnzOUuGA,50656
20
25
  eth_portfolio/_exceptions.py,sha256=bw3IdXhqrWxeFqYLm7pJZqRHKZas_cCg8A5Ih1WQEqQ,2433
21
26
  eth_portfolio/portfolio.py,sha256=KljK3FZQMtRQLs1D-HHgCN-DVoZ6ZzEdmclmF3__oz0,24243
22
27
  eth_portfolio/_utils.py,sha256=10In2lr0QmfiavyeA4Z8wDTuujRVmjcc0cd-o71JEBg,7742
23
28
  eth_portfolio/_loaders/transaction.py,sha256=FEYdoNDCgD6-mqZT9MuyYIEkdhG3iUwyNeMmqjpMGJw,9146
24
29
  eth_portfolio/_loaders/__init__.py,sha256=lb45_0ak32Z7N3-Nx1CAoRKiZ1_w-_YGbmSCNuunro8,1702
25
- eth_portfolio/_loaders/_nonce.cpython-311-darwin.so,sha256=BCYukDEQRLey3iLVZEMldBcFMeNimueL9PPRvAOHsWM,50656
30
+ eth_portfolio/_loaders/_nonce.cpython-311-darwin.so,sha256=V-astQHvOKNi2iNG8MQ_HtDelf5d-UuEFykmygZkl5E,50656
26
31
  eth_portfolio/_loaders/_nonce.py,sha256=cx0EjTAhVU2EudMKSO-7-t1jl3y4dYn6as4XiY6KyS8,6285
27
- eth_portfolio/_loaders/utils.cpython-311-darwin.so,sha256=Uf35-o-bvxYnCAi36hD16taH8fNZLw5xglhkhsGdogg,50648
32
+ eth_portfolio/_loaders/utils.cpython-311-darwin.so,sha256=YWmV_kr4mjuQsE2gWGhYdPWa1OiamudXKgB_pJC26S8,50648
28
33
  eth_portfolio/_loaders/utils.py,sha256=my3Wg2Ip5gSWuzAWcoLQQEmVmAPhIHbBzQQc0iP1iCA,2258
29
34
  eth_portfolio/_loaders/balances.py,sha256=BTWfkJIoSraUMe94Wuj8NPyg5EO0OByIjbXu7j6PZEo,3132
30
35
  eth_portfolio/_loaders/token_transfer.py,sha256=MEw95D2iKBYa_9vIatCHJGe7zEJuYUEC8P1mTjjRXlo,8524
31
- eth_portfolio/_loaders/balances.cpython-311-darwin.so,sha256=lfYz4ix4pjr1BeHQhbPRSQ0BhOy_0t9qGT8s6dkyLjE,50656
36
+ eth_portfolio/_loaders/balances.cpython-311-darwin.so,sha256=44hY0CaI1RkZ0ibpFVCUurF5nLesKIQT2gaAtUsjK6I,50656
32
37
  eth_portfolio/_ydb/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
38
  eth_portfolio/_ydb/token_transfers.py,sha256=aKaYSDnJehEcDb_c6YTmcKZxSfZ1jwHMXMOAmE8XH30,5152
34
39
  eth_portfolio/_db/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -55,27 +60,22 @@ eth_portfolio/protocols/lending/__init__.py,sha256=BZtCOglz6R12wqETlECbCEITdtIT9
55
60
  eth_portfolio/protocols/lending/README.md,sha256=OhZfsW8e-aD-q02g0maG9QGgW0IietkDRZc7PBakBvc,493
56
61
  eth_portfolio/protocols/lending/compound.py,sha256=bqnIevm7NWhk6nMfkMZUKlQuVWr-tXnuntX-4De1YZM,7252
57
62
  eth_portfolio/protocols/lending/unit.py,sha256=7oRvIkoKUm8IOnDv59pILSSJWFNNjwr4CR1gg2psW9M,1965
58
- eth_portfolio_temp-0.2.1.dev0.dist-info/RECORD,,
59
- eth_portfolio_temp-0.2.1.dev0.dist-info/WHEEL,sha256=sunMa2yiYbrNLGeMVDqEA0ayyJbHlex7SCn1TZrEq60,136
60
- eth_portfolio_temp-0.2.1.dev0.dist-info/entry_points.txt,sha256=yqoC6X3LU1NA_-oJ6mloEYEPNmS-0hPS9OtEwgIeDGU,66
61
- eth_portfolio_temp-0.2.1.dev0.dist-info/top_level.txt,sha256=CmTLi8Lvs3RulV5ZNdziaDVvF_WRsgRpM17GSMECxrg,64
62
- eth_portfolio_temp-0.2.1.dev0.dist-info/METADATA,sha256=5GTbcM4x4Qh82t2ZCdoMIFyvWiUmozo54sjQJxdp4QA,779
63
63
  eth_portfolio_scripts/_logging.py,sha256=B_rQMYt_1PhpwCOLBRpkKK6M1ljcF0wAIgqfPIsFUGU,354
64
64
  eth_portfolio_scripts/_args.py,sha256=k6J6XkRe1VuN1DiyGuXLCR7NBSvzH5jnVChfzodKuB8,656
65
65
  eth_portfolio_scripts/__init__.py,sha256=TC5c4WZdzSHhTIBYuwzrAyzFuGzBmHiDX_g6ghO09jQ,261
66
- eth_portfolio_scripts/_portfolio.py,sha256=cv4Qpb3EdwhO2sZEOnHYFWOHaoFo6wwt3nddyfDBYv0,6724
66
+ eth_portfolio_scripts/_portfolio.py,sha256=36n8DE9OfHvdF0ez12yzWpxI7at6_eo3eno7V_YYu3A,6932
67
67
  eth_portfolio_scripts/py.typed,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
68
- eth_portfolio_scripts/balances.py,sha256=o94uA4FVgPE-chbaoQgQazfXQ0O8k6W_yk9JY2bgRpQ,1524
69
- eth_portfolio_scripts/main.py,sha256=A7N78d2hxoU-Xu-dITCRqZ7yRL2l5r26WWzXzMdbeYo,3520
70
- eth_portfolio_scripts/balances.cpython-311-darwin.so,sha256=xU-z4WTkUkp8vVzlgTK3j0EsM_tCKJtbo_Gc-2oQX-A,50656
68
+ eth_portfolio_scripts/balances.py,sha256=m0w2SbFChvOAnxUIKavgdnaq-DS01KimzDqmFV5apJs,1587
69
+ eth_portfolio_scripts/main.py,sha256=vafXy4JvNWrP203AgCRcSKHMsOSCC7VVj9zBd_BFYZU,3685
70
+ eth_portfolio_scripts/balances.cpython-311-darwin.so,sha256=OBt3KFX9HAccPvWG9Op1woIf2KosSQmFBp-8gR61WSk,50656
71
71
  eth_portfolio_scripts/_utils.py,sha256=qyct1Mwf2-1DYj7BUWt2bocUfGKMap1l9sxUfHAjER0,2538
72
72
  eth_portfolio_scripts/docker/docker-compose.yaml,sha256=pQ4eesSfMtcb9muDFT5TFDqZty15BoC2Rrd8HY0LS04,1809
73
73
  eth_portfolio_scripts/docker/docker_compose.py,sha256=K7_Y_8NeN5s0pb9WUamgfi9OppjpaU0Mlz2nDzewcRA,2226
74
74
  eth_portfolio_scripts/docker/check.py,sha256=E6_Ar4dr6HfVAgpwoDPcObIolikHKQr8VFkH01sOuIM,1745
75
- eth_portfolio_scripts/docker/docker_compose.cpython-311-darwin.so,sha256=w4axVhiuGSJky8v_Hy8e8lXWkbxm7t8th_nEYo2kUOs,50712
75
+ eth_portfolio_scripts/docker/docker_compose.cpython-311-darwin.so,sha256=N7ML3bfrW0e63v2isYRdC5rr6bIS5kTha2p81_sK4qk,50712
76
76
  eth_portfolio_scripts/docker/__init__.py,sha256=ZXSIYcjp94c0O9o39BDGWju3YrCMLl4gtov7YChc9Ig,393
77
- eth_portfolio_scripts/docker/check.cpython-311-darwin.so,sha256=CkjgrteNyL9-ablJXoliKXzGOTDD3un9QbzWLzf2Lrc,50664
78
- eth_portfolio_scripts/docker/__init__.cpython-311-darwin.so,sha256=Ewccf3fJxULrSJJ3998Cx9MN00It-HCUYAwBxL6lhy4,50656
77
+ eth_portfolio_scripts/docker/check.cpython-311-darwin.so,sha256=q1Rk3bHFYEx7gzs5ykrUhuDdAaiJYHi2cGL59rSUFKc,50664
78
+ eth_portfolio_scripts/docker/__init__.cpython-311-darwin.so,sha256=FqHkPK0xrK1c0kRM1sv92jUfdoYBgA8uPtJ29hKhzhw,50656
79
79
  eth_portfolio_scripts/docker/.grafana/datasources/datasources.yml,sha256=pBE_0Nh_J7d9Fiy3Xu6vuac_HWCBcFsJJSV-ryjQR1Y,188
80
80
  eth_portfolio_scripts/docker/.grafana/dashboards/dashboards.yaml,sha256=MynNDOk69IihoYdd2bL7j8CnRb2Co4gdqW7T4m6AaEU,202
81
81
  eth_portfolio_scripts/docker/.grafana/dashboards/Portfolio/Balances.json,sha256=dBmjogLJRuixCHWSs4ROE0_FXb-PUbqWBHEdLoP-1MU,68788