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.
- {arthexis-0.1.23 → arthexis-0.1.28}/PKG-INFO +54 -27
- {arthexis-0.1.23 → arthexis-0.1.28}/README.md +41 -16
- {arthexis-0.1.23 → arthexis-0.1.28}/arthexis.egg-info/PKG-INFO +54 -27
- {arthexis-0.1.23 → arthexis-0.1.28}/arthexis.egg-info/SOURCES.txt +9 -1
- {arthexis-0.1.23 → arthexis-0.1.28}/arthexis.egg-info/requires.txt +12 -10
- {arthexis-0.1.23 → arthexis-0.1.28}/config/settings.py +13 -0
- arthexis-0.1.28/config/settings_helpers.py +284 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/config/urls.py +59 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/core/admin.py +407 -236
- {arthexis-0.1.23 → arthexis-0.1.28}/core/apps.py +6 -2
- {arthexis-0.1.23 → arthexis-0.1.28}/core/auto_upgrade.py +19 -4
- {arthexis-0.1.23 → arthexis-0.1.28}/core/backends.py +3 -1
- arthexis-0.1.28/core/celery_utils.py +73 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/core/environment.py +1 -1
- {arthexis-0.1.23 → arthexis-0.1.28}/core/models.py +895 -237
- {arthexis-0.1.23 → arthexis-0.1.28}/core/sigil_builder.py +1 -1
- {arthexis-0.1.23 → arthexis-0.1.28}/core/sigil_resolver.py +1 -66
- {arthexis-0.1.23 → arthexis-0.1.28}/core/system.py +84 -4
- arthexis-0.1.28/core/tasks.py +713 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/core/test_system_info.py +43 -5
- {arthexis-0.1.23 → arthexis-0.1.28}/core/tests.py +202 -2
- {arthexis-0.1.23 → arthexis-0.1.28}/core/user_data.py +52 -19
- {arthexis-0.1.23 → arthexis-0.1.28}/core/views.py +70 -6
- {arthexis-0.1.23 → arthexis-0.1.28}/nodes/admin.py +819 -287
- {arthexis-0.1.23 → arthexis-0.1.28}/nodes/apps.py +1 -1
- {arthexis-0.1.23 → arthexis-0.1.28}/nodes/feature_checks.py +30 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/nodes/models.py +467 -63
- {arthexis-0.1.23 → arthexis-0.1.28}/nodes/tasks.py +14 -17
- {arthexis-0.1.23 → arthexis-0.1.28}/nodes/tests.py +599 -231
- {arthexis-0.1.23 → arthexis-0.1.28}/nodes/urls.py +11 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/nodes/utils.py +51 -3
- {arthexis-0.1.23 → arthexis-0.1.28}/nodes/views.py +744 -18
- arthexis-0.1.28/ocpp/admin.py +2766 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/ocpp/consumers.py +670 -7
- {arthexis-0.1.23 → arthexis-0.1.28}/ocpp/models.py +797 -32
- arthexis-0.1.28/ocpp/network.py +398 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/ocpp/store.py +406 -40
- {arthexis-0.1.23 → arthexis-0.1.28}/ocpp/tasks.py +158 -2
- {arthexis-0.1.23 → arthexis-0.1.28}/ocpp/test_rfid.py +73 -2
- {arthexis-0.1.23 → arthexis-0.1.28}/ocpp/tests.py +1161 -90
- {arthexis-0.1.23 → arthexis-0.1.28}/ocpp/urls.py +5 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/ocpp/views.py +176 -70
- {arthexis-0.1.23 → arthexis-0.1.28}/pages/context_processors.py +2 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/pages/middleware.py +3 -2
- {arthexis-0.1.23 → arthexis-0.1.28}/pages/models.py +9 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/pages/tests.py +206 -18
- {arthexis-0.1.23 → arthexis-0.1.28}/pages/urls.py +1 -0
- arthexis-0.1.28/pages/utils.py +93 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/pages/views.py +130 -35
- arthexis-0.1.28/pyproject.toml +26 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_admin_client_report.py +68 -10
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_allowed_hosts_hostname.py +0 -4
- arthexis-0.1.28/tests/test_auto_upgrade_scheduler.py +90 -0
- arthexis-0.1.28/tests/test_client_report_form.py +84 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_client_report_generation.py +29 -3
- arthexis-0.1.28/tests/test_client_report_pdf.py +71 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_client_report_schedule.py +48 -6
- arthexis-0.1.28/tests/test_env_refresh_dependency_conflict.py +114 -0
- arthexis-0.1.28/tests/test_env_refresh_pip.py +64 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_install_script.py +16 -19
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_localhost_admin_backend.py +14 -0
- arthexis-0.1.28/tests/test_model_verbose_name_capitalization.py +68 -0
- arthexis-0.1.28/tests/test_network_setup_interactive.py +78 -0
- arthexis-0.1.28/tests/test_nginx_config.py +26 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_node_info_view.py +1 -4
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_odoo_product.py +2 -114
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_odoo_profile.py +4 -4
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_odoo_profile_admin.py +20 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_odoo_quote_report.py +1 -1
- arthexis-0.1.28/tests/test_quality_drop.py +138 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_register_site_apps_command.py +1 -1
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_release_build_flow.py +0 -36
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_release_progress.py +72 -0
- arthexis-0.1.28/tests/test_render_nginx_default.py +52 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_render_nginx_sites.py +2 -2
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_seed_data.py +21 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_send_invite_command.py +1 -1
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_settings_helpers.py +75 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_shell_scripts.py +12 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_sigil_resolution.py +2 -71
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_sites_utils.py +1 -1
- arthexis-0.1.28/tests/test_stop_script.py +100 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_suite_gateway.py +0 -7
- arthexis-0.1.28/tests/test_system_changelog_report.py +114 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_user_data_admin.py +18 -0
- arthexis-0.1.28/tests/test_ws_script.py +19 -0
- arthexis-0.1.23/config/settings_helpers.py +0 -109
- arthexis-0.1.23/core/tasks.py +0 -407
- arthexis-0.1.23/ocpp/admin.py +0 -1221
- arthexis-0.1.23/pages/utils.py +0 -23
- arthexis-0.1.23/pyproject.toml +0 -26
- arthexis-0.1.23/tests/test_auto_upgrade_scheduler.py +0 -45
- arthexis-0.1.23/tests/test_client_report_form.py +0 -44
- arthexis-0.1.23/tests/test_env_refresh_pip.py +0 -28
- arthexis-0.1.23/tests/test_model_verbose_name_capitalization.py +0 -31
- arthexis-0.1.23/tests/test_network_setup_interactive.py +0 -37
- arthexis-0.1.23/tests/test_stop_script.py +0 -44
- arthexis-0.1.23/tests/test_system_changelog_report.py +0 -45
- {arthexis-0.1.23 → arthexis-0.1.28}/LICENSE +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/arthexis.egg-info/dependency_links.txt +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/arthexis.egg-info/top_level.txt +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/config/__init__.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/config/active_app.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/config/asgi.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/config/auth_app.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/config/celery.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/config/context_processors.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/config/horologia_app.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/config/loadenv.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/config/logging.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/config/middleware.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/config/offline.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/config/wsgi.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/core/__init__.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/core/admin_history.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/core/admindocs.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/core/changelog.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/core/entity.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/core/fields.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/core/form_fields.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/core/github_helper.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/core/github_issues.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/core/github_repos.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/core/lcd_screen.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/core/liveupdate.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/core/log_paths.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/core/mailer.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/core/middleware.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/core/notifications.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/core/public_wifi.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/core/reference_utils.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/core/release.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/core/rfid_import_export.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/core/sigil_context.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/core/temp_passwords.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/core/tests_liveupdate.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/core/urls.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/core/widgets.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/nodes/__init__.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/nodes/backends.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/nodes/dns.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/nodes/lcd.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/nodes/reports.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/nodes/rfid_sync.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/nodes/signals.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/ocpp/__init__.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/ocpp/apps.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/ocpp/evcs.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/ocpp/evcs_discovery.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/ocpp/reference_utils.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/ocpp/routing.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/ocpp/simulator.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/ocpp/status_display.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/ocpp/test_export_import.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/ocpp/transactions_io.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/pages/__init__.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/pages/admin.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/pages/apps.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/pages/checks.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/pages/defaults.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/pages/forms.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/pages/module_defaults.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/pages/site_config.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/pages/tasks.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/setup.cfg +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_acronym_capitalization.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_admin_doc_commands.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_admin_doc_model_groups.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_admin_history.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_admin_index_actions.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_admin_model_graph.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_admin_object_history.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_admin_profile_link.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_admin_system_stop.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_api_login_required.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_awg_admin.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_benchmark_command.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_build_pypi_command.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_celery_no_debug.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_changelog_builder.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_check_admin_command.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_check_migrations_script.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_check_pypi_command.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_clean_release_logs_command.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_csrf_failure.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_csrf_origin_subnet.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_dist_cleanup.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_email_collector.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_email_inbox.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_email_inbox_admin.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_email_inbox_search_action.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_email_outbox_admin.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_email_profiles.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_email_transaction.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_env_refresh_clean.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_env_refresh_unlink.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_experience_admin_group.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_fixture_presence.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_footer_no_references.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_footer_presence.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_footer_render.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_git_checks.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_github_issue_reporting.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_invitation_login_view.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_language_switch.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_lcd_check_command.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_lcd_smbus2.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_log_paths.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_login_view_no_site.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_manage_debug_flag.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_manuals.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_message_command.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_migrations.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_notifications_fallback.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_notify_command.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_ocpp_session_lock.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_offline.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_package_admin_next_release.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_power_admin_group.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_profile_inline_deletion.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_pypi_check.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_pypi_token.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_readme_assets.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_readme_editor.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_readme_language.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_reference_qr_code.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_reference_transaction_uuid.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_release_build.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_release_checklist.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_release_logs.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_release_manager_admin.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_release_packages.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_release_progress_pre_release_integration.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_release_push.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_release_tasks.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_request_invite.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_rfid_admin_print_labels.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_rfid_admin_reference_clear.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_rfid_admin_scan_csrf.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_rfid_always_on.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_rfid_backend.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_rfid_background_reader.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_rfid_client_report.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_rfid_watch_command.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_role_marker_filtering.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_settings_mcp_port.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_show_leads_command.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_sigil_builder.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_social_profile.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_staff_login_net_message.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_staff_required_decorator.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_switch_role_script.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_temp_passwords.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_totp_admin.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_totp_backend.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_transaction_meter_readings.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_uninstall_script.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_update_fixtures_command.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_upgrade_report.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_urls_autodiscover.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_version_endpoint.py +0 -0
- {arthexis-0.1.23 → arthexis-0.1.28}/tests/test_version_file.py +0 -0
- {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.
|
|
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
|
|
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.
|
|
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==
|
|
66
|
-
Requires-Dist: prompt_toolkit==3.0.
|
|
67
|
-
Requires-Dist: psutil==7.1.
|
|
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.
|
|
74
|
-
Requires-Dist: pydantic_core==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.
|
|
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.
|
|
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==
|
|
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
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
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:
|
|
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:
|
|
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 → 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.
|
|
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
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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:
|
|
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:
|
|
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 → 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.
|
|
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.
|
|
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
|
|
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.
|
|
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==
|
|
66
|
-
Requires-Dist: prompt_toolkit==3.0.
|
|
67
|
-
Requires-Dist: psutil==7.1.
|
|
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.
|
|
74
|
-
Requires-Dist: pydantic_core==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.
|
|
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.
|
|
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==
|
|
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
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
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:
|
|
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:
|
|
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 → 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.
|
|
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
|
|
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.
|
|
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==
|
|
51
|
-
prompt_toolkit==3.0.
|
|
52
|
-
psutil==7.1.
|
|
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.
|
|
59
|
-
pydantic_core==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.
|
|
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.
|
|
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==
|
|
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
|
}
|