En voilà un warning pratique à régler encore.
/[...]/python2.7/site-packages/django/contrib/contenttypes/models.py:159: RemovedInDjango19Warning: Model class django.contrib.contenttypes.models.ContentType doesn't declare an explicit app_label and either isn't in an application in INSTALLED_APPS or else was imported before its application was loaded. This will no longer be supported in Django 1.9. class ContentType(models.Model):
Et si vous utilisez le module auth, voua aurez le droit à ses copines pour les Permission, Group et user.
Bon alors commençons par le début, c’est quoi ce warning, il veut nous dire quoi ?
Si on ouvre le fichier dont on nous parle on tombe la dessus
class ContentType(models.Model): app_label = models.CharField(max_length=100) model = models.CharField(_('python model class name'), max_length=100) objects = ContentTypeManager() class Meta: verbose_name = _('content type') verbose_name_plural = _('content types') db_table = 'django_content_type' unique_together = (('app_label', 'model'),)
Et, Oh magie il n’y a pas de app_label…
Bon, on un début d’explication, mais ce ne devrait pas être un problème vu que cette app django.contrib.contenttypes
se trouve bien dans INSTALLED_APP
, contrairement à ce qu’il me dit.
Donc je me penche sur la troisième et dernière possibilité que l’on me donne or else was imported before its application was loaded
.
Bon, donc en gros, ContentType et compagnie sont chargé avant que mon app le soit, mais comment est-ce possible ?
Pour savoir ou c’est chargé, je vais lancer runserver avec l’option -Werror, et récupérer une traceback qui me donnera plus d’infos
$ python -Werror manage.py runserver Traceback (most recent call last): File "manage.py", line 10, in <module> execute_from_command_line(sys.argv) File "/home/Aymeric/Projects/www/venv/lib/python2.7/site-packages/django/core/management/__init__.py", line 351, in execute_from_command_line utility.execute() File "/home/Aymeric/Projects/www/venv/lib/python2.7/site-packages/django/core/management/__init__.py", line 303, in execute settings.INSTALLED_APPS File "/home/Aymeric/Projects/www/venv/lib/python2.7/site-packages/django/conf/__init__.py", line 48, in __getattr__ self._setup(name) File "/home/Aymeric/Projects/www/venv/lib/python2.7/site-packages/django/conf/__init__.py", line 44, in _setup self._wrapped = Settings(settings_module) File "/home/Aymeric/Projects/www/venv/lib/python2.7/site-packages/django/conf/__init__.py", line 92, in __init__ mod = importlib.import_module(self.SETTINGS_MODULE) File "/usr/lib64/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) File "/home/Aymeric/Projects/www/klemail/__init__.py", line 5, in <module> from .celery import app as celery_app File "/home/Aymeric/Projects/www/klemail/celery.py", line 5, in <module> from celery import Celery File "/home/Aymeric/Projects/www/venv/lib/python2.7/site-packages/celery/five.py", line 306, in __getattr__ module = __import__(self._object_origins[name], None, None, [name]) File "/home/Aymeric/Projects/www/venv/lib/python2.7/site-packages/celery/app/__init__.py", line 14, in <module> from celery import _state File "/home/Aymeric/Projects/www/venv/lib/python2.7/site-packages/celery/_state.py", line 20, in <module> from celery.utils.threads import LocalStack File "/home/Aymeric/Projects/www/venv/lib/python2.7/site-packages/celery/utils/__init__.py", line 25, in <module> from kombu.entity import Exchange, Queue File "/home/Aymeric/Projects/www/venv/lib/python2.7/site-packages/kombu/entity.py", line 10, in <module> from .abstract import MaybeChannelBound, Object File "/home/Aymeric/Projects/www/venv/lib/python2.7/site-packages/kombu/abstract.py", line 12, in <module> from .connection import maybe_channel File "/home/Aymeric/Projects/www/venv/lib/python2.7/site-packages/kombu/connection.py", line 19, in <module> from kombu import exceptions File "/home/Aymeric/Projects/www/venv/lib/python2.7/site-packages/kombu/exceptions.py", line 12, in <module> from amqp import ChannelError, ConnectionError, ResourceError File "/home/Aymeric/Projects/Klemail/www/venv/lib/python2.7/site-packages/amqp/__init__.py", line 34, in <module> from .connection import Connection # noqa File "/home/Aymeric/Projects/www/venv/lib/python2.7/site-packages/amqp/connection.py", line 24, in <module> from ssl import SSLError ImportWarning: Not importing directory '/home/Aymeric/Projects/www/ssl': missing __init__.py
Bon la, je suis perdu, en fin de compte le problème viendrait de Celery que j’import dans mon __init__.py de mon projet. Je le commente pour voir ce que ça donne.
Mais ce coups-ci je lance la commande makemigrations parceque runserver va planter et me donner une erreur qui me fait pas avancer. Je tente donc la commande makemigrations.
Et la en regardant la traceback, on y est !. Je vais pas vous la copier en entier parcequ’elle est longue, mais une ligne m’interpelle :
File "/home/Aymeric/Projects/www/libs/log.py", line 4, in <module>
En faite dans ce fichier je définis un nouvel Handler pour le loggings (pour logger sur slack). Et comme pour envoyer des messages sur Slack, je charger Celery qui lui doit charger ContentType, le tout avant que mon programme soit chargé, j’ai ma solution !
Pour tester, je remet en état initial mon fichier __init__.py, et je commente toute la partie qui implique l’import de Celery dans mon fichier logs.py
Plus de warning, YOUHOU
Bon, bah maintenant que j’ai trouvé d’où ca vient, je retourne finir de fixer cetter merde 😉