pfeed 0.0.1.dev9__tar.gz → 0.0.1.dev11__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.dev9 → pfeed-0.0.1.dev11}/PKG-INFO +2 -2
- pfeed-0.0.1.dev11/pfeed/__init__.py +45 -0
- {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/etl.py +2 -0
- {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/feeds/bybit_feed.py +13 -7
- {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/filepath.py +2 -0
- pfeed-0.0.1.dev11/pfeed/main.py +18 -0
- {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/sources/bybit/__init__.py +0 -1
- {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/sources/bybit/download.py +1 -1
- {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pyproject.toml +25 -3
- pfeed-0.0.1.dev9/pfeed/__init__.py +0 -17
- pfeed-0.0.1.dev9/pfeed/main.py +0 -10
- pfeed-0.0.1.dev9/pfeed/sources/__init__.py +0 -1
- {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/LICENSE +0 -0
- {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/README.md +0 -0
- {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/cli/__init__.py +0 -0
- {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/cli/commands/__init__.py +0 -0
- {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/cli/commands/config.py +0 -0
- {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/cli/commands/docker_compose.py +0 -0
- {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/cli/commands/download.py +0 -0
- {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/cli/commands/stream.py +0 -0
- {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/cli/main.py +0 -0
- {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/config/logging.yml +0 -0
- {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/config_handler.py +0 -0
- {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/const/commons.py +0 -0
- {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/const/paths.py +0 -0
- {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/data_tools/data_tool_pandas.py +0 -0
- {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/data_tools/data_tool_polars.py +0 -0
- {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/data_tools/data_tool_pyspark.py +0 -0
- {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/datastore.py +0 -0
- {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/feeds/__init__.py +0 -0
- {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/feeds/base_feed.py +0 -0
- {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/feeds/custom_csv_feed.py +0 -0
- {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/feeds/yahoo_finance_feed.py +0 -0
- {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/sources/bybit/api.py +0 -0
- {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/sources/bybit/const.py +0 -0
- {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/sources/bybit/stream.py +0 -0
- {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/types/common_literals.py +0 -0
- {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/utils/monitor.py +0 -0
- {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/utils/utils.py +0 -0
- {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/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.dev11
|
|
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
|
|
@@ -20,7 +20,7 @@ Requires-Dist: beautifulsoup4 (>=4.12.3,<5.0.0)
|
|
|
20
20
|
Requires-Dist: connectorx (>=0.3.2,<0.4.0) ; extra == "boost"
|
|
21
21
|
Requires-Dist: minio (>=7.2.5,<8.0.0) ; extra == "data"
|
|
22
22
|
Requires-Dist: pandas (>=2.2.0,<3.0.0) ; extra == "df"
|
|
23
|
-
Requires-Dist: pfund (>=0.0.1.
|
|
23
|
+
Requires-Dist: pfund (>=0.0.1.dev13,<0.0.2)
|
|
24
24
|
Requires-Dist: polars (>=0.20.16,<0.21.0) ; extra == "df"
|
|
25
25
|
Requires-Dist: psutil (>=5.9.8,<6.0.0) ; extra == "data"
|
|
26
26
|
Requires-Dist: pyarrow (>=15.0.0,<16.0.0) ; extra == "boost"
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
from importlib.metadata import version
|
|
2
|
+
|
|
3
|
+
from pfeed.config_handler import configure
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
# NOTE: dynamically import modules to avoid click cli latency (reduced from ~4s to ~0.2s)
|
|
7
|
+
def __getattr__(name):
|
|
8
|
+
"""
|
|
9
|
+
Dynamically import and return modules and classes based on their name.
|
|
10
|
+
|
|
11
|
+
Supports dynamic loading of data sources and feed classes to minimize
|
|
12
|
+
initial load time.
|
|
13
|
+
|
|
14
|
+
Supported Names:
|
|
15
|
+
- "bybit" -> Dynamically imports from pfeed.sources.bybit
|
|
16
|
+
- Includes any class containing 'Feed' from pfeed.feeds
|
|
17
|
+
"""
|
|
18
|
+
import importlib
|
|
19
|
+
if 'Feed' in name:
|
|
20
|
+
Feed = getattr(importlib.import_module('pfeed.feeds'), name)
|
|
21
|
+
globals()[name] = Feed
|
|
22
|
+
return Feed
|
|
23
|
+
else:
|
|
24
|
+
name = name.lower()
|
|
25
|
+
data_source = importlib.import_module(f'pfeed.sources.{name}')
|
|
26
|
+
globals()[name] = data_source
|
|
27
|
+
return data_source
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
# NOTE: dummy classes/modules for type hinting
|
|
31
|
+
# e.g. import pfeed as pe, when you type "pe.",
|
|
32
|
+
# you will still see the following suggestions even they are dynamically imported:
|
|
33
|
+
bybit: ...
|
|
34
|
+
YahooFinanceFeed: ...
|
|
35
|
+
BybitFeed: ...
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
__version__ = version('pfeed')
|
|
39
|
+
__all__ = (
|
|
40
|
+
'__version__',
|
|
41
|
+
'configure',
|
|
42
|
+
'bybit',
|
|
43
|
+
'YahooFinanceFeed',
|
|
44
|
+
'BybitFeed',
|
|
45
|
+
)
|
|
@@ -1,21 +1,26 @@
|
|
|
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
|
-
from pfeed import etl
|
|
10
17
|
from pfeed.config_handler import ConfigHandler
|
|
11
18
|
from pfeed.const.commons import SUPPORTED_DATA_TOOLS
|
|
12
|
-
from pfeed.types.common_literals import tSUPPORTED_DATA_TOOLS
|
|
13
19
|
from pfeed.feeds.base_feed import BaseFeed
|
|
14
20
|
from pfeed.sources.bybit import api
|
|
15
21
|
from pfeed.sources.bybit.const import DATA_SOURCE, SUPPORTED_PRODUCT_TYPES, create_efilename, SUPPORTED_RAW_DATA_TYPES
|
|
16
22
|
from pfeed.utils.utils import get_dates_in_between, rollback_date_range
|
|
17
23
|
from pfeed.utils.validate import validate_pdt
|
|
18
|
-
from pfeed.data_tools.data_tool_polars import estimate_memory_usage
|
|
19
24
|
# from pfund.exchanges.bybit.exchange import Exchange
|
|
20
25
|
|
|
21
26
|
|
|
@@ -55,7 +60,8 @@ class BybitFeed(BaseFeed):
|
|
|
55
60
|
If the memory usage exceeds the limit, the output DataFrame will be converted to a polars LazyFrame.
|
|
56
61
|
"""
|
|
57
62
|
from pfund.datas.resolution import Resolution
|
|
58
|
-
|
|
63
|
+
from pfeed import etl
|
|
64
|
+
|
|
59
65
|
# exchange = Exchange(env='LIVE')
|
|
60
66
|
# adapter = exchange.adapter
|
|
61
67
|
# product = exchange.create_product(*pdt.split('_'))
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import atexit
|
|
2
|
+
|
|
3
|
+
from pfeed.cli import pfeed_group
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def exit_cli():
|
|
7
|
+
"""Application Exitpoint."""
|
|
8
|
+
print("Cleanup actions here...")
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def run_cli() -> None:
|
|
12
|
+
"""Application Entrypoint."""
|
|
13
|
+
# atexit.register(exit_cli)
|
|
14
|
+
pfeed_group(obj={})
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
if __name__ == '__main__':
|
|
18
|
+
run_cli()
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
from pfeed.sources.bybit import api
|
|
2
1
|
from pfeed.sources.bybit.const import DATA_SOURCE as name
|
|
3
2
|
from pfeed.sources.bybit.download import download_historical_data, download_historical_data as download
|
|
4
3
|
from pfeed.sources.bybit.stream import stream_realtime_data, stream_realtime_data as stream
|
|
@@ -7,7 +7,6 @@ from logging.handlers import QueueHandler, QueueListener
|
|
|
7
7
|
from tqdm import tqdm
|
|
8
8
|
from rich.console import Console
|
|
9
9
|
|
|
10
|
-
from pfeed import etl
|
|
11
10
|
from pfeed.config_handler import ConfigHandler
|
|
12
11
|
from pfeed.utils.utils import get_dates_in_between
|
|
13
12
|
from pfeed.utils.validate import validate_pdts_and_ptypes
|
|
@@ -39,6 +38,7 @@ def create_pdts_using_ptypes(ptypes) -> list[str]:
|
|
|
39
38
|
|
|
40
39
|
|
|
41
40
|
def run_etl(product: BaseProduct, date, dtypes, use_minio):
|
|
41
|
+
from pfeed import etl
|
|
42
42
|
pdt = product.pdt
|
|
43
43
|
if raw_data := api.get_data(pdt, date):
|
|
44
44
|
raw_tick: bytes = etl.clean_raw_data(DATA_SOURCE, raw_data)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "pfeed"
|
|
3
|
-
version = "0.0.1.
|
|
3
|
+
version = "0.0.1.dev11"
|
|
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,7 +12,7 @@ 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.dev13"
|
|
16
16
|
beautifulsoup4 = "^4.12.3"
|
|
17
17
|
yfinance = "^0.2.37"
|
|
18
18
|
psutil = { version = "^5.9.8", optional = true }
|
|
@@ -32,8 +32,30 @@ boost = ["pyarrow", "connectorx", "ray"]
|
|
|
32
32
|
[tool.poetry.scripts]
|
|
33
33
|
pfeed = "pfeed.main:run_cli"
|
|
34
34
|
|
|
35
|
+
[tool.poetry.group.dev]
|
|
36
|
+
optional = true
|
|
37
|
+
|
|
35
38
|
[tool.poetry.group.dev.dependencies]
|
|
36
|
-
pfund = {path = "../pfund", develop = true}
|
|
39
|
+
# pfund = { path = "../pfund", develop = true }
|
|
40
|
+
commitizen = "^3.24.0"
|
|
41
|
+
mypy = "^1.9.0"
|
|
42
|
+
ruff = "^0.3.5"
|
|
43
|
+
grayskull = "^2.5.3"
|
|
44
|
+
|
|
45
|
+
[tool.poetry.group.test.dependencies]
|
|
46
|
+
pytest = "^8.0.0"
|
|
47
|
+
pytest-xdist = "^3.5.0"
|
|
48
|
+
pytest-mock = "^3.14.0"
|
|
49
|
+
pytest-cov = "^5.0.0"
|
|
50
|
+
pre-commit = "^3.6.1"
|
|
51
|
+
tox = "^4.14.2"
|
|
52
|
+
faker = "^24.4.0"
|
|
53
|
+
bandit = "^1.7.7"
|
|
54
|
+
|
|
55
|
+
[tool.poetry.group.doc.dependencies]
|
|
56
|
+
jupyter-book = "^1.0.0"
|
|
57
|
+
notebook = "^7.1.2"
|
|
58
|
+
sphinxawesome-theme = "^5.1.1"
|
|
37
59
|
|
|
38
60
|
[build-system]
|
|
39
61
|
requires = ["poetry-core"]
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
from pfeed.config_handler import configure
|
|
2
|
-
from pfeed.sources import bybit
|
|
3
|
-
from pfeed.feeds import YahooFinanceFeed, BybitFeed
|
|
4
|
-
from importlib.metadata import version
|
|
5
|
-
from pfeed import etl
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
__version__ = version('pfeed')
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
__all__ = (
|
|
12
|
-
'__version__',
|
|
13
|
-
'configure',
|
|
14
|
-
'bybit',
|
|
15
|
-
'YahooFinanceFeed',
|
|
16
|
-
'BybitFeed',
|
|
17
|
-
)
|
pfeed-0.0.1.dev9/pfeed/main.py
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
from pfeed.sources import bybit
|
|
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
|