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.
Files changed (40) hide show
  1. {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/PKG-INFO +2 -2
  2. pfeed-0.0.1.dev11/pfeed/__init__.py +45 -0
  3. {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/etl.py +2 -0
  4. {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/feeds/bybit_feed.py +13 -7
  5. {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/filepath.py +2 -0
  6. pfeed-0.0.1.dev11/pfeed/main.py +18 -0
  7. {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/sources/bybit/__init__.py +0 -1
  8. {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/sources/bybit/download.py +1 -1
  9. {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pyproject.toml +25 -3
  10. pfeed-0.0.1.dev9/pfeed/__init__.py +0 -17
  11. pfeed-0.0.1.dev9/pfeed/main.py +0 -10
  12. pfeed-0.0.1.dev9/pfeed/sources/__init__.py +0 -1
  13. {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/LICENSE +0 -0
  14. {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/README.md +0 -0
  15. {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/cli/__init__.py +0 -0
  16. {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/cli/commands/__init__.py +0 -0
  17. {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/cli/commands/config.py +0 -0
  18. {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/cli/commands/docker_compose.py +0 -0
  19. {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/cli/commands/download.py +0 -0
  20. {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/cli/commands/stream.py +0 -0
  21. {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/cli/main.py +0 -0
  22. {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/config/logging.yml +0 -0
  23. {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/config_handler.py +0 -0
  24. {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/const/commons.py +0 -0
  25. {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/const/paths.py +0 -0
  26. {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/data_tools/data_tool_pandas.py +0 -0
  27. {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/data_tools/data_tool_polars.py +0 -0
  28. {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/data_tools/data_tool_pyspark.py +0 -0
  29. {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/datastore.py +0 -0
  30. {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/feeds/__init__.py +0 -0
  31. {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/feeds/base_feed.py +0 -0
  32. {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/feeds/custom_csv_feed.py +0 -0
  33. {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/feeds/yahoo_finance_feed.py +0 -0
  34. {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/sources/bybit/api.py +0 -0
  35. {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/sources/bybit/const.py +0 -0
  36. {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/sources/bybit/stream.py +0 -0
  37. {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/types/common_literals.py +0 -0
  38. {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/utils/monitor.py +0 -0
  39. {pfeed-0.0.1.dev9 → pfeed-0.0.1.dev11}/pfeed/utils/utils.py +0 -0
  40. {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.dev9
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.dev9,<0.0.2)
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,4 +1,6 @@
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
@@ -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
- import polars as pl
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('_'))
@@ -1,3 +1,5 @@
1
+ from __future__ import annotations
2
+
1
3
  from dataclasses import dataclass, field
2
4
  from pathlib import Path
3
5
 
@@ -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.dev9"
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.dev9"
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
- )
@@ -1,10 +0,0 @@
1
- from pfeed.cli import pfeed_group
2
-
3
-
4
- def run_cli() -> None:
5
- """Application Entrypoint."""
6
- pfeed_group(obj={})
7
-
8
-
9
- if __name__ == '__main__':
10
- run_cli()
@@ -1 +0,0 @@
1
- from pfeed.sources import bybit
File without changes
File without changes