pfeed 0.0.1.dev10__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.dev10 → 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.dev10 → pfeed-0.0.1.dev11}/pfeed/feeds/bybit_feed.py +2 -2
  4. pfeed-0.0.1.dev11/pfeed/main.py +18 -0
  5. {pfeed-0.0.1.dev10 → pfeed-0.0.1.dev11}/pfeed/sources/bybit/__init__.py +0 -1
  6. {pfeed-0.0.1.dev10 → pfeed-0.0.1.dev11}/pfeed/sources/bybit/download.py +1 -1
  7. {pfeed-0.0.1.dev10 → pfeed-0.0.1.dev11}/pyproject.toml +25 -3
  8. pfeed-0.0.1.dev10/pfeed/__init__.py +0 -17
  9. pfeed-0.0.1.dev10/pfeed/main.py +0 -10
  10. pfeed-0.0.1.dev10/pfeed/sources/__init__.py +0 -1
  11. {pfeed-0.0.1.dev10 → pfeed-0.0.1.dev11}/LICENSE +0 -0
  12. {pfeed-0.0.1.dev10 → pfeed-0.0.1.dev11}/README.md +0 -0
  13. {pfeed-0.0.1.dev10 → pfeed-0.0.1.dev11}/pfeed/cli/__init__.py +0 -0
  14. {pfeed-0.0.1.dev10 → pfeed-0.0.1.dev11}/pfeed/cli/commands/__init__.py +0 -0
  15. {pfeed-0.0.1.dev10 → pfeed-0.0.1.dev11}/pfeed/cli/commands/config.py +0 -0
  16. {pfeed-0.0.1.dev10 → pfeed-0.0.1.dev11}/pfeed/cli/commands/docker_compose.py +0 -0
  17. {pfeed-0.0.1.dev10 → pfeed-0.0.1.dev11}/pfeed/cli/commands/download.py +0 -0
  18. {pfeed-0.0.1.dev10 → pfeed-0.0.1.dev11}/pfeed/cli/commands/stream.py +0 -0
  19. {pfeed-0.0.1.dev10 → pfeed-0.0.1.dev11}/pfeed/cli/main.py +0 -0
  20. {pfeed-0.0.1.dev10 → pfeed-0.0.1.dev11}/pfeed/config/logging.yml +0 -0
  21. {pfeed-0.0.1.dev10 → pfeed-0.0.1.dev11}/pfeed/config_handler.py +0 -0
  22. {pfeed-0.0.1.dev10 → pfeed-0.0.1.dev11}/pfeed/const/commons.py +0 -0
  23. {pfeed-0.0.1.dev10 → pfeed-0.0.1.dev11}/pfeed/const/paths.py +0 -0
  24. {pfeed-0.0.1.dev10 → pfeed-0.0.1.dev11}/pfeed/data_tools/data_tool_pandas.py +0 -0
  25. {pfeed-0.0.1.dev10 → pfeed-0.0.1.dev11}/pfeed/data_tools/data_tool_polars.py +0 -0
  26. {pfeed-0.0.1.dev10 → pfeed-0.0.1.dev11}/pfeed/data_tools/data_tool_pyspark.py +0 -0
  27. {pfeed-0.0.1.dev10 → pfeed-0.0.1.dev11}/pfeed/datastore.py +0 -0
  28. {pfeed-0.0.1.dev10 → pfeed-0.0.1.dev11}/pfeed/etl.py +0 -0
  29. {pfeed-0.0.1.dev10 → pfeed-0.0.1.dev11}/pfeed/feeds/__init__.py +0 -0
  30. {pfeed-0.0.1.dev10 → pfeed-0.0.1.dev11}/pfeed/feeds/base_feed.py +0 -0
  31. {pfeed-0.0.1.dev10 → pfeed-0.0.1.dev11}/pfeed/feeds/custom_csv_feed.py +0 -0
  32. {pfeed-0.0.1.dev10 → pfeed-0.0.1.dev11}/pfeed/feeds/yahoo_finance_feed.py +0 -0
  33. {pfeed-0.0.1.dev10 → pfeed-0.0.1.dev11}/pfeed/filepath.py +0 -0
  34. {pfeed-0.0.1.dev10 → pfeed-0.0.1.dev11}/pfeed/sources/bybit/api.py +0 -0
  35. {pfeed-0.0.1.dev10 → pfeed-0.0.1.dev11}/pfeed/sources/bybit/const.py +0 -0
  36. {pfeed-0.0.1.dev10 → pfeed-0.0.1.dev11}/pfeed/sources/bybit/stream.py +0 -0
  37. {pfeed-0.0.1.dev10 → pfeed-0.0.1.dev11}/pfeed/types/common_literals.py +0 -0
  38. {pfeed-0.0.1.dev10 → pfeed-0.0.1.dev11}/pfeed/utils/monitor.py +0 -0
  39. {pfeed-0.0.1.dev10 → pfeed-0.0.1.dev11}/pfeed/utils/utils.py +0 -0
  40. {pfeed-0.0.1.dev10 → 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.dev10
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.dev10,<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
+ )
@@ -14,7 +14,6 @@ try:
14
14
  except ImportError:
15
15
  pass
16
16
 
17
- from pfeed import etl
18
17
  from pfeed.config_handler import ConfigHandler
19
18
  from pfeed.const.commons import SUPPORTED_DATA_TOOLS
20
19
  from pfeed.feeds.base_feed import BaseFeed
@@ -61,7 +60,8 @@ class BybitFeed(BaseFeed):
61
60
  If the memory usage exceeds the limit, the output DataFrame will be converted to a polars LazyFrame.
62
61
  """
63
62
  from pfund.datas.resolution import Resolution
64
-
63
+ from pfeed import etl
64
+
65
65
  # exchange = Exchange(env='LIVE')
66
66
  # adapter = exchange.adapter
67
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.dev10"
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.dev10"
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
File without changes