arthexis 0.1.23__tar.gz → 0.1.25__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 (248) hide show
  1. {arthexis-0.1.23 → arthexis-0.1.25}/PKG-INFO +39 -18
  2. {arthexis-0.1.23 → arthexis-0.1.25}/README.md +33 -13
  3. {arthexis-0.1.23 → arthexis-0.1.25}/arthexis.egg-info/PKG-INFO +39 -18
  4. {arthexis-0.1.23 → arthexis-0.1.25}/arthexis.egg-info/SOURCES.txt +2 -0
  5. {arthexis-0.1.23 → arthexis-0.1.25}/arthexis.egg-info/requires.txt +5 -4
  6. {arthexis-0.1.23 → arthexis-0.1.25}/config/settings.py +7 -0
  7. {arthexis-0.1.23 → arthexis-0.1.25}/config/urls.py +2 -0
  8. {arthexis-0.1.23 → arthexis-0.1.25}/core/admin.py +140 -213
  9. {arthexis-0.1.23 → arthexis-0.1.25}/core/backends.py +3 -1
  10. {arthexis-0.1.23 → arthexis-0.1.25}/core/models.py +612 -207
  11. {arthexis-0.1.23 → arthexis-0.1.25}/core/system.py +67 -2
  12. {arthexis-0.1.23 → arthexis-0.1.25}/core/tasks.py +25 -0
  13. {arthexis-0.1.23 → arthexis-0.1.25}/core/views.py +0 -3
  14. {arthexis-0.1.23 → arthexis-0.1.25}/nodes/admin.py +465 -292
  15. {arthexis-0.1.23 → arthexis-0.1.25}/nodes/models.py +299 -23
  16. {arthexis-0.1.23 → arthexis-0.1.25}/nodes/tasks.py +13 -16
  17. {arthexis-0.1.23 → arthexis-0.1.25}/nodes/tests.py +291 -130
  18. {arthexis-0.1.23 → arthexis-0.1.25}/nodes/urls.py +11 -0
  19. {arthexis-0.1.23 → arthexis-0.1.25}/nodes/utils.py +9 -2
  20. {arthexis-0.1.23 → arthexis-0.1.25}/nodes/views.py +588 -20
  21. {arthexis-0.1.23 → arthexis-0.1.25}/ocpp/admin.py +729 -175
  22. {arthexis-0.1.23 → arthexis-0.1.25}/ocpp/consumers.py +98 -0
  23. {arthexis-0.1.23 → arthexis-0.1.25}/ocpp/models.py +299 -0
  24. arthexis-0.1.25/ocpp/network.py +398 -0
  25. {arthexis-0.1.23 → arthexis-0.1.25}/ocpp/tasks.py +177 -1
  26. {arthexis-0.1.23 → arthexis-0.1.25}/ocpp/tests.py +179 -0
  27. {arthexis-0.1.23 → arthexis-0.1.25}/ocpp/views.py +2 -0
  28. {arthexis-0.1.23 → arthexis-0.1.25}/pages/middleware.py +3 -2
  29. {arthexis-0.1.23 → arthexis-0.1.25}/pages/tests.py +40 -0
  30. arthexis-0.1.25/pages/utils.py +93 -0
  31. {arthexis-0.1.23 → arthexis-0.1.25}/pages/views.py +64 -32
  32. arthexis-0.1.25/pyproject.toml +26 -0
  33. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_admin_client_report.py +68 -10
  34. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_client_report_form.py +20 -0
  35. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_client_report_generation.py +29 -3
  36. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_client_report_schedule.py +48 -6
  37. arthexis-0.1.25/tests/test_env_refresh_dependency_conflict.py +82 -0
  38. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_localhost_admin_backend.py +14 -0
  39. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_network_setup_interactive.py +17 -0
  40. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_odoo_product.py +1 -113
  41. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_odoo_profile.py +4 -4
  42. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_seed_data.py +2 -0
  43. arthexis-0.1.25/tests/test_system_changelog_report.py +114 -0
  44. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_user_data_admin.py +18 -0
  45. arthexis-0.1.23/pages/utils.py +0 -23
  46. arthexis-0.1.23/pyproject.toml +0 -26
  47. arthexis-0.1.23/tests/test_system_changelog_report.py +0 -45
  48. {arthexis-0.1.23 → arthexis-0.1.25}/LICENSE +0 -0
  49. {arthexis-0.1.23 → arthexis-0.1.25}/arthexis.egg-info/dependency_links.txt +0 -0
  50. {arthexis-0.1.23 → arthexis-0.1.25}/arthexis.egg-info/top_level.txt +0 -0
  51. {arthexis-0.1.23 → arthexis-0.1.25}/config/__init__.py +0 -0
  52. {arthexis-0.1.23 → arthexis-0.1.25}/config/active_app.py +0 -0
  53. {arthexis-0.1.23 → arthexis-0.1.25}/config/asgi.py +0 -0
  54. {arthexis-0.1.23 → arthexis-0.1.25}/config/auth_app.py +0 -0
  55. {arthexis-0.1.23 → arthexis-0.1.25}/config/celery.py +0 -0
  56. {arthexis-0.1.23 → arthexis-0.1.25}/config/context_processors.py +0 -0
  57. {arthexis-0.1.23 → arthexis-0.1.25}/config/horologia_app.py +0 -0
  58. {arthexis-0.1.23 → arthexis-0.1.25}/config/loadenv.py +0 -0
  59. {arthexis-0.1.23 → arthexis-0.1.25}/config/logging.py +0 -0
  60. {arthexis-0.1.23 → arthexis-0.1.25}/config/middleware.py +0 -0
  61. {arthexis-0.1.23 → arthexis-0.1.25}/config/offline.py +0 -0
  62. {arthexis-0.1.23 → arthexis-0.1.25}/config/settings_helpers.py +0 -0
  63. {arthexis-0.1.23 → arthexis-0.1.25}/config/wsgi.py +0 -0
  64. {arthexis-0.1.23 → arthexis-0.1.25}/core/__init__.py +0 -0
  65. {arthexis-0.1.23 → arthexis-0.1.25}/core/admin_history.py +0 -0
  66. {arthexis-0.1.23 → arthexis-0.1.25}/core/admindocs.py +0 -0
  67. {arthexis-0.1.23 → arthexis-0.1.25}/core/apps.py +0 -0
  68. {arthexis-0.1.23 → arthexis-0.1.25}/core/auto_upgrade.py +0 -0
  69. {arthexis-0.1.23 → arthexis-0.1.25}/core/changelog.py +0 -0
  70. {arthexis-0.1.23 → arthexis-0.1.25}/core/entity.py +0 -0
  71. {arthexis-0.1.23 → arthexis-0.1.25}/core/environment.py +0 -0
  72. {arthexis-0.1.23 → arthexis-0.1.25}/core/fields.py +0 -0
  73. {arthexis-0.1.23 → arthexis-0.1.25}/core/form_fields.py +0 -0
  74. {arthexis-0.1.23 → arthexis-0.1.25}/core/github_helper.py +0 -0
  75. {arthexis-0.1.23 → arthexis-0.1.25}/core/github_issues.py +0 -0
  76. {arthexis-0.1.23 → arthexis-0.1.25}/core/github_repos.py +0 -0
  77. {arthexis-0.1.23 → arthexis-0.1.25}/core/lcd_screen.py +0 -0
  78. {arthexis-0.1.23 → arthexis-0.1.25}/core/liveupdate.py +0 -0
  79. {arthexis-0.1.23 → arthexis-0.1.25}/core/log_paths.py +0 -0
  80. {arthexis-0.1.23 → arthexis-0.1.25}/core/mailer.py +0 -0
  81. {arthexis-0.1.23 → arthexis-0.1.25}/core/middleware.py +0 -0
  82. {arthexis-0.1.23 → arthexis-0.1.25}/core/notifications.py +0 -0
  83. {arthexis-0.1.23 → arthexis-0.1.25}/core/public_wifi.py +0 -0
  84. {arthexis-0.1.23 → arthexis-0.1.25}/core/reference_utils.py +0 -0
  85. {arthexis-0.1.23 → arthexis-0.1.25}/core/release.py +0 -0
  86. {arthexis-0.1.23 → arthexis-0.1.25}/core/rfid_import_export.py +0 -0
  87. {arthexis-0.1.23 → arthexis-0.1.25}/core/sigil_builder.py +0 -0
  88. {arthexis-0.1.23 → arthexis-0.1.25}/core/sigil_context.py +0 -0
  89. {arthexis-0.1.23 → arthexis-0.1.25}/core/sigil_resolver.py +0 -0
  90. {arthexis-0.1.23 → arthexis-0.1.25}/core/temp_passwords.py +0 -0
  91. {arthexis-0.1.23 → arthexis-0.1.25}/core/test_system_info.py +0 -0
  92. {arthexis-0.1.23 → arthexis-0.1.25}/core/tests.py +0 -0
  93. {arthexis-0.1.23 → arthexis-0.1.25}/core/tests_liveupdate.py +0 -0
  94. {arthexis-0.1.23 → arthexis-0.1.25}/core/urls.py +0 -0
  95. {arthexis-0.1.23 → arthexis-0.1.25}/core/user_data.py +0 -0
  96. {arthexis-0.1.23 → arthexis-0.1.25}/core/widgets.py +0 -0
  97. {arthexis-0.1.23 → arthexis-0.1.25}/nodes/__init__.py +0 -0
  98. {arthexis-0.1.23 → arthexis-0.1.25}/nodes/apps.py +0 -0
  99. {arthexis-0.1.23 → arthexis-0.1.25}/nodes/backends.py +0 -0
  100. {arthexis-0.1.23 → arthexis-0.1.25}/nodes/dns.py +0 -0
  101. {arthexis-0.1.23 → arthexis-0.1.25}/nodes/feature_checks.py +0 -0
  102. {arthexis-0.1.23 → arthexis-0.1.25}/nodes/lcd.py +0 -0
  103. {arthexis-0.1.23 → arthexis-0.1.25}/nodes/reports.py +0 -0
  104. {arthexis-0.1.23 → arthexis-0.1.25}/nodes/rfid_sync.py +0 -0
  105. {arthexis-0.1.23 → arthexis-0.1.25}/nodes/signals.py +0 -0
  106. {arthexis-0.1.23 → arthexis-0.1.25}/ocpp/__init__.py +0 -0
  107. {arthexis-0.1.23 → arthexis-0.1.25}/ocpp/apps.py +0 -0
  108. {arthexis-0.1.23 → arthexis-0.1.25}/ocpp/evcs.py +0 -0
  109. {arthexis-0.1.23 → arthexis-0.1.25}/ocpp/evcs_discovery.py +0 -0
  110. {arthexis-0.1.23 → arthexis-0.1.25}/ocpp/reference_utils.py +0 -0
  111. {arthexis-0.1.23 → arthexis-0.1.25}/ocpp/routing.py +0 -0
  112. {arthexis-0.1.23 → arthexis-0.1.25}/ocpp/simulator.py +0 -0
  113. {arthexis-0.1.23 → arthexis-0.1.25}/ocpp/status_display.py +0 -0
  114. {arthexis-0.1.23 → arthexis-0.1.25}/ocpp/store.py +0 -0
  115. {arthexis-0.1.23 → arthexis-0.1.25}/ocpp/test_export_import.py +0 -0
  116. {arthexis-0.1.23 → arthexis-0.1.25}/ocpp/test_rfid.py +0 -0
  117. {arthexis-0.1.23 → arthexis-0.1.25}/ocpp/transactions_io.py +0 -0
  118. {arthexis-0.1.23 → arthexis-0.1.25}/ocpp/urls.py +0 -0
  119. {arthexis-0.1.23 → arthexis-0.1.25}/pages/__init__.py +0 -0
  120. {arthexis-0.1.23 → arthexis-0.1.25}/pages/admin.py +0 -0
  121. {arthexis-0.1.23 → arthexis-0.1.25}/pages/apps.py +0 -0
  122. {arthexis-0.1.23 → arthexis-0.1.25}/pages/checks.py +0 -0
  123. {arthexis-0.1.23 → arthexis-0.1.25}/pages/context_processors.py +0 -0
  124. {arthexis-0.1.23 → arthexis-0.1.25}/pages/defaults.py +0 -0
  125. {arthexis-0.1.23 → arthexis-0.1.25}/pages/forms.py +0 -0
  126. {arthexis-0.1.23 → arthexis-0.1.25}/pages/models.py +0 -0
  127. {arthexis-0.1.23 → arthexis-0.1.25}/pages/module_defaults.py +0 -0
  128. {arthexis-0.1.23 → arthexis-0.1.25}/pages/site_config.py +0 -0
  129. {arthexis-0.1.23 → arthexis-0.1.25}/pages/tasks.py +0 -0
  130. {arthexis-0.1.23 → arthexis-0.1.25}/pages/urls.py +0 -0
  131. {arthexis-0.1.23 → arthexis-0.1.25}/setup.cfg +0 -0
  132. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_acronym_capitalization.py +0 -0
  133. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_admin_doc_commands.py +0 -0
  134. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_admin_doc_model_groups.py +0 -0
  135. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_admin_history.py +0 -0
  136. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_admin_index_actions.py +0 -0
  137. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_admin_model_graph.py +0 -0
  138. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_admin_object_history.py +0 -0
  139. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_admin_profile_link.py +0 -0
  140. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_admin_system_stop.py +0 -0
  141. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_allowed_hosts_hostname.py +0 -0
  142. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_api_login_required.py +0 -0
  143. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_auto_upgrade_scheduler.py +0 -0
  144. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_awg_admin.py +0 -0
  145. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_benchmark_command.py +0 -0
  146. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_build_pypi_command.py +0 -0
  147. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_celery_no_debug.py +0 -0
  148. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_changelog_builder.py +0 -0
  149. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_check_admin_command.py +0 -0
  150. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_check_migrations_script.py +0 -0
  151. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_check_pypi_command.py +0 -0
  152. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_clean_release_logs_command.py +0 -0
  153. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_csrf_failure.py +0 -0
  154. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_csrf_origin_subnet.py +0 -0
  155. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_dist_cleanup.py +0 -0
  156. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_email_collector.py +0 -0
  157. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_email_inbox.py +0 -0
  158. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_email_inbox_admin.py +0 -0
  159. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_email_inbox_search_action.py +0 -0
  160. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_email_outbox_admin.py +0 -0
  161. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_email_profiles.py +0 -0
  162. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_email_transaction.py +0 -0
  163. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_env_refresh_clean.py +0 -0
  164. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_env_refresh_pip.py +0 -0
  165. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_env_refresh_unlink.py +0 -0
  166. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_experience_admin_group.py +0 -0
  167. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_fixture_presence.py +0 -0
  168. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_footer_no_references.py +0 -0
  169. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_footer_presence.py +0 -0
  170. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_footer_render.py +0 -0
  171. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_git_checks.py +0 -0
  172. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_github_issue_reporting.py +0 -0
  173. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_install_script.py +0 -0
  174. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_invitation_login_view.py +0 -0
  175. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_language_switch.py +0 -0
  176. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_lcd_check_command.py +0 -0
  177. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_lcd_smbus2.py +0 -0
  178. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_log_paths.py +0 -0
  179. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_login_view_no_site.py +0 -0
  180. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_manage_debug_flag.py +0 -0
  181. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_manuals.py +0 -0
  182. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_message_command.py +0 -0
  183. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_migrations.py +0 -0
  184. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_model_verbose_name_capitalization.py +0 -0
  185. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_node_info_view.py +0 -0
  186. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_notifications_fallback.py +0 -0
  187. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_notify_command.py +0 -0
  188. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_ocpp_session_lock.py +0 -0
  189. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_odoo_profile_admin.py +0 -0
  190. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_odoo_quote_report.py +0 -0
  191. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_offline.py +0 -0
  192. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_package_admin_next_release.py +0 -0
  193. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_power_admin_group.py +0 -0
  194. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_profile_inline_deletion.py +0 -0
  195. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_pypi_check.py +0 -0
  196. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_pypi_token.py +0 -0
  197. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_readme_assets.py +0 -0
  198. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_readme_editor.py +0 -0
  199. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_readme_language.py +0 -0
  200. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_reference_qr_code.py +0 -0
  201. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_reference_transaction_uuid.py +0 -0
  202. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_register_site_apps_command.py +0 -0
  203. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_release_build.py +0 -0
  204. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_release_build_flow.py +0 -0
  205. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_release_checklist.py +0 -0
  206. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_release_logs.py +0 -0
  207. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_release_manager_admin.py +0 -0
  208. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_release_packages.py +0 -0
  209. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_release_progress.py +0 -0
  210. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_release_progress_pre_release_integration.py +0 -0
  211. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_release_push.py +0 -0
  212. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_release_tasks.py +0 -0
  213. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_render_nginx_sites.py +0 -0
  214. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_request_invite.py +0 -0
  215. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_rfid_admin_print_labels.py +0 -0
  216. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_rfid_admin_reference_clear.py +0 -0
  217. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_rfid_admin_scan_csrf.py +0 -0
  218. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_rfid_always_on.py +0 -0
  219. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_rfid_backend.py +0 -0
  220. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_rfid_background_reader.py +0 -0
  221. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_rfid_client_report.py +0 -0
  222. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_rfid_watch_command.py +0 -0
  223. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_role_marker_filtering.py +0 -0
  224. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_send_invite_command.py +0 -0
  225. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_settings_helpers.py +0 -0
  226. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_settings_mcp_port.py +0 -0
  227. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_shell_scripts.py +0 -0
  228. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_show_leads_command.py +0 -0
  229. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_sigil_builder.py +0 -0
  230. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_sigil_resolution.py +0 -0
  231. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_sites_utils.py +0 -0
  232. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_social_profile.py +0 -0
  233. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_staff_login_net_message.py +0 -0
  234. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_staff_required_decorator.py +0 -0
  235. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_stop_script.py +0 -0
  236. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_suite_gateway.py +0 -0
  237. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_switch_role_script.py +0 -0
  238. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_temp_passwords.py +0 -0
  239. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_totp_admin.py +0 -0
  240. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_totp_backend.py +0 -0
  241. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_transaction_meter_readings.py +0 -0
  242. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_uninstall_script.py +0 -0
  243. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_update_fixtures_command.py +0 -0
  244. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_upgrade_report.py +0 -0
  245. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_urls_autodiscover.py +0 -0
  246. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_version_endpoint.py +0 -0
  247. {arthexis-0.1.23 → arthexis-0.1.25}/tests/test_version_file.py +0 -0
  248. {arthexis-0.1.23 → arthexis-0.1.25}/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.25
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
@@ -48,6 +48,7 @@ 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
52
53
  Requires-Dist: h11==0.16.0
53
54
  Requires-Dist: httpcore==1.0.9
@@ -70,8 +71,8 @@ Requires-Dist: psycopg-binary==3.2.12
70
71
  Requires-Dist: pyasn1==0.6.1
71
72
  Requires-Dist: pyasn1_modules==0.4.2
72
73
  Requires-Dist: pycparser==2.22
73
- Requires-Dist: pydantic==2.11.7
74
- Requires-Dist: pydantic_core==2.33.2
74
+ Requires-Dist: pydantic==2.12.3
75
+ Requires-Dist: pydantic_core==2.41.4
75
76
  Requires-Dist: pyOpenSSL==25.1.0
76
77
  Requires-Dist: pyperclip==1.11.0
77
78
  Requires-Dist: PySocks==1.7.1
@@ -106,7 +107,7 @@ Requires-Dist: vine==5.1.0
106
107
  Requires-Dist: wcwidth==0.2.14
107
108
  Requires-Dist: webencodings==0.5.1
108
109
  Requires-Dist: websocket-client==1.8.0
109
- Requires-Dist: websockets==13.1
110
+ Requires-Dist: websockets==15.0.1
110
111
  Requires-Dist: whitenoise==6.11.0
111
112
  Requires-Dist: plyer==2.1.0; sys_platform == "win32"
112
113
  Requires-Dist: wsproto==1.2.0
@@ -124,19 +125,39 @@ Arthexis Constellation is a [narrative-driven](https://en.wikipedia.org/wiki/Nar
124
125
 
125
126
  ## Current Features
126
127
 
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`
128
+ - Compatible with the [Open Charge Point Protocol (OCPP) 1.6](https://www.openchargealliance.org/protocols/ocpp-16/) central system. Supported actions are summarized below.
129
+
130
+ **Charge point → CSMS**
131
+
132
+ | Action | What we do |
133
+ | --- | --- |
134
+ | `Authorize` | Validate RFID or token authorization requests before a session starts. |
135
+ | `BootNotification` | Register the charge point and update identity, firmware, and status details. |
136
+ | `DataTransfer` | Accept vendor-specific payloads and record the results. |
137
+ | `DiagnosticsStatusNotification` | Track the progress of diagnostic uploads kicked off from the back office. |
138
+ | `FirmwareStatusNotification` | Track firmware update lifecycle events from charge points. |
139
+ | `Heartbeat` | Keep the websocket session alive and update last-seen timestamps. |
140
+ | `MeterValues` | Persist periodic energy and power readings while a transaction is active. |
141
+ | `StartTransaction` | Create charging sessions with initial meter values and identification data. |
142
+ | `StatusNotification` | Reflect connector availability and fault states in real time. |
143
+ | `StopTransaction` | Close charging sessions, capturing closing meter values and stop reasons. |
144
+
145
+ **CSMS → Charge point**
146
+
147
+ | Action | What we do |
148
+ | --- | --- |
149
+ | `ChangeAvailability` | Switch connectors or the whole station between operative and inoperative states. |
150
+ | `DataTransfer` | Send vendor-specific commands and log the charge point response. |
151
+ | `GetConfiguration` | Poll the device for the current values of tracked configuration keys. |
152
+ | `RemoteStartTransaction` | Initiate a charging session remotely for an identified customer or token. |
153
+ | `RemoteStopTransaction` | Terminate active charging sessions from the control center. |
154
+ | `ReserveNow` | Reserve connectors for upcoming sessions with automatic connector selection and confirmation tracking. |
155
+ | `Reset` | Request a soft or hard reboot to recover from faults. |
156
+ | `TriggerMessage` | Ask the device to send an immediate update (for example status or diagnostics). |
157
+
158
+ **OCPP 1.6 roadmap.** The following catalogue actions are in our backlog: `CancelReservation`, `ChangeConfiguration`, `ClearCache`, `ClearChargingProfile`, `GetCompositeSchedule`, `GetDiagnostics`, `GetLocalListVersion`, `SendLocalList`, `SetChargingProfile`, `UnlockConnector`, `UpdateFirmware`.
159
+
160
+ - Charge point reservations with automated connector assignment, energy account and RFID linkage, and EVCS confirmation tracking.
140
161
  - [API](https://en.wikipedia.org/wiki/API) integration with [Odoo](https://www.odoo.com/), syncing:
141
162
  - Employee credentials via `res.users`
142
163
  - Product catalog lookups via `product.product`
@@ -9,19 +9,39 @@ 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
+ | `ChangeAvailability` | Switch connectors or the whole station between operative and inoperative states. |
34
+ | `DataTransfer` | Send vendor-specific commands and log the charge point response. |
35
+ | `GetConfiguration` | Poll the device for the current values of tracked configuration keys. |
36
+ | `RemoteStartTransaction` | Initiate a charging session remotely for an identified customer or token. |
37
+ | `RemoteStopTransaction` | Terminate active charging sessions from the control center. |
38
+ | `ReserveNow` | Reserve connectors for upcoming sessions with automatic connector selection and confirmation tracking. |
39
+ | `Reset` | Request a soft or hard reboot to recover from faults. |
40
+ | `TriggerMessage` | Ask the device to send an immediate update (for example status or diagnostics). |
41
+
42
+ **OCPP 1.6 roadmap.** The following catalogue actions are in our backlog: `CancelReservation`, `ChangeConfiguration`, `ClearCache`, `ClearChargingProfile`, `GetCompositeSchedule`, `GetDiagnostics`, `GetLocalListVersion`, `SendLocalList`, `SetChargingProfile`, `UnlockConnector`, `UpdateFirmware`.
43
+
44
+ - Charge point reservations with automated connector assignment, energy account and RFID linkage, and EVCS confirmation tracking.
25
45
  - [API](https://en.wikipedia.org/wiki/API) integration with [Odoo](https://www.odoo.com/), syncing:
26
46
  - Employee credentials via `res.users`
27
47
  - Product catalog lookups via `product.product`
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: arthexis
3
- Version: 0.1.23
3
+ Version: 0.1.25
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
@@ -48,6 +48,7 @@ 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
52
53
  Requires-Dist: h11==0.16.0
53
54
  Requires-Dist: httpcore==1.0.9
@@ -70,8 +71,8 @@ Requires-Dist: psycopg-binary==3.2.12
70
71
  Requires-Dist: pyasn1==0.6.1
71
72
  Requires-Dist: pyasn1_modules==0.4.2
72
73
  Requires-Dist: pycparser==2.22
73
- Requires-Dist: pydantic==2.11.7
74
- Requires-Dist: pydantic_core==2.33.2
74
+ Requires-Dist: pydantic==2.12.3
75
+ Requires-Dist: pydantic_core==2.41.4
75
76
  Requires-Dist: pyOpenSSL==25.1.0
76
77
  Requires-Dist: pyperclip==1.11.0
77
78
  Requires-Dist: PySocks==1.7.1
@@ -106,7 +107,7 @@ Requires-Dist: vine==5.1.0
106
107
  Requires-Dist: wcwidth==0.2.14
107
108
  Requires-Dist: webencodings==0.5.1
108
109
  Requires-Dist: websocket-client==1.8.0
109
- Requires-Dist: websockets==13.1
110
+ Requires-Dist: websockets==15.0.1
110
111
  Requires-Dist: whitenoise==6.11.0
111
112
  Requires-Dist: plyer==2.1.0; sys_platform == "win32"
112
113
  Requires-Dist: wsproto==1.2.0
@@ -124,19 +125,39 @@ Arthexis Constellation is a [narrative-driven](https://en.wikipedia.org/wiki/Nar
124
125
 
125
126
  ## Current Features
126
127
 
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`
128
+ - Compatible with the [Open Charge Point Protocol (OCPP) 1.6](https://www.openchargealliance.org/protocols/ocpp-16/) central system. Supported actions are summarized below.
129
+
130
+ **Charge point → CSMS**
131
+
132
+ | Action | What we do |
133
+ | --- | --- |
134
+ | `Authorize` | Validate RFID or token authorization requests before a session starts. |
135
+ | `BootNotification` | Register the charge point and update identity, firmware, and status details. |
136
+ | `DataTransfer` | Accept vendor-specific payloads and record the results. |
137
+ | `DiagnosticsStatusNotification` | Track the progress of diagnostic uploads kicked off from the back office. |
138
+ | `FirmwareStatusNotification` | Track firmware update lifecycle events from charge points. |
139
+ | `Heartbeat` | Keep the websocket session alive and update last-seen timestamps. |
140
+ | `MeterValues` | Persist periodic energy and power readings while a transaction is active. |
141
+ | `StartTransaction` | Create charging sessions with initial meter values and identification data. |
142
+ | `StatusNotification` | Reflect connector availability and fault states in real time. |
143
+ | `StopTransaction` | Close charging sessions, capturing closing meter values and stop reasons. |
144
+
145
+ **CSMS → Charge point**
146
+
147
+ | Action | What we do |
148
+ | --- | --- |
149
+ | `ChangeAvailability` | Switch connectors or the whole station between operative and inoperative states. |
150
+ | `DataTransfer` | Send vendor-specific commands and log the charge point response. |
151
+ | `GetConfiguration` | Poll the device for the current values of tracked configuration keys. |
152
+ | `RemoteStartTransaction` | Initiate a charging session remotely for an identified customer or token. |
153
+ | `RemoteStopTransaction` | Terminate active charging sessions from the control center. |
154
+ | `ReserveNow` | Reserve connectors for upcoming sessions with automatic connector selection and confirmation tracking. |
155
+ | `Reset` | Request a soft or hard reboot to recover from faults. |
156
+ | `TriggerMessage` | Ask the device to send an immediate update (for example status or diagnostics). |
157
+
158
+ **OCPP 1.6 roadmap.** The following catalogue actions are in our backlog: `CancelReservation`, `ChangeConfiguration`, `ClearCache`, `ClearChargingProfile`, `GetCompositeSchedule`, `GetDiagnostics`, `GetLocalListVersion`, `SendLocalList`, `SetChargingProfile`, `UnlockConnector`, `UpdateFirmware`.
159
+
160
+ - Charge point reservations with automated connector assignment, energy account and RFID linkage, and EVCS confirmation tracking.
140
161
  - [API](https://en.wikipedia.org/wiki/API) integration with [Odoo](https://www.odoo.com/), syncing:
141
162
  - Employee credentials via `res.users`
142
163
  - Product catalog lookups via `product.product`
@@ -83,6 +83,7 @@ ocpp/consumers.py
83
83
  ocpp/evcs.py
84
84
  ocpp/evcs_discovery.py
85
85
  ocpp/models.py
86
+ ocpp/network.py
86
87
  ocpp/reference_utils.py
87
88
  ocpp/routing.py
88
89
  ocpp/simulator.py
@@ -147,6 +148,7 @@ tests/test_email_outbox_admin.py
147
148
  tests/test_email_profiles.py
148
149
  tests/test_email_transaction.py
149
150
  tests/test_env_refresh_clean.py
151
+ tests/test_env_refresh_dependency_conflict.py
150
152
  tests/test_env_refresh_pip.py
151
153
  tests/test_env_refresh_unlink.py
152
154
  tests/test_experience_admin_group.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
@@ -34,6 +34,7 @@ django-otp==1.5.4
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
38
39
  h11==0.16.0
39
40
  httpcore==1.0.9
@@ -55,8 +56,8 @@ psycopg-binary==3.2.12
55
56
  pyasn1==0.6.1
56
57
  pyasn1_modules==0.4.2
57
58
  pycparser==2.22
58
- pydantic==2.11.7
59
- pydantic_core==2.33.2
59
+ pydantic==2.12.3
60
+ pydantic_core==2.41.4
60
61
  pyOpenSSL==25.1.0
61
62
  pyperclip==1.11.0
62
63
  PySocks==1.7.1
@@ -91,7 +92,7 @@ vine==5.1.0
91
92
  wcwidth==0.2.14
92
93
  webencodings==0.5.1
93
94
  websocket-client==1.8.0
94
- websockets==13.1
95
+ websockets==15.0.1
95
96
  whitenoise==6.11.0
96
97
  wsproto==1.2.0
97
98
  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
@@ -333,6 +335,7 @@ CsrfViewMiddleware._check_referer = _check_referer_with_forwarded
333
335
  # Application definition
334
336
 
335
337
  LOCAL_APPS = [
338
+ "api",
336
339
  "nodes",
337
340
  "core",
338
341
  "ocpp",
@@ -666,4 +669,8 @@ CELERY_BEAT_SCHEDULE = {
666
669
  "task": "ocpp.tasks.schedule_daily_charge_point_configuration_checks",
667
670
  "schedule": crontab(minute=0, hour=0),
668
671
  },
672
+ "ocpp_forwarding_push": {
673
+ "task": "ocpp.tasks.push_forwarded_charge_points",
674
+ "schedule": timedelta(seconds=5),
675
+ },
669
676
  }
@@ -20,6 +20,7 @@ from django.views.decorators.csrf import csrf_exempt
20
20
  from django.views.generic import RedirectView
21
21
  from django.views.i18n import set_language
22
22
  from django.utils.translation import gettext_lazy as _
23
+ from api.views import EnergyGraphQLView
23
24
  from core import views as core_views
24
25
  from core.admindocs import (
25
26
  CommandsView,
@@ -119,6 +120,7 @@ urlpatterns = [
119
120
  name="admin-model-graph",
120
121
  ),
121
122
  path("version/", core_views.version_info, name="version-info"),
123
+ path("graphql/", EnergyGraphQLView.as_view(), name="graphql"),
122
124
  path(
123
125
  "admin/core/releases/<int:pk>/<str:action>/",
124
126
  core_views.release_progress,