eth-portfolio-temp 0.2.1.dev0__cp311-cp311-win32.whl → 0.2.2.dev0__cp311-cp311-win32.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
Binary file
Binary file
Binary file
Binary file
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,22 +1,22 @@
1
- 295eace8438df6ec133b__mypyc.cp311-win32.pyd,sha256=Jkj1yHTrqsOr41Bmc5m4DwjOLGlhHocz_LxTM9eKcD0,228352
1
+ 295eace8438df6ec133b__mypyc.cp311-win32.pyd,sha256=-odm6XLUcskTbonOWbdPkHUJrTIvPRPOCemD2-DYtKI,228864
2
2
  eth_portfolio/__init__.py,sha256=5GmHYzhUX2gOC4MScgXnqS8x2MawbpWOuWPmqlvCotA,525
3
- eth_portfolio/_argspec.cp311-win32.pyd,sha256=mwGYKs46jTsftjC_JTicznx_LwgfwrF8vwBOE7Kimyo,9216
3
+ eth_portfolio/_argspec.cp311-win32.pyd,sha256=grtXJjKdQtSPZUgJmkfVGPvAJePevCUUOHY63TLeZco,9216
4
4
  eth_portfolio/_argspec.py,sha256=au8ycJ56-7UzbQVzYUOoMX9sToH0QNi2tS1O820xB3A,1637
5
5
  eth_portfolio/_cache.py,sha256=H8n8x0Xo-iHQ8Q-NPuk57mmbIG6qDj4Wal6_-tK9Pfs,4866
6
- eth_portfolio/_config.cp311-win32.pyd,sha256=JT-rXyIa5U6DO91eqKF0xuImKZ8XQEvZ5meEMJaRAkg,9216
6
+ eth_portfolio/_config.cp311-win32.pyd,sha256=EAfFj9wft7v72DtZUwEF44LURuvtqcHWlhz944DJ_XI,9216
7
7
  eth_portfolio/_config.py,sha256=BSOvFS4D0oqgVTtBbtW2g2kpL8Mk6xiP0PipfXs_91A,102
8
8
  eth_portfolio/_decimal.py,sha256=XhuxnVTAhJF6OILJ1MpbdwkAiy1D5NuS9jRmDRpCSYg,4886
9
9
  eth_portfolio/_decorators.py,sha256=AvB-q69MvaFe0Ykh1os6hSewcUujURQ9onqobMaONOM,2899
10
10
  eth_portfolio/_exceptions.py,sha256=xb5VmCtBtXy9WXu_1ofoG4j9BJsMQXMVydCJNUulrNY,2500
11
- eth_portfolio/_shitcoins.cp311-win32.pyd,sha256=3_qitP6Q6efINVsO1hyJenQeMo55PO5qN68L9I5G0VM,9216
11
+ eth_portfolio/_shitcoins.cp311-win32.pyd,sha256=r2UZ2SAVXPvLxjvQXdEaJKSWwZaBuEuUy-sOVkLFgzE,9216
12
12
  eth_portfolio/_shitcoins.py,sha256=iKDhRsq0qtSm0nal1zyJp6Ny13UAZEW4C8xU5_lfse0,15866
13
- eth_portfolio/_stableish.cp311-win32.pyd,sha256=H-UjVn_GHIrxyBqOsDg9DMbqw6T11JcsG2KSTgzgDVM,9216
13
+ eth_portfolio/_stableish.cp311-win32.pyd,sha256=Oau-B8kCixQcmuRBRSCy99iSH1avs2zS3LX1DxDXpLA,9216
14
14
  eth_portfolio/_stableish.py,sha256=8pdlYe2YcZ8rTzdCzg-ihRQLPtSFXBNDjtnvuTgPRcQ,2063
15
15
  eth_portfolio/_submodules.py,sha256=zne-2YyVFoKHwkLuHx8cdz5lpcwwSDw1edJ9v8G4c1A,2263
16
16
  eth_portfolio/_utils.py,sha256=PlzMkvrSlR4htROT1sMP11m2A0m-CIcZlXVFfTW272w,7970
17
17
  eth_portfolio/address.py,sha256=RrFIWSx6jSITwh16Hqs6W6S9fz1KEaebQEk1vqL3HwI,14536
18
18
  eth_portfolio/buckets.py,sha256=pm2-_8VbGKpe6hHM6eysj17JK7Rhngr9-_gpVi-J1uA,6889
19
- eth_portfolio/constants.cp311-win32.pyd,sha256=u5dULD9YDIQPUUZ_VbEVuI3UWTGmMSpySd-KlWL-a24,9216
19
+ eth_portfolio/constants.cp311-win32.pyd,sha256=U98c2Z4PDLtmYiwGZJj_TwHpyht5-yzugp49xEtdt4k,9216
20
20
  eth_portfolio/constants.py,sha256=rUXWFaCGrrF_qzIdDvVzakQJsLnrGtFNn2EgRbZh8fQ,3741
21
21
  eth_portfolio/portfolio.py,sha256=FVx4QwnJH4llTWcYln9UpDkKridHSEAENbTHCBOSq_o,24904
22
22
  eth_portfolio/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -28,13 +28,13 @@ eth_portfolio/_ledgers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3
28
28
  eth_portfolio/_ledgers/address.py,sha256=ZI4lVsxtXoffDHFBm0pUrSKU42KleBKThNdDHm1Nqtg,33823
29
29
  eth_portfolio/_ledgers/portfolio.py,sha256=rAr5S1tksgLPUOK1J1FbIWgvTQNzTqrRp8oukiP2BTo,13427
30
30
  eth_portfolio/_loaders/__init__.py,sha256=YrBeRuA48cN2Bg2R2nXiNt1CsUIG_7N6ENIpY6aISPo,1735
31
- eth_portfolio/_loaders/_nonce.cp311-win32.pyd,sha256=DoDhzX2_QmaD1OQ5oypIbfVdif6LaK_Lhq2VlBxnzo4,9216
31
+ eth_portfolio/_loaders/_nonce.cp311-win32.pyd,sha256=W0gAj4UxwjKDCeRNqGgjKcjN8zqOyGjdQsXTOj0ay8Q,9216
32
32
  eth_portfolio/_loaders/_nonce.py,sha256=bA-5fZG8ALuADgQGrnoxt6p6j7QEwI6vIGnZRF1Zx7M,6481
33
- eth_portfolio/_loaders/balances.cp311-win32.pyd,sha256=MqJJsLn8MmsGhbiINdr_IlNdnwmDv4hv_Ntt-BQ1tj0,9216
33
+ eth_portfolio/_loaders/balances.cp311-win32.pyd,sha256=Y9vxDAV0Xl4a0QdBjoQQWjJt26-mYdYP8WfZ_mVf9ZI,9216
34
34
  eth_portfolio/_loaders/balances.py,sha256=_v-x1M3lzDHPt8svHmCcpxZKw0BaGHfZimhkwgphY8A,3226
35
35
  eth_portfolio/_loaders/token_transfer.py,sha256=58NoMc28CRSjuxP-_kNmXL7jS1oEFZayTZ9VAKQcVow,8741
36
36
  eth_portfolio/_loaders/transaction.py,sha256=WXsiNahcb5jNbXCX2-ceao3Cybfi-7_th8bnw9elmP0,9386
37
- eth_portfolio/_loaders/utils.cp311-win32.pyd,sha256=U-roeXh4kqWC6VTnDNylwtk7D6FcC9Qsn2N4_HfJ9Xg,9216
37
+ eth_portfolio/_loaders/utils.cp311-win32.pyd,sha256=yIF7r9uerC1D9P2d5DPtk4CnMSmR4QbeZN2_M6kZLYg,9216
38
38
  eth_portfolio/_loaders/utils.py,sha256=_nhPmGq_h_y_JPU9vXvhzqoKAWtgLRhYy_PdJXbyUdw,2326
39
39
  eth_portfolio/_ydb/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
40
  eth_portfolio/_ydb/token_transfers.py,sha256=HUTeWShcQD4IzocTHmBOreml0jbVttLcaed1fNiJ2qg,5297
@@ -58,26 +58,26 @@ eth_portfolio/typing/balance/single.py,sha256=NmtWXqCWMIkaoyvfL67Rh0wWurLf55fVaD
58
58
  eth_portfolio_scripts/__init__.py,sha256=DIBnQmjmhmNL1lO9Lq4QptrZmC7u6_N3p9zRjcZ9vbY,281
59
59
  eth_portfolio_scripts/_args.py,sha256=M33vPkja62XEJeCZAqacNSBCqbzse07wepwyBOtkvVo,682
60
60
  eth_portfolio_scripts/_logging.py,sha256=EgW8ozQZLAgt_cUgqe5BYZLMVQwB6X-0gq0T-BvqlTY,369
61
- eth_portfolio_scripts/_portfolio.py,sha256=xa-xNI3w6P54evq0qfRL0Vv2LEZ-6GnNKsSfDVaK-H0,6905
61
+ eth_portfolio_scripts/_portfolio.py,sha256=f2o1fNJLsB0Y1Qo-GCIeLaKa3t8H1LwdDjstVX6ByzE,7116
62
62
  eth_portfolio_scripts/_utils.py,sha256=7maEWyS5i_Kp7iVaa5puf2ZyefqHDsUOqTDLz-UwIQY,2630
63
- eth_portfolio_scripts/balances.cp311-win32.pyd,sha256=drfFMar2F78GrTTiU1c0w0FQkfhxWpyIHJoucK77ptU,9216
64
- eth_portfolio_scripts/balances.py,sha256=reli3W6K9-8F8I_n0tIwS9SuUykpPJnbiMsnJgY9N_w,1573
65
- eth_portfolio_scripts/main.py,sha256=vSYt6Ajq2wZ1ErSoEdLaLQmfpZnFcN6S-kSYaKQ0KEY,3633
63
+ eth_portfolio_scripts/balances.cp311-win32.pyd,sha256=CIlqs54ghRK4PFxdlbAPz6mUYN9u1sqr4ihnUMbPto0,9216
64
+ eth_portfolio_scripts/balances.py,sha256=ApYTA5caujTRAIDxHnYmHk03CqFC9nNpTzJIDWLws8E,1640
65
+ eth_portfolio_scripts/main.py,sha256=upkr0Vc758qti___5kyDsE0zcfwiZju4xvAQsKsu9iw,3804
66
66
  eth_portfolio_scripts/py.typed,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
67
- eth_portfolio_scripts/docker/__init__.cp311-win32.pyd,sha256=ANBCLd6JLkW4lQn2614ay2Y4y5VvebHpzoPT1HNOXic,9216
67
+ eth_portfolio_scripts/docker/__init__.cp311-win32.pyd,sha256=SaKVdrTW6JQU338cv3xNfr8n4psp_IcPmP0HLo1g6gU,9216
68
68
  eth_portfolio_scripts/docker/__init__.py,sha256=R27uZPLUEK2--fb9IrxrDUk6R5_IVFJSv7s_ia7p5Xk,409
69
- eth_portfolio_scripts/docker/check.cp311-win32.pyd,sha256=q16zNM4yB9gAuljhLskyftE0zHgj6qc7JdJTkef7AfA,9216
69
+ eth_portfolio_scripts/docker/check.cp311-win32.pyd,sha256=-txm7dsw6CmqgnqNYPauACwhouvred9lGiV-siD0N8g,9216
70
70
  eth_portfolio_scripts/docker/check.py,sha256=JFxUxGRSz20EgjKqCLBkCqR4N1ihzO_3ykU3jPzp_UU,1801
71
71
  eth_portfolio_scripts/docker/docker-compose.yaml,sha256=P2ZJAQBXRQX-nZ5CoNm__R2KihsA0njoTwJcIWn1_s0,1870
72
- eth_portfolio_scripts/docker/docker_compose.cp311-win32.pyd,sha256=GBToaLqk5dHcrFsLT8ZD2kbxNaJjQx4UQbRKBUYfC1w,9216
72
+ eth_portfolio_scripts/docker/docker_compose.cp311-win32.pyd,sha256=t-IXxxjOWdtRIdB5nRWARCpHwbQ6Mo78TSKaBsO_CgY,9216
73
73
  eth_portfolio_scripts/docker/docker_compose.py,sha256=tewgCWZP6g9sVFHbQnGC1au-bTnvuvXMZgTKKgpmeOc,2304
74
74
  eth_portfolio_scripts/docker/.grafana/dashboards/dashboards.yaml,sha256=wktTI-OAdF_khhbciZFo4Gt2V9bUjbe7GLqwdzTKf0U,212
75
75
  eth_portfolio_scripts/docker/.grafana/dashboards/Portfolio/Balances.json,sha256=XGMV8e4tDak53e9bmymwAB4uqZmAIcU5JlRT3OiwTeU,70750
76
76
  eth_portfolio_scripts/docker/.grafana/datasources/datasources.yml,sha256=8PPH_QDhfbRRh3IidskW46rifJejloa1a9I1KCw2FTk,199
77
77
  eth_portfolio_scripts/victoria/__init__.py,sha256=R0VvKiAC0e57zZNihcCptVkFO5CBHIbp2trFYuyY01M,2038
78
78
  eth_portfolio_scripts/victoria/types.py,sha256=KNq8aIiNXeiDnCKL7xycmouo0YeKI-sbQkIcTymcSYk,745
79
- eth_portfolio_temp-0.2.1.dev0.dist-info/METADATA,sha256=zohDJdaFl7C4eZlSsAuCc15f8_8wMRM7Smo9j_o_aYo,804
80
- eth_portfolio_temp-0.2.1.dev0.dist-info/WHEEL,sha256=Ri8zddKrjGdgjlj1OpSsvpDnvHfnQhMQWi3E_v2pqng,97
81
- eth_portfolio_temp-0.2.1.dev0.dist-info/entry_points.txt,sha256=yqoC6X3LU1NA_-oJ6mloEYEPNmS-0hPS9OtEwgIeDGU,66
82
- eth_portfolio_temp-0.2.1.dev0.dist-info/top_level.txt,sha256=CmTLi8Lvs3RulV5ZNdziaDVvF_WRsgRpM17GSMECxrg,64
83
- eth_portfolio_temp-0.2.1.dev0.dist-info/RECORD,,
79
+ eth_portfolio_temp-0.2.2.dev0.dist-info/METADATA,sha256=nszEgqdcwJnICtDLL2x8XAJNfNj4Eo3_b_-EqWwJcfI,804
80
+ eth_portfolio_temp-0.2.2.dev0.dist-info/WHEEL,sha256=Ri8zddKrjGdgjlj1OpSsvpDnvHfnQhMQWi3E_v2pqng,97
81
+ eth_portfolio_temp-0.2.2.dev0.dist-info/entry_points.txt,sha256=yqoC6X3LU1NA_-oJ6mloEYEPNmS-0hPS9OtEwgIeDGU,66
82
+ eth_portfolio_temp-0.2.2.dev0.dist-info/top_level.txt,sha256=CmTLi8Lvs3RulV5ZNdziaDVvF_WRsgRpM17GSMECxrg,64
83
+ eth_portfolio_temp-0.2.2.dev0.dist-info/RECORD,,