Repository navigation
Expand file tree
/
Copy pathpyproject.toml
More file actions
95 lines (87 loc) · 2.81 KB
/
Copy pathpyproject.toml
File metadata and controls
95 lines (87 loc) · 2.81 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
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[project]
name = "django-liveops"
version = "0.4.1"
description = "Long-running operations with live WebSocket+HTMX UI (no reload, no polling)"
readme = "README.md"
requires-python = ">=3.11"
license = { text = "MIT" }
authors = [{ name = "iplweb", email = "support@iplweb.pl" }]
maintainers = [{ name = "Michał Pasternak", email = "michal.dtz@gmail.com" }]
keywords = [
"django",
"channels",
"websocket",
"htmx",
"progress",
"long-running",
"celery",
"real-time",
]
classifiers = [
"Development Status :: 4 - Beta",
"Environment :: Web Environment",
"Framework :: Django",
"Framework :: Django :: 5.2",
"Framework :: Django :: 6.0",
"Framework :: Django :: 6.1",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Topic :: Software Development :: Libraries :: Python Modules",
"Topic :: Internet :: WWW/HTTP",
]
dependencies = [
"django>=5.2",
"channels>=4",
"django-channels-broadcast>=0.2.1",
]
[project.urls]
Funding = "https://buymeacoffee.com/mpasternak"
Homepage = "https://github.com/iplweb/django-liveops"
Repository = "https://github.com/iplweb/django-liveops"
Documentation = "https://iplweb.github.io/django-liveops/"
Changelog = "https://github.com/iplweb/django-liveops/blob/main/CHANGELOG.md"
Issues = "https://github.com/iplweb/django-liveops/issues"
[project.optional-dependencies]
celery = ["celery>=5"]
cli = ["tqdm>=4"]
redis = ["channels-redis>=4"]
dev = [
"pytest",
"pytest-django",
"pytest-asyncio",
"channels[daphne]",
"ruff",
"mkdocs-material",
"testcontainers[redis]>=4",
"channels-redis>=4",
]
[tool.hatch.build.targets.wheel]
packages = ["liveops"]
[tool.pytest.ini_options]
DJANGO_SETTINGS_MODULE = "tests.settings"
pythonpath = ["."]
testpaths = ["tests"]
asyncio_mode = "auto"
[tool.ruff]
line-length = 88
target-version = "py310"
[tool.ruff.lint]
select = ["E", "F", "W", "I"]
[tool.ruff.lint.per-file-ignores]
# test_roundtrip.py imports channels/liveops modules AFTER a
# pytest.skip(allow_module_level=True) guard that bails out when Docker or
# testcontainers is unavailable. The imports must follow the guard, so the
# E402 "module level import not at top of file" is intentional here.
"tests/test_roundtrip.py" = ["E402"]
# Migrations are written by `makemigrations`, not by hand. Django does not wrap
# them to our line length and does not sort their import block, so linting them
# only forces a manual clean-up pass after every schema change.
"**/migrations/*.py" = ["E501", "I001"]