0001-api-allow-multi-values-for-filter-internal-id-and-op.patch
tests/api/test_formdata.py | ||
---|---|---|
1368 | 1368 |
) |
1369 | 1369 |
assert resp.json['err_desc'] == 'Invalid value "blabla" for "filter-internal-id-value"' |
1370 | 1370 | |
1371 |
# multi-ids |
|
1372 |
resp = get_app(pub).get( |
|
1373 |
sign_uri( |
|
1374 |
'/api/forms/test/list?filter-internal-id=1&filter-internal-id=3&filter-internal-id-operator=eq', |
|
1375 |
user=local_user, |
|
1376 |
) |
|
1377 |
) |
|
1378 |
assert len(resp.json) == 2 |
|
1379 |
resp = get_app(pub).get( |
|
1380 |
sign_uri( |
|
1381 |
'/api/forms/test/list?filter-internal-id=1&filter-internal-id=3&filter-internal-id-operator=ne', |
|
1382 |
user=local_user, |
|
1383 |
) |
|
1384 |
) |
|
1385 |
assert len(resp.json) == 9 |
|
1386 |
for operator in ['lt', 'lte', 'gt', 'gte']: |
|
1387 |
# list of values not allowed with theese operators |
|
1388 |
resp = get_app(pub).get( |
|
1389 |
sign_uri( |
|
1390 |
'/api/forms/test/list?filter-internal-id=1&filter-internal-id=3&filter-internal-id-operator=%s' |
|
1391 |
% operator, |
|
1392 |
user=local_user, |
|
1393 |
), |
|
1394 |
status=400, |
|
1395 |
) |
|
1396 |
assert ( |
|
1397 |
resp.json['err_desc'] |
|
1398 |
== 'Invalid value "[\'1\', \'3\']" for "filter-internal-id" and operator "%s"' % operator |
|
1399 |
) |
|
1400 | ||
1401 |
# not integers |
|
1402 |
resp = get_app(pub).get( |
|
1403 |
sign_uri( |
|
1404 |
'/api/forms/test/list?filter-internal-id=1&filter-internal-id=a&filter-internal-id-operator=eq', |
|
1405 |
user=local_user, |
|
1406 |
), |
|
1407 |
status=400, |
|
1408 |
) |
|
1409 |
assert ( |
|
1410 |
resp.json['err_desc'] == 'Invalid value "[\'1\', \'a\']" for "filter-internal-id" and operator "eq"' |
|
1411 |
) |
|
1412 | ||
1371 | 1413 | |
1372 | 1414 |
def test_api_list_formdata_number_filter(pub, local_user): |
1373 | 1415 |
pub.role_class.wipe() |
wcs/backoffice/management.py | ||
---|---|---|
1877 | 1877 | |
1878 | 1878 |
# check value types |
1879 | 1879 |
if filter_field.type == 'internal-id': |
1880 | ||
1881 |
def _report_error(value, operator): |
|
1882 |
if custom_view: |
|
1883 |
get_publisher().record_error( |
|
1884 |
_( |
|
1885 |
'Invalid value "%s" for custom view "%s", CardDef "%s", field "internal-id", operator "%s"' |
|
1886 |
) |
|
1887 |
% ( |
|
1888 |
value, |
|
1889 |
custom_view.slug, |
|
1890 |
custom_view.formdef.name, |
|
1891 |
operator, |
|
1892 |
) |
|
1893 |
) |
|
1894 |
else: |
|
1895 |
report_error( |
|
1896 |
_('Invalid value "%s" for "filter-internal-id" and operator "%s"') |
|
1897 |
% (value, operator) |
|
1898 |
) |
|
1899 | ||
1880 | 1900 |
if Template.is_template_string(filter_field_value): |
1881 | 1901 |
if keep_templates: |
1882 | 1902 |
criterias.append(criteria('id', filter_field_value)) |
... | ... | |
1891 | 1911 |
criterias.append(Equal('status', '_none')) |
1892 | 1912 |
continue |
1893 | 1913 | |
1894 |
def record_error(value, operator): |
|
1895 |
get_publisher().record_error( |
|
1896 |
_( |
|
1897 |
'Invalid value "%s" for custom view "%s", CardDef "%s", field "internal-id", operator "%s"' |
|
1898 |
) |
|
1899 |
% ( |
|
1900 |
value, |
|
1901 |
custom_view.slug, |
|
1902 |
custom_view.formdef.name, |
|
1903 |
operator, |
|
1904 |
) |
|
1905 |
) |
|
1906 | ||
1907 |
if isinstance(filter_field_value, list): |
|
1908 |
try: |
|
1909 |
[int(v) for v in filter_field_value] |
|
1910 |
except ValueError: |
|
1911 |
record_error(filter_field_value, filter_field_operator) |
|
1912 |
criterias.append(Equal('status', '_none')) |
|
1913 |
continue |
|
1914 |
if filter_field_operator == 'eq': |
|
1915 |
criterias.append(Contains('id', filter_field_value)) |
|
1916 |
elif filter_field_operator == 'ne': |
|
1917 |
criterias.append(NotContains('id', filter_field_value)) |
|
1918 |
else: |
|
1919 |
record_error(filter_field_value, filter_field_operator) |
|
1920 |
criterias.append(Equal('status', '_none')) |
|
1914 |
if isinstance(filter_field_value, list): |
|
1915 |
try: |
|
1916 |
[int(v) for v in filter_field_value] |
|
1917 |
except ValueError: |
|
1918 |
_report_error(filter_field_value, filter_field_operator) |
|
1919 |
criterias.append(Equal('status', '_none')) |
|
1921 | 1920 |
continue |
1921 |
if filter_field_operator == 'eq': |
|
1922 |
criterias.append(Contains('id', filter_field_value)) |
|
1923 |
elif filter_field_operator == 'ne': |
|
1924 |
criterias.append(NotContains('id', filter_field_value)) |
|
1925 |
else: |
|
1926 |
_report_error(filter_field_value, filter_field_operator) |
|
1927 |
criterias.append(Equal('status', '_none')) |
|
1928 |
continue |
|
1922 | 1929 |
try: |
1923 | 1930 |
filter_field_value = int(filter_field_value) |
1924 | 1931 |
except ValueError: |
1925 |
- |