Skip to content

raise ImproperlyConfigured exception if basename is not unique #8438

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Dec 10, 2022

Conversation

dgravitate
Copy link
Contributor

When basename is dynamically generated in BaseRouter.get_default_basename, it could (and does) generate a conflicting basename when multiple routes use the same Model. Additionally, developers could inadvertently use a basename that has already been used elsewhere.

In either case, this can lead to unexpected results when (correctly) using reverse() to get the URL

@stale
Copy link

stale bot commented May 31, 2022

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 stale bot added the stale label May 31, 2022
@auvipy auvipy self-requested a review November 22, 2022 07:10
@stale stale bot removed the stale label Nov 22, 2022
@auvipy
Copy link
Member

auvipy commented Nov 22, 2022

@sevdog can you review this please?

@auvipy auvipy added this to the 3.14 milestone Nov 22, 2022
@dgravitate dgravitate marked this pull request as draft December 1, 2022 03:23
@dgravitate dgravitate force-pushed the reject-duplicate-basenames branch from 7081209 to badd1c1 Compare December 1, 2022 03:25
@dgravitate dgravitate marked this pull request as ready for review December 1, 2022 04:21
Copy link
Member

@auvipy auvipy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can we add additional tests using DefaultRouter() ?

@dgravitate
Copy link
Contributor Author

can we add additional tests using DefaultRouter() ?

Added additional tests using DefaultRouter

@auvipy
Copy link
Member

auvipy commented Dec 8, 2022

I think this should be accepted as this change add checks which is good for developer experience. And not introduce any API surface or major behavioral changes

@auvipy auvipy merged commit 48a21aa into encode:master Dec 10, 2022
kernicPanel added a commit to openfun/joanie that referenced this pull request Mar 18, 2024
DRF verson 3.15 raises a ImproperlyConfigured exception if url basenames are
not uniques.
encode/django-rest-framework#8438
kernicPanel added a commit to openfun/joanie that referenced this pull request Mar 18, 2024
DRF verson 3.15 raises a ImproperlyConfigured exception if url basenames are
not uniques.
encode/django-rest-framework#8438
tijuca added a commit to tijuca/drf-extensions that referenced this pull request Mar 24, 2024
auvipy added a commit to chibisov/drf-extensions that referenced this pull request Sep 4, 2024
* tests: Use basename='xxx' to set a unique basename

Since DRF 3.15.0 a unique basename must be used due
encode/django-rest-framework#8438

Fixes #341

* Update tests_app/tests/functional/mixins/detail_serializer_mixin/urls.py

---------

Co-authored-by: Asif Saif Uddin <[email protected]>
m-haines added a commit to cedadev/app_datamad that referenced this pull request Oct 7, 2024
…mysqlclient. This resulted in the following changes having to be made

# Django 3.2 -> 4.2 changes
## ./datamad2/models/users.py
from django.utils.translation import ugettext_lazy as _  --> from django.utils.translation import gettext_lazy as _

## ./datamad2/admin.py
admin.site.register(User, UserAdmin) etc at eof changed to @admin.register(User) decorator above class definition of the user type. eof registers all deleted
Slightly concerned this does not give the same functionality, TODO check

## ./datamad2/utils.py
from django.utils.encoding import force_text  --> from django.utils.encoding import force_str

## ./datamadsite/settings.py
USE_L10N = True --> line deleted
crispy_bootstrap4 added to INSTALLED_APPS

# ./datamadsite/settings_local.py.tmpl
Added the Additional allowed template packs:
CRISPY_ALLOWED_TEMPLATE_PACKS = "bootstrap4"
CRISPY_TEMPLATE_PACK = "bootstrap4"

# bootstrap_datepicker_plus updates
## grants.py and data_products.py
from bootstrap_datepicker_plus import DatePickerInput --> from bootstrap_datepicker_plus.widgets import DatePickerInput

## Changed format='' for bootstrap_datepicker_plus.widgets.DatePickerInput from format='%d/%m/%Y' to options={'format':'%d/%m/%Y'} to fix the following error:

./app_datamad_new/Lib/site-packages/bootstrap_datepicker_plus/_base.py:38:
FutureWarning: The 'format' parameter is ignored, set 'format' in options instead.
see https://github.com/monim67/django-bootstrap-datepicker-plusbootstrap_datepicker_plus.widgets

Removed ifequal from pagination.html as it was removed in Django 4.0 and replaced with "if x = condition" instead

# djangorestframework updating to 3.15.2 from 3.12.4
# Updating to drf 3.15.2 from 3.12.4, had to specify basename for datacentres/ datacenter in datamad2_api/urls.py due to importing name from "DataCentre" model queryset leading to identical routings for  the "datacentre" and "datacenter" base URLs.
This is due to a change from drf 3.14 -> 3.15 enforcing the following encode/django-rest-framework#8438

Added new script DataMad_csv_create.py to import data from UKRIs DataBank database into a .csv file

Created two example Docker files for local debugging, if the user wanted to.

setup.py to Python 3.12 from Python 3.6

Updated the README.md file.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants