pfeed 0.0.1.dev8__tar.gz → 0.0.1.dev10__tar.gz
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.
- {pfeed-0.0.1.dev8 → pfeed-0.0.1.dev10}/PKG-INFO +20 -5
- {pfeed-0.0.1.dev8 → pfeed-0.0.1.dev10}/README.md +14 -0
- {pfeed-0.0.1.dev8 → pfeed-0.0.1.dev10}/pfeed/etl.py +22 -7
- {pfeed-0.0.1.dev8 → pfeed-0.0.1.dev10}/pfeed/feeds/bybit_feed.py +11 -5
- {pfeed-0.0.1.dev8 → pfeed-0.0.1.dev10}/pfeed/filepath.py +2 -0
- {pfeed-0.0.1.dev8 → pfeed-0.0.1.dev10}/pfeed/sources/bybit/__init__.py +0 -1
- {pfeed-0.0.1.dev8 → pfeed-0.0.1.dev10}/pyproject.toml +10 -9
- {pfeed-0.0.1.dev8 → pfeed-0.0.1.dev10}/LICENSE +0 -0
- {pfeed-0.0.1.dev8 → pfeed-0.0.1.dev10}/pfeed/__init__.py +0 -0
- {pfeed-0.0.1.dev8 → pfeed-0.0.1.dev10}/pfeed/cli/__init__.py +0 -0
- {pfeed-0.0.1.dev8 → pfeed-0.0.1.dev10}/pfeed/cli/commands/__init__.py +0 -0
- {pfeed-0.0.1.dev8 → pfeed-0.0.1.dev10}/pfeed/cli/commands/config.py +0 -0
- {pfeed-0.0.1.dev8 → pfeed-0.0.1.dev10}/pfeed/cli/commands/docker_compose.py +0 -0
- {pfeed-0.0.1.dev8 → pfeed-0.0.1.dev10}/pfeed/cli/commands/download.py +0 -0
- {pfeed-0.0.1.dev8 → pfeed-0.0.1.dev10}/pfeed/cli/commands/stream.py +0 -0
- {pfeed-0.0.1.dev8 → pfeed-0.0.1.dev10}/pfeed/cli/main.py +0 -0
- {pfeed-0.0.1.dev8 → pfeed-0.0.1.dev10}/pfeed/config/logging.yml +0 -0
- {pfeed-0.0.1.dev8 → pfeed-0.0.1.dev10}/pfeed/config_handler.py +0 -0
- {pfeed-0.0.1.dev8 → pfeed-0.0.1.dev10}/pfeed/const/commons.py +0 -0
- {pfeed-0.0.1.dev8 → pfeed-0.0.1.dev10}/pfeed/const/paths.py +0 -0
- {pfeed-0.0.1.dev8 → pfeed-0.0.1.dev10}/pfeed/data_tools/data_tool_pandas.py +0 -0
- {pfeed-0.0.1.dev8 → pfeed-0.0.1.dev10}/pfeed/data_tools/data_tool_polars.py +0 -0
- {pfeed-0.0.1.dev8 → pfeed-0.0.1.dev10}/pfeed/data_tools/data_tool_pyspark.py +0 -0
- {pfeed-0.0.1.dev8 → pfeed-0.0.1.dev10}/pfeed/datastore.py +0 -0
- {pfeed-0.0.1.dev8 → pfeed-0.0.1.dev10}/pfeed/feeds/__init__.py +0 -0
- {pfeed-0.0.1.dev8 → pfeed-0.0.1.dev10}/pfeed/feeds/base_feed.py +0 -0
- {pfeed-0.0.1.dev8 → pfeed-0.0.1.dev10}/pfeed/feeds/custom_csv_feed.py +0 -0
- {pfeed-0.0.1.dev8 → pfeed-0.0.1.dev10}/pfeed/feeds/yahoo_finance_feed.py +0 -0
- {pfeed-0.0.1.dev8 → pfeed-0.0.1.dev10}/pfeed/main.py +0 -0
- {pfeed-0.0.1.dev8 → pfeed-0.0.1.dev10}/pfeed/sources/__init__.py +0 -0
- {pfeed-0.0.1.dev8 → pfeed-0.0.1.dev10}/pfeed/sources/bybit/api.py +0 -0
- {pfeed-0.0.1.dev8 → pfeed-0.0.1.dev10}/pfeed/sources/bybit/const.py +0 -0
- {pfeed-0.0.1.dev8 → pfeed-0.0.1.dev10}/pfeed/sources/bybit/download.py +0 -0
- {pfeed-0.0.1.dev8 → pfeed-0.0.1.dev10}/pfeed/sources/bybit/stream.py +0 -0
- {pfeed-0.0.1.dev8 → pfeed-0.0.1.dev10}/pfeed/types/common_literals.py +0 -0
- {pfeed-0.0.1.dev8 → pfeed-0.0.1.dev10}/pfeed/utils/monitor.py +0 -0
- {pfeed-0.0.1.dev8 → pfeed-0.0.1.dev10}/pfeed/utils/utils.py +0 -0
- {pfeed-0.0.1.dev8 → pfeed-0.0.1.dev10}/pfeed/utils/validate.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pfeed
|
|
3
|
-
Version: 0.0.1.
|
|
3
|
+
Version: 0.0.1.dev10
|
|
4
4
|
Summary: Data pipeline for algo-trading, getting and storing both real-time and historical data made easy.
|
|
5
5
|
Home-page: https://pfund.ai
|
|
6
6
|
License: Apache-2.0
|
|
@@ -14,17 +14,18 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
14
14
|
Classifier: Programming Language :: Python :: 3.11
|
|
15
15
|
Classifier: Programming Language :: Python :: 3.12
|
|
16
16
|
Provides-Extra: boost
|
|
17
|
+
Provides-Extra: data
|
|
17
18
|
Provides-Extra: df
|
|
18
19
|
Requires-Dist: beautifulsoup4 (>=4.12.3,<5.0.0)
|
|
19
20
|
Requires-Dist: connectorx (>=0.3.2,<0.4.0) ; extra == "boost"
|
|
20
|
-
Requires-Dist: minio (>=7.2.5,<8.0.0)
|
|
21
|
+
Requires-Dist: minio (>=7.2.5,<8.0.0) ; extra == "data"
|
|
21
22
|
Requires-Dist: pandas (>=2.2.0,<3.0.0) ; extra == "df"
|
|
22
|
-
Requires-Dist: pfund (>=0.0.1.
|
|
23
|
+
Requires-Dist: pfund (>=0.0.1.dev10,<0.0.2)
|
|
23
24
|
Requires-Dist: polars (>=0.20.16,<0.21.0) ; extra == "df"
|
|
25
|
+
Requires-Dist: psutil (>=5.9.8,<6.0.0) ; extra == "data"
|
|
24
26
|
Requires-Dist: pyarrow (>=15.0.0,<16.0.0) ; extra == "boost"
|
|
25
27
|
Requires-Dist: ray (>=2.10.0,<3.0.0) ; extra == "boost"
|
|
26
|
-
Requires-Dist: s3fs (>=2024.3.1,<2025.0.0)
|
|
27
|
-
Requires-Dist: tqdm (>=4.66.2,<5.0.0)
|
|
28
|
+
Requires-Dist: s3fs (>=2024.3.1,<2025.0.0) ; extra == "data"
|
|
28
29
|
Requires-Dist: yfinance (>=0.2.37,<0.3.0)
|
|
29
30
|
Project-URL: Documentation, https://pfeed-docs.pfund.ai
|
|
30
31
|
Project-URL: Repository, https://github.com/PFund-Software-Ltd/pfeed
|
|
@@ -100,14 +101,28 @@ However, preparing this data for use is not quick and easy. For example, sometim
|
|
|
100
101
|
## Installation
|
|
101
102
|
### Using [Poetry](https://python-poetry.org) (Recommended)
|
|
102
103
|
```bash
|
|
104
|
+
# [RECOMMENDED]: dataframes (e.g. polars, pandas) + data storage (e.g. MinIO) + boosted performance
|
|
105
|
+
poetry add "pfeed[df,data,boost]"
|
|
106
|
+
|
|
107
|
+
# only for downloading data, e.g. Bybit and Yahoo Finance
|
|
103
108
|
poetry add pfeed
|
|
109
|
+
|
|
110
|
+
# update to the latest version:
|
|
111
|
+
poetry update pfeed
|
|
104
112
|
```
|
|
105
113
|
|
|
106
114
|
### Using Pip
|
|
107
115
|
```bash
|
|
108
116
|
pip install pfeed
|
|
117
|
+
|
|
118
|
+
# install the latest version:
|
|
119
|
+
pip install -U pfeed
|
|
109
120
|
```
|
|
110
121
|
|
|
122
|
+
### Checking your installation
|
|
123
|
+
```bash
|
|
124
|
+
$ pfeed --version
|
|
125
|
+
```
|
|
111
126
|
|
|
112
127
|
## Quick Start
|
|
113
128
|
### Main Usage: Data Feed
|
|
@@ -68,14 +68,28 @@ However, preparing this data for use is not quick and easy. For example, sometim
|
|
|
68
68
|
## Installation
|
|
69
69
|
### Using [Poetry](https://python-poetry.org) (Recommended)
|
|
70
70
|
```bash
|
|
71
|
+
# [RECOMMENDED]: dataframes (e.g. polars, pandas) + data storage (e.g. MinIO) + boosted performance
|
|
72
|
+
poetry add "pfeed[df,data,boost]"
|
|
73
|
+
|
|
74
|
+
# only for downloading data, e.g. Bybit and Yahoo Finance
|
|
71
75
|
poetry add pfeed
|
|
76
|
+
|
|
77
|
+
# update to the latest version:
|
|
78
|
+
poetry update pfeed
|
|
72
79
|
```
|
|
73
80
|
|
|
74
81
|
### Using Pip
|
|
75
82
|
```bash
|
|
76
83
|
pip install pfeed
|
|
84
|
+
|
|
85
|
+
# install the latest version:
|
|
86
|
+
pip install -U pfeed
|
|
77
87
|
```
|
|
78
88
|
|
|
89
|
+
### Checking your installation
|
|
90
|
+
```bash
|
|
91
|
+
$ pfeed --version
|
|
92
|
+
```
|
|
79
93
|
|
|
80
94
|
## Quick Start
|
|
81
95
|
### Main Usage: Data Feed
|
|
@@ -1,18 +1,28 @@
|
|
|
1
1
|
'''ETL = Extract, Transform, Load data'''
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
2
4
|
import io
|
|
3
5
|
import logging
|
|
4
6
|
import importlib
|
|
5
7
|
|
|
8
|
+
from typing import TYPE_CHECKING
|
|
9
|
+
if TYPE_CHECKING:
|
|
10
|
+
from pfeed.types.common_literals import tSUPPORTED_DATA_TOOLS, tSUPPORTED_DOWNLOAD_DATA_SOURCES, tSUPPORTED_DATA_SINKS, tSUPPORTED_DATA_TYPES, tSUPPORTED_DATA_MODES
|
|
11
|
+
|
|
6
12
|
import pandas as pd
|
|
7
|
-
from minio.error import MinioException
|
|
8
13
|
|
|
9
|
-
|
|
14
|
+
try:
|
|
15
|
+
from pfeed.datastore import Datastore, MinioException
|
|
16
|
+
except ImportError:
|
|
17
|
+
pass
|
|
10
18
|
from pfeed.filepath import FilePath
|
|
11
19
|
from pfeed.config_handler import ConfigHandler
|
|
12
20
|
from pfeed.const.commons import SUPPORTED_DATA_TYPES, SUPPORTED_DATA_SINKS, SUPPORTED_DOWNLOAD_DATA_SOURCES, SUPPORTED_DATA_MODES
|
|
13
|
-
from pfeed.types.common_literals import tSUPPORTED_DATA_TOOLS, tSUPPORTED_DOWNLOAD_DATA_SOURCES, tSUPPORTED_DATA_SINKS, tSUPPORTED_DATA_TYPES, tSUPPORTED_DATA_MODES
|
|
14
|
-
from pfeed.utils.monitor import print_disk_usage
|
|
15
21
|
from pfund.datas.resolution import Resolution
|
|
22
|
+
try:
|
|
23
|
+
from pfeed.utils.monitor import print_disk_usage
|
|
24
|
+
except ImportError:
|
|
25
|
+
print_disk_usage = None
|
|
16
26
|
|
|
17
27
|
|
|
18
28
|
logger = logging.getLogger('pfeed')
|
|
@@ -47,7 +57,7 @@ def get_data(
|
|
|
47
57
|
|
|
48
58
|
Returns:
|
|
49
59
|
bytes | None: The extracted data as bytes, or None if the data is not found.
|
|
50
|
-
"""
|
|
60
|
+
"""
|
|
51
61
|
for data_sink in SUPPORTED_DATA_SINKS:
|
|
52
62
|
try:
|
|
53
63
|
data: bytes = extract_data(data_sink, data_source, dtype, pdt, date, mode=mode)
|
|
@@ -173,7 +183,8 @@ def load_data(
|
|
|
173
183
|
logger.info(f'loaded {data_source} data to MinIO object {object_name} {kwargs=}')
|
|
174
184
|
else:
|
|
175
185
|
raise NotImplementedError(f'{data_sink=}')
|
|
176
|
-
print_disk_usage
|
|
186
|
+
if print_disk_usage:
|
|
187
|
+
print_disk_usage(config.data_path)
|
|
177
188
|
|
|
178
189
|
|
|
179
190
|
def clean_raw_data(data_source: tSUPPORTED_DOWNLOAD_DATA_SOURCES, raw_data: bytes) -> bytes:
|
|
@@ -209,5 +220,9 @@ def clean_raw_tick_data(raw_tick: bytes) -> bytes:
|
|
|
209
220
|
|
|
210
221
|
|
|
211
222
|
def resample_data(data: bytes, resolution: str | Resolution, data_tool: tSUPPORTED_DATA_TOOLS='polars', check_if_drop_last_bar=False) -> bytes:
|
|
212
|
-
|
|
223
|
+
try:
|
|
224
|
+
data_tool = importlib.import_module(f'pfeed.data_tools.data_tool_{data_tool.lower()}')
|
|
225
|
+
except ImportError:
|
|
226
|
+
# fallback data_tool to pandas
|
|
227
|
+
data_tool = importlib.import_module('pfeed.data_tools.data_tool_pandas')
|
|
213
228
|
return data_tool.resample_data(data, resolution, check_if_drop_last_bar=check_if_drop_last_bar)
|
|
@@ -1,21 +1,27 @@
|
|
|
1
1
|
"""High-level API for getting historical/streaming data from Bybit."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
2
4
|
import datetime
|
|
3
5
|
|
|
4
|
-
from typing import Literal
|
|
6
|
+
from typing import Literal, TYPE_CHECKING
|
|
7
|
+
if TYPE_CHECKING:
|
|
8
|
+
from pfeed.types.common_literals import tSUPPORTED_DATA_TOOLS
|
|
5
9
|
|
|
6
|
-
|
|
7
|
-
import pandas as pd
|
|
10
|
+
try:
|
|
11
|
+
import pandas as pd
|
|
12
|
+
import polars as pl
|
|
13
|
+
from pfeed.data_tools.data_tool_polars import estimate_memory_usage
|
|
14
|
+
except ImportError:
|
|
15
|
+
pass
|
|
8
16
|
|
|
9
17
|
from pfeed import etl
|
|
10
18
|
from pfeed.config_handler import ConfigHandler
|
|
11
19
|
from pfeed.const.commons import SUPPORTED_DATA_TOOLS
|
|
12
|
-
from pfeed.types.common_literals import tSUPPORTED_DATA_TOOLS
|
|
13
20
|
from pfeed.feeds.base_feed import BaseFeed
|
|
14
21
|
from pfeed.sources.bybit import api
|
|
15
22
|
from pfeed.sources.bybit.const import DATA_SOURCE, SUPPORTED_PRODUCT_TYPES, create_efilename, SUPPORTED_RAW_DATA_TYPES
|
|
16
23
|
from pfeed.utils.utils import get_dates_in_between, rollback_date_range
|
|
17
24
|
from pfeed.utils.validate import validate_pdt
|
|
18
|
-
from pfeed.data_tools.data_tool_polars import estimate_memory_usage
|
|
19
25
|
# from pfund.exchanges.bybit.exchange import Exchange
|
|
20
26
|
|
|
21
27
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "pfeed"
|
|
3
|
-
version = "0.0.1.
|
|
3
|
+
version = "0.0.1.dev10"
|
|
4
4
|
description = "Data pipeline for algo-trading, getting and storing both real-time and historical data made easy."
|
|
5
5
|
license = "Apache-2.0"
|
|
6
6
|
authors = ["Stephen Yau <softwareentrepreneer+pfeed@gmail.com>"]
|
|
@@ -12,20 +12,21 @@ keywords = ["trading", "algo-trading", "data pipeline", "ETL", "data lake", "dat
|
|
|
12
12
|
|
|
13
13
|
[tool.poetry.dependencies]
|
|
14
14
|
python = ">=3.10 <3.13"
|
|
15
|
-
pfund = "^0.0.1.
|
|
15
|
+
pfund = "^0.0.1.dev10"
|
|
16
16
|
beautifulsoup4 = "^4.12.3"
|
|
17
|
-
tqdm = "^4.66.2"
|
|
18
|
-
s3fs = "^2024.3.1"
|
|
19
|
-
minio = "^7.2.5"
|
|
20
17
|
yfinance = "^0.2.37"
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
18
|
+
psutil = { version = "^5.9.8", optional = true }
|
|
19
|
+
s3fs = { version = "^2024.3.1", optional = true }
|
|
20
|
+
minio = { version = "^7.2.5", optional = true }
|
|
21
|
+
pandas = { version = "^2.2.0", optional = true }
|
|
22
|
+
polars = { version = "^0.20.16", optional = true }
|
|
23
|
+
connectorx = { version = "^0.3.2", optional = true }
|
|
24
24
|
pyarrow = { version = "^15.0.0", optional = true }
|
|
25
|
-
ray = { version = "^2.10.0", optional = true}
|
|
25
|
+
ray = { version = "^2.10.0", optional = true }
|
|
26
26
|
|
|
27
27
|
[tool.poetry.extras]
|
|
28
28
|
df = ["pandas", "polars"]
|
|
29
|
+
data = ["psutil", "minio", "s3fs"]
|
|
29
30
|
boost = ["pyarrow", "connectorx", "ray"]
|
|
30
31
|
|
|
31
32
|
[tool.poetry.scripts]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|