eth-portfolio-temp 0.2.1.dev0__cp312-cp312-macosx_11_0_arm64.whl → 0.2.3.dev0__cp312-cp312-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
eth_portfolio/_utils.py CHANGED
@@ -136,10 +136,11 @@ async def _get_price(token: AddressOrContract, block: Optional[int] = None) -> _
136
136
  elif isinstance(e.exception, NonStandardERC20):
137
137
  # Can't get symbol for handling like other excs
138
138
  logger.warning(f"NonStandardERC20 while fetching price for {token}")
139
- elif isinstance(e.exception, PriceError) and token not in SUPPRESS_ERROR_LOGS:
140
- logger.warning(
141
- f"PriceError while fetching price for {await _describe_err(token, block)}"
142
- )
139
+ elif isinstance(e.exception, PriceError):
140
+ if token not in SUPPRESS_ERROR_LOGS:
141
+ logger.warning(
142
+ f"PriceError while fetching price for {await _describe_err(token, block)}"
143
+ )
143
144
  else:
144
145
  logger.warning(f"{e} while fetching price for {await _describe_err(token, block)}")
145
146
  logger.warning(e, exc_info=True)
@@ -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,13 +26,16 @@ 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:
33
- start = datetime.fromtimestamp(
34
- await dank_mids.eth.get_block_timestamp(args.export_start_block), tz=timezone.utc
35
- )
37
+ start_ts = await dank_mids.eth.get_block_timestamp(export_start_block)
38
+ start = datetime.fromtimestamp(start_ts, tz=timezone.utc)
36
39
  else:
37
40
  start = None
38
41
 
@@ -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.3.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,32 +1,37 @@
1
- 295eace8438df6ec133b__mypyc.cpython-312-darwin.so,sha256=dH_V6nbQujptHBPJft0YxwT3MBObor6hiTx8apkfUUk,669552
1
+ 295eace8438df6ec133b__mypyc.cpython-312-darwin.so,sha256=xZcXdQUgdJ8yjEFLqMbtXgE1FUYLVu-Mgzsxi7JhTMU,670752
2
+ eth_portfolio_temp-0.2.3.dev0.dist-info/RECORD,,
3
+ eth_portfolio_temp-0.2.3.dev0.dist-info/WHEEL,sha256=V1loQ6TpxABu1APUg0MoTRBOzSKT5xVc3skizX-ovCU,136
4
+ eth_portfolio_temp-0.2.3.dev0.dist-info/entry_points.txt,sha256=yqoC6X3LU1NA_-oJ6mloEYEPNmS-0hPS9OtEwgIeDGU,66
5
+ eth_portfolio_temp-0.2.3.dev0.dist-info/top_level.txt,sha256=CmTLi8Lvs3RulV5ZNdziaDVvF_WRsgRpM17GSMECxrg,64
6
+ eth_portfolio_temp-0.2.3.dev0.dist-info/METADATA,sha256=orjcH7HsKx696s8BFy30bkvhBHUkC9YgS4H3t20BC6U,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
- eth_portfolio/_shitcoins.cpython-312-darwin.so,sha256=AYf1lBhFRpSk9UuWeeUYgfcvIZq5gaKUUd5vtWloASU,50656
9
+ eth_portfolio/_shitcoins.cpython-312-darwin.so,sha256=t5URexIzN8yDgGHk--9ZMCo5A_FPrqMm-J_xLM26DKs,50656
5
10
  eth_portfolio/_argspec.py,sha256=VzUZkbDkmOSgNUZBGbGblqtxBfDcmBAB89dY2OX0j-U,1595
6
- eth_portfolio/constants.cpython-312-darwin.so,sha256=8dEXovvqhJ8_ESF9OpKbDBrcZEtCWHBLQeL7vgFoAB8,50656
11
+ eth_portfolio/constants.cpython-312-darwin.so,sha256=YbHFeetyy5zIbYqd8uM70rkm8qROsfxmFrJu8_N1Sg8,50656
7
12
  eth_portfolio/_submodules.py,sha256=J8ht9bAAvblUXqwOGN7UIOXUPxrTiq7m1RWiB0-ObaE,2190
8
13
  eth_portfolio/constants.py,sha256=LS9H2P_Qfcreb6z6NknErxvq6OAtIHbHykXy0spol9E,3659
9
14
  eth_portfolio/__init__.py,sha256=0sO4cSJaLYwJfnfVOJRFw7p5_Lzhsr95YuJ1aNQM83A,500
10
15
  eth_portfolio/_decimal.py,sha256=nuUl6DZHCtrbBN7snwvs4LLaoJ5k7mn3dt4qmlFCkTU,4731
11
16
  eth_portfolio/buckets.py,sha256=QwdqWzW9iWBmRcJ2aktRtL-obvtBnND179krY5ISbhY,6695
12
17
  eth_portfolio/_decorators.py,sha256=_ZSurUFEIwZRiMFMhLcIXkD-Ey1CqfBqGaE24hLzOuA,2815
13
- eth_portfolio/_stableish.cpython-312-darwin.so,sha256=nZ4gBzCzGYpiBNSiVvZCRHfdQZb0CmEiILmRxv94A30,50656
18
+ eth_portfolio/_stableish.cpython-312-darwin.so,sha256=nWlEhKNKTkLZo63p7XD2CqW1v4mtMIiFUO1QJBplm2o,50656
14
19
  eth_portfolio/_stableish.py,sha256=VTv69Q91AHxbNbbY0LB4PFwKEseHdkE4_6fLPKH1uW0,2021
15
20
  eth_portfolio/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
21
  eth_portfolio/_shitcoins.py,sha256=FrqttZzQdheTAabdIK0oVHayqHF0UkLQLEiMz8njQe0,15563
17
22
  eth_portfolio/_config.py,sha256=mw-OA3M8rUA2hqy5wNt30AZRHkWFgR8K2sJg0o5Baxg,98
18
23
  eth_portfolio/_exceptions.py,sha256=bw3IdXhqrWxeFqYLm7pJZqRHKZas_cCg8A5Ih1WQEqQ,2433
19
24
  eth_portfolio/portfolio.py,sha256=KljK3FZQMtRQLs1D-HHgCN-DVoZ6ZzEdmclmF3__oz0,24243
20
- eth_portfolio/_utils.py,sha256=10In2lr0QmfiavyeA4Z8wDTuujRVmjcc0cd-o71JEBg,7742
21
- eth_portfolio/_config.cpython-312-darwin.so,sha256=20KRpPBFnASC_Vl3eFij6_Tozx-h1QqyvzipnL0NJAA,50640
22
- eth_portfolio/_argspec.cpython-312-darwin.so,sha256=g27UTEKRFQ7x5bX6fR-YktuWrrnTk41LhcSrRrvlJcQ,50640
23
- eth_portfolio/_loaders/balances.cpython-312-darwin.so,sha256=x8K5evKrUHYeZSIPgVxrqEId1hKR6Y-bnRFvzNBkOLQ,50656
25
+ eth_portfolio/_utils.py,sha256=Ab3m6i79U-tnTrc_b_kTmOO4xKjbsX9slf6l0sXzf4c,7770
26
+ eth_portfolio/_config.cpython-312-darwin.so,sha256=mShESxHgNuwqst1HPSxw0m_Dk-9CHXsbI8MHsmVMCrY,50640
27
+ eth_portfolio/_argspec.cpython-312-darwin.so,sha256=mdr96QDnkE2ptSdlIvLOKW4JMy1WFJdS8Gk1Vo-XBOw,50640
28
+ eth_portfolio/_loaders/balances.cpython-312-darwin.so,sha256=6vF5lhNeGZxMQarmOFuTPgqDPwUnV3X4bJsOSGDbVJY,50656
24
29
  eth_portfolio/_loaders/transaction.py,sha256=FEYdoNDCgD6-mqZT9MuyYIEkdhG3iUwyNeMmqjpMGJw,9146
25
- eth_portfolio/_loaders/utils.cpython-312-darwin.so,sha256=jwMCRFCoy77jxpSqREdrU6EEe7jxw8gy18mWA80fjUw,50648
30
+ eth_portfolio/_loaders/utils.cpython-312-darwin.so,sha256=wtP0YCOOX-YAHR5U6UMZIYM3F6IfURtQwO8ZQYLLPaA,50648
26
31
  eth_portfolio/_loaders/__init__.py,sha256=lb45_0ak32Z7N3-Nx1CAoRKiZ1_w-_YGbmSCNuunro8,1702
27
32
  eth_portfolio/_loaders/_nonce.py,sha256=cx0EjTAhVU2EudMKSO-7-t1jl3y4dYn6as4XiY6KyS8,6285
28
33
  eth_portfolio/_loaders/utils.py,sha256=my3Wg2Ip5gSWuzAWcoLQQEmVmAPhIHbBzQQc0iP1iCA,2258
29
- eth_portfolio/_loaders/_nonce.cpython-312-darwin.so,sha256=2apbDWDcpFmJIPjRF63VDrfWVIJ4dfNpvK1YfbqZwuw,50656
34
+ eth_portfolio/_loaders/_nonce.cpython-312-darwin.so,sha256=7wN5YAigZGDefB0QjFh16kizy8dthsKzNromTE5_GII,50656
30
35
  eth_portfolio/_loaders/balances.py,sha256=BTWfkJIoSraUMe94Wuj8NPyg5EO0OByIjbXu7j6PZEo,3132
31
36
  eth_portfolio/_loaders/token_transfer.py,sha256=MEw95D2iKBYa_9vIatCHJGe7zEJuYUEC8P1mTjjRXlo,8524
32
37
  eth_portfolio/_ydb/__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=V1loQ6TpxABu1APUg0MoTRBOzSKT5xVc3skizX-ovCU,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
- eth_portfolio_scripts/balances.cpython-312-darwin.so,sha256=4fg-qnE3hlKcLPk8eIfP_nb8yU5jjq_HX2IGxjFUPuU,50656
64
+ eth_portfolio_scripts/balances.cpython-312-darwin.so,sha256=KmYFvMom3Sf-X95s8L0Np75Tci1_eCiKZeAhsIU3e1U,50656
65
65
  eth_portfolio_scripts/_args.py,sha256=k6J6XkRe1VuN1DiyGuXLCR7NBSvzH5jnVChfzodKuB8,656
66
66
  eth_portfolio_scripts/__init__.py,sha256=TC5c4WZdzSHhTIBYuwzrAyzFuGzBmHiDX_g6ghO09jQ,261
67
- eth_portfolio_scripts/_portfolio.py,sha256=cv4Qpb3EdwhO2sZEOnHYFWOHaoFo6wwt3nddyfDBYv0,6724
67
+ eth_portfolio_scripts/_portfolio.py,sha256=36n8DE9OfHvdF0ez12yzWpxI7at6_eo3eno7V_YYu3A,6932
68
68
  eth_portfolio_scripts/py.typed,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
69
- eth_portfolio_scripts/balances.py,sha256=o94uA4FVgPE-chbaoQgQazfXQ0O8k6W_yk9JY2bgRpQ,1524
70
- eth_portfolio_scripts/main.py,sha256=A7N78d2hxoU-Xu-dITCRqZ7yRL2l5r26WWzXzMdbeYo,3520
69
+ eth_portfolio_scripts/balances.py,sha256=QvpOdXnH1V-tOuEmAOPxH3MrincDExlIP1eEJ2IG2Lk,1588
70
+ eth_portfolio_scripts/main.py,sha256=vafXy4JvNWrP203AgCRcSKHMsOSCC7VVj9zBd_BFYZU,3685
71
71
  eth_portfolio_scripts/_utils.py,sha256=qyct1Mwf2-1DYj7BUWt2bocUfGKMap1l9sxUfHAjER0,2538
72
- eth_portfolio_scripts/docker/__init__.cpython-312-darwin.so,sha256=ClZDLx4ShljlrbJHWWlbTePXgDRZ7SOsIeMwjDEfvbs,50656
72
+ eth_portfolio_scripts/docker/__init__.cpython-312-darwin.so,sha256=p5Etqtoq4OBs4fGUkkwGN1Vpp3gAjeGL5sG1hqwbIrw,50656
73
73
  eth_portfolio_scripts/docker/docker-compose.yaml,sha256=pQ4eesSfMtcb9muDFT5TFDqZty15BoC2Rrd8HY0LS04,1809
74
74
  eth_portfolio_scripts/docker/docker_compose.py,sha256=K7_Y_8NeN5s0pb9WUamgfi9OppjpaU0Mlz2nDzewcRA,2226
75
75
  eth_portfolio_scripts/docker/check.py,sha256=E6_Ar4dr6HfVAgpwoDPcObIolikHKQr8VFkH01sOuIM,1745
76
76
  eth_portfolio_scripts/docker/__init__.py,sha256=ZXSIYcjp94c0O9o39BDGWju3YrCMLl4gtov7YChc9Ig,393
77
- eth_portfolio_scripts/docker/docker_compose.cpython-312-darwin.so,sha256=Re_BfTqCf_smpAmCzfGdQDQl_VdwVV8NIC8yoRnalJY,50712
78
- eth_portfolio_scripts/docker/check.cpython-312-darwin.so,sha256=-WubA7zCwUw2sdefrIMppsx_wQ68--w_psL5VIilOXs,50664
77
+ eth_portfolio_scripts/docker/docker_compose.cpython-312-darwin.so,sha256=0bfOXR8j0YFaI7VZi34JTMfOD7xYTXPASXSoRnmYVXM,50712
78
+ eth_portfolio_scripts/docker/check.cpython-312-darwin.so,sha256=8lUxlSfkVXL-0XyZatuIfMqTmmNk6tDXob1ldCyjPjM,50664
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