arthexis 0.1.16__py3-none-any.whl → 0.1.28__py3-none-any.whl

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.

Potentially problematic release.


This version of arthexis might be problematic. Click here for more details.

Files changed (67) hide show
  1. {arthexis-0.1.16.dist-info → arthexis-0.1.28.dist-info}/METADATA +95 -41
  2. arthexis-0.1.28.dist-info/RECORD +112 -0
  3. config/asgi.py +1 -15
  4. config/middleware.py +47 -1
  5. config/settings.py +21 -30
  6. config/settings_helpers.py +176 -1
  7. config/urls.py +69 -1
  8. core/admin.py +805 -473
  9. core/apps.py +6 -8
  10. core/auto_upgrade.py +19 -4
  11. core/backends.py +13 -3
  12. core/celery_utils.py +73 -0
  13. core/changelog.py +66 -5
  14. core/environment.py +4 -5
  15. core/models.py +1825 -218
  16. core/notifications.py +1 -1
  17. core/reference_utils.py +10 -11
  18. core/release.py +55 -7
  19. core/sigil_builder.py +2 -2
  20. core/sigil_resolver.py +1 -66
  21. core/system.py +285 -4
  22. core/tasks.py +439 -138
  23. core/test_system_info.py +43 -5
  24. core/tests.py +516 -18
  25. core/user_data.py +94 -21
  26. core/views.py +348 -186
  27. nodes/admin.py +904 -67
  28. nodes/apps.py +12 -1
  29. nodes/feature_checks.py +30 -0
  30. nodes/models.py +800 -127
  31. nodes/rfid_sync.py +1 -1
  32. nodes/tasks.py +98 -3
  33. nodes/tests.py +1381 -152
  34. nodes/urls.py +15 -1
  35. nodes/utils.py +51 -3
  36. nodes/views.py +1382 -152
  37. ocpp/admin.py +1970 -152
  38. ocpp/consumers.py +839 -34
  39. ocpp/models.py +968 -17
  40. ocpp/network.py +398 -0
  41. ocpp/store.py +411 -43
  42. ocpp/tasks.py +261 -3
  43. ocpp/test_export_import.py +1 -0
  44. ocpp/test_rfid.py +194 -6
  45. ocpp/tests.py +1918 -87
  46. ocpp/transactions_io.py +9 -1
  47. ocpp/urls.py +8 -3
  48. ocpp/views.py +700 -53
  49. pages/admin.py +262 -30
  50. pages/apps.py +35 -0
  51. pages/context_processors.py +28 -21
  52. pages/defaults.py +1 -1
  53. pages/forms.py +31 -8
  54. pages/middleware.py +6 -2
  55. pages/models.py +86 -2
  56. pages/module_defaults.py +5 -5
  57. pages/site_config.py +137 -0
  58. pages/tests.py +1050 -126
  59. pages/urls.py +14 -2
  60. pages/utils.py +70 -0
  61. pages/views.py +622 -56
  62. arthexis-0.1.16.dist-info/RECORD +0 -111
  63. core/workgroup_urls.py +0 -17
  64. core/workgroup_views.py +0 -94
  65. {arthexis-0.1.16.dist-info → arthexis-0.1.28.dist-info}/WHEEL +0 -0
  66. {arthexis-0.1.16.dist-info → arthexis-0.1.28.dist-info}/licenses/LICENSE +0 -0
  67. {arthexis-0.1.16.dist-info → arthexis-0.1.28.dist-info}/top_level.txt +0 -0
core/test_system_info.py CHANGED
@@ -64,13 +64,28 @@ class SystemInfoModeTests(SimpleTestCase):
64
64
  try:
65
65
  info = _gather_info()
66
66
  self.assertEqual(info["mode"], "public")
67
- self.assertEqual(info["port"], 8000)
67
+ self.assertEqual(info["port"], 8888)
68
68
  finally:
69
69
  lock_file.unlink()
70
70
  if not any(lock_dir.iterdir()):
71
71
  lock_dir.rmdir()
72
72
 
73
73
 
74
+ class SystemInfoPortLockTests(SimpleTestCase):
75
+ def test_uses_backend_port_lock_when_present(self):
76
+ lock_dir = Path(settings.BASE_DIR) / "locks"
77
+ lock_dir.mkdir(exist_ok=True)
78
+ port_file = lock_dir / "backend_port.lck"
79
+ port_file.write_text("9010", encoding="utf-8")
80
+ try:
81
+ info = _gather_info()
82
+ self.assertEqual(info["port"], 9010)
83
+ finally:
84
+ port_file.unlink()
85
+ if not any(lock_dir.iterdir()):
86
+ lock_dir.rmdir()
87
+
88
+
74
89
  class SystemInfoRevisionTests(SimpleTestCase):
75
90
  @patch("core.system.revision.get_revision", return_value="abcdef1234567890")
76
91
  def test_includes_full_revision(self, mock_revision):
@@ -146,21 +161,44 @@ class SystemInfoRunserverDetectionTests(SimpleTestCase):
146
161
  mock_run.return_value = CompletedProcess(
147
162
  args=["pgrep"],
148
163
  returncode=0,
149
- stdout="123 python manage.py runserver 0.0.0.0:8000 --noreload\n",
164
+ stdout="123 python manage.py runserver 0.0.0.0:8888 --noreload\n",
150
165
  )
151
166
 
152
167
  info = _gather_info()
153
168
 
154
169
  self.assertTrue(info["running"])
155
- self.assertEqual(info["port"], 8000)
170
+ self.assertEqual(info["port"], 8888)
156
171
 
157
- @patch("core.system._probe_ports", return_value=(True, 8000))
172
+ @patch("core.system._probe_ports", return_value=(True, 8888))
158
173
  @patch("core.system.subprocess.run", side_effect=FileNotFoundError)
159
174
  def test_falls_back_to_port_probe_when_pgrep_missing(self, mock_run, mock_probe):
160
175
  info = _gather_info()
161
176
 
162
177
  self.assertTrue(info["running"])
163
- self.assertEqual(info["port"], 8000)
178
+ self.assertEqual(info["port"], 8888)
179
+
180
+ @patch("core.system._probe_ports", return_value=(False, None))
181
+ @patch("core.system.subprocess.run")
182
+ def test_runserver_fallbacks_to_backend_port_lock(self, mock_run, mock_probe):
183
+ lock_dir = Path(settings.BASE_DIR) / "locks"
184
+ lock_dir.mkdir(exist_ok=True)
185
+ port_file = lock_dir / "backend_port.lck"
186
+ port_file.write_text("9042", encoding="utf-8")
187
+ mock_run.return_value = CompletedProcess(
188
+ args=["pgrep"],
189
+ returncode=0,
190
+ stdout="123 python manage.py runserver --noreload\n",
191
+ )
192
+
193
+ try:
194
+ info = _gather_info()
195
+ finally:
196
+ port_file.unlink()
197
+ if not any(lock_dir.iterdir()):
198
+ lock_dir.rmdir()
199
+
200
+ self.assertTrue(info["running"])
201
+ self.assertEqual(info["port"], 9042)
164
202
 
165
203
 
166
204
  class SystemSigilValueTests(SimpleTestCase):