arthexis 0.1.3__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 (125) hide show
  1. arthexis-0.1.3/LICENSE +21 -0
  2. arthexis-0.1.3/PKG-INFO +126 -0
  3. arthexis-0.1.3/README.md +18 -0
  4. arthexis-0.1.3/arthexis.egg-info/PKG-INFO +126 -0
  5. arthexis-0.1.3/arthexis.egg-info/SOURCES.txt +123 -0
  6. arthexis-0.1.3/arthexis.egg-info/dependency_links.txt +1 -0
  7. arthexis-0.1.3/arthexis.egg-info/requires.txt +97 -0
  8. arthexis-0.1.3/arthexis.egg-info/top_level.txt +5 -0
  9. arthexis-0.1.3/config/__init__.py +6 -0
  10. arthexis-0.1.3/config/active_app.py +15 -0
  11. arthexis-0.1.3/config/asgi.py +29 -0
  12. arthexis-0.1.3/config/auth_app.py +8 -0
  13. arthexis-0.1.3/config/celery.py +19 -0
  14. arthexis-0.1.3/config/context_processors.py +68 -0
  15. arthexis-0.1.3/config/loadenv.py +11 -0
  16. arthexis-0.1.3/config/logging.py +43 -0
  17. arthexis-0.1.3/config/middleware.py +25 -0
  18. arthexis-0.1.3/config/offline.py +47 -0
  19. arthexis-0.1.3/config/settings.py +374 -0
  20. arthexis-0.1.3/config/urls.py +91 -0
  21. arthexis-0.1.3/config/wsgi.py +17 -0
  22. arthexis-0.1.3/core/__init__.py +0 -0
  23. arthexis-0.1.3/core/admin.py +830 -0
  24. arthexis-0.1.3/core/apps.py +67 -0
  25. arthexis-0.1.3/core/backends.py +82 -0
  26. arthexis-0.1.3/core/entity.py +97 -0
  27. arthexis-0.1.3/core/environment.py +43 -0
  28. arthexis-0.1.3/core/fields.py +70 -0
  29. arthexis-0.1.3/core/lcd_screen.py +77 -0
  30. arthexis-0.1.3/core/middleware.py +34 -0
  31. arthexis-0.1.3/core/models.py +1277 -0
  32. arthexis-0.1.3/core/notifications.py +95 -0
  33. arthexis-0.1.3/core/release.py +451 -0
  34. arthexis-0.1.3/core/system.py +111 -0
  35. arthexis-0.1.3/core/tasks.py +100 -0
  36. arthexis-0.1.3/core/tests.py +483 -0
  37. arthexis-0.1.3/core/urls.py +11 -0
  38. arthexis-0.1.3/core/user_data.py +333 -0
  39. arthexis-0.1.3/core/views.py +431 -0
  40. arthexis-0.1.3/nodes/__init__.py +0 -0
  41. arthexis-0.1.3/nodes/actions.py +72 -0
  42. arthexis-0.1.3/nodes/admin.py +347 -0
  43. arthexis-0.1.3/nodes/apps.py +76 -0
  44. arthexis-0.1.3/nodes/lcd.py +151 -0
  45. arthexis-0.1.3/nodes/models.py +577 -0
  46. arthexis-0.1.3/nodes/tasks.py +50 -0
  47. arthexis-0.1.3/nodes/tests.py +1072 -0
  48. arthexis-0.1.3/nodes/urls.py +13 -0
  49. arthexis-0.1.3/nodes/utils.py +62 -0
  50. arthexis-0.1.3/nodes/views.py +262 -0
  51. arthexis-0.1.3/ocpp/__init__.py +0 -0
  52. arthexis-0.1.3/ocpp/admin.py +392 -0
  53. arthexis-0.1.3/ocpp/apps.py +24 -0
  54. arthexis-0.1.3/ocpp/consumers.py +267 -0
  55. arthexis-0.1.3/ocpp/evcs.py +911 -0
  56. arthexis-0.1.3/ocpp/models.py +300 -0
  57. arthexis-0.1.3/ocpp/routing.py +9 -0
  58. arthexis-0.1.3/ocpp/simulator.py +357 -0
  59. arthexis-0.1.3/ocpp/store.py +175 -0
  60. arthexis-0.1.3/ocpp/tasks.py +27 -0
  61. arthexis-0.1.3/ocpp/test_export_import.py +129 -0
  62. arthexis-0.1.3/ocpp/test_rfid.py +345 -0
  63. arthexis-0.1.3/ocpp/tests.py +1229 -0
  64. arthexis-0.1.3/ocpp/transactions_io.py +119 -0
  65. arthexis-0.1.3/ocpp/urls.py +17 -0
  66. arthexis-0.1.3/ocpp/views.py +359 -0
  67. arthexis-0.1.3/pages/__init__.py +0 -0
  68. arthexis-0.1.3/pages/admin.py +231 -0
  69. arthexis-0.1.3/pages/apps.py +10 -0
  70. arthexis-0.1.3/pages/checks.py +41 -0
  71. arthexis-0.1.3/pages/context_processors.py +72 -0
  72. arthexis-0.1.3/pages/models.py +224 -0
  73. arthexis-0.1.3/pages/tests.py +628 -0
  74. arthexis-0.1.3/pages/urls.py +17 -0
  75. arthexis-0.1.3/pages/utils.py +13 -0
  76. arthexis-0.1.3/pages/views.py +191 -0
  77. arthexis-0.1.3/pyproject.toml +26 -0
  78. arthexis-0.1.3/setup.cfg +4 -0
  79. arthexis-0.1.3/tests/test_acronym_capitalization.py +69 -0
  80. arthexis-0.1.3/tests/test_admin_history.py +30 -0
  81. arthexis-0.1.3/tests/test_admin_index_actions.py +47 -0
  82. arthexis-0.1.3/tests/test_awg_admin.py +22 -0
  83. arthexis-0.1.3/tests/test_csrf_failure.py +25 -0
  84. arthexis-0.1.3/tests/test_csrf_origin_subnet.py +21 -0
  85. arthexis-0.1.3/tests/test_email_collector.py +57 -0
  86. arthexis-0.1.3/tests/test_email_inbox.py +84 -0
  87. arthexis-0.1.3/tests/test_email_inbox_admin.py +64 -0
  88. arthexis-0.1.3/tests/test_email_inbox_search_action.py +104 -0
  89. arthexis-0.1.3/tests/test_env_refresh_clean.py +30 -0
  90. arthexis-0.1.3/tests/test_env_refresh_unlink.py +41 -0
  91. arthexis-0.1.3/tests/test_footer_admin_link.py +91 -0
  92. arthexis-0.1.3/tests/test_footer_no_references.py +21 -0
  93. arthexis-0.1.3/tests/test_footer_presence.py +8 -0
  94. arthexis-0.1.3/tests/test_footer_render.py +80 -0
  95. arthexis-0.1.3/tests/test_github_token.py +29 -0
  96. arthexis-0.1.3/tests/test_install_script.py +56 -0
  97. arthexis-0.1.3/tests/test_language_switch.py +27 -0
  98. arthexis-0.1.3/tests/test_lcd_smbus2.py +50 -0
  99. arthexis-0.1.3/tests/test_localhost_admin_backend.py +18 -0
  100. arthexis-0.1.3/tests/test_model_verbose_name_capitalization.py +31 -0
  101. arthexis-0.1.3/tests/test_notifications_fallback.py +50 -0
  102. arthexis-0.1.3/tests/test_notify_command.py +18 -0
  103. arthexis-0.1.3/tests/test_odoo_profile.py +88 -0
  104. arthexis-0.1.3/tests/test_odoo_profile_admin.py +58 -0
  105. arthexis-0.1.3/tests/test_offline.py +32 -0
  106. arthexis-0.1.3/tests/test_package_release_admin_actions.py +186 -0
  107. arthexis-0.1.3/tests/test_pypi_token.py +52 -0
  108. arthexis-0.1.3/tests/test_readme_language.py +21 -0
  109. arthexis-0.1.3/tests/test_reference_qr_code.py +50 -0
  110. arthexis-0.1.3/tests/test_reference_transaction_uuid.py +57 -0
  111. arthexis-0.1.3/tests/test_register_site_apps_command.py +48 -0
  112. arthexis-0.1.3/tests/test_release_fixture_cleanup.py +32 -0
  113. arthexis-0.1.3/tests/test_release_logs.py +15 -0
  114. arthexis-0.1.3/tests/test_release_mapping.py +24 -0
  115. arthexis-0.1.3/tests/test_release_progress.py +114 -0
  116. arthexis-0.1.3/tests/test_release_tasks.py +54 -0
  117. arthexis-0.1.3/tests/test_rfid_admin_reference_clear.py +56 -0
  118. arthexis-0.1.3/tests/test_rfid_admin_scan_csrf.py +29 -0
  119. arthexis-0.1.3/tests/test_rfid_background_reader.py +32 -0
  120. arthexis-0.1.3/tests/test_save_as_copy.py +45 -0
  121. arthexis-0.1.3/tests/test_seed_data.py +119 -0
  122. arthexis-0.1.3/tests/test_sigil_resolution.py +42 -0
  123. arthexis-0.1.3/tests/test_urls_autodiscover.py +20 -0
  124. arthexis-0.1.3/tests/test_user_datum_admin.py +251 -0
  125. arthexis-0.1.3/tests/test_vscode_manage.py +21 -0
arthexis-0.1.3/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Rafael Guillen
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,126 @@
1
+ Metadata-Version: 2.4
2
+ Name: arthexis
3
+ Version: 0.1.3
4
+ Summary: Django-based MESH system
5
+ Author-email: "Rafael J. Guillén-Osorio" <tecnologia@gelectriic.com>
6
+ License-Expression: MIT
7
+ Project-URL: Repository, https://github.com/arthexis/arthexis
8
+ Project-URL: Homepage, https://arthexis.com
9
+ Classifier: Programming Language :: Python :: 3
10
+ Classifier: Framework :: Django
11
+ Requires-Python: >=3.10
12
+ Description-Content-Type: text/markdown
13
+ License-File: LICENSE
14
+ Requires-Dist: amqp==5.3.1
15
+ Requires-Dist: annotated-types==0.7.0
16
+ Requires-Dist: anyio==4.9.0
17
+ Requires-Dist: asgiref==3.9.1
18
+ Requires-Dist: atproto==0.0.61
19
+ Requires-Dist: attrs==25.3.0
20
+ Requires-Dist: autobahn==24.4.2
21
+ Requires-Dist: Automat==25.4.16
22
+ Requires-Dist: billiard==4.2.1
23
+ Requires-Dist: bleach==6.2.0
24
+ Requires-Dist: celery==5.5.3
25
+ Requires-Dist: certifi==2025.7.14
26
+ Requires-Dist: cffi==1.17.1
27
+ Requires-Dist: channels==4.1.0
28
+ Requires-Dist: charset-normalizer==3.4.2
29
+ Requires-Dist: click==8.2.1
30
+ Requires-Dist: click-didyoumean==0.3.1
31
+ Requires-Dist: click-plugins==1.1.1.2
32
+ Requires-Dist: click-repl==0.3.0
33
+ Requires-Dist: colorama==0.4.6
34
+ Requires-Dist: constantly==23.10.4
35
+ Requires-Dist: cron-descriptor==1.4.5
36
+ Requires-Dist: cryptography==45.0.5
37
+ Requires-Dist: daphne==4.2.1
38
+ Requires-Dist: diff-match-patch==20241021
39
+ Requires-Dist: Django==5.2.4
40
+ Requires-Dist: django-celery-beat==2.8.1
41
+ Requires-Dist: django-debug-toolbar==6.0.0
42
+ Requires-Dist: django-import-export==4.3.9
43
+ Requires-Dist: django-object-actions==5.0.0
44
+ Requires-Dist: django-post_office==3.10.1
45
+ Requires-Dist: django-timezone-field==7.1
46
+ Requires-Dist: dnspython==2.7.0
47
+ Requires-Dist: docutils==0.22
48
+ Requires-Dist: gpiozero==2.0.1; sys_platform == "linux"
49
+ Requires-Dist: h11==0.16.0
50
+ Requires-Dist: httpcore==1.0.9
51
+ Requires-Dist: httpx==0.28.1
52
+ Requires-Dist: hyperlink==21.0.0
53
+ Requires-Dist: idna==3.10
54
+ Requires-Dist: incremental==24.7.2
55
+ Requires-Dist: kombu==5.5.4
56
+ Requires-Dist: libipld==3.1.1
57
+ Requires-Dist: Markdown==3.8.2
58
+ Requires-Dist: mfrc522==0.0.7; sys_platform == "linux"
59
+ Requires-Dist: outcome==1.3.0.post0
60
+ Requires-Dist: packaging==25.0
61
+ Requires-Dist: pillow==11.3.0
62
+ Requires-Dist: prompt_toolkit==3.0.51
63
+ Requires-Dist: psycopg==3.2.9
64
+ Requires-Dist: psycopg-binary==3.2.9
65
+ Requires-Dist: pyasn1==0.6.1
66
+ Requires-Dist: pyasn1_modules==0.4.2
67
+ Requires-Dist: pycparser==2.22
68
+ Requires-Dist: pydantic==2.11.7
69
+ Requires-Dist: pydantic_core==2.33.2
70
+ Requires-Dist: pyOpenSSL==25.1.0
71
+ Requires-Dist: pyperclip==1.9.0
72
+ Requires-Dist: PySocks==1.7.1
73
+ Requires-Dist: python-crontab==3.3.0
74
+ Requires-Dist: python-dateutil==2.9.0.post0
75
+ Requires-Dist: python-dotenv==1.1.1
76
+ Requires-Dist: qrcode==8.2
77
+ Requires-Dist: redis==5.0.8
78
+ Requires-Dist: requests==2.32.4
79
+ Requires-Dist: selenium==4.34.2
80
+ Requires-Dist: service-identity==24.2.0
81
+ Requires-Dist: setuptools==80.9.0
82
+ Requires-Dist: six==1.17.0
83
+ Requires-Dist: smbus2==0.5.0
84
+ Requires-Dist: sniffio==1.3.1
85
+ Requires-Dist: sortedcontainers==2.4.0
86
+ Requires-Dist: sqlparse==0.5.3
87
+ Requires-Dist: tablib==3.8.0
88
+ Requires-Dist: tinycss2==1.4.0
89
+ Requires-Dist: toml==0.10.2
90
+ Requires-Dist: trio==0.30.0
91
+ Requires-Dist: trio-websocket==0.12.2
92
+ Requires-Dist: Twisted==25.5.0
93
+ Requires-Dist: twine==6.1.0
94
+ Requires-Dist: txaio==25.6.1
95
+ Requires-Dist: typing-inspection==0.4.1
96
+ Requires-Dist: typing_extensions==4.14.1
97
+ Requires-Dist: tzdata==2025.2
98
+ Requires-Dist: urllib3==2.5.0
99
+ Requires-Dist: vine==5.1.0
100
+ Requires-Dist: wcwidth==0.2.13
101
+ Requires-Dist: webencodings==0.5.1
102
+ Requires-Dist: websocket-client==1.8.0
103
+ Requires-Dist: websockets==13.1
104
+ Requires-Dist: plyer==2.1.0; sys_platform == "win32"
105
+ Requires-Dist: wsproto==1.2.0
106
+ Requires-Dist: zope.interface==7.2
107
+ Dynamic: license-file
108
+
109
+ # Arthexis Constellation
110
+
111
+ ## Purpose
112
+ Arthexis Constellation is a narrative-driven Django-based suite that centralizes tools for managing charging infrastructure and orchestrating energy related products and services.
113
+
114
+ ## Features
115
+ - Compatibility with all OCPP 1.6 certified chargers
116
+ - Native API integration with Odoo 1.6-based CRMs
117
+ - Runs everywhere Python 3.10+ is installed
118
+ - Single codebase with special features per role
119
+
120
+ ## Support
121
+ You may contact us at tecnologia at gelectriic dot com or visit our web page https://www.gelectriic.com/ for professional services and commercial support.
122
+
123
+ ## About Me
124
+ > "What? You want to know about me too? Well, I enjoy developing software, roleplaying games, long walks on the beach and a fourth secret thing."
125
+ > --Arthexis
126
+
@@ -0,0 +1,18 @@
1
+ # Arthexis Constellation
2
+
3
+ ## Purpose
4
+ Arthexis Constellation is a narrative-driven Django-based suite that centralizes tools for managing charging infrastructure and orchestrating energy related products and services.
5
+
6
+ ## Features
7
+ - Compatibility with all OCPP 1.6 certified chargers
8
+ - Native API integration with Odoo 1.6-based CRMs
9
+ - Runs everywhere Python 3.10+ is installed
10
+ - Single codebase with special features per role
11
+
12
+ ## Support
13
+ You may contact us at tecnologia at gelectriic dot com or visit our web page https://www.gelectriic.com/ for professional services and commercial support.
14
+
15
+ ## About Me
16
+ > "What? You want to know about me too? Well, I enjoy developing software, roleplaying games, long walks on the beach and a fourth secret thing."
17
+ > --Arthexis
18
+
@@ -0,0 +1,126 @@
1
+ Metadata-Version: 2.4
2
+ Name: arthexis
3
+ Version: 0.1.3
4
+ Summary: Django-based MESH system
5
+ Author-email: "Rafael J. Guillén-Osorio" <tecnologia@gelectriic.com>
6
+ License-Expression: MIT
7
+ Project-URL: Repository, https://github.com/arthexis/arthexis
8
+ Project-URL: Homepage, https://arthexis.com
9
+ Classifier: Programming Language :: Python :: 3
10
+ Classifier: Framework :: Django
11
+ Requires-Python: >=3.10
12
+ Description-Content-Type: text/markdown
13
+ License-File: LICENSE
14
+ Requires-Dist: amqp==5.3.1
15
+ Requires-Dist: annotated-types==0.7.0
16
+ Requires-Dist: anyio==4.9.0
17
+ Requires-Dist: asgiref==3.9.1
18
+ Requires-Dist: atproto==0.0.61
19
+ Requires-Dist: attrs==25.3.0
20
+ Requires-Dist: autobahn==24.4.2
21
+ Requires-Dist: Automat==25.4.16
22
+ Requires-Dist: billiard==4.2.1
23
+ Requires-Dist: bleach==6.2.0
24
+ Requires-Dist: celery==5.5.3
25
+ Requires-Dist: certifi==2025.7.14
26
+ Requires-Dist: cffi==1.17.1
27
+ Requires-Dist: channels==4.1.0
28
+ Requires-Dist: charset-normalizer==3.4.2
29
+ Requires-Dist: click==8.2.1
30
+ Requires-Dist: click-didyoumean==0.3.1
31
+ Requires-Dist: click-plugins==1.1.1.2
32
+ Requires-Dist: click-repl==0.3.0
33
+ Requires-Dist: colorama==0.4.6
34
+ Requires-Dist: constantly==23.10.4
35
+ Requires-Dist: cron-descriptor==1.4.5
36
+ Requires-Dist: cryptography==45.0.5
37
+ Requires-Dist: daphne==4.2.1
38
+ Requires-Dist: diff-match-patch==20241021
39
+ Requires-Dist: Django==5.2.4
40
+ Requires-Dist: django-celery-beat==2.8.1
41
+ Requires-Dist: django-debug-toolbar==6.0.0
42
+ Requires-Dist: django-import-export==4.3.9
43
+ Requires-Dist: django-object-actions==5.0.0
44
+ Requires-Dist: django-post_office==3.10.1
45
+ Requires-Dist: django-timezone-field==7.1
46
+ Requires-Dist: dnspython==2.7.0
47
+ Requires-Dist: docutils==0.22
48
+ Requires-Dist: gpiozero==2.0.1; sys_platform == "linux"
49
+ Requires-Dist: h11==0.16.0
50
+ Requires-Dist: httpcore==1.0.9
51
+ Requires-Dist: httpx==0.28.1
52
+ Requires-Dist: hyperlink==21.0.0
53
+ Requires-Dist: idna==3.10
54
+ Requires-Dist: incremental==24.7.2
55
+ Requires-Dist: kombu==5.5.4
56
+ Requires-Dist: libipld==3.1.1
57
+ Requires-Dist: Markdown==3.8.2
58
+ Requires-Dist: mfrc522==0.0.7; sys_platform == "linux"
59
+ Requires-Dist: outcome==1.3.0.post0
60
+ Requires-Dist: packaging==25.0
61
+ Requires-Dist: pillow==11.3.0
62
+ Requires-Dist: prompt_toolkit==3.0.51
63
+ Requires-Dist: psycopg==3.2.9
64
+ Requires-Dist: psycopg-binary==3.2.9
65
+ Requires-Dist: pyasn1==0.6.1
66
+ Requires-Dist: pyasn1_modules==0.4.2
67
+ Requires-Dist: pycparser==2.22
68
+ Requires-Dist: pydantic==2.11.7
69
+ Requires-Dist: pydantic_core==2.33.2
70
+ Requires-Dist: pyOpenSSL==25.1.0
71
+ Requires-Dist: pyperclip==1.9.0
72
+ Requires-Dist: PySocks==1.7.1
73
+ Requires-Dist: python-crontab==3.3.0
74
+ Requires-Dist: python-dateutil==2.9.0.post0
75
+ Requires-Dist: python-dotenv==1.1.1
76
+ Requires-Dist: qrcode==8.2
77
+ Requires-Dist: redis==5.0.8
78
+ Requires-Dist: requests==2.32.4
79
+ Requires-Dist: selenium==4.34.2
80
+ Requires-Dist: service-identity==24.2.0
81
+ Requires-Dist: setuptools==80.9.0
82
+ Requires-Dist: six==1.17.0
83
+ Requires-Dist: smbus2==0.5.0
84
+ Requires-Dist: sniffio==1.3.1
85
+ Requires-Dist: sortedcontainers==2.4.0
86
+ Requires-Dist: sqlparse==0.5.3
87
+ Requires-Dist: tablib==3.8.0
88
+ Requires-Dist: tinycss2==1.4.0
89
+ Requires-Dist: toml==0.10.2
90
+ Requires-Dist: trio==0.30.0
91
+ Requires-Dist: trio-websocket==0.12.2
92
+ Requires-Dist: Twisted==25.5.0
93
+ Requires-Dist: twine==6.1.0
94
+ Requires-Dist: txaio==25.6.1
95
+ Requires-Dist: typing-inspection==0.4.1
96
+ Requires-Dist: typing_extensions==4.14.1
97
+ Requires-Dist: tzdata==2025.2
98
+ Requires-Dist: urllib3==2.5.0
99
+ Requires-Dist: vine==5.1.0
100
+ Requires-Dist: wcwidth==0.2.13
101
+ Requires-Dist: webencodings==0.5.1
102
+ Requires-Dist: websocket-client==1.8.0
103
+ Requires-Dist: websockets==13.1
104
+ Requires-Dist: plyer==2.1.0; sys_platform == "win32"
105
+ Requires-Dist: wsproto==1.2.0
106
+ Requires-Dist: zope.interface==7.2
107
+ Dynamic: license-file
108
+
109
+ # Arthexis Constellation
110
+
111
+ ## Purpose
112
+ Arthexis Constellation is a narrative-driven Django-based suite that centralizes tools for managing charging infrastructure and orchestrating energy related products and services.
113
+
114
+ ## Features
115
+ - Compatibility with all OCPP 1.6 certified chargers
116
+ - Native API integration with Odoo 1.6-based CRMs
117
+ - Runs everywhere Python 3.10+ is installed
118
+ - Single codebase with special features per role
119
+
120
+ ## Support
121
+ You may contact us at tecnologia at gelectriic dot com or visit our web page https://www.gelectriic.com/ for professional services and commercial support.
122
+
123
+ ## About Me
124
+ > "What? You want to know about me too? Well, I enjoy developing software, roleplaying games, long walks on the beach and a fourth secret thing."
125
+ > --Arthexis
126
+
@@ -0,0 +1,123 @@
1
+ LICENSE
2
+ README.md
3
+ pyproject.toml
4
+ arthexis.egg-info/PKG-INFO
5
+ arthexis.egg-info/SOURCES.txt
6
+ arthexis.egg-info/dependency_links.txt
7
+ arthexis.egg-info/requires.txt
8
+ arthexis.egg-info/top_level.txt
9
+ config/__init__.py
10
+ config/active_app.py
11
+ config/asgi.py
12
+ config/auth_app.py
13
+ config/celery.py
14
+ config/context_processors.py
15
+ config/loadenv.py
16
+ config/logging.py
17
+ config/middleware.py
18
+ config/offline.py
19
+ config/settings.py
20
+ config/urls.py
21
+ config/wsgi.py
22
+ core/__init__.py
23
+ core/admin.py
24
+ core/apps.py
25
+ core/backends.py
26
+ core/entity.py
27
+ core/environment.py
28
+ core/fields.py
29
+ core/lcd_screen.py
30
+ core/middleware.py
31
+ core/models.py
32
+ core/notifications.py
33
+ core/release.py
34
+ core/system.py
35
+ core/tasks.py
36
+ core/tests.py
37
+ core/urls.py
38
+ core/user_data.py
39
+ core/views.py
40
+ nodes/__init__.py
41
+ nodes/actions.py
42
+ nodes/admin.py
43
+ nodes/apps.py
44
+ nodes/lcd.py
45
+ nodes/models.py
46
+ nodes/tasks.py
47
+ nodes/tests.py
48
+ nodes/urls.py
49
+ nodes/utils.py
50
+ nodes/views.py
51
+ ocpp/__init__.py
52
+ ocpp/admin.py
53
+ ocpp/apps.py
54
+ ocpp/consumers.py
55
+ ocpp/evcs.py
56
+ ocpp/models.py
57
+ ocpp/routing.py
58
+ ocpp/simulator.py
59
+ ocpp/store.py
60
+ ocpp/tasks.py
61
+ ocpp/test_export_import.py
62
+ ocpp/test_rfid.py
63
+ ocpp/tests.py
64
+ ocpp/transactions_io.py
65
+ ocpp/urls.py
66
+ ocpp/views.py
67
+ pages/__init__.py
68
+ pages/admin.py
69
+ pages/apps.py
70
+ pages/checks.py
71
+ pages/context_processors.py
72
+ pages/models.py
73
+ pages/tests.py
74
+ pages/urls.py
75
+ pages/utils.py
76
+ pages/views.py
77
+ tests/test_acronym_capitalization.py
78
+ tests/test_admin_history.py
79
+ tests/test_admin_index_actions.py
80
+ tests/test_awg_admin.py
81
+ tests/test_csrf_failure.py
82
+ tests/test_csrf_origin_subnet.py
83
+ tests/test_email_collector.py
84
+ tests/test_email_inbox.py
85
+ tests/test_email_inbox_admin.py
86
+ tests/test_email_inbox_search_action.py
87
+ tests/test_env_refresh_clean.py
88
+ tests/test_env_refresh_unlink.py
89
+ tests/test_footer_admin_link.py
90
+ tests/test_footer_no_references.py
91
+ tests/test_footer_presence.py
92
+ tests/test_footer_render.py
93
+ tests/test_github_token.py
94
+ tests/test_install_script.py
95
+ tests/test_language_switch.py
96
+ tests/test_lcd_smbus2.py
97
+ tests/test_localhost_admin_backend.py
98
+ tests/test_model_verbose_name_capitalization.py
99
+ tests/test_notifications_fallback.py
100
+ tests/test_notify_command.py
101
+ tests/test_odoo_profile.py
102
+ tests/test_odoo_profile_admin.py
103
+ tests/test_offline.py
104
+ tests/test_package_release_admin_actions.py
105
+ tests/test_pypi_token.py
106
+ tests/test_readme_language.py
107
+ tests/test_reference_qr_code.py
108
+ tests/test_reference_transaction_uuid.py
109
+ tests/test_register_site_apps_command.py
110
+ tests/test_release_fixture_cleanup.py
111
+ tests/test_release_logs.py
112
+ tests/test_release_mapping.py
113
+ tests/test_release_progress.py
114
+ tests/test_release_tasks.py
115
+ tests/test_rfid_admin_reference_clear.py
116
+ tests/test_rfid_admin_scan_csrf.py
117
+ tests/test_rfid_background_reader.py
118
+ tests/test_save_as_copy.py
119
+ tests/test_seed_data.py
120
+ tests/test_sigil_resolution.py
121
+ tests/test_urls_autodiscover.py
122
+ tests/test_user_datum_admin.py
123
+ tests/test_vscode_manage.py
@@ -0,0 +1,97 @@
1
+ amqp==5.3.1
2
+ annotated-types==0.7.0
3
+ anyio==4.9.0
4
+ asgiref==3.9.1
5
+ atproto==0.0.61
6
+ attrs==25.3.0
7
+ autobahn==24.4.2
8
+ Automat==25.4.16
9
+ billiard==4.2.1
10
+ bleach==6.2.0
11
+ celery==5.5.3
12
+ certifi==2025.7.14
13
+ cffi==1.17.1
14
+ channels==4.1.0
15
+ charset-normalizer==3.4.2
16
+ click==8.2.1
17
+ click-didyoumean==0.3.1
18
+ click-plugins==1.1.1.2
19
+ click-repl==0.3.0
20
+ colorama==0.4.6
21
+ constantly==23.10.4
22
+ cron-descriptor==1.4.5
23
+ cryptography==45.0.5
24
+ daphne==4.2.1
25
+ diff-match-patch==20241021
26
+ Django==5.2.4
27
+ django-celery-beat==2.8.1
28
+ django-debug-toolbar==6.0.0
29
+ django-import-export==4.3.9
30
+ django-object-actions==5.0.0
31
+ django-post_office==3.10.1
32
+ django-timezone-field==7.1
33
+ dnspython==2.7.0
34
+ docutils==0.22
35
+ h11==0.16.0
36
+ httpcore==1.0.9
37
+ httpx==0.28.1
38
+ hyperlink==21.0.0
39
+ idna==3.10
40
+ incremental==24.7.2
41
+ kombu==5.5.4
42
+ libipld==3.1.1
43
+ Markdown==3.8.2
44
+ outcome==1.3.0.post0
45
+ packaging==25.0
46
+ pillow==11.3.0
47
+ prompt_toolkit==3.0.51
48
+ psycopg==3.2.9
49
+ psycopg-binary==3.2.9
50
+ pyasn1==0.6.1
51
+ pyasn1_modules==0.4.2
52
+ pycparser==2.22
53
+ pydantic==2.11.7
54
+ pydantic_core==2.33.2
55
+ pyOpenSSL==25.1.0
56
+ pyperclip==1.9.0
57
+ PySocks==1.7.1
58
+ python-crontab==3.3.0
59
+ python-dateutil==2.9.0.post0
60
+ python-dotenv==1.1.1
61
+ qrcode==8.2
62
+ redis==5.0.8
63
+ requests==2.32.4
64
+ selenium==4.34.2
65
+ service-identity==24.2.0
66
+ setuptools==80.9.0
67
+ six==1.17.0
68
+ smbus2==0.5.0
69
+ sniffio==1.3.1
70
+ sortedcontainers==2.4.0
71
+ sqlparse==0.5.3
72
+ tablib==3.8.0
73
+ tinycss2==1.4.0
74
+ toml==0.10.2
75
+ trio==0.30.0
76
+ trio-websocket==0.12.2
77
+ Twisted==25.5.0
78
+ twine==6.1.0
79
+ txaio==25.6.1
80
+ typing-inspection==0.4.1
81
+ typing_extensions==4.14.1
82
+ tzdata==2025.2
83
+ urllib3==2.5.0
84
+ vine==5.1.0
85
+ wcwidth==0.2.13
86
+ webencodings==0.5.1
87
+ websocket-client==1.8.0
88
+ websockets==13.1
89
+ wsproto==1.2.0
90
+ zope.interface==7.2
91
+
92
+ [:sys_platform == "linux"]
93
+ gpiozero==2.0.1
94
+ mfrc522==0.0.7
95
+
96
+ [:sys_platform == "win32"]
97
+ plyer==2.1.0
@@ -0,0 +1,5 @@
1
+ config
2
+ core
3
+ nodes
4
+ ocpp
5
+ pages
@@ -0,0 +1,6 @@
1
+ """Config package initialization."""
2
+
3
+ from .celery import app as celery_app
4
+
5
+ __all__ = ("celery_app",)
6
+
@@ -0,0 +1,15 @@
1
+ import threading
2
+ import socket
3
+
4
+ _active = threading.local()
5
+ _active.name = socket.gethostname()
6
+
7
+
8
+ def get_active_app():
9
+ """Return the currently active app name."""
10
+ return getattr(_active, "name", socket.gethostname())
11
+
12
+
13
+ def set_active_app(name: str) -> None:
14
+ """Set the active app name for the current thread."""
15
+ _active.name = name or socket.gethostname()
@@ -0,0 +1,29 @@
1
+ """
2
+ ASGI config for config project.
3
+
4
+ It exposes the ASGI callable as a module-level variable named ``application``.
5
+
6
+ For more information on this file, see
7
+ https://docs.djangoproject.com/en/5.2/howto/deployment/asgi/
8
+ """
9
+
10
+ import os
11
+ from config.loadenv import loadenv
12
+ from channels.auth import AuthMiddlewareStack
13
+ from channels.routing import ProtocolTypeRouter, URLRouter
14
+ from django.core.asgi import get_asgi_application
15
+ import ocpp.routing
16
+
17
+ loadenv()
18
+ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings")
19
+
20
+ django_asgi_app = get_asgi_application()
21
+
22
+ websocket_patterns = ocpp.routing.websocket_urlpatterns
23
+
24
+ application = ProtocolTypeRouter(
25
+ {
26
+ "http": django_asgi_app,
27
+ "websocket": AuthMiddlewareStack(URLRouter(websocket_patterns)),
28
+ }
29
+ )
@@ -0,0 +1,8 @@
1
+ from django.contrib.auth.apps import AuthConfig as DjangoAuthConfig
2
+
3
+
4
+ class AuthConfig(DjangoAuthConfig):
5
+ """Use a shorter label for the auth section in the admin."""
6
+
7
+ verbose_name = "AUTH"
8
+
@@ -0,0 +1,19 @@
1
+ """Celery application configuration."""
2
+
3
+ import os
4
+
5
+ from celery import Celery
6
+
7
+
8
+ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings")
9
+
10
+ app = Celery("config")
11
+ app.config_from_object("django.conf:settings", namespace="CELERY")
12
+ app.autodiscover_tasks()
13
+
14
+
15
+ @app.task(bind=True)
16
+ def debug_task(self): # pragma: no cover - debug helper
17
+ """A simple debug task."""
18
+ print(f"Request: {self.request!r}")
19
+
@@ -0,0 +1,68 @@
1
+ import socket
2
+
3
+ from django.contrib.sites.models import Site
4
+ from django.http import HttpRequest
5
+ from django.conf import settings
6
+
7
+
8
+ def site_and_node(request: HttpRequest):
9
+ """Provide current Site and Node based on request host.
10
+
11
+ Returns a dict with keys ``badge_site`` and ``badge_node``.
12
+ ``badge_site`` is a ``Site`` instance or ``None`` if no match.
13
+ ``badge_node`` is a ``Node`` instance or ``None`` if no match.
14
+ ``badge_site_color`` and ``badge_node_color`` provide the configured colors.
15
+ """
16
+ host = request.get_host().split(':')[0]
17
+ site = Site.objects.filter(domain__iexact=host).first()
18
+
19
+ node = None
20
+ try:
21
+ from nodes.models import Node
22
+
23
+ node = Node.get_local()
24
+ if not node:
25
+ hostname = socket.gethostname()
26
+ try:
27
+ addresses = socket.gethostbyname_ex(hostname)[2]
28
+ except socket.gaierror:
29
+ addresses = []
30
+
31
+ node = Node.objects.filter(hostname__iexact=hostname).first()
32
+ if not node:
33
+ for addr in addresses:
34
+ node = Node.objects.filter(address=addr).first()
35
+ if node:
36
+ break
37
+ if not node:
38
+ node = (
39
+ Node.objects.filter(hostname__iexact=host).first()
40
+ or Node.objects.filter(address=host).first()
41
+ )
42
+ except Exception:
43
+ node = None
44
+
45
+ site_color = "#28a745"
46
+ if site:
47
+ try:
48
+ site_color = site.badge.badge_color
49
+ except Exception:
50
+ pass
51
+
52
+ node_color = "#28a745"
53
+ if node:
54
+ node_color = node.badge_color
55
+
56
+ site_name = site.name if site else ""
57
+ node_role_name = node.role.name if node and node.role else ""
58
+ return {
59
+ "badge_site": site,
60
+ "badge_node": node,
61
+ # Public views fall back to the node role when the site name is blank.
62
+ "badge_site_name": site_name or node_role_name,
63
+ # Admin site badge uses the site display name if set, otherwise the domain.
64
+ "badge_admin_site_name": site_name or (site.domain if site else ""),
65
+ "badge_site_color": site_color,
66
+ "badge_node_color": node_color,
67
+ "TIME_ZONE": settings.TIME_ZONE,
68
+ }
@@ -0,0 +1,11 @@
1
+ from pathlib import Path
2
+ from dotenv import load_dotenv
3
+
4
+
5
+ BASE_DIR = Path(__file__).resolve().parent.parent
6
+
7
+
8
+ def loadenv() -> None:
9
+ """Load all .env files from the repository root."""
10
+ for env_file in sorted(BASE_DIR.glob("*.env")):
11
+ load_dotenv(env_file, override=False)