Repository navigation
Expand file tree
/
Copy pathpyproject.toml
More file actions
126 lines (112 loc) · 3.76 KB
/
Copy pathpyproject.toml
File metadata and controls
126 lines (112 loc) · 3.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# Copyright (C) 2017-2026 Bryant Moscon - bmoscon@gmail.com
#
# Please see the LICENSE file for the terms and conditions
# associated with this software.
[build-system]
requires = ["setuptools>=77.0.3", "Cython>=3.1"]
build-backend = "setuptools.build_meta"
[project]
name = "cryptofeed"
version = "3.0.2"
description = "Cryptocurrency Exchange Websocket Data Feed Handler"
readme = "README.md"
license = "AGPL-3.0-or-later"
license-files = ["LICENSE"]
authors = [
{name = "Bryant Moscon", email = "bmoscon@gmail.com"}
]
keywords = [
"cryptocurrency", "bitcoin", "btc", "feed handler", "market feed", "market data", "crypto assets",
"Trades", "Tickers", "BBO", "Funding", "Open Interest", "Liquidation", "Order book", "Bid", "Ask",
"Binance", "Binance Delivery", "Binance Futures", "Binance US", "Bitfinex", "bitFlyer", "Bitget",
"Bithumb", "Bitstamp", "Bybit", "Coinbase", "Crypto.com", "Deribit", "Gate", "Gate Futures",
"dYdX", "Gemini", "Hyperliquid", "HTX", "HTX Swap", "Independent Reserve", "Kraken", "Kraken Futures", "KuCoin", "MEXC",
"OKX", "Phemex", "Poloniex", "Upbit"
]
classifiers = [
"Intended Audience :: Developers",
"Development Status :: 4 - Beta",
"Programming Language :: Python :: 3 :: Only",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Programming Language :: Python :: Free Threading :: 2 - Beta",
"Framework :: AsyncIO",
"Operating System :: POSIX :: Linux",
"Operating System :: MacOS :: MacOS X",
]
requires-python = ">=3.13"
dependencies = [
"websockets>=14.1",
"pyyaml",
"aiohttp>=3.14.3",
"msgspec>=0.19.0",
"uvloop ; platform_system!='Windows'",
"order_book>=1.1.0",
"aiodns>=1.1",
"zstandard>=0.23 ; python_version<'3.14'"
]
[project.optional-dependencies]
kafka = ["aiokafka>=0.7.0"]
mongo = ["pymongo>=4.9"]
postgres = ["asyncpg"]
redis = ["hiredis", "redis>=4.5.1"]
zmq = ["pyzmq"]
all = [
"aiokafka>=0.7.0",
"pymongo>=4.9",
"asyncpg",
"hiredis",
"redis>=4.5.1",
"pyzmq",
"zstandard ; python_version < '3.14'",
]
[project.urls]
Homepage = "https://github.com/bmoscon/cryptofeed"
[dependency-groups]
dev = [
"aiokafka>=0.13.0",
"asyncpg>=0.31.0",
"pymongo>=4.9",
"pytest",
"pytest-asyncio",
"pytest-benchmark>=5.2.3",
"pytest-timeout>=2.4.0",
"pyzmq>=27.1.0",
"redis",
"ruff",
"zstandard ; python_version < '3.14'",
]
[tool.setuptools.packages.find]
include = ["cryptofeed*"]
[tool.setuptools.package-data]
cryptofeed = ["*.pyx", "py.typed", "types.pyi"]
# For a debug build that keeps the runtime assertions, remove the CYTHON_WITHOUT_ASSERTIONS macro and rebuild
[[tool.setuptools.ext-modules]]
name = "cryptofeed.types"
sources = ["cryptofeed/types.pyx"]
define-macros = [["CYTHON_WITHOUT_ASSERTIONS", ""]]
[tool.cibuildwheel]
build = "cp313-* cp314-* cp314t-*"
skip = "*musllinux*"
test-command = "python -c \"import sys, sysconfig; from cryptofeed import FeedHandler; from cryptofeed.types import COMPILED_WITH_ASSERTIONS; assert COMPILED_WITH_ASSERTIONS is False; assert not (sysconfig.get_config_var('Py_GIL_DISABLED') and sys._is_gil_enabled()), 'importing cryptofeed re-enabled the GIL'\""
[tool.cibuildwheel.linux]
archs = ["x86_64"]
[tool.cibuildwheel.macos]
archs = ["arm64"]
[tool.ruff.lint]
select = ["E", "F", "W", "ASYNC"]
ignore = ["E501", "F403", "F405"]
[tool.ruff.lint.per-file-ignores]
"__init__.py" = ["F401"]
[tool.pytest.ini_options]
markers = [
"unit: unit tests",
"playback: replay recorded exchange data through the message handlers",
"backend: requires backend services",
"live: hits exchange endpoints",
"bench: performance tests and benchmarks",
]
addopts = "-m 'not live'"
asyncio_mode = "auto"
# a replay that hangs should fail
timeout = 600