mirror of
https://git.yoctoproject.org/poky
synced 2026-06-01 13:09:50 +00:00
bitbake: toaster: port Installed packages table to ToasterTable
(Bitbake rev: 2418c092abd9a503becf5e786125f8cdddd8652c) Signed-off-by: Michael Wood <michael.g.wood@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
b2a68f5511
commit
caae3b6206
@@ -19,8 +19,8 @@
|
|||||||
# with this program; if not, write to the Free Software Foundation, Inc.,
|
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
|
||||||
from orm.models import Build, Task
|
from orm.models import Build, Task, Target, Package
|
||||||
from django.db.models import Q
|
from django.db.models import Q, Sum
|
||||||
|
|
||||||
import toastergui.tables as tables
|
import toastergui.tables as tables
|
||||||
from toastergui.widgets import ToasterTable
|
from toastergui.widgets import ToasterTable
|
||||||
@@ -155,6 +155,65 @@ class BuiltPackagesTable(BuildTablesMixin, BuiltPackagesTableBase):
|
|||||||
self.columns = list(remove_dep_cols(self.columns))
|
self.columns = list(remove_dep_cols(self.columns))
|
||||||
|
|
||||||
|
|
||||||
|
class InstalledPackagesTable(BuildTablesMixin, BuiltPackagesTableBase):
|
||||||
|
""" Show all packages installed in an image """
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super(InstalledPackagesTable, self).__init__(*args, **kwargs)
|
||||||
|
self.title = "Installed Packages"
|
||||||
|
self.default_orderby = "name"
|
||||||
|
|
||||||
|
def make_package_list(self, target):
|
||||||
|
# The database design means that you get the intermediate objects and
|
||||||
|
# not package objects like you'd really want so we get them here
|
||||||
|
pkgs = target.target_installed_package_set.values_list('package',
|
||||||
|
flat=True)
|
||||||
|
return Package.objects.filter(pk__in=pkgs)
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super(InstalledPackagesTable,
|
||||||
|
self).get_context_data(**kwargs)
|
||||||
|
|
||||||
|
target = Target.objects.get(pk=kwargs['target_id'])
|
||||||
|
packages = self.make_package_list(target)
|
||||||
|
|
||||||
|
context['packages_sum'] = packages.aggregate(
|
||||||
|
Sum('installed_size'))['installed_size__sum']
|
||||||
|
|
||||||
|
context['target'] = target
|
||||||
|
return context
|
||||||
|
|
||||||
|
def setup_queryset(self, *args, **kwargs):
|
||||||
|
build = Build.objects.get(pk=kwargs['build_id'])
|
||||||
|
self.static_context_extra['build'] = build
|
||||||
|
|
||||||
|
target = Target.objects.get(pk=kwargs['target_id'])
|
||||||
|
self.queryset = self.make_package_list(target)
|
||||||
|
|
||||||
|
def setup_columns(self, *args, **kwargs):
|
||||||
|
super(InstalledPackagesTable, self).setup_columns(**kwargs)
|
||||||
|
self.add_column(title="Installed size",
|
||||||
|
static_data_name="installed_size",
|
||||||
|
static_data_template="{% load projecttags %}"
|
||||||
|
"{{data.size|filtered_filesizeformat}}",
|
||||||
|
orderable=True)
|
||||||
|
|
||||||
|
# Add the template to show installed name for installed packages
|
||||||
|
install_name_tmpl =\
|
||||||
|
('{{data.name}} '
|
||||||
|
'{% if data.installed_name and data.installed_name !='
|
||||||
|
' data.name %}'
|
||||||
|
'<span class="muted"> as {{data.installed_name}}</span>'
|
||||||
|
' <i class="icon-question-sign get-help hover-help"'
|
||||||
|
' title="{{data.name}} was renamed at packaging time and'
|
||||||
|
' was installed in your image as {{data.installed_name}}'
|
||||||
|
'"></i>{% endif %} ')
|
||||||
|
|
||||||
|
for column in self.columns:
|
||||||
|
if column['static_data_name'] == 'name':
|
||||||
|
column['static_data_template'] = install_name_tmpl
|
||||||
|
break
|
||||||
|
|
||||||
|
|
||||||
class BuiltRecipesTable(BuildTablesMixin):
|
class BuiltRecipesTable(BuildTablesMixin):
|
||||||
""" Table to show the recipes that have been built in this build """
|
""" Table to show the recipes that have been built in this build """
|
||||||
|
|
||||||
|
|||||||
@@ -102,7 +102,7 @@
|
|||||||
files from a previous build already exist in your
|
files from a previous build already exist in your
|
||||||
<code>.../poky/build/tmp/deploy</code>
|
<code>.../poky/build/tmp/deploy</code>
|
||||||
directory. You can
|
directory. You can
|
||||||
also <a href="{% url 'targetpkg' build.pk target.target.pk %}">view the
|
also <a href="{% url 'target' build.pk target.target.pk %}">view the
|
||||||
license manifest information</a> in Toaster.
|
license manifest information</a> in Toaster.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
@@ -115,7 +115,7 @@
|
|||||||
License manifest
|
License manifest
|
||||||
</dt>
|
</dt>
|
||||||
<dd>
|
<dd>
|
||||||
<a href="{% url 'targetpkg' build.pk target.target.pk %}">View in Toaster</a> |
|
<a href="{% url 'target' build.pk target.target.pk %}">View in Toaster</a> |
|
||||||
<a href="{% url 'build_artifact' build.pk 'licensemanifest' target.target.pk %}">Download</a></dd>
|
<a href="{% url 'build_artifact' build.pk 'licensemanifest' target.target.pk %}">Download</a></dd>
|
||||||
<dt>
|
<dt>
|
||||||
<i class="icon-question-sign get-help" title="Image files are stored in <code>/build/tmp/deploy/images/</code>"></i>
|
<i class="icon-question-sign get-help" title="Image files are stored in <code>/build/tmp/deploy/images/</code>"></i>
|
||||||
|
|||||||
@@ -17,9 +17,7 @@
|
|||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block buildinfomain %}
|
{% block buildinfomain %}
|
||||||
|
|
||||||
<div class="col-md-10">
|
<div class="col-md-10">
|
||||||
|
|
||||||
<div class="page-header">
|
<div class="page-header">
|
||||||
<h1>
|
<h1>
|
||||||
{% if request.GET.search and objects.paginator.count > 0 %}
|
{% if request.GET.search and objects.paginator.count > 0 %}
|
||||||
@@ -31,8 +29,6 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
</h1>
|
</h1>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div id="navTab">
|
<div id="navTab">
|
||||||
<ul class="nav nav-pills">
|
<ul class="nav nav-pills">
|
||||||
<li class="active">
|
<li class="active">
|
||||||
@@ -50,113 +46,11 @@
|
|||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<div id="image-packages" class="tab-pane">
|
<div id="image-packages" class="tab-pane">
|
||||||
|
{# xhr_table_url is just the current url so leave it blank #}
|
||||||
{% if objects.paginator.count == 0 %}
|
{% with xhr_table_url='' %}
|
||||||
<div class="alert">
|
{% include "toastertable.html" %}
|
||||||
<form class="no-results input-append" id="searchform">
|
{% endwith %}
|
||||||
<input id="search" name="search" class="input-xxlarge" type="text" value="{% if request.GET.search %}{{request.GET.search}}{% endif %}"/>{% if request.GET.search %}<a href="javascript:$('#search').val('');searchform.submit()" class="input-append-addon btn" tabindex="-1"><i class="glyphicon glyphicon-remove"></i></a>{% endif %}
|
|
||||||
<button class="btn" type="submit" value="Search">Search</button>
|
|
||||||
<button class="btn btn-link" onclick="javascript:$('#search').val('');searchform.submit()">Show all packages</button>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
{% else %}
|
|
||||||
{% include "basetable_top.html" %}
|
|
||||||
{% for package in objects %}
|
|
||||||
<tr>
|
|
||||||
{# order of the table data must match the columns defined in template's context tablecols #}
|
|
||||||
<td class="package_name">
|
|
||||||
<a href="{% url 'package_included_detail' build.id target.id package.id %}">
|
|
||||||
{{package.name}}
|
|
||||||
</a>
|
|
||||||
{% if package.installed_name and package.name != package.installed_name %}
|
|
||||||
<span class="muted"> as {{package.installed_name}}</span>
|
|
||||||
<i class="icon-question-sign get-help hover-help" title='{{package.name|add:" was renamed at packaging time and was installed in your image as "|add:package.installed_name}}'></i>
|
|
||||||
{% endif %}
|
|
||||||
</td>
|
|
||||||
<td class="package_version">
|
|
||||||
<a href="{% url 'package_included_detail' build.id target.id package.id %}">
|
|
||||||
{{package.version|filtered_packageversion:package.revision}}
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
<td class="license">
|
|
||||||
{{package.license}}
|
|
||||||
</td>
|
|
||||||
<td class="size sizecol">
|
|
||||||
{{package.size|filtered_installedsize:package.installed_size|filtered_filesizeformat}}
|
|
||||||
</td>
|
|
||||||
|
|
||||||
<td class="size_over_total sizecol">
|
|
||||||
{{package|filter_sizeovertotal:packages_sum}}
|
|
||||||
</td>
|
|
||||||
<td class="depends">
|
|
||||||
{% with deps=package.runtime_dependencies %}
|
|
||||||
{% with deps_count=deps|length %}
|
|
||||||
{% if deps_count > 0 %}
|
|
||||||
<a class="btn"
|
|
||||||
title="<a href='{% url "package_included_dependencies" build.id target.id package.id %}'>{{package.name}}</a> dependencies"
|
|
||||||
data-content="<ul class='list-unstyled'>
|
|
||||||
{% for i in deps|dictsort:'depends_on.name' %}
|
|
||||||
<li><a href='{% url "package_included_detail" build.pk target.id i.depends_on.pk %}'>{{i.depends_on.name}}</a></li>
|
|
||||||
{% endfor %}
|
|
||||||
</ul>">
|
|
||||||
{{deps_count}}
|
|
||||||
</a>
|
|
||||||
{% endif %}
|
|
||||||
{% endwith %}
|
|
||||||
{% endwith %}
|
|
||||||
</td>
|
|
||||||
<td class="brought_in_by">
|
|
||||||
{% with rdeps=package.reverse_runtime_dependencies %}
|
|
||||||
{% with rdeps_count=rdeps|length %}
|
|
||||||
{% if rdeps_count > 0 %}
|
|
||||||
<a class="btn"
|
|
||||||
title="<a href='{% url "package_included_reverse_dependencies" build.id target.id package.id %}'>{{package.name}}</a> reverse dependencies"
|
|
||||||
data-content="<ul class='list-unstyled'>
|
|
||||||
{% for i in rdeps|dictsort:'package.name' %}
|
|
||||||
<li><a href='{% url "package_included_detail" build.id target.id i.package.id %}'>{{i.package.name}}</a></li>
|
|
||||||
{% endfor %}
|
|
||||||
</ul>">
|
|
||||||
{{rdeps_count}}
|
|
||||||
</a>
|
|
||||||
{% endif %}
|
|
||||||
{% endwith %}
|
|
||||||
{% endwith %}
|
|
||||||
</td>
|
|
||||||
<td class="recipe_name">
|
|
||||||
{% if package.recipe.version %}
|
|
||||||
<a href="{% url 'recipe' build.id package.recipe_id %}">
|
|
||||||
{{ package.recipe.name }}
|
|
||||||
</a>
|
|
||||||
{% endif %}
|
|
||||||
</td>
|
|
||||||
<td class="recipe_version">
|
|
||||||
{% if package.recipe.version %}
|
|
||||||
<a href="{% url 'recipe' build.id package.recipe_id %}">
|
|
||||||
{{ package.recipe.version }}
|
|
||||||
</a>
|
|
||||||
{% endif %}
|
|
||||||
</td>
|
|
||||||
<td class="layer_name">
|
|
||||||
{{ package.recipe.layer_version.layer.name }}
|
|
||||||
</td>
|
|
||||||
<td class="layer_branch">
|
|
||||||
{{ package.recipe.layer_version.branch}}
|
|
||||||
</td>
|
|
||||||
<td class="layer_commit">
|
|
||||||
<a class="btn"
|
|
||||||
data-content="<ul class='list-unstyled'>
|
|
||||||
<li>{{package.recipe.layer_version.commit}}</li>
|
|
||||||
</ul>">
|
|
||||||
{{package.recipe.layer_version.commit|truncatechars:13}}
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
{% include "basetable_bottom.html" %}
|
|
||||||
{% endif %}
|
|
||||||
</div> <!-- tabpane -->
|
</div> <!-- tabpane -->
|
||||||
</div> <!--span 10-->
|
</div> <!--navTab -->>
|
||||||
|
<!-- col-md-10 -->
|
||||||
{% endblock buildinfomain %}
|
{% endblock buildinfomain %}
|
||||||
|
|||||||
@@ -68,9 +68,12 @@ urlpatterns = patterns('toastergui.views',
|
|||||||
url(r'^build/(?P<build_id>\d+)/package_included_reverse_dependencies/(?P<target_id>\d+)/(?P<package_id>\d+)$',
|
url(r'^build/(?P<build_id>\d+)/package_included_reverse_dependencies/(?P<target_id>\d+)/(?P<package_id>\d+)$',
|
||||||
'package_included_reverse_dependencies', name='package_included_reverse_dependencies'),
|
'package_included_reverse_dependencies', name='package_included_reverse_dependencies'),
|
||||||
|
|
||||||
# images are known as targets in the internal model
|
url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)$',
|
||||||
url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)$', 'target', name='target'),
|
buildtables.InstalledPackagesTable.as_view(
|
||||||
url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)/targetpkg$', 'targetpkg', name='targetpkg'),
|
template_name="target.html"),
|
||||||
|
name='target'),
|
||||||
|
|
||||||
|
|
||||||
url(r'^dentries/build/(?P<build_id>\d+)/target/(?P<target_id>\d+)$', 'xhr_dirinfo', name='dirinfo_ajax'),
|
url(r'^dentries/build/(?P<build_id>\d+)/target/(?P<target_id>\d+)$', 'xhr_dirinfo', name='dirinfo_ajax'),
|
||||||
url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)/dirinfo$', 'dirinfo', name='dirinfo'),
|
url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)/dirinfo$', 'dirinfo', name='dirinfo'),
|
||||||
url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)/dirinfo_filepath/_(?P<file_path>(?:/[^/\n]+)*)$', 'dirinfo', name='dirinfo_filepath'),
|
url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)/dirinfo_filepath/_(?P<file_path>(?:/[^/\n]+)*)$', 'dirinfo', name='dirinfo_filepath'),
|
||||||
|
|||||||
@@ -681,175 +681,6 @@ def recipe_packages(request, build_id, recipe_id):
|
|||||||
_set_parameters_values(pagesize, orderby, request)
|
_set_parameters_values(pagesize, orderby, request)
|
||||||
return response
|
return response
|
||||||
|
|
||||||
def target_common( request, build_id, target_id, variant ):
|
|
||||||
template = "target.html"
|
|
||||||
default_orderby = 'name:+'
|
|
||||||
|
|
||||||
(pagesize, orderby) = _get_parameters_values(request, 25, default_orderby)
|
|
||||||
mandatory_parameters = { 'count': pagesize, 'page' : 1, 'orderby': orderby }
|
|
||||||
retval = _verify_parameters( request.GET, mandatory_parameters )
|
|
||||||
if retval:
|
|
||||||
return _redirect_parameters(
|
|
||||||
variant, request.GET, mandatory_parameters,
|
|
||||||
build_id = build_id, target_id = target_id )
|
|
||||||
( filter_string, search_term, ordering_string ) = _search_tuple( request, Package )
|
|
||||||
|
|
||||||
# FUTURE: get rid of nested sub-queries replacing with ManyToMany field
|
|
||||||
queryset = Package.objects.filter(
|
|
||||||
size__gte = 0,
|
|
||||||
id__in = Target_Installed_Package.objects.filter(
|
|
||||||
target_id=target_id ).values( 'package_id' ))
|
|
||||||
packages_sum = queryset.aggregate( Sum( 'installed_size' ))
|
|
||||||
queryset = _get_queryset(
|
|
||||||
Package, queryset, filter_string, search_term, ordering_string, 'name' )
|
|
||||||
queryset = queryset.select_related("recipe", "recipe__layer_version", "recipe__layer_version__layer")
|
|
||||||
packages = _build_page_range( Paginator(queryset, pagesize), request.GET.get( 'page', 1 ))
|
|
||||||
|
|
||||||
build = Build.objects.get( pk = build_id )
|
|
||||||
|
|
||||||
# bring in package dependencies
|
|
||||||
for p in packages.object_list:
|
|
||||||
p.runtime_dependencies = p.package_dependencies_source.filter(
|
|
||||||
target_id = target_id, dep_type=Package_Dependency.TYPE_TRDEPENDS ).select_related("depends_on")
|
|
||||||
p.reverse_runtime_dependencies = p.package_dependencies_target.filter(
|
|
||||||
target_id = target_id, dep_type=Package_Dependency.TYPE_TRDEPENDS ).select_related("package")
|
|
||||||
tc_package = {
|
|
||||||
'name' : 'Package',
|
|
||||||
'qhelp' : 'Packaged output resulting from building a recipe included in this image',
|
|
||||||
'orderfield' : _get_toggle_order( request, "name" ),
|
|
||||||
'ordericon' : _get_toggle_order_icon( request, "name" ),
|
|
||||||
}
|
|
||||||
tc_packageVersion = {
|
|
||||||
'name' : 'Package version',
|
|
||||||
'qhelp' : 'The package version and revision',
|
|
||||||
}
|
|
||||||
tc_size = {
|
|
||||||
'name' : 'Size',
|
|
||||||
'qhelp' : 'The size of the package',
|
|
||||||
'orderfield' : _get_toggle_order( request, "size", True ),
|
|
||||||
'ordericon' : _get_toggle_order_icon( request, "size" ),
|
|
||||||
'orderkey' : 'size',
|
|
||||||
'clclass' : 'size',
|
|
||||||
'dclass' : 'span2',
|
|
||||||
}
|
|
||||||
if ( variant == 'target' ):
|
|
||||||
tc_size[ "hidden" ] = 0
|
|
||||||
else:
|
|
||||||
tc_size[ "hidden" ] = 1
|
|
||||||
tc_sizePercentage = {
|
|
||||||
'name' : 'Size over total (%)',
|
|
||||||
'qhelp' : 'Proportion of the overall size represented by this package',
|
|
||||||
'clclass' : 'size_over_total',
|
|
||||||
'hidden' : 1,
|
|
||||||
}
|
|
||||||
tc_license = {
|
|
||||||
'name' : 'License',
|
|
||||||
'qhelp' : 'The license under which the package is distributed. Separate license names u\
|
|
||||||
sing | (pipe) means there is a choice between licenses. Separate license names using & (ampersand) m\
|
|
||||||
eans multiple licenses exist that cover different parts of the source',
|
|
||||||
'orderfield' : _get_toggle_order( request, "license" ),
|
|
||||||
'ordericon' : _get_toggle_order_icon( request, "license" ),
|
|
||||||
'orderkey' : 'license',
|
|
||||||
'clclass' : 'license',
|
|
||||||
}
|
|
||||||
if ( variant == 'target' ):
|
|
||||||
tc_license[ "hidden" ] = 1
|
|
||||||
else:
|
|
||||||
tc_license[ "hidden" ] = 0
|
|
||||||
tc_dependencies = {
|
|
||||||
'name' : 'Dependencies',
|
|
||||||
'qhelp' : "Package runtime dependencies (other packages)",
|
|
||||||
'clclass' : 'depends',
|
|
||||||
}
|
|
||||||
if ( variant == 'target' ):
|
|
||||||
tc_dependencies[ "hidden" ] = 0
|
|
||||||
else:
|
|
||||||
tc_dependencies[ "hidden" ] = 1
|
|
||||||
tc_rdependencies = {
|
|
||||||
'name' : 'Reverse dependencies',
|
|
||||||
'qhelp' : 'Package run-time reverse dependencies (i.e. which other packages depend on this package',
|
|
||||||
'clclass' : 'brought_in_by',
|
|
||||||
}
|
|
||||||
if ( variant == 'target' ):
|
|
||||||
tc_rdependencies[ "hidden" ] = 0
|
|
||||||
else:
|
|
||||||
tc_rdependencies[ "hidden" ] = 1
|
|
||||||
tc_recipe = {
|
|
||||||
'name' : 'Recipe',
|
|
||||||
'qhelp' : 'The name of the recipe building the package',
|
|
||||||
'orderfield' : _get_toggle_order( request, "recipe__name" ),
|
|
||||||
'ordericon' : _get_toggle_order_icon( request, "recipe__name" ),
|
|
||||||
'orderkey' : "recipe__name",
|
|
||||||
'clclass' : 'recipe_name',
|
|
||||||
'hidden' : 0,
|
|
||||||
}
|
|
||||||
tc_recipeVersion = {
|
|
||||||
'name' : 'Recipe version',
|
|
||||||
'qhelp' : 'Version and revision of the recipe building the package',
|
|
||||||
'clclass' : 'recipe_version',
|
|
||||||
'hidden' : 1,
|
|
||||||
}
|
|
||||||
tc_layer = {
|
|
||||||
'name' : 'Layer',
|
|
||||||
'qhelp' : 'The name of the layer providing the recipe that builds the package',
|
|
||||||
'orderfield' : _get_toggle_order( request, "recipe__layer_version__layer__name" ),
|
|
||||||
'ordericon' : _get_toggle_order_icon( request, "recipe__layer_version__layer__name" ),
|
|
||||||
'orderkey' : "recipe__layer_version__layer__name",
|
|
||||||
'clclass' : 'layer_name',
|
|
||||||
'hidden' : 1,
|
|
||||||
}
|
|
||||||
tc_layerBranch = {
|
|
||||||
'name' : 'Layer branch',
|
|
||||||
'qhelp' : 'The Git branch of the layer providing the recipe that builds the package',
|
|
||||||
'orderfield' : _get_toggle_order( request, "recipe__layer_version__branch" ),
|
|
||||||
'ordericon' : _get_toggle_order_icon( request, "recipe__layer_version__branch" ),
|
|
||||||
'orderkey' : "recipe__layer_version__branch",
|
|
||||||
'clclass' : 'layer_branch',
|
|
||||||
'hidden' : 1,
|
|
||||||
}
|
|
||||||
tc_layerCommit = {
|
|
||||||
'name' : 'Layer commit',
|
|
||||||
'qhelp' : 'The Git commit of the layer providing the recipe that builds the package',
|
|
||||||
'clclass' : 'layer_commit',
|
|
||||||
'hidden' : 1,
|
|
||||||
}
|
|
||||||
|
|
||||||
context = {
|
|
||||||
'objectname': variant,
|
|
||||||
'build' : build,
|
|
||||||
'project' : build.project,
|
|
||||||
'target' : Target.objects.filter( pk = target_id )[ 0 ],
|
|
||||||
'objects' : packages,
|
|
||||||
'packages_sum' : packages_sum[ 'installed_size__sum' ],
|
|
||||||
'object_search_display': "packages included",
|
|
||||||
'default_orderby' : default_orderby,
|
|
||||||
'tablecols' : [
|
|
||||||
tc_package,
|
|
||||||
tc_packageVersion,
|
|
||||||
tc_license,
|
|
||||||
tc_size,
|
|
||||||
tc_sizePercentage,
|
|
||||||
tc_dependencies,
|
|
||||||
tc_rdependencies,
|
|
||||||
tc_recipe,
|
|
||||||
tc_recipeVersion,
|
|
||||||
tc_layer,
|
|
||||||
tc_layerBranch,
|
|
||||||
tc_layerCommit,
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
response = render(request, template, context)
|
|
||||||
_set_parameters_values(pagesize, orderby, request)
|
|
||||||
return response
|
|
||||||
|
|
||||||
def target( request, build_id, target_id ):
|
|
||||||
return( target_common( request, build_id, target_id, "target" ))
|
|
||||||
|
|
||||||
def targetpkg( request, build_id, target_id ):
|
|
||||||
return( target_common( request, build_id, target_id, "targetpkg" ))
|
|
||||||
|
|
||||||
from django.core.serializers.json import DjangoJSONEncoder
|
from django.core.serializers.json import DjangoJSONEncoder
|
||||||
from django.http import HttpResponse
|
from django.http import HttpResponse
|
||||||
def xhr_dirinfo(request, build_id, target_id):
|
def xhr_dirinfo(request, build_id, target_id):
|
||||||
|
|||||||
Reference in New Issue
Block a user