不能沉默django-cms产生的警告 [英] Can't silence warnings that django-cms produces

查看:90
本文介绍了不能沉默django-cms产生的警告的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用 djangocms-installer 脚本安装了Django-cms,除非我收到一堆 RemovedInDjango18Warning 在每次启动服务器时,shell中都会发出警告,用manage.py做任何事情,甚至做一个manage.py tab-autocomplete(最烦人的)!所以以为我会默认警告,使用警告模块:

  #在manage.py,就在`import os;导入sys`:
import warnings
warnings.filterwarnings(ignore)

我想要更加具体的沉默,但事实证明,即使这个简单的案例也没有做任何事情,警告仍然显示!我做错了什么?



警告:

 用户/ fran / .virtualenvs / dkde2015 / lib / python2.7 / site-packages / cms / publisher / manager.py:5:RemovedInDjango18警告:`PublisherManager.get_query_set`方法应该被重命名为`get_queryset`。 
class PublisherManager(models.Manager):

/Users/fran/.virtualenvs/dkde2015/lib/python2.7/site-packages/cms/models/managers.py:15: RemovedInDjango18警告:`PageManager.get_query_set`方法应该被重命名为`get_queryset`。
class PageManager(PublisherManager):

/Users/fran/.virtualenvs/dkde2015/lib/python2.7/site-packages/cms/admin/change_list.py:39:RemovedInDjango18警告: `CMSChangeList.get_query_set`方法应该被重命名为`get_queryset`。
class CMSChangeList(ChangeList):

/Users/fran/.virtualenvs/dkde2015/lib/python2.7/site-packages/cms/admin/forms.py:340:RemovedInDjango18警告:创建一个没有fields属性或exclude属性的ModelForm已被弃用 - 表单PagePermissionInlineAdminForm需要更新
class PagePermissionInlineAdminForm(forms.ModelForm):

/Users/fran/.virtualenvs /dkde2015/lib/python2.7/site-packages/cms/admin/forms.py:442:RemovedInDjango18警告:不建议使用fields属性或exclude属性的ModelForm已弃用 - ViewRestrictionInlineAdminForm需要更新
class ViewRestrictionInlineAdminForm(PagePermissionInlineAdminForm):

/Users/fran/.virtualenvs/dkde2015/lib/python2.7/site-packages/cms/admin/forms.py:491:RemovedInDjango18警告:创建一个没有fields属性或exclude属性的ModelForm已被弃用 - 表示PageUserForm需要更新
class PageUserForm(UserCreationForm,GenericCmsPermissionForm):

/Users/fran/.virtualenvs/dkde2015/lib/python2.7/site-packages/django/forms/widgets.py:143 :RemovedInDjango18警告:`PagePermissionInlineAdmin.queryset`方法应该被重命名为`get_queryset`。
.__ new __(mcs,name,bases,attrs))

/Users/fran/.virtualenvs/dkde2015/lib/python2.7/site-packages/django/forms/widgets。 py:143:RemovedInDjango18警告:`ViewRestrictionInlineAdmin.queryset`方法应该被重命名为`get_queryset`。
.__ new __(mcs,name,bases,attrs))

/Users/fran/.virtualenvs/dkde2015/lib/python2.7/site-packages/django/forms/widgets。 py:143:RemovedInDjango18警告:`PageUserAdmin.queryset`方法应该重命名为`get_queryset`。
.__ new __(mcs,name,bases,attrs))


解决方案

解决这个问题的手段是创建一个日志记录过滤器,只会过滤掉明确指定为要静默的警告。你知道:


错误不应该静默地通过。

除非有明确的沉默。







考虑到这一点,这里是我的过滤机械,都在 settings.py (现在无论如何):

  MY_IGNORED_WARNINGS = {
'RemovedInDjango18警告:`PublisherManager.get_query_set` ',
'RemovedInDjango18警告:`PageManager.get_query_set`',
'RemovedInDjango18警告:`CMSChangeList.get_query_set`',
'表单PagePermissionInlineAdminForm需要更新',
'窗体ViewRestrictionInlineAdminForm需要更新',
'form PageUserForm需要更新',
'/cms/admin/placeholderadmin.py:133:RemovedInDjango18Warning:Options.module_name已被弃用',
'/ cms / admin / settingsadmin .py:28:RemovedInDjango18警告:Options.module_name已被弃用',
'/cms/admin/pageadmin.py:111: RemovedInDjango18警告:Options.module_name已被弃用',
'RemovedInDjango18警告:`PagePermissionInlineAdmin.queryset',
'RemovedInDjango18警告:`ViewRestrictionInlineAdmin.queryset`',
'RemovedInDjango18警告:`PageUserAdmin.queryset`' ,

}

def filter_djangocms_warnings(record):
在MY_IGNORED_WARNINGS中被忽略:
如果在record.args [0]中被忽略:
return False
return True

LOGGING = {
'version':1,
'disable_existing_loggers':False,
'handlers':{
'console':{
'class':'logging.StreamHandler',
},
},
'filters':{
'ignore_djangocms_warnings' :{
'()':'django.utils.log.CallbackFilter',
'callback':filter_djangocms_warnings,
},
},
'loggers' :{
'py.warnings':{
'handlers':['console',],
'filters':['ignore_djangocms_warnings',],
}
},
}

我想象可以进一步改进...任何想法?






为什么麻烦?



对于一个,我可以使用(再次)使用 django bash自动完成,每次按[tab ]



此外,现在我没有从DjangoCMS发出的20+警告,我实际上可以看到我自己的代码发生了什么警告。 >

I installed Django-cms with the djangocms-installer script, and all works fine except that I get a bunch of RemovedInDjango18Warning warnings in the shell every time I start the server, do anything with manage.py, or even do a manage.py tab-autocomplete (most annoying)! So thought I'd silence the warnings, using warnings module:

# in manage.py, just after `import os; import sys`:
import warnings
warnings.filterwarnings("ignore")

I would like to get more specific with the silencing, but it turns out that even this simple case does not do anything, the warnings are still displayed! What am I doing wrong?!

The warnings:

/Users/fran/.virtualenvs/dkde2015/lib/python2.7/site-packages/cms/publisher/manager.py:5: RemovedInDjango18Warning: `PublisherManager.get_query_set` method should be renamed `get_queryset`.
  class PublisherManager(models.Manager):

/Users/fran/.virtualenvs/dkde2015/lib/python2.7/site-packages/cms/models/managers.py:15: RemovedInDjango18Warning: `PageManager.get_query_set` method should be renamed `get_queryset`.
  class PageManager(PublisherManager):

/Users/fran/.virtualenvs/dkde2015/lib/python2.7/site-packages/cms/admin/change_list.py:39: RemovedInDjango18Warning: `CMSChangeList.get_query_set` method should be renamed `get_queryset`.
  class CMSChangeList(ChangeList):

/Users/fran/.virtualenvs/dkde2015/lib/python2.7/site-packages/cms/admin/forms.py:340: RemovedInDjango18Warning: Creating a ModelForm without either the 'fields' attribute or the 'exclude' attribute is deprecated - form PagePermissionInlineAdminForm needs updating
  class PagePermissionInlineAdminForm(forms.ModelForm):

/Users/fran/.virtualenvs/dkde2015/lib/python2.7/site-packages/cms/admin/forms.py:442: RemovedInDjango18Warning: Creating a ModelForm without either the 'fields' attribute or the 'exclude' attribute is deprecated - form ViewRestrictionInlineAdminForm needs updating
  class ViewRestrictionInlineAdminForm(PagePermissionInlineAdminForm):

/Users/fran/.virtualenvs/dkde2015/lib/python2.7/site-packages/cms/admin/forms.py:491: RemovedInDjango18Warning: Creating a ModelForm without either the 'fields' attribute or the 'exclude' attribute is deprecated - form PageUserForm needs updating
  class PageUserForm(UserCreationForm, GenericCmsPermissionForm):

/Users/fran/.virtualenvs/dkde2015/lib/python2.7/site-packages/django/forms/widgets.py:143: RemovedInDjango18Warning: `PagePermissionInlineAdmin.queryset` method should be renamed `get_queryset`.
  .__new__(mcs, name, bases, attrs))

/Users/fran/.virtualenvs/dkde2015/lib/python2.7/site-packages/django/forms/widgets.py:143: RemovedInDjango18Warning: `ViewRestrictionInlineAdmin.queryset` method should be renamed `get_queryset`.
  .__new__(mcs, name, bases, attrs))

/Users/fran/.virtualenvs/dkde2015/lib/python2.7/site-packages/django/forms/widgets.py:143: RemovedInDjango18Warning: `PageUserAdmin.queryset` method should be renamed `get_queryset`.
  .__new__(mcs, name, bases, attrs))

解决方案

The surgical way to solve this is to create a logging filter that will only filter out warnings that are explicitly specified to be silenced. You know:

Errors should never pass silently.
Unless explicitly silenced.


With that in mind, here is my filter machinery, all in settings.py (for now anyways):

MY_IGNORED_WARNINGS = {
    'RemovedInDjango18Warning: `PublisherManager.get_query_set`',
    'RemovedInDjango18Warning: `PageManager.get_query_set`',
    'RemovedInDjango18Warning: `CMSChangeList.get_query_set`',
    'form PagePermissionInlineAdminForm needs updating',
    'form ViewRestrictionInlineAdminForm needs updating',
    'form PageUserForm needs updating',
    '/cms/admin/placeholderadmin.py:133: RemovedInDjango18Warning: Options.module_name has been deprecated',
    '/cms/admin/settingsadmin.py:28: RemovedInDjango18Warning: Options.module_name has been deprecated',
    '/cms/admin/pageadmin.py:111: RemovedInDjango18Warning: Options.module_name has been deprecated',
    'RemovedInDjango18Warning: `PagePermissionInlineAdmin.queryset',
    'RemovedInDjango18Warning: `ViewRestrictionInlineAdmin.queryset`',
    'RemovedInDjango18Warning: `PageUserAdmin.queryset`',

}

def filter_djangocms_warnings(record):
    for ignored in MY_IGNORED_WARNINGS:
        if ignored in record.args[0]:
            return False
    return True

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
        },
    },
    'filters': {
        'ignore_djangocms_warnings': {
            '()': 'django.utils.log.CallbackFilter',
            'callback': filter_djangocms_warnings,
        },
    },
    'loggers': {
        'py.warnings': {
            'handlers': ['console', ],
            'filters': ['ignore_djangocms_warnings', ],
        }
    },
}

I imagine it can be further refined... any ideas?


Why bother?

For one, I can use now (again) use django bash autocomplete without a bunch of warnings echoed every time I press [tab].

Also, now that I don't have 20+ warnings form DjangoCMS, I can actually see what warnings come from my own code and fix it.

这篇关于不能沉默django-cms产生的警告的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆