Skip to content
This repository has been archived by the owner on Mar 24, 2021. It is now read-only.

Commit

Permalink
Adding relative date range functionality and tests
Browse files Browse the repository at this point in the history
We need to be able to generate start_at and end_at pairs from requests for relative amounts of time.
  • Loading branch information
nick-gravgaard committed Jan 10, 2014
1 parent 4de89eb commit 6d0b348
Showing 1 changed file with 26 additions and 8 deletions.
34 changes: 26 additions & 8 deletions backdrop/read/query.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import pytz
from backdrop.core.timeseries import parse_period
from backdrop.core.timeutils import parse_time_as_utc
from backdrop.core.timeutils import now, parse_time_as_utc
from backdrop.read.response import *


Expand All @@ -19,11 +19,32 @@ def if_present(func, value):
def parse_request_args(request_args):
args = dict()

args['start_at'] = if_present(parse_time_as_utc,
request_args.get('start_at'))
args['period'] = if_present(parse_period,
request_args.get('period'))

if request_args.get('delta'):
# relative time range requested
delta = request_args['delta']

date = if_present(parse_time_as_utc, request_args.get('date')) or now()

period_delta = args['period'].delta
duration = period_delta * delta
other_date = date + duration

args['end_at'] = if_present(parse_time_as_utc,
request_args.get('end_at'))
if delta > 0:
args['start_at'] = date
args['end_at'] = other_date
else:
args['start_at'] = other_date
args['end_at'] = date
else:
# absolute time range requested
args['start_at'] = if_present(parse_time_as_utc,
request_args.get('start_at'))

args['end_at'] = if_present(parse_time_as_utc,
request_args.get('end_at'))

def boolify(value):
return {
Expand All @@ -38,9 +59,6 @@ def parse_filter_by(filter_by):

args['filter_by'] = map(parse_filter_by, request_args.getlist('filter_by'))

args['period'] = if_present(parse_period,
request_args.get('period'))

args['group_by'] = request_args.get('group_by')

args['sort_by'] = if_present(lambda sort_by: sort_by.split(':', 1),
Expand Down

0 comments on commit 6d0b348

Please sign in to comment.