1
- # -*- coding: utf-8 -*-
2
-
3
1
"""Project forms."""
4
-
5
2
from random import choice
6
3
from re import fullmatch
7
4
from urllib .parse import urlparse
8
5
6
+ from crispy_forms .helper import FormHelper
7
+ from crispy_forms .layout import Fieldset , Layout , HTML
9
8
from django import forms
10
9
from django .conf import settings
11
10
from django .contrib .auth .models import User
22
21
from readthedocs .oauth .models import RemoteRepository
23
22
from readthedocs .projects import constants
24
23
from readthedocs .projects .exceptions import ProjectSpamError
25
- from readthedocs .projects .templatetags .projects_tags import sort_version_aware
26
24
from readthedocs .projects .models import (
27
25
Domain ,
28
26
EmailHook ,
32
30
ProjectRelationship ,
33
31
WebHook ,
34
32
)
33
+ from readthedocs .projects .templatetags .projects_tags import sort_version_aware
35
34
from readthedocs .redirects .models import Redirect
36
35
37
36
@@ -196,27 +195,18 @@ class ProjectAdvancedForm(ProjectTriggerBuildMixin, ProjectForm):
196
195
197
196
"""Advanced project option form."""
198
197
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
-
208
198
class Meta :
209
199
model = Project
210
- fields = (
211
- # Global settings.
200
+ per_project_settings = (
212
201
'default_version' ,
213
202
'default_branch' ,
214
203
'privacy_level' ,
215
204
'analytics_code' ,
216
205
'show_version_warning' ,
217
206
'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 = (
220
210
'documentation_type' ,
221
211
'requirements_file' ,
222
212
'python_interpreter' ,
@@ -226,10 +216,30 @@ class Meta:
226
216
'enable_pdf_build' ,
227
217
'enable_epub_build' ,
228
218
)
219
+ fields = (
220
+ * per_project_settings ,
221
+ * per_version_settings ,
222
+ )
229
223
230
224
def __init__ (self , * args , ** kwargs ):
231
225
super ().__init__ (* args , ** kwargs )
232
226
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
+
233
243
default_choice = (None , '-' * 9 )
234
244
all_versions = self .instance .versions .values_list (
235
245
'identifier' ,
0 commit comments