コード例 #1
0
ファイル: cache_util.py プロジェクト: chengdg/weizoom
def update_auto_qa_message_cache(**kwargs):
    if hasattr(cache, 'request'):
        if hasattr(cache.request.user_profile, 'webapp_id'):
            webapp_id = cache.request.user_profile.webapp_id

            key = 'auto_qa_message_webapp_id_%s_*' % (webapp_id)
            cache_util.delete_pattern(key)
コード例 #2
0
    def api_post(request):
        """
		响应POST
		"""
        data = request_util.get_fields_to_be_save(request)
        data = add_extra_data(data, request.POST)
        update_data = {}
        update_fields = set([
            'name', 'start_time', 'end_time', 'allow_repeat', 'expend',
            'delivery', 'delivery_setting', 'limitation', 'chance', 'type',
            'prize'
        ])
        for key, value in data.items():
            if key in update_fields:
                update_data['set__' + key] = value
        app_models.Egg.objects(id=request.POST['id']).update(**update_data)

        #更新后清除缓存
        # cache_key = 'apps_egg_%s_noprizecount' % request.POST['id']
        # delete_cache(cache_key)
        cache_key = "apps_egg_%s_*" % request.POST['id']
        delete_pattern(cache_key)

        response = create_response(200)
        return response.get_response()
コード例 #3
0
def update_webapp_product_detail_cache_when_update_model_property_value(
        **kwargs):
    if hasattr(cache, 'request'):
        if hasattr(cache.request, 'user'):
            owner_id = cache.request.user.id

            key = 'webapp_product_detail_{wo:%s}_{pid:*}' % (owner_id)
            cache_util.delete_pattern(key)

            # key = 'webapp_products_categories_{wo:%s' % (owner_id)
            # cache_util.delete_pattern(key)
            update_product_list_cache(owner_id)
コード例 #4
0
def update_webapp_product_pool_cache(**kwargs):
    """
    更新商品详情缓存
    """
    if hasattr(cache, 'request') and cache.request.user_profile:
        webapp_owner_id = cache.request.user_profile.user_id
        product_ids = None
        pattern = 'webapp_product_detail_{wo:%s}_*' % webapp_owner_id
        cache_util.delete_pattern(pattern)

        # pattern_categories = "webapp_products_categories_{wo:%s}" % webapp_owner_id
        # cache_util.delete_pattern(pattern_categories)
        update_product_list_cache(webapp_owner_id)
コード例 #5
0
def update_webapp_product_detail_by_review_cache(**kwargs):
    if hasattr(cache, 'request'):
        webapp_owner_id = cache.request.user_profile.user_id
        instance = kwargs.get('instance', None)
        if instance:
            if isinstance(instance, mall_models.ProductReview):
                product_id = instance.product_id
            else:
                product_id = instance[0].product_id
            key = 'p_r_{id:%s}' % product_id
            cache_util.delete_pattern(key)

            update_product_cache(webapp_owner_id, product_id)
コード例 #6
0
def update_webapp_product_detail_cache(**kwargs):
    """
    更新商品详情缓存
    """
    if hasattr(cache, 'request') and cache.request.user_profile:
        webapp_owner_id = cache.request.user_profile.user_id
        product_ids = None
        cache_args = kwargs.get('cache_args', None)
        if cache_args:
            product_ids = cache_args.get('ids', [])

        if product_ids and len(product_ids) > 0:
            for product_id in product_ids:
                update_product_cache(webapp_owner_id, product_id)
                # 微众商城代码
                # 更新微众商城缓存
                # TODO 更好的设计微众商城
                # if webapp_owner_id != 216:
                #     key = 'webapp_product_detail_{wo:216}_{pid:%s}' % (product_id)
                #     cache_util.delete_cache(key)
            # 微众商城代码
            # if webapp_owner_id != 216:
            #     cache_util.delete_cache('webapp_products_categories_{wo:216}')
        else:
            pattern = 'webapp_product_detail_{wo:%s}_*' % webapp_owner_id
            cache_util.delete_pattern(pattern)

            # pattern_categories = "webapp_products_categories_{wo:%s}" % webapp_owner_id
            # cache_util.delete_pattern(pattern_categories)
            update_product_list_cache(webapp_owner_id)

            instance = kwargs.get('instance', None)
            if instance:
                if isinstance(instance, mall_models.Product):
                    product_id = instance.id
                else:
                    product_id = instance[0].id
                # 会有一次多余删除 todo
                update_product_cache(webapp_owner_id,
                                     product_id,
                                     deleteRedis=False)
コード例 #7
0
ファイル: webapp_owner_cache.py プロジェクト: chengdg/weizoom
def update_webapp_owner_info_cache_with_login(instance, **kwargs):
    if isinstance(instance, account_models.UserProfile):
        webapp_owner_id = instance.user_id
    elif isinstance(instance, AccountHasWeizoomCardPermissions):
        webapp_owner_id = instance.owner_id
    else:
        if cache.request.user_profile:
            webapp_owner_id = cache.request.user_profile.user_id
        else:
            return
    key = 'webapp_owner_info_{wo:%s}' % webapp_owner_id
    cache_util.delete_cache(key)

    key_termite_page = 'termite_webapp_page_%s_*' % webapp_owner_id
    cache_util.delete_pattern(key_termite_page)
    get_webapp_owner_info(webapp_owner_id)
    try:
        from termite2.tasks import purge_webapp_page_from_varnish_cache
        purge_webapp_page_from_varnish_cache.delay(webapp_owner_id)
    except:
        pass
コード例 #8
0
    def handle(self, *args, **options):
        """

		@param args:
			None: 清空所有以apps_开头的redis缓存
			args[0]: 清空所有以apps_args[0]_开头的redis缓存
			args[1]: 清空所有以apps_args[0]_args[1]_开头的redis缓存
		注:签到的缓存key用的是weapp_owner_id, 其他活动用的是主表的id
		@param options:
		@return:
		"""
        print 'clear apps redis cache start...'
        l = len(args)
        if l == 1:
            apps_name = args[0]
            patten = "apps_%s_*" % apps_name
            delete_pattern(patten)
            print 'delete all cache those match patten', patten
        elif l == 2:
            apps_name = args[0]
            apps_id = args[1]
            patten = "apps_%s_%s*" % (apps_name, apps_id)
            delete_pattern(patten)
            print 'delete all cache those match patten', patten
        else:
            patten = "apps_*"
            delete_pattern(patten)
            print 'delete all apps cache'
        print 'clear apps redis cache end...'
コード例 #9
0
def update_webapp_product_cache(**kwargs):
    if hasattr(cache, 'request') and cache.request.user_profile:
        webapp_owner_id = cache.request.user_profile.user_id
        instance = kwargs.get('instance', None)
        before_instance = kwargs.get('before_instance', None)
        sender = kwargs.get('sender', None)
        if instance and sender == mall_models.Product:
            if isinstance(instance, mall_models.Product):
                product_id = instance.id
                shelve_type = instance.shelve_type
                is_deleted = instance.is_deleted
                # 微众商城代码
                # weshop_status = instance.weshop_status
                # weshop_sync = instance.weshop_sync
            else:
                product_id = instance[0].id
                shelve_type = instance[0].shelve_type
                is_deleted = instance[0].is_deleted
                # 微众商城代码
                # weshop_status = instance[0].weshop_status
                # weshop_sync = instance[0].weshop_sync
            if before_instance:
                # 微众商城代码
                #微众商城下架处理 duhao 20151120
                # if before_instance.weshop_status != weshop_status and mall_models.PRODUCT_SHELVE_TYPE_OFF == weshop_status:
                #     cache_util.rem_set_member_by_patten_from_redis('{wo:216}_{co:*}_products',product_id)

                if before_instance.shelve_type != shelve_type and mall_models.PRODUCT_SHELVE_TYPE_OFF == shelve_type or is_deleted == True:
                    #下架商品,清除redis中{wo:38}_{co:*}_products的数据项,批量更新
                    # 或者删除商品时
                    categories_products_key = '{wo:%s}_{co:*}_products' % (
                        webapp_owner_id)
                    cache_util.rem_set_member_by_patten_from_redis(
                        categories_products_key, product_id)

                    # 微众商城代码
                    # if weshop_sync > 0:
                    #     #微众商城的缓存也要一起更新 duhao 20151120
                    #     cache_util.rem_set_member_by_patten_from_redis('{wo:216}_{co:*}_products',product_id)
                elif before_instance.shelve_type != shelve_type and mall_models.PRODUCT_SHELVE_TYPE_ON == shelve_type:
                    # 微众商城代码
                    # elif (before_instance.shelve_type != shelve_type or webapp_owner_id == 216) and mall_models.PRODUCT_SHELVE_TYPE_ON == shelve_type:
                    #上架商品,确定该商品原来是否有category
                    category_has_products = mall_models.CategoryHasProduct.objects.filter(
                        product_id=product_id)
                    if category_has_products:
                        for category_has_pro in category_has_products:
                            categories_products_key = '{wo:%s}_{co:%s}_products' % (
                                webapp_owner_id, category_has_pro.category.id)
                            cache_util.add_set_to_redis(
                                categories_products_key,
                                category_has_pro.product_id)
                    categories_products_key = '{wo:%s}_{co:0}_products' % (
                        webapp_owner_id)
                    cache_util.delete_cache(categories_products_key)
                    #todo zhaolei
                    # cache_util.add_set_to_redis(categories_products_key,product_id)
            update_product_cache(webapp_owner_id, product_id)

        elif instance and sender == mall_models.CategoryHasProduct:
            # 商品分组中更新商品时
            if isinstance(instance, mall_models.CategoryHasProduct):
                catory_id = instance.category_id
                product_id = instance.product_id
            else:
                catory_id = instance[0].category_id
                product_id = instance[0].product_id
            product = mall_models.Product.objects.filter(id=product_id).get()
            # 非待售添加
            if product.shelve_type != mall_models.PRODUCT_SHELVE_TYPE_OFF:
                # 微众商城代码
                # if product.shelve_type != mall_models.PRODUCT_SHELVE_TYPE_OFF and (webapp_owner_id != 216 or \
                #     (webapp_owner_id == 216 and product.weshop_status != mall_models.PRODUCT_SHELVE_TYPE_OFF)):
                #如果是微众商城过来的请求,则需要验证微众商城里的在售状态 duhao 20151120
                # if product.shelve_type != mall_models.PRODUCT_SHELVE_TYPE_OFF:
                categories_products_key = '{wo:%s}_{co:%s}_products' % (
                    webapp_owner_id, catory_id)
                # todo zhaolei 会存在多次删除的情况
                cache_util.delete_cache(categories_products_key)
                # todo zhaolei 清除对应的varnish缓存,需要重构
                # if settings.EN_VARNISH:
                #     if not settings.DEBUG:
                #         url = 'http://%s/termite/workbench/jqm/preview/?woid=%s&module=mall&model=products&action=list&category_id=%s' % \
                #                 (settings.DOMAIN, webapp_owner_id, catory_id)
                #         request = urllib2.Request(url)
                #         request.get_method = lambda: 'PURGE'
                #         urllib2.urlopen(request)
        elif instance and sender == mall_models.ProductCategory:
            categories_key = '{wo:%s}_categories' % (webapp_owner_id)
            cache_util.delete_cache(categories_key)
        elif instance and sender == mall_models.ProductModel:
            if isinstance(instance, mall_models.ProductModel):
                #暂不处理
                pass
            else:
                for ins in instance:
                    product_id = ins.product_id
                    key = 'webapp_product_detail_{wo:%s}_{pid:%s}' % (
                        webapp_owner_id, product_id)
                    cache_util.delete_pattern(key)

        # pattern_categories = "webapp_products_categories_{wo:%s}" % webapp_owner_id
        # cache_util.delete_pattern(pattern_categories)
        update_product_list_cache(webapp_owner_id)

        key_termite_page = 'termite_webapp_page_%s_*' % webapp_owner_id
        cache_util.delete_pattern(key_termite_page)
        try:
            from termite2.tasks import purge_webapp_page_from_varnish_cache
            purge_webapp_page_from_varnish_cache.delay(webapp_owner_id)
        except:
            pass
コード例 #10
0
 def delete_all_webapp_page_cache(webapp_owner_id):
     key_termite_page = 'termite_webapp_page_%s_*' % webapp_owner_id
     cache_util.delete_pattern(key_termite_page)
     purge_webapp_page_from_varnish_cache.delay(webapp_owner_id)
コード例 #11
0
    def api_post(request):
        """
		保存(更新)模板项目
		"""
        project_id = request.POST['id']
        field = request.POST['field']
        if field == 'page_content_from_zip':
            if not Project.import_from_zip_file(request):
                response = create_response(501)
                response.errMsg = u'导入page失败'
                return response.get_response()
        elif field == 'page_content':
            project_id = request.GET.get('project_id', '')
            if project_id.startswith('fake:'):
                _, project_type, webapp_owner_id, page_id, mongodb_id = project_id.split(
                    ':')
                pagestore = pagestore_manager.get_pagestore_by_type('mongo')
                page_component = json.loads(request.POST['page_json'])
                if mongodb_id == 'new':
                    page_component['is_new_created'] = True
                real_project_id = 'fake:%s:%s:%s' % (project_type,
                                                     webapp_owner_id, page_id)
                pagestore.save_page(real_project_id, page_id, page_component)

                if mongodb_id == 'new':
                    page = pagestore.get_page(real_project_id, page_id)
                    result_project_id = 'fake:%s:%s:%s:%s' % (
                        project_type, webapp_owner_id, page_id, str(
                            page['_id']))
                else:
                    result_project_id = project_id
                response = create_response(200)
                response.data = result_project_id
                Project.delete_all_webapp_page_cache(webapp_owner_id)
                return response.get_response()
            if project_id.startswith('new_app:'):
                if project_id.endswith(':0'):
                    project_id = Project.create_empty_app_page(request)
                    response = create_response(200)
                    response.data = {'project_id': project_id}
                    Project.delete_all_webapp_page_cache(request.manager.id)
                    return response.get_response()
                else:
                    Project.update_app_page_content(request)
            else:
                Project.update_page_content(request)
                #清除webapp page cache
                # Project.delete_webapp_page_cache(request.manager.id, project_id)
        elif field == 'is_enable':
            webapp_models.Project.objects.filter(id=project_id).update(
                is_enable=True)
        else:
            if field[0] == '[':
                fields = json.loads(field)
                values = json.loads(request.POST['value'])
                options = dict(zip(fields, values))
            else:
                value = request.POST['value']
                options = {field: value}
            webapp_models.Project.objects.filter(id=project_id).update(
                **options)

        key_termite_page = 'termite_webapp_page_%s_*' % request.manager.id
        cache_util.delete_pattern(key_termite_page)
        purge_webapp_page_from_varnish_cache.delay(request.manager.id)

        response = create_response(200)
        return response.get_response()
コード例 #12
0
ファイル: member_cache.py プロジェクト: chengdg/weizoom
def delete_member_cache(openid, webapp_id):
    today = datetime.today()
    date_str = datetime.today().strftime('%Y-%m-%d')

    key = 'member_{webapp:%s}_{openid:%s}' % (webapp_id, openid)
    cache_util.delete_pattern(key)