Skip to content

Commit 44951fb

Browse files
authored
Merge pull request #5489 from stsewd/use-crispy-forms-advanced-settings
Regroup advanced settings
2 parents 5b8320b + 746fd52 commit 44951fb

File tree

5 files changed

+41
-18
lines changed

5 files changed

+41
-18
lines changed

readthedocs/projects/forms.py

+27-17
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
# -*- coding: utf-8 -*-
2-
31
"""Project forms."""
4-
52
from random import choice
63
from re import fullmatch
74
from urllib.parse import urlparse
85

6+
from crispy_forms.helper import FormHelper
7+
from crispy_forms.layout import Fieldset, Layout, HTML
98
from django import forms
109
from django.conf import settings
1110
from django.contrib.auth.models import User
@@ -22,7 +21,6 @@
2221
from readthedocs.oauth.models import RemoteRepository
2322
from readthedocs.projects import constants
2423
from readthedocs.projects.exceptions import ProjectSpamError
25-
from readthedocs.projects.templatetags.projects_tags import sort_version_aware
2624
from readthedocs.projects.models import (
2725
Domain,
2826
EmailHook,
@@ -32,6 +30,7 @@
3230
ProjectRelationship,
3331
WebHook,
3432
)
33+
from readthedocs.projects.templatetags.projects_tags import sort_version_aware
3534
from readthedocs.redirects.models import Redirect
3635

3736

@@ -196,27 +195,18 @@ class ProjectAdvancedForm(ProjectTriggerBuildMixin, ProjectForm):
196195

197196
"""Advanced project option form."""
198197

199-
python_interpreter = forms.ChoiceField(
200-
choices=constants.PYTHON_CHOICES,
201-
initial='python',
202-
help_text=_(
203-
'The Python interpreter used to create the virtual '
204-
'environment.',
205-
),
206-
)
207-
208198
class Meta:
209199
model = Project
210-
fields = (
211-
# Global settings.
200+
per_project_settings = (
212201
'default_version',
213202
'default_branch',
214203
'privacy_level',
215204
'analytics_code',
216205
'show_version_warning',
217206
'single_version',
218-
219-
# Options that can be set per-version using a config file.
207+
)
208+
# These that can be set per-version using a config file.
209+
per_version_settings = (
220210
'documentation_type',
221211
'requirements_file',
222212
'python_interpreter',
@@ -226,10 +216,30 @@ class Meta:
226216
'enable_pdf_build',
227217
'enable_epub_build',
228218
)
219+
fields = (
220+
*per_project_settings,
221+
*per_version_settings,
222+
)
229223

230224
def __init__(self, *args, **kwargs):
231225
super().__init__(*args, **kwargs)
232226

227+
self.helper = FormHelper()
228+
help_text = render_to_string(
229+
'projects/project_advanced_settings_helptext.html'
230+
)
231+
self.helper.layout = Layout(
232+
Fieldset(
233+
_("Global settings"),
234+
*self.Meta.per_project_settings,
235+
),
236+
Fieldset(
237+
_("Default settings"),
238+
HTML(help_text),
239+
*self.Meta.per_version_settings,
240+
),
241+
)
242+
233243
default_choice = (None, '-' * 9)
234244
all_versions = self.instance.versions.values_list(
235245
'identifier',

readthedocs/settings/base.py

+1
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ def INSTALLED_APPS(self): # noqa
8484
'textclassifier',
8585
'annoying',
8686
'django_extensions',
87+
'crispy_forms',
8788
'messages_extends',
8889
'django_elasticsearch_dsl',
8990

readthedocs/templates/projects/project_advanced.html

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
{% extends "projects/project_edit_base.html" %}
22
{% load i18n %}
3+
{% load crispy_forms_tags %}
34

45
{% block project-advanced-active %}active{% endblock %}
56
{% block nav-dashboard %} class="active"{% endblock %}
@@ -13,7 +14,7 @@
1314

1415
{% block project_edit_content %}
1516
<form method="post" action=".">{% csrf_token %}
16-
{{ form.as_p }}
17+
{% crispy form %}
1718
<p>
1819
<input style="display: inline;" type="submit" value="{% trans "Save" %}">
1920
</p>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{% load i18n %}
2+
<p class="empty">
3+
{% blocktrans trimmed with config_file_link="https://docs.readthedocs.io/page/config-file/v2.html" %}
4+
These settings can be configured using a
5+
<a href="{{ config_file_link }}">configuration file</a>.
6+
That's the recommended way to set up your project.
7+
Settings in the configuration
8+
file override the settings listed here.
9+
{% endblocktrans %}
10+
</p>

requirements/pip.txt

+1
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ stripe==2.22.0
7373
git+https://github.com/mozilla/unicode-slugify@b696c37#egg=unicode-slugify
7474

7575
django-formtools==2.1
76+
django-crispy-forms==1.7.2
7677

7778
# docker is pinned to 3.1.3 because we found some strange behavior
7879
# related to timeouts on EXEC with 3.2.1 and 3.3.0 that's not present

0 commit comments

Comments
 (0)