mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
Move dict_to_querydict() and normalize_querydict() to utilities.querydict
This commit is contained in:
@ -16,8 +16,9 @@ from core.models import ObjectType
|
||||
from extras.choices import BookmarkOrderingChoices
|
||||
from netbox.choices import ButtonColorChoices
|
||||
from utilities.permissions import get_permission_for_model
|
||||
from utilities.querydict import dict_to_querydict
|
||||
from utilities.templatetags.builtins.filters import render_markdown
|
||||
from utilities.utils import content_type_identifier, content_type_name, dict_to_querydict
|
||||
from utilities.utils import content_type_identifier, content_type_name
|
||||
from utilities.views import get_viewname
|
||||
from .utils import register_widget
|
||||
|
||||
|
@ -23,9 +23,9 @@ from netbox.models.features import (
|
||||
CloningMixin, CustomFieldsMixin, CustomLinksMixin, ExportTemplatesMixin, SyncedDataMixin, TagsMixin,
|
||||
)
|
||||
from utilities.html import clean_html
|
||||
from utilities.querydict import dict_to_querydict
|
||||
from utilities.querysets import RestrictedQuerySet
|
||||
from utilities.jinja2 import render_jinja2
|
||||
from utilities.utils import dict_to_querydict
|
||||
|
||||
__all__ = (
|
||||
'Bookmark',
|
||||
|
@ -21,10 +21,11 @@ from netbox.views.generic.mixins import TableMixin
|
||||
from utilities.data import shallow_compare_dict
|
||||
from utilities.forms import ConfirmationForm, get_field_value
|
||||
from utilities.paginator import EnhancedPaginator, get_paginate_count
|
||||
from utilities.querydict import normalize_querydict
|
||||
from utilities.request import copy_safe_request
|
||||
from utilities.rqworker import get_workers_for_queue
|
||||
from utilities.templatetags.builtins.filters import render_markdown
|
||||
from utilities.utils import count_related, normalize_querydict
|
||||
from utilities.utils import count_related
|
||||
from utilities.views import ContentTypePermissionRequiredMixin, get_viewname, register_model_view
|
||||
from . import filtersets, forms, tables
|
||||
from .models import *
|
||||
|
@ -18,7 +18,8 @@ from utilities.error_handlers import handle_protectederror
|
||||
from utilities.exceptions import AbortRequest, PermissionsViolation
|
||||
from utilities.forms import ConfirmationForm, restrict_form_fields
|
||||
from utilities.permissions import get_permission_for_model
|
||||
from utilities.utils import normalize_querydict, prepare_cloned_fields
|
||||
from utilities.querydict import normalize_querydict
|
||||
from utilities.utils import prepare_cloned_fields
|
||||
from utilities.views import GetReturnURLMixin, get_viewname
|
||||
from .base import BaseObjectView
|
||||
from .mixins import ActionsMixin, TableMixin
|
||||
|
38
netbox/utilities/querydict.py
Normal file
38
netbox/utilities/querydict.py
Normal file
@ -0,0 +1,38 @@
|
||||
from django.http import QueryDict
|
||||
from django.utils.datastructures import MultiValueDict
|
||||
|
||||
__all__ = (
|
||||
'dict_to_querydict',
|
||||
'normalize_querydict',
|
||||
)
|
||||
|
||||
|
||||
def dict_to_querydict(d, mutable=True):
|
||||
"""
|
||||
Create a QueryDict instance from a regular Python dictionary.
|
||||
"""
|
||||
qd = QueryDict(mutable=True)
|
||||
for k, v in d.items():
|
||||
item = MultiValueDict({k: v}) if isinstance(v, (list, tuple, set)) else {k: v}
|
||||
qd.update(item)
|
||||
if not mutable:
|
||||
qd._mutable = False
|
||||
return qd
|
||||
|
||||
|
||||
def normalize_querydict(querydict):
|
||||
"""
|
||||
Convert a QueryDict to a normal, mutable dictionary, preserving list values. For example,
|
||||
|
||||
QueryDict('foo=1&bar=2&bar=3&baz=')
|
||||
|
||||
becomes:
|
||||
|
||||
{'foo': '1', 'bar': ['2', '3'], 'baz': ''}
|
||||
|
||||
This function is necessary because QueryDict does not provide any built-in mechanism which preserves multiple
|
||||
values.
|
||||
"""
|
||||
return {
|
||||
k: v if len(v) > 1 else v[0] for k, v in querydict.lists()
|
||||
}
|
@ -1,8 +1,7 @@
|
||||
from django import template
|
||||
from django.http import QueryDict
|
||||
|
||||
from extras.choices import CustomFieldTypeChoices
|
||||
from utilities.utils import dict_to_querydict
|
||||
from utilities.querydict import dict_to_querydict
|
||||
|
||||
__all__ = (
|
||||
'badge',
|
||||
|
@ -2,7 +2,8 @@ from django.http import QueryDict
|
||||
from django.test import TestCase
|
||||
|
||||
from utilities.data import deepmerge
|
||||
from utilities.utils import dict_to_filter_params, normalize_querydict
|
||||
from utilities.querydict import normalize_querydict
|
||||
from utilities.utils import dict_to_filter_params
|
||||
|
||||
|
||||
class DictToFilterParamsTest(TestCase):
|
||||
|
@ -4,7 +4,6 @@ from django.db.models import Count, ManyToOneRel, OuterRef, Subquery
|
||||
from django.db.models.functions import Coalesce
|
||||
from django.http import QueryDict
|
||||
from django.utils import timezone
|
||||
from django.utils.datastructures import MultiValueDict
|
||||
from django.utils.timezone import localtime
|
||||
|
||||
from .string import title
|
||||
@ -70,37 +69,6 @@ def dict_to_filter_params(d, prefix=''):
|
||||
return params
|
||||
|
||||
|
||||
def dict_to_querydict(d, mutable=True):
|
||||
"""
|
||||
Create a QueryDict instance from a regular Python dictionary.
|
||||
"""
|
||||
qd = QueryDict(mutable=True)
|
||||
for k, v in d.items():
|
||||
item = MultiValueDict({k: v}) if isinstance(v, (list, tuple, set)) else {k: v}
|
||||
qd.update(item)
|
||||
if not mutable:
|
||||
qd._mutable = False
|
||||
return qd
|
||||
|
||||
|
||||
def normalize_querydict(querydict):
|
||||
"""
|
||||
Convert a QueryDict to a normal, mutable dictionary, preserving list values. For example,
|
||||
|
||||
QueryDict('foo=1&bar=2&bar=3&baz=')
|
||||
|
||||
becomes:
|
||||
|
||||
{'foo': '1', 'bar': ['2', '3'], 'baz': ''}
|
||||
|
||||
This function is necessary because QueryDict does not provide any built-in mechanism which preserves multiple
|
||||
values.
|
||||
"""
|
||||
return {
|
||||
k: v if len(v) > 1 else v[0] for k, v in querydict.lists()
|
||||
}
|
||||
|
||||
|
||||
def prepare_cloned_fields(instance):
|
||||
"""
|
||||
Generate a QueryDict comprising attributes from an object's clone() method.
|
||||
|
Reference in New Issue
Block a user