Exemplo n.º 1
0
 def _apply_date_criterion_to_column(column, criterion):
     '''
     Decorate SQLAlchemy filter on given column using supplied criterion.
     Parse the datetime inside the criterion.
     '''
     if isinstance(criterion, criteria.PlainSearchCriterion):
         min_date, max_date = util.parse_time_range(criterion.value)
         expr = column.between(min_date, max_date)
     elif isinstance(criterion, criteria.ArraySearchCriterion):
         expr = sqlalchemy.sql.false()
         for value in criterion.values:
             min_date, max_date = util.parse_time_range(value)
             expr = expr | column.between(min_date, max_date)
     elif isinstance(criterion, criteria.RangedSearchCriterion):
         assert criterion.min_value or criterion.max_value
         if criterion.min_value and criterion.max_value:
             min_date = util.parse_time_range(criterion.min_value)[0]
             max_date = util.parse_time_range(criterion.max_value)[1]
             expr = column.between(min_date, max_date)
         elif criterion.min_value:
             min_date = util.parse_time_range(criterion.min_value)[0]
             expr = column >= min_date
         elif criterion.max_value:
             max_date = util.parse_time_range(criterion.max_value)[1]
             expr = column <= max_date
     else:
         assert False
     if criterion.negated:
         expr = ~expr
     return expr
Exemplo n.º 2
0
def apply_date_criterion_to_column(
        column: SaQuery, criterion: criteria.BaseCriterion) -> SaQuery:
    if isinstance(criterion, criteria.PlainCriterion):
        min_date, max_date = util.parse_time_range(criterion.value)
        expr = column.between(min_date, max_date)
    elif isinstance(criterion, criteria.ArrayCriterion):
        expr = sa.sql.false()
        for value in criterion.values:
            min_date, max_date = util.parse_time_range(value)
            expr = expr | column.between(min_date, max_date)
    elif isinstance(criterion, criteria.RangedCriterion):
        assert criterion.min_value or criterion.max_value
        if criterion.min_value and criterion.max_value:
            min_date = util.parse_time_range(criterion.min_value)[0]
            max_date = util.parse_time_range(criterion.max_value)[1]
            expr = column.between(min_date, max_date)
        elif criterion.min_value:
            min_date = util.parse_time_range(criterion.min_value)[0]
            expr = column >= min_date
        elif criterion.max_value:
            max_date = util.parse_time_range(criterion.max_value)[1]
            expr = column <= max_date
    else:
        assert False
    return expr
Exemplo n.º 3
0
def apply_date_criterion_to_column(
        column: SaQuery, criterion: criteria.BaseCriterion) -> SaQuery:
    if isinstance(criterion, criteria.PlainCriterion):
        min_date, max_date = util.parse_time_range(criterion.value)
        expr = column.between(min_date, max_date)
    elif isinstance(criterion, criteria.ArrayCriterion):
        expr = sa.sql.false()
        for value in criterion.values:
            min_date, max_date = util.parse_time_range(value)
            expr = expr | column.between(min_date, max_date)
    elif isinstance(criterion, criteria.RangedCriterion):
        assert criterion.min_value or criterion.max_value
        if criterion.min_value and criterion.max_value:
            min_date = util.parse_time_range(criterion.min_value)[0]
            max_date = util.parse_time_range(criterion.max_value)[1]
            expr = column.between(min_date, max_date)
        elif criterion.min_value:
            min_date = util.parse_time_range(criterion.min_value)[0]
            expr = column >= min_date
        elif criterion.max_value:
            max_date = util.parse_time_range(criterion.max_value)[1]
            expr = column <= max_date
    else:
        assert False
    return expr
Exemplo n.º 4
0
 def _apply_date_criterion_to_column(column, criterion):
     '''
     Decorate SQLAlchemy filter on given column using supplied criterion.
     Parse the datetime inside the criterion.
     '''
     if isinstance(criterion, criteria.PlainSearchCriterion):
         min_date, max_date = util.parse_time_range(criterion.value)
         expr = column.between(min_date, max_date)
     elif isinstance(criterion, criteria.ArraySearchCriterion):
         expr = sqlalchemy.sql.false()
         for value in criterion.values:
             min_date, max_date = util.parse_time_range(value)
             expr = expr | column.between(min_date, max_date)
     elif isinstance(criterion, criteria.RangedSearchCriterion):
         assert criterion.min_value or criterion.max_value
         if criterion.min_value and criterion.max_value:
             min_date = util.parse_time_range(criterion.min_value)[0]
             max_date = util.parse_time_range(criterion.max_value)[1]
             expr = column.between(min_date, max_date)
         elif criterion.min_value:
             min_date = util.parse_time_range(criterion.min_value)[0]
             expr = column >= min_date
         elif criterion.max_value:
             max_date = util.parse_time_range(criterion.max_value)[1]
             expr = column <= max_date
     else:
         assert False
     if criterion.negated:
         expr = ~expr
     return expr
Exemplo n.º 5
0
def test_parsing_date_time(fake_datetime, input, output):
    with fake_datetime("1997-01-02 03:04:05"):
        assert util.parse_time_range(input) == output
Exemplo n.º 6
0
def test_parsing_empty_date_time():
    with pytest.raises(errors.ValidationError):
        util.parse_time_range("")
Exemplo n.º 7
0
def test_parsing_empty_date_time():
    with pytest.raises(errors.ValidationError):
        util.parse_time_range('')
Exemplo n.º 8
0
def test_parsing_date_time(fake_datetime, input, output):
    with fake_datetime('1997-01-02 03:04:05'):
        assert util.parse_time_range(input) == output