accrete 0.0.26__py3-none-any.whl → 0.0.28__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.
Files changed (32) hide show
  1. accrete/contrib/sequence/migrations/0002_alter_sequence_name.py +18 -0
  2. accrete/contrib/sequence/models.py +1 -1
  3. accrete/contrib/sequence/queries.py +2 -2
  4. accrete/contrib/system_mail/tasks.py +10 -3
  5. accrete/contrib/ui/__init__.py +2 -1
  6. accrete/contrib/ui/components.py +29 -0
  7. accrete/contrib/ui/context.py +16 -11
  8. accrete/contrib/ui/elements.py +0 -0
  9. accrete/contrib/ui/filter.py +24 -0
  10. accrete/contrib/ui/querystring.py +1 -1
  11. accrete/contrib/ui/static/js/filter.js +20 -2
  12. accrete/contrib/ui/templates/ui/detail.html +19 -1
  13. accrete/contrib/ui/templates/ui/layout.html +5 -3
  14. accrete/contrib/ui/templates/ui/list.html +0 -5
  15. accrete/contrib/ui/templates/ui/partials/filter.html +1 -0
  16. accrete/contrib/ui/templates/ui/partials/header.html +3 -1
  17. accrete/contrib/ui/templates/ui/table.html +3 -6
  18. accrete/contrib/ui/templatetags/accrete_ui.py +12 -0
  19. accrete/contrib/user/forms.py +92 -1
  20. accrete/contrib/user/templates/user/accrete_navbar_end.html +5 -1
  21. accrete/contrib/user/templates/user/change_email.html +29 -0
  22. accrete/contrib/user/templates/user/change_password.html +40 -0
  23. accrete/contrib/user/urls.py +3 -2
  24. accrete/contrib/user/views.py +56 -11
  25. accrete/contrib/user_registration/forms.py +6 -2
  26. accrete/forms.py +6 -5
  27. accrete/utils/dates.py +10 -2
  28. {accrete-0.0.26.dist-info → accrete-0.0.28.dist-info}/METADATA +2 -1
  29. {accrete-0.0.26.dist-info → accrete-0.0.28.dist-info}/RECORD +31 -28
  30. {accrete-0.0.26.dist-info → accrete-0.0.28.dist-info}/WHEEL +1 -1
  31. accrete/contrib/ui/static/js/filter_old.js +0 -734
  32. {accrete-0.0.26.dist-info → accrete-0.0.28.dist-info}/licenses/LICENSE +0 -0
@@ -1,16 +1,19 @@
1
1
  from django.views.generic import View
2
2
  from django.contrib.auth.forms import AuthenticationForm
3
- from django.contrib.auth import logout, views
3
+ from django.contrib.auth import logout, views, update_session_auth_hash
4
4
  from django.contrib.auth.decorators import login_required
5
- from django.shortcuts import redirect, render, reverse
5
+ from django.contrib import messages
6
+ from django.shortcuts import redirect, render, reverse, resolve_url
6
7
  from django.utils.translation import gettext_lazy as _
8
+ from django.conf import settings
7
9
 
8
10
  from accrete.forms import save_form
9
11
  from accrete.contrib.ui import FormContext, DetailContext, ClientAction
10
- from .forms import UserForm
12
+ from .forms import UserForm, ChangePasswordForm, ChangeEmailForm
11
13
 
12
14
 
13
15
  class LoginView(views.LoginView):
16
+
14
17
  form_class = AuthenticationForm
15
18
  template_name = 'user/login.html'
16
19
  redirect_authenticated_user = True
@@ -26,11 +29,10 @@ class LoginView(views.LoginView):
26
29
  return super().form_invalid(form)
27
30
 
28
31
 
29
- class LogoutView(View):
30
- @staticmethod
31
- def get(request, *args, **kwargs):
32
- logout(request)
33
- return redirect('user:login')
32
+ class LogoutView(views.LogoutView):
33
+
34
+ def get_success_url(self):
35
+ return resolve_url(settings.LOGIN_URL)
34
36
 
35
37
 
36
38
  @login_required()
@@ -39,8 +41,8 @@ def user_detail(request):
39
41
  request.user, request.GET.dict(), paginate_by=0, breadcrumbs=[],
40
42
  actions=[
41
43
  ClientAction(_('Edit'), url=reverse('user:edit')),
42
- ClientAction(_('Change E-Mail'), url=''),
43
- ClientAction(_('Change Password'), url='')
44
+ ClientAction(_('Change E-Mail'), url=reverse('user:edit_email')),
45
+ ClientAction(_('Change Password'), url=reverse('user:edit_password'))
44
46
  ]
45
47
  )
46
48
  return render(request, 'user/user_detail.html', ctx.dict())
@@ -56,5 +58,48 @@ def user_edit(request):
56
58
  form = save_form(UserForm(request.POST, instance=request.user))
57
59
  if form.is_saved:
58
60
  return redirect('user:detail')
59
- ctx = FormContext(request.user, request.GET.dict(), context={'form': form}).dict()
61
+ ctx = FormContext(request.user, form, request.GET.dict()).dict()
60
62
  return render(request, 'user/user_form.html', ctx)
63
+
64
+
65
+ @login_required()
66
+ def user_change_password(request):
67
+ form = ChangePasswordForm(instance=request.user)
68
+ if request.method == 'POST':
69
+ form = save_form(ChangePasswordForm(request.POST, instance=request.user))
70
+ if form.is_saved:
71
+ update_session_auth_hash(request, form.instance)
72
+ messages.add_message(
73
+ request, messages.SUCCESS,
74
+ str(_('Your password has been changed.')),
75
+ fail_silently=True
76
+ )
77
+ return redirect('user:detail')
78
+ ctx = FormContext(
79
+ request.user,
80
+ form,
81
+ request.GET.dict(),
82
+ title=_('Change Password'),
83
+ ).dict()
84
+ return render(request, 'user/change_password.html', ctx)
85
+
86
+
87
+ @login_required()
88
+ def user_change_email(request):
89
+ form = ChangeEmailForm(instance=request.user)
90
+ if request.method == 'POST':
91
+ form = save_form(ChangeEmailForm(request.POST, instance=request.user))
92
+ if form.is_saved:
93
+ messages.add_message(
94
+ request, messages.SUCCESS,
95
+ str(_('Your email address has been changed.')),
96
+ fail_silently=True
97
+ )
98
+ return redirect('user:detail')
99
+ ctx = FormContext(
100
+ request.user,
101
+ form,
102
+ request.GET.dict(),
103
+ title=_('Change Email')
104
+ ).dict()
105
+ return render(request, 'user/change_email.html', ctx)
@@ -19,11 +19,15 @@ class UserRegistrationForm(forms.Form):
19
19
  )
20
20
 
21
21
  password1 = forms.CharField(
22
- label=_('Password'), widget=forms.PasswordInput
22
+ label=_('Password'),
23
+ widget=forms.PasswordInput,
24
+ max_length=128
23
25
  )
24
26
 
25
27
  password2 = forms.CharField(
26
- label=_('Confirm Password'), widget=forms.PasswordInput
28
+ label=_('Confirm Password'),
29
+ widget=forms.PasswordInput,
30
+ max_length=128
27
31
  )
28
32
 
29
33
  def clean_password1(self):
accrete/forms.py CHANGED
@@ -292,7 +292,7 @@ class TenantModelForm(One2ManyModelForm):
292
292
  return self.instance
293
293
 
294
294
 
295
- def save_form(form, reraise=False):
295
+ def save_form(form, reraise=False, log=True):
296
296
  form.is_saved = False
297
297
  try:
298
298
  if form.is_valid():
@@ -300,10 +300,11 @@ def save_form(form, reraise=False):
300
300
  form.save()
301
301
  form.is_saved = True
302
302
  except Exception as e:
303
- error_id = str(uuid4())[:8]
304
- _logger.exception(f'{error_id}: {e}')
305
- form.save_error = e
306
- form.save_error_id = error_id
303
+ form.save_error = repr(e)
304
+ if log:
305
+ error_id = str(uuid4())[:8]
306
+ _logger.exception(f'{error_id}: {e}')
307
+ form.save_error_id = error_id
307
308
  if reraise:
308
309
  raise e
309
310
  return form
accrete/utils/dates.py CHANGED
@@ -9,7 +9,6 @@ def current_year_start() -> datetime:
9
9
  first_day = now.replace(
10
10
  month=1, day=1, hour=0, minute=0, second=0, microsecond=0
11
11
  )
12
- # calendar.monthrange(date.year, date.month)[1]
13
12
  return first_day
14
13
 
15
14
 
@@ -23,7 +22,6 @@ def current_year_end() -> datetime:
23
22
 
24
23
  def current_month_start() -> datetime:
25
24
  now = timezone.now()
26
- monthrange = calendar.monthrange(now.year, now.month)
27
25
  first_day = now.replace(
28
26
  day=1, hour=0, minute=0, second=0, microsecond=0
29
27
  )
@@ -37,3 +35,13 @@ def current_month_end() -> datetime:
37
35
  day=monthrange[1], hour=23, minute=59, second=59, microsecond=999999
38
36
  )
39
37
  return last_day
38
+
39
+
40
+ def next_relative_month_start(start_date: date) -> date:
41
+ monthrange = calendar.monthrange(start_date.year, start_date.month)
42
+ return start_date.replace(day=monthrange[1]) + timedelta(days=1)
43
+
44
+
45
+ def next_relative_year_start(start_date: date) -> date:
46
+ current = current_year_end().date().replace(year=start_date.year)
47
+ return current + relativedelta(days=1)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: accrete
3
- Version: 0.0.26
3
+ Version: 0.0.28
4
4
  Summary: Django Shared Schema Multi Tenant
5
5
  Author-email: Benedikt Jilek <benedikt.jilek@pm.me>
6
6
  License: Copyright (c) 2023 Benedikt Jilek
@@ -35,6 +35,7 @@ Requires-Dist: django>=4.2
35
35
  Provides-Extra: contrib
36
36
  Requires-Dist: celery>=5.3.4; extra == 'contrib'
37
37
  Requires-Dist: django-celery-beat; extra == 'contrib'
38
+ Requires-Dist: sqlalchemy; extra == 'contrib'
38
39
  Provides-Extra: dev
39
40
  Requires-Dist: build; extra == 'dev'
40
41
  Requires-Dist: pytest>=7.0; extra == 'dev'
@@ -3,7 +3,7 @@ accrete/admin.py,sha256=MUYUmCFlGYPowiXTbwl4_Q6Cq0-neiL53WW4P76JCLs,1174
3
3
  accrete/apps.py,sha256=F7ynMLHJr_6bRujWtZVUzCliY2CGKiDvyUmL4F68L2E,146
4
4
  accrete/config.py,sha256=eJUbvyBO3DvAD6xkVKjTAzlXy7V7EK9bVyb91girfUs,299
5
5
  accrete/decorators.py,sha256=vM8GuDHLzwEpHmTGafG-xwMddKvuYFIhe-FrUJqL1_4,678
6
- accrete/forms.py,sha256=dvRrDRNMTTls4dNL0UbU3EjE5x7omkqTnyvAXtWIbq0,11172
6
+ accrete/forms.py,sha256=PsM13oQ84U3eJ0b6d5fhCNZCKGyKobMao_2M_1Q4Ucs,11216
7
7
  accrete/middleware.py,sha256=ldnMI4Wv9p1JUyFX_sQSa6Hg4MgkXNbKaHqq5aRsD8s,2629
8
8
  accrete/models.py,sha256=OcxHnmFWity-Pfgj-jOhrxzZ44MdqmLxTH-xwrbtz7w,5974
9
9
  accrete/queries.py,sha256=bchiqLzE1DmR9kvQ6Yyog6cNlYK_lxpztQMOx6Hy_0c,410
@@ -16,29 +16,31 @@ accrete/contrib/sequence/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZ
16
16
  accrete/contrib/sequence/admin.py,sha256=mTjab5cVklRUIQcSrsUo-_JgtXEsSdcFj_gfWhlStS4,273
17
17
  accrete/contrib/sequence/apps.py,sha256=2SalOz9piCrbOPudCh0grN1eojN9kEC4-jcNzBmfqEk,164
18
18
  accrete/contrib/sequence/forms.py,sha256=cdjLIytH7WlJK-B2Y6xRRPjOijkK36XpqUuIe4yLLj0,248
19
- accrete/contrib/sequence/models.py,sha256=zXK0aCdsDiXQU_51UZBElL6DUvnMdKEAITxPX57NNEI,886
20
- accrete/contrib/sequence/queries.py,sha256=ikDK70V07tVS5M81bzMtWCyvpdhmg51Ioh-SgweCtgA,686
19
+ accrete/contrib/sequence/models.py,sha256=UEuPvg1StovPW1n9yF-f31nBq4aTj5zpfS10oqcf60E,887
20
+ accrete/contrib/sequence/queries.py,sha256=VT4pbYKzVAEE_8oPOaavdcCPi-zPiX1BwdVviWh8XKM,683
21
21
  accrete/contrib/sequence/tests.py,sha256=mrbGGRNg5jwbTJtWWa7zSKdDyeB4vmgZCRc2nk6VY-g,60
22
22
  accrete/contrib/sequence/views.py,sha256=xc1IQHrsij7j33TUbo-_oewy3vs03pw_etpBWaMYJl0,63
23
23
  accrete/contrib/sequence/migrations/0001_initial.py,sha256=iAR_hhGN2wDAk40IS9PwEsm7iYqfgasoKRrTLFEpOY8,1352
24
+ accrete/contrib/sequence/migrations/0002_alter_sequence_name.py,sha256=70tpxJ0_edWpzj69PxV73m3CwI7Hy5x1YK8m6_2niP4,398
24
25
  accrete/contrib/sequence/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
26
  accrete/contrib/system_mail/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
27
  accrete/contrib/system_mail/admin.py,sha256=9hXwwfZn446juyRoBOygLWm12X6N9waRC-1LHBLrgZk,227
27
28
  accrete/contrib/system_mail/apps.py,sha256=yIWgsa5GV8NPOJBtDZQJljSZ5v_mOP6VJrTfo_HkLF8,169
28
29
  accrete/contrib/system_mail/forms.py,sha256=baRoj0YQvc-b83y69dbxVgCN5BWoQsco_YRNqqbubY8,723
29
30
  accrete/contrib/system_mail/models.py,sha256=mTx8YAtyyrUE2B8iKQDyJVsUqN1EGHg8XKgdoWibZ9g,880
30
- accrete/contrib/system_mail/tasks.py,sha256=xfAX49wIxYuWDZBuPrWyQt3GPpukK0xMjHtUsgEsMkI,1089
31
+ accrete/contrib/system_mail/tasks.py,sha256=W3q40AxcjGFt7wtuvblQ_WFYIaipYF-WWkDYGvbkYhQ,1326
31
32
  accrete/contrib/system_mail/tests.py,sha256=mrbGGRNg5jwbTJtWWa7zSKdDyeB4vmgZCRc2nk6VY-g,60
32
33
  accrete/contrib/system_mail/views.py,sha256=xc1IQHrsij7j33TUbo-_oewy3vs03pw_etpBWaMYJl0,63
33
34
  accrete/contrib/system_mail/migrations/0001_initial.py,sha256=6cwkkRXGjXvwXoMjjgmWmcPyXSTlUbhW1vMiHObk9MQ,1074
34
35
  accrete/contrib/system_mail/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
- accrete/contrib/ui/__init__.py,sha256=uoJqqJzMOpjp3d3Wi3oiobBp2Cw9w57rBiQNBq8stp0,287
36
+ accrete/contrib/ui/__init__.py,sha256=VuqzzKYHSxxEeps7dOcQ4u0vOdgrpMnkwPXq8n6xEgY,306
36
37
  accrete/contrib/ui/admin.py,sha256=suMo4x8I3JBxAFBVIdE-5qnqZ6JAZV0FESABHOSc-vg,63
37
38
  accrete/contrib/ui/apps.py,sha256=E0ao2ox6PQ3ldfeR17FXJUUJuGiWjm2DPCxHbPXGzls,152
38
- accrete/contrib/ui/components.py,sha256=87GGgjPNVLSSkFaS52JBGcmKzAfPWV5jFJozNqlz4rk,966
39
- accrete/contrib/ui/context.py,sha256=MKKwwOv20tJuO-BF3M2AaRkQAuItyS4ChyC78HCz3mo,9326
40
- accrete/contrib/ui/filter.py,sha256=YKLXQaaXfpkUIcqBhzL1_LGOBuwGkOmJUKBU1_gX73Y,11749
41
- accrete/contrib/ui/querystring.py,sha256=InQoEnNu3H9-2wnqLUpn7seQmgJ91_-xKOtVW6WZc_o,708
39
+ accrete/contrib/ui/components.py,sha256=9GrutNvfPT5QS2x8Ae3lIGWx7sSRx12uh52BqwysL1w,1670
40
+ accrete/contrib/ui/context.py,sha256=CI0GGIFvYPAu7v_8wKvrvFyWFae2t3sfiKtokus6rlk,9552
41
+ accrete/contrib/ui/elements.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
+ accrete/contrib/ui/filter.py,sha256=OmrNWElKuVRjwSbD7GEus1erZmHwcu-I8NzCMbQovu8,12586
43
+ accrete/contrib/ui/querystring.py,sha256=vMP_4Hn6L3jCLf6_HIscZkPgkZGe9g9Y7GfI2zZYn2A,709
42
44
  accrete/contrib/ui/tests.py,sha256=mrbGGRNg5jwbTJtWWa7zSKdDyeB4vmgZCRc2nk6VY-g,60
43
45
  accrete/contrib/ui/urls.py,sha256=TUBlz_CGs9InTZoxM78GSnucA73I8knoh_obt12RUHM,186
44
46
  accrete/contrib/ui/views.py,sha256=WpBKMsxFFG8eG4IN7TW_TPE6i3OFF7gnLDTK7JMKti8,191
@@ -124,8 +126,7 @@ accrete/contrib/ui/static/css/accrete.scss,sha256=-ASM1TVXcT48Z0-VVHmESBn9wbIaKM
124
126
  accrete/contrib/ui/static/css/icons.css,sha256=ZaS9ChqKlwvEgrHbRXhplE3JohWEYmJefVnfggx9-gY,4739
125
127
  accrete/contrib/ui/static/icons/Logo.svg,sha256=hGZuxrAa-LRpFavFiF8Lnc7X9OQcqmb6Xl_dxx-27hM,1861
126
128
  accrete/contrib/ui/static/icons/accrete.svg,sha256=CWHJKIgk3hxL7xIaFSz2j1cK-eF1TroCbjcF58bgOIs,1024
127
- accrete/contrib/ui/static/js/filter.js,sha256=rcJh4pHuKb0KQpGM7Bn2QzDsNhdP0V5RbouWjQ8A_uM,23650
128
- accrete/contrib/ui/static/js/filter_old.js,sha256=yBC_Fhb9d40YLGmsfoxW7zQrlQkC8aCeVryaEInwy24,25779
129
+ accrete/contrib/ui/static/js/filter.js,sha256=7HUBHon2UB5SP0G1NH6fHqxdWw5CuQE8VvJvzDRNYCU,24133
129
130
  accrete/contrib/ui/static/js/list.js,sha256=OX_81ifRmawE-1QBU5Qpq_E6sHiiNwIPleETAn9EOJw,4280
130
131
  accrete/contrib/ui/static/js/navbar.js,sha256=9QGZfPgGWjCBZhZhrRf983hoPnRlwQP-Pl73c2vISYs,628
131
132
  accrete/contrib/ui/static/js/utils.js,sha256=6RKh3EJ57gx5UIjBcSaeZEs7lZdLvyYT9VAQ-WqlKSk,173
@@ -136,15 +137,15 @@ accrete/contrib/ui/templates/django/forms/widgets/input.html,sha256=CRu81kTsbPwi
136
137
  accrete/contrib/ui/templates/django/forms/widgets/select.html,sha256=jT_UnHizHfdWTdJoSxjcIqTiR7NbVBA4bBSvkuDPRtw,394
137
138
  accrete/contrib/ui/templates/django/forms/widgets/text.html,sha256=MSmLlQc7PsPoDLVtTOOiWNprrsPriNr712yFxaHyDIo,47
138
139
  accrete/contrib/ui/templates/django/forms/widgets/textarea.html,sha256=c9BTedqb3IkXLyVYd0p9pR8DFnsXCNGoxVBWZTk_Fic,278
139
- accrete/contrib/ui/templates/ui/detail.html,sha256=AffbViFC9VtkUyMwEToFKhV_Oh2TM_qPJDSWFVhJAjg,469
140
+ accrete/contrib/ui/templates/ui/detail.html,sha256=Ix3WpJ3FsYuvUfi0ivGcA6Bd8IpGO1wpG4eXJFofK8k,1047
140
141
  accrete/contrib/ui/templates/ui/form.html,sha256=HpcZCDU_ur_Zf5gpnH_F8OV6qfOYPl6Ecqg6w5RIayQ,405
141
- accrete/contrib/ui/templates/ui/layout.html,sha256=s2OuO4P43RPb27pxo9qW4Fyv1OjI5Gue9olKxCICF7k,8128
142
- accrete/contrib/ui/templates/ui/list.html,sha256=KQYdACatxJWHcyBB7sx5yBsV-q-GUL-fCv-iAem7jUg,803
143
- accrete/contrib/ui/templates/ui/table.html,sha256=OIPBxDF1LcC9f4j1pXsVty_GNwbNy_oLi6NTzMQyygY,2802
144
- accrete/contrib/ui/templates/ui/partials/filter.html,sha256=IV__z2NBDga2RgjULEePZsF8Q_XwHrSACEDPGN8FNjk,2601
142
+ accrete/contrib/ui/templates/ui/layout.html,sha256=U_ZLxWn-Wg1Ta2Tjev7oMlNSpvfblmLhJbtc83hDWVc,8222
143
+ accrete/contrib/ui/templates/ui/list.html,sha256=d35PALSg9Zr9ErMD4z9XvyXRJPkZEhB5IoOT6LXh73s,661
144
+ accrete/contrib/ui/templates/ui/table.html,sha256=68EG0v78UXWx1YQtJWlqDmXx-7db6DU5kru2FM2kvkA,2762
145
+ accrete/contrib/ui/templates/ui/partials/filter.html,sha256=phuMVykVDGo3urTGGHeA1aLALoSdsZHYEJYLi3rkfo0,2686
145
146
  accrete/contrib/ui/templates/ui/partials/form_errors.html,sha256=1_TQvTdiejsn-43YSyp2YfnP52P-MFYb-HGY0DLm4oA,991
146
147
  accrete/contrib/ui/templates/ui/partials/form_modal.html,sha256=FFDfI5qjOCUBSGqDjBXa8tcqN2q94wOOCNFDaiyplHQ,1032
147
- accrete/contrib/ui/templates/ui/partials/header.html,sha256=yDM7KK3OpBIpuzCWMa1lDx5nvoNjJfZSwHiSnq4hT4Q,2693
148
+ accrete/contrib/ui/templates/ui/partials/header.html,sha256=KVsYaXn5C8UQykMv4H5zFONretq8tjxLdwcgrwAYdvk,2835
148
149
  accrete/contrib/ui/templates/ui/partials/onchange_form.html,sha256=K5twTGqRUW1iM2dGtdWntjsJvJVo5EIzKxX2HK-H1yw,160
149
150
  accrete/contrib/ui/templates/ui/partials/pagination_detail.html,sha256=ee5d5wZHLgh8wARvKCVZ68KZf77w107GWNRi9qkpW80,938
150
151
  accrete/contrib/ui/templates/ui/partials/pagination_list.html,sha256=zdIHmK5W58IpYlW7QmMVpsh1ufUIxpPrDimq9uqaYFQ,1299
@@ -153,21 +154,23 @@ accrete/contrib/ui/templates/ui/partials/table_field_float.html,sha256=GH_jFdpk8
153
154
  accrete/contrib/ui/templates/ui/partials/table_field_monetary.html,sha256=Wtod9vel2dD4vG8lUVLbtls4aU_2EG3p0E1QRRUSH10,166
154
155
  accrete/contrib/ui/templates/ui/partials/table_field_string.html,sha256=GH_jFdpk8wEJXv4QfO6c3URYrZGGLeuSyWwWl2cWxwQ,45
155
156
  accrete/contrib/ui/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
156
- accrete/contrib/ui/templatetags/accrete_ui.py,sha256=LWfxxk1JDhJanbcjYNSSW1-MNvEN8etqYBBvgKKMFIs,2550
157
+ accrete/contrib/ui/templatetags/accrete_ui.py,sha256=qcGZpjdvTmFKaEX6zDN1TopYV4zyqPUljQ8lpfriJjo,2815
157
158
  accrete/contrib/user/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
158
159
  accrete/contrib/user/admin.py,sha256=YS4iApli7XUaIl9GsEJxys2j8sepX0by88omYHjff-E,85
159
160
  accrete/contrib/user/apps.py,sha256=oHDrAiHf-G57mZLyxqGJzRY2DbPprGFD-QgyVJG_ruI,156
160
- accrete/contrib/user/forms.py,sha256=FDfWiPld5EQMTHCCHTIhDdDjEU0zUBR3jo7l04kfn1c,683
161
+ accrete/contrib/user/forms.py,sha256=kkPXxeaJWheNogd1-nBFN4kUxbh9v4b6ofF8-lgt6Vo,3298
161
162
  accrete/contrib/user/middleware.py,sha256=qblcujwJsthopagyT-hPFq4HsMyGt-VvqZw5TQopBjk,403
162
163
  accrete/contrib/user/models.py,sha256=SFEXG9G-XY7Nuss7DT51abDv8BWLHKYJocOhQDI_1Lw,3926
163
164
  accrete/contrib/user/tests.py,sha256=mrbGGRNg5jwbTJtWWa7zSKdDyeB4vmgZCRc2nk6VY-g,60
164
- accrete/contrib/user/urls.py,sha256=pTjnYuSHx3Mlx87uDULoWO1gB0moxTQG7YwXHsa-FTk,316
165
- accrete/contrib/user/views.py,sha256=JL0e4cmJSp6_Ukg8TBj_71g_VJNEBTbCAwl_xKEFkTk,1974
165
+ accrete/contrib/user/urls.py,sha256=ktQJ3vZxDlKNUfzOxReeDLOduSdoW5z5Sz0LVFpxZGU,460
166
+ accrete/contrib/user/views.py,sha256=uQ_gd97HubpA2vFMeAM9IKK0N0U9os03g3FAKU6pN_E,3523
166
167
  accrete/contrib/user/locale/de/LC_MESSAGES/django.mo,sha256=p3rgUg6WltAVIMkQsjvjBqTsd_usLhSr1GH4Cyltc2c,433
167
168
  accrete/contrib/user/locale/de/LC_MESSAGES/django.po,sha256=f_Nxpo3HTm2L3f3zoHLfeWsZ-4IQp_EEVSku6TCZSvw,1870
168
169
  accrete/contrib/user/migrations/0001_initial.py,sha256=JWfM9PcMDfkJUdCjLWuWieGs6643qP0KdbCyr5uAZoY,2950
169
170
  accrete/contrib/user/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
170
- accrete/contrib/user/templates/user/accrete_navbar_end.html,sha256=PmdfM6LuYdhVbDJ62DcmwU0F3OH8KSwKzjXRc282BJk,343
171
+ accrete/contrib/user/templates/user/accrete_navbar_end.html,sha256=vDFjrOZ95doOpdGYSCRlP8H-FfKUWpkYgYP8mOKcboY,481
172
+ accrete/contrib/user/templates/user/change_email.html,sha256=i9ZgDH31awO9W87E6c3_MKgQNf1ff7EYQX1nEdPqRC8,995
173
+ accrete/contrib/user/templates/user/change_password.html,sha256=wcwm5_tfPgs9V7VWdDQqhhyMpcIkiGsx2OIptF5fWMk,1498
171
174
  accrete/contrib/user/templates/user/login.html,sha256=qKUqF5WCkWPrbwQMaa05Ou7zkM_CeVrJzHsjsDWNPhQ,1644
172
175
  accrete/contrib/user/templates/user/user_detail.html,sha256=SMkghUKVncVq3KFGBxADJf_wDnLYwmK4oDTKLO0Ejlo,1445
173
176
  accrete/contrib/user/templates/user/user_form.html,sha256=4o24KV940D_KsBP4YwBguwTFW9nYz1uz-RILs91M7Po,1935
@@ -175,7 +178,7 @@ accrete/contrib/user_registration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeR
175
178
  accrete/contrib/user_registration/admin.py,sha256=kwmGTsg4Hii-lsw9-UaJG7AhQ4k4SPi48GSrtpZ4YR4,119
176
179
  accrete/contrib/user_registration/apps.py,sha256=mYu3fuuubfjImeJHk4D_Wd6Edw2r3oUNXGcFbAkhir4,181
177
180
  accrete/contrib/user_registration/config.py,sha256=wrZuZY5ed9dCFKp5W2iRUAoHN9xAoetEU8BuuKSofRg,949
178
- accrete/contrib/user_registration/forms.py,sha256=rTDcpVlGPDyfTRIQquJr4hNshmJEOplYDwOT782xLys,3281
181
+ accrete/contrib/user_registration/forms.py,sha256=WeQgxK0qAxRf3IH5ssET2y3QSgk5pqlGhcudg0yNf_A,3345
179
182
  accrete/contrib/user_registration/models.py,sha256=bxDQ_UTeLMmU6tjNfwVLenWuJu_WNZEm3-uPNeOAidk,398
180
183
  accrete/contrib/user_registration/tests.py,sha256=mrbGGRNg5jwbTJtWWa7zSKdDyeB4vmgZCRc2nk6VY-g,60
181
184
  accrete/contrib/user_registration/urls.py,sha256=lC1uHBHY3lgJVooZaMx7quTnqDsG01JQq_XRXQVjz3o,382
@@ -188,8 +191,8 @@ accrete/migrations/0001_initial.py,sha256=azThbc8otEhxJwo8BIgOt5eC30mxXhKJLBAazZ
188
191
  accrete/migrations/0002_initial.py,sha256=dFOM7kdHlx7pVAh8cTDlZMtciN4O9Z547HAzEKnygZE,1628
189
192
  accrete/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
190
193
  accrete/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
191
- accrete/utils/dates.py,sha256=yuf8bqhdjOBarxFFl2hqepbbbuFHQgoe2BNar6-4n8g,1068
192
- accrete-0.0.26.dist-info/METADATA,sha256=yhJOVulqoXT6E-XxpTY23FgzXSnJC74pkl2fr1sxUno,4846
193
- accrete-0.0.26.dist-info/WHEEL,sha256=mRYSEL3Ih6g5a_CVMIcwiF__0Ae4_gLYh01YFNwiq1k,87
194
- accrete-0.0.26.dist-info/licenses/LICENSE,sha256=_7laeMIHnsd3Y2vJEXDYXq_PEXxIcjgJsGt8UIKTRWc,1057
195
- accrete-0.0.26.dist-info/RECORD,,
194
+ accrete/utils/dates.py,sha256=iqMqEcW1ZV5yg9TjVN01-Pa24vgdcO-_u2x_sXSvMPI,1329
195
+ accrete-0.0.28.dist-info/METADATA,sha256=SO405O8tJ2JxsxLxj7WrfExs10ujpFideOP3o_6ksKQ,4892
196
+ accrete-0.0.28.dist-info/WHEEL,sha256=TJPnKdtrSue7xZ_AVGkp9YXcvDrobsjBds1du3Nx6dc,87
197
+ accrete-0.0.28.dist-info/licenses/LICENSE,sha256=_7laeMIHnsd3Y2vJEXDYXq_PEXxIcjgJsGt8UIKTRWc,1057
198
+ accrete-0.0.28.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.21.0
2
+ Generator: hatchling 1.21.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any