pfeed 0.0.1.dev7__tar.gz → 0.0.1.dev9__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.dev7 → pfeed-0.0.1.dev9}/PKG-INFO +27 -11
- {pfeed-0.0.1.dev7 → pfeed-0.0.1.dev9}/README.md +14 -0
- {pfeed-0.0.1.dev7 → pfeed-0.0.1.dev9}/pfeed/etl.py +20 -7
- {pfeed-0.0.1.dev7 → pfeed-0.0.1.dev9}/pfeed/sources/bybit/__init__.py +0 -1
- {pfeed-0.0.1.dev7 → pfeed-0.0.1.dev9}/pfeed/sources/bybit/download.py +0 -1
- {pfeed-0.0.1.dev7 → pfeed-0.0.1.dev9}/pyproject.toml +15 -38
- {pfeed-0.0.1.dev7 → pfeed-0.0.1.dev9}/LICENSE +0 -0
- {pfeed-0.0.1.dev7 → pfeed-0.0.1.dev9}/pfeed/__init__.py +0 -0
- {pfeed-0.0.1.dev7 → pfeed-0.0.1.dev9}/pfeed/cli/__init__.py +0 -0
- {pfeed-0.0.1.dev7 → pfeed-0.0.1.dev9}/pfeed/cli/commands/__init__.py +0 -0
- {pfeed-0.0.1.dev7 → pfeed-0.0.1.dev9}/pfeed/cli/commands/config.py +0 -0
- {pfeed-0.0.1.dev7 → pfeed-0.0.1.dev9}/pfeed/cli/commands/docker_compose.py +0 -0
- {pfeed-0.0.1.dev7 → pfeed-0.0.1.dev9}/pfeed/cli/commands/download.py +0 -0
- {pfeed-0.0.1.dev7 → pfeed-0.0.1.dev9}/pfeed/cli/commands/stream.py +0 -0
- {pfeed-0.0.1.dev7 → pfeed-0.0.1.dev9}/pfeed/cli/main.py +0 -0
- {pfeed-0.0.1.dev7 → pfeed-0.0.1.dev9}/pfeed/config/logging.yml +0 -0
- {pfeed-0.0.1.dev7 → pfeed-0.0.1.dev9}/pfeed/config_handler.py +0 -0
- {pfeed-0.0.1.dev7 → pfeed-0.0.1.dev9}/pfeed/const/commons.py +0 -0
- {pfeed-0.0.1.dev7 → pfeed-0.0.1.dev9}/pfeed/const/paths.py +0 -0
- {pfeed-0.0.1.dev7 → pfeed-0.0.1.dev9}/pfeed/data_tools/data_tool_pandas.py +0 -0
- {pfeed-0.0.1.dev7 → pfeed-0.0.1.dev9}/pfeed/data_tools/data_tool_polars.py +0 -0
- {pfeed-0.0.1.dev7 → pfeed-0.0.1.dev9}/pfeed/data_tools/data_tool_pyspark.py +0 -0
- {pfeed-0.0.1.dev7 → pfeed-0.0.1.dev9}/pfeed/datastore.py +0 -0
- {pfeed-0.0.1.dev7 → pfeed-0.0.1.dev9}/pfeed/feeds/__init__.py +0 -0
- {pfeed-0.0.1.dev7 → pfeed-0.0.1.dev9}/pfeed/feeds/base_feed.py +0 -0
- {pfeed-0.0.1.dev7 → pfeed-0.0.1.dev9}/pfeed/feeds/bybit_feed.py +0 -0
- {pfeed-0.0.1.dev7 → pfeed-0.0.1.dev9}/pfeed/feeds/custom_csv_feed.py +0 -0
- {pfeed-0.0.1.dev7 → pfeed-0.0.1.dev9}/pfeed/feeds/yahoo_finance_feed.py +0 -0
- {pfeed-0.0.1.dev7 → pfeed-0.0.1.dev9}/pfeed/filepath.py +0 -0
- {pfeed-0.0.1.dev7 → pfeed-0.0.1.dev9}/pfeed/main.py +0 -0
- {pfeed-0.0.1.dev7 → pfeed-0.0.1.dev9}/pfeed/sources/__init__.py +0 -0
- {pfeed-0.0.1.dev7 → pfeed-0.0.1.dev9}/pfeed/sources/bybit/api.py +0 -0
- {pfeed-0.0.1.dev7 → pfeed-0.0.1.dev9}/pfeed/sources/bybit/const.py +0 -0
- {pfeed-0.0.1.dev7 → pfeed-0.0.1.dev9}/pfeed/sources/bybit/stream.py +0 -0
- {pfeed-0.0.1.dev7 → pfeed-0.0.1.dev9}/pfeed/types/common_literals.py +0 -0
- {pfeed-0.0.1.dev7 → pfeed-0.0.1.dev9}/pfeed/utils/monitor.py +0 -0
- {pfeed-0.0.1.dev7 → pfeed-0.0.1.dev9}/pfeed/utils/utils.py +0 -0
- {pfeed-0.0.1.dev7 → pfeed-0.0.1.dev9}/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.dev9
|
|
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
|
|
@@ -13,17 +13,19 @@ Classifier: Programming Language :: Python :: 3
|
|
|
13
13
|
Classifier: Programming Language :: Python :: 3.10
|
|
14
14
|
Classifier: Programming Language :: Python :: 3.11
|
|
15
15
|
Classifier: Programming Language :: Python :: 3.12
|
|
16
|
+
Provides-Extra: boost
|
|
17
|
+
Provides-Extra: data
|
|
18
|
+
Provides-Extra: df
|
|
16
19
|
Requires-Dist: beautifulsoup4 (>=4.12.3,<5.0.0)
|
|
17
|
-
Requires-Dist:
|
|
18
|
-
Requires-Dist: minio (>=7.2.5,<8.0.0)
|
|
19
|
-
Requires-Dist:
|
|
20
|
-
Requires-Dist:
|
|
21
|
-
Requires-Dist:
|
|
22
|
-
Requires-Dist:
|
|
23
|
-
Requires-Dist:
|
|
24
|
-
Requires-Dist:
|
|
25
|
-
Requires-Dist: s3fs (>=2024.3.1,<2025.0.0)
|
|
26
|
-
Requires-Dist: tqdm (>=4.66.2,<5.0.0)
|
|
20
|
+
Requires-Dist: connectorx (>=0.3.2,<0.4.0) ; extra == "boost"
|
|
21
|
+
Requires-Dist: minio (>=7.2.5,<8.0.0) ; extra == "data"
|
|
22
|
+
Requires-Dist: pandas (>=2.2.0,<3.0.0) ; extra == "df"
|
|
23
|
+
Requires-Dist: pfund (>=0.0.1.dev9,<0.0.2)
|
|
24
|
+
Requires-Dist: polars (>=0.20.16,<0.21.0) ; extra == "df"
|
|
25
|
+
Requires-Dist: psutil (>=5.9.8,<6.0.0) ; extra == "data"
|
|
26
|
+
Requires-Dist: pyarrow (>=15.0.0,<16.0.0) ; extra == "boost"
|
|
27
|
+
Requires-Dist: ray (>=2.10.0,<3.0.0) ; extra == "boost"
|
|
28
|
+
Requires-Dist: s3fs (>=2024.3.1,<2025.0.0) ; extra == "data"
|
|
27
29
|
Requires-Dist: yfinance (>=0.2.37,<0.3.0)
|
|
28
30
|
Project-URL: Documentation, https://pfeed-docs.pfund.ai
|
|
29
31
|
Project-URL: Repository, https://github.com/PFund-Software-Ltd/pfeed
|
|
@@ -99,14 +101,28 @@ However, preparing this data for use is not quick and easy. For example, sometim
|
|
|
99
101
|
## Installation
|
|
100
102
|
### Using [Poetry](https://python-poetry.org) (Recommended)
|
|
101
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
|
|
102
108
|
poetry add pfeed
|
|
109
|
+
|
|
110
|
+
# update to the latest version:
|
|
111
|
+
poetry update pfeed
|
|
103
112
|
```
|
|
104
113
|
|
|
105
114
|
### Using Pip
|
|
106
115
|
```bash
|
|
107
116
|
pip install pfeed
|
|
117
|
+
|
|
118
|
+
# install the latest version:
|
|
119
|
+
pip install -U pfeed
|
|
108
120
|
```
|
|
109
121
|
|
|
122
|
+
### Checking your installation
|
|
123
|
+
```bash
|
|
124
|
+
$ pfeed --version
|
|
125
|
+
```
|
|
110
126
|
|
|
111
127
|
## Quick Start
|
|
112
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
|
|
@@ -3,16 +3,24 @@ import io
|
|
|
3
3
|
import logging
|
|
4
4
|
import importlib
|
|
5
5
|
|
|
6
|
+
from typing import TYPE_CHECKING
|
|
7
|
+
if TYPE_CHECKING:
|
|
8
|
+
from pfeed.types.common_literals import tSUPPORTED_DATA_TOOLS, tSUPPORTED_DOWNLOAD_DATA_SOURCES, tSUPPORTED_DATA_SINKS, tSUPPORTED_DATA_TYPES, tSUPPORTED_DATA_MODES
|
|
9
|
+
|
|
6
10
|
import pandas as pd
|
|
7
|
-
from minio.error import MinioException
|
|
8
11
|
|
|
9
|
-
|
|
12
|
+
try:
|
|
13
|
+
from pfeed.datastore import Datastore, MinioException
|
|
14
|
+
except ImportError:
|
|
15
|
+
pass
|
|
10
16
|
from pfeed.filepath import FilePath
|
|
11
17
|
from pfeed.config_handler import ConfigHandler
|
|
12
18
|
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
19
|
from pfund.datas.resolution import Resolution
|
|
20
|
+
try:
|
|
21
|
+
from pfeed.utils.monitor import print_disk_usage
|
|
22
|
+
except ImportError:
|
|
23
|
+
print_disk_usage = None
|
|
16
24
|
|
|
17
25
|
|
|
18
26
|
logger = logging.getLogger('pfeed')
|
|
@@ -47,7 +55,7 @@ def get_data(
|
|
|
47
55
|
|
|
48
56
|
Returns:
|
|
49
57
|
bytes | None: The extracted data as bytes, or None if the data is not found.
|
|
50
|
-
"""
|
|
58
|
+
"""
|
|
51
59
|
for data_sink in SUPPORTED_DATA_SINKS:
|
|
52
60
|
try:
|
|
53
61
|
data: bytes = extract_data(data_sink, data_source, dtype, pdt, date, mode=mode)
|
|
@@ -173,7 +181,8 @@ def load_data(
|
|
|
173
181
|
logger.info(f'loaded {data_source} data to MinIO object {object_name} {kwargs=}')
|
|
174
182
|
else:
|
|
175
183
|
raise NotImplementedError(f'{data_sink=}')
|
|
176
|
-
print_disk_usage
|
|
184
|
+
if print_disk_usage:
|
|
185
|
+
print_disk_usage(config.data_path)
|
|
177
186
|
|
|
178
187
|
|
|
179
188
|
def clean_raw_data(data_source: tSUPPORTED_DOWNLOAD_DATA_SOURCES, raw_data: bytes) -> bytes:
|
|
@@ -209,5 +218,9 @@ def clean_raw_tick_data(raw_tick: bytes) -> bytes:
|
|
|
209
218
|
|
|
210
219
|
|
|
211
220
|
def resample_data(data: bytes, resolution: str | Resolution, data_tool: tSUPPORTED_DATA_TOOLS='polars', check_if_drop_last_bar=False) -> bytes:
|
|
212
|
-
|
|
221
|
+
try:
|
|
222
|
+
data_tool = importlib.import_module(f'pfeed.data_tools.data_tool_{data_tool.lower()}')
|
|
223
|
+
except ImportError:
|
|
224
|
+
# fallback data_tool to pandas
|
|
225
|
+
data_tool = importlib.import_module('pfeed.data_tools.data_tool_pandas')
|
|
213
226
|
return data_tool.resample_data(data, resolution, check_if_drop_last_bar=check_if_drop_last_bar)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "pfeed"
|
|
3
|
-
version = "0.0.1.
|
|
3
|
+
version = "0.0.1.dev9"
|
|
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,51 +12,28 @@ 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.
|
|
16
|
-
python-dotenv = "^1.0.1"
|
|
17
|
-
pyyaml = "^6.0.1"
|
|
15
|
+
pfund = "^0.0.1.dev9"
|
|
18
16
|
beautifulsoup4 = "^4.12.3"
|
|
19
|
-
requests = "^2.31.0"
|
|
20
|
-
rich = "^13.7.0"
|
|
21
|
-
tqdm = "^4.66.2"
|
|
22
|
-
click = "^8.1.7"
|
|
23
|
-
s3fs = "^2024.3.1"
|
|
24
|
-
minio = "^7.2.5"
|
|
25
17
|
yfinance = "^0.2.37"
|
|
26
|
-
|
|
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
|
+
pyarrow = { version = "^15.0.0", optional = true }
|
|
25
|
+
ray = { version = "^2.10.0", optional = true }
|
|
26
|
+
|
|
27
|
+
[tool.poetry.extras]
|
|
28
|
+
df = ["pandas", "polars"]
|
|
29
|
+
data = ["psutil", "minio", "s3fs"]
|
|
30
|
+
boost = ["pyarrow", "connectorx", "ray"]
|
|
27
31
|
|
|
28
32
|
[tool.poetry.scripts]
|
|
29
33
|
pfeed = "pfeed.main:run_cli"
|
|
30
34
|
|
|
31
|
-
[tool.poetry.group.pyodide-incompatible.dependencies]
|
|
32
|
-
pandas = "^2.2.0"
|
|
33
|
-
pyarrow = "^15.0.0"
|
|
34
|
-
polars = "^0.20.16"
|
|
35
|
-
connectorx = "^0.3.2"
|
|
36
|
-
ray = "^2.10.0"
|
|
37
|
-
|
|
38
|
-
[tool.poetry.group.dev]
|
|
39
|
-
optional = true
|
|
40
|
-
|
|
41
35
|
[tool.poetry.group.dev.dependencies]
|
|
42
36
|
pfund = {path = "../pfund", develop = true}
|
|
43
|
-
pytest = "^8.0.0"
|
|
44
|
-
pre-commit = "^3.6.0"
|
|
45
|
-
bandit = "^1.7.7"
|
|
46
|
-
pytest-xdist = "^3.5.0"
|
|
47
|
-
faker = "^24.4.0"
|
|
48
|
-
tox = "^4.14.2"
|
|
49
|
-
mypy = "^1.9.0"
|
|
50
|
-
ruff = "^0.3.5"
|
|
51
|
-
pytest-mock = "^3.14.0"
|
|
52
|
-
pytest-cov = "^5.0.0"
|
|
53
|
-
|
|
54
|
-
[tool.poetry.group.doc]
|
|
55
|
-
optional = true
|
|
56
|
-
|
|
57
|
-
[tool.poetry.group.doc.dependencies]
|
|
58
|
-
jupyter-book = "^1.0.0"
|
|
59
|
-
notebook = "^7.1.0"
|
|
60
37
|
|
|
61
38
|
[build-system]
|
|
62
39
|
requires = ["poetry-core"]
|
|
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
|
|
File without changes
|