accrete 0.0.8__py3-none-any.whl → 0.0.9__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.
accrete/config.py ADDED
@@ -0,0 +1,14 @@
1
+ import logging
2
+ from django.conf import settings
3
+
4
+ _logger = logging.getLogger(__name__)
5
+
6
+ ACCRETE_TENANT_NOT_SET_URL = getattr(
7
+ settings, 'ACCRETE_TENANT_NOT_SET_URL',
8
+ False
9
+ )
10
+
11
+ if not ACCRETE_TENANT_NOT_SET_URL:
12
+ _logger.warning(
13
+ 'Setting ACCRETE_TENANT_NOT_SET_URL missing.'
14
+ )
@@ -9,4 +9,4 @@ from .helper import (
9
9
  build_querystring,
10
10
  parse_client_actions,
11
11
  queryset_from_querystring
12
- )
12
+ )
@@ -19,7 +19,9 @@ ACTIONS_TEMPLATE = config.ACCRETE_UI_ACTIONS_TEMPLATE
19
19
  class ClientAction:
20
20
 
21
21
  name: str
22
- url: str = None
22
+ url: str = ''
23
+ query_params: str = ''
24
+ attrs: list[str] = field(default_factory=list)
23
25
  submit: bool = False
24
26
  form_id: str = 'form'
25
27
  class_list: list = field(default_factory=list)
@@ -41,7 +43,7 @@ def parse_client_actions(actions: list[ClientAction], actions_template: str = No
41
43
  class BreadCrumb:
42
44
 
43
45
  name: str
44
- url:str
46
+ url: str
45
47
 
46
48
 
47
49
  @dataclass
@@ -348,27 +350,8 @@ def get_related_model(model, path):
348
350
  for part in path:
349
351
  try:
350
352
  related_model = related_model._meta.fields_map[part].related_model
351
- continue
352
353
  except (AttributeError, KeyError):
353
- pass
354
- # try:
355
- # related_model = getattr(related_model, part).model
356
- # continue
357
- # except AttributeError:
358
- # pass
359
- # try:
360
- # related_model = getattr(related_model.rel.related_model, part)
361
- # continue
362
- # except AttributeError:
363
- # pass
364
- # try:
365
- # related_model = getattr(related_model, part).field.related_model
366
- # continue
367
- # except AttributeError:
368
- # pass
369
- raise AttributeError(
370
- f'Could not resolve relation for model: {model} with path "{path}" at {part}'
371
- )
354
+ continue
372
355
  return related_model
373
356
 
374
357
 
@@ -1,23 +1,12 @@
1
1
  document.addEventListener('DOMContentLoaded', () => {
2
- const navElements = document.querySelectorAll('.accrete-navbar-menu');
3
- const burger = document.getElementById('navbar-burger');
2
+ const navElements = document.querySelectorAll('.navbar-item, .has-dropdown');
4
3
  navElements.forEach(el => {
5
4
  el.addEventListener('mousedown', toggleNavDropDown);
6
5
  el.addEventListener('blur', deactivateNavDropDown);
7
- el.classList.add('is-hoverable');
8
6
  })
9
- burger.addEventListener('click', toggleHamburger)
10
7
  })
11
8
 
12
9
 
13
- function toggleHamburger() {
14
- const burgerElements = document.querySelectorAll('.accrete-burger');
15
- burgerElements.forEach(el => {
16
- el.classList.toggle('is-active');
17
- })
18
- }
19
-
20
-
21
10
  function toggleNavDropDown() {
22
11
  const active = this.classList.toggle('is-active');
23
12
  if (active) {
@@ -1,110 +1,103 @@
1
1
  <!doctype html>
2
2
  {% load static %}
3
3
  {% load i18n %}
4
- {% load cache %}
4
+ {% load accrete_ui %}
5
5
 
6
6
  <html lang="en">
7
+
7
8
  <head>
8
- {% block head %}
9
- <meta charset="utf-8">
10
- <meta name="viewport" content="width=device-width, initial-scale=1">
11
- {% block favicon %}
12
- <link rel="icon" type="image/svg" href="{% static 'icons/accrete.svg' %}"/>
13
- {% endblock %}
14
- {% block bulma %}
15
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@0.9.4/css/bulma.min.css">
16
- {% endblock %}
17
- {% block style %}
18
- <link rel="stylesheet" type="text/css" href="{% static "css/accrete.css" %}">
19
- <link rel="stylesheet" type="text/css" href="{% static "css/icons.css" %}">
20
- {% endblock %}
21
- {% block htmx %}
22
- <script src="https://unpkg.com/htmx.org@1.9.6"></script>
23
- <script src="https://unpkg.com/hyperscript.org@0.9.11"></script>
24
- {% endblock %}
25
- {% block script %}
26
- <script src="{% static "js/navbar.js" %}" defer type="text/javascript"></script>
27
- <script src="{% static "js/utils.js" %}" defer type="text/javascript"></script>
28
- {% endblock %}
9
+ {% block head %}
10
+ <meta charset="utf-8">
11
+ <meta name="viewport" content="width=device-width, initial-scale=1">
12
+ {% block favicon %}<link rel="icon" type="image/svg" href="{% static 'icons/accrete.svg' %}"/>{% endblock %}
13
+ {% block bulma %}<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@0.9.4/css/bulma.min.css">{% endblock %}
14
+ {% block style %}
15
+ <link rel="stylesheet" type="text/css" href="{% static "css/accrete.css" %}">
16
+ <link rel="stylesheet" type="text/css" href="{% static "css/icons.css" %}">
17
+ {% endblock %}
18
+ {% block htmx %}
19
+ <script src="https://unpkg.com/htmx.org@1.9.6"></script>
20
+ <script src="https://unpkg.com/hyperscript.org@0.9.11"></script>
29
21
  {% endblock %}
30
- {% block title_tag %}
31
- <title>{% block title %}{{ title }}{% endblock %}</title>
22
+ {% block script %}
23
+ <script src="{% static "js/navbar.js" %}" defer type="text/javascript"></script>
24
+ <script src="{% static "js/utils.js" %}" defer type="text/javascript"></script>
32
25
  {% endblock %}
26
+ <title>{% block title %}{{ title }}{% endblock %}</title>
27
+ {% endblock %}
33
28
  </head>
34
29
 
35
- <body id="body" {% block body_attrs %}hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'{% endblock %}>
36
- <nav id="navbar" class="navbar is-success is-info is-fixed-top" role="navigation" aria-label="main navigation">
37
- <div class="navbar-brand">
38
- {% block navbar_brand %}
39
- {% if request.tenant %}
40
- <p class="navbar-item is-unselectable">
41
- {{ request.tenant.name }}
42
- </p>
43
- {% endif %}
44
- {% block navbar_brand_inside %}{% endblock %}
45
- <a id="navbar-burger" role="button" class="navbar-burger accrete-burger"
46
- aria-label="menu" aria-expanded="false">
30
+
31
+ <body {% block body_attrs %}hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'{% endblock %}>
32
+ {% block navbar %}
33
+ <nav id="navbar" class="navbar is-success is-fixed-top" role="navigation" aria-label="main navigation">
34
+ <div class="navbar-brand">
35
+ {% block navbar_brand %}
36
+ <div class="navbar-item is-unselectable">{{ request.tenant.name }}</div>
37
+ {% endblock %}
38
+ <a id="navbar-burger" role="button" class="navbar-burger"
39
+ aria-label="menu" aria-expanded="false"
40
+ _="on click toggle .is-active on me then toggle .is-active on .navbar-menu"
41
+ >
47
42
  {# Display hamburger menu on mobile #}
48
43
  <span aria-hidden="true"></span>
49
44
  <span aria-hidden="true"></span>
50
45
  <span aria-hidden="true"></span>
51
46
  </a>
52
- {% endblock %}
53
- </div>
54
-
55
- <div class="navbar-menu is-fixed-top accrete-burger">
56
- <div class="navbar-start">
57
- {% block navbar_start %}
58
- {% endblock %}
59
47
  </div>
60
48
 
61
- <div class="navbar-end">
62
- <div class="navbar-item has-dropdown accrete-navbar-menu">
49
+ <div class="navbar-menu is-fixed-top">
50
+ <div class="navbar-start">
51
+ {% block navbar_start %}
52
+ {% combine_templates 'accrete_menu.html' %}
53
+ {% endblock %}
54
+ </div>
55
+
56
+ <div class="navbar-end">
63
57
  {% block navbar_end %}
64
58
  {% endblock %}
65
59
  </div>
66
60
  </div>
67
- </div>
68
- </nav>
61
+ </nav>
62
+ {% endblock %}
69
63
 
70
64
  <div class="main-columns columns m-0 is-mobile">
71
65
  {% block main_columns %}
72
- <div class="side-panel column is-3-widescreen is-2-fullhd is-hidden-touch is-hidden-desktop-only is-hidden-widescreen-only" style="height: 100%">
73
- <nav class="panel is-shadowless pb-5">
74
- {% if list_pagination %}
75
- <div class="panel-block">
76
- {% include 'ui/partials/pagination_list.html' %}
77
- </div>
78
- {% endif %}
79
- {% if detail_pagination %}
80
- <div class="panel-block">
81
- {% include 'ui/partials/pagination_detail.html' %}
82
- </div>
83
- {% endif %}
84
- <div id="panel-actions">
85
- {% block side_panel_items %}{% if actions and actions_template %}{% include actions_template with all=True %}{% endif %}{% endblock %}
86
- </div>
87
- {% if filter_terms %}
88
- <div class="panel-list px-3 has-text-centered">
89
- <span>{% translate 'Filter' %}</span>
66
+ {% block side_panel %}
67
+ <div class="side-panel column is-3-widescreen is-2-fullhd is-hidden-touch is-hidden-desktop-only is-hidden-widescreen-only" style="height: 100%">
68
+ <nav class="panel is-shadowless pb-5">
69
+ {% if list_pagination %}
70
+ <div class="panel-block">
71
+ {% include 'ui/partials/pagination_list.html' %}
72
+ </div>
73
+ {% endif %}
74
+ {% if detail_pagination %}
75
+ <div class="panel-block">
76
+ {% include 'ui/partials/pagination_detail.html' %}
77
+ </div>
78
+ {% endif %}
79
+ <div id="panel-actions">
80
+ {% block side_panel_items %}{% if actions and actions_template %}{% include actions_template with all=True %}{% endif %}{% endblock %}
90
81
  </div>
91
- <div class="panel-block" style="position: sticky">
92
- <button id="reset-filter-button"
93
- class="button is-fullwidth mr-1">{% translate 'Reset' %}
94
- </button>
95
- <button id="apply-filter-button"
96
- class="button is-fullwidth ml-1">{% translate 'Filter' %}
97
- </button>
98
- </div>
99
- <div id="filter-panel">
100
- {% cache 500 filter_panel request.path request.GET request.tenant %}
82
+ {% if filter_terms %}
83
+ <div class="panel-list px-3 has-text-centered">
84
+ <span>{% translate 'Filter' %}</span>
85
+ </div>
86
+ <div class="panel-block" style="position: sticky">
87
+ <button id="reset-filter-button"
88
+ class="button is-fullwidth mr-1">{% translate 'Reset' %}
89
+ </button>
90
+ <button id="apply-filter-button"
91
+ class="button is-fullwidth ml-1">{% translate 'Filter' %}
92
+ </button>
93
+ </div>
94
+ <div id="filter-panel">
101
95
  {% include 'ui/partials/filter.html' %}
102
- {% endcache %}
103
- </div>
104
- {% endif %}
105
- </nav>
106
- </div>
107
-
96
+ </div>
97
+ {% endif %}
98
+ </nav>
99
+ </div>
100
+ {% endblock %}
108
101
 
109
102
  <div id="content" class="column content-column p-0" style="height: 100%; overflow-y: auto">
110
103
  {% block content %}{% endblock %}
@@ -13,7 +13,8 @@
13
13
  {{ action.attrs|join:' ' }}>
14
14
  {% else %}
15
15
  <a class="button is-fullwidth {{ action.class|join:' ' }}"
16
- href="{{ action.url }}{{ querystring }}{% if page %}&page={{ page.number }}{% endif %}" {{ action.attrs }}
16
+ href="{{ action.url }}{{ querystring|default_if_none:'?' }}{% if page %}&page={{ page.number }}{% endif %}{{ action.query_params }}"
17
+ {% for attr in action.attrs %}{{ attr }}{% endfor %}
17
18
  style="word-break: break-word">{{ action.name }}
18
19
  </a>
19
20
  {% endif %}
@@ -1,5 +1,6 @@
1
1
  {% load i18n %}
2
2
  {% load static %}
3
+ {% load cache %}
3
4
  {% load accrete_ui %}
4
5
 
5
6
  <div id="query-block" class="panel-block pt-0" style="position: relative; display: inline-block; width: 100%">
@@ -36,9 +37,8 @@
36
37
 
37
38
 
38
39
  <div id="query-params-dropdown" class="box mt-1 mx-0 p-1 is-hidden" tabindex="-1" style="z-index: 10; background: white; word-break: break-word; position: inherit">
39
- {% for term in filter_terms %}
40
-
41
- {% endfor %}
42
- {{ filter_terms|render_query_params|safe }}
40
+ {% cache 500 filter_params request.path request.GET request.tenant %}
41
+ {{ filter_terms|render_query_params|safe }}
42
+ {% endcache %}
43
43
  </div>
44
44
  </div>
@@ -16,4 +16,4 @@
16
16
  <button class="button" hx-get="{% url 'ui:form_modal' %}" hx-swap="outerHTML" hx-target="#form-modal">{% translate 'Discard' %}</button>
17
17
  </footer>
18
18
  </div>
19
- </div>
19
+ </div>
@@ -18,7 +18,7 @@
18
18
  <nav class="breadcrumb" aria-label="breadcrumbs" style="white-space: unset; word-break: break-word">
19
19
  <ul>
20
20
  {% for crumb in breadcrumbs %}
21
- <li><a href="{{ crumb.url|default_if_none:'#' }}{{ querystring }}" aria-current="page">{{ crumb.name }}</a></li>
21
+ <li><a class="is-underlined" href="{{ crumb.url|default_if_none:'#' }}{{ querystring }}" aria-current="page">{{ crumb.name }}</a></li>
22
22
  {% endfor %}
23
23
  <li class="is-active"><a aria-current="page">{{ title }}</a></li>
24
24
  </ul>
@@ -1,8 +1,22 @@
1
1
  from django import template
2
+ from django.conf import settings
3
+ from django.template.loader import render_to_string
4
+ from django.utils.safestring import mark_safe
2
5
 
3
6
  register = template.Library()
4
7
 
5
8
 
9
+ @register.simple_tag(name='combine_templates')
10
+ def combine_templates(template_name):
11
+ html = ''
12
+ for app in settings.INSTALLED_APPS:
13
+ try:
14
+ html += render_to_string(f'{app.split(".")[-1]}/{template_name}')
15
+ except template.TemplateDoesNotExist:
16
+ continue
17
+ return mark_safe(html)
18
+
19
+
6
20
  @register.filter(name='render_query_params')
7
21
  def query_params_to_html(params):
8
22
  html = ''
@@ -2,7 +2,7 @@ from django.shortcuts import render
2
2
 
3
3
 
4
4
  def home(request):
5
- return render(request, 'ui/layout.html', {})
5
+ return render(request, 'ui/layout.html')
6
6
 
7
7
 
8
8
  def form_modal(request):
@@ -1,6 +1,5 @@
1
1
  import logging
2
2
  from django.conf import settings
3
- from django.core.exceptions import ImproperlyConfigured
4
3
  from django.utils.translation import gettext_lazy as _
5
4
 
6
5
  _logger = logging.getLogger(__name__)
@@ -26,12 +25,7 @@ ACCRETE_USER_REGISTRATION_ALLOWED = getattr(
26
25
 
27
26
  if not ACCRETE_USER_REGISTRATION_MAIL_FROM_NAME:
28
27
  _logger.warning(
29
- 'Setting "USER_REGISTRATION_MAIL_FROM_NAME" missing.\n'
28
+ 'Setting "ACCRETE_USER_REGISTRATION_MAIL_FROM_NAME" missing.\n'
30
29
  'User Registration won\'t work. Set it or remove '
31
- 'the app "user_registration" from INSTALLED_APPS and your urls.'
30
+ 'the app "accrete.contrib.user_registration".'
32
31
  )
33
- # raise ImproperlyConfigured(
34
- # 'Setting "USER_REGISTRATION_MAIL_FROM_NAME" missing.\n'
35
- # 'User Registration won\'t work. Set it or remove '
36
- # 'the app "user_registration" from INSTALLED_APPS and your urls.'
37
- # )
accrete/decorators.py CHANGED
@@ -1,14 +1,11 @@
1
1
  from functools import wraps
2
2
 
3
- from django.conf import settings
4
3
  from django.shortcuts import redirect
5
4
  from django.contrib.auth.views import login_required
6
- from django.core.exceptions import ImproperlyConfigured
5
+ from . import config
7
6
 
8
- TENANT_NOT_SET_URL = settings.ACCRETE_TENANT_NOT_SET_URL
9
7
 
10
8
  def tenant_required(
11
- tenant_not_set_url: str = None,
12
9
  redirect_field_name: str = None,
13
10
  login_url: str = None
14
11
  ):
@@ -21,14 +18,7 @@ def tenant_required(
21
18
  def _wrapped_view(request, *args, **kwargs):
22
19
  tenant = request.tenant
23
20
  if not tenant:
24
- url = tenant_not_set_url or TENANT_NOT_SET_URL
25
- if not url:
26
- raise ImproperlyConfigured(
27
- f'Redirect URL not set. '
28
- f'Define settings.ACCRETE_TENANT_NOT_SET_URL or pass '
29
- f'the redirect URL to the tenant_required decorator.'
30
- )
31
- return redirect(url)
21
+ return redirect(config.ACCRETE_TENANT_NOT_SET_URL)
32
22
  return f(request, *args, **kwargs)
33
23
  return _wrapped_view
34
24
  return decorator
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: accrete
3
- Version: 0.0.8
4
- Summary: Django Shared Schema Multi Tenant SaaS Foundation
3
+ Version: 0.0.9
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
7
7
 
@@ -1,7 +1,8 @@
1
1
  accrete/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  accrete/admin.py,sha256=MUYUmCFlGYPowiXTbwl4_Q6Cq0-neiL53WW4P76JCLs,1174
3
3
  accrete/apps.py,sha256=F7ynMLHJr_6bRujWtZVUzCliY2CGKiDvyUmL4F68L2E,146
4
- accrete/decorators.py,sha256=wqnMbIY6zmlByHzPZ70ySURbn9DFJQYVDhlPuIvKgiU,1181
4
+ accrete/config.py,sha256=eJUbvyBO3DvAD6xkVKjTAzlXy7V7EK9bVyb91girfUs,299
5
+ accrete/decorators.py,sha256=vM8GuDHLzwEpHmTGafG-xwMddKvuYFIhe-FrUJqL1_4,678
5
6
  accrete/forms.py,sha256=hwUwlfM8v7gPFxH_foN1jIXzYH32GdX-FrPZgh0Qv1Q,11137
6
7
  accrete/middleware.py,sha256=ldnMI4Wv9p1JUyFX_sQSa6Hg4MgkXNbKaHqq5aRsD8s,2629
7
8
  accrete/models.py,sha256=_k8fOYFEOp3WN5rFHNCWDMMJ_H6HGSNiFHPsg2dv2Lg,5229
@@ -31,15 +32,15 @@ accrete/contrib/system_mail/tests.py,sha256=mrbGGRNg5jwbTJtWWa7zSKdDyeB4vmgZCRc2
31
32
  accrete/contrib/system_mail/views.py,sha256=xc1IQHrsij7j33TUbo-_oewy3vs03pw_etpBWaMYJl0,63
32
33
  accrete/contrib/system_mail/migrations/0001_initial.py,sha256=6cwkkRXGjXvwXoMjjgmWmcPyXSTlUbhW1vMiHObk9MQ,1074
33
34
  accrete/contrib/system_mail/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
- accrete/contrib/ui/__init__.py,sha256=ynKjCDFnwQLmcpOs6fenFFiL3PTKN7G6nck3j_tHg80,237
35
+ accrete/contrib/ui/__init__.py,sha256=KtdoYsDesEdQJCnlDaZ0iI-ss4JEQXdJhj_ROdFHgMs,238
35
36
  accrete/contrib/ui/admin.py,sha256=suMo4x8I3JBxAFBVIdE-5qnqZ6JAZV0FESABHOSc-vg,63
36
37
  accrete/contrib/ui/apps.py,sha256=E0ao2ox6PQ3ldfeR17FXJUUJuGiWjm2DPCxHbPXGzls,152
37
38
  accrete/contrib/ui/config.py,sha256=X9cAYyJqIuE4bg5ja6N4WERHSu4HTkYEJpPvVZ4SwtA,206
38
39
  accrete/contrib/ui/filter.py,sha256=xTziJ7ySfbpwtaWAusJSkNUtaZbEeX9UKES2AKIuAak,11897
39
- accrete/contrib/ui/helper.py,sha256=-eRv6n7pZfap2G51blI4RBQjCwdBpnyY-_TLKr2QT9s,13835
40
+ accrete/contrib/ui/helper.py,sha256=i2-LGhqXDK3vPZ8eYkeliduGQG5o5vcvQXlxivx0h7k,13274
40
41
  accrete/contrib/ui/tests.py,sha256=mrbGGRNg5jwbTJtWWa7zSKdDyeB4vmgZCRc2nk6VY-g,60
41
42
  accrete/contrib/ui/urls.py,sha256=TUBlz_CGs9InTZoxM78GSnucA73I8knoh_obt12RUHM,186
42
- accrete/contrib/ui/views.py,sha256=WpBKMsxFFG8eG4IN7TW_TPE6i3OFF7gnLDTK7JMKti8,191
43
+ accrete/contrib/ui/views.py,sha256=vAktHp5a3E6qKX-7qbvRQGepQgN-_qUkLfeRP_pf9RA,187
43
44
  accrete/contrib/ui/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
45
  accrete/contrib/ui/static/css/accrete.css,sha256=Bl23ue2-iCeqx1S8MCbxUMOB6kwdQoD_3vPySTEcslM,3301
45
46
  accrete/contrib/ui/static/css/icons.css,sha256=-a9BJHrH5P02cfL5qZLZHZkyupqigWmbc5wAa0UEDrE,3035
@@ -47,7 +48,7 @@ accrete/contrib/ui/static/icons/Logo.svg,sha256=hGZuxrAa-LRpFavFiF8Lnc7X9OQcqmb6
47
48
  accrete/contrib/ui/static/icons/accrete.svg,sha256=CWHJKIgk3hxL7xIaFSz2j1cK-eF1TroCbjcF58bgOIs,1024
48
49
  accrete/contrib/ui/static/js/filter.js,sha256=FleoqtZ6SanlF3cy4FYfN47OsVXBRmt_O4CnUOP96S8,19186
49
50
  accrete/contrib/ui/static/js/list.js,sha256=OX_81ifRmawE-1QBU5Qpq_E6sHiiNwIPleETAn9EOJw,4280
50
- accrete/contrib/ui/static/js/navbar.js,sha256=rwPdqx5-631Oksf3URmHWo3bBEBj8TVBC_yggdfPzMs,968
51
+ accrete/contrib/ui/static/js/navbar.js,sha256=9QGZfPgGWjCBZhZhrRf983hoPnRlwQP-Pl73c2vISYs,628
51
52
  accrete/contrib/ui/static/js/utils.js,sha256=6RKh3EJ57gx5UIjBcSaeZEs7lZdLvyYT9VAQ-WqlKSk,173
52
53
  accrete/contrib/ui/templates/django/forms/widgets/attrs.html,sha256=zNxjU4Ta_eWZkh1WhrF_VIwNZ0lZyl980gSSijUK51k,195
53
54
  accrete/contrib/ui/templates/django/forms/widgets/email.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48
@@ -58,19 +59,19 @@ accrete/contrib/ui/templates/django/forms/widgets/text.html,sha256=MSmLlQc7PsPoD
58
59
  accrete/contrib/ui/templates/django/forms/widgets/textarea.html,sha256=c9BTedqb3IkXLyVYd0p9pR8DFnsXCNGoxVBWZTk_Fic,278
59
60
  accrete/contrib/ui/templates/ui/detail.html,sha256=Ae4RD61IO4Jx57aG05Ht6XBnVyPck8xnlsQ4Uv-Nz4w,562
60
61
  accrete/contrib/ui/templates/ui/form.html,sha256=HDR--6bLa6l9xFpcdX4NYnbI0jCk4u4bm-qg-2AgMXQ,457
61
- accrete/contrib/ui/templates/ui/layout.html,sha256=Ay2hCJHpzkFVxZAo1wTcLBgQt3b3vwooBOU-17a655Q,6954
62
+ accrete/contrib/ui/templates/ui/layout.html,sha256=idzB2kP76grNeHhaeVkbO_rdYXv6ThGSHtEQp8fs7j4,6805
62
63
  accrete/contrib/ui/templates/ui/list.html,sha256=VbgzkeZyprbU7JnpyP31m9eL4G8MZpzKdAVe6BTmcik,1270
63
64
  accrete/contrib/ui/templates/ui/table.html,sha256=quvTy99RmX8uPGVCMdZa_w54bwmogNxBGy7sMnJPTxU,1386
64
- accrete/contrib/ui/templates/ui/partials/actions.html,sha256=YuaVQQGH0lHklhxw5hceotiGc-3TKFfviOdNGBpT-p4,1244
65
- accrete/contrib/ui/templates/ui/partials/filter.html,sha256=6boRqI74CbiuCxkFOWPSq3aBKyNan0miY6zbodrCoD8,1783
65
+ accrete/contrib/ui/templates/ui/partials/actions.html,sha256=urRu07sWxUBjdp9WgOpJnmf44ZHQDQXRae2QTdzV0lc,1342
66
+ accrete/contrib/ui/templates/ui/partials/filter.html,sha256=l_Vi3ZRepF5lpX_KENU4AyIELSeichsVr0g2KGHcjIQ,1844
66
67
  accrete/contrib/ui/templates/ui/partials/form_errors.html,sha256=1_TQvTdiejsn-43YSyp2YfnP52P-MFYb-HGY0DLm4oA,991
67
- accrete/contrib/ui/templates/ui/partials/form_modal.html,sha256=Trfk_4NnGPa1F-4h7gGcu28F9EFm_wTIVRLLVxFQYfc,1031
68
- accrete/contrib/ui/templates/ui/partials/header.html,sha256=WR0849PgdOX_GBTiDgqx3783EJ4bRXhgFH70IFR5PV4,3025
68
+ accrete/contrib/ui/templates/ui/partials/form_modal.html,sha256=FFDfI5qjOCUBSGqDjBXa8tcqN2q94wOOCNFDaiyplHQ,1032
69
+ accrete/contrib/ui/templates/ui/partials/header.html,sha256=L33nbExJduDQP8J8K0qQsoD4Y8qjQUOuwbJdrCBBf_w,3047
69
70
  accrete/contrib/ui/templates/ui/partials/onchange_form.html,sha256=K5twTGqRUW1iM2dGtdWntjsJvJVo5EIzKxX2HK-H1yw,160
70
71
  accrete/contrib/ui/templates/ui/partials/pagination_detail.html,sha256=9rQEaE31gU8sUFLireZ9iju78HucADBK1TQOb9nqw2I,1003
71
72
  accrete/contrib/ui/templates/ui/partials/pagination_list.html,sha256=MkIRMnCCUnK7Ksoy4SqXdMtnpqgHeCv5GyMN3tzNfCc,1232
72
73
  accrete/contrib/ui/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
73
- accrete/contrib/ui/templatetags/accrete_ui.py,sha256=GHIynBlabv37McbFbMkR8LsCTRuPGlwABDz-p6WGRFc,1656
74
+ accrete/contrib/ui/templatetags/accrete_ui.py,sha256=mytEnz-a-Mw7EjhqybvTdRYQAi6RUBnzuoLjRT-T478,2113
74
75
  accrete/contrib/user/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
75
76
  accrete/contrib/user/admin.py,sha256=YS4iApli7XUaIl9GsEJxys2j8sepX0by88omYHjff-E,85
76
77
  accrete/contrib/user/apps.py,sha256=oHDrAiHf-G57mZLyxqGJzRY2DbPprGFD-QgyVJG_ruI,156
@@ -87,7 +88,7 @@ accrete/contrib/user/templates/user/login.html,sha256=qKUqF5WCkWPrbwQMaa05Ou7zkM
87
88
  accrete/contrib/user_registration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
88
89
  accrete/contrib/user_registration/admin.py,sha256=kwmGTsg4Hii-lsw9-UaJG7AhQ4k4SPi48GSrtpZ4YR4,119
89
90
  accrete/contrib/user_registration/apps.py,sha256=mYu3fuuubfjImeJHk4D_Wd6Edw2r3oUNXGcFbAkhir4,181
90
- accrete/contrib/user_registration/config.py,sha256=YxTf_yA3gX_tNIE1PVTL1a3sXMDx6tiUA-mM9ZEp-Jk,1259
91
+ accrete/contrib/user_registration/config.py,sha256=wrZuZY5ed9dCFKp5W2iRUAoHN9xAoetEU8BuuKSofRg,949
91
92
  accrete/contrib/user_registration/forms.py,sha256=rTDcpVlGPDyfTRIQquJr4hNshmJEOplYDwOT782xLys,3281
92
93
  accrete/contrib/user_registration/models.py,sha256=bxDQ_UTeLMmU6tjNfwVLenWuJu_WNZEm3-uPNeOAidk,398
93
94
  accrete/contrib/user_registration/tests.py,sha256=mrbGGRNg5jwbTJtWWa7zSKdDyeB4vmgZCRc2nk6VY-g,60
@@ -102,7 +103,7 @@ accrete/migrations/0002_initial.py,sha256=dFOM7kdHlx7pVAh8cTDlZMtciN4O9Z547HAzEK
102
103
  accrete/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
103
104
  accrete/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
104
105
  accrete/utils/dates.py,sha256=XI58CqabLCC-Sg6qo5TPWh-pHuuZfDdGDU6KQeAMlGo,1066
105
- accrete-0.0.8.dist-info/METADATA,sha256=VTpnaGON1_zvz9UZkrvR5zU57Pe_cIoi5R4ZIdWO23I,4861
106
- accrete-0.0.8.dist-info/WHEEL,sha256=9QBuHhg6FNW7lppboF2vKVbCGTVzsFykgRQjjlajrhA,87
107
- accrete-0.0.8.dist-info/licenses/LICENSE,sha256=_7laeMIHnsd3Y2vJEXDYXq_PEXxIcjgJsGt8UIKTRWc,1057
108
- accrete-0.0.8.dist-info/RECORD,,
106
+ accrete-0.0.9.dist-info/METADATA,sha256=IL15guJBxntsuaxTZcq4onFXqzQH8hoYcRjG1wsroBw,4845
107
+ accrete-0.0.9.dist-info/WHEEL,sha256=9QBuHhg6FNW7lppboF2vKVbCGTVzsFykgRQjjlajrhA,87
108
+ accrete-0.0.9.dist-info/licenses/LICENSE,sha256=_7laeMIHnsd3Y2vJEXDYXq_PEXxIcjgJsGt8UIKTRWc,1057
109
+ accrete-0.0.9.dist-info/RECORD,,