arthexis 0.1.10__py3-none-any.whl → 0.1.12__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (54) hide show
  1. {arthexis-0.1.10.dist-info → arthexis-0.1.12.dist-info}/METADATA +36 -26
  2. arthexis-0.1.12.dist-info/RECORD +102 -0
  3. config/context_processors.py +1 -0
  4. config/settings.py +31 -5
  5. config/urls.py +5 -4
  6. core/admin.py +430 -90
  7. core/apps.py +48 -2
  8. core/backends.py +38 -0
  9. core/environment.py +23 -5
  10. core/mailer.py +3 -1
  11. core/models.py +303 -31
  12. core/reference_utils.py +20 -9
  13. core/release.py +4 -0
  14. core/sigil_builder.py +7 -2
  15. core/sigil_resolver.py +35 -4
  16. core/system.py +250 -1
  17. core/tasks.py +92 -40
  18. core/temp_passwords.py +181 -0
  19. core/test_system_info.py +62 -2
  20. core/tests.py +169 -3
  21. core/user_data.py +51 -8
  22. core/views.py +371 -20
  23. nodes/admin.py +453 -8
  24. nodes/backends.py +21 -6
  25. nodes/dns.py +203 -0
  26. nodes/feature_checks.py +133 -0
  27. nodes/models.py +374 -31
  28. nodes/reports.py +411 -0
  29. nodes/tests.py +677 -38
  30. nodes/utils.py +32 -0
  31. nodes/views.py +14 -0
  32. ocpp/admin.py +278 -15
  33. ocpp/consumers.py +517 -16
  34. ocpp/evcs_discovery.py +158 -0
  35. ocpp/models.py +237 -4
  36. ocpp/reference_utils.py +42 -0
  37. ocpp/simulator.py +321 -22
  38. ocpp/store.py +110 -2
  39. ocpp/test_rfid.py +169 -7
  40. ocpp/tests.py +819 -6
  41. ocpp/transactions_io.py +17 -3
  42. ocpp/views.py +233 -19
  43. pages/admin.py +144 -4
  44. pages/context_processors.py +21 -7
  45. pages/defaults.py +13 -0
  46. pages/forms.py +38 -0
  47. pages/models.py +189 -15
  48. pages/tests.py +281 -8
  49. pages/urls.py +4 -0
  50. pages/views.py +137 -21
  51. arthexis-0.1.10.dist-info/RECORD +0 -95
  52. {arthexis-0.1.10.dist-info → arthexis-0.1.12.dist-info}/WHEEL +0 -0
  53. {arthexis-0.1.10.dist-info → arthexis-0.1.12.dist-info}/licenses/LICENSE +0 -0
  54. {arthexis-0.1.10.dist-info → arthexis-0.1.12.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: arthexis
3
- Version: 0.1.10
3
+ Version: 0.1.12
4
4
  Summary: Django-based MESH system
5
5
  Author-email: "Rafael J. Guillén-Osorio" <tecnologia@gelectriic.com>
6
6
  License-Expression: GPL-3.0-only
@@ -58,6 +58,7 @@ Requires-Dist: incremental==24.7.2
58
58
  Requires-Dist: kombu==5.5.4
59
59
  Requires-Dist: libipld==3.1.1
60
60
  Requires-Dist: Markdown==3.8.2
61
+ Requires-Dist: mdx_truly_sane_lists==1.3
61
62
  Requires-Dist: mcp==1.14.0
62
63
  Requires-Dist: mfrc522==0.0.7; sys_platform == "linux"
63
64
  Requires-Dist: outcome==1.3.0.post0
@@ -114,25 +115,34 @@ Dynamic: license-file
114
115
 
115
116
  # Arthexis Constellation
116
117
 
117
- [![Coverage](https://raw.githubusercontent.com/arthexis/arthexis/main/coverage.svg)](https://github.com/arthexis/arthexis/actions/workflows/coverage.yml)
118
+ [![Coverage](https://raw.githubusercontent.com/arthexis/arthexis/main/coverage.svg)](https://github.com/arthexis/arthexis/actions/workflows/coverage.yml) [![OCPP 1.6 Coverage](https://raw.githubusercontent.com/arthexis/arthexis/main/ocpp_coverage.svg)](docs/development/ocpp-user-manual.md)
118
119
 
119
120
  ## Purpose
120
121
 
121
122
  Arthexis Constellation is a [narrative-driven](https://en.wikipedia.org/wiki/Narrative) [Django](https://www.djangoproject.com/)-based [software suite](https://en.wikipedia.org/wiki/Software_suite) that centralizes tools for managing [electric vehicle charging infrastructure](https://en.wikipedia.org/wiki/Charging_station) and orchestrating [energy](https://en.wikipedia.org/wiki/Energy)-related [products](https://en.wikipedia.org/wiki/Product_(business)) and [services](https://en.wikipedia.org/wiki/Service_(economics)).
122
123
 
123
- ## Features
124
+ ## Current Features
124
125
 
125
126
  - Compatible with the [Open Charge Point Protocol (OCPP) 1.6](https://www.openchargealliance.org/protocols/ocpp-16/) central system, handling:
126
- - Lifecycle & sessions: BootNotification, Heartbeat, StatusNotification, StartTransaction, StopTransaction
127
- - Access & metering: Authorize, MeterValues
128
- - Maintenance & firmware: DiagnosticsStatusNotification, FirmwareStatusNotification
127
+ - Lifecycle & sessions
128
+ - `BootNotification`
129
+ - `Heartbeat`
130
+ - `StatusNotification`
131
+ - `StartTransaction`
132
+ - `StopTransaction`
133
+ - Access & metering
134
+ - `Authorize`
135
+ - `MeterValues`
136
+ - Maintenance & firmware
137
+ - `DiagnosticsStatusNotification`
138
+ - `FirmwareStatusNotification`
129
139
  - [API](https://en.wikipedia.org/wiki/API) integration with [Odoo](https://www.odoo.com/), syncing:
130
140
  - Employee credentials via `res.users`
131
141
  - Product catalog lookups via `product.product`
132
142
  - Runs on [Windows 11](https://www.microsoft.com/windows/windows-11) and [Ubuntu 22.04 LTS](https://releases.ubuntu.com/22.04/)
133
143
  - Tested for the [Raspberry Pi 4 Model B](https://www.raspberrypi.com/products/raspberry-pi-4-model-b/)
134
144
 
135
- Project under active development.
145
+ Project under rapid active and open development.
136
146
 
137
147
  ## Role Architecture
138
148
 
@@ -174,28 +184,28 @@ Arthexis Constellation ships in four node roles tailored to different deployment
174
184
  ### 2. Start and stop
175
185
  Terminal nodes can start directly with the scripts below without installing; Control, Satellite, and Constellation roles require installation first. Both approaches listen on [`http://localhost:8000/`](http://localhost:8000/) by default.
176
186
 
177
- **[VS Code](https://code.visualstudio.com/)**
178
- - Open the folder and go to the **Run and Debug** panel (`Ctrl+Shift+D`).
179
- - Select the **Run Server** (or **Debug Server**) configuration.
180
- - Press the green start button. Stop the server with the red square button (`Shift+F5`).
187
+ - **[VS Code](https://code.visualstudio.com/)**
188
+ - Open the folder and go to the **Run and Debug** panel (`Ctrl+Shift+D`).
189
+ - Select the **Run Server** (or **Debug Server**) configuration.
190
+ - Press the green start button. Stop the server with the red square button (`Shift+F5`).
181
191
 
182
- **[Shell](https://en.wikipedia.org/wiki/Shell_(computing))**
183
- - Linux: run [`./start.sh`](start.sh) and stop with [`./stop.sh`](stop.sh).
184
- - Windows: run [`start.bat`](start.bat) and stop with `Ctrl+C`.
192
+ - **[Shell](https://en.wikipedia.org/wiki/Shell_(computing))**
193
+ - Linux: run [`./start.sh`](start.sh) and stop with [`./stop.sh`](stop.sh).
194
+ - Windows: run [`start.bat`](start.bat) and stop with `Ctrl+C`.
185
195
 
186
196
  ### 3. Install and upgrade
187
- **Linux:** run [`./install.sh`](install.sh) with a node role flag:
188
- - `--terminal` – default when unspecified and recommended if you're unsure. Terminal nodes can also use the start/stop scripts above without installing.
189
- - `--control` – prepares the single-device testing appliance.
190
- - `--satellite` – configures the edge data acquisition node.
191
- - `--constellation` – enables the multi-user orchestration stack.
192
- Use `./install.sh --help` to list every available flag if you need to customize the node beyond the role defaults.
193
-
194
- Upgrade with [`./upgrade.sh`](upgrade.sh).
195
-
196
- **Windows:**
197
- - Run [`install.bat`](install.bat) to install (Terminal role) and [`upgrade.bat`](upgrade.bat) to upgrade.
198
- - Installation is not required to start in Terminal mode (the default).
197
+ - **Linux:**
198
+ - Run [`./install.sh`](install.sh) with a node role flag:
199
+ - `--terminal` – default when unspecified and recommended if you're unsure. Terminal nodes can also use the start/stop scripts above without installing.
200
+ - `--control` – prepares the single-device testing appliance.
201
+ - `--satellite` – configures the edge data acquisition node.
202
+ - `--constellation` enables the multi-user orchestration stack.
203
+ - Use `./install.sh --help` to list every available flag if you need to customize the node beyond the role defaults.
204
+ - Upgrade with [`./upgrade.sh`](upgrade.sh).
205
+
206
+ - **Windows:**
207
+ - Run [`install.bat`](install.bat) to install (Terminal role) and [`upgrade.bat`](upgrade.bat) to upgrade.
208
+ - Installation is not required to start in Terminal mode (the default).
199
209
 
200
210
  ### 4. Administration
201
211
  Visit [`http://localhost:8000/admin/`](http://localhost:8000/admin/) for the [Django admin](https://docs.djangoproject.com/en/stable/ref/contrib/admin/) and [`http://localhost:8000/admindocs/`](http://localhost:8000/admindocs/) for the [admindocs](https://docs.djangoproject.com/en/stable/ref/contrib/admin/admindocs/). Use `--port` with the start scripts or installer when you need to expose a different port.
@@ -0,0 +1,102 @@
1
+ arthexis-0.1.12.dist-info/licenses/LICENSE,sha256=IwGE9guuL-ryRPEKi6wFPI_zOhg7zDZbTYuHbSt_SAk,35823
2
+ config/__init__.py,sha256=8_b7rx_-Xcuzu3Z7mSR94q3PAhjyYqLFQi3IOEz6hcI,108
3
+ config/active_app.py,sha256=MET_G7oHL7GkoSo3VkkMzymM-PwsSZazMLZxpgjFLTo,388
4
+ config/asgi.py,sha256=n09URedOmQ_59II3UCl3iodGSDWOuN_A8DFyfLjuylA,803
5
+ config/auth_app.py,sha256=2NkC_iYQxnpbv0gYxW4xp5DgQtdkVLpa-JzAF-638ZE,205
6
+ config/celery.py,sha256=qRTHgNYfT2OyIz4cW49YiiKgVgzLs2mSfAEQBgso0M4,743
7
+ config/context_processors.py,sha256=bjLSqbz7Qw6knPosIc4KNFEl5HsJHOe23htoNsul40E,2404
8
+ config/horologia_app.py,sha256=u1hTYcEmIqh82Gt5YNPvR5ta2MnVatELvD9ByFrCH1A,194
9
+ config/loadenv.py,sha256=bhFbHTbRJSkSwrFk3UInKEKQ8ZY-poatOGi7rC57YAI,298
10
+ config/logging.py,sha256=334jADN4dM5GNHaCWlYPOKYa5BhfxbsuejH_QDALG6g,1793
11
+ config/middleware.py,sha256=EvraDumepnKwCDswHGXb1mK7vud_dEEoZ4eh0IQ7fhQ,744
12
+ config/offline.py,sha256=mhQjCUzdOwSzZ6oLgPDJR48xaPIDzOi34ARUEz43seE,1431
13
+ config/settings.py,sha256=SVsBKHoGYix3oHKlFAB4zjYRSQ1r-E9NREFYRvmcc1o,22710
14
+ config/urls.py,sha256=MmbES50lTHyMZ6risgXAGfevncN7j4HC74jR4PX_5xY,5228
15
+ config/wsgi.py,sha256=Fu-ONO2SgYeU6rhmy909P-uLX-n8ALJQObdm9MHPS-k,450
16
+ core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
+ core/admin.py,sha256=P7Mbh_POpxrqzLCMf6YH3axhDbJPMQWQyTOKV9Z88UA,101803
18
+ core/admin_history.py,sha256=NIDWkosJoHMaucBvUjq8VmmL-0e8ngJ4l4XA89d4jwQ,1833
19
+ core/admindocs.py,sha256=GufdugiNEG87xGSDYVq4CBMhGRubsQCzgz-FqDIqzpM,5367
20
+ core/apps.py,sha256=Kyv7vnYPBWDg21uYyUo1aOki0Rb5zC3_3LRJTgEHE3s,11236
21
+ core/auto_upgrade.py,sha256=BkoE7rJuYAmwoMux22NqujWZYjYXtN40GBloC0sNMY4,1799
22
+ core/backends.py,sha256=VsZZwskII6QLnxP6Ff593V7o9lqXXfN2_bIfZXrvjyI,8222
23
+ core/entity.py,sha256=dkPywTVk981fV8bOEoZw-1SMrdh8T0jVAUZnRxg3dDg,4505
24
+ core/environment.py,sha256=egNX3vP9xRJt0dqxNZFXi25ZMhe3IZH3Vjne1_k7hxo,1645
25
+ core/fields.py,sha256=4nJ_tngso8NHs6HBl8nn5PWvbcOiuAgkoM6hixrFm64,5580
26
+ core/github_helper.py,sha256=k9LmxL0Ec5MzFwZsbMpWMMJ-5tGMe-5yRoI8V0sbFsw,682
27
+ core/github_issues.py,sha256=LKqt-Ilx5TRYnx2LXttc54Nvuh3_1VRP0u_M3whe09c,4963
28
+ core/lcd_screen.py,sha256=mkKtIJjHGDLaV4t80L-JScsZXbLhlYUDknAcvV9Ijr0,2651
29
+ core/liveupdate.py,sha256=kTgbE2gnU3PPIV-88Bw2swSl1aGp6stSdBYqBFbLvx0,716
30
+ core/log_paths.py,sha256=6UXYk6QIUmRO3ecFaFH3dgJ_pf4C_wUN6b0JqUhLVBY,3045
31
+ core/mailer.py,sha256=OF3UgrTVs2St60tQG3ORV7_N6AWK6EtuB04KQXDop_Q,2829
32
+ core/middleware.py,sha256=a4XL0pld4YiG-vanHrzYbJNHv64s75lvmG9inoG1ln0,3479
33
+ core/models.py,sha256=t38b5raQFARB8MsjFkWm-vng65ITX3Ogtb_HuYZ3vqA,91507
34
+ core/notifications.py,sha256=YtNDGxNveZ6t3tlMXJ7wIaZZTWIZfOKy6vN9mXkeYnA,4021
35
+ core/public_wifi.py,sha256=A08IPJqcdgUKSWbktyqsV4ol8C0uxDxZy1s1ECuPdBE,6526
36
+ core/reference_utils.py,sha256=2AQxtUkEbArieu1FMz3rTTHKPCDTJhHp_7bhzQCkN3U,3735
37
+ core/release.py,sha256=zVDcN2k4NsIydQqSq33jmMdSSYgR-1xocFWBnzaIZhU,11179
38
+ core/sigil_builder.py,sha256=63KSTh7AohG0szr_amBov0zoZuTE8bWqmgsEfPsZHCg,4992
39
+ core/sigil_context.py,sha256=8xrGiB2L1dFfSTrVLsFPLKfkhRwCXXZ0-EXvZdPeTMU,459
40
+ core/sigil_resolver.py,sha256=PAGwF3ugsqN85tKyIvT0YCDCM2MU_Mct2mCJz8XY1s4,11413
41
+ core/system.py,sha256=iH3-Ymonn_wVAvTmg2fJBI81F0nDCcrSJsAwIlD4sR0,15212
42
+ core/tasks.py,sha256=9njUdJUZNtu23XfWhSxk5lX1kKuvckX0qamxlxTHFxA,12328
43
+ core/temp_passwords.py,sha256=Kp4C-y1Hh4GeV1vSOCw3ZyIjcRMts186lUgtEkd3rxY,5452
44
+ core/test_system_info.py,sha256=sHCuo-qyw0BKacbGXFhTWxkuPgywdMGiQ_6YK022n-E,4803
45
+ core/tests.py,sha256=wCzvp3HO2bewvYPN9OstYjqtCLLWhK1msYuZxBg-lQ4,61577
46
+ core/tests_liveupdate.py,sha256=D1o2gPopnK7wDCeDQlJ-tfitWh4umZQFRxSTCFY-puc,527
47
+ core/urls.py,sha256=x-LNCxCgrLINdBsJTUUcAuMS5EK5Sh1ybvsVuUnJfLw,436
48
+ core/user_data.py,sha256=kOzcWJcR-d05E7QYoNzKqQSm9bnKJvtG6zq0zRf-tDI,21371
49
+ core/views.py,sha256=o8gjDuBzo_7YXEdFt4_OJpuz1Zg4Y7srcesNr-DIYYs,49169
50
+ core/widgets.py,sha256=ihah_-NtFJ3oRCS3TdcT6iHCUTlg1tUULJsVCu05C0o,1379
51
+ core/workgroup_urls.py,sha256=2bC8mOMkxIj04WsNis0Td6AmmJFr6z27Ol5epIvhO28,424
52
+ core/workgroup_views.py,sha256=pFJ4PIRN3WWpRyombpWDKKteYQYoI7lu7ddSEKojD7I,2983
53
+ nodes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
+ nodes/actions.py,sha256=HHnwByTBc3guOORvrKOuvUFID-_BpBq6OENE_PDgk9s,2335
55
+ nodes/admin.py,sha256=VhTQawEOFnosSl5cQo_EnXYmeyHBjHCwSS44bMTbaeA,32766
56
+ nodes/apps.py,sha256=KijGydsQBS-8Q8uBc0ahDZXSSCMzP3tQcYIEigJxdCE,2077
57
+ nodes/backends.py,sha256=-g7PIbGtIn_3kGoi2w_mJ6zVjvUKTRRWhHABPnnf29g,6081
58
+ nodes/dns.py,sha256=X8PML9rPR7i6NwCSqqxnlO1qpHHRo8uA-XePDTQZYrY,7251
59
+ nodes/feature_checks.py,sha256=ZK9PufvF2pFWHUm4khg8lfHVNncA6zrMBxu-WZEw7-E,4129
60
+ nodes/lcd.py,sha256=7MqS3jV_De2ysSmTtXQfYTWaxdfbmm6YfNdb_7qIVZc,5923
61
+ nodes/models.py,sha256=aF_Bhbi54H2A3HuQiwsvTEwk6JAsImJjdAdL8OcHeTg,49040
62
+ nodes/reports.py,sha256=pQwwTa5E-JhUwQIbKKQvgD_Cw9556CH0ieRgRjBMnMQ,12470
63
+ nodes/tasks.py,sha256=jorbN4h0PqWMBRMFdkGgJtvG8GPFwGr5Hxlm5In3EeY,1568
64
+ nodes/tests.py,sha256=28oh6oAINpq8a-EknsB-GKU-4RYfnNSdedqV411W5Jg,100131
65
+ nodes/urls.py,sha256=20yZDZf4DNgIZ9hQWsUzjp8k5Fryg9ukk761_KGQt9k,548
66
+ nodes/utils.py,sha256=h3qVmCBBLyrh06FmDldprxfDQG7dgLw82Tf5PrU-5Qc,4120
67
+ nodes/views.py,sha256=lrT90AsOXeqpvkZnlCPv78mXILGJ8FwJzgsjU-wAZ4Y,15611
68
+ ocpp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
69
+ ocpp/admin.py,sha256=LUJw7fk5q336oAoftfGHs5_pbvEozjMPF69-WCTlAiM,26675
70
+ ocpp/apps.py,sha256=mCZ5Z0ei7z7c62luIcIhbEuwL1N4czQFSToOkGvRmms,867
71
+ ocpp/consumers.py,sha256=drfud7XSCP3zhrAc6ljzyrqM8K6VDPNFRs4Z_NeHfLk,57896
72
+ ocpp/evcs.py,sha256=O53rCHdxKcgPsj7o57rDiNHTVvEii3DTtQ3djWFTohw,34065
73
+ ocpp/evcs_discovery.py,sha256=47pWgqX1_JOT5BGSrIdEyuoPTGWN4b6rNjJr8kWeQCg,4034
74
+ ocpp/models.py,sha256=fZlqwPCq3LNHSE-RnGUqgFWI5FT_QyRandxujbxNZZs,32177
75
+ ocpp/reference_utils.py,sha256=sTgbXfmz00f23LBBkpO-sBGoJf1qaEshHeSofLReYCc,1114
76
+ ocpp/routing.py,sha256=g9vPnLw-D1N8L_mW0_oCe-nTDibjC0Et-SFxe8NFAOI,308
77
+ ocpp/simulator.py,sha256=hFwXuX8SaSJKEXWVWakyBxGa6ZbPvwa0PVTnKrXR1nw,28049
78
+ ocpp/store.py,sha256=OjGWT3WkpoahGpUwn_ZpIOsxgOnryoXXSwPCvFsLkzM,17410
79
+ ocpp/tasks.py,sha256=cOcJBshckFKs8GnACvmYZUBG116amtLRAzEP-JNqlZ0,905
80
+ ocpp/test_export_import.py,sha256=TK1__E4K5WrLYPIx-1iJWoIhuRCnOtXc2cYEpGigd3U,4660
81
+ ocpp/test_rfid.py,sha256=hX8VZ2HRyBGjtQLClZ1gy28dOj25RT2r9eK3l9XkmJg,25877
82
+ ocpp/tests.py,sha256=aQZBGmGzhzMh2GrEsunN50gRKUgtIqdD4Y4NbjsPt7E,138325
83
+ ocpp/transactions_io.py,sha256=sFCJvAU5IqWZ4rLvagy4gdcGVvH2rBZvNCfHTXDYJAs,7044
84
+ ocpp/urls.py,sha256=jl6AQLtmLMvrNXP3dQKgPe9Kvaul4oaYd80DskpzVBc,1750
85
+ ocpp/views.py,sha256=FyLt7_67IeteBDADoRkqO3WJGit9noiMs_5RVapwUfo,45669
86
+ pages/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
87
+ pages/admin.py,sha256=0D2ZGqOhMjk8LfXnPr0g0uMUPJl2qCgvDJz_2IS3WFM,16904
88
+ pages/apps.py,sha256=mfCxegmnRqKcszyEwpQhZpW9JWOuEYdVereU_w49BXg,298
89
+ pages/checks.py,sha256=an-MlMCIG-FSKmdgOhYV0VOoB_wDQD7dxKD03Hjrzts,1567
90
+ pages/context_processors.py,sha256=4lkk2mTzmsOKhDhQanWXuU2bbwow0h-1Zn5GWOrL2z4,4132
91
+ pages/defaults.py,sha256=cOhb5p_SneIsK6Qfn9SV1fyq7L3gDheWYo1xp7SplF8,535
92
+ pages/forms.py,sha256=xwQ1uKqZBrIjn9DJQIqZtn0u_xO46w9vSjKVX9Mt6pc,6349
93
+ pages/middleware.py,sha256=fUdAscLa6h2EqJTFUjhVijfSf82gBfm6XUZTVygWAnk,5227
94
+ pages/models.py,sha256=O4wtjD8jkZlguxEQFcvijSPM55KBjRBdhzvg0FHnxt4,14577
95
+ pages/tests.py,sha256=Pk0waQkWxi-5EZq44XOUGdhvZC1oXh8dy4j0FqRb6ns,84353
96
+ pages/urls.py,sha256=iwe4hvcr_ko-n4h24t6t2882eZp2qyLXeEYkrIahoGU,1067
97
+ pages/utils.py,sha256=7kik1W0Gk6SFxYGhg6shfI2W9Xdcv1sCpkRCQ883a88,311
98
+ pages/views.py,sha256=_7NqHt0omhAge63Fz6ukbbBE06oQzKgVoO5e3WtSMvk,43044
99
+ arthexis-0.1.12.dist-info/METADATA,sha256=nErwfvr1FpIptkmRFT7yLGLigaHdMcXaLL4iFUTEhXc,10137
100
+ arthexis-0.1.12.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
101
+ arthexis-0.1.12.dist-info/top_level.txt,sha256=J2a2q8_BWrCZ8H2WFUNMBfO2jz8j2gax6zZh-_1QDac,29
102
+ arthexis-0.1.12.dist-info/RECORD,,
@@ -64,5 +64,6 @@ def site_and_node(request: HttpRequest):
64
64
  "badge_admin_site_name": site_name or (site.domain if site else ""),
65
65
  "badge_site_color": site_color,
66
66
  "badge_node_color": node_color,
67
+ "current_site_domain": site.domain if site else host,
67
68
  "TIME_ZONE": settings.TIME_ZONE,
68
69
  }
config/settings.py CHANGED
@@ -122,13 +122,27 @@ SECRET_KEY = _load_secret_key()
122
122
 
123
123
  # SECURITY WARNING: don't run with debug turned on in production!
124
124
 
125
- # Enable DEBUG and related tooling when running in Terminal mode.
125
+ # Determine the current node role for role-specific settings while leaving
126
+ # DEBUG control to the environment.
126
127
  NODE_ROLE = os.environ.get("NODE_ROLE")
127
128
  if NODE_ROLE is None:
128
129
  role_lock = BASE_DIR / "locks" / "role.lck"
129
130
  NODE_ROLE = role_lock.read_text().strip() if role_lock.exists() else "Terminal"
130
131
 
131
- DEBUG = NODE_ROLE == "Terminal"
132
+ def _env_bool(name: str, default: bool) -> bool:
133
+ value = os.environ.get(name)
134
+ if value is None:
135
+ return default
136
+
137
+ normalized = value.strip().lower()
138
+ if normalized in {"1", "true", "yes", "on"}:
139
+ return True
140
+ if normalized in {"0", "false", "no", "off"}:
141
+ return False
142
+ return default
143
+
144
+
145
+ DEBUG = _env_bool("DEBUG", False)
132
146
 
133
147
  ALLOWED_HOSTS = [
134
148
  "localhost",
@@ -383,7 +397,6 @@ LOCAL_APPS = [
383
397
  "ocpp",
384
398
  "awg",
385
399
  "pages",
386
- "man",
387
400
  "teams",
388
401
  ]
389
402
 
@@ -519,6 +532,7 @@ AUTH_USER_MODEL = "core.User"
519
532
 
520
533
  # Enable RFID authentication backend and restrict default admin login to localhost
521
534
  AUTHENTICATION_BACKENDS = [
535
+ "core.backends.TempPasswordBackend",
522
536
  "core.backends.LocalhostAdminBackend",
523
537
  "core.backends.TOTPBackend",
524
538
  "core.backends.RFIDBackend",
@@ -624,6 +638,13 @@ USE_TZ = True
624
638
  STATIC_URL = "/static/"
625
639
  STATIC_ROOT = BASE_DIR / "static"
626
640
  STATICFILES_STORAGE = "whitenoise.storage.CompressedManifestStaticFilesStorage"
641
+
642
+ # Allow development and freshly-updated environments to serve assets which have
643
+ # not yet been collected into ``STATIC_ROOT``. Without this setting WhiteNoise
644
+ # only looks for files inside ``STATIC_ROOT`` and dashboards like the public
645
+ # traffic chart fail to load their JavaScript dependencies.
646
+ WHITENOISE_USE_FINDERS = True
647
+ WHITENOISE_AUTOREFRESH = DEBUG
627
648
  MEDIA_URL = "/media/"
628
649
  MEDIA_ROOT = BASE_DIR / "media"
629
650
 
@@ -664,10 +685,15 @@ LOGGING = {
664
685
  "backupCount": 7,
665
686
  "encoding": "utf-8",
666
687
  "formatter": "standard",
667
- }
688
+ },
689
+ "console": {
690
+ "class": "logging.StreamHandler",
691
+ "level": "ERROR",
692
+ "formatter": "standard",
693
+ },
668
694
  },
669
695
  "root": {
670
- "handlers": ["file"],
696
+ "handlers": ["file", "console"],
671
697
  "level": "DEBUG",
672
698
  },
673
699
  }
config/urls.py CHANGED
@@ -12,6 +12,7 @@ from pathlib import Path
12
12
  from django.apps import apps
13
13
  from django.conf import settings
14
14
  from django.conf.urls.static import static
15
+ from django.contrib.staticfiles.urls import staticfiles_urlpatterns
15
16
  from django.contrib import admin
16
17
  from django.urls import include, path
17
18
  import teams.admin # noqa: F401
@@ -25,7 +26,6 @@ from core.admindocs import (
25
26
  ModelGraphIndexView,
26
27
  OrderedModelIndexView,
27
28
  )
28
- from man import views as man_views
29
29
  from pages import views as pages_views
30
30
 
31
31
  admin.site.site_header = _("Constellation")
@@ -72,17 +72,17 @@ def autodiscovered_urlpatterns():
72
72
  urlpatterns = [
73
73
  path(
74
74
  "admin/doc/manuals/",
75
- man_views.admin_manual_list,
75
+ pages_views.admin_manual_list,
76
76
  name="django-admindocs-manuals",
77
77
  ),
78
78
  path(
79
79
  "admin/doc/manuals/<slug:slug>/",
80
- man_views.admin_manual_detail,
80
+ pages_views.admin_manual_detail,
81
81
  name="django-admindocs-manual-detail",
82
82
  ),
83
83
  path(
84
84
  "admin/doc/manuals/<slug:slug>/pdf/",
85
- man_views.manual_pdf,
85
+ pages_views.manual_pdf,
86
86
  name="django-admindocs-manual-pdf",
87
87
  ),
88
88
  path(
@@ -162,4 +162,5 @@ if settings.DEBUG:
162
162
  )
163
163
  ] + urlpatterns
164
164
 
165
+ urlpatterns += staticfiles_urlpatterns()
165
166
  urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)