18 from cubicweb.utils import make_uid, UStringIO, datetime2ticks |
18 from cubicweb.utils import make_uid, UStringIO, datetime2ticks |
19 from cubicweb.vregistry import objectify_selector |
19 from cubicweb.vregistry import objectify_selector |
20 from cubicweb.web.views import baseviews |
20 from cubicweb.web.views import baseviews |
21 |
21 |
22 @objectify_selector |
22 @objectify_selector |
23 def at_least_two_columns(cls, req, rset, *args, **kwargs): |
23 def at_least_two_columns(cls, req, rset=None, *args, **kwargs): |
24 if not rset: |
24 if not rset: |
25 return 0 |
25 return 0 |
26 return len(rset.rows[0]) >= 2 |
26 return len(rset.rows[0]) >= 2 |
27 |
27 |
28 @objectify_selector |
28 @objectify_selector |
29 def all_columns_are_numbers(cls, req, rset, *args, **kwargs): |
29 def all_columns_are_numbers(cls, req, rset=None, *args, **kwargs): |
30 """accept result set with at least one line and two columns of result |
30 """accept result set with at least one line and two columns of result |
31 all columns after second must be of numerical types""" |
31 all columns after second must be of numerical types""" |
32 for etype in rset.description[0]: |
32 for etype in rset.description[0]: |
33 if etype not in ('Int', 'Float'): |
33 if etype not in ('Int', 'Float'): |
34 return 0 |
34 return 0 |
35 return 1 |
35 return 1 |
36 |
36 |
37 @objectify_selector |
37 @objectify_selector |
38 def second_column_is_number(cls, req, rset, *args, **kwargs): |
38 def second_column_is_number(cls, req, rset=None, *args, **kwargs): |
39 etype = rset.description[0][1] |
39 etype = rset.description[0][1] |
40 if etype not in ('Int', 'Float'): |
40 if etype not in ('Int', 'Float'): |
41 return 0 |
41 return 0 |
42 return 1 |
42 return 1 |
43 |
43 |
44 @objectify_selector |
44 @objectify_selector |
45 def columns_are_date_then_numbers(cls, req, rset, *args, **kwargs): |
45 def columns_are_date_then_numbers(cls, req, rset=None, *args, **kwargs): |
46 etypes = rset.description[0] |
46 etypes = rset.description[0] |
47 if etypes[0] not in ('Date', 'Datetime'): |
47 if etypes[0] not in ('Date', 'Datetime'): |
48 return 0 |
48 return 0 |
49 for etype in etypes[1:]: |
49 for etype in etypes[1:]: |
50 if etype not in ('Int', 'Float'): |
50 if etype not in ('Int', 'Float'): |