equity-aggregator 0.1.1__py3-none-any.whl → 0.1.5__py3-none-any.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.
Files changed (93) hide show
  1. equity_aggregator/README.md +49 -39
  2. equity_aggregator/adapters/__init__.py +13 -7
  3. equity_aggregator/adapters/data_sources/__init__.py +4 -6
  4. equity_aggregator/adapters/data_sources/_utils/_client.py +1 -1
  5. equity_aggregator/adapters/data_sources/{authoritative_feeds → _utils}/_record_types.py +1 -1
  6. equity_aggregator/adapters/data_sources/discovery_feeds/__init__.py +17 -0
  7. equity_aggregator/adapters/data_sources/discovery_feeds/intrinio/__init__.py +7 -0
  8. equity_aggregator/adapters/data_sources/discovery_feeds/intrinio/_utils/__init__.py +10 -0
  9. equity_aggregator/adapters/data_sources/discovery_feeds/intrinio/_utils/backoff.py +33 -0
  10. equity_aggregator/adapters/data_sources/discovery_feeds/intrinio/_utils/parser.py +107 -0
  11. equity_aggregator/adapters/data_sources/discovery_feeds/intrinio/intrinio.py +305 -0
  12. equity_aggregator/adapters/data_sources/discovery_feeds/intrinio/session.py +197 -0
  13. equity_aggregator/adapters/data_sources/discovery_feeds/lseg/__init__.py +7 -0
  14. equity_aggregator/adapters/data_sources/discovery_feeds/lseg/_utils/__init__.py +9 -0
  15. equity_aggregator/adapters/data_sources/discovery_feeds/lseg/_utils/backoff.py +33 -0
  16. equity_aggregator/adapters/data_sources/discovery_feeds/lseg/_utils/parser.py +120 -0
  17. equity_aggregator/adapters/data_sources/discovery_feeds/lseg/lseg.py +239 -0
  18. equity_aggregator/adapters/data_sources/discovery_feeds/lseg/session.py +162 -0
  19. equity_aggregator/adapters/data_sources/discovery_feeds/sec/__init__.py +7 -0
  20. equity_aggregator/adapters/data_sources/{authoritative_feeds → discovery_feeds/sec}/sec.py +4 -5
  21. equity_aggregator/adapters/data_sources/discovery_feeds/stock_analysis/__init__.py +7 -0
  22. equity_aggregator/adapters/data_sources/discovery_feeds/stock_analysis/stock_analysis.py +150 -0
  23. equity_aggregator/adapters/data_sources/discovery_feeds/tradingview/__init__.py +5 -0
  24. equity_aggregator/adapters/data_sources/discovery_feeds/tradingview/tradingview.py +275 -0
  25. equity_aggregator/adapters/data_sources/discovery_feeds/xetra/__init__.py +7 -0
  26. equity_aggregator/adapters/data_sources/{authoritative_feeds → discovery_feeds/xetra}/xetra.py +9 -12
  27. equity_aggregator/adapters/data_sources/enrichment_feeds/__init__.py +6 -1
  28. equity_aggregator/adapters/data_sources/enrichment_feeds/gleif/__init__.py +5 -0
  29. equity_aggregator/adapters/data_sources/enrichment_feeds/gleif/api.py +71 -0
  30. equity_aggregator/adapters/data_sources/enrichment_feeds/gleif/download.py +109 -0
  31. equity_aggregator/adapters/data_sources/enrichment_feeds/gleif/gleif.py +195 -0
  32. equity_aggregator/adapters/data_sources/enrichment_feeds/gleif/parser.py +75 -0
  33. equity_aggregator/adapters/data_sources/enrichment_feeds/yfinance/__init__.py +1 -1
  34. equity_aggregator/adapters/data_sources/enrichment_feeds/yfinance/_utils/__init__.py +11 -0
  35. equity_aggregator/adapters/data_sources/enrichment_feeds/yfinance/{utils → _utils}/backoff.py +1 -1
  36. equity_aggregator/adapters/data_sources/enrichment_feeds/yfinance/{utils → _utils}/fuzzy.py +28 -26
  37. equity_aggregator/adapters/data_sources/enrichment_feeds/yfinance/_utils/json.py +36 -0
  38. equity_aggregator/adapters/data_sources/enrichment_feeds/yfinance/api/__init__.py +1 -1
  39. equity_aggregator/adapters/data_sources/enrichment_feeds/yfinance/api/{summary.py → quote_summary.py} +44 -30
  40. equity_aggregator/adapters/data_sources/enrichment_feeds/yfinance/api/search.py +10 -5
  41. equity_aggregator/adapters/data_sources/enrichment_feeds/yfinance/auth.py +130 -0
  42. equity_aggregator/adapters/data_sources/enrichment_feeds/yfinance/config.py +3 -3
  43. equity_aggregator/adapters/data_sources/enrichment_feeds/yfinance/ranking.py +97 -0
  44. equity_aggregator/adapters/data_sources/enrichment_feeds/yfinance/session.py +85 -218
  45. equity_aggregator/adapters/data_sources/enrichment_feeds/yfinance/transport.py +191 -0
  46. equity_aggregator/adapters/data_sources/enrichment_feeds/yfinance/yfinance.py +413 -0
  47. equity_aggregator/adapters/data_sources/reference_lookup/exchange_rate_api.py +6 -13
  48. equity_aggregator/adapters/data_sources/reference_lookup/openfigi.py +23 -7
  49. equity_aggregator/cli/dispatcher.py +11 -8
  50. equity_aggregator/cli/main.py +14 -5
  51. equity_aggregator/cli/parser.py +1 -1
  52. equity_aggregator/cli/signals.py +32 -0
  53. equity_aggregator/domain/_utils/__init__.py +2 -2
  54. equity_aggregator/domain/_utils/_load_converter.py +30 -21
  55. equity_aggregator/domain/_utils/_merge.py +221 -368
  56. equity_aggregator/domain/_utils/_merge_config.py +205 -0
  57. equity_aggregator/domain/_utils/_strategies.py +180 -0
  58. equity_aggregator/domain/pipeline/resolve.py +17 -11
  59. equity_aggregator/domain/pipeline/runner.py +4 -4
  60. equity_aggregator/domain/pipeline/seed.py +5 -1
  61. equity_aggregator/domain/pipeline/transforms/__init__.py +2 -2
  62. equity_aggregator/domain/pipeline/transforms/canonicalise.py +1 -1
  63. equity_aggregator/domain/pipeline/transforms/enrich.py +328 -285
  64. equity_aggregator/domain/pipeline/transforms/group.py +48 -0
  65. equity_aggregator/logging_config.py +4 -1
  66. equity_aggregator/schemas/__init__.py +11 -5
  67. equity_aggregator/schemas/canonical.py +11 -6
  68. equity_aggregator/schemas/feeds/__init__.py +11 -5
  69. equity_aggregator/schemas/feeds/gleif_feed_data.py +35 -0
  70. equity_aggregator/schemas/feeds/intrinio_feed_data.py +142 -0
  71. equity_aggregator/schemas/feeds/{lse_feed_data.py → lseg_feed_data.py} +85 -52
  72. equity_aggregator/schemas/feeds/sec_feed_data.py +36 -6
  73. equity_aggregator/schemas/feeds/stock_analysis_feed_data.py +107 -0
  74. equity_aggregator/schemas/feeds/tradingview_feed_data.py +144 -0
  75. equity_aggregator/schemas/feeds/xetra_feed_data.py +1 -1
  76. equity_aggregator/schemas/feeds/yfinance_feed_data.py +47 -35
  77. equity_aggregator/schemas/raw.py +5 -3
  78. equity_aggregator/schemas/types.py +7 -0
  79. equity_aggregator/schemas/validators.py +81 -27
  80. equity_aggregator/storage/data_store.py +5 -3
  81. {equity_aggregator-0.1.1.dist-info → equity_aggregator-0.1.5.dist-info}/METADATA +205 -115
  82. equity_aggregator-0.1.5.dist-info/RECORD +103 -0
  83. {equity_aggregator-0.1.1.dist-info → equity_aggregator-0.1.5.dist-info}/WHEEL +1 -1
  84. equity_aggregator/adapters/data_sources/authoritative_feeds/__init__.py +0 -13
  85. equity_aggregator/adapters/data_sources/authoritative_feeds/euronext.py +0 -420
  86. equity_aggregator/adapters/data_sources/authoritative_feeds/lse.py +0 -352
  87. equity_aggregator/adapters/data_sources/enrichment_feeds/yfinance/feed.py +0 -350
  88. equity_aggregator/adapters/data_sources/enrichment_feeds/yfinance/utils/__init__.py +0 -9
  89. equity_aggregator/domain/pipeline/transforms/deduplicate.py +0 -54
  90. equity_aggregator/schemas/feeds/euronext_feed_data.py +0 -59
  91. equity_aggregator-0.1.1.dist-info/RECORD +0 -72
  92. {equity_aggregator-0.1.1.dist-info → equity_aggregator-0.1.5.dist-info}/entry_points.txt +0 -0
  93. {equity_aggregator-0.1.1.dist-info → equity_aggregator-0.1.5.dist-info}/licenses/LICENCE.txt +0 -0
@@ -1,54 +0,0 @@
1
- # transforms/deduplicate.py
2
-
3
- import logging
4
- from collections.abc import AsyncIterable
5
- from itertools import groupby
6
-
7
- from equity_aggregator.domain._utils._merge import merge
8
- from equity_aggregator.schemas.raw import RawEquity
9
-
10
- logger = logging.getLogger(__name__)
11
-
12
-
13
- async def deduplicate(
14
- raw_equities: AsyncIterable[RawEquity],
15
- ) -> AsyncIterable[RawEquity]:
16
- """
17
- Deduplicate and merge RawEquity records by their `share_class_figi`.
18
-
19
- Consumes an asynchronous stream of RawEquity objects, groups them by their
20
- `share_class_figi` attribute, and merges each group into a single RawEquity using
21
- the `merge` function. Logs the total number of records, the number of unique FIGIs,
22
- and the number of duplicates found.
23
-
24
- Args:
25
- raw_equities (AsyncIterable[RawEquity]): Async iterable of RawEquity records to
26
- deduplicate and merge.
27
-
28
- Yields:
29
- RawEquity: The merged RawEquity record for each unique `share_class_figi`.
30
- """
31
-
32
- # materialise all raw equities into a list
33
- aggregated_raw_equities = [raw_equity async for raw_equity in raw_equities]
34
-
35
- total = len(aggregated_raw_equities)
36
- unique = len({equity.share_class_figi for equity in aggregated_raw_equities})
37
-
38
- duplicates = total - unique
39
-
40
- logger.info(
41
- "Detected %d duplicate raw equities → merged into %d unique raw equities",
42
- duplicates,
43
- unique,
44
- )
45
-
46
- # sort by ShareClassFIGI
47
- aggregated_raw_equities.sort(key=lambda equity: equity.share_class_figi)
48
-
49
- # group by ShareClassFIGI and merge each group
50
- for _, group in groupby(
51
- aggregated_raw_equities,
52
- key=lambda equity: equity.share_class_figi,
53
- ):
54
- yield merge(list(group))
@@ -1,59 +0,0 @@
1
- # feeds/euronext_feed_data.py
2
-
3
- from decimal import Decimal
4
-
5
- from pydantic import BaseModel, ConfigDict, model_validator
6
-
7
- from .feed_validators import required
8
-
9
-
10
- @required("name", "symbol")
11
- class EuronextFeedData(BaseModel):
12
- """
13
- Represents a single Euronext feed record, transforming and normalising incoming
14
- fields to match the RawEquity model's expected attributes.
15
-
16
- Args:
17
- self (dict[str, object]): Raw payload containing Euronext feed data.
18
-
19
- Returns:
20
- EuronextFeedData: An instance with fields normalised for RawEquity validation.
21
- """
22
-
23
- # Fields exactly match RawEquity’s signature
24
- name: str
25
- symbol: str
26
- isin: str | None
27
- mics: list[str]
28
- currency: str | None
29
- last_price: str | float | int | Decimal | None
30
-
31
- @model_validator(mode="before")
32
- def _normalise_fields(self: dict[str, object]) -> dict[str, object]:
33
- """
34
- Normalise a raw Euronext feed record into the flat schema expected by RawEquity.
35
-
36
- Args:
37
- self (dict[str, object]): Raw payload containing Euronext feed data.
38
-
39
- Returns:
40
- dict[str, object]: A new dictionary with renamed keys suitable for the
41
- RawEquity schema.
42
- """
43
- return {
44
- "name": self.get("name"),
45
- "symbol": self.get("symbol"),
46
- "isin": self.get("isin"),
47
- # no CUSIP, CIK or FIGI in Euronext feed, so omitting from model
48
- "mics": self.get("mics"),
49
- "currency": self.get("currency"),
50
- "last_price": self.get("last_price"),
51
- # no additional fields in Euronext feed, so omitting from model
52
- }
53
-
54
- model_config = ConfigDict(
55
- # ignore extra fields in incoming Euronext raw data feed
56
- extra="ignore",
57
- # defer strict type validation to RawEquity
58
- strict=False,
59
- )
@@ -1,72 +0,0 @@
1
- equity_aggregator/README.md,sha256=Zwn69OVKGJE5GPaKO6M2G1IuLes2SZk0dOmHd2RVwv0,7998
2
- equity_aggregator/__init__.py,sha256=hGyCpePTRYSkNJ3sNCV7rqi4sgcFxouSEykzJ0aq4Ek,264
3
- equity_aggregator/logging_config.py,sha256=veFYzrbuEm54L2Qj5mDSx0Bu_JPloXp4tSaIuacYZEM,3270
4
- equity_aggregator/adapters/__init__.py,sha256=ojIIaAUrrPJbjSq2AkZTXP6T_XD97gcZtTDLEMx1UpY,699
5
- equity_aggregator/adapters/data_sources/__init__.py,sha256=-heTZ3DjzkpYzm_ikGBFgSiqRCScIEnhJot-kUtHs48,664
6
- equity_aggregator/adapters/data_sources/_utils/__init__.py,sha256=mp5CV8PXo2ebLXpT9zEl5yB455ZZFHSOVqejrUaP6iw,89
7
- equity_aggregator/adapters/data_sources/_utils/_client.py,sha256=iRhkB6nsSPssjSNbIUqGSJ3-BVtGKPPdrx54tTISE0A,1894
8
- equity_aggregator/adapters/data_sources/authoritative_feeds/__init__.py,sha256=PBgkDT3Dl35U37vE-LZQt8oOROoGnA5NsYxOJm2VzAY,463
9
- equity_aggregator/adapters/data_sources/authoritative_feeds/_record_types.py,sha256=hCOLzmAvzb2vSoc59YTPaXqV99zonZod4IcXo3qqAVQ,486
10
- equity_aggregator/adapters/data_sources/authoritative_feeds/euronext.py,sha256=FAxFyiRzWjaSjURkEDON2A6uxYOhbyw3628Q0RQ1J7Y,13264
11
- equity_aggregator/adapters/data_sources/authoritative_feeds/lse.py,sha256=IDag2grMe7T45EI-xnqq-4XuzxYrEP5Yz2WGQ5e_EO0,11064
12
- equity_aggregator/adapters/data_sources/authoritative_feeds/sec.py,sha256=0qnNzR1TqdldyPanXDB8AbKryHW-dAf3HF097NhULDA,5107
13
- equity_aggregator/adapters/data_sources/authoritative_feeds/xetra.py,sha256=Mcn4NtHM97r7GdrPL4MY6lLcOegvSXCpbTkwumG_22M,10754
14
- equity_aggregator/adapters/data_sources/enrichment_feeds/__init__.py,sha256=8-iWGJTg9WQgFOVdVb85DP0ZJLl2qMcfz6pxK-dl4_I,107
15
- equity_aggregator/adapters/data_sources/enrichment_feeds/yfinance/__init__.py,sha256=gqnsHJ6T68tL5t3-Uef0ut1bg1wbdsLopzNF6U_AGKQ,95
16
- equity_aggregator/adapters/data_sources/enrichment_feeds/yfinance/config.py,sha256=GgeToZXjn9RaLf0jlL1kUaKicd0Pk4wZB2lqtAmiHmI,2452
17
- equity_aggregator/adapters/data_sources/enrichment_feeds/yfinance/feed.py,sha256=T8Vrox_7-HsihLsCcS_RInietLkdOsaR1r7IKCREzn0,11333
18
- equity_aggregator/adapters/data_sources/enrichment_feeds/yfinance/session.py,sha256=LQmMgSPReFuPmuvxR8DqE8yTOdB0r-vRPTWEcgNnq6k,11910
19
- equity_aggregator/adapters/data_sources/enrichment_feeds/yfinance/api/__init__.py,sha256=krNVf6AFSBOCCKbfYQEzmWmPkKXuwOFMeDKo_bPgCu8,142
20
- equity_aggregator/adapters/data_sources/enrichment_feeds/yfinance/api/search.py,sha256=cvVBhmLEUETrwaKp5oN1obqCDUiEC0VKugjuOr1k4Q0,1262
21
- equity_aggregator/adapters/data_sources/enrichment_feeds/yfinance/api/summary.py,sha256=_Sr2rRzCXJFUW2S8ddI87lzIMdR1f_pYbaskAcMT3jo,4409
22
- equity_aggregator/adapters/data_sources/enrichment_feeds/yfinance/utils/__init__.py,sha256=W5onpdKyY40oL2dfKXzjyyC81uumR2MkF_6DSFaJl8M,154
23
- equity_aggregator/adapters/data_sources/enrichment_feeds/yfinance/utils/backoff.py,sha256=dwR7bqceah02fFtEsWZ61fgBHn27rtGD66bTOcOoy_M,916
24
- equity_aggregator/adapters/data_sources/enrichment_feeds/yfinance/utils/fuzzy.py,sha256=wIfjo_vJHHsmMdmHScCZqtXmaHoqJMS7QAodFp9Tibw,3429
25
- equity_aggregator/adapters/data_sources/reference_lookup/__init__.py,sha256=Qq7K7-j6yx2QS4cl4DmH3RV1Z0gGM_z5i9EEycCKFq0,261
26
- equity_aggregator/adapters/data_sources/reference_lookup/exchange_rate_api.py,sha256=mq7-76-rp6rgnTb9NSa8mafdyicVTpXwNowbE1wfavs,6079
27
- equity_aggregator/adapters/data_sources/reference_lookup/openfigi.py,sha256=na2aTYKaopXvuonEw9LlIMK9pi4Z37bRrRzT-42ZkIY,13805
28
- equity_aggregator/cli/__init__.py,sha256=IQtGuI6XMWFpbnVXmze-21iRTCyGaNCEBcoDWVNosLQ,62
29
- equity_aggregator/cli/config.py,sha256=eN3YWbUbelclHXYwM7O4oaoBVF-BQwQi4G6PH3TaIMY,606
30
- equity_aggregator/cli/dispatcher.py,sha256=ghaUHmOoOBFbjBrX2hJNFwUvlRvrTxeEpJhqLfCJUCQ,1321
31
- equity_aggregator/cli/main.py,sha256=FRh_CazKSmDsYNIfNOfXwoewSlNjSIoyx50tW2DUQNc,1614
32
- equity_aggregator/cli/parser.py,sha256=mIaOJfN_nUcgGQuI_xiPWky0wxGtFO7oYdtAQU5mv48,2669
33
- equity_aggregator/domain/__init__.py,sha256=obThi3XWT-f-agPy6zZWsFXLdlgNPqx3wD0fV3HM9SQ,341
34
- equity_aggregator/domain/_utils/__init__.py,sha256=yUDAQFa84BywYfpDd12zyU2v76Zan0Tb94bG90iPyMw,137
35
- equity_aggregator/domain/_utils/_load_converter.py,sha256=fRIY_P7Zd3i4wvOkkxuvNeaTWFqlkBMkQKTev__AZgQ,5243
36
- equity_aggregator/domain/_utils/_merge.py,sha256=l-1H_rVQboQrFTH96ykNXCqRHPL4vyphqSpI91TEYp8,16823
37
- equity_aggregator/domain/pipeline/__init__.py,sha256=fxb7mlSMWfJLxBhwHW14FHzikZ-sAxKsAv_uDedpdc8,112
38
- equity_aggregator/domain/pipeline/resolve.py,sha256=808WDLeBvLyz-jjjrNM2fOR_6lP61Fy5mT5bCE0K-po,4025
39
- equity_aggregator/domain/pipeline/runner.py,sha256=1CeCHtDX6yPjrkbKpq-ZFN2LtwCnDfHfRJlJ_u9uyxc,1382
40
- equity_aggregator/domain/pipeline/seed.py,sha256=wwoyvfj2Vuwt5L5dwaHpPjYqsZGwOLVJ8UiVULhmNj0,790
41
- equity_aggregator/domain/pipeline/transforms/__init__.py,sha256=IEuEYXbmCP5N9osq0VS4JUW6JLFMvFMUOwJXWAUYufY,326
42
- equity_aggregator/domain/pipeline/transforms/canonicalise.py,sha256=o07vWjtaVJXANqVNZNVo-6W8jZP5N4lGN4Ca_n0P8Ps,1225
43
- equity_aggregator/domain/pipeline/transforms/convert.py,sha256=UB4ACNJppMOi2CPqq8SDZa0SaBO94lb1Pcqqn-SKtG8,1067
44
- equity_aggregator/domain/pipeline/transforms/deduplicate.py,sha256=fK01ADV3HDwg6RJNp59W0vr_MJpS-3AlWoCKDhbiH1s,1720
45
- equity_aggregator/domain/pipeline/transforms/enrich.py,sha256=XfdXIoyluAWvU9Ku5qdyWiejkGTHAV9kUrRgupkSpiU,13876
46
- equity_aggregator/domain/pipeline/transforms/identify.py,sha256=y-FVyQCfofGR6rXbKtp6crRTm6Au_RRTRvv1-OvQ7yo,3826
47
- equity_aggregator/domain/pipeline/transforms/parse.py,sha256=BaZp6yiS4zW-Apr1jkrQkBeAcZ5YYuOXipzSfRr1b7M,2353
48
- equity_aggregator/domain/retrieval/__init__.py,sha256=uM1APSueNeUsLavqNlm45VQ9Vxh1Ss_xKRkG0f7I-Es,267
49
- equity_aggregator/domain/retrieval/retrieval.py,sha256=WkclmKCLkrAdIDE7gSiVEoqJpin63EtOPmvlO3JhMiI,11894
50
- equity_aggregator/schemas/__init__.py,sha256=nB6Ph3oqfsgTJjza9Rb6efe0_SlF0ZYcBbFcSwD2CFM,472
51
- equity_aggregator/schemas/canonical.py,sha256=151yCH52eNgztlw1uK6DVR2FKoIyKWYIt1qJ7KAzT2k,6892
52
- equity_aggregator/schemas/raw.py,sha256=7hLaGsiEM5vaIkg7rSgVccYkjfpgJSxmad9Tlp1NwE4,3853
53
- equity_aggregator/schemas/types.py,sha256=KlpXh_MEm_o9mCKjAU72aYqhmLUR_CGrqvyhII6GI78,2310
54
- equity_aggregator/schemas/validators.py,sha256=gdko6PzHwsm-D8f3sJoygxyFCaww3r_Idex7vJbGDbA,11262
55
- equity_aggregator/schemas/feeds/__init__.py,sha256=BxaPnkJCd6SC1PW74Qiu8E7p3QPaEjDk4WV_l2d2Bms,411
56
- equity_aggregator/schemas/feeds/euronext_feed_data.py,sha256=ZmVKTG-pVkMwbiQkJGwtYmaST5BB1oPHecxUvZ1ikjs,1862
57
- equity_aggregator/schemas/feeds/feed_validators.py,sha256=JTTvkUeEFjq3y1HY16euvP1GUdCrCRkHubRoUdludwc,1979
58
- equity_aggregator/schemas/feeds/lse_feed_data.py,sha256=T8ypfOLqT6zBtcDus9a5lnufZLXlKVuyhhG2vt3j7d8,5993
59
- equity_aggregator/schemas/feeds/sec_feed_data.py,sha256=vcb_4iHo1bwCQaAwEdrGk1vXBxl4GW4BO_6AO4XMVAM,1799
60
- equity_aggregator/schemas/feeds/xetra_feed_data.py,sha256=3Inz4xYQW0NjihOtcoIx8zQvY4Gynl2B3BIkkAd2VI8,3177
61
- equity_aggregator/schemas/feeds/yfinance_feed_data.py,sha256=FUzifiHYd8U1HCGStDrLHsfkDKQ0_p7nj8GiYPrfeyo,7019
62
- equity_aggregator/storage/__init__.py,sha256=2jy1hJeMB2RNTf33gTJOF006KIHnmGMFxr1Q_9zVE_w,837
63
- equity_aggregator/storage/_utils.py,sha256=GZTukfnWhIt3AEPTkM7lq2d9OpueKcxmvjhz-s0MEP0,2832
64
- equity_aggregator/storage/cache.py,sha256=pZ2aFuBthuK3WfDjq6YnFOIMg8VqeAfTbnS5VkWQP98,5865
65
- equity_aggregator/storage/data_store.py,sha256=-xe_4-V6xyF3C2jyb-pzK6BUvm3lfq28J2-K2N98Bd8,5068
66
- equity_aggregator/storage/export.py,sha256=QhccHYUH9eDwb3eRijiJiarjoWIPwS2XMQT9yHn7XWw,5537
67
- equity_aggregator/storage/metadata.py,sha256=bCjPTKVBTmndhCoDJ3vUxau5Jr_cG6PEkiBbNKorYyE,3095
68
- equity_aggregator-0.1.1.dist-info/METADATA,sha256=LxfC46t9Y7TPdg_lEmiokvYXZhzZFSK2vlFs4ppLIVA,20537
69
- equity_aggregator-0.1.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
70
- equity_aggregator-0.1.1.dist-info/entry_points.txt,sha256=pedEbEhWbz-9HIUpN8KTALxu94qKn9jxgrn08AvHb6c,70
71
- equity_aggregator-0.1.1.dist-info/licenses/LICENCE.txt,sha256=lyiWH8xJzlkFXkZpQf2_u8KtlJiPrVCczrZEZNyqSrg,1063
72
- equity_aggregator-0.1.1.dist-info/RECORD,,