0001-api-allow-multi-values-for-filter-internal-id-and-op.patch
tests/api/test_formdata.py | ||
---|---|---|
1422 | 1422 |
) |
1423 | 1423 |
assert resp.json['err_desc'] == 'Invalid value "blabla" for "filter-internal-id-value"' |
1424 | 1424 | |
1425 |
# multi-ids |
|
1426 |
resp = get_app(pub).get( |
|
1427 |
sign_uri( |
|
1428 |
'/api/forms/test/list?filter-internal-id=1&filter-internal-id=3&filter-internal-id-operator=eq', |
|
1429 |
user=local_user, |
|
1430 |
) |
|
1431 |
) |
|
1432 |
assert len(resp.json) == 2 |
|
1433 |
resp = get_app(pub).get( |
|
1434 |
sign_uri( |
|
1435 |
'/api/forms/test/list?filter-internal-id=1&filter-internal-id=3&filter-internal-id-operator=ne', |
|
1436 |
user=local_user, |
|
1437 |
) |
|
1438 |
) |
|
1439 |
assert len(resp.json) == 9 |
|
1440 |
for operator in ['lt', 'lte', 'gt', 'gte']: |
|
1441 |
# list of values not allowed with theese operators |
|
1442 |
resp = get_app(pub).get( |
|
1443 |
sign_uri( |
|
1444 |
'/api/forms/test/list?filter-internal-id=1&filter-internal-id=3&filter-internal-id-operator=%s' |
|
1445 |
% operator, |
|
1446 |
user=local_user, |
|
1447 |
), |
|
1448 |
status=400, |
|
1449 |
) |
|
1450 |
assert ( |
|
1451 |
resp.json['err_desc'] |
|
1452 |
== 'Invalid value "[\'1\', \'3\']" for "filter-internal-id" and operator "%s"' % operator |
|
1453 |
) |
|
1454 | ||
1455 |
# not integers |
|
1456 |
resp = get_app(pub).get( |
|
1457 |
sign_uri( |
|
1458 |
'/api/forms/test/list?filter-internal-id=1&filter-internal-id=a&filter-internal-id-operator=eq', |
|
1459 |
user=local_user, |
|
1460 |
), |
|
1461 |
status=400, |
|
1462 |
) |
|
1463 |
assert ( |
|
1464 |
resp.json['err_desc'] == 'Invalid value "[\'1\', \'a\']" for "filter-internal-id" and operator "eq"' |
|
1465 |
) |
|
1466 | ||
1425 | 1467 | |
1426 | 1468 |
def test_api_list_formdata_number_filter(pub, local_user): |
1427 | 1469 |
pub.role_class.wipe() |
wcs/backoffice/management.py | ||
---|---|---|
1892 | 1892 | |
1893 | 1893 |
# check value types |
1894 | 1894 |
if filter_field.type == 'internal-id': |
1895 | ||
1896 |
def _report_error(value, operator): |
|
1897 |
if custom_view: |
|
1898 |
get_publisher().record_error( |
|
1899 |
_( |
|
1900 |
'Invalid value "%s" for custom view "%s", CardDef "%s", field "internal-id", operator "%s"' |
|
1901 |
) |
|
1902 |
% ( |
|
1903 |
value, |
|
1904 |
custom_view.slug, |
|
1905 |
custom_view.formdef.name, |
|
1906 |
operator, |
|
1907 |
) |
|
1908 |
) |
|
1909 |
else: |
|
1910 |
report_error( |
|
1911 |
_('Invalid value "%s" for "filter-internal-id" and operator "%s"') |
|
1912 |
% (value, operator) |
|
1913 |
) |
|
1914 | ||
1895 | 1915 |
if Template.is_template_string(filter_field_value): |
1896 | 1916 |
if keep_templates: |
1897 | 1917 |
criterias.append(criteria('id', filter_field_value)) |
... | ... | |
1906 | 1926 |
criterias.append(Nothing()) |
1907 | 1927 |
continue |
1908 | 1928 | |
1909 |
def record_error(value, operator): |
|
1910 |
get_publisher().record_error( |
|
1911 |
_( |
|
1912 |
'Invalid value "%s" for custom view "%s", CardDef "%s", field "internal-id", operator "%s"' |
|
1913 |
) |
|
1914 |
% ( |
|
1915 |
value, |
|
1916 |
custom_view.slug, |
|
1917 |
custom_view.formdef.name, |
|
1918 |
operator, |
|
1919 |
) |
|
1920 |
) |
|
1921 | ||
1922 |
if isinstance(filter_field_value, list): |
|
1923 |
try: |
|
1924 |
[int(v) for v in filter_field_value] |
|
1925 |
except ValueError: |
|
1926 |
record_error(filter_field_value, filter_field_operator) |
|
1927 |
criterias.append(Nothing()) |
|
1928 |
continue |
|
1929 |
if filter_field_operator == 'eq': |
|
1930 |
criterias.append(Contains('id', filter_field_value)) |
|
1931 |
elif filter_field_operator == 'ne': |
|
1932 |
criterias.append(NotContains('id', filter_field_value)) |
|
1933 |
else: |
|
1934 |
record_error(filter_field_value, filter_field_operator) |
|
1935 |
criterias.append(Nothing()) |
|
1929 |
if isinstance(filter_field_value, list): |
|
1930 |
try: |
|
1931 |
[int(v) for v in filter_field_value] |
|
1932 |
except ValueError: |
|
1933 |
_report_error(filter_field_value, filter_field_operator) |
|
1934 |
criterias.append(Nothing()) |
|
1936 | 1935 |
continue |
1936 |
if filter_field_operator == 'eq': |
|
1937 |
criterias.append(Contains('id', filter_field_value)) |
|
1938 |
elif filter_field_operator == 'ne': |
|
1939 |
criterias.append(NotContains('id', filter_field_value)) |
|
1940 |
else: |
|
1941 |
_report_error(filter_field_value, filter_field_operator) |
|
1942 |
criterias.append(Nothing()) |
|
1943 |
continue |
|
1937 | 1944 |
try: |
1938 | 1945 |
filter_field_value = int(filter_field_value) |
1939 | 1946 |
except ValueError: |
1940 |
- |