arthexis 0.1.23__tar.gz → 0.1.28__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.

Potentially problematic release.


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

Files changed (263) hide show
  1. {arthexis-0.1.23 → arthexis-0.1.28}/PKG-INFO +54 -27
  2. {arthexis-0.1.23 → arthexis-0.1.28}/README.md +41 -16
  3. {arthexis-0.1.23 → arthexis-0.1.28}/arthexis.egg-info/PKG-INFO +54 -27
  4. {arthexis-0.1.23 → arthexis-0.1.28}/arthexis.egg-info/SOURCES.txt +9 -1
  5. {arthexis-0.1.23 → arthexis-0.1.28}/arthexis.egg-info/requires.txt +12 -10
  6. {arthexis-0.1.23 → arthexis-0.1.28}/config/settings.py +13 -0
  7. arthexis-0.1.28/config/settings_helpers.py +284 -0
  8. {arthexis-0.1.23 → arthexis-0.1.28}/config/urls.py +59 -0
  9. {arthexis-0.1.23 → arthexis-0.1.28}/core/admin.py +407 -236
  10. {arthexis-0.1.23 → arthexis-0.1.28}/core/apps.py +6 -2
  11. {arthexis-0.1.23 → arthexis-0.1.28}/core/auto_upgrade.py +19 -4
  12. {arthexis-0.1.23 → arthexis-0.1.28}/core/backends.py +3 -1
  13. arthexis-0.1.28/core/celery_utils.py +73 -0
  14. {arthexis-0.1.23 → arthexis-0.1.28}/core/environment.py +1 -1
  15. {arthexis-0.1.23 → arthexis-0.1.28}/core/models.py +895 -237
  16. {arthexis-0.1.23 → arthexis-0.1.28}/core/sigil_builder.py +1 -1
  17. {arthexis-0.1.23 → arthexis-0.1.28}/core/sigil_resolver.py +1 -66
  18. {arthexis-0.1.23 → arthexis-0.1.28}/core/system.py +84 -4
  19. arthexis-0.1.28/core/tasks.py +713 -0
  20. {arthexis-0.1.23 → arthexis-0.1.28}/core/test_system_info.py +43 -5
  21. {arthexis-0.1.23 → arthexis-0.1.28}/core/tests.py +202 -2
  22. {arthexis-0.1.23 → arthexis-0.1.28}/core/user_data.py +52 -19
  23. {arthexis-0.1.23 → arthexis-0.1.28}/core/views.py +70 -6
  24. {arthexis-0.1.23 → arthexis-0.1.28}/nodes/admin.py +819 -287
  25. {arthexis-0.1.23 → arthexis-0.1.28}/nodes/apps.py +1 -1
  26. {arthexis-0.1.23 → arthexis-0.1.28}/nodes/feature_checks.py +30 -0
  27. {arthexis-0.1.23 → arthexis-0.1.28}/nodes/models.py +467 -63
  28. {arthexis-0.1.23 → arthexis-0.1.28}/nodes/tasks.py +14 -17
  29. {arthexis-0.1.23 → arthexis-0.1.28}/nodes/tests.py +599 -231
  30. {arthexis-0.1.23 → arthexis-0.1.28}/nodes/urls.py +11 -0
  31. {arthexis-0.1.23 → arthexis-0.1.28}/nodes/utils.py +51 -3
  32. {arthexis-0.1.23 → arthexis-0.1.28}/nodes/views.py +744 -18
  33. arthexis-0.1.28/ocpp/admin.py +2766 -0
  34. {arthexis-0.1.23 → arthexis-0.1.28}/ocpp/consumers.py +670 -7
  35. {arthexis-0.1.23 → arthexis-0.1.28}/ocpp/models.py +797 -32
  36. arthexis-0.1.28/ocpp/network.py +398 -0
  37. {arthexis-0.1.23 → arthexis-0.1.28}/ocpp/store.py +406 -40
  38. {arthexis-0.1.23 → arthexis-0.1.28}/ocpp/tasks.py +158 -2
  39. {arthexis-0.1.23 → arthexis-0.1.28}/ocpp/test_rfid.py +73 -2
  40. {arthexis-0.1.23 → arthexis-0.1.28}/ocpp/tests.py +1161 -90
  41. {arthexis-0.1.23 → arthexis-0.1.28}/ocpp/urls.py +5 -0
  42. {arthexis-0.1.23 → arthexis-0.1.28}/ocpp/views.py +176 -70
  43. {arthexis-0.1.23 → arthexis-0.1.28}/pages/context_processors.py +2 -0
  44. {arthexis-0.1.23 → arthexis-0.1.28}/pages/middleware.py +3 -2
  45. {arthexis-0.1.23 → arthexis-0.1.28}/pages/models.py +9 -0
  46. {arthexis-0.1.23 → arthexis-0.1.28}/pages/tests.py +206 -18
  47. {arthexis-0.1.23 → arthexis-0.1.28}/pages/urls.py +1 -0
  48. arthexis-0.1.28/pages/utils.py +93 -0
  49. {arthexis-0.1.23 → arthexis-0.1.28}/pages/views.py +130 -35
  50. arthexis-0.1.28/pyproject.toml +26 -0
  51. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_admin_client_report.py +68 -10
  52. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_allowed_hosts_hostname.py +0 -4
  53. arthexis-0.1.28/tests/test_auto_upgrade_scheduler.py +90 -0
  54. arthexis-0.1.28/tests/test_client_report_form.py +84 -0
  55. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_client_report_generation.py +29 -3
  56. arthexis-0.1.28/tests/test_client_report_pdf.py +71 -0
  57. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_client_report_schedule.py +48 -6
  58. arthexis-0.1.28/tests/test_env_refresh_dependency_conflict.py +114 -0
  59. arthexis-0.1.28/tests/test_env_refresh_pip.py +64 -0
  60. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_install_script.py +16 -19
  61. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_localhost_admin_backend.py +14 -0
  62. arthexis-0.1.28/tests/test_model_verbose_name_capitalization.py +68 -0
  63. arthexis-0.1.28/tests/test_network_setup_interactive.py +78 -0
  64. arthexis-0.1.28/tests/test_nginx_config.py +26 -0
  65. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_node_info_view.py +1 -4
  66. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_odoo_product.py +2 -114
  67. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_odoo_profile.py +4 -4
  68. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_odoo_profile_admin.py +20 -0
  69. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_odoo_quote_report.py +1 -1
  70. arthexis-0.1.28/tests/test_quality_drop.py +138 -0
  71. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_register_site_apps_command.py +1 -1
  72. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_release_build_flow.py +0 -36
  73. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_release_progress.py +72 -0
  74. arthexis-0.1.28/tests/test_render_nginx_default.py +52 -0
  75. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_render_nginx_sites.py +2 -2
  76. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_seed_data.py +21 -0
  77. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_send_invite_command.py +1 -1
  78. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_settings_helpers.py +75 -0
  79. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_shell_scripts.py +12 -0
  80. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_sigil_resolution.py +2 -71
  81. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_sites_utils.py +1 -1
  82. arthexis-0.1.28/tests/test_stop_script.py +100 -0
  83. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_suite_gateway.py +0 -7
  84. arthexis-0.1.28/tests/test_system_changelog_report.py +114 -0
  85. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_user_data_admin.py +18 -0
  86. arthexis-0.1.28/tests/test_ws_script.py +19 -0
  87. arthexis-0.1.23/config/settings_helpers.py +0 -109
  88. arthexis-0.1.23/core/tasks.py +0 -407
  89. arthexis-0.1.23/ocpp/admin.py +0 -1221
  90. arthexis-0.1.23/pages/utils.py +0 -23
  91. arthexis-0.1.23/pyproject.toml +0 -26
  92. arthexis-0.1.23/tests/test_auto_upgrade_scheduler.py +0 -45
  93. arthexis-0.1.23/tests/test_client_report_form.py +0 -44
  94. arthexis-0.1.23/tests/test_env_refresh_pip.py +0 -28
  95. arthexis-0.1.23/tests/test_model_verbose_name_capitalization.py +0 -31
  96. arthexis-0.1.23/tests/test_network_setup_interactive.py +0 -37
  97. arthexis-0.1.23/tests/test_stop_script.py +0 -44
  98. arthexis-0.1.23/tests/test_system_changelog_report.py +0 -45
  99. {arthexis-0.1.23 → arthexis-0.1.28}/LICENSE +0 -0
  100. {arthexis-0.1.23 → arthexis-0.1.28}/arthexis.egg-info/dependency_links.txt +0 -0
  101. {arthexis-0.1.23 → arthexis-0.1.28}/arthexis.egg-info/top_level.txt +0 -0
  102. {arthexis-0.1.23 → arthexis-0.1.28}/config/__init__.py +0 -0
  103. {arthexis-0.1.23 → arthexis-0.1.28}/config/active_app.py +0 -0
  104. {arthexis-0.1.23 → arthexis-0.1.28}/config/asgi.py +0 -0
  105. {arthexis-0.1.23 → arthexis-0.1.28}/config/auth_app.py +0 -0
  106. {arthexis-0.1.23 → arthexis-0.1.28}/config/celery.py +0 -0
  107. {arthexis-0.1.23 → arthexis-0.1.28}/config/context_processors.py +0 -0
  108. {arthexis-0.1.23 → arthexis-0.1.28}/config/horologia_app.py +0 -0
  109. {arthexis-0.1.23 → arthexis-0.1.28}/config/loadenv.py +0 -0
  110. {arthexis-0.1.23 → arthexis-0.1.28}/config/logging.py +0 -0
  111. {arthexis-0.1.23 → arthexis-0.1.28}/config/middleware.py +0 -0
  112. {arthexis-0.1.23 → arthexis-0.1.28}/config/offline.py +0 -0
  113. {arthexis-0.1.23 → arthexis-0.1.28}/config/wsgi.py +0 -0
  114. {arthexis-0.1.23 → arthexis-0.1.28}/core/__init__.py +0 -0
  115. {arthexis-0.1.23 → arthexis-0.1.28}/core/admin_history.py +0 -0
  116. {arthexis-0.1.23 → arthexis-0.1.28}/core/admindocs.py +0 -0
  117. {arthexis-0.1.23 → arthexis-0.1.28}/core/changelog.py +0 -0
  118. {arthexis-0.1.23 → arthexis-0.1.28}/core/entity.py +0 -0
  119. {arthexis-0.1.23 → arthexis-0.1.28}/core/fields.py +0 -0
  120. {arthexis-0.1.23 → arthexis-0.1.28}/core/form_fields.py +0 -0
  121. {arthexis-0.1.23 → arthexis-0.1.28}/core/github_helper.py +0 -0
  122. {arthexis-0.1.23 → arthexis-0.1.28}/core/github_issues.py +0 -0
  123. {arthexis-0.1.23 → arthexis-0.1.28}/core/github_repos.py +0 -0
  124. {arthexis-0.1.23 → arthexis-0.1.28}/core/lcd_screen.py +0 -0
  125. {arthexis-0.1.23 → arthexis-0.1.28}/core/liveupdate.py +0 -0
  126. {arthexis-0.1.23 → arthexis-0.1.28}/core/log_paths.py +0 -0
  127. {arthexis-0.1.23 → arthexis-0.1.28}/core/mailer.py +0 -0
  128. {arthexis-0.1.23 → arthexis-0.1.28}/core/middleware.py +0 -0
  129. {arthexis-0.1.23 → arthexis-0.1.28}/core/notifications.py +0 -0
  130. {arthexis-0.1.23 → arthexis-0.1.28}/core/public_wifi.py +0 -0
  131. {arthexis-0.1.23 → arthexis-0.1.28}/core/reference_utils.py +0 -0
  132. {arthexis-0.1.23 → arthexis-0.1.28}/core/release.py +0 -0
  133. {arthexis-0.1.23 → arthexis-0.1.28}/core/rfid_import_export.py +0 -0
  134. {arthexis-0.1.23 → arthexis-0.1.28}/core/sigil_context.py +0 -0
  135. {arthexis-0.1.23 → arthexis-0.1.28}/core/temp_passwords.py +0 -0
  136. {arthexis-0.1.23 → arthexis-0.1.28}/core/tests_liveupdate.py +0 -0
  137. {arthexis-0.1.23 → arthexis-0.1.28}/core/urls.py +0 -0
  138. {arthexis-0.1.23 → arthexis-0.1.28}/core/widgets.py +0 -0
  139. {arthexis-0.1.23 → arthexis-0.1.28}/nodes/__init__.py +0 -0
  140. {arthexis-0.1.23 → arthexis-0.1.28}/nodes/backends.py +0 -0
  141. {arthexis-0.1.23 → arthexis-0.1.28}/nodes/dns.py +0 -0
  142. {arthexis-0.1.23 → arthexis-0.1.28}/nodes/lcd.py +0 -0
  143. {arthexis-0.1.23 → arthexis-0.1.28}/nodes/reports.py +0 -0
  144. {arthexis-0.1.23 → arthexis-0.1.28}/nodes/rfid_sync.py +0 -0
  145. {arthexis-0.1.23 → arthexis-0.1.28}/nodes/signals.py +0 -0
  146. {arthexis-0.1.23 → arthexis-0.1.28}/ocpp/__init__.py +0 -0
  147. {arthexis-0.1.23 → arthexis-0.1.28}/ocpp/apps.py +0 -0
  148. {arthexis-0.1.23 → arthexis-0.1.28}/ocpp/evcs.py +0 -0
  149. {arthexis-0.1.23 → arthexis-0.1.28}/ocpp/evcs_discovery.py +0 -0
  150. {arthexis-0.1.23 → arthexis-0.1.28}/ocpp/reference_utils.py +0 -0
  151. {arthexis-0.1.23 → arthexis-0.1.28}/ocpp/routing.py +0 -0
  152. {arthexis-0.1.23 → arthexis-0.1.28}/ocpp/simulator.py +0 -0
  153. {arthexis-0.1.23 → arthexis-0.1.28}/ocpp/status_display.py +0 -0
  154. {arthexis-0.1.23 → arthexis-0.1.28}/ocpp/test_export_import.py +0 -0
  155. {arthexis-0.1.23 → arthexis-0.1.28}/ocpp/transactions_io.py +0 -0
  156. {arthexis-0.1.23 → arthexis-0.1.28}/pages/__init__.py +0 -0
  157. {arthexis-0.1.23 → arthexis-0.1.28}/pages/admin.py +0 -0
  158. {arthexis-0.1.23 → arthexis-0.1.28}/pages/apps.py +0 -0
  159. {arthexis-0.1.23 → arthexis-0.1.28}/pages/checks.py +0 -0
  160. {arthexis-0.1.23 → arthexis-0.1.28}/pages/defaults.py +0 -0
  161. {arthexis-0.1.23 → arthexis-0.1.28}/pages/forms.py +0 -0
  162. {arthexis-0.1.23 → arthexis-0.1.28}/pages/module_defaults.py +0 -0
  163. {arthexis-0.1.23 → arthexis-0.1.28}/pages/site_config.py +0 -0
  164. {arthexis-0.1.23 → arthexis-0.1.28}/pages/tasks.py +0 -0
  165. {arthexis-0.1.23 → arthexis-0.1.28}/setup.cfg +0 -0
  166. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_acronym_capitalization.py +0 -0
  167. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_admin_doc_commands.py +0 -0
  168. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_admin_doc_model_groups.py +0 -0
  169. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_admin_history.py +0 -0
  170. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_admin_index_actions.py +0 -0
  171. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_admin_model_graph.py +0 -0
  172. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_admin_object_history.py +0 -0
  173. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_admin_profile_link.py +0 -0
  174. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_admin_system_stop.py +0 -0
  175. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_api_login_required.py +0 -0
  176. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_awg_admin.py +0 -0
  177. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_benchmark_command.py +0 -0
  178. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_build_pypi_command.py +0 -0
  179. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_celery_no_debug.py +0 -0
  180. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_changelog_builder.py +0 -0
  181. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_check_admin_command.py +0 -0
  182. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_check_migrations_script.py +0 -0
  183. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_check_pypi_command.py +0 -0
  184. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_clean_release_logs_command.py +0 -0
  185. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_csrf_failure.py +0 -0
  186. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_csrf_origin_subnet.py +0 -0
  187. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_dist_cleanup.py +0 -0
  188. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_email_collector.py +0 -0
  189. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_email_inbox.py +0 -0
  190. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_email_inbox_admin.py +0 -0
  191. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_email_inbox_search_action.py +0 -0
  192. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_email_outbox_admin.py +0 -0
  193. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_email_profiles.py +0 -0
  194. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_email_transaction.py +0 -0
  195. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_env_refresh_clean.py +0 -0
  196. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_env_refresh_unlink.py +0 -0
  197. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_experience_admin_group.py +0 -0
  198. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_fixture_presence.py +0 -0
  199. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_footer_no_references.py +0 -0
  200. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_footer_presence.py +0 -0
  201. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_footer_render.py +0 -0
  202. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_git_checks.py +0 -0
  203. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_github_issue_reporting.py +0 -0
  204. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_invitation_login_view.py +0 -0
  205. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_language_switch.py +0 -0
  206. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_lcd_check_command.py +0 -0
  207. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_lcd_smbus2.py +0 -0
  208. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_log_paths.py +0 -0
  209. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_login_view_no_site.py +0 -0
  210. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_manage_debug_flag.py +0 -0
  211. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_manuals.py +0 -0
  212. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_message_command.py +0 -0
  213. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_migrations.py +0 -0
  214. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_notifications_fallback.py +0 -0
  215. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_notify_command.py +0 -0
  216. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_ocpp_session_lock.py +0 -0
  217. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_offline.py +0 -0
  218. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_package_admin_next_release.py +0 -0
  219. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_power_admin_group.py +0 -0
  220. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_profile_inline_deletion.py +0 -0
  221. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_pypi_check.py +0 -0
  222. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_pypi_token.py +0 -0
  223. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_readme_assets.py +0 -0
  224. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_readme_editor.py +0 -0
  225. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_readme_language.py +0 -0
  226. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_reference_qr_code.py +0 -0
  227. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_reference_transaction_uuid.py +0 -0
  228. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_release_build.py +0 -0
  229. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_release_checklist.py +0 -0
  230. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_release_logs.py +0 -0
  231. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_release_manager_admin.py +0 -0
  232. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_release_packages.py +0 -0
  233. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_release_progress_pre_release_integration.py +0 -0
  234. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_release_push.py +0 -0
  235. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_release_tasks.py +0 -0
  236. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_request_invite.py +0 -0
  237. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_rfid_admin_print_labels.py +0 -0
  238. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_rfid_admin_reference_clear.py +0 -0
  239. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_rfid_admin_scan_csrf.py +0 -0
  240. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_rfid_always_on.py +0 -0
  241. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_rfid_backend.py +0 -0
  242. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_rfid_background_reader.py +0 -0
  243. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_rfid_client_report.py +0 -0
  244. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_rfid_watch_command.py +0 -0
  245. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_role_marker_filtering.py +0 -0
  246. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_settings_mcp_port.py +0 -0
  247. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_show_leads_command.py +0 -0
  248. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_sigil_builder.py +0 -0
  249. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_social_profile.py +0 -0
  250. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_staff_login_net_message.py +0 -0
  251. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_staff_required_decorator.py +0 -0
  252. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_switch_role_script.py +0 -0
  253. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_temp_passwords.py +0 -0
  254. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_totp_admin.py +0 -0
  255. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_totp_backend.py +0 -0
  256. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_transaction_meter_readings.py +0 -0
  257. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_uninstall_script.py +0 -0
  258. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_update_fixtures_command.py +0 -0
  259. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_upgrade_report.py +0 -0
  260. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_urls_autodiscover.py +0 -0
  261. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_version_endpoint.py +0 -0
  262. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_version_file.py +0 -0
  263. {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_vscode_manage.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: arthexis
3
- Version: 0.1.23
3
+ Version: 0.1.28
4
4
  Summary: Power & Energy Infrastructure
5
5
  Author-email: "Rafael J. Guillén-Osorio" <tecnologia@gelectriic.com>
6
6
  License-Expression: GPL-3.0-only
@@ -15,7 +15,7 @@ Requires-Dist: amqp==5.3.1
15
15
  Requires-Dist: annotated-types==0.7.0
16
16
  Requires-Dist: anyio==4.9.0
17
17
  Requires-Dist: asgiref==3.10.0
18
- Requires-Dist: atproto==0.0.62
18
+ Requires-Dist: atproto<0.1.0,>=0.0.63
19
19
  Requires-Dist: attrs==25.3.0
20
20
  Requires-Dist: autobahn==24.4.2
21
21
  Requires-Dist: Automat==25.4.16
@@ -43,12 +43,14 @@ Requires-Dist: django-celery-beat==2.8.1
43
43
  Requires-Dist: django-debug-toolbar==6.0.0
44
44
  Requires-Dist: django-import-export==4.3.12
45
45
  Requires-Dist: django-object-actions==5.0.0
46
- Requires-Dist: django-otp==1.5.4
46
+ Requires-Dist: django-otp==1.6.3
47
47
  Requires-Dist: django-timezone-field==7.1
48
48
  Requires-Dist: dnspython==2.7.0
49
49
  Requires-Dist: docutils==0.22.2
50
50
  Requires-Dist: gpiozero==2.0.1; sys_platform == "linux"
51
+ Requires-Dist: graphene-django==3.2.2
51
52
  Requires-Dist: graphviz==0.21
53
+ Requires-Dist: geckodriver-autoinstaller==0.1.0
52
54
  Requires-Dist: h11==0.16.0
53
55
  Requires-Dist: httpcore==1.0.9
54
56
  Requires-Dist: httpx==0.28.1
@@ -62,16 +64,16 @@ Requires-Dist: mdx_truly_sane_lists==1.3
62
64
  Requires-Dist: mfrc522==0.0.7; sys_platform == "linux"
63
65
  Requires-Dist: outcome==1.3.0.post0
64
66
  Requires-Dist: packaging==25.0
65
- Requires-Dist: pillow==11.3.0
66
- Requires-Dist: prompt_toolkit==3.0.51
67
- Requires-Dist: psutil==7.1.2
67
+ Requires-Dist: pillow==12.0.0
68
+ Requires-Dist: prompt_toolkit==3.0.52
69
+ Requires-Dist: psutil==7.1.3
68
70
  Requires-Dist: psycopg==3.2.9
69
71
  Requires-Dist: psycopg-binary==3.2.12
70
72
  Requires-Dist: pyasn1==0.6.1
71
73
  Requires-Dist: pyasn1_modules==0.4.2
72
74
  Requires-Dist: pycparser==2.22
73
- Requires-Dist: pydantic==2.11.7
74
- Requires-Dist: pydantic_core==2.33.2
75
+ Requires-Dist: pydantic==2.12.3
76
+ Requires-Dist: pydantic_core==2.41.4
75
77
  Requires-Dist: pyOpenSSL==25.1.0
76
78
  Requires-Dist: pyperclip==1.11.0
77
79
  Requires-Dist: PySocks==1.7.1
@@ -80,7 +82,7 @@ Requires-Dist: python-dateutil==2.9.0.post0
80
82
  Requires-Dist: python-dotenv==1.1.1
81
83
  Requires-Dist: qrcode==8.2
82
84
  Requires-Dist: redis==7.0.1
83
- Requires-Dist: reportlab==4.2.2
85
+ Requires-Dist: reportlab==4.4.4
84
86
  Requires-Dist: requests==2.32.5
85
87
  Requires-Dist: selenium==4.34.2
86
88
  Requires-Dist: service-identity==24.2.0
@@ -97,7 +99,7 @@ Requires-Dist: trio==0.30.0
97
99
  Requires-Dist: trio-websocket==0.12.2
98
100
  Requires-Dist: Twisted==25.5.0
99
101
  Requires-Dist: twine==6.1.0
100
- Requires-Dist: txaio==25.6.1
102
+ Requires-Dist: txaio==25.9.2
101
103
  Requires-Dist: typing-inspection==0.4.2
102
104
  Requires-Dist: typing_extensions==4.14.1
103
105
  Requires-Dist: tzdata==2025.2
@@ -106,7 +108,7 @@ Requires-Dist: vine==5.1.0
106
108
  Requires-Dist: wcwidth==0.2.14
107
109
  Requires-Dist: webencodings==0.5.1
108
110
  Requires-Dist: websocket-client==1.8.0
109
- Requires-Dist: websockets==13.1
111
+ Requires-Dist: websockets==15.0.1
110
112
  Requires-Dist: whitenoise==6.11.0
111
113
  Requires-Dist: plyer==2.1.0; sys_platform == "win32"
112
114
  Requires-Dist: wsproto==1.2.0
@@ -124,19 +126,43 @@ Arthexis Constellation is a [narrative-driven](https://en.wikipedia.org/wiki/Nar
124
126
 
125
127
  ## Current Features
126
128
 
127
- - Compatible with the [Open Charge Point Protocol (OCPP) 1.6](https://www.openchargealliance.org/protocols/ocpp-16/) central system, handling:
128
- - Lifecycle & sessions
129
- - `BootNotification`
130
- - `Heartbeat`
131
- - `StatusNotification`
132
- - `StartTransaction`
133
- - `StopTransaction`
134
- - Access & metering
135
- - `Authorize`
136
- - `MeterValues`
137
- - Maintenance & firmware
138
- - `DiagnosticsStatusNotification`
139
- - `FirmwareStatusNotification`
129
+ - Compatible with the [Open Charge Point Protocol (OCPP) 1.6](https://www.openchargealliance.org/protocols/ocpp-16/) central system. Supported actions are summarized below.
130
+
131
+ **Charge point → CSMS**
132
+
133
+ | Action | What we do |
134
+ | --- | --- |
135
+ | `Authorize` | Validate RFID or token authorization requests before a session starts. |
136
+ | `BootNotification` | Register the charge point and update identity, firmware, and status details. |
137
+ | `DataTransfer` | Accept vendor-specific payloads and record the results. |
138
+ | `DiagnosticsStatusNotification` | Track the progress of diagnostic uploads kicked off from the back office. |
139
+ | `FirmwareStatusNotification` | Track firmware update lifecycle events from charge points. |
140
+ | `Heartbeat` | Keep the websocket session alive and update last-seen timestamps. |
141
+ | `MeterValues` | Persist periodic energy and power readings while a transaction is active. |
142
+ | `StartTransaction` | Create charging sessions with initial meter values and identification data. |
143
+ | `StatusNotification` | Reflect connector availability and fault states in real time. |
144
+ | `StopTransaction` | Close charging sessions, capturing closing meter values and stop reasons. |
145
+
146
+ **CSMS → Charge point**
147
+
148
+ | Action | What we do |
149
+ | --- | --- |
150
+ | `CancelReservation` | Withdraw pending reservations and release connectors directly from the control center. |
151
+ | `ChangeAvailability` | Switch connectors or the whole station between operative and inoperative states. |
152
+ | `DataTransfer` | Send vendor-specific commands and log the charge point response. |
153
+ | `GetConfiguration` | Poll the device for the current values of tracked configuration keys. |
154
+ | `GetLocalListVersion` | Retrieve the current RFID whitelist version and synchronize entries reported by the charge point. |
155
+ | `RemoteStartTransaction` | Initiate a charging session remotely for an identified customer or token. |
156
+ | `RemoteStopTransaction` | Terminate active charging sessions from the control center. |
157
+ | `ReserveNow` | Reserve connectors for upcoming sessions with automatic connector selection and confirmation tracking. |
158
+ | `Reset` | Request a soft or hard reboot to recover from faults. |
159
+ | `SendLocalList` | Publish released and approved RFIDs as the charge point's local authorization list. |
160
+ | `TriggerMessage` | Ask the device to send an immediate update (for example status or diagnostics). |
161
+ | `UpdateFirmware` | Deliver firmware packages to chargers with secure download tokens and track installation responses. |
162
+
163
+ **OCPP 1.6 roadmap.** The following catalogue actions are in our backlog: `ChangeConfiguration`, `ClearCache`, `ClearChargingProfile`, `GetCompositeSchedule`, `GetDiagnostics`, `SetChargingProfile`, `UnlockConnector`.
164
+
165
+ - Charge point reservations with automated connector assignment, energy account and RFID linkage, EVCS confirmation tracking, and control-center cancellation support.
140
166
  - [API](https://en.wikipedia.org/wiki/API) integration with [Odoo](https://www.odoo.com/), syncing:
141
167
  - Employee credentials via `res.users`
142
168
  - Product catalog lookups via `product.product`
@@ -183,7 +209,7 @@ Arthexis Constellation ships in four node roles tailored to different deployment
183
209
  - **[Windows](https://en.wikipedia.org/wiki/Microsoft_Windows)**: open [PowerShell](https://learn.microsoft.com/powershell/) or [Git Bash](https://gitforwindows.org/) and run the same command.
184
210
 
185
211
  ### 2. Start and stop
186
- Terminal nodes can start directly with the scripts below without installing; Control, Satellite, and Watchtower roles require installation first. Both approaches listen on [`http://localhost:8000/`](http://localhost:8000/) by default.
212
+ Terminal nodes can start directly with the scripts below without installing; Control, Satellite, and Watchtower roles require installation first. Both approaches listen on [`http://localhost:8888/`](http://localhost:8888/) by default.
187
213
 
188
214
  - **[VS Code](https://code.visualstudio.com/)**
189
215
  - Open the folder and go to the **Run and Debug** panel (`Ctrl+Shift+D`).
@@ -204,13 +230,14 @@ Terminal nodes can start directly with the scripts below without installing; Con
204
230
  - Use `./install.sh --help` to list every available flag if you need to customize the node beyond the role defaults.
205
231
  - Upgrade with [`./upgrade.sh`](upgrade.sh).
206
232
  - Consult the [Install & Lifecycle Scripts Manual](docs/development/install-lifecycle-scripts-manual.md) for complete flag descriptions and operational notes.
233
+ - Review the [Upgrade Guide](docs/UPGRADE.md) for manual steps required after releases that stop automating specific migrations.
207
234
 
208
235
  - **Windows:**
209
236
  - Run [`install.bat`](install.bat) to install (Terminal role) and [`upgrade.bat`](upgrade.bat) to upgrade.
210
237
  - Installation is not required to start in Terminal mode (the default).
211
238
 
212
239
  ### 4. Administration
213
- Visit [`http://localhost:8000/admin/`](http://localhost:8000/admin/) for the [Django admin](https://docs.djangoproject.com/en/stable/ref/contrib/admin/) and [`http://localhost:8000/admindocs/`](http://localhost:8000/admindocs/) for the [admindocs](https://docs.djangoproject.com/en/stable/ref/contrib/admin/admindocs/). Use `--port` with the start scripts or installer when you need to expose a different port.
240
+ Visit [`http://localhost:8888/admin/`](http://localhost:8888/admin/) for the [Django admin](https://docs.djangoproject.com/en/stable/ref/contrib/admin/) and [`http://localhost:8888/admindocs/`](http://localhost:8888/admindocs/) for the [admindocs](https://docs.djangoproject.com/en/stable/ref/contrib/admin/admindocs/). Use `--port` with the start scripts or installer when you need to expose a different port.
214
241
 
215
242
  ## Sigils
216
243
 
@@ -232,7 +259,7 @@ The platform ships with three configuration prefixes:
232
259
 
233
260
  Additional prefixes are defined through **Sigil Roots**, which map a short code (for example `ROLE`, `ODOO`, or `USER`) to a Django model. You can review them from **Admin &rarr; Sigil Builder** (`/admin/sigil-builder/`), where a test console is also available.
234
261
 
235
- Unknown prefixes remain in place (e.g. `[UNKNOWN.VALUE]`) and are logged. When the optional `gway` CLI is installed, the resolver will attempt to delegate unresolved tokens to it before falling back to the original text.
262
+ Unknown prefixes remain in place (e.g. `[UNKNOWN.VALUE]`) and are logged.
236
263
 
237
264
  ## Support
238
265
 
@@ -9,19 +9,43 @@ Arthexis Constellation is a [narrative-driven](https://en.wikipedia.org/wiki/Nar
9
9
 
10
10
  ## Current Features
11
11
 
12
- - Compatible with the [Open Charge Point Protocol (OCPP) 1.6](https://www.openchargealliance.org/protocols/ocpp-16/) central system, handling:
13
- - Lifecycle & sessions
14
- - `BootNotification`
15
- - `Heartbeat`
16
- - `StatusNotification`
17
- - `StartTransaction`
18
- - `StopTransaction`
19
- - Access & metering
20
- - `Authorize`
21
- - `MeterValues`
22
- - Maintenance & firmware
23
- - `DiagnosticsStatusNotification`
24
- - `FirmwareStatusNotification`
12
+ - Compatible with the [Open Charge Point Protocol (OCPP) 1.6](https://www.openchargealliance.org/protocols/ocpp-16/) central system. Supported actions are summarized below.
13
+
14
+ **Charge point → CSMS**
15
+
16
+ | Action | What we do |
17
+ | --- | --- |
18
+ | `Authorize` | Validate RFID or token authorization requests before a session starts. |
19
+ | `BootNotification` | Register the charge point and update identity, firmware, and status details. |
20
+ | `DataTransfer` | Accept vendor-specific payloads and record the results. |
21
+ | `DiagnosticsStatusNotification` | Track the progress of diagnostic uploads kicked off from the back office. |
22
+ | `FirmwareStatusNotification` | Track firmware update lifecycle events from charge points. |
23
+ | `Heartbeat` | Keep the websocket session alive and update last-seen timestamps. |
24
+ | `MeterValues` | Persist periodic energy and power readings while a transaction is active. |
25
+ | `StartTransaction` | Create charging sessions with initial meter values and identification data. |
26
+ | `StatusNotification` | Reflect connector availability and fault states in real time. |
27
+ | `StopTransaction` | Close charging sessions, capturing closing meter values and stop reasons. |
28
+
29
+ **CSMS → Charge point**
30
+
31
+ | Action | What we do |
32
+ | --- | --- |
33
+ | `CancelReservation` | Withdraw pending reservations and release connectors directly from the control center. |
34
+ | `ChangeAvailability` | Switch connectors or the whole station between operative and inoperative states. |
35
+ | `DataTransfer` | Send vendor-specific commands and log the charge point response. |
36
+ | `GetConfiguration` | Poll the device for the current values of tracked configuration keys. |
37
+ | `GetLocalListVersion` | Retrieve the current RFID whitelist version and synchronize entries reported by the charge point. |
38
+ | `RemoteStartTransaction` | Initiate a charging session remotely for an identified customer or token. |
39
+ | `RemoteStopTransaction` | Terminate active charging sessions from the control center. |
40
+ | `ReserveNow` | Reserve connectors for upcoming sessions with automatic connector selection and confirmation tracking. |
41
+ | `Reset` | Request a soft or hard reboot to recover from faults. |
42
+ | `SendLocalList` | Publish released and approved RFIDs as the charge point's local authorization list. |
43
+ | `TriggerMessage` | Ask the device to send an immediate update (for example status or diagnostics). |
44
+ | `UpdateFirmware` | Deliver firmware packages to chargers with secure download tokens and track installation responses. |
45
+
46
+ **OCPP 1.6 roadmap.** The following catalogue actions are in our backlog: `ChangeConfiguration`, `ClearCache`, `ClearChargingProfile`, `GetCompositeSchedule`, `GetDiagnostics`, `SetChargingProfile`, `UnlockConnector`.
47
+
48
+ - Charge point reservations with automated connector assignment, energy account and RFID linkage, EVCS confirmation tracking, and control-center cancellation support.
25
49
  - [API](https://en.wikipedia.org/wiki/API) integration with [Odoo](https://www.odoo.com/), syncing:
26
50
  - Employee credentials via `res.users`
27
51
  - Product catalog lookups via `product.product`
@@ -68,7 +92,7 @@ Arthexis Constellation ships in four node roles tailored to different deployment
68
92
  - **[Windows](https://en.wikipedia.org/wiki/Microsoft_Windows)**: open [PowerShell](https://learn.microsoft.com/powershell/) or [Git Bash](https://gitforwindows.org/) and run the same command.
69
93
 
70
94
  ### 2. Start and stop
71
- Terminal nodes can start directly with the scripts below without installing; Control, Satellite, and Watchtower roles require installation first. Both approaches listen on [`http://localhost:8000/`](http://localhost:8000/) by default.
95
+ Terminal nodes can start directly with the scripts below without installing; Control, Satellite, and Watchtower roles require installation first. Both approaches listen on [`http://localhost:8888/`](http://localhost:8888/) by default.
72
96
 
73
97
  - **[VS Code](https://code.visualstudio.com/)**
74
98
  - Open the folder and go to the **Run and Debug** panel (`Ctrl+Shift+D`).
@@ -89,13 +113,14 @@ Terminal nodes can start directly with the scripts below without installing; Con
89
113
  - Use `./install.sh --help` to list every available flag if you need to customize the node beyond the role defaults.
90
114
  - Upgrade with [`./upgrade.sh`](upgrade.sh).
91
115
  - Consult the [Install & Lifecycle Scripts Manual](docs/development/install-lifecycle-scripts-manual.md) for complete flag descriptions and operational notes.
116
+ - Review the [Upgrade Guide](docs/UPGRADE.md) for manual steps required after releases that stop automating specific migrations.
92
117
 
93
118
  - **Windows:**
94
119
  - Run [`install.bat`](install.bat) to install (Terminal role) and [`upgrade.bat`](upgrade.bat) to upgrade.
95
120
  - Installation is not required to start in Terminal mode (the default).
96
121
 
97
122
  ### 4. Administration
98
- Visit [`http://localhost:8000/admin/`](http://localhost:8000/admin/) for the [Django admin](https://docs.djangoproject.com/en/stable/ref/contrib/admin/) and [`http://localhost:8000/admindocs/`](http://localhost:8000/admindocs/) for the [admindocs](https://docs.djangoproject.com/en/stable/ref/contrib/admin/admindocs/). Use `--port` with the start scripts or installer when you need to expose a different port.
123
+ Visit [`http://localhost:8888/admin/`](http://localhost:8888/admin/) for the [Django admin](https://docs.djangoproject.com/en/stable/ref/contrib/admin/) and [`http://localhost:8888/admindocs/`](http://localhost:8888/admindocs/) for the [admindocs](https://docs.djangoproject.com/en/stable/ref/contrib/admin/admindocs/). Use `--port` with the start scripts or installer when you need to expose a different port.
99
124
 
100
125
  ## Sigils
101
126
 
@@ -117,7 +142,7 @@ The platform ships with three configuration prefixes:
117
142
 
118
143
  Additional prefixes are defined through **Sigil Roots**, which map a short code (for example `ROLE`, `ODOO`, or `USER`) to a Django model. You can review them from **Admin &rarr; Sigil Builder** (`/admin/sigil-builder/`), where a test console is also available.
119
144
 
120
- Unknown prefixes remain in place (e.g. `[UNKNOWN.VALUE]`) and are logged. When the optional `gway` CLI is installed, the resolver will attempt to delegate unresolved tokens to it before falling back to the original text.
145
+ Unknown prefixes remain in place (e.g. `[UNKNOWN.VALUE]`) and are logged.
121
146
 
122
147
  ## Support
123
148
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: arthexis
3
- Version: 0.1.23
3
+ Version: 0.1.28
4
4
  Summary: Power & Energy Infrastructure
5
5
  Author-email: "Rafael J. Guillén-Osorio" <tecnologia@gelectriic.com>
6
6
  License-Expression: GPL-3.0-only
@@ -15,7 +15,7 @@ Requires-Dist: amqp==5.3.1
15
15
  Requires-Dist: annotated-types==0.7.0
16
16
  Requires-Dist: anyio==4.9.0
17
17
  Requires-Dist: asgiref==3.10.0
18
- Requires-Dist: atproto==0.0.62
18
+ Requires-Dist: atproto<0.1.0,>=0.0.63
19
19
  Requires-Dist: attrs==25.3.0
20
20
  Requires-Dist: autobahn==24.4.2
21
21
  Requires-Dist: Automat==25.4.16
@@ -43,12 +43,14 @@ Requires-Dist: django-celery-beat==2.8.1
43
43
  Requires-Dist: django-debug-toolbar==6.0.0
44
44
  Requires-Dist: django-import-export==4.3.12
45
45
  Requires-Dist: django-object-actions==5.0.0
46
- Requires-Dist: django-otp==1.5.4
46
+ Requires-Dist: django-otp==1.6.3
47
47
  Requires-Dist: django-timezone-field==7.1
48
48
  Requires-Dist: dnspython==2.7.0
49
49
  Requires-Dist: docutils==0.22.2
50
50
  Requires-Dist: gpiozero==2.0.1; sys_platform == "linux"
51
+ Requires-Dist: graphene-django==3.2.2
51
52
  Requires-Dist: graphviz==0.21
53
+ Requires-Dist: geckodriver-autoinstaller==0.1.0
52
54
  Requires-Dist: h11==0.16.0
53
55
  Requires-Dist: httpcore==1.0.9
54
56
  Requires-Dist: httpx==0.28.1
@@ -62,16 +64,16 @@ Requires-Dist: mdx_truly_sane_lists==1.3
62
64
  Requires-Dist: mfrc522==0.0.7; sys_platform == "linux"
63
65
  Requires-Dist: outcome==1.3.0.post0
64
66
  Requires-Dist: packaging==25.0
65
- Requires-Dist: pillow==11.3.0
66
- Requires-Dist: prompt_toolkit==3.0.51
67
- Requires-Dist: psutil==7.1.2
67
+ Requires-Dist: pillow==12.0.0
68
+ Requires-Dist: prompt_toolkit==3.0.52
69
+ Requires-Dist: psutil==7.1.3
68
70
  Requires-Dist: psycopg==3.2.9
69
71
  Requires-Dist: psycopg-binary==3.2.12
70
72
  Requires-Dist: pyasn1==0.6.1
71
73
  Requires-Dist: pyasn1_modules==0.4.2
72
74
  Requires-Dist: pycparser==2.22
73
- Requires-Dist: pydantic==2.11.7
74
- Requires-Dist: pydantic_core==2.33.2
75
+ Requires-Dist: pydantic==2.12.3
76
+ Requires-Dist: pydantic_core==2.41.4
75
77
  Requires-Dist: pyOpenSSL==25.1.0
76
78
  Requires-Dist: pyperclip==1.11.0
77
79
  Requires-Dist: PySocks==1.7.1
@@ -80,7 +82,7 @@ Requires-Dist: python-dateutil==2.9.0.post0
80
82
  Requires-Dist: python-dotenv==1.1.1
81
83
  Requires-Dist: qrcode==8.2
82
84
  Requires-Dist: redis==7.0.1
83
- Requires-Dist: reportlab==4.2.2
85
+ Requires-Dist: reportlab==4.4.4
84
86
  Requires-Dist: requests==2.32.5
85
87
  Requires-Dist: selenium==4.34.2
86
88
  Requires-Dist: service-identity==24.2.0
@@ -97,7 +99,7 @@ Requires-Dist: trio==0.30.0
97
99
  Requires-Dist: trio-websocket==0.12.2
98
100
  Requires-Dist: Twisted==25.5.0
99
101
  Requires-Dist: twine==6.1.0
100
- Requires-Dist: txaio==25.6.1
102
+ Requires-Dist: txaio==25.9.2
101
103
  Requires-Dist: typing-inspection==0.4.2
102
104
  Requires-Dist: typing_extensions==4.14.1
103
105
  Requires-Dist: tzdata==2025.2
@@ -106,7 +108,7 @@ Requires-Dist: vine==5.1.0
106
108
  Requires-Dist: wcwidth==0.2.14
107
109
  Requires-Dist: webencodings==0.5.1
108
110
  Requires-Dist: websocket-client==1.8.0
109
- Requires-Dist: websockets==13.1
111
+ Requires-Dist: websockets==15.0.1
110
112
  Requires-Dist: whitenoise==6.11.0
111
113
  Requires-Dist: plyer==2.1.0; sys_platform == "win32"
112
114
  Requires-Dist: wsproto==1.2.0
@@ -124,19 +126,43 @@ Arthexis Constellation is a [narrative-driven](https://en.wikipedia.org/wiki/Nar
124
126
 
125
127
  ## Current Features
126
128
 
127
- - Compatible with the [Open Charge Point Protocol (OCPP) 1.6](https://www.openchargealliance.org/protocols/ocpp-16/) central system, handling:
128
- - Lifecycle & sessions
129
- - `BootNotification`
130
- - `Heartbeat`
131
- - `StatusNotification`
132
- - `StartTransaction`
133
- - `StopTransaction`
134
- - Access & metering
135
- - `Authorize`
136
- - `MeterValues`
137
- - Maintenance & firmware
138
- - `DiagnosticsStatusNotification`
139
- - `FirmwareStatusNotification`
129
+ - Compatible with the [Open Charge Point Protocol (OCPP) 1.6](https://www.openchargealliance.org/protocols/ocpp-16/) central system. Supported actions are summarized below.
130
+
131
+ **Charge point → CSMS**
132
+
133
+ | Action | What we do |
134
+ | --- | --- |
135
+ | `Authorize` | Validate RFID or token authorization requests before a session starts. |
136
+ | `BootNotification` | Register the charge point and update identity, firmware, and status details. |
137
+ | `DataTransfer` | Accept vendor-specific payloads and record the results. |
138
+ | `DiagnosticsStatusNotification` | Track the progress of diagnostic uploads kicked off from the back office. |
139
+ | `FirmwareStatusNotification` | Track firmware update lifecycle events from charge points. |
140
+ | `Heartbeat` | Keep the websocket session alive and update last-seen timestamps. |
141
+ | `MeterValues` | Persist periodic energy and power readings while a transaction is active. |
142
+ | `StartTransaction` | Create charging sessions with initial meter values and identification data. |
143
+ | `StatusNotification` | Reflect connector availability and fault states in real time. |
144
+ | `StopTransaction` | Close charging sessions, capturing closing meter values and stop reasons. |
145
+
146
+ **CSMS → Charge point**
147
+
148
+ | Action | What we do |
149
+ | --- | --- |
150
+ | `CancelReservation` | Withdraw pending reservations and release connectors directly from the control center. |
151
+ | `ChangeAvailability` | Switch connectors or the whole station between operative and inoperative states. |
152
+ | `DataTransfer` | Send vendor-specific commands and log the charge point response. |
153
+ | `GetConfiguration` | Poll the device for the current values of tracked configuration keys. |
154
+ | `GetLocalListVersion` | Retrieve the current RFID whitelist version and synchronize entries reported by the charge point. |
155
+ | `RemoteStartTransaction` | Initiate a charging session remotely for an identified customer or token. |
156
+ | `RemoteStopTransaction` | Terminate active charging sessions from the control center. |
157
+ | `ReserveNow` | Reserve connectors for upcoming sessions with automatic connector selection and confirmation tracking. |
158
+ | `Reset` | Request a soft or hard reboot to recover from faults. |
159
+ | `SendLocalList` | Publish released and approved RFIDs as the charge point's local authorization list. |
160
+ | `TriggerMessage` | Ask the device to send an immediate update (for example status or diagnostics). |
161
+ | `UpdateFirmware` | Deliver firmware packages to chargers with secure download tokens and track installation responses. |
162
+
163
+ **OCPP 1.6 roadmap.** The following catalogue actions are in our backlog: `ChangeConfiguration`, `ClearCache`, `ClearChargingProfile`, `GetCompositeSchedule`, `GetDiagnostics`, `SetChargingProfile`, `UnlockConnector`.
164
+
165
+ - Charge point reservations with automated connector assignment, energy account and RFID linkage, EVCS confirmation tracking, and control-center cancellation support.
140
166
  - [API](https://en.wikipedia.org/wiki/API) integration with [Odoo](https://www.odoo.com/), syncing:
141
167
  - Employee credentials via `res.users`
142
168
  - Product catalog lookups via `product.product`
@@ -183,7 +209,7 @@ Arthexis Constellation ships in four node roles tailored to different deployment
183
209
  - **[Windows](https://en.wikipedia.org/wiki/Microsoft_Windows)**: open [PowerShell](https://learn.microsoft.com/powershell/) or [Git Bash](https://gitforwindows.org/) and run the same command.
184
210
 
185
211
  ### 2. Start and stop
186
- Terminal nodes can start directly with the scripts below without installing; Control, Satellite, and Watchtower roles require installation first. Both approaches listen on [`http://localhost:8000/`](http://localhost:8000/) by default.
212
+ Terminal nodes can start directly with the scripts below without installing; Control, Satellite, and Watchtower roles require installation first. Both approaches listen on [`http://localhost:8888/`](http://localhost:8888/) by default.
187
213
 
188
214
  - **[VS Code](https://code.visualstudio.com/)**
189
215
  - Open the folder and go to the **Run and Debug** panel (`Ctrl+Shift+D`).
@@ -204,13 +230,14 @@ Terminal nodes can start directly with the scripts below without installing; Con
204
230
  - Use `./install.sh --help` to list every available flag if you need to customize the node beyond the role defaults.
205
231
  - Upgrade with [`./upgrade.sh`](upgrade.sh).
206
232
  - Consult the [Install & Lifecycle Scripts Manual](docs/development/install-lifecycle-scripts-manual.md) for complete flag descriptions and operational notes.
233
+ - Review the [Upgrade Guide](docs/UPGRADE.md) for manual steps required after releases that stop automating specific migrations.
207
234
 
208
235
  - **Windows:**
209
236
  - Run [`install.bat`](install.bat) to install (Terminal role) and [`upgrade.bat`](upgrade.bat) to upgrade.
210
237
  - Installation is not required to start in Terminal mode (the default).
211
238
 
212
239
  ### 4. Administration
213
- Visit [`http://localhost:8000/admin/`](http://localhost:8000/admin/) for the [Django admin](https://docs.djangoproject.com/en/stable/ref/contrib/admin/) and [`http://localhost:8000/admindocs/`](http://localhost:8000/admindocs/) for the [admindocs](https://docs.djangoproject.com/en/stable/ref/contrib/admin/admindocs/). Use `--port` with the start scripts or installer when you need to expose a different port.
240
+ Visit [`http://localhost:8888/admin/`](http://localhost:8888/admin/) for the [Django admin](https://docs.djangoproject.com/en/stable/ref/contrib/admin/) and [`http://localhost:8888/admindocs/`](http://localhost:8888/admindocs/) for the [admindocs](https://docs.djangoproject.com/en/stable/ref/contrib/admin/admindocs/). Use `--port` with the start scripts or installer when you need to expose a different port.
214
241
 
215
242
  ## Sigils
216
243
 
@@ -232,7 +259,7 @@ The platform ships with three configuration prefixes:
232
259
 
233
260
  Additional prefixes are defined through **Sigil Roots**, which map a short code (for example `ROLE`, `ODOO`, or `USER`) to a Django model. You can review them from **Admin &rarr; Sigil Builder** (`/admin/sigil-builder/`), where a test console is also available.
234
261
 
235
- Unknown prefixes remain in place (e.g. `[UNKNOWN.VALUE]`) and are logged. When the optional `gway` CLI is installed, the resolver will attempt to delegate unresolved tokens to it before falling back to the original text.
262
+ Unknown prefixes remain in place (e.g. `[UNKNOWN.VALUE]`) and are logged.
236
263
 
237
264
  ## Support
238
265
 
@@ -28,6 +28,7 @@ core/admindocs.py
28
28
  core/apps.py
29
29
  core/auto_upgrade.py
30
30
  core/backends.py
31
+ core/celery_utils.py
31
32
  core/changelog.py
32
33
  core/entity.py
33
34
  core/environment.py
@@ -83,6 +84,7 @@ ocpp/consumers.py
83
84
  ocpp/evcs.py
84
85
  ocpp/evcs_discovery.py
85
86
  ocpp/models.py
87
+ ocpp/network.py
86
88
  ocpp/reference_utils.py
87
89
  ocpp/routing.py
88
90
  ocpp/simulator.py
@@ -135,6 +137,7 @@ tests/test_check_pypi_command.py
135
137
  tests/test_clean_release_logs_command.py
136
138
  tests/test_client_report_form.py
137
139
  tests/test_client_report_generation.py
140
+ tests/test_client_report_pdf.py
138
141
  tests/test_client_report_schedule.py
139
142
  tests/test_csrf_failure.py
140
143
  tests/test_csrf_origin_subnet.py
@@ -147,6 +150,7 @@ tests/test_email_outbox_admin.py
147
150
  tests/test_email_profiles.py
148
151
  tests/test_email_transaction.py
149
152
  tests/test_env_refresh_clean.py
153
+ tests/test_env_refresh_dependency_conflict.py
150
154
  tests/test_env_refresh_pip.py
151
155
  tests/test_env_refresh_unlink.py
152
156
  tests/test_experience_admin_group.py
@@ -170,6 +174,7 @@ tests/test_message_command.py
170
174
  tests/test_migrations.py
171
175
  tests/test_model_verbose_name_capitalization.py
172
176
  tests/test_network_setup_interactive.py
177
+ tests/test_nginx_config.py
173
178
  tests/test_node_info_view.py
174
179
  tests/test_notifications_fallback.py
175
180
  tests/test_notify_command.py
@@ -184,6 +189,7 @@ tests/test_power_admin_group.py
184
189
  tests/test_profile_inline_deletion.py
185
190
  tests/test_pypi_check.py
186
191
  tests/test_pypi_token.py
192
+ tests/test_quality_drop.py
187
193
  tests/test_readme_assets.py
188
194
  tests/test_readme_editor.py
189
195
  tests/test_readme_language.py
@@ -200,6 +206,7 @@ tests/test_release_progress.py
200
206
  tests/test_release_progress_pre_release_integration.py
201
207
  tests/test_release_push.py
202
208
  tests/test_release_tasks.py
209
+ tests/test_render_nginx_default.py
203
210
  tests/test_render_nginx_sites.py
204
211
  tests/test_request_invite.py
205
212
  tests/test_rfid_admin_print_labels.py
@@ -238,4 +245,5 @@ tests/test_urls_autodiscover.py
238
245
  tests/test_user_data_admin.py
239
246
  tests/test_version_endpoint.py
240
247
  tests/test_version_file.py
241
- tests/test_vscode_manage.py
248
+ tests/test_vscode_manage.py
249
+ tests/test_ws_script.py
@@ -2,7 +2,7 @@ amqp==5.3.1
2
2
  annotated-types==0.7.0
3
3
  anyio==4.9.0
4
4
  asgiref==3.10.0
5
- atproto==0.0.62
5
+ atproto<0.1.0,>=0.0.63
6
6
  attrs==25.3.0
7
7
  autobahn==24.4.2
8
8
  Automat==25.4.16
@@ -30,11 +30,13 @@ django-celery-beat==2.8.1
30
30
  django-debug-toolbar==6.0.0
31
31
  django-import-export==4.3.12
32
32
  django-object-actions==5.0.0
33
- django-otp==1.5.4
33
+ django-otp==1.6.3
34
34
  django-timezone-field==7.1
35
35
  dnspython==2.7.0
36
36
  docutils==0.22.2
37
+ graphene-django==3.2.2
37
38
  graphviz==0.21
39
+ geckodriver-autoinstaller==0.1.0
38
40
  h11==0.16.0
39
41
  httpcore==1.0.9
40
42
  httpx==0.28.1
@@ -47,16 +49,16 @@ Markdown==3.9
47
49
  mdx_truly_sane_lists==1.3
48
50
  outcome==1.3.0.post0
49
51
  packaging==25.0
50
- pillow==11.3.0
51
- prompt_toolkit==3.0.51
52
- psutil==7.1.2
52
+ pillow==12.0.0
53
+ prompt_toolkit==3.0.52
54
+ psutil==7.1.3
53
55
  psycopg==3.2.9
54
56
  psycopg-binary==3.2.12
55
57
  pyasn1==0.6.1
56
58
  pyasn1_modules==0.4.2
57
59
  pycparser==2.22
58
- pydantic==2.11.7
59
- pydantic_core==2.33.2
60
+ pydantic==2.12.3
61
+ pydantic_core==2.41.4
60
62
  pyOpenSSL==25.1.0
61
63
  pyperclip==1.11.0
62
64
  PySocks==1.7.1
@@ -65,7 +67,7 @@ python-dateutil==2.9.0.post0
65
67
  python-dotenv==1.1.1
66
68
  qrcode==8.2
67
69
  redis==7.0.1
68
- reportlab==4.2.2
70
+ reportlab==4.4.4
69
71
  requests==2.32.5
70
72
  selenium==4.34.2
71
73
  service-identity==24.2.0
@@ -82,7 +84,7 @@ trio==0.30.0
82
84
  trio-websocket==0.12.2
83
85
  Twisted==25.5.0
84
86
  twine==6.1.0
85
- txaio==25.6.1
87
+ txaio==25.9.2
86
88
  typing-inspection==0.4.2
87
89
  typing_extensions==4.14.1
88
90
  tzdata==2025.2
@@ -91,7 +93,7 @@ vine==5.1.0
91
93
  wcwidth==0.2.14
92
94
  webencodings==0.5.1
93
95
  websocket-client==1.8.0
94
- websockets==13.1
96
+ websockets==15.0.1
95
97
  whitenoise==6.11.0
96
98
  wsproto==1.2.0
97
99
  zope.interface==8.0.1
@@ -18,6 +18,8 @@ import ipaddress
18
18
  import socket
19
19
  from core.log_paths import select_log_dir
20
20
  from django.utils.translation import gettext_lazy as _
21
+ from datetime import timedelta
22
+
21
23
  from celery.schedules import crontab
22
24
  from django.http import request as http_request
23
25
  from django.http.request import split_domain_port
@@ -29,6 +31,7 @@ from urllib.parse import urlsplit
29
31
  import django.utils.encoding as encoding
30
32
 
31
33
  from config.settings_helpers import (
34
+ discover_local_ip_addresses,
32
35
  extract_ip_from_host,
33
36
  install_validate_host_with_subnets,
34
37
  load_secret_key,
@@ -141,6 +144,11 @@ for host in _iter_local_hostnames(_local_hostname, _local_fqdn):
141
144
  ALLOWED_HOSTS.append(host)
142
145
 
143
146
 
147
+ for address in discover_local_ip_addresses():
148
+ if address not in ALLOWED_HOSTS:
149
+ ALLOWED_HOSTS.append(address)
150
+
151
+
144
152
  # Allow CSRF origin verification for hosts within allowed subnets.
145
153
  _original_origin_verified = CsrfViewMiddleware._origin_verified
146
154
  _original_check_referer = CsrfViewMiddleware._check_referer
@@ -333,6 +341,7 @@ CsrfViewMiddleware._check_referer = _check_referer_with_forwarded
333
341
  # Application definition
334
342
 
335
343
  LOCAL_APPS = [
344
+ "api",
336
345
  "nodes",
337
346
  "core",
338
347
  "ocpp",
@@ -666,4 +675,8 @@ CELERY_BEAT_SCHEDULE = {
666
675
  "task": "ocpp.tasks.schedule_daily_charge_point_configuration_checks",
667
676
  "schedule": crontab(minute=0, hour=0),
668
677
  },
678
+ "ocpp_forwarding_push": {
679
+ "task": "ocpp.tasks.push_forwarded_charge_points",
680
+ "schedule": timedelta(minutes=10),
681
+ },
669
682
  }