def list(cls, query): conditions = [] mapping = { 'search': lambda value: Q(run_id__icontains=value) | Q(summary__icontains=value), 'summary': lambda value: Q(summary__icontains=value), 'product': lambda value: Q(build__product=value), 'product_version': lambda value: Q(product_version=value), 'plan': lambda value: Q(plan__plan_id=int(value)) if is_int(value) else Q(plan__name__icontains=value), 'build': lambda value: Q(build=value), 'env_group': lambda value: Q(plan__env_group=value), 'people_id': lambda value: Q(manager__id=value) | Q(default_tester__id=value), 'manager': lambda value: Q(manager=value), 'default_tester': lambda value: Q(default_tester=value), 'tag__name__in': lambda value: Q(tag__name__in=value), 'case_run__assignee': lambda value: Q(case_run__assignee=value), 'status': lambda value: { 'running': Q(stop_date__isnull=True), 'finished': Q(stop_date__isnull=False), }[value.lower()], 'people': lambda value: { 'default_tester': Q(default_tester=value), 'manager': Q(manager=value), 'people': Q(manager=value) | Q(default_tester=value), # TODO: Remove first one after upgrade to newer version. # query.set can return either '' or None sometimes, so # currently keeping these two lines here is a workaround. '': Q(manager=value) | Q(default_tester=value), None: Q(manager=value) | Q(default_tester=value), }[query.get('people_type')], } conditions = [mapping[key](value) for key, value in six.iteritems(query) if value and key in mapping] runs = cls.objects.filter(*conditions) value = query.get('sortby') if value: runs = runs.order_by(value) return runs.distinct()
def list(cls, query): conditions = [] mapping = { 'search': lambda value: Q(run_id__icontains=value) | Q(summary__icontains=value), 'summary': lambda value: Q(summary__icontains=value), 'product': lambda value: Q(build__product=value), 'product_version': lambda value: Q(product_version=value), 'plan': lambda value: Q(plan__plan_id=int(value)) if is_int(value) else Q(plan__name__icontains=value), 'build': lambda value: Q(build=value), 'env_group': lambda value: Q(plan__env_group=value), 'people_id': lambda value: Q(manager__id=value) | Q(default_tester__id=value), 'manager': lambda value: Q(manager=value), 'default_tester': lambda value: Q(default_tester=value), 'tag__name__in': lambda value: Q(tag__name__in=value), 'case_run__assignee': lambda value: Q(case_run__assignee=value), 'status': lambda value: { 'running': Q(stop_date__isnull=True), 'finished': Q(stop_date__isnull=False), }[value.lower()], 'people': lambda value: { 'default_tester': Q(default_tester=value), 'manager': Q(manager=value), 'people': Q(manager=value) | Q(default_tester=value), # TODO: Remove first one after upgrade to newer version. # query.set can return either '' or None sometimes, so # currently keeping these two lines here is a workaround. '': Q(manager=value) | Q(default_tester=value), None: Q(manager=value) | Q(default_tester=value), }[query.get('people_type')], } conditions = [mapping[key](value) for key, value in query.iteritems() if value and key in mapping] runs = cls.objects.filter(*conditions) value = query.get('sortby') if value: runs = runs.order_by(value) return runs.distinct()
def plan_by_id_or_name(value): if is_int(value): return Q(plan__plan_id=int(value)) return Q(plan__name__icontains=value)