From c527fd1f14c27855a37f2e8ac5346ce8d940ced2 Mon Sep 17 00:00:00 2001 From: Tudor Florea Date: Thu, 16 Oct 2014 03:05:19 +0200 Subject: initial commit for Enea Linux 4.0-140929 Migrated from the internal git server on the daisy-enea-point-release branch Signed-off-by: Tudor Florea --- .../toaster/toastergui/templatetags/projecttags.py | 255 +++++++++++++++++++++ 1 file changed, 255 insertions(+) create mode 100644 bitbake/lib/toaster/toastergui/templatetags/projecttags.py (limited to 'bitbake/lib/toaster/toastergui/templatetags/projecttags.py') diff --git a/bitbake/lib/toaster/toastergui/templatetags/projecttags.py b/bitbake/lib/toaster/toastergui/templatetags/projecttags.py new file mode 100644 index 0000000000..be75b214ac --- /dev/null +++ b/bitbake/lib/toaster/toastergui/templatetags/projecttags.py @@ -0,0 +1,255 @@ +# +# ex:ts=4:sw=4:sts=4:et +# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +# +# BitBake Toaster Implementation +# +# Copyright (C) 2013 Intel Corporation +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +from datetime import datetime, timedelta +import re +from django import template +from django.utils import timezone +from django.template.defaultfilters import filesizeformat + +register = template.Library() + +@register.simple_tag +def time_difference(start_time, end_time): + return end_time - start_time + +@register.filter(name = 'sectohms') +def sectohms(time): + try: + tdsec = int(time) + except ValueError: + tdsec = 0 + hours = int(tdsec / 3600) + return "%02d:%02d:%02d" % (hours, int((tdsec - (hours * 3600))/ 60), int(tdsec) % 60) + +@register.assignment_tag +def query(qs, **kwargs): + """ template tag which allows queryset filtering. Usage: + {% query books author=author as mybooks %} + {% for book in mybooks %} + ... + {% endfor %} + """ + return qs.filter(**kwargs) + +@register.filter +def divide(value, arg): + if int(arg) == 0: + return -1 + return int(value) / int(arg) + +@register.filter +def multiply(value, arg): + return int(value) * int(arg) + +@register.assignment_tag +def datecompute(delta, start = timezone.now()): + return start + timedelta(delta) + + +@register.filter(name = 'sortcols') +def sortcols(tablecols): + return sorted(tablecols, key = lambda t: t['name']) + +@register.filter +def task_color(task_object, show_green=False): + """ Return css class depending on Task execution status and execution outcome. + By default, green is not returned for executed and successful tasks; + show_green argument should be True to get green color. + """ + if not task_object.task_executed: + return 'class=muted' + elif task_object.outcome == task_object.OUTCOME_FAILED: + return 'class=error' + elif task_object.outcome == task_object.OUTCOME_SUCCESS and show_green: + return 'class=green' + else: + return '' + +@register.filter +def filtered_icon(options, filter): + """Returns btn-primary if the filter matches one of the filter options + """ + for option in options: + if filter == option[1]: + return "btn-primary" + return "" + +@register.filter +def filtered_tooltip(options, filter): + """Returns tooltip for the filter icon if the filter matches one of the filter options + """ + for option in options: + if filter == option[1]: + return "Showing only %s"%option[0] + return "" + +@register.filter +def format_none_and_zero(value): + """Return empty string if the value is None, zero or Not Applicable + """ + return "" if (not value) or (value == 0) or (value == "0") or (value == 'Not Applicable') else value + +@register.filter +def filtered_filesizeformat(value): + """ + If the value is -1 return an empty string. Otherwise, + change output from fileformatsize to suppress trailing '.0' + and change 'bytes' to 'B'. + """ + if value == -1: + return '' + + return filesizeformat(value).replace("bytes", "B") + +@register.filter +def filtered_packagespec(value): + """Strip off empty version and revision""" + return re.sub(r'(--$)', '', value) + +@register.filter +def check_filter_status(options, filter): + """Check if the active filter is among the available options, and return 'checked' + if filter is not active. + Used in FilterDialog to select the first radio button if the filter is not active. + """ + for option in options: + if filter == option[1]: + return "" + return "checked" + +@register.filter +def variable_parent_name(value): + """ filter extended variable names to the parent name + """ + value=re.sub('_\$.*', '', value) + return re.sub('_[a-z].*', '', value) + +@register.filter +def filter_setin_files(file_list,matchstr): + """ filter/search the 'set in' file lists. Note + that this output is not autoescaped to allow + the

marks, but this is safe as the data + is file paths + """ + + # no filters, show last file (if any) + if matchstr == ":": + if file_list: + return file_list[len(file_list)-1].file_name + else: + return '' + + search, filter = matchstr.partition(':')[::2] + htmlstr="" + # match only filters + if search == '': + for i in range(len(file_list)): + if re.search(filter, file_list[i].file_name): + if htmlstr.find(file_list[i].file_name + "

") < 0: + htmlstr += file_list[i].file_name + "

" + return htmlstr + + # match only search string, plus always last file + if filter == "": + for i in range(len(file_list)-1): + if re.search(search,file_list[i].file_name): + if htmlstr.find(file_list[i].file_name + "

") < 0: + htmlstr += file_list[i].file_name + "

" + if htmlstr.find(file_list[len(file_list)-1].file_name) < 0: + htmlstr += file_list[len(file_list)-1].file_name + return htmlstr + + # match filter or search string + for i in range(len(file_list)): + if re.search(filter, file_list[i].file_name) or re.search(search,file_list[i].file_name): + if htmlstr.find(file_list[i].file_name + "

") < 0: + htmlstr += file_list[i].file_name + "

" + return htmlstr + + +@register.filter +def string_slice(strvar,slicevar): + """ slice a string with |string_slice:'[first]:[last]' + """ + first,last= slicevar.partition(':')[::2] + if first=='': + return strvar[:int(last)] + elif last=='': + return strvar[int(first):] + else: + return strvar[int(first):int(last)] + +@register.filter +def string_remove_regex(value,ex): + """ remove sub-string of string that matches regex + """ + return re.sub(ex, '', value) + +@register.filter +def filtered_installedsize(size, installed_size): + """If package.installed_size not null and not empty return it, + else return package.size + """ + return size if (installed_size == 0) or (installed_size == "") or (installed_size == None) else installed_size + +@register.filter +def filtered_packageversion(version, revision): + """ Emit "version-revision" if version and revision are not null + else "version" if version is not null + else "" + """ + return "" if (not version or version == "") else version if (not revision or revision == "") else version + "-" + revision + +@register.filter +def filter_sizeovertotal(package_object, total_size): + """ Return the % size of the package over the total size argument + formatted nicely. + """ + size = package_object.installed_size + if size == None or size == '': + size = package_object.size + + return '{:.1%}'.format(float(size)/float(total_size)) + +from django.utils.safestring import mark_safe +@register.filter +def format_vpackage_rowclass(size): + if size == -1: + return mark_safe('class="muted"') + return '' + +@register.filter +def format_vpackage_namehelp(name): + r = name + ' ' + r += '' + r += '' + return mark_safe(r) + +@register.filter +def get_dict_value(dictionary, key): + """ return the value of a dictionary key + """ + try: + return dictionary[key] + except (KeyError, IndexError): + return '' -- cgit v1.2.3-54-g00ecf