diff --git a/orchestra/apps/domains/models.py b/orchestra/apps/domains/models.py
index 71b1c540..6e0e3f8c 100644
--- a/orchestra/apps/domains/models.py
+++ b/orchestra/apps/domains/models.py
@@ -54,7 +54,7 @@ class Domain(models.Model):
def get_subdomains(self):
""" proxy method, needed for input validation, see helpers.domain_for_validation """
- return self.origin.subdomain_set.all()
+ return self.origin.subdomain_set.all().prefetch_related('records')
def get_top(self):
return type(self).get_top_domain(self.name)
@@ -62,7 +62,7 @@ class Domain(models.Model):
def render_zone(self):
origin = self.origin
zone = origin.render_records()
- for subdomain in origin.get_subdomains().prefetch_related('records'):
+ for subdomain in origin.get_subdomains():
zone += subdomain.render_records()
return zone
diff --git a/orchestra/apps/resources/forms.py b/orchestra/apps/resources/forms.py
index 74e7a916..080aff95 100644
--- a/orchestra/apps/resources/forms.py
+++ b/orchestra/apps/resources/forms.py
@@ -17,7 +17,7 @@ class ResourceForm(forms.ModelForm):
self.resource = kwargs.pop('resource', None)
super(ResourceForm, self).__init__(*args, **kwargs)
if self.resource:
- self.fields['verbose_name'].initial = self.resource.verbose_name
+ self.fields['verbose_name'].initial = self.resource.get_verbose_name()
self.fields['unit'].initial = self.resource.unit
if self.resource.on_demand:
self.fields['allocated'].required = False
diff --git a/orchestra/apps/resources/models.py b/orchestra/apps/resources/models.py
index 639675a4..e6458b46 100644
--- a/orchestra/apps/resources/models.py
+++ b/orchestra/apps/resources/models.py
@@ -121,6 +121,9 @@ class Resource(models.Model):
def get_scale(self):
return eval(self.scale)
+
+ def get_verbose_name(self):
+ return self.verbose_name or self.name
class ResourceData(models.Model):
diff --git a/orchestra/apps/services/admin.py b/orchestra/apps/services/admin.py
index f9be671c..15d878bc 100644
--- a/orchestra/apps/services/admin.py
+++ b/orchestra/apps/services/admin.py
@@ -22,7 +22,9 @@ class PlanAdmin(ExtendedModelAdmin):
list_display = ('name', 'is_default', 'is_combinable', 'allow_multiple')
list_filter = ('is_default', 'is_combinable', 'allow_multiple')
fields = ('verbose_name', 'name', 'is_default', 'is_combinable', 'allow_multiple')
- prepopulated_fields = {'name': ('verbose_name',)}
+ prepopulated_fields = {
+ 'name': ('verbose_name',)
+ }
change_readonly_fields = ('name',)
inlines = [RateInline]
diff --git a/orchestra/apps/websites/admin.py b/orchestra/apps/websites/admin.py
index 93fd52df..d15dde2e 100644
--- a/orchestra/apps/websites/admin.py
+++ b/orchestra/apps/websites/admin.py
@@ -84,6 +84,7 @@ class WebsiteAdmin(SelectAccountAdminMixin, ExtendedModelAdmin):
return '
'.join(domains)
display_domains.short_description = _("domains")
display_domains.allow_tags = True
+ display_domains.admin_order_field = 'domains'
def display_webapps(self, website):
webapps = []
diff --git a/orchestra/apps/websites/settings.py b/orchestra/apps/websites/settings.py
index fc7d0e7f..53a7d19e 100644
--- a/orchestra/apps/websites/settings.py
+++ b/orchestra/apps/websites/settings.py
@@ -26,11 +26,11 @@ WEBSITES_OPTIONS = getattr(settings, 'WEBSITES_OPTIONS', {
),
'redirect': (
_("HTTPD - Redirection"),
- _("[permanent] <website path> <destination URL>"),
+ _("[permanent] <website path> <destination URL>"),
r'^(permanent\s[^ ]+|[^ ]+)\s[^ ]+$',
),
'ssl_ca': (
- _("HTTPD - SSL CA"),
+ "HTTPD - SSL CA",
_("Filesystem path of the CA certificate file."),
r'^[^ ]+$'
),
@@ -45,21 +45,31 @@ WEBSITES_OPTIONS = getattr(settings, 'WEBSITES_OPTIONS', {
r'^[^ ]+$',
),
'sec_rule_remove': (
- _("HTTPD - SecRuleRemoveById"),
+ "HTTPD - SecRuleRemoveById",
_("Space separated ModSecurity rule IDs."),
r'^[0-9\s]+$',
),
'sec_engine': (
- _("HTTPD - Modsecurity engine"),
- _("On or Off, defaults to On"),
+ "HTTPD - Modsecurity engine",
+ _("On or Off, defaults to On"),
r'^(On|Off)$',
),
'user_group': (
- _("HTTPD - SuexecUserGroup"),
- _("Username and optional groupname (user [group])"),
+ "HTTPD - SuexecUserGroup",
+ _("user [group], username and optional groupname."),
# TODO validate existing user/group
r'^[\w/_]+(\s[\w/_]+)*$',
),
+ # TODO backend support
+ 'error_document': (
+ "HTTPD - ErrorDocumentRoot",
+ _("<error code> <URL/path/message>
"
+ " 500 http://foo.example.com/cgi-bin/tester
"
+ " 404 /cgi-bin/bad_urls.pl
"
+ " 401 /subscription_info.html
"
+ " 403 \"Sorry can't allow you access today\""),
+ r'[45]0[0-9]\s.*',
+ )
})