Ejemplo n.º 1
0
def form_filter_dict(request, filter_list, default_filter_action='icontains'):
    if filter_list:
        filter_dict = {}
        form_values = {}
        form_field_converter = None
        value_as_filter = True
        for filter_field_name in filter_list:
            current_field = None
            form_field_name = None
            filter_action = None
            filter_null = True
            if isinstance(filter_field_name, str):
                current_field = filter_field_name
                filter_action = default_filter_action

            elif isinstance(filter_field_name, Dict) or isinstance(
                    filter_field_name, Iterable):
                current_field, filter_action, form_field_name, form_field_converter, \
                value_as_filter, filter_null = get_from_container(
                    filter_field_name, [
                        ('field_name', None),
                        ('field_action', default_filter_action),
                        ('form_field_name', None),
                        ('form_field_converter', None),
                        ('value_as_filter', True),
                        ('filter_null', True),
                    ])
            if form_field_name is None:
                form_field_name = current_field

            value, exist_in_request = get_from_request(request,
                                                       form_field_name)
            if current_field and value:
                if not isinstance(value, str) and (isinstance(
                        value, Dict) or isinstance(value, Iterable)):
                    current_value, filter_action = get_from_container(
                        value, [('value', None), ('action', filter_action)],
                        True,
                        ignore_iterable=not value_as_filter)
                else:
                    current_value = value
                current_value = standard_value_converter(
                    current_value, form_field_converter)
                if current_value:
                    if filter_action:
                        filter_dict[
                            f'{current_field}__{filter_action}'] = current_value
                    else:
                        filter_dict[f'{current_field}'] = current_value
                    form_values[form_field_name] = current_value
            elif filter_null and current_field and exist_in_request:
                filter_dict[f'{current_field}__isnull'] = True

        return filter_dict, form_values
    else:
        return None, None
Ejemplo n.º 2
0
    def test_get_from_container_iter(self):
        test_dict = ['test_value_1', 'test_value_2']

        result = get_from_container(test_dict, [('f1', 'val1'), ('f2', 'val2'),
                                                ('f3', 'val1'),
                                                ('f4', 'val2')])
        self.assertEqual(['test_value_1', 'test_value_2', 'val1', 'val2'],
                         result)
Ejemplo n.º 3
0
def my_serializer(serialized_obj,
                  serialized_fields,
                  exec_method: bool = True,
                  skip_none: bool = False):
    result = {}
    if serialized_obj and isinstance(serialized_obj, QuerySet):
        serialized_obj = list(serialized_obj)
    if serialized_fields and (isinstance(serialized_obj, dict)
                              or hasattr(serialized_obj, "__dict__")):
        for field_desc in serialized_fields:
            field_name, convertor, result_field, default_dict, ignore_error = get_from_container(
                field_desc, [
                    ('field_name', None),
                    ('convertor', None),
                    ('result_field', None),
                    ('default_dict', False),
                    ('ignore_error', True),
                ], True)

            if result_field is None:
                result_field = field_name

            current_val = get_field_value_ex(serialized_obj, field_name, None,
                                             exec_method)

            if current_val:
                result[result_field] = standard_value_converter(
                    current_val, convertor, ignore_error, default_dict,
                    my_serializer)
            else:
                if not skip_none:
                    if convertor == 'bool':
                        result[result_field] = False
                    elif convertor == 'bool_not':
                        result[result_field] = True
                    elif convertor == 'str':
                        result[result_field] = ''
                    else:
                        result[result_field] = None
    else:
        result = to_dict(serialized_obj)
    return result
Ejemplo n.º 4
0
def extract_view_queryset(query_set: QuerySet,
                          viewed_fields: Union[str, Iterable] = None,
                          select_all_field: bool = True,
                          **kwagrs) -> QuerySet:
    """
    Extract only specified field from dataset
    Указывает оставить в результррующем наборе данных только указанные поля
    :param query_set: QuerySet for data extraction
    :type viewed_fields: list of field for data extraction
    :rtype: QuerySet that contains only specified fields
    """
    if not select_all_field and viewed_fields is not None and \
            viewed_fields and query_set and (isinstance(query_set, QuerySet) or hasattr(query_set, 'values')):
        if isinstance(viewed_fields, str):
            viewed_fields = viewed_fields.split(',')
        view_field_desc = [
            get_from_container(field_name, [('field_name', None)], True)[0]
            for field_name in viewed_fields
        ]
        query_set = query_set.values(*view_field_desc)
    return query_set
Ejemplo n.º 5
0
def form_filters_from_request(request,
                              filter_list,
                              default_filter_action='icontains',
                              use_extended_filter=False,
                              page_row_request_field='per_page',
                              sort_request_field='sort_by',
                              page_request_field='page',
                              default_ordering='id',
                              **kwagrs):
    paginate_by, _ = get_from_request(request, page_row_request_field, None)
    ordering, _ = get_from_request(request, sort_request_field,
                                   default_ordering)
    page_number, _ = get_from_request(request, page_request_field, 0)

    process = {
        'page': page_number,
        'per_page': paginate_by,
        'sort_field': ordering,
        'filters': {}
    }

    if filter_list:
        for filter_field_name in filter_list:
            if isinstance(filter_field_name, str):
                current_field = filter_field_name
                form_field_name = current_field
                filter_action = default_filter_action
                value_as_filter = True
                filter_null = None
                form_field_converter = None

            elif isinstance(filter_field_name, Dict) or isinstance(
                    filter_field_name, Iterable):
                current_field, filter_action, form_field_name, form_field_converter, \
                value_as_filter, filter_null = get_from_container(
                    filter_field_name, [
                        ('field_name', filter_field_name),
                        ('field_action', default_filter_action),
                        ('form_field_name', None),
                        ('form_field_converter', None),
                        ('value_as_filter', True),
                        ('filter_null', True),
                    ])
            else:
                continue
            if use_extended_filter:
                value, exist_in_request, current_field = get_extended_filed(
                    request, form_field_name)
            else:
                value, exist_in_request = get_from_request(
                    request, form_field_name)
            if current_field and exist_in_request:

                if not isinstance(value, str) and (isinstance(
                        value, Dict) or isinstance(value, Iterable)):
                    current_value, filter_action = get_from_container(
                        value, [('value', None), ('action', filter_action)],
                        True,
                        ignore_iterable=not value_as_filter)
                else:
                    current_value = value
                current_value = standard_value_converter(
                    current_value, form_field_converter)

                process['filters'][current_field] = {
                    'value': current_value,
                    'form_field': form_field_name,
                    'matchMode': filter_action,
                    'filter_null': filter_null
                }
    return process
Ejemplo n.º 6
0
    def test_get_from_container_iter_use_value(self):
        test_dict = 'test_value_1'

        result = get_from_container(test_dict, [('f1', 'val1'),
                                                ('f3', 'val1')], True)
        self.assertEqual(['test_value_1', 'val1'], result)