Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What became available_attrs on Django 3?

First of all, I'm new to Django, so please be nice with me :D

I'm currently adapting .py files for Django 3 because the files I have are compatible for Django 2. So, some changes have been made for the new version and in a file, it's written :

@wraps(view_func, assigned=available_attrs(view_func))

With the import :

from django.utils.decorators import available_attrs

I searched for an adaptation of available_attrs, and I quickly found that it has been removed for the new version.

And when I launch the code, I have this :

ImportError : cannot import name 'available_attrs' from 'django.utils.decorators'

So I was wondering what should I write instead of available_attrs to make it work ?

PS : Sorry for my bad english

like image 469
Maxime Teillaud Avatar asked Aug 12 '20 13:08

Maxime Teillaud


People also ask

Is Django 3 backwards compatible?

Is django 3 backward compatible with django 2? No Django version is fully backwards compatible with the previous one.

Does django support Python 3. 9?

Python compatibilityDjango 4.0 supports Python 3.8, 3.9, and 3.10. We highly recommend and only officially support the latest release of each series.

Which version of Python is compatible with django?

What Python version should I use with Django? ¶ Since newer versions of Python are often faster, have more features, and are better supported, the latest version of Python 3 is recommended.

What is django3?

Django is a Python-based and open-source web framework that is designed to assist developers to build backend web applications quickly with less code.


1 Answers

available_attrs() only ever existed to help bridge between Python 2 and Python 3. This is documented in the Django 3.0 release notes:

Removed private Python 2 compatibility APIs

While Python 2 support was removed in Django 2.0, some private APIs weren’t removed from Django so that third party apps could continue using them until the Python 2 end-of-life.

Since we expect apps to drop Python 2 compatibility when adding support for Django 3.0, we’re removing these APIs at this time.

  • [...]
  • django.utils.decorators.available_attrs() - This function returns functools.WRAPPER_ASSIGNMENTS

If the @wraps() in your sample line is the standard functools.wraps() decorator, then you can just entirely remove assigned=available_attrs(...), because functools.WRAPPER_ASSIGNMENTS is the default value for assigned:

@wraps(view_func)

otherwise, just use functools.WRAPPER_ASSIGNMENTS directly.

like image 59
Martijn Pieters Avatar answered Oct 10 '22 21:10

Martijn Pieters