django-cms / django-filer

File and Image Management Application for django
https://django-filer.readthedocs.io/
Other
1.76k stars 577 forks source link

TypeError: issubclass() arg 2 must be a class or tuple of classes #979

Closed Varkal closed 2 years ago

Varkal commented 7 years ago

Hi,

I've start a project with django-cms (and so, django-filer)

I created some pages, uploaded some images and want to change CACHE settings.

So, i edited settings.py and tell to supervisor to restart the gunicorn workers.

Since i got this error each time, and my templates doesn't show :

Internal Server Error: /fr-fr/
Traceback (most recent call last):
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/db/models/fields/related_descriptors.py", line 170, in __get__
    rel_obj = getattr(instance, self.cache_name)
AttributeError: 'FilerImage' object has no attribute '_image_cache'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/core/handlers/exception.py", line 42, in inner
    response = get_response(request)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/core/handlers/base.py", line 249, in _legacy_get_response
    response = self._get_response(request)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/core/handlers/base.py", line 217, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/core/handlers/base.py", line 215, in _get_response
    response = response.render()
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/template/response.py", line 109, in render
    self.content = self.rendered_content
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/template/response.py", line 86, in rendered_content
    content = template.render(context, self._request)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/template/backends/django.py", line 66, in render
    return self.template.render(context)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/template/base.py", line 208, in render
    return self._render(context)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/template/base.py", line 199, in _render
    return self.nodelist.render(context)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/template/base.py", line 994, in render
    bit = node.render_annotated(context)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/template/base.py", line 961, in render_annotated
    return self.render(context)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/template/loader_tags.py", line 174, in render
    return compiled_parent._render(context)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/template/base.py", line 199, in _render
    return self.nodelist.render(context)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/template/base.py", line 994, in render
    bit = node.render_annotated(context)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/template/base.py", line 961, in render_annotated
    return self.render(context)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/template/loader_tags.py", line 174, in render
    return compiled_parent._render(context)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/template/base.py", line 199, in _render
    return self.nodelist.render(context)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/template/base.py", line 994, in render
    bit = node.render_annotated(context)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/template/base.py", line 961, in render_annotated
    return self.render(context)
  File "/webapps/preprod/env/lib/python3.5/site-packages/classytags/core.py", line 153, in render
    return self.render_tag(context, **kwargs)
  File "/webapps/preprod/env/lib/python3.5/site-packages/sekizai/templatetags/sekizai_tags.py", line 93, in render_tag
    rendered_contents = nodelist.render(context)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/template/base.py", line 994, in render
    bit = node.render_annotated(context)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/template/base.py", line 961, in render_annotated
    return self.render(context)
  File "/webapps/preprod/env/lib/python3.5/site-packages/sekizai/templatetags/sekizai_tags.py", line 76, in render
    return super(SekizaiTag, self).render(context)
  File "/webapps/preprod/env/lib/python3.5/site-packages/classytags/core.py", line 153, in render
    return self.render_tag(context, **kwargs)
  File "/webapps/preprod/env/lib/python3.5/site-packages/sekizai/templatetags/sekizai_tags.py", line 132, in render_tag
    rendered_contents = nodelist.render(context)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/template/base.py", line 994, in render
    bit = node.render_annotated(context)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/template/base.py", line 961, in render_annotated
    return self.render(context)
  File "/webapps/preprod/env/lib/python3.5/site-packages/classytags/core.py", line 153, in render
    return self.render_tag(context, **kwargs)
  File "/webapps/preprod/env/lib/python3.5/site-packages/cms/templatetags/cms_tags.py", line 487, in render_tag
    rendered_contents = nodelist.render(context)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/template/base.py", line 994, in render
    bit = node.render_annotated(context)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/template/base.py", line 961, in render_annotated
    return self.render(context)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/template/loader_tags.py", line 70, in render
    result = block.nodelist.render(context)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/template/base.py", line 994, in render
    bit = node.render_annotated(context)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/template/base.py", line 961, in render_annotated
    return self.render(context)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/template/loader_tags.py", line 70, in render
    result = block.nodelist.render(context)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/template/base.py", line 994, in render
    bit = node.render_annotated(context)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/template/base.py", line 961, in render_annotated
    return self.render(context)
  File "/webapps/preprod/env/lib/python3.5/site-packages/classytags/core.py", line 153, in render
    return self.render_tag(context, **kwargs)
  File "/webapps/preprod/env/lib/python3.5/site-packages/cms/templatetags/cms_tags.py", line 220, in render_tag
    nodelist=nodelist,
  File "/webapps/preprod/env/lib/python3.5/site-packages/cms/plugin_rendering.py", line 266, in render_page_placeholder
    nodelist=nodelist,
  File "/webapps/preprod/env/lib/python3.5/site-packages/cms/plugin_rendering.py", line 499, in _render_page_placeholder
    nodelist=nodelist,
  File "/webapps/preprod/env/lib/python3.5/site-packages/cms/plugin_rendering.py", line 205, in render_placeholder
    placeholder_content = ''.join(plugin_content)
  File "/webapps/preprod/env/lib/python3.5/site-packages/cms/plugin_rendering.py", line 432, in render_plugins
    yield self.render_plugin(plugin, context, placeholder, editable)
  File "/webapps/preprod/env/lib/python3.5/site-packages/cms/plugin_rendering.py", line 341, in render_plugin
    context = plugin.render(context, instance, placeholder.slot)
  File "/webapps/preprod/env/lib/python3.5/site-packages/djangocms_text_ckeditor/cms_plugins.py", line 441, in render
    context,
  File "/webapps/preprod/env/lib/python3.5/site-packages/djangocms_text_ckeditor/utils.py", line 112, in plugin_tags_to_user_html
    return _plugin_tags_to_html(text, output_func=_render_plugin)
  File "/webapps/preprod/env/lib/python3.5/site-packages/djangocms_text_ckeditor/utils.py", line 106, in _plugin_tags_to_html
    return OBJ_ADMIN_RE.sub(_render_tag, text)
  File "/webapps/preprod/env/lib/python3.5/site-packages/djangocms_text_ckeditor/utils.py", line 105, in _render_tag
    return output_func(obj, m)
  File "/webapps/preprod/env/lib/python3.5/site-packages/djangocms_text_ckeditor/utils.py", line 111, in _render_plugin
    return _render_cms_plugin(obj, context)
  File "/webapps/preprod/env/lib/python3.5/site-packages/djangocms_text_ckeditor/utils.py", line 37, in _render_cms_plugin
    request=context['request'],
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/template/loader.py", line 68, in render_to_string
    return template.render(context, request)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/template/backends/django.py", line 66, in render
    return self.template.render(context)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/template/base.py", line 208, in render
    return self._render(context)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/template/base.py", line 199, in _render
    return self.nodelist.render(context)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/template/base.py", line 994, in render
    bit = node.render_annotated(context)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/template/base.py", line 961, in render_annotated
    return self.render(context)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/template/library.py", line 203, in render
    output = self.func(*resolved_args, **resolved_kwargs)
  File "/webapps/preprod/env/lib/python3.5/site-packages/djangocms_text_ckeditor/templatetags/djangocms_text_ckeditor_tags.py", line 15, in render_plugin_preview
    editable=False,
  File "/webapps/preprod/env/lib/python3.5/site-packages/cms/plugin_rendering.py", line 341, in render_plugin
    context = plugin.render(context, instance, placeholder.slot)
  File "/webapps/preprod/env/lib/python3.5/site-packages/cmsplugin_filer_image/cms_plugins.py", line 118, in render
    options = self._get_thumbnail_options(context, instance)
  File "/webapps/preprod/env/lib/python3.5/site-packages/cmsplugin_filer_image/cms_plugins.py", line 93, in _get_thumbnail_options
    if instance.image:
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/db/models/fields/related_descriptors.py", line 179, in __get__
    rel_obj = qs.get()
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/db/models/query.py", line 379, in get
    num = len(clone)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/db/models/query.py", line 238, in __len__
    self._fetch_all()
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/db/models/query.py", line 1087, in _fetch_all
    self._result_cache = list(self.iterator())
  File "/webapps/preprod/env/lib/python3.5/site-packages/polymorphic/query.py", line 445, in iterator
    real_results = self._get_real_instances(base_result_objects)
  File "/webapps/preprod/env/lib/python3.5/site-packages/polymorphic/query.py", line 328, in _get_real_instances
    real_concrete_class = base_object.get_real_instance_class()
  File "/webapps/preprod/env/lib/python3.5/site-packages/polymorphic/models.py", line 117, in get_real_instance_class
    and not issubclass(model, self.__class__._meta.proxy_for_model):
TypeError: issubclass() arg 2 must be a class or tuple of classes

NOTE :

In my investigations i try to use the generate_thumbnail management command (i think maybe the thumbnail haven't been generated and cause some crash).

I got this error :

Traceback (most recent call last):
  File "../source/manage.py", line 22, in <module>
    execute_from_command_line(sys.argv)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/core/management/__init__.py", line 367, in execute_from_command_line
    utility.execute()
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/core/management/__init__.py", line 359, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/core/management/base.py", line 294, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/core/management/base.py", line 345, in execute
    output = self.handle(*args, **options)
  File "/webapps/preprod/env/lib/python3.5/site-packages/filer/management/commands/generate_thumbnails.py", line 20, in handle
    image = Image.objects.get(pk=pk)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/db/models/manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/db/models/query.py", line 379, in get
    num = len(clone)
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/db/models/query.py", line 238, in __len__
    self._fetch_all()
  File "/webapps/preprod/env/lib/python3.5/site-packages/django/db/models/query.py", line 1087, in _fetch_all
    self._result_cache = list(self.iterator())
  File "/webapps/preprod/env/lib/python3.5/site-packages/polymorphic/query.py", line 445, in iterator
    real_results = self._get_real_instances(base_result_objects)
  File "/webapps/preprod/env/lib/python3.5/site-packages/polymorphic/query.py", line 328, in _get_real_instances
    real_concrete_class = base_object.get_real_instance_class()
  File "/webapps/preprod/env/lib/python3.5/site-packages/polymorphic/models.py", line 117, in get_real_instance_class
    and not issubclass(model, self.__class__._meta.proxy_for_model):
TypeError: issubclass() arg 2 must be a class or tuple of classes

Seems pretty similar...

DEBUG INFORMATION :

Ubuntu 16.04.2 LTS (on AWS EC2) Python 3.5.2 (in a virtualenv) DB : mysql Ver 14.14 Distrib 5.7.18, for Linux (x86_64) using EditLine wrapper

pip freeze output

appdirs==1.4.3
cmsplugin-filer==1.1.3
Django==1.10.7
django-appconf==1.0.2
django-classy-tags==0.8.0
django-cms==3.4.3
django-compressor==2.1.1
django-filer==1.2.7
django-formtools==2.0
django-mptt==0.8.7
django-polymorphic==1.0.2
django-sekizai==0.10.0
django-treebeard==4.1.0
djangocms-admin-style==1.2.7
djangocms-attributes-field==0.2.0
djangocms-column==1.7.0
djangocms-googlemap==1.0.2
djangocms-link==2.1.1
djangocms-snippet==1.9.2
djangocms-style==2.0.2
djangocms-text-ckeditor==3.4.0
djangocms-video==2.0.3
easy-thumbnails==2.4.1
gunicorn==19.7.1
html5lib==0.9999999
mailjet-rest==1.2.2
mysqlclient==1.3.10
olefile==0.44
packaging==16.8
Pillow==4.1.0
pkg-resources==0.0.0
pydash==4.0.3
pyparsing==2.2.0
pytz==2017.2
rcssmin==1.0.6
requests==2.13.0
rjsmin==1.0.12
six==1.10.0
Unidecode==0.4.20

I don't know what can i do...

Thnak you in advance for help

Varkal commented 7 years ago

Change title to match the common error between two output

igerko commented 7 years ago

+1

n37r06u3 commented 7 years ago

+1

mihalikv commented 6 years ago

+1

yakky commented 6 years ago

Does this happens with newer versions of django-polymorphic?

macolo commented 6 years ago

Note: This issue occured when I wanted to copy the stage database to production via dumpdata / loaddata. I fixed this by using dumpdata with --natural-foreign.

rlfrahm commented 6 years ago

I was forced to roll back to 1.0 due to this issue.

marksweb commented 5 years ago

A guy on my team has managed to get this same error message. I think it's linked to something in the database, so maybe content types, because it wasn't happening to me.

I've not figured out why yet, but when the filer popup appears & you click into "Unsorted Uploads" the following occurs;

TypeError at /admin/filer/folder/unfiled_images/
issubclass() arg 2 must be a class or tuple of classes

Request Method: GET
Request URL: http://localhost:8000/admin/filer/folder/unfiled_images/?_pick=file&_popup=1
Django Version: 1.11.15
Exception Type: TypeError
Exception Value: issubclass() arg 2 must be a class or tuple of classes
Exception Location: /usr/local/lib/python3.6/site-packages/polymorphic/models.py in get_real_instance_class, line 112
Python Executable: /usr/local/bin/python
Python Version: 3.6.6

Versions of related software;

Django==1.11.15
django-cms==3.5.2
django-filer==1.3.2
django-polymorphic==2.0.3
easy-thumbnails==2.5

Stacktrace;

webapp_1           | ERROR Internal Server Error: /admin/filer/folder/unfiled_images/
webapp_1           | Traceback (most recent call last):
webapp_1           |   File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
webapp_1           |     response = get_response(request)
webapp_1           |   File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py", line 187, in _get_response
webapp_1           |     response = self.process_exception_by_middleware(e, request)
webapp_1           |   File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py", line 185, in _get_response
webapp_1           |     response = wrapped_callback(request, *callback_args, **callback_kwargs)
webapp_1           |   File "/usr/local/lib/python3.6/site-packages/django/utils/decorators.py", line 149, in _wrapped_view
webapp_1           |     response = view_func(request, *args, **kwargs)
webapp_1           |   File "/usr/local/lib/python3.6/site-packages/django/views/decorators/cache.py", line 57, in _wrapped_view_func
webapp_1           |     response = view_func(request, *args, **kwargs)
webapp_1           |   File "/usr/local/lib/python3.6/site-packages/django/contrib/admin/sites.py", line 224, in inner
webapp_1           |     return view(request, *args, **kwargs)
webapp_1           |   File "/usr/local/lib/python3.6/site-packages/filer/admin/folderadmin.py", line 348, in directory_listing
webapp_1           |     folder_files += file_qs
webapp_1           |   File "/usr/local/lib/python3.6/site-packages/django/db/models/query.py", line 250, in __iter__
webapp_1           |     self._fetch_all()
webapp_1           |   File "/usr/local/lib/python3.6/site-packages/django/db/models/query.py", line 1118, in _fetch_all
webapp_1           |     self._result_cache = list(self._iterable_class(self))
webapp_1           |   File "/usr/local/lib/python3.6/site-packages/polymorphic/query.py", line 62, in _polymorphic_iterator
webapp_1           |     real_results = self.queryset._get_real_instances(base_result_objects)
webapp_1           |   File "/usr/local/lib/python3.6/site-packages/polymorphic/query.py", line 362, in _get_real_instances
webapp_1           |     real_concrete_class = base_object.get_real_instance_class()
webapp_1           |   File "/usr/local/lib/python3.6/site-packages/polymorphic/models.py", line 112, in get_real_instance_class
webapp_1           |     and not issubclass(model, self.__class__._meta.proxy_for_model):
webapp_1           | TypeError: issubclass() arg 2 must be a class or tuple of classes
webapp_1           | ERROR "GET /admin/filer/folder/unfiled_images/?_pick=file&_popup=1 HTTP/1.1" 500 119677

In get_real_instance_class we've got;

model <class 'easy_thumbnails.models.Thumbnail'>
self  <File: desktop.jpg>
rooterkyberian commented 5 years ago

I have run into the same error in local dev environment after loaddata without natural keys. It seems I was able to fix it manually by search for the correct ID mappings between filer_file polymorphic_ctype_id column and django_content_type table ids and updating data accordingly. It is manual work, so if you have more broken data it just may not be worth fixing.

Shame the error is so cryptic.

Django==1.11.20
django-cms==3.4.6
django-filer==1.4.4
django-polymorphic==2.0.3
openHBP commented 4 years ago

That was exactly my problem! Thanks a lot! The polymorphic_ctype_id was pointing on an id different from file_file in django_content_type table update filer_file set polymorphic_ctype_id = 33 (id of filer_file in django_content_type table)

stale[bot] commented 2 years ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

stale[bot] commented 2 years ago

This will now be closed due to inactivity, but feel free to reopen it.