Example #1
0
 def get_users(self):
     Queue.add(f'get users',
               url='users',
               method='get',
               backoff_duration=30,
               cache_name="get_users",
               cache_is_unique=True)
     return Cache.get_data('get_users', default=[])
Example #2
0
        def decorated(*args, **kwargs):
            if current_app.config['TESTING']:
                if 'db_call' in dkwargs:
                    data = dkwargs['db_call'](*args, **kwargs)
                else:
                    data = f(*args, **kwargs)
                return data

            data = None
            if 'from_cache' in dkwargs:
                for cache_name in dkwargs['from_cache'].split(','):
                    data_cache = Cache.get_data(cache_name)
                    if data_cache:
                        if len(args) == 2:
                            data = [
                                d for d in data_cache
                                if d[dkwargs['key']] == str(args[1])
                            ]
                            if len(data) > 0:
                                data = data[0]
                                break
                        else:
                            current_app.logger.info("from_cache not 2 args")
            else:
                data = Cache.get_data(f.__name__)

                if data and dkwargs.get('update_daily'):
                    updated_on = Cache.get_updated_on(f.__name__)
                    kwargs['func'] = f
                    if 'decorator' in dkwargs:
                        kwargs['decorator'] = dkwargs['decorator']
                    if 'sort_by' in dkwargs:
                        kwargs['sort_by'] = dkwargs['sort_by']
                    if (datetime.utcnow() - updated_on
                        ).seconds > 60 * 60 * 24:  # update pages once a day
                        update_cache(*args, **kwargs)

            if not data:
                if 'db_call' in dkwargs:
                    data = dkwargs['db_call'](*args, **kwargs)
                else:
                    data = f(*args, **kwargs)
                if 'from_cache' not in dkwargs:
                    Cache.set_data(f.__name__, data)
            return data
Example #3
0
    def get_user(self, email):
        users = Cache.get_data('get_users', default=[])

        for user in users:
            if user['email'] == email:
                return user

        user = self.get(url='user/{}'.format(email))
        users.append(user)

        Cache.set_data('get_users', users, is_unique=True)

        return user
Example #4
0
def update_cache(*args, **kwargs):
    func = kwargs.pop('func')
    cache___name__ = func.__name__.replace("_from_db", "")
    cached_data = Cache.get_data(cache___name__)
    if 'decorator' in kwargs:
        func = kwargs['decorator'](func)

    data = func(*args, **kwargs)

    review_data = Cache.get_review_entities(func.__name__)

    if review_data and 'sort_by' in kwargs:
        sort_by = kwargs.pop('sort_by')
        data = sort_by(data.extend(review_data))

    if cached_data != data:
        current_app.logger.info('Cache updated from db')
        Cache.set_data(cache___name__, data)
    else:
        current_app.logger.info('Cache does not need updating for {}'.format(
            func.__name__))

    Cache.purge_older_versions(func.__name__)