arthexis 0.1.13__py3-none-any.whl → 0.1.14__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 (107) hide show
  1. {arthexis-0.1.13.dist-info → arthexis-0.1.14.dist-info}/METADATA +222 -221
  2. arthexis-0.1.14.dist-info/RECORD +109 -0
  3. {arthexis-0.1.13.dist-info → arthexis-0.1.14.dist-info}/licenses/LICENSE +674 -674
  4. config/__init__.py +5 -5
  5. config/active_app.py +15 -15
  6. config/asgi.py +43 -43
  7. config/auth_app.py +7 -7
  8. config/celery.py +32 -32
  9. config/context_processors.py +67 -69
  10. config/horologia_app.py +7 -7
  11. config/loadenv.py +11 -11
  12. config/logging.py +59 -48
  13. config/middleware.py +25 -25
  14. config/offline.py +49 -49
  15. config/settings.py +691 -682
  16. config/settings_helpers.py +109 -109
  17. config/urls.py +171 -166
  18. config/wsgi.py +17 -17
  19. core/admin.py +3771 -2809
  20. core/admin_history.py +50 -50
  21. core/admindocs.py +151 -151
  22. core/apps.py +356 -272
  23. core/auto_upgrade.py +57 -57
  24. core/backends.py +265 -236
  25. core/changelog.py +342 -0
  26. core/entity.py +133 -133
  27. core/environment.py +61 -61
  28. core/fields.py +168 -168
  29. core/form_fields.py +75 -75
  30. core/github_helper.py +188 -25
  31. core/github_issues.py +178 -172
  32. core/github_repos.py +72 -0
  33. core/lcd_screen.py +78 -78
  34. core/liveupdate.py +25 -25
  35. core/log_paths.py +100 -100
  36. core/mailer.py +85 -85
  37. core/middleware.py +91 -91
  38. core/models.py +3609 -2795
  39. core/notifications.py +105 -105
  40. core/public_wifi.py +267 -227
  41. core/reference_utils.py +108 -108
  42. core/release.py +721 -368
  43. core/rfid_import_export.py +113 -0
  44. core/sigil_builder.py +149 -149
  45. core/sigil_context.py +20 -20
  46. core/sigil_resolver.py +315 -315
  47. core/system.py +752 -493
  48. core/tasks.py +408 -394
  49. core/temp_passwords.py +181 -181
  50. core/test_system_info.py +186 -139
  51. core/tests.py +2095 -1521
  52. core/tests_liveupdate.py +17 -17
  53. core/urls.py +11 -11
  54. core/user_data.py +641 -633
  55. core/views.py +2175 -1417
  56. core/widgets.py +213 -94
  57. core/workgroup_urls.py +17 -17
  58. core/workgroup_views.py +94 -94
  59. nodes/admin.py +1720 -1161
  60. nodes/apps.py +87 -85
  61. nodes/backends.py +160 -160
  62. nodes/dns.py +203 -203
  63. nodes/feature_checks.py +133 -133
  64. nodes/lcd.py +165 -165
  65. nodes/models.py +1737 -1597
  66. nodes/reports.py +411 -411
  67. nodes/rfid_sync.py +195 -0
  68. nodes/signals.py +18 -0
  69. nodes/tasks.py +46 -46
  70. nodes/tests.py +3810 -3116
  71. nodes/urls.py +15 -14
  72. nodes/utils.py +121 -105
  73. nodes/views.py +683 -619
  74. ocpp/admin.py +948 -948
  75. ocpp/apps.py +25 -25
  76. ocpp/consumers.py +1565 -1459
  77. ocpp/evcs.py +844 -844
  78. ocpp/evcs_discovery.py +158 -158
  79. ocpp/models.py +917 -917
  80. ocpp/reference_utils.py +42 -42
  81. ocpp/routing.py +11 -11
  82. ocpp/simulator.py +745 -745
  83. ocpp/status_display.py +26 -26
  84. ocpp/store.py +601 -541
  85. ocpp/tasks.py +31 -31
  86. ocpp/test_export_import.py +130 -130
  87. ocpp/test_rfid.py +913 -702
  88. ocpp/tests.py +4445 -4094
  89. ocpp/transactions_io.py +189 -189
  90. ocpp/urls.py +50 -50
  91. ocpp/views.py +1479 -1251
  92. pages/admin.py +708 -539
  93. pages/apps.py +10 -10
  94. pages/checks.py +40 -40
  95. pages/context_processors.py +127 -119
  96. pages/defaults.py +13 -13
  97. pages/forms.py +198 -198
  98. pages/middleware.py +205 -153
  99. pages/models.py +607 -426
  100. pages/tests.py +2612 -2200
  101. pages/urls.py +25 -25
  102. pages/utils.py +12 -12
  103. pages/views.py +1165 -1128
  104. arthexis-0.1.13.dist-info/RECORD +0 -105
  105. nodes/actions.py +0 -70
  106. {arthexis-0.1.13.dist-info → arthexis-0.1.14.dist-info}/WHEEL +0 -0
  107. {arthexis-0.1.13.dist-info → arthexis-0.1.14.dist-info}/top_level.txt +0 -0
@@ -1,105 +0,0 @@
1
- arthexis-0.1.13.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=P7q9K5M-GTdmQuVEkSDPm89yS93-x7WkwZ6pq1EfoZ4,1339
5
- config/auth_app.py,sha256=2NkC_iYQxnpbv0gYxW4xp5DgQtdkVLpa-JzAF-638ZE,205
6
- config/celery.py,sha256=6BnonLD51aG2tFtjNheYQDKmoEqzhmNLtjcOvgOrvlU,851
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=sdxnJ_F0sp7qrG6vgObdgDem8mVirPBfMumzoTcMCVQ,21782
14
- config/settings_helpers.py,sha256=D5w1GdfO8hjWoIlnDBPLpWgfd-NQQuKNttSrIeBSMek,3236
15
- config/urls.py,sha256=MmbES50lTHyMZ6risgXAGfevncN7j4HC74jR4PX_5xY,5228
16
- config/wsgi.py,sha256=Fu-ONO2SgYeU6rhmy909P-uLX-n8ALJQObdm9MHPS-k,450
17
- core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
- core/admin.py,sha256=sR772Bf28isQvnHRv5vjVi0um4yTzggWMRcjrfA6rI8,103412
19
- core/admin_history.py,sha256=NIDWkosJoHMaucBvUjq8VmmL-0e8ngJ4l4XA89d4jwQ,1833
20
- core/admindocs.py,sha256=GufdugiNEG87xGSDYVq4CBMhGRubsQCzgz-FqDIqzpM,5367
21
- core/apps.py,sha256=Kyv7vnYPBWDg21uYyUo1aOki0Rb5zC3_3LRJTgEHE3s,11236
22
- core/auto_upgrade.py,sha256=UASqknQ8YOPAjMzdyP_f5smzbnw04DjGwqHf-tMmt4I,1772
23
- core/backends.py,sha256=VsZZwskII6QLnxP6Ff593V7o9lqXXfN2_bIfZXrvjyI,8222
24
- core/entity.py,sha256=dkPywTVk981fV8bOEoZw-1SMrdh8T0jVAUZnRxg3dDg,4505
25
- core/environment.py,sha256=egNX3vP9xRJt0dqxNZFXi25ZMhe3IZH3Vjne1_k7hxo,1645
26
- core/fields.py,sha256=4nJ_tngso8NHs6HBl8nn5PWvbcOiuAgkoM6hixrFm64,5580
27
- core/form_fields.py,sha256=vRqHi8yjvDEUhpdwQth9Os4hKMxBcKX4UhcgL6zawW8,2571
28
- core/github_helper.py,sha256=k9LmxL0Ec5MzFwZsbMpWMMJ-5tGMe-5yRoI8V0sbFsw,682
29
- core/github_issues.py,sha256=LKqt-Ilx5TRYnx2LXttc54Nvuh3_1VRP0u_M3whe09c,4963
30
- core/lcd_screen.py,sha256=mkKtIJjHGDLaV4t80L-JScsZXbLhlYUDknAcvV9Ijr0,2651
31
- core/liveupdate.py,sha256=kTgbE2gnU3PPIV-88Bw2swSl1aGp6stSdBYqBFbLvx0,716
32
- core/log_paths.py,sha256=6UXYk6QIUmRO3ecFaFH3dgJ_pf4C_wUN6b0JqUhLVBY,3045
33
- core/mailer.py,sha256=OF3UgrTVs2St60tQG3ORV7_N6AWK6EtuB04KQXDop_Q,2829
34
- core/middleware.py,sha256=a4XL0pld4YiG-vanHrzYbJNHv64s75lvmG9inoG1ln0,3479
35
- core/models.py,sha256=sa06Axm1p7W7EcYqrX0mWemwxhYIhWWjkby-qV-sLbk,96345
36
- core/notifications.py,sha256=YtNDGxNveZ6t3tlMXJ7wIaZZTWIZfOKy6vN9mXkeYnA,4021
37
- core/public_wifi.py,sha256=A08IPJqcdgUKSWbktyqsV4ol8C0uxDxZy1s1ECuPdBE,6526
38
- core/reference_utils.py,sha256=2AQxtUkEbArieu1FMz3rTTHKPCDTJhHp_7bhzQCkN3U,3735
39
- core/release.py,sha256=jZtTNyw3zezUJ6gd9Y7oo4fkyvDasTrkFGGMAufbsH0,11888
40
- core/sigil_builder.py,sha256=63KSTh7AohG0szr_amBov0zoZuTE8bWqmgsEfPsZHCg,4992
41
- core/sigil_context.py,sha256=8xrGiB2L1dFfSTrVLsFPLKfkhRwCXXZ0-EXvZdPeTMU,459
42
- core/sigil_resolver.py,sha256=PAGwF3ugsqN85tKyIvT0YCDCM2MU_Mct2mCJz8XY1s4,11413
43
- core/system.py,sha256=iH3-Ymonn_wVAvTmg2fJBI81F0nDCcrSJsAwIlD4sR0,15212
44
- core/tasks.py,sha256=9njUdJUZNtu23XfWhSxk5lX1kKuvckX0qamxlxTHFxA,12328
45
- core/temp_passwords.py,sha256=Kp4C-y1Hh4GeV1vSOCw3ZyIjcRMts186lUgtEkd3rxY,5452
46
- core/test_system_info.py,sha256=sHCuo-qyw0BKacbGXFhTWxkuPgywdMGiQ_6YK022n-E,4803
47
- core/tests.py,sha256=75znkttcCZ9RCIND1c5JnNfJIU1YrJRtjEj678QcC80,62011
48
- core/tests_liveupdate.py,sha256=D1o2gPopnK7wDCeDQlJ-tfitWh4umZQFRxSTCFY-puc,527
49
- core/urls.py,sha256=x-LNCxCgrLINdBsJTUUcAuMS5EK5Sh1ybvsVuUnJfLw,436
50
- core/user_data.py,sha256=kOzcWJcR-d05E7QYoNzKqQSm9bnKJvtG6zq0zRf-tDI,21371
51
- core/views.py,sha256=LoyNaISnwWUBVpr4zE4FN5c_KjiO3c2rtx_onE2RgIg,50361
52
- core/widgets.py,sha256=B1E7iM1LFATHCK92UqcHV_oUua3Eun5uWibmjc9f7_Q,2845
53
- core/workgroup_urls.py,sha256=2bC8mOMkxIj04WsNis0Td6AmmJFr6z27Ol5epIvhO28,424
54
- core/workgroup_views.py,sha256=pFJ4PIRN3WWpRyombpWDKKteYQYoI7lu7ddSEKojD7I,2983
55
- nodes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
- nodes/actions.py,sha256=HHnwByTBc3guOORvrKOuvUFID-_BpBq6OENE_PDgk9s,2335
57
- nodes/admin.py,sha256=_I9BBMuciFuFd8oLzJZ7y9iB7zzeyjbO0AQ64SgfL2M,42272
58
- nodes/apps.py,sha256=mKeub2f8tukiXbz8cA1xVJM6hnlgce_TGITiQEOqL9A,2716
59
- nodes/backends.py,sha256=-g7PIbGtIn_3kGoi2w_mJ6zVjvUKTRRWhHABPnnf29g,6081
60
- nodes/dns.py,sha256=X8PML9rPR7i6NwCSqqxnlO1qpHHRo8uA-XePDTQZYrY,7251
61
- nodes/feature_checks.py,sha256=ZK9PufvF2pFWHUm4khg8lfHVNncA6zrMBxu-WZEw7-E,4129
62
- nodes/lcd.py,sha256=7MqS3jV_De2ysSmTtXQfYTWaxdfbmm6YfNdb_7qIVZc,5923
63
- nodes/models.py,sha256=s_GdZkWyWySQauVdSytLY9HeqraX80_5Vz-br5bO_GY,55899
64
- nodes/reports.py,sha256=pQwwTa5E-JhUwQIbKKQvgD_Cw9556CH0ieRgRjBMnMQ,12470
65
- nodes/tasks.py,sha256=jorbN4h0PqWMBRMFdkGgJtvG8GPFwGr5Hxlm5In3EeY,1568
66
- nodes/tests.py,sha256=sxXeaaNCE6sn_CQYe7PDrhp0q0yhMRQyOy2blodnbH8,124914
67
- nodes/urls.py,sha256=30rYTwQGOnilucXDf8nf95debxn6aytMQHFo8MRbd2A,620
68
- nodes/utils.py,sha256=h3qVmCBBLyrh06FmDldprxfDQG7dgLw82Tf5PrU-5Qc,4120
69
- nodes/views.py,sha256=trgJaCJ4QZ6I0eWXxzRqqN9WXMfugcPdTyKLiCHa2ZI,21466
70
- ocpp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
71
- ocpp/admin.py,sha256=xXAuC8c5fWCxgUiCnL5RWEEks7fmPLVTkWoqoiP4a-0,32397
72
- ocpp/apps.py,sha256=mCZ5Z0ei7z7c62luIcIhbEuwL1N4czQFSToOkGvRmms,867
73
- ocpp/consumers.py,sha256=NA5IG--kOER2bDkLsa3pygiEtXSuiBXCYU-9nXS5zrg,62584
74
- ocpp/evcs.py,sha256=KrkujSKkhzDJ64_btXQ4Vu7TIZfH_0UHs7Eptny73wg,29727
75
- ocpp/evcs_discovery.py,sha256=47pWgqX1_JOT5BGSrIdEyuoPTGWN4b6rNjJr8kWeQCg,4034
76
- ocpp/models.py,sha256=fhOxKqulTRlvHQ36b5KT5CDnVS9YlTorrQahUQC4gh8,32318
77
- ocpp/reference_utils.py,sha256=sTgbXfmz00f23LBBkpO-sBGoJf1qaEshHeSofLReYCc,1114
78
- ocpp/routing.py,sha256=8hhP8vqAJm279_0MU6P183h61N98cL20BZap4ZrYRT8,449
79
- ocpp/simulator.py,sha256=aQ4u5OLIuicCpV3SMCS6pFI-cU45heO0NqJkvbXyH7o,28761
80
- ocpp/status_display.py,sha256=eR4qNeGhLVt6FO-sRY4kz9eGLtnCtbxDjeR0etZBHk8,965
81
- ocpp/store.py,sha256=OjGWT3WkpoahGpUwn_ZpIOsxgOnryoXXSwPCvFsLkzM,17410
82
- ocpp/tasks.py,sha256=cOcJBshckFKs8GnACvmYZUBG116amtLRAzEP-JNqlZ0,905
83
- ocpp/test_export_import.py,sha256=TK1__E4K5WrLYPIx-1iJWoIhuRCnOtXc2cYEpGigd3U,4660
84
- ocpp/test_rfid.py,sha256=hX8VZ2HRyBGjtQLClZ1gy28dOj25RT2r9eK3l9XkmJg,25877
85
- ocpp/tests.py,sha256=5xH8zY2vD4QJyOsMc1LMDrXXhKVrzFTOVfjRNNxfyLM,163083
86
- ocpp/transactions_io.py,sha256=emiPuIepqOE-IdRE2SA7REJAmF3Yur17m7gzdK4S_wE,7576
87
- ocpp/urls.py,sha256=jl6AQLtmLMvrNXP3dQKgPe9Kvaul4oaYd80DskpzVBc,1750
88
- ocpp/views.py,sha256=OI3NM1oauWIHL_3Czt_Srn322SnVH_wqdcoNwXpidpw,49268
89
- pages/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
90
- pages/admin.py,sha256=KLjrVI4zzENiZA4cDi5jJ79DNnpgfg3jIVRcP5X5umQ,16978
91
- pages/apps.py,sha256=mfCxegmnRqKcszyEwpQhZpW9JWOuEYdVereU_w49BXg,298
92
- pages/checks.py,sha256=an-MlMCIG-FSKmdgOhYV0VOoB_wDQD7dxKD03Hjrzts,1567
93
- pages/context_processors.py,sha256=4lkk2mTzmsOKhDhQanWXuU2bbwow0h-1Zn5GWOrL2z4,4132
94
- pages/defaults.py,sha256=cOhb5p_SneIsK6Qfn9SV1fyq7L3gDheWYo1xp7SplF8,535
95
- pages/forms.py,sha256=63_243YfT8sAW3hrdyNgYhVxlXTAUZeshaLWUlreR1c,7256
96
- pages/middleware.py,sha256=fUdAscLa6h2EqJTFUjhVijfSf82gBfm6XUZTVygWAnk,5227
97
- pages/models.py,sha256=O4wtjD8jkZlguxEQFcvijSPM55KBjRBdhzvg0FHnxt4,14577
98
- pages/tests.py,sha256=T4akrxZv2NPK3X9mguipW7DUn4F7OyKG6DDlRqpJEpI,88701
99
- pages/urls.py,sha256=iwe4hvcr_ko-n4h24t6t2882eZp2qyLXeEYkrIahoGU,1067
100
- pages/utils.py,sha256=7kik1W0Gk6SFxYGhg6shfI2W9Xdcv1sCpkRCQ883a88,311
101
- pages/views.py,sha256=DSzsvHGOVavKU_gDIweHRWQeHiQoe0czkeigZ2a4ge0,43260
102
- arthexis-0.1.13.dist-info/METADATA,sha256=PhW-6uJCu_HAvfQ7saLHifGvvCK2JRO3BSGDapjTat8,10184
103
- arthexis-0.1.13.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
104
- arthexis-0.1.13.dist-info/top_level.txt,sha256=J2a2q8_BWrCZ8H2WFUNMBfO2jz8j2gax6zZh-_1QDac,29
105
- arthexis-0.1.13.dist-info/RECORD,,
nodes/actions.py DELETED
@@ -1,70 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from typing import Dict, Iterable, Optional, Type
4
-
5
- from .models import Node
6
-
7
-
8
- class NodeAction:
9
- """Base class for actions that operate on a :class:`~nodes.models.Node`."""
10
-
11
- #: Human friendly name for this action
12
- display_name: str = ""
13
- #: Short slug used in URLs
14
- slug: str = ""
15
- #: Description of the action
16
- description: str = ""
17
- #: Whether this action supports running on remote nodes
18
- supports_remote: bool = False
19
-
20
- # registry of available actions
21
- registry: Dict[str, Type["NodeAction"]] = {}
22
-
23
- def __init_subclass__(cls, **kwargs):
24
- super().__init_subclass__(**kwargs)
25
- if cls.slug:
26
- key = cls.slug
27
- else:
28
- key = cls.__name__.lower()
29
- cls.slug = key
30
- NodeAction.registry[key] = cls
31
-
32
- @classmethod
33
- def get_actions(cls) -> Iterable[Type["NodeAction"]]:
34
- """Return all registered node actions."""
35
- return cls.registry.values()
36
-
37
- @classmethod
38
- def run(cls, node: Optional[Node] = None, **kwargs):
39
- """Execute this action on ``node``.
40
-
41
- If ``node`` is ``None`` the local node is used. If the target node is
42
- not the local host and ``supports_remote`` is ``False``, a
43
- ``NotImplementedError`` is raised.
44
- """
45
-
46
- if node is None:
47
- node = Node.get_local()
48
- if node is None:
49
- raise ValueError("No local node configured")
50
- if not node.is_local and not cls.supports_remote:
51
- raise NotImplementedError("Remote node actions are not yet implemented")
52
- instance = cls()
53
- return instance.execute(node, **kwargs)
54
-
55
- def execute(self, node: Node, **kwargs): # pragma: no cover - interface
56
- """Perform the action on ``node``."""
57
- raise NotImplementedError
58
-
59
-
60
- class CaptureScreenshotAction(NodeAction):
61
- display_name = "Take Site Screenshot"
62
- slug = "capture-screenshot"
63
-
64
- def execute(self, node: Node, **kwargs): # pragma: no cover - uses selenium
65
- from .utils import capture_screenshot, save_screenshot
66
-
67
- url = f"http://{node.address}:{node.port}"
68
- path = capture_screenshot(url)
69
- save_screenshot(path, node=node, method="NODE_ACTION")
70
- return path