arthexis 0.1.10__py3-none-any.whl → 0.1.11__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.

@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: arthexis
3
- Version: 0.1.10
3
+ Version: 0.1.11
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)](https://raw.githubusercontent.com/arthexis/arthexis/main/ocpp_coverage.svg)
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.
@@ -1,95 +1,99 @@
1
- arthexis-0.1.10.dist-info/licenses/LICENSE,sha256=IwGE9guuL-ryRPEKi6wFPI_zOhg7zDZbTYuHbSt_SAk,35823
1
+ arthexis-0.1.11.dist-info/licenses/LICENSE,sha256=IwGE9guuL-ryRPEKi6wFPI_zOhg7zDZbTYuHbSt_SAk,35823
2
2
  config/__init__.py,sha256=8_b7rx_-Xcuzu3Z7mSR94q3PAhjyYqLFQi3IOEz6hcI,108
3
3
  config/active_app.py,sha256=MET_G7oHL7GkoSo3VkkMzymM-PwsSZazMLZxpgjFLTo,388
4
4
  config/asgi.py,sha256=n09URedOmQ_59II3UCl3iodGSDWOuN_A8DFyfLjuylA,803
5
5
  config/auth_app.py,sha256=2NkC_iYQxnpbv0gYxW4xp5DgQtdkVLpa-JzAF-638ZE,205
6
6
  config/celery.py,sha256=qRTHgNYfT2OyIz4cW49YiiKgVgzLs2mSfAEQBgso0M4,743
7
- config/context_processors.py,sha256=Iyr_eGoBZuyfxikU7RxQS3DdMI-wudCpPiHttD9Sd_o,2341
7
+ config/context_processors.py,sha256=bjLSqbz7Qw6knPosIc4KNFEl5HsJHOe23htoNsul40E,2404
8
8
  config/horologia_app.py,sha256=u1hTYcEmIqh82Gt5YNPvR5ta2MnVatELvD9ByFrCH1A,194
9
9
  config/loadenv.py,sha256=bhFbHTbRJSkSwrFk3UInKEKQ8ZY-poatOGi7rC57YAI,298
10
10
  config/logging.py,sha256=334jADN4dM5GNHaCWlYPOKYa5BhfxbsuejH_QDALG6g,1793
11
11
  config/middleware.py,sha256=EvraDumepnKwCDswHGXb1mK7vud_dEEoZ4eh0IQ7fhQ,744
12
12
  config/offline.py,sha256=mhQjCUzdOwSzZ6oLgPDJR48xaPIDzOi34ARUEz43seE,1431
13
- config/settings.py,sha256=TQI_hBt0XhDnggDcMlLu8R_5xsSP04keONR2e8Udo30,21764
14
- config/urls.py,sha256=-ehzyYSbOTWC_QOtgxNCPMnjJZJNRoGn8Ww7-t2D9Do,5143
13
+ config/settings.py,sha256=pJzArbxvM6Imyn4gs1YRn1WP3GaZThXFJM8ZxAAmNzg,22548
14
+ config/urls.py,sha256=MmbES50lTHyMZ6risgXAGfevncN7j4HC74jR4PX_5xY,5228
15
15
  config/wsgi.py,sha256=Fu-ONO2SgYeU6rhmy909P-uLX-n8ALJQObdm9MHPS-k,450
16
16
  core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
- core/admin.py,sha256=f61hqWOI1RCydHJQ9XGO9ULFLd7YcPSfsnZvovcCGgk,87335
17
+ core/admin.py,sha256=MKubxItiTTtEOo2Lh8CqUvQ3KLBa80e5C5Y0gsMqhe4,93074
18
18
  core/admin_history.py,sha256=NIDWkosJoHMaucBvUjq8VmmL-0e8ngJ4l4XA89d4jwQ,1833
19
19
  core/admindocs.py,sha256=GufdugiNEG87xGSDYVq4CBMhGRubsQCzgz-FqDIqzpM,5367
20
- core/apps.py,sha256=gg8wxmrG7455a2i6xITO-akOc5daG87HJ3hhEseFcgo,9263
20
+ core/apps.py,sha256=qOKq5hB4FSRb85I3Sv3OjZzhVkn7xONix65r1qMg3HM,10312
21
21
  core/auto_upgrade.py,sha256=BkoE7rJuYAmwoMux22NqujWZYjYXtN40GBloC0sNMY4,1799
22
- core/backends.py,sha256=y7ywo9EliuHItP-cOe_lIn0R7PpgcSq92PZVn_XSW3w,6936
22
+ core/backends.py,sha256=VsZZwskII6QLnxP6Ff593V7o9lqXXfN2_bIfZXrvjyI,8222
23
23
  core/entity.py,sha256=dkPywTVk981fV8bOEoZw-1SMrdh8T0jVAUZnRxg3dDg,4505
24
- core/environment.py,sha256=QcOshpWNG0l_agW-b9efNvVFKqdatj6sUK8FT6p92gU,1238
24
+ core/environment.py,sha256=egNX3vP9xRJt0dqxNZFXi25ZMhe3IZH3Vjne1_k7hxo,1645
25
25
  core/fields.py,sha256=4nJ_tngso8NHs6HBl8nn5PWvbcOiuAgkoM6hixrFm64,5580
26
26
  core/github_helper.py,sha256=k9LmxL0Ec5MzFwZsbMpWMMJ-5tGMe-5yRoI8V0sbFsw,682
27
27
  core/github_issues.py,sha256=LKqt-Ilx5TRYnx2LXttc54Nvuh3_1VRP0u_M3whe09c,4963
28
28
  core/lcd_screen.py,sha256=mkKtIJjHGDLaV4t80L-JScsZXbLhlYUDknAcvV9Ijr0,2651
29
29
  core/liveupdate.py,sha256=kTgbE2gnU3PPIV-88Bw2swSl1aGp6stSdBYqBFbLvx0,716
30
30
  core/log_paths.py,sha256=6UXYk6QIUmRO3ecFaFH3dgJ_pf4C_wUN6b0JqUhLVBY,3045
31
- core/mailer.py,sha256=ziw6r4AhMcMRMtNOrcqRXimjo17SooaJJ-fkSVfo_aI,2787
31
+ core/mailer.py,sha256=OF3UgrTVs2St60tQG3ORV7_N6AWK6EtuB04KQXDop_Q,2829
32
32
  core/middleware.py,sha256=a4XL0pld4YiG-vanHrzYbJNHv64s75lvmG9inoG1ln0,3479
33
- core/models.py,sha256=iUTgJIBDC1SHqaKtu3AF48YgMg-eCsbF0U79UmNyOSM,82274
33
+ core/models.py,sha256=ZpovGr3Tnyayu0f9Id2F0uYtnVhHo90flMFH9ixjubQ,90459
34
34
  core/notifications.py,sha256=YtNDGxNveZ6t3tlMXJ7wIaZZTWIZfOKy6vN9mXkeYnA,4021
35
35
  core/public_wifi.py,sha256=A08IPJqcdgUKSWbktyqsV4ol8C0uxDxZy1s1ECuPdBE,6526
36
- core/reference_utils.py,sha256=vsjF4XaZAAluVbEu6xqQDR1xtHPConXwu2px-4KlllY,3224
36
+ core/reference_utils.py,sha256=sRkwL68c16neg8EBMeZTVGjXQvVhB1zQqrd3EIsb4nA,3735
37
37
  core/release.py,sha256=thtgbfAnxHlOODM8xUVETgY5aAIbddWan0wW9lKmtQI,11064
38
- core/sigil_builder.py,sha256=NdTqNT8Bdo32Bf2h3ciy48C6zZIIoWTrm8TjzOtlThc,4854
38
+ core/sigil_builder.py,sha256=63KSTh7AohG0szr_amBov0zoZuTE8bWqmgsEfPsZHCg,4992
39
39
  core/sigil_context.py,sha256=8xrGiB2L1dFfSTrVLsFPLKfkhRwCXXZ0-EXvZdPeTMU,459
40
- core/sigil_resolver.py,sha256=kRzkv669R1JggQ7eAXsIfw8kH9wuB8L71pmZYg4vwqs,10108
41
- core/system.py,sha256=26lDZOauEUvsQEq24N_BMMvAINlR85urSHEjX5zm1rI,7461
40
+ core/sigil_resolver.py,sha256=PAGwF3ugsqN85tKyIvT0YCDCM2MU_Mct2mCJz8XY1s4,11413
41
+ core/system.py,sha256=i-35lmzW6JxfwDZSUuDRT0cwPjqbIkWEYR0WVvqfADM,15080
42
42
  core/tasks.py,sha256=hwowcVsbwME-75KN90D2r0kX_YPMZEVevOrrxIxpM34,10595
43
- core/test_system_info.py,sha256=d2_SgIUWwqWibOpesliSC7mzK5IyEN6P-5DZWWGmTwI,2605
44
- core/tests.py,sha256=4dzMoHbhbKLRTfQJMa57s-ldd7mt0kSCfpI2Sj-X7lU,53954
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=A_85lR9Qf5TE9xuCHGuM3l0_0SrH8F1qsi6sf-ip8q4,58690
45
46
  core/tests_liveupdate.py,sha256=D1o2gPopnK7wDCeDQlJ-tfitWh4umZQFRxSTCFY-puc,527
46
47
  core/urls.py,sha256=x-LNCxCgrLINdBsJTUUcAuMS5EK5Sh1ybvsVuUnJfLw,436
47
- core/user_data.py,sha256=69AFm-HKM2SqNs77O-k5vRkWB7u4zrdlUQoUsB1-oPM,20142
48
- core/views.py,sha256=9Fzkvt2O48H4AljFAapdr8Lst9KsAYLmEarcYMQ0bcA,35873
48
+ core/user_data.py,sha256=kOzcWJcR-d05E7QYoNzKqQSm9bnKJvtG6zq0zRf-tDI,21371
49
+ core/views.py,sha256=xnwgWVv3q6SnpYZ4ItIrILmjtD5bKWAsjtUYQ-5vnd0,44773
49
50
  core/widgets.py,sha256=ihah_-NtFJ3oRCS3TdcT6iHCUTlg1tUULJsVCu05C0o,1379
50
51
  core/workgroup_urls.py,sha256=2bC8mOMkxIj04WsNis0Td6AmmJFr6z27Ol5epIvhO28,424
51
52
  core/workgroup_views.py,sha256=pFJ4PIRN3WWpRyombpWDKKteYQYoI7lu7ddSEKojD7I,2983
52
53
  nodes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
54
  nodes/actions.py,sha256=HHnwByTBc3guOORvrKOuvUFID-_BpBq6OENE_PDgk9s,2335
54
- nodes/admin.py,sha256=o0iiNzHE7fNv8bpj7VAdTGboT05hVCCtrTdknAzevZE,16736
55
+ nodes/admin.py,sha256=40YXBolvHjhzZRJM1o4svnIyghMI9KWUDlS-PtKheTc,21483
55
56
  nodes/apps.py,sha256=KijGydsQBS-8Q8uBc0ahDZXSSCMzP3tQcYIEigJxdCE,2077
56
- nodes/backends.py,sha256=dQMbC-T9vSxvXMxssi0Y2ZKmc8LbSM_h4lm3EDbtZeo,5525
57
+ nodes/backends.py,sha256=-g7PIbGtIn_3kGoi2w_mJ6zVjvUKTRRWhHABPnnf29g,6081
58
+ nodes/dns.py,sha256=X8PML9rPR7i6NwCSqqxnlO1qpHHRo8uA-XePDTQZYrY,7251
57
59
  nodes/lcd.py,sha256=7MqS3jV_De2ysSmTtXQfYTWaxdfbmm6YfNdb_7qIVZc,5923
58
- nodes/models.py,sha256=mvryiS3S3ZT0sOpANGJYzA1P3W00kT-InIgXzwFFsao,37629
60
+ nodes/models.py,sha256=D-MPUe672JaF5NUU-ASAes860hJmiHeU5VHUD03Pe-c,46986
59
61
  nodes/tasks.py,sha256=jorbN4h0PqWMBRMFdkGgJtvG8GPFwGr5Hxlm5In3EeY,1568
60
- nodes/tests.py,sha256=1J97W3r12EOpJ8YY-3Ak3mWD0YGwo5zkGjA0heAzdV8,75302
62
+ nodes/tests.py,sha256=4lKlM_uHYKirtLgOne4ygwEDowi2PPl2ZvEtwJzUfhI,86073
61
63
  nodes/urls.py,sha256=20yZDZf4DNgIZ9hQWsUzjp8k5Fryg9ukk761_KGQt9k,548
62
64
  nodes/utils.py,sha256=B9BD3bKBkwDjIqyp0pyjnKQQlRbGRVQndfoaMEJoNDc,2815
63
- nodes/views.py,sha256=qBEu19h64cTyn9YuuL9YRnqymCdZPsmMbjXedjd9fzY,14988
65
+ nodes/views.py,sha256=lrT90AsOXeqpvkZnlCPv78mXILGJ8FwJzgsjU-wAZ4Y,15611
64
66
  ocpp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
65
67
  ocpp/admin.py,sha256=Rw0PinweVSaBjIQIcgj_cgfalNRBHcrAh3JInx8Hn7A,17129
66
68
  ocpp/apps.py,sha256=mCZ5Z0ei7z7c62luIcIhbEuwL1N4czQFSToOkGvRmms,867
67
- ocpp/consumers.py,sha256=xxfQxSeFvP39Mq5N_pWDlWNCSdgMcAeV03oiOhr3SYk,36392
69
+ ocpp/consumers.py,sha256=0kLqiDAt0rsC62s8lmS6mW2Oj-LZuzjs0Pz4ci6L4oQ,36577
68
70
  ocpp/evcs.py,sha256=O53rCHdxKcgPsj7o57rDiNHTVvEii3DTtQ3djWFTohw,34065
69
- ocpp/models.py,sha256=bGzbU68o7-oIKOHvE1_pqj9B-KLDP1mnT-T-wlOsI_4,23801
71
+ ocpp/models.py,sha256=46BYGGX4AhbBigXLV3PWLKP043JF96Wolho1q-ZPoa8,23929
72
+ ocpp/reference_utils.py,sha256=sTgbXfmz00f23LBBkpO-sBGoJf1qaEshHeSofLReYCc,1114
70
73
  ocpp/routing.py,sha256=g9vPnLw-D1N8L_mW0_oCe-nTDibjC0Et-SFxe8NFAOI,308
71
74
  ocpp/simulator.py,sha256=es6SJNzKUwLwrLy-zDdRu__n34V2RZSQRb8SeZHh4Fw,15636
72
75
  ocpp/store.py,sha256=FyyZW2YKTWleuNdHTo_RsUO2InZZJhvMYyuZmLgQZe4,14051
73
76
  ocpp/tasks.py,sha256=cOcJBshckFKs8GnACvmYZUBG116amtLRAzEP-JNqlZ0,905
74
77
  ocpp/test_export_import.py,sha256=TK1__E4K5WrLYPIx-1iJWoIhuRCnOtXc2cYEpGigd3U,4660
75
- ocpp/test_rfid.py,sha256=1Xw54WNLzIv4IvvKbQEAs3jtdcg5sTqQBLJK9ZzCqwE,19301
76
- ocpp/tests.py,sha256=-wjEccNB2zBGiOd9WNXzh_8wlBdIcnfV60gmT8Eimng,106222
78
+ ocpp/test_rfid.py,sha256=hX8VZ2HRyBGjtQLClZ1gy28dOj25RT2r9eK3l9XkmJg,25877
79
+ ocpp/tests.py,sha256=CcTn-bRDsb78NbK2hbH66TnlUwOno8y7ug0u8bgIz9k,107230
77
80
  ocpp/transactions_io.py,sha256=OvRynP3DeC9ZpHD3Ez-0YPNPJXFcdSOSKg0nRrwzBJ0,6507
78
81
  ocpp/urls.py,sha256=jl6AQLtmLMvrNXP3dQKgPe9Kvaul4oaYd80DskpzVBc,1750
79
- ocpp/views.py,sha256=QlpP8gIXWHqm0pAhQKzlDUmRH2-cTJnJPELuRxV78dw,36781
82
+ ocpp/views.py,sha256=3E6hJ0Tqr-_KRjvB7cunEsjtNI8Y9XzktPDhaAlIM7o,37166
80
83
  pages/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
- pages/admin.py,sha256=IdaAibuYJbRMuxw9vniTcuToGCaRFJewwXQ2XQ-1384,12476
84
+ pages/admin.py,sha256=JcwBwtQD8E2XKhPpt6bfznW3cU18XZyWvp5B8Zlr0eQ,12772
82
85
  pages/apps.py,sha256=mfCxegmnRqKcszyEwpQhZpW9JWOuEYdVereU_w49BXg,298
83
86
  pages/checks.py,sha256=an-MlMCIG-FSKmdgOhYV0VOoB_wDQD7dxKD03Hjrzts,1567
84
- pages/context_processors.py,sha256=VkApl_Krku1k2CTDt9Xw7OlqF7SN8reLEo9kF7KKxiU,3592
87
+ pages/context_processors.py,sha256=iNSTFYFJsrhj0DjsB3ixVNDZw7nrowlnZAcCDyR4NS4,3697
88
+ pages/defaults.py,sha256=rF_V5oD5JQX1tMxdMs_rCsS21Vn_NZpTESahzLNTPws,595
85
89
  pages/forms.py,sha256=NuG7ONP1HYY6O5gRoQaRSwSRchcSonRm3rulsqGSqvY,5081
86
90
  pages/middleware.py,sha256=fUdAscLa6h2EqJTFUjhVijfSf82gBfm6XUZTVygWAnk,5227
87
- pages/models.py,sha256=VBGpZVQrOHR6ShvqY5MT_Um8rVUktbKMPnq9KJCsTRo,8375
88
- pages/tests.py,sha256=zVdoRVu4IE7go5d7Xd7eceyqQitstwCQ0S7OIma4qhc,73823
89
- pages/urls.py,sha256=wFHov2KAW4vKPScyPpMY9d6rOrKyJHFbOMc9y7L4gEQ,777
91
+ pages/models.py,sha256=mSlw5JTgh2s_SsFzrNgq48BOhX8uc6mjZFy-kYXUjMo,9955
92
+ pages/tests.py,sha256=6WXtb2p301tqXPT_327Y8Zw5uAsqp5hREh6nF8wWa-o,74552
93
+ pages/urls.py,sha256=hvbdrMDc735CFwCbCU96t80IY9jDpMTpI0zQhoaxL0M,981
90
94
  pages/utils.py,sha256=7kik1W0Gk6SFxYGhg6shfI2W9Xdcv1sCpkRCQ883a88,311
91
- pages/views.py,sha256=vebvTOX3MCCugUsoArqJJ0VDIJJpAjPvJuPQPiLt9p0,38810
92
- arthexis-0.1.10.dist-info/METADATA,sha256=UBWs7YFz5bZxreIVPf6ugBOGp3KDtvF7iwSJVtKpSo0,9800
93
- arthexis-0.1.10.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
94
- arthexis-0.1.10.dist-info/top_level.txt,sha256=J2a2q8_BWrCZ8H2WFUNMBfO2jz8j2gax6zZh-_1QDac,29
95
- arthexis-0.1.10.dist-info/RECORD,,
95
+ pages/views.py,sha256=X_ZoJH2DEQp8xUZMtZotTxnslABwsmFKQzYfWopktZM,41135
96
+ arthexis-0.1.11.dist-info/METADATA,sha256=uA-HTbP7vjQzwm9FtJjxgl28g8MszSr7ntnxH9MyVlM,10175
97
+ arthexis-0.1.11.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
98
+ arthexis-0.1.11.dist-info/top_level.txt,sha256=J2a2q8_BWrCZ8H2WFUNMBfO2jz8j2gax6zZh-_1QDac,29
99
+ arthexis-0.1.11.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
 
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)