def test_before_day_of_month_of_year(self): """ """ query = date_filter_parser('-2014-06-15') self.assertIn('$lt', query) self.assertEqual(len(query), 1) self.assertEqual(query['$lt'].year, 2014) self.assertEqual(query['$lt'].month, 06) self.assertEqual(query['$lt'].day, 15) self.assertEqual(query['$lt'].hour, 00) self.assertEqual(query['$lt'].minute, 0) self.assertEqual(query['$lt'].second, 0)
def test_after_day_of_month_of_year(self): """ """ query = date_filter_parser('+2014-06-15') self.assertIn('$gt', query) self.assertEqual(len(query), 1) self.assertEqual(query['$gt'].year, 2014) self.assertEqual(query['$gt'].month, 06) self.assertEqual(query['$gt'].day, 15) self.assertEqual(query['$gt'].hour, 23) self.assertEqual(query['$gt'].minute, 59) self.assertEqual(query['$gt'].second, 59)
def test_after_year(self): """ """ query = date_filter_parser('+2014') self.assertIn('$gt', query) self.assertEqual(len(query), 1) self.assertEqual(query['$gt'].year, 2014) self.assertEqual(query['$gt'].month, 12) self.assertEqual(query['$gt'].day, 31) self.assertEqual(query['$gt'].hour, 23) self.assertEqual(query['$gt'].minute, 59) self.assertEqual(query['$gt'].second, 59)
def test_exact_day_of_month_of_year(self): """ """ query = date_filter_parser('2014-02-27') self.assertIn('$gte', query) self.assertIn('$lte', query) self.assertEqual(len(query), 2) self.assertEqual(query['$gte'].year, 2014) self.assertEqual(query['$gte'].month, 2) self.assertEqual(query['$gte'].day, 27) self.assertEqual(query['$gte'].hour, 0) self.assertEqual(query['$gte'].minute, 0) self.assertEqual(query['$gte'].second, 0) self.assertEqual(query['$lte'].year, 2014) self.assertEqual(query['$lte'].month, 2) self.assertEqual(query['$lte'].day, 27) self.assertEqual(query['$lte'].hour, 23) self.assertEqual(query['$lte'].minute, 59) self.assertEqual(query['$lte'].second, 59)
def test_exact_month_of_year_without_zero_padding(self): """ """ query = date_filter_parser('2014-2') self.assertIn('$gte', query) self.assertIn('$lte', query) self.assertEqual(len(query), 2) self.assertEqual(query['$gte'].year, 2014) self.assertEqual(query['$gte'].month, 2) self.assertEqual(query['$gte'].day, 1) self.assertEqual(query['$gte'].hour, 0) self.assertEqual(query['$gte'].minute, 0) self.assertEqual(query['$gte'].second, 0) self.assertEqual(query['$lte'].year, 2014) self.assertEqual(query['$lte'].month, 2) self.assertEqual(query['$lte'].day, 28) self.assertEqual(query['$lte'].hour, 23) self.assertEqual(query['$lte'].minute, 59) self.assertEqual(query['$lte'].second, 59)
def searchParams(request): """ Extracts valid search params from the request, or sets default values if not found Returns a dict with all the results Raises InvalidSearchParams on bad param values """ params = {} # KEEP For compatibility with older max, that didn't distinguish # between sort order and sort priority. "sortBy" param will be translated # to sort_params deprecated_sort_by = request.params.get('sortBy', None) params = DEPRECATED_SORTBY_MAPPINGS.get(deprecated_sort_by, {}).copy() sort_order = request.params.get('sort', None) if sort_order: params['sort_strategy'] = sort_order params['sort_priority'] = request.params.get('priority', 'activity') limit = request.params.get('limit', 10) try: limit = int(limit) except: raise InvalidSearchParams('limit must be a positive integer') else: if limit: params['limit'] = limit after = request.params.get('after') max_users = request.params.get('max_users', False) if after: try: if max_users: params['after'] = after else: params['after'] = ObjectId(after) except: raise InvalidSearchParams('after must be a valid ObjectId BSON identifier') before = request.params.get('before') if before: try: if max_users: params['before'] = before else: params['before'] = ObjectId(before) except: raise InvalidSearchParams('before must be a valid ObjectId BSON identifier') if 'before' in params and 'after' in params: raise InvalidSearchParams('only one offset filter is allowed, after or before') if 'date_filter' in request.params: date_filter = date_filter_parser(request.params.get('date_filter', '')) params['date_filter'] = date_filter hashtags = request.params.getall('hashtag') if hashtags: params['hashtag'] = [hasht.lower() for hasht in hashtags] actor = request.params.get('actor') if actor: params['actor'] = actor.lower().rstrip() keywords = request.params.getall('keyword') if keywords: # XXX Split or regex? params['keywords'] = [keyw.lower() for keyw in keywords] username = request.params.get('username') if username: params['username'] = username.lower() tags = request.params.getall('tags') if tags: retags = [] for tag in tags: retag = re.sub(r'\s*(\w+)\s*', r'\1', tag, re.UNICODE) if retag: retags.append(retag) params['tags'] = retags favorites = request.params.get('favorites') if asbool(favorites): params['favorites'] = request.actor_username context_tags = request.params.getall('context_tags') if context_tags: retags = [] for tag in context_tags: retag = re.sub(r'\s*(\w+)\s*', r'\1', tag, re.UNICODE) if retag: retags.append(retag) params['context_tags'] = retags twitter_enabled = request.params.get('twitter_enabled') if twitter_enabled: params['twitter_enabled'] = twitter_enabled max_users = request.params.get('max_users') if max_users: params['max_users'] = max_users return params
def test_bad_dates_query(self): """ """ query = date_filter_parser('') self.assertEqual(query, {})