admin: show object's docstring on inheritance based lists
This commit is contained in:
		| @ -26,7 +26,12 @@ | |||||||
|                     <ul class="pf-c-dropdown__menu" hidden> |                     <ul class="pf-c-dropdown__menu" hidden> | ||||||
|                         {% for type, name in types.items %} |                         {% for type, name in types.items %} | ||||||
|                         <li> |                         <li> | ||||||
|                             <a class="pf-c-dropdown__menu-item" href="{% url 'passbook_admin:policy-create' %}?type={{ type }}&back={{ request.get_full_path }}">{{ name }}</a> |                             <a class="pf-c-dropdown__menu-item" href="{% url 'passbook_admin:policy-create' %}?type={{ type }}&back={{ request.get_full_path }}"> | ||||||
|  |                                 {{ name|verbose_name }}<br> | ||||||
|  |                                 <small> | ||||||
|  |                                     {{ trans|doc }} | ||||||
|  |                                 </small> | ||||||
|  |                             </a> | ||||||
|                         </li> |                         </li> | ||||||
|                         {% endfor %} |                         {% endfor %} | ||||||
|                     </ul> |                     </ul> | ||||||
| @ -92,7 +97,12 @@ | |||||||
|                     {% for type, name in types.items %} |                     {% for type, name in types.items %} | ||||||
|                     <li> |                     <li> | ||||||
|                         <a class="pf-c-dropdown__menu-item" |                         <a class="pf-c-dropdown__menu-item" | ||||||
|                             href="{% url 'passbook_admin:policy-create' %}?type={{ type }}&back={{ request.get_full_path }}">{{ name }}</a> |                             href="{% url 'passbook_admin:policy-create' %}?type={{ type }}&back={{ request.get_full_path }}"> | ||||||
|  |                             {{ name|verbose_name }}<br> | ||||||
|  |                             <small> | ||||||
|  |                                 {{ trans|doc }} | ||||||
|  |                             </small> | ||||||
|  |                         </a> | ||||||
|                     </li> |                     </li> | ||||||
|                     {% endfor %} |                     {% endfor %} | ||||||
|                 </ul> |                 </ul> | ||||||
|  | |||||||
| @ -28,7 +28,12 @@ | |||||||
|                         {% for type, name in types.items %} |                         {% for type, name in types.items %} | ||||||
|                         <li> |                         <li> | ||||||
|                             <a class="pf-c-dropdown__menu-item" |                             <a class="pf-c-dropdown__menu-item" | ||||||
|                                 href="{% url 'passbook_admin:property-mapping-create' %}?type={{ type }}&back={{ request.get_full_path }}">{{ name }}</a> |                                 href="{% url 'passbook_admin:property-mapping-create' %}?type={{ type }}&back={{ request.get_full_path }}"> | ||||||
|  |                                 {{ name|verbose_name }}<br> | ||||||
|  |                                 <small> | ||||||
|  |                                     {{ trans|doc }} | ||||||
|  |                                 </small> | ||||||
|  |                             </a> | ||||||
|                         </li> |                         </li> | ||||||
|                         {% endfor %} |                         {% endfor %} | ||||||
|                     </ul> |                     </ul> | ||||||
| @ -86,7 +91,12 @@ | |||||||
|                     {% for type, name in types.items %} |                     {% for type, name in types.items %} | ||||||
|                     <li> |                     <li> | ||||||
|                         <a class="pf-c-dropdown__menu-item" |                         <a class="pf-c-dropdown__menu-item" | ||||||
|                             href="{% url 'passbook_admin:property-mapping-create' %}?type={{ type }}&back={{ request.get_full_path }}">{{ name }}</a> |                             href="{% url 'passbook_admin:property-mapping-create' %}?type={{ type }}&back={{ request.get_full_path }}"> | ||||||
|  |                             {{ name|verbose_name }}<br> | ||||||
|  |                             <small> | ||||||
|  |                                 {{ trans|doc }} | ||||||
|  |                             </small> | ||||||
|  |                         </a> | ||||||
|                     </li> |                     </li> | ||||||
|                     {% endfor %} |                     {% endfor %} | ||||||
|                 </ul> |                 </ul> | ||||||
|  | |||||||
| @ -28,7 +28,12 @@ | |||||||
|                     <ul class="pf-c-dropdown__menu" hidden> |                     <ul class="pf-c-dropdown__menu" hidden> | ||||||
|                         {% for type, name in types.items %} |                         {% for type, name in types.items %} | ||||||
|                         <li> |                         <li> | ||||||
|                             <a class="pf-c-dropdown__menu-item" href="{% url 'passbook_admin:provider-create' %}?type={{ type }}&back={{ request.get_full_path }}">{{ name }}</a> |                             <a class="pf-c-dropdown__menu-item" href="{% url 'passbook_admin:provider-create' %}?type={{ type }}&back={{ request.get_full_path }}"> | ||||||
|  |                                 {{ name|verbose_name }} | ||||||
|  |                                 <small> | ||||||
|  |                                     {{ trans|doc }} | ||||||
|  |                                 </small> | ||||||
|  |                             </a> | ||||||
|                         </li> |                         </li> | ||||||
|                         {% endfor %} |                         {% endfor %} | ||||||
|                     </ul> |                     </ul> | ||||||
| @ -104,7 +109,12 @@ | |||||||
|                 <ul class="pf-c-dropdown__menu" hidden> |                 <ul class="pf-c-dropdown__menu" hidden> | ||||||
|                     {% for type, name in types.items %} |                     {% for type, name in types.items %} | ||||||
|                     <li> |                     <li> | ||||||
|                         <a class="pf-c-dropdown__menu-item" href="{% url 'passbook_admin:provider-create' %}?type={{ type }}&back={{ request.get_full_path }}">{{ name }}</a> |                         <a class="pf-c-dropdown__menu-item" href="{% url 'passbook_admin:provider-create' %}?type={{ type }}&back={{ request.get_full_path }}"> | ||||||
|  |                             {{ name|verbose_name }}<br> | ||||||
|  |                             <small> | ||||||
|  |                                 {{ trans|doc }} | ||||||
|  |                             </small> | ||||||
|  |                         </a> | ||||||
|                     </li> |                     </li> | ||||||
|                     {% endfor %} |                     {% endfor %} | ||||||
|                 </ul> |                 </ul> | ||||||
|  | |||||||
| @ -28,7 +28,12 @@ | |||||||
|                     <ul class="pf-c-dropdown__menu" hidden> |                     <ul class="pf-c-dropdown__menu" hidden> | ||||||
|                         {% for type, name in types.items %} |                         {% for type, name in types.items %} | ||||||
|                         <li> |                         <li> | ||||||
|                             <a class="pf-c-dropdown__menu-item" href="{% url 'passbook_admin:source-create' %}?type={{ type }}&back={{ request.get_full_path }}">{{ name }}</a> |                             <a class="pf-c-dropdown__menu-item" href="{% url 'passbook_admin:source-create' %}?type={{ type }}&back={{ request.get_full_path }}"> | ||||||
|  |                                 {{ name|verbose_name }}<br> | ||||||
|  |                                 <small> | ||||||
|  |                                     {{ trans|doc }} | ||||||
|  |                                 </small> | ||||||
|  |                             </a> | ||||||
|                         </li> |                         </li> | ||||||
|                         {% endfor %} |                         {% endfor %} | ||||||
|                     </ul> |                     </ul> | ||||||
| @ -98,7 +103,12 @@ | |||||||
|                 <ul class="pf-c-dropdown__menu" hidden> |                 <ul class="pf-c-dropdown__menu" hidden> | ||||||
|                     {% for type, name in types.items %} |                     {% for type, name in types.items %} | ||||||
|                     <li> |                     <li> | ||||||
|                         <a class="pf-c-dropdown__menu-item" href="{% url 'passbook_admin:source-create' %}?type={{ type }}&back={{ request.get_full_path }}">{{ name }}</a> |                         <a class="pf-c-dropdown__menu-item" href="{% url 'passbook_admin:source-create' %}?type={{ type }}&back={{ request.get_full_path }}"> | ||||||
|  |                             {{ name|verbose_name }}<br> | ||||||
|  |                             <small> | ||||||
|  |                                 {{ trans|doc }} | ||||||
|  |                             </small> | ||||||
|  |                         </a> | ||||||
|                     </li> |                     </li> | ||||||
|                     {% endfor %} |                     {% endfor %} | ||||||
|                 </ul> |                 </ul> | ||||||
|  | |||||||
| @ -28,7 +28,12 @@ | |||||||
|                     <ul class="pf-c-dropdown__menu" hidden> |                     <ul class="pf-c-dropdown__menu" hidden> | ||||||
|                         {% for type, name in types.items %} |                         {% for type, name in types.items %} | ||||||
|                         <li> |                         <li> | ||||||
|                             <a class="pf-c-dropdown__menu-item" href="{% url 'passbook_admin:stage-create' %}?type={{ type }}&back={{ request.get_full_path }}">{{ name }}</a> |                             <a class="pf-c-dropdown__menu-item" href="{% url 'passbook_admin:stage-create' %}?type={{ type }}&back={{ request.get_full_path }}"> | ||||||
|  |                                 {{ name|verbose_name }}<br> | ||||||
|  |                                 <small> | ||||||
|  |                                     {{ trans|doc }} | ||||||
|  |                                 </small> | ||||||
|  |                             </a> | ||||||
|                         </li> |                         </li> | ||||||
|                         {% endfor %} |                         {% endfor %} | ||||||
|                     </ul> |                     </ul> | ||||||
| @ -93,7 +98,12 @@ | |||||||
|                     {% for type, name in types.items %} |                     {% for type, name in types.items %} | ||||||
|                     <li> |                     <li> | ||||||
|                         <a class="pf-c-dropdown__menu-item" |                         <a class="pf-c-dropdown__menu-item" | ||||||
|                             href="{% url 'passbook_admin:stage-create' %}?type={{ type }}&back={{ request.get_full_path }}">{{ name }}</a> |                             href="{% url 'passbook_admin:stage-create' %}?type={{ type }}&back={{ request.get_full_path }}"> | ||||||
|  |                             {{ name|verbose_name }}<br> | ||||||
|  |                             <small> | ||||||
|  |                                 {{ trans|doc }} | ||||||
|  |                             </small> | ||||||
|  |                         </a> | ||||||
|                     </li> |                     </li> | ||||||
|                     {% endfor %} |                     {% endfor %} | ||||||
|                 </ul> |                 </ul> | ||||||
|  | |||||||
| @ -4,9 +4,15 @@ | |||||||
| {% load i18n %} | {% load i18n %} | ||||||
|  |  | ||||||
| {% block above_form %} | {% block above_form %} | ||||||
| <h1>{% blocktrans with type=form|form_verbose_name %}Create {{ type }}{% endblocktrans %}</h1> | <h1> | ||||||
|  |     {% blocktrans with type=form|form_verbose_name|title %} | ||||||
|  |     Create {{ type }} | ||||||
|  |     {% endblocktrans %} | ||||||
|  | </h1> | ||||||
| {% endblock %} | {% endblock %} | ||||||
|  |  | ||||||
| {% block action %} | {% block action %} | ||||||
| {% blocktrans with type=form|form_verbose_name %}Create {{ type }}{% endblocktrans %} | {% blocktrans with type=form|form_verbose_name|title %} | ||||||
|  | Create {{ type }} | ||||||
|  | {% endblocktrans %} | ||||||
| {% endblock %} | {% endblock %} | ||||||
|  | |||||||
| @ -4,9 +4,15 @@ | |||||||
| {% load i18n %} | {% load i18n %} | ||||||
|  |  | ||||||
| {% block above_form %} | {% block above_form %} | ||||||
| <h1>{% blocktrans with type=form|form_verbose_name %}Update {{ type }}{% endblocktrans %}</h1> | <h1> | ||||||
|  |     {% blocktrans with type=form|form_verbose_name|title inst=form.instance %} | ||||||
|  |     Update {{ type }}: {{ inst }} | ||||||
|  |     {% endblocktrans %} | ||||||
|  | </h1> | ||||||
| {% endblock %} | {% endblock %} | ||||||
|  |  | ||||||
| {% block action %} | {% block action %} | ||||||
| {% blocktrans with type=form|form_verbose_name %}Update {{ type }}{% endblocktrans %} | {% blocktrans with type=form|form_verbose_name|title %} | ||||||
|  | Update {{ type }} | ||||||
|  | {% endblocktrans %} | ||||||
| {% endblock %} | {% endblock %} | ||||||
|  | |||||||
| @ -30,7 +30,7 @@ class PolicyListView(LoginRequiredMixin, PermissionListMixin, ListView): | |||||||
|  |  | ||||||
|     def get_context_data(self, **kwargs): |     def get_context_data(self, **kwargs): | ||||||
|         kwargs["types"] = { |         kwargs["types"] = { | ||||||
|             x.__name__: x._meta.verbose_name for x in all_subclasses(Policy) |             x.__name__: x for x in all_subclasses(Policy) | ||||||
|         } |         } | ||||||
|         return super().get_context_data(**kwargs) |         return super().get_context_data(**kwargs) | ||||||
|  |  | ||||||
|  | |||||||
| @ -27,7 +27,7 @@ class PropertyMappingListView(LoginRequiredMixin, PermissionListMixin, ListView) | |||||||
|  |  | ||||||
|     def get_context_data(self, **kwargs): |     def get_context_data(self, **kwargs): | ||||||
|         kwargs["types"] = { |         kwargs["types"] = { | ||||||
|             x.__name__: x._meta.verbose_name for x in all_subclasses(PropertyMapping) |             x.__name__: x for x in all_subclasses(PropertyMapping) | ||||||
|         } |         } | ||||||
|         return super().get_context_data(**kwargs) |         return super().get_context_data(**kwargs) | ||||||
|  |  | ||||||
|  | |||||||
| @ -27,7 +27,7 @@ class ProviderListView(LoginRequiredMixin, PermissionListMixin, ListView): | |||||||
|  |  | ||||||
|     def get_context_data(self, **kwargs): |     def get_context_data(self, **kwargs): | ||||||
|         kwargs["types"] = { |         kwargs["types"] = { | ||||||
|             x.__name__: x._meta.verbose_name for x in all_subclasses(Provider) |             x.__name__: x for x in all_subclasses(Provider) | ||||||
|         } |         } | ||||||
|         return super().get_context_data(**kwargs) |         return super().get_context_data(**kwargs) | ||||||
|  |  | ||||||
|  | |||||||
| @ -27,7 +27,7 @@ class SourceListView(LoginRequiredMixin, PermissionListMixin, ListView): | |||||||
|  |  | ||||||
|     def get_context_data(self, **kwargs): |     def get_context_data(self, **kwargs): | ||||||
|         kwargs["types"] = { |         kwargs["types"] = { | ||||||
|             x.__name__: x._meta.verbose_name for x in all_subclasses(Source) |             x.__name__: x for x in all_subclasses(Source) | ||||||
|         } |         } | ||||||
|         return super().get_context_data(**kwargs) |         return super().get_context_data(**kwargs) | ||||||
|  |  | ||||||
|  | |||||||
| @ -27,7 +27,7 @@ class StageListView(LoginRequiredMixin, PermissionListMixin, ListView): | |||||||
|  |  | ||||||
|     def get_context_data(self, **kwargs): |     def get_context_data(self, **kwargs): | ||||||
|         kwargs["types"] = { |         kwargs["types"] = { | ||||||
|             x.__name__: x._meta.verbose_name for x in all_subclasses(Stage) |             x.__name__: x for x in all_subclasses(Stage) | ||||||
|         } |         } | ||||||
|         return super().get_context_data(**kwargs) |         return super().get_context_data(**kwargs) | ||||||
|  |  | ||||||
|  | |||||||
| @ -100,3 +100,8 @@ def debug(obj) -> str: | |||||||
|     """Output object to logger""" |     """Output object to logger""" | ||||||
|     LOGGER.debug(obj) |     LOGGER.debug(obj) | ||||||
|     return "" |     return "" | ||||||
|  |  | ||||||
|  | @register.filter | ||||||
|  | def doc(obj) -> str: | ||||||
|  |     """Return docstring of object""" | ||||||
|  |     return obj.__doc__ | ||||||
|  | |||||||
| @ -13,7 +13,7 @@ LOGGER = get_logger() | |||||||
|  |  | ||||||
|  |  | ||||||
| class PasswordExpiryPolicy(Policy): | class PasswordExpiryPolicy(Policy): | ||||||
|     """If password change date is more than x days in the past, call set_unusable_password |     """If password change date is more than x days in the past, invalidate the user's password | ||||||
|     and show a notice""" |     and show a notice""" | ||||||
|  |  | ||||||
|     deny_only = models.BooleanField(default=False) |     deny_only = models.BooleanField(default=False) | ||||||
|  | |||||||
							
								
								
									
										33
									
								
								passbook/sources/oauth/migrations/0002_auto_20200520_1108.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								passbook/sources/oauth/migrations/0002_auto_20200520_1108.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,33 @@ | |||||||
|  | # Generated by Django 3.0.6 on 2020-05-20 11:08 | ||||||
|  |  | ||||||
|  | from django.db import migrations, models | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class Migration(migrations.Migration): | ||||||
|  |  | ||||||
|  |     dependencies = [ | ||||||
|  |         ('passbook_sources_oauth', '0001_initial'), | ||||||
|  |     ] | ||||||
|  |  | ||||||
|  |     operations = [ | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name='oauthsource', | ||||||
|  |             name='access_token_url', | ||||||
|  |             field=models.CharField(help_text='URL used by passbook to retrive tokens.', max_length=255, verbose_name='Access Token URL'), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name='oauthsource', | ||||||
|  |             name='request_token_url', | ||||||
|  |             field=models.CharField(blank=True, help_text='URL used to request the initial token. This URL is only required for OAuth 1.', max_length=255, verbose_name='Request Token URL'), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name='oauthsource', | ||||||
|  |             name='authorization_url', | ||||||
|  |             field=models.CharField(help_text='URL the user is redirect to to conest the flow.', max_length=255, verbose_name='Authorization URL'), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name='oauthsource', | ||||||
|  |             name='profile_url', | ||||||
|  |             field=models.CharField(help_text='URL used by passbook to get user information.', max_length=255, verbose_name='Profile URL'), | ||||||
|  |         ), | ||||||
|  |     ] | ||||||
| @ -14,15 +14,20 @@ class OAuthSource(Source): | |||||||
|  |  | ||||||
|     provider_type = models.CharField(max_length=255) |     provider_type = models.CharField(max_length=255) | ||||||
|     request_token_url = models.CharField( |     request_token_url = models.CharField( | ||||||
|         blank=True, max_length=255, verbose_name=_("Request Token URL") |         blank=True, max_length=255, verbose_name=_("Request Token URL"), | ||||||
|  |         help_text=_("URL used to request the initial token. This URL is only required for OAuth 1.") | ||||||
|     ) |     ) | ||||||
|     authorization_url = models.CharField( |     authorization_url = models.CharField( | ||||||
|         max_length=255, verbose_name=_("Authorization URL") |         max_length=255, verbose_name=_("Authorization URL"), | ||||||
|  |         help_text=_("URL the user is redirect to to conest the flow.") | ||||||
|     ) |     ) | ||||||
|     access_token_url = models.CharField( |     access_token_url = models.CharField( | ||||||
|         max_length=255, verbose_name=_("Access Token URL") |         max_length=255, verbose_name=_("Access Token URL"), | ||||||
|  |         help_text=_("URL used by passbook to retrive tokens.") | ||||||
|     ) |     ) | ||||||
|     profile_url = models.CharField(max_length=255, verbose_name=_("Profile URL")) |     profile_url = models.CharField( | ||||||
|  |         max_length=255, verbose_name=_("Profile URL"), | ||||||
|  |         help_text=_("URL used by passbook to get user information.")) | ||||||
|     consumer_key = models.TextField() |     consumer_key = models.TextField() | ||||||
|     consumer_secret = models.TextField() |     consumer_secret = models.TextField() | ||||||
|  |  | ||||||
| @ -140,6 +145,17 @@ class AzureADOAuthSource(OAuthSource): | |||||||
|         verbose_name = _("Azure AD OAuth Source") |         verbose_name = _("Azure AD OAuth Source") | ||||||
|         verbose_name_plural = _("Azure AD OAuth Sources") |         verbose_name_plural = _("Azure AD OAuth Sources") | ||||||
|  |  | ||||||
|  | class OpenIDOAuthSource(OAuthSource): | ||||||
|  |     """Abstract subclass of OAuthSource to specify OpenID Form""" | ||||||
|  |  | ||||||
|  |     form = "passbook.sources.oauth.forms.OAuthSourceForm" | ||||||
|  |  | ||||||
|  |     class Meta: | ||||||
|  |  | ||||||
|  |         abstract = True | ||||||
|  |         verbose_name = _("OpenID OAuth Source") | ||||||
|  |         verbose_name_plural = _("OpenID OAuth Sources") | ||||||
|  |  | ||||||
|  |  | ||||||
| class UserOAuthSourceConnection(UserSourceConnection): | class UserOAuthSourceConnection(UserSourceConnection): | ||||||
|     """Authorized remote OAuth provider.""" |     """Authorized remote OAuth provider.""" | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	 Jens Langhammer
					Jens Langhammer