ipmg 3.2.0__tar.gz → 4.0.0b1__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 (101) hide show
  1. {ipmg-3.2.0/src/ipmg.egg-info → ipmg-4.0.0b1}/PKG-INFO +14 -7
  2. {ipmg-3.2.0 → ipmg-4.0.0b1}/README.md +11 -3
  3. {ipmg-3.2.0 → ipmg-4.0.0b1}/pyproject.toml +20 -12
  4. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/__init__.py +1 -1
  5. {ipmg-3.2.0 → ipmg-4.0.0b1/src/ipmg.egg-info}/PKG-INFO +14 -7
  6. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg.egg-info/requires.txt +0 -2
  7. {ipmg-3.2.0 → ipmg-4.0.0b1}/LICENSE +0 -0
  8. {ipmg-3.2.0 → ipmg-4.0.0b1}/setup.cfg +0 -0
  9. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/__main__.py +0 -0
  10. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/cli/__init__.py +0 -0
  11. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/cli/commands.py +0 -0
  12. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/cli/completion.py +0 -0
  13. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/cli/config.py +0 -0
  14. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/cli/parser.py +0 -0
  15. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/core/__init__.py +0 -0
  16. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/core/cron.py +0 -0
  17. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/core/diff.py +0 -0
  18. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/core/discovery.py +0 -0
  19. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/core/engine.py +0 -0
  20. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/core/health.py +0 -0
  21. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/core/httpcheck.py +0 -0
  22. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/core/neighbours.py +0 -0
  23. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/core/ping.py +0 -0
  24. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/core/portscan.py +0 -0
  25. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/core/security.py +0 -0
  26. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/core/wake.py +0 -0
  27. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/data/oui.tsv.gz +0 -0
  28. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/exceptions.py +0 -0
  29. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/infrastructure/__init__.py +0 -0
  30. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/infrastructure/database.py +0 -0
  31. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/infrastructure/file_io.py +0 -0
  32. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/infrastructure/incremental.py +0 -0
  33. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/infrastructure/notify.py +0 -0
  34. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/infrastructure/retention.py +0 -0
  35. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/reporting/__init__.py +0 -0
  36. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/reporting/diff_report.py +0 -0
  37. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/reporting/frames.py +0 -0
  38. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/reporting/live.py +0 -0
  39. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/reporting/machine.py +0 -0
  40. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/reporting/metrics.py +0 -0
  41. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/reporting/summary.py +0 -0
  42. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/reporting/ui.py +0 -0
  43. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/services/__init__.py +0 -0
  44. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/services/history_service.py +0 -0
  45. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/services/scan_service.py +0 -0
  46. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/utils/__init__.py +0 -0
  47. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/utils/helpers.py +0 -0
  48. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/web/__init__.py +0 -0
  49. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/web/app.py +0 -0
  50. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/web/db.py +0 -0
  51. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/web/manager.py +0 -0
  52. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/web/scheduler.py +0 -0
  53. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/web/schemas.py +0 -0
  54. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/web/server.py +0 -0
  55. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/web/static/css/app.css +0 -0
  56. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/web/static/index.html +0 -0
  57. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/web/static/js/api.js +0 -0
  58. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/web/static/js/app.js +0 -0
  59. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/web/static/js/charts.js +0 -0
  60. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/web/static/js/demo.js +0 -0
  61. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg/web/static/js/views.js +0 -0
  62. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg.egg-info/SOURCES.txt +0 -0
  63. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg.egg-info/dependency_links.txt +0 -0
  64. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg.egg-info/entry_points.txt +0 -0
  65. {ipmg-3.2.0 → ipmg-4.0.0b1}/src/ipmg.egg-info/top_level.txt +0 -0
  66. {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_api_contract.py +0 -0
  67. {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_commands.py +0 -0
  68. {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_completion.py +0 -0
  69. {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_config.py +0 -0
  70. {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_contrib.py +0 -0
  71. {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_database_history.py +0 -0
  72. {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_diff.py +0 -0
  73. {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_diff_report.py +0 -0
  74. {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_discover.py +0 -0
  75. {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_engine.py +0 -0
  76. {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_file_io.py +0 -0
  77. {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_health.py +0 -0
  78. {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_history_service.py +0 -0
  79. {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_httpcheck.py +0 -0
  80. {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_incremental.py +0 -0
  81. {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_ipv6.py +0 -0
  82. {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_live.py +0 -0
  83. {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_machine_output.py +0 -0
  84. {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_metrics.py +0 -0
  85. {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_neighbours.py +0 -0
  86. {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_notify.py +0 -0
  87. {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_parser.py +0 -0
  88. {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_ping.py +0 -0
  89. {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_ping_command.py +0 -0
  90. {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_portscan.py +0 -0
  91. {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_retention.py +0 -0
  92. {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_scan_service.py +0 -0
  93. {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_schedules.py +0 -0
  94. {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_tcp_probe.py +0 -0
  95. {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_ui.py +0 -0
  96. {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_utils.py +0 -0
  97. {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_wake.py +0 -0
  98. {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_web_api.py +0 -0
  99. {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_web_db.py +0 -0
  100. {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_web_manager.py +0 -0
  101. {ipmg-3.2.0 → ipmg-4.0.0b1}/tests/test_web_server.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ipmg
3
- Version: 3.2.0
3
+ Version: 4.0.0b1
4
4
  Summary: Network discovery and change detection: ping sweeps, scan history, and reports for what changed on your network
5
5
  Author: Sameer Alam
6
6
  Maintainer-email: Sameer Alam <sameeralam3127@gmail.com>
@@ -13,7 +13,6 @@ Project-URL: Changelog, https://github.com/sameeralam3127/ipmg/releases
13
13
  Keywords: ip,network,ping,monitoring,cli,port-scan,network-scanner,ping-sweep,subnet-scanner,homelab,sysadmin
14
14
  Classifier: Programming Language :: Python :: 3
15
15
  Classifier: Programming Language :: Python :: 3 :: Only
16
- Classifier: Programming Language :: Python :: 3.9
17
16
  Classifier: Programming Language :: Python :: 3.10
18
17
  Classifier: Programming Language :: Python :: 3.11
19
18
  Classifier: Programming Language :: Python :: 3.12
@@ -26,7 +25,7 @@ Classifier: Intended Audience :: System Administrators
26
25
  Classifier: Intended Audience :: Information Technology
27
26
  Classifier: Operating System :: OS Independent
28
27
  Classifier: Environment :: Console
29
- Requires-Python: >=3.9
28
+ Requires-Python: >=3.10
30
29
  Description-Content-Type: text/markdown
31
30
  License-File: LICENSE
32
31
  Requires-Dist: openpyxl>=3.1
@@ -48,16 +47,24 @@ Requires-Dist: ruff>=0.4; extra == "dev"
48
47
  Requires-Dist: pre-commit>=3.5.0; extra == "dev"
49
48
  Requires-Dist: python-semantic-release>=10.5.3; extra == "dev"
50
49
  Requires-Dist: httpx>=0.27; extra == "dev"
51
- Requires-Dist: httpx2>=2.0; python_version >= "3.10" and extra == "dev"
50
+ Requires-Dist: httpx2>=2.0; extra == "dev"
52
51
  Dynamic: license-file
53
52
 
54
53
  # IPMG — IP Management & Ping Monitoring Tool
55
54
 
56
55
  [![PyPI](https://img.shields.io/pypi/v/ipmg)](https://pypi.org/project/ipmg/)
57
- ![Python Version](https://img.shields.io/badge/python-3.9%2B-blue)
56
+ ![Python Version](https://img.shields.io/badge/python-3.10%2B-blue)
58
57
  ![License](https://img.shields.io/badge/license-MIT-green)
59
58
  [![Publish](https://github.com/sameeralam3127/ipmg/actions/workflows/publish.yml/badge.svg)](https://github.com/sameeralam3127/ipmg/actions/workflows/publish.yml)
60
59
 
60
+ > [!WARNING]
61
+ > **This is the `v4` branch. IPMG v4 is in beta.** Try it with
62
+ > `pip install --pre ipmg` and report what breaks; keep production systems on
63
+ > the stable 3.x release (`pip install ipmg`) until v4.0.0 is published. v4 is
64
+ > an architectural release: a SOLID, plugin-based core, a streaming scan
65
+ > pipeline, strong typing, and contract tests, with 3.x workflows kept
66
+ > compatible. See the [v4 development plan](docs/v4/PLAN.md).
67
+
61
68
  **Know what changed on your network since the last scan.**
62
69
 
63
70
  IPMG keeps a history of every scan and tells you what moved between two of
@@ -145,7 +152,7 @@ IPMG does not craft packets. It runs your operating system's `ping` command
145
152
  once per host, as a direct process call with no shell, and reads its output.
146
153
  That means:
147
154
 
148
- - **Python 3.9 or newer**, unless you use the one-line installers, which
155
+ - **Python 3.10 or newer**, unless you use the one-line installers, which
149
156
  bring their own.
150
157
  - **The system `ping` command.** macOS and Windows include it; minimal Linux
151
158
  and container images may not ([how to install it](#the-one-thing-ipmg-needs-from-your-system)).
@@ -355,7 +362,7 @@ Windows is not in that list because it cannot be tested in a container: it is
355
362
  covered instead by the CI matrix, which runs the full test suite and a live
356
363
  scan on `windows-latest` for every change.
357
364
 
358
- Python 3.9 through 3.14 are supported, and CI runs the test suite against every
365
+ Python 3.10 through 3.14 are supported, and CI runs the test suite against every
359
366
  one of them.
360
367
 
361
368
  <details>
@@ -1,10 +1,18 @@
1
1
  # IPMG — IP Management & Ping Monitoring Tool
2
2
 
3
3
  [![PyPI](https://img.shields.io/pypi/v/ipmg)](https://pypi.org/project/ipmg/)
4
- ![Python Version](https://img.shields.io/badge/python-3.9%2B-blue)
4
+ ![Python Version](https://img.shields.io/badge/python-3.10%2B-blue)
5
5
  ![License](https://img.shields.io/badge/license-MIT-green)
6
6
  [![Publish](https://github.com/sameeralam3127/ipmg/actions/workflows/publish.yml/badge.svg)](https://github.com/sameeralam3127/ipmg/actions/workflows/publish.yml)
7
7
 
8
+ > [!WARNING]
9
+ > **This is the `v4` branch. IPMG v4 is in beta.** Try it with
10
+ > `pip install --pre ipmg` and report what breaks; keep production systems on
11
+ > the stable 3.x release (`pip install ipmg`) until v4.0.0 is published. v4 is
12
+ > an architectural release: a SOLID, plugin-based core, a streaming scan
13
+ > pipeline, strong typing, and contract tests, with 3.x workflows kept
14
+ > compatible. See the [v4 development plan](docs/v4/PLAN.md).
15
+
8
16
  **Know what changed on your network since the last scan.**
9
17
 
10
18
  IPMG keeps a history of every scan and tells you what moved between two of
@@ -92,7 +100,7 @@ IPMG does not craft packets. It runs your operating system's `ping` command
92
100
  once per host, as a direct process call with no shell, and reads its output.
93
101
  That means:
94
102
 
95
- - **Python 3.9 or newer**, unless you use the one-line installers, which
103
+ - **Python 3.10 or newer**, unless you use the one-line installers, which
96
104
  bring their own.
97
105
  - **The system `ping` command.** macOS and Windows include it; minimal Linux
98
106
  and container images may not ([how to install it](#the-one-thing-ipmg-needs-from-your-system)).
@@ -302,7 +310,7 @@ Windows is not in that list because it cannot be tested in a container: it is
302
310
  covered instead by the CI matrix, which runs the full test suite and a live
303
311
  scan on `windows-latest` for every change.
304
312
 
305
- Python 3.9 through 3.14 are supported, and CI runs the test suite against every
313
+ Python 3.10 through 3.14 are supported, and CI runs the test suite against every
306
314
  one of them.
307
315
 
308
316
  <details>
@@ -13,10 +13,10 @@ build-backend = "setuptools.build_meta"
13
13
 
14
14
  [project]
15
15
  name = "ipmg"
16
- version = "3.2.0" # Managed automatically by semantic-release
16
+ version = "4.0.0-beta.1" # Managed automatically by semantic-release
17
17
  description = "Network discovery and change detection: ping sweeps, scan history, and reports for what changed on your network"
18
18
  readme = "README.md"
19
- requires-python = ">=3.9"
19
+ requires-python = ">=3.10"
20
20
  license = "MIT"
21
21
  license-files = ["LICENSE"]
22
22
 
@@ -33,7 +33,6 @@ keywords = ["ip", "network", "ping", "monitoring", "cli", "port-scan", "network-
33
33
  classifiers = [
34
34
  "Programming Language :: Python :: 3",
35
35
  "Programming Language :: Python :: 3 :: Only",
36
- "Programming Language :: Python :: 3.9",
37
36
  "Programming Language :: Python :: 3.10",
38
37
  "Programming Language :: Python :: 3.11",
39
38
  "Programming Language :: Python :: 3.12",
@@ -84,10 +83,10 @@ dev = [
84
83
  "pre-commit>=3.5.0",
85
84
  "python-semantic-release>=10.5.3",
86
85
  # The TestClient's HTTP client. Starlette 1.x wants httpx2 and warns
87
- # about httpx; the Starlette releases Python 3.9 and the lowest-deps job
88
- # resolve to predate httpx2 and need httpx.
86
+ # about httpx; the older Starlette the lowest-deps job resolves to
87
+ # predates httpx2 and needs httpx.
89
88
  "httpx>=0.27",
90
- "httpx2>=2.0; python_version >= '3.10'",
89
+ "httpx2>=2.0",
91
90
  ]
92
91
 
93
92
  [project.scripts]
@@ -107,10 +106,10 @@ dev = [
107
106
  "pre-commit>=3.5.0",
108
107
  "python-semantic-release>=10.5.3",
109
108
  # The TestClient's HTTP client. Starlette 1.x wants httpx2 and warns
110
- # about httpx; the Starlette releases Python 3.9 and the lowest-deps job
111
- # resolve to predate httpx2 and need httpx.
109
+ # about httpx; the older Starlette the lowest-deps job resolves to
110
+ # predates httpx2 and needs httpx.
112
111
  "httpx>=0.27",
113
- "httpx2>=2.0; python_version >= '3.10'",
112
+ "httpx2>=2.0",
114
113
  ]
115
114
 
116
115
 
@@ -121,7 +120,6 @@ dev = [
121
120
  # Publishing is done by the workflow (pypa/gh-action-pypi-publish), not by
122
121
  # semantic-release itself.
123
122
  [tool.semantic_release]
124
- branch = "main"
125
123
  version_toml = ["pyproject.toml:project.version"]
126
124
  version_variables = ["src/ipmg/__init__.py:__version__"]
127
125
  tag_format = "v{version}"
@@ -129,6 +127,16 @@ commit_message = "chore(release): {version}"
129
127
  build_command = "python -m build"
130
128
  major_on_zero = false
131
129
 
130
+ # main releases; v4 releases betas (4.0.0-beta.N) until it merges into main.
131
+ [tool.semantic_release.branches.main]
132
+ match = "^main$"
133
+ prerelease = false
134
+
135
+ [tool.semantic_release.branches.v4]
136
+ match = "^v4$"
137
+ prerelease = true
138
+ prerelease_token = "beta"
139
+
132
140
  [tool.semantic_release.changelog.default_templates]
133
141
  changelog_file = ".github/CHANGELOG.md"
134
142
 
@@ -178,7 +186,7 @@ fail_under = 90
178
186
 
179
187
  [tool.ruff]
180
188
  line-length = 100
181
- target-version = "py39"
189
+ target-version = "py310"
182
190
 
183
191
  [tool.ruff.lint]
184
192
  select = ["E", "F", "W", "I", "C90"]
@@ -195,4 +203,4 @@ known-first-party = ["ipmg"]
195
203
 
196
204
  [tool.black]
197
205
  line-length = 100
198
- target-version = ["py39"]
206
+ target-version = ["py310"]
@@ -2,4 +2,4 @@
2
2
  ipmg - IP Management & Ping Monitoring Tool
3
3
  """
4
4
 
5
- __version__ = "3.2.0"
5
+ __version__ = "4.0.0-beta.1"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ipmg
3
- Version: 3.2.0
3
+ Version: 4.0.0b1
4
4
  Summary: Network discovery and change detection: ping sweeps, scan history, and reports for what changed on your network
5
5
  Author: Sameer Alam
6
6
  Maintainer-email: Sameer Alam <sameeralam3127@gmail.com>
@@ -13,7 +13,6 @@ Project-URL: Changelog, https://github.com/sameeralam3127/ipmg/releases
13
13
  Keywords: ip,network,ping,monitoring,cli,port-scan,network-scanner,ping-sweep,subnet-scanner,homelab,sysadmin
14
14
  Classifier: Programming Language :: Python :: 3
15
15
  Classifier: Programming Language :: Python :: 3 :: Only
16
- Classifier: Programming Language :: Python :: 3.9
17
16
  Classifier: Programming Language :: Python :: 3.10
18
17
  Classifier: Programming Language :: Python :: 3.11
19
18
  Classifier: Programming Language :: Python :: 3.12
@@ -26,7 +25,7 @@ Classifier: Intended Audience :: System Administrators
26
25
  Classifier: Intended Audience :: Information Technology
27
26
  Classifier: Operating System :: OS Independent
28
27
  Classifier: Environment :: Console
29
- Requires-Python: >=3.9
28
+ Requires-Python: >=3.10
30
29
  Description-Content-Type: text/markdown
31
30
  License-File: LICENSE
32
31
  Requires-Dist: openpyxl>=3.1
@@ -48,16 +47,24 @@ Requires-Dist: ruff>=0.4; extra == "dev"
48
47
  Requires-Dist: pre-commit>=3.5.0; extra == "dev"
49
48
  Requires-Dist: python-semantic-release>=10.5.3; extra == "dev"
50
49
  Requires-Dist: httpx>=0.27; extra == "dev"
51
- Requires-Dist: httpx2>=2.0; python_version >= "3.10" and extra == "dev"
50
+ Requires-Dist: httpx2>=2.0; extra == "dev"
52
51
  Dynamic: license-file
53
52
 
54
53
  # IPMG — IP Management & Ping Monitoring Tool
55
54
 
56
55
  [![PyPI](https://img.shields.io/pypi/v/ipmg)](https://pypi.org/project/ipmg/)
57
- ![Python Version](https://img.shields.io/badge/python-3.9%2B-blue)
56
+ ![Python Version](https://img.shields.io/badge/python-3.10%2B-blue)
58
57
  ![License](https://img.shields.io/badge/license-MIT-green)
59
58
  [![Publish](https://github.com/sameeralam3127/ipmg/actions/workflows/publish.yml/badge.svg)](https://github.com/sameeralam3127/ipmg/actions/workflows/publish.yml)
60
59
 
60
+ > [!WARNING]
61
+ > **This is the `v4` branch. IPMG v4 is in beta.** Try it with
62
+ > `pip install --pre ipmg` and report what breaks; keep production systems on
63
+ > the stable 3.x release (`pip install ipmg`) until v4.0.0 is published. v4 is
64
+ > an architectural release: a SOLID, plugin-based core, a streaming scan
65
+ > pipeline, strong typing, and contract tests, with 3.x workflows kept
66
+ > compatible. See the [v4 development plan](docs/v4/PLAN.md).
67
+
61
68
  **Know what changed on your network since the last scan.**
62
69
 
63
70
  IPMG keeps a history of every scan and tells you what moved between two of
@@ -145,7 +152,7 @@ IPMG does not craft packets. It runs your operating system's `ping` command
145
152
  once per host, as a direct process call with no shell, and reads its output.
146
153
  That means:
147
154
 
148
- - **Python 3.9 or newer**, unless you use the one-line installers, which
155
+ - **Python 3.10 or newer**, unless you use the one-line installers, which
149
156
  bring their own.
150
157
  - **The system `ping` command.** macOS and Windows include it; minimal Linux
151
158
  and container images may not ([how to install it](#the-one-thing-ipmg-needs-from-your-system)).
@@ -355,7 +362,7 @@ Windows is not in that list because it cannot be tested in a container: it is
355
362
  covered instead by the CI matrix, which runs the full test suite and a live
356
363
  scan on `windows-latest` for every change.
357
364
 
358
- Python 3.9 through 3.14 are supported, and CI runs the test suite against every
365
+ Python 3.10 through 3.14 are supported, and CI runs the test suite against every
359
366
  one of them.
360
367
 
361
368
  <details>
@@ -15,8 +15,6 @@ ruff>=0.4
15
15
  pre-commit>=3.5.0
16
16
  python-semantic-release>=10.5.3
17
17
  httpx>=0.27
18
-
19
- [dev:python_version >= "3.10"]
20
18
  httpx2>=2.0
21
19
 
22
20
  [web]
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
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
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