Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
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)
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
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
Ejemplo n.º 7
0
 def test_bad_dates_query(self):
     """
     """
     query = date_filter_parser('')
     self.assertEqual(query, {})