cryptodatapy 0.2.8__py3-none-any.whl → 0.2.10__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 (29) hide show
  1. cryptodatapy/extract/datarequest.py +0 -1
  2. cryptodatapy/extract/exchanges/__init__.py +2 -0
  3. cryptodatapy/extract/exchanges/dydx.py +137 -0
  4. cryptodatapy/extract/exchanges/exchange.py +439 -0
  5. cryptodatapy/extract/getdata.py +68 -0
  6. cryptodatapy/extract/libraries/ccxt_api.py +706 -150
  7. cryptodatapy/extract/libraries/library.py +1 -3
  8. cryptodatapy/extract/web/web.py +62 -0
  9. cryptodatapy/transform/convertparams.py +5 -6
  10. cryptodatapy/transform/filter.py +7 -8
  11. cryptodatapy/transform/wrangle.py +2 -1
  12. {cryptodatapy-0.2.8.dist-info → cryptodatapy-0.2.10.dist-info}/METADATA +1 -1
  13. {cryptodatapy-0.2.8.dist-info → cryptodatapy-0.2.10.dist-info}/RECORD +15 -26
  14. cryptodatapy/conf/fx_tickers.csv +0 -31
  15. cryptodatapy/extract/data_vendors/CoinMetrics.ipynb +0 -747
  16. cryptodatapy/extract/libraries/Untitled.ipynb +0 -199
  17. cryptodatapy/extract/libraries/ccxt.ipynb +0 -747
  18. cryptodatapy/extract/libraries/yfinance_api.py +0 -511
  19. cryptodatapy/transform/cc_onchain_data.csv +0 -118423
  20. cryptodatapy/transform/clean_onchain_data.ipynb +0 -4750
  21. cryptodatapy/transform/clean_perp_futures_ohlcv.ipynb +0 -2819
  22. cryptodatapy/transform/cmdty_data.ipynb +0 -402
  23. cryptodatapy/transform/credit_data.ipynb +0 -291
  24. cryptodatapy/transform/eqty_data.ipynb +0 -836
  25. cryptodatapy/transform/global_credit_data_daily.parquet +0 -0
  26. cryptodatapy/transform/rates_data.ipynb +0 -465
  27. cryptodatapy/transform/us_rates_daily.csv +0 -227752
  28. {cryptodatapy-0.2.8.dist-info → cryptodatapy-0.2.10.dist-info}/LICENSE +0 -0
  29. {cryptodatapy-0.2.8.dist-info → cryptodatapy-0.2.10.dist-info}/WHEEL +0 -0
@@ -11,7 +11,6 @@ class Library(ABC):
11
11
  Library is an abstract base class which provides a blueprint for properties and methods for the
12
12
  library subclass.
13
13
  """
14
-
15
14
  def __init__(
16
15
  self,
17
16
  categories,
@@ -400,8 +399,7 @@ class Library(ABC):
400
399
 
401
400
  @staticmethod
402
401
  @abstractmethod
403
- def wrangle_data_resp(data_req: DataRequest, data_resp: Union[Dict[str, Any], pd.DataFrame]) \
404
- -> pd.DataFrame:
402
+ def wrangle_data_resp(data_req: DataRequest, data_resp: Union[Dict[str, Any], pd.DataFrame]) -> pd.DataFrame:
405
403
  """
406
404
  Wrangles data response from data vendor API into tidy format.
407
405
  """
@@ -46,6 +46,11 @@ class Web(ABC):
46
46
  def categories(self, categories: Union[str, List[str]]):
47
47
  """
48
48
  Sets a list of available categories for the data vendor.
49
+
50
+ Parameters
51
+ ----------
52
+ categories : Union[str, List[str]]
53
+ A string or list of strings containing the categories to filter the data vendor's data.
49
54
  """
50
55
  valid_categories = [
51
56
  None,
@@ -89,6 +94,11 @@ class Web(ABC):
89
94
  def indexes(self, indexes: Optional[Union[str, List[str], Dict[str, List[str]]]]):
90
95
  """
91
96
  Sets a list of available indexes for the web page.
97
+
98
+ Parameters
99
+ ----------
100
+ indexes : Optional[Union[str, List[str], Dict[str, List[str]]]
101
+ A string, list of strings, or dict containing the indexes to filter the web page's data.
92
102
  """
93
103
  if indexes is None or isinstance(indexes, list) or isinstance(indexes, dict):
94
104
  self._indexes = indexes
@@ -118,6 +128,11 @@ class Web(ABC):
118
128
  def assets(self, assets: Optional[Union[str, List[str], Dict[str, List[str]]]]):
119
129
  """
120
130
  Sets a list of available assets for the data vendor.
131
+
132
+ Parameters
133
+ ----------
134
+ assets : Optional[Union[str, List[str], Dict[str, List[str]]]
135
+ A string, list of strings, or dict containing the assets to filter the data vendor's data.
121
136
  """
122
137
  if assets is None or isinstance(assets, list) or isinstance(assets, dict):
123
138
  self._assets = assets
@@ -147,6 +162,11 @@ class Web(ABC):
147
162
  def markets(self, markets: Optional[Union[str, List[str], Dict[str, List[str]]]]):
148
163
  """
149
164
  Sets a list of available markets for the data vendor.
165
+
166
+ Parameters
167
+ ----------
168
+ markets : Optional[Union[str, List[str], Dict[str, List[str]]]
169
+ A string, list of strings, or dict containing the markets to filter the data vendor's data.
150
170
  """
151
171
  if markets is None or isinstance(markets, list) or isinstance(markets, dict):
152
172
  self._markets = markets
@@ -176,6 +196,11 @@ class Web(ABC):
176
196
  def market_types(self, market_types: Optional[Union[str, List[str]]]):
177
197
  """
178
198
  Sets a list of available market types for the data vendor.
199
+
200
+ Parameters
201
+ ----------
202
+ market_types : Optional[Union[str, List[str]]
203
+ A string or list of strings containing the market types to filter the data vendor's data.
179
204
  """
180
205
  valid_mkt_types, mkt_types_list = [
181
206
  None,
@@ -214,6 +239,11 @@ class Web(ABC):
214
239
  def fields(self, fields: Optional[Union[str, List[str], Dict[str, List[str]]]]):
215
240
  """
216
241
  Sets a list of available fields for the data vendor.
242
+
243
+ Parameters
244
+ ----------
245
+ fields : Optional[Union[str, List[str], Dict[str, List[str]]]
246
+ A string, list of strings, or dict containing the fields to filter the data vendor's data.
217
247
  """
218
248
  if fields is None or isinstance(fields, list) or isinstance(fields, dict):
219
249
  self._fields = fields
@@ -229,6 +259,11 @@ class Web(ABC):
229
259
  def get_fields_info(self, data_type: Optional[str]):
230
260
  """
231
261
  Gets info for available fields from the data vendor.
262
+
263
+ Parameters
264
+ ----------
265
+ data_type : Optional[str]
266
+ A string containing the data type to filter the data vendor's fields
232
267
  """
233
268
  # to be implemented by subclasses
234
269
 
@@ -245,6 +280,11 @@ class Web(ABC):
245
280
  ):
246
281
  """
247
282
  Sets a list of available data frequencies for the data vendor.
283
+
284
+ Parameters
285
+ ----------
286
+ frequencies : Optional[Union[str, List[str], Dict[str, List[str]]]
287
+ A string, list of strings, or dict containing the frequencies to filter the data vendor's data.
248
288
  """
249
289
  if (
250
290
  frequencies is None
@@ -271,6 +311,11 @@ class Web(ABC):
271
311
  def base_url(self, url: Optional[str]):
272
312
  """
273
313
  Sets the base url for the data vendor.
314
+
315
+ Parameters
316
+ ----------
317
+ url : Optional[str]
318
+ A string containing the data vendor's base URL to which endpoint paths are appended.
274
319
  """
275
320
  if url is None or isinstance(url, str):
276
321
  self._base_url = url
@@ -291,6 +336,11 @@ class Web(ABC):
291
336
  def file_formats(self, formats: Optional[Union[str, List[str]]]):
292
337
  """
293
338
  Sets the file formats for the files on the web page.
339
+
340
+ Parameters
341
+ ----------
342
+ formats : Optional[Union[str, List[str]]
343
+ A string or list of strings containing the file formats for the web page's data files.
294
344
  """
295
345
  if formats is None or isinstance(formats, list):
296
346
  self._file_formats = formats
@@ -305,6 +355,11 @@ class Web(ABC):
305
355
  def get_data(self, data_req: DataRequest) -> pd.DataFrame:
306
356
  """
307
357
  Submits get data request to API.
358
+
359
+ Parameters
360
+ ----------
361
+ data_req : DataRequest
362
+ A DataRequest object containing the request parameters.
308
363
  """
309
364
  # to be implemented by subclasses
310
365
 
@@ -313,5 +368,12 @@ class Web(ABC):
313
368
  def wrangle_data_resp(data_req: DataRequest, data_resp: Union[Dict[str, Any], pd.DataFrame]) -> pd.DataFrame:
314
369
  """
315
370
  Wrangles data response from data vendor API into tidy format.
371
+
372
+ Parameters
373
+ ----------
374
+ data_req : DataRequest
375
+ A DataRequest object containing the request parameters.
376
+ data_resp : Union[Dict[str, Any], pd.DataFrame]
377
+ A dictionary or DataFrame containing the data response from the data vendor API.
316
378
  """
317
379
  # to be implemented by subclasses
@@ -57,17 +57,17 @@ class ConvertParams:
57
57
  exch = self.data_req.exch
58
58
  # convert start date
59
59
  if self.data_req.freq[-3:] == "min": # limit to higher frequency data responses
60
- start_date = round((datetime.now() - timedelta(days=7)).timestamp())
60
+ start_date = int((datetime.now() - timedelta(days=7)).timestamp())
61
61
  # no start date
62
62
  elif self.data_req.start_date is None:
63
- start_date = round(pd.Timestamp("2009-01-03 00:00:00").timestamp())
63
+ start_date = int(pd.Timestamp("2009-01-03 00:00:00").timestamp())
64
64
  else:
65
- start_date = round(pd.Timestamp(self.data_req.start_date).timestamp())
65
+ start_date = int(pd.Timestamp(self.data_req.start_date).timestamp())
66
66
  # convert end date
67
67
  if self.data_req.end_date is None:
68
- end_date = round(pd.Timestamp.utcnow()).timestamp()
68
+ end_date = int(pd.Timestamp.utcnow().timestamp())
69
69
  else:
70
- end_date = round(pd.Timestamp(self.data_req.end_date).timestamp())
70
+ end_date = int(pd.Timestamp(self.data_req.end_date).timestamp())
71
71
  # fields
72
72
  if self.data_req.source_fields is not None:
73
73
  fields = self.data_req.source_fields
@@ -986,7 +986,6 @@ class ConvertParams:
986
986
  -------
987
987
  quote_ccy: str
988
988
  Quote currency.
989
-
990
989
  """
991
990
  mkts = [] # fx pairs list
992
991
  # fx groups
@@ -159,12 +159,12 @@ class Filter:
159
159
  and fields (cols).
160
160
  """
161
161
  # drop tickers with nobs < ts_obs
162
- obs = self.df.groupby(level=1).count().min(axis=1)
162
+ obs = self.df.groupby(level=1).count().median(axis=1)
163
163
  drop_tickers_list = obs[obs < ts_obs].index.to_list()
164
164
  self.filtered_df = self.df.drop(drop_tickers_list, level=1, axis=0)
165
165
 
166
166
  # drop tickers with nobs < cs_obs
167
- obs = self.filtered_df.groupby(level=0).count().min(axis=1)
167
+ obs = self.filtered_df.groupby(level=0).count().median(axis=1)
168
168
  idx_start = obs[obs > cs_obs].index[0]
169
169
  self.filtered_df = self.filtered_df.loc[idx_start:]
170
170
 
@@ -185,16 +185,15 @@ class Filter:
185
185
  Filtered dataFrame with DatetimeIndex (level 0), tickers (level 1) and fields (cols).
186
186
  """
187
187
  # unchanged rows
188
- unch_rows = (self.df.subtract(self.df.iloc[:, :4].mean(axis=1), axis=0) == 0).any(axis=1)
188
+ unch_rows: object = (self.df.subtract(self.df.iloc[:, :4].mean(axis=1), axis=0) == 0).any(axis=1)
189
189
 
190
- # delisted tickers
191
- delisted_tickers = unch_rows.unstack().iloc[-1][unch_rows.unstack().iloc[-1]].index.to_list()
190
+ # replace delisted with NaNs
191
+ self.filtered_df = self.df.loc[~unch_rows].reindex(self.df.index)
192
192
 
193
193
  # repair
194
194
  if method == 'remove':
195
- self.filtered_df = self.df.drop(delisted_tickers, level=1)
196
- else:
197
- self.filtered_df = self.df.loc[~unch_rows].reindex(self.df.index)
195
+ self.filtered_df = list(self.filtered_df.unstack().columns[self.filtered_df.unstack().iloc[-1].isna()].
196
+ droplevel(0).unique())
198
197
 
199
198
  return self.filtered_df
200
199
 
@@ -854,7 +854,8 @@ class WrangleData:
854
854
  self.tidy_data = self.tidy_data.apply(pd.to_numeric, errors='coerce').convert_dtypes()
855
855
 
856
856
  # remove bad data
857
- self.tidy_data = self.tidy_data[self.tidy_data != 0] # 0 values
857
+ if data_type != 'funding_rates':
858
+ self.tidy_data = self.tidy_data[self.tidy_data != 0] # 0 values
858
859
  self.tidy_data = self.tidy_data[~self.tidy_data.index.duplicated()] # duplicate rows
859
860
  self.tidy_data = self.tidy_data.dropna(how='all').dropna(how='all', axis=1) # entire row or col NaNs
860
861
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cryptodatapy
3
- Version: 0.2.8
3
+ Version: 0.2.10
4
4
  Summary: Cryptoasset data library
5
5
  License: Apache-2.0
6
6
  Author: Systamental
@@ -1,7 +1,6 @@
1
1
  cryptodatapy/__init__.py,sha256=ee1UaINHZn1A_SZ96XM3hCguQEJgiPTvKlnYsk3mmS4,185
2
2
  cryptodatapy/conf/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  cryptodatapy/conf/fields.csv,sha256=Xjs_sWIY4DuhdHlWOPo0pgDC8sHYA6xzf6kb0PuUp9w,25735
4
- cryptodatapy/conf/fx_tickers.csv,sha256=vqbY93_6Zi4vXg8iu0veXZ-NDm_NV2rrmb5lNYRqNUA,288
5
4
  cryptodatapy/conf/tickers.csv,sha256=Bs9KfDKawoUPKIQZMN8CtoLYJuzOkwLh2il30c8CsqE,357066
6
5
  cryptodatapy/datasets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
6
  cryptodatapy/datasets/br_econ_calendar.csv,sha256=mSM0IOIByI-0gIIL1CbDQPqHYI5lK6vavrY1ODj3Jlk,1185318
@@ -27,47 +26,37 @@ cryptodatapy/extract/data_vendors/.ipynb_checkpoints/DBNomics-checkpoint.ipynb,s
27
26
  cryptodatapy/extract/data_vendors/.ipynb_checkpoints/InvestPy-checkpoint.ipynb,sha256=ybcHKXzmmlTYEoxC-qkWmd0Pjn1WjJ5CMPvMVotqJ7o,50215
28
27
  cryptodatapy/extract/data_vendors/.ipynb_checkpoints/NasdaqDataLink-checkpoint.ipynb,sha256=hY2QkCcTiLgPnl8SQPsO8spio5-RBMGeBLYzAwgSWb4,147170
29
28
  cryptodatapy/extract/data_vendors/.ipynb_checkpoints/PandasDataReader-checkpoint.ipynb,sha256=n7vzOV6AxC_Ti5CLWW2ABMEEcbbBpiBBs4qTUBQinIg,24171
30
- cryptodatapy/extract/data_vendors/CoinMetrics.ipynb,sha256=OtepxnBvt2DMCJpPFcY0kGhMRcKhw8ArSL85Cd3oO10,24923
31
29
  cryptodatapy/extract/data_vendors/__init__.py,sha256=Nk6gcT43d0XOLfrlVA9r--5mvHCgHfq295IKL3Puu74,354
32
30
  cryptodatapy/extract/data_vendors/coinmetrics_api.py,sha256=2fnsgKkBWjzMa1jzfVa7UbJKTpMWzcFVjo0bKDEud8U,34991
33
31
  cryptodatapy/extract/data_vendors/cryptocompare_api.py,sha256=3oBfQioBz1vrs9JNtwE0hBLI4BTtpFBBEEsDawmobE8,28872
34
32
  cryptodatapy/extract/data_vendors/datavendor.py,sha256=kGKxHcPng6JiGGhcuPx87ij0DXl4E-OSqxlvxhJ1HQo,12642
35
33
  cryptodatapy/extract/data_vendors/glassnode_api.py,sha256=PuuJOjHztoJyFijb5XU1zm1S_2NAj7MX-wC89DL_bWQ,13103
36
34
  cryptodatapy/extract/data_vendors/tiingo_api.py,sha256=Bvj5nF8zCkpU3cf5ImUmCS1cd1w2UtjgQvRmQ9Wfg6g,26404
37
- cryptodatapy/extract/datarequest.py,sha256=gwYhodt_Du12mmH_4qdROZb6ics_8-KpaG-2RxjyXnU,25880
38
- cryptodatapy/extract/getdata.py,sha256=HzWQyacfmphms97LVKbx1gEgcgsQJViBT4BBxL9TBXk,8703
39
- cryptodatapy/extract/libraries/Untitled.ipynb,sha256=qW8zLbpXG-AeJ4Vlo6-0AbrTBlM5Y4PMDz9-1TGb5QM,1218203
35
+ cryptodatapy/extract/datarequest.py,sha256=Yi1pVe-ljv_su6kwEw5uylhG3XtneujBaNS2pmAIyk0,25879
36
+ cryptodatapy/extract/exchanges/__init__.py,sha256=VKTNzrbe-wltGHWH9lK5RLZoXCGHp-UGGZ4gMVHJXrQ,113
37
+ cryptodatapy/extract/exchanges/dydx.py,sha256=Oifb4sKbPRKArdZBx9q5ob4yTFkd65n0zXiS7hga0mk,4199
38
+ cryptodatapy/extract/exchanges/exchange.py,sha256=Cicj3KS4zLbwmXX5fu89byXNwqqU4TH31GFv0zj3D4s,13010
39
+ cryptodatapy/extract/getdata.py,sha256=BQ-OCfoQqPTYN1GtSI8t93iPpCUbtwiXC0BDxbrdKKM,11477
40
40
  cryptodatapy/extract/libraries/__init__.py,sha256=9rJ_hFHWlvkPwyIkNG5bqH6HTY2jQNPIKQjzYEsVSDo,319
41
- cryptodatapy/extract/libraries/ccxt.ipynb,sha256=O-xkr_jtRBY4kuKWek61UOLaU5AiyNRM7AnquNLUjFs,22865
42
- cryptodatapy/extract/libraries/ccxt_api.py,sha256=nHkNeOKAL2KEvbY-ZI-ZgTlO5v15k9KnqODPiMM5zWw,35865
41
+ cryptodatapy/extract/libraries/ccxt_api.py,sha256=bYQxmOHdw3uCYf8jUb3Nzng30lypYX7lemfxjqSLzd4,56642
43
42
  cryptodatapy/extract/libraries/dbnomics_api.py,sha256=M6kPIH-hKqkmeBQb-g56dY9jatqLCtSl_MnvPblHtAc,9421
44
43
  cryptodatapy/extract/libraries/investpy_api.py,sha256=qtGm3LDluXxJorvFv0w1bm1oBrcZIfE5cZSYzNYvttY,18409
45
- cryptodatapy/extract/libraries/library.py,sha256=070YsO1RJzm4z_enhCjqe5hrj8qsk-Ni0Q_QKoAwQ6U,12316
44
+ cryptodatapy/extract/libraries/library.py,sha256=eU8NnQZ9luLGdIF5hms6j8VPCWc50evkREc4xdh-g1I,12301
46
45
  cryptodatapy/extract/libraries/pandasdr_api.py,sha256=-62P0W0Pa98f-96nB_bDgDkPFshP8yiqKZ9VU-usv94,13696
47
- cryptodatapy/extract/libraries/yfinance_api.py,sha256=E4c8gIpDh5ta8ILsn9SBs3C1pOU1VP4OqwQb6TcOzCc,17311
48
46
  cryptodatapy/extract/web/__init__.py,sha256=8i0fweCeqSpdiPf-47jT240I4ca6SizCu9aD-qDS67w,89
49
47
  cryptodatapy/extract/web/aqr.py,sha256=LS1D7QzG6UWkLUfDMgBFtiHpznnnAUOpec5Sx3vRGME,11875
50
- cryptodatapy/extract/web/web.py,sha256=27cAzlIyYn6R29726J7p9NhSwHypas9EQSjHLILtcjk,9748
48
+ cryptodatapy/extract/web/web.py,sha256=R1xEnHE1McxSWxp4vrTfgh9gW6FF6XDlp0gmp2NmWOM,12126
51
49
  cryptodatapy/transform/__init__.py,sha256=Spb5cGJ3V_o8hgSWOSrF8J_vsSZpFk0uzW7RpkgfbFE,131
52
- cryptodatapy/transform/cc_onchain_data.csv,sha256=qA9u3hekHk_NueBlMYQ7IKATh7AlnY-EN9E9X-9kIsU,9544500
53
50
  cryptodatapy/transform/clean.py,sha256=C9VypQOjdJ987TcD-qAHh7qYaoJBotvp3cWTr3ttSGM,12807
54
- cryptodatapy/transform/clean_onchain_data.ipynb,sha256=WrVPs8_WVKEgL6XRvGUATzeinqGUDTbXv_CHivg0nXg,687176
55
- cryptodatapy/transform/clean_perp_futures_ohlcv.ipynb,sha256=3TFTG6riUfu5f0uYvlMC44iUtQRd27sQPxBMXBXzp6A,72758
56
- cryptodatapy/transform/cmdty_data.ipynb,sha256=McAMfzNDfrv61gSlzFOkw_DXaOGZE1qfqXc2E_KeSbs,1220371
57
- cryptodatapy/transform/convertparams.py,sha256=X80Hdi2AMHVSYTJ6i-ovOzv5L6JQlGswJlC82xCriX8,39687
58
- cryptodatapy/transform/credit_data.ipynb,sha256=Wvvnu9ejsmqCb0s3cTG8bLJaywWQCskgk6FBd5J5Vf8,1892822
59
- cryptodatapy/transform/eqty_data.ipynb,sha256=A5cA13hOPrOe7Fra0HL4QPFkJGVfArigTR0GUUBpQ3A,25609
60
- cryptodatapy/transform/filter.py,sha256=iQDUXthEXVGcrZUZLjevhDqwf9oywEQHTIh6n_sxOhU,9056
61
- cryptodatapy/transform/global_credit_data_daily.parquet ,sha256=Dw27SX41AeSYcZyYlrGbwVe8KZM6c35TQ-gzCd2gU2I,745732
51
+ cryptodatapy/transform/convertparams.py,sha256=qkWABkyCeTfNdCJWhw_8FdBOgP-_yt5okf66HYs3C84,39676
52
+ cryptodatapy/transform/filter.py,sha256=KYYyta0uREAjBkYTVyvhOCCLSKR_qPSlqj5Nl7l4iBk,9064
62
53
  cryptodatapy/transform/impute.py,sha256=c7qdgFg0qs_xuQnX0jazpt0wgASC0KElLZRuxTkeVKY,5519
63
54
  cryptodatapy/transform/od.py,sha256=z__CWiN70f1leqx12SS9pIvTggxpUPrg1falJIKMZCc,31031
64
- cryptodatapy/transform/rates_data.ipynb,sha256=olKY4t2j4sfjsCYlhupTgaviC6922HHGBr-y3f80qjQ,13358
65
- cryptodatapy/transform/us_rates_daily.csv,sha256=BIA4a6egQYrVsLk51IZ54ZXXWMwjrx_t5S4XMdvHg44,6434830
66
- cryptodatapy/transform/wrangle.py,sha256=KqPIY7akFtHasW5gqUNR1cCGMBBkgHmzWxyMZFw8t-Q,42564
55
+ cryptodatapy/transform/wrangle.py,sha256=TXh6BRyyEKAqJjS3sCLZwaNwEn7kRIvn0pfRqnEDXDQ,42609
67
56
  cryptodatapy/util/__init__.py,sha256=zSQ2HU2QIXzCuptJjknmrClwtQKCvIj4aNysZljIgrU,116
68
57
  cryptodatapy/util/datacatalog.py,sha256=qCCX6srXvaAbVAKuA0M2y5IK_2OEx5xA3yRahDZlC-g,13157
69
58
  cryptodatapy/util/datacredentials.py,sha256=fXuGgI2NKCLlcnK8M37CtdyAc3O_YCV23x3KTlfakjA,2160
70
- cryptodatapy-0.2.8.dist-info/LICENSE,sha256=sw4oVq8bDjT3uMtaFebQ-xeIVP4H-bXldTs9q-Jjeks,11344
71
- cryptodatapy-0.2.8.dist-info/METADATA,sha256=8Xb8H8X_moxjtR263dEucMEecr5UpausfU7fH_Ne0w0,6426
72
- cryptodatapy-0.2.8.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
73
- cryptodatapy-0.2.8.dist-info/RECORD,,
59
+ cryptodatapy-0.2.10.dist-info/LICENSE,sha256=sw4oVq8bDjT3uMtaFebQ-xeIVP4H-bXldTs9q-Jjeks,11344
60
+ cryptodatapy-0.2.10.dist-info/METADATA,sha256=nWI_azCrpIZ4TudJTVqvVcqILc0MIA4CA4TwZ6xhfW0,6427
61
+ cryptodatapy-0.2.10.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
62
+ cryptodatapy-0.2.10.dist-info/RECORD,,
@@ -1,31 +0,0 @@
1
- id,name,tiingo_id
2
- eurusd,,
3
- gbpusd,,
4
- usdjpy,,
5
- usdchf,,
6
- usdcad,,
7
- usdsek,,
8
- usdnok,,
9
- audusd,,
10
- nzdusd,,
11
- usdars,,
12
- usdmxn,,
13
- usdbrl,,
14
- usdcop,,
15
- usdclp,,
16
- usdpen,,
17
- usdils,,
18
- usdrub,,
19
- usdczk,,
20
- usdpln,,
21
- usdhuf,,
22
- usdzar,,
23
- usdtry,,
24
- usdcny,,
25
- usdhkd,,
26
- usdsgd,,
27
- usdtwd,,
28
- usdkrw,,
29
- usdphp,,
30
- usdinr,,
31
- usdidr,,