Minor improvements

This commit is contained in:
Marc Aymerich 2016-03-04 09:46:39 +00:00
parent 201608c49c
commit 6caf838549
7 changed files with 118 additions and 108 deletions

23
TODO.md
View File

@ -391,23 +391,6 @@ short URLS: https://github.com/rsvp/gitio
link backend help text variables to settings/#var_name
make python3 default python on the fucking docker container
autocomplete; on the form header and type="search"
To latest developers to post on this thread: I implemented the workaround I described in comment #14 nearly three months ago, and it has worked perfectly since then. While we would all prefer that "autocomplete=off" function properly at all times, it still functions properly if you include in your form an input element with any other autocomplete value.
I simply added this code to my layout:
<div style="display: none;">
<input type="text" id="PreventChromeAutocomplete" name="PreventChromeAutocomplete" autocomplete="address-level4" />
</div>
Once I did this, all of my "autocomplete=off" elements were respected by Chrome.
<input type="password" name="password" value="" style="display: none" />
http://makandracards.com/makandra/24933-chrome-34+-firefox-38+-ie11+-ignore-autocomplete-off
mkhomedir_helper or create ssh homes with bash.rc and such
# warnings if some plugins are disabled, like make routes red
@ -424,8 +407,6 @@ mkhomedir_helper or create ssh homes with bash.rc and such
# email usage -webkit-column-count:3;-moz-column-count:3;column-count:3;
# wordpressmu custom_url: set blog.domain
# validate_user on saas.wordpress to detect if username already exists before attempting to create a blog
@ -440,10 +421,6 @@ mkhomedir_helper or create ssh homes with bash.rc and such
shit_happend, otherwise schedule for first query
# Entry.objects.filter()[:1].first() (LIMIT 1)
# put "Coordinate Apache restart" inside a bash function for clarity
# show base and total desglosed
# Reverse lOgHistory order by date (lastest first)

View File

@ -89,7 +89,7 @@ def close_bills(modeladmin, request, queryset, action='close_bills'):
'formset': formset,
'obj': get_object_from_url(modeladmin, request),
}
templete = 'admin/orchestra/generic_confirmation.html'
template = 'admin/orchestra/generic_confirmation.html'
if action == 'close_send_download_bills':
template = 'admin/bills/bill/close_send_download_bills.html'
return render(request, template, context)

View File

@ -198,8 +198,9 @@ class BillAdmin(AccountAdminMixin, ExtendedModelAdmin):
change_list_template = 'admin/bills/change_list.html'
fieldsets = (
(None, {
'fields': ['number', 'type', 'amend_of_link', 'account_link', 'display_total',
'display_payment_state', 'is_sent', 'comments'],
'fields': ['number', 'type', 'amend_of_link', 'account_link',
'display_total_with_subtotals', 'display_payment_state',
'is_sent', 'comments'],
}),
(_("Dates"), {
'classes': ('collapse',),
@ -227,7 +228,7 @@ class BillAdmin(AccountAdminMixin, ExtendedModelAdmin):
)
readonly_fields = (
'number', 'display_total', 'is_sent', 'display_payment_state', 'created_on_display',
'closed_on_display', 'updated_on_display'
'closed_on_display', 'updated_on_display', 'display_total_with_subtotals',
)
inlines = [BillLineInline, ClosedBillLineInline]
date_hierarchy = 'closed_on'
@ -252,11 +253,24 @@ class BillAdmin(AccountAdminMixin, ExtendedModelAdmin):
num_lines.short_description = _("lines")
def display_total(self, bill):
return "%s &%s;" % (bill.compute_total(), settings.BILLS_CURRENCY.lower())
currency = settings.BILLS_CURRENCY.lower()
return '%s &%s;' % (bill.compute_total(), currency)
display_total.allow_tags = True
display_total.short_description = _("total")
display_total.admin_order_field = 'approx_total'
def display_total_with_subtotals(self, bill):
currency = settings.BILLS_CURRENCY.lower()
subtotals = []
for tax, subtotal in bill.compute_subtotals().items():
subtotals.append(_("Subtotal %s%% VAT %s &%s;") % (tax, subtotal[0], currency))
subtotals.append(_("Taxes %s%% VAT %s &%s;") % (tax, subtotal[1], currency))
subtotals = '\n'.join(subtotals)
return '<span title="%s">%s &%s;</span>' % (subtotals, bill.compute_total(), currency)
display_total_with_subtotals.allow_tags = True
display_total_with_subtotals.short_description = _("total")
display_total_with_subtotals.admin_order_field = 'approx_total'
def type_link(self, bill):
bill_type = bill.type.lower()
url = reverse('admin:bills_%s_changelist' % bill_type)

View File

@ -151,7 +151,8 @@ class WordpressMuBackend(ServiceController):
SELECT b.blog_id, b.domain, m.domain, b.path
FROM wp_domain_mapping AS m, wp_blogs AS b
WHERE m.blog_id = b.blog_id AND m.active AND %(IDENT)s;") )
if [[ ${existing[0]} != '' ]]; then
if [[ ${existing[0]} != "" ]]; then
echo "Existing blog with ID ${existing[0]}"
# Clear custom domain
if [[ "%(custom_domain)s" == "" ]]; then
mysql %(db_name)s --execute="
@ -168,21 +169,27 @@ class WordpressMuBackend(ServiceController):
WHERE m.blog_id = b.blog_id AND m.active AND %(IDENT)s;"
fi
elif [[ "%(custom_domain)s" != "" ]]; then
echo "Non existing blog with custom domain %(domain)s"
blog=( $(mysql -Nrs %(db_name)s --execute="
SELECT blog_id, path
FROM wp_blogs
WHERE domain = '%(domain)s';") )
mysql %(db_name)s --execute="
UPDATE wp_domain_mapping
SET active = 0
WHERE active AND blog_id = ${blog[0]};
INSERT INTO wp_domain_mapping
(blog_id, domain, active) VALUES (${blog[0]}, '%(custom_domain)s', 1);"
if [[ "${blog[1]}" != "%(custom_path)s" ]]; then
if [[ "${blog[0]}" != "" ]]; then
echo "Blog %(domain)s found, ID: ${blog[0]}"
mysql %(db_name)s --execute="
UPDATE wp_blogs
SET path = '%(custom_path)s'
WHERE blog_id = ${blog[0]};"
UPDATE wp_domain_mapping
SET active = 0
WHERE active AND blog_id = ${blog[0]};
INSERT INTO wp_domain_mapping
(blog_id, domain, active) VALUES (${blog[0]}, '%(custom_domain)s', 1);"
if [[ "${blog[1]}" != "%(custom_path)s" ]]; then
mysql %(db_name)s --execute="
UPDATE wp_blogs
SET path = '%(custom_path)s'
WHERE blog_id = ${blog[0]};"
fi
else
echo "Blog %(domain)s not found"
fi
fi""") % context
)
@ -207,6 +214,7 @@ class WordpressMuBackend(ServiceController):
})
return context
class WordpressMuTraffic(ApacheTrafficByHost):
__doc__ = ApacheTrafficByHost.__doc__
verbose_name = _("Wordpress MU Traffic")

View File

@ -140,10 +140,45 @@ class PHPBackend(WebAppServiceMixin, ServiceController):
def prepare(self):
super(PHPBackend, self).prepare()
# Coordinate apache restart with php backend in order not to overdo it
self.append(textwrap.dedent("""
backend="PHPBackend"
echo "$backend" >> /dev/shm/restart.apache2""")
BACKEND="PHPBackend"
echo "$BACKEND" >> /dev/shm/reload.apache2
function coordinate_apache_reload () {
# Coordinate Apache reload with other concurrent backends (e.g. Apache2Backend)
is_last=0
counter=0
while ! mv /dev/shm/reload.apache2 /dev/shm/reload.apache2.locked; do
sleep 0.1;
if [[ $counter -gt 4 ]]; then
echo "[ERROR]: Apache reload synchronization deadlocked!" >&2
exit 10
fi
counter=$(($counter+1))
done
state="$(grep -v "$BACKEND" /dev/shm/reload.apache2.locked)" || is_last=1
[[ $is_last -eq 0 ]] && {
echo "$state" | grep -v ' RELOAD$' || is_last=1
}
if [[ $is_last -eq 1 ]]; then
echo "[DEBUG]: Last backend to run, update: $UPDATED_APACHE, state: '$state'"
if [[ $UPDATED_APACHE -eq 1 || "$state" =~ .*RELOAD$ ]]; then
if service apache2 status > /dev/null; then
service apache2 reload
else
service apache2 start
fi
fi
rm /dev/shm/reload.apache2.locked
else
echo -n "$state" > /dev/shm/reload.apache2.locked
if [[ $UPDATED_APACHE -eq 1 ]]; then
echo -e "[DEBUG]: Apache will be reloaded by another backend:\\n${state}"
echo "$BACKEND RELOAD" >> /dev/shm/reload.apache2.locked
fi
mv /dev/shm/reload.apache2.locked /dev/shm/reload.apache2
fi
}""")
)
def commit(self):
@ -155,36 +190,7 @@ class PHPBackend(WebAppServiceMixin, ServiceController):
if [[ $UPDATED_FPM -eq 1 ]]; then
%(reload_pool)s
fi
# Coordinate Apache restart with other concurrent backends (e.g. Apache2Backend)
is_last=0
mv /dev/shm/restart.apache2 /dev/shm/restart.apache2.locked || {
sleep 0.2
mv /dev/shm/restart.apache2 /dev/shm/restart.apache2.locked
}
state="$(grep -v "$backend" /dev/shm/restart.apache2.locked)" || is_last=1
[[ $is_last -eq 0 ]] && {
echo "$state" | grep -v ' RESTART$' || is_last=1
}
if [[ $is_last -eq 1 ]]; then
echo "Last backend to run, update: $UPDATED_APACHE, state: '$state'"
if [[ $UPDATED_APACHE -eq 1 || "$state" =~ .*RESTART$ ]]; then
if service apache2 status > /dev/null; then
service apache2 reload
else
service apache2 start
fi
fi
rm /dev/shm/restart.apache2.locked
else
echo -n "$state" > /dev/shm/restart.apache2.locked
if [[ $UPDATED_APACHE -eq 1 ]]; then
echo -e "Apache will be restarted by another backend:\\n${state}"
echo "$backend RESTART" >> /dev/shm/restart.apache2.locked
fi
mv /dev/shm/restart.apache2.locked /dev/shm/restart.apache2
fi
# End of coordination
coordinate_apache_reload
""") % context
)
super(PHPBackend, self).commit()

View File

@ -108,7 +108,7 @@ class Apache2Backend(ServiceController):
apache_conf += self.render_redirect_https(context)
context['apache_conf'] = apache_conf.strip()
self.append(textwrap.dedent("""
# Generate Apache site config for %(site_name)s
# Generate Apache config for site %(site_name)s
read -r -d '' apache_conf << 'EOF' || true
%(apache_conf)s
EOF
@ -145,44 +145,49 @@ class Apache2Backend(ServiceController):
super(Apache2Backend, self).prepare()
# Coordinate apache restart with php backend in order not to overdo it
self.append(textwrap.dedent("""
backend="Apache2Backend"
echo "$backend" >> /dev/shm/restart.apache2""")
BACKEND="Apache2Backend"
echo "$BACKEND" >> /dev/shm/restart.apache2
function coordinate_apache_reload () {
# Coordinate Apache reload with other concurrent backends (e.g. PHPBackend)
is_last=0
counter=0
while ! mv /dev/shm/reload.apache2 /dev/shm/reload.apache2.locked; do
if [[ $counter -gt 4 ]]; then
echo "[ERROR]: Apache reload synchronization deadlocked!" >&2
exit 10
fi
counter=$(($counter+1))
sleep 0.1;
done
state="$(grep -v "$BACKEND" /dev/shm/reload.apache2.locked)" || is_last=1
[[ $is_last -eq 0 ]] && {
echo "$state" | grep -v ' RELOAD$' || is_last=1
}
if [[ $is_last -eq 1 ]]; then
echo "[DEBUG]: Last backend to run, update: $UPDATED_APACHE, state: '$state'"
if [[ $UPDATED_APACHE -eq 1 || "$state" =~ .*RELOAD$ ]]; then
if service apache2 status > /dev/null; then
service apache2 reload
else
service apache2 start
fi
fi
rm /dev/shm/reload.apache2.locked
else
echo -n "$state" > /dev/shm/reload.apache2.locked
if [[ $UPDATED_APACHE -eq 1 ]]; then
echo -e "[DEBUG]: Apache will be reloaded by another backend:\\n${state}"
echo "$BACKEND RELOAD" >> /dev/shm/reload.apache2.locked
fi
mv /dev/shm/reload.apache2.locked /dev/shm/reload.apache2
fi
}""")
)
def commit(self):
""" reload Apache2 if necessary """
self.append(textwrap.dedent("""
# Coordinate Apache restart with other concurrent backends (e.g. PHPBackend)
is_last=0
mv /dev/shm/restart.apache2 /dev/shm/restart.apache2.locked || {
sleep 0.2
mv /dev/shm/restart.apache2 /dev/shm/restart.apache2.locked
}
state="$(grep -v "$backend" /dev/shm/restart.apache2.locked)" || is_last=1
[[ $is_last -eq 0 ]] && {
echo "$state" | grep -v ' RESTART$' || is_last=1
}
if [[ $is_last -eq 1 ]]; then
echo "Last backend to run, update: $UPDATED_APACHE, state: '$state'"
if [[ $UPDATED_APACHE -eq 1 || "$state" =~ .*RESTART$ ]]; then
if service apache2 status > /dev/null; then
service apache2 reload
else
service apache2 start
fi
fi
rm /dev/shm/restart.apache2.locked
else
echo -n "$state" > /dev/shm/restart.apache2.locked
if [[ $UPDATED_APACHE -eq 1 ]]; then
echo -e "Apache will be restarted by another backend:\\n${state}"
echo "$backend RESTART" >> /dev/shm/restart.apache2.locked
fi
mv /dev/shm/restart.apache2.locked /dev/shm/restart.apache2
fi
# End of coordination
""")
)
self.append("coordinate_apache_reload")
super(Apache2Backend, self).commit()
def get_directives(self, directive, context):

View File

@ -7,7 +7,7 @@ celery==3.1.16
kombu==3.0.23
billiard==3.3.0.18
Markdown==2.4
djangorestframework==3.1.2
djangorestframework==3.3.2
ecdsa==0.11
Pygments==1.6
django-filter==0.7