Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions djxml/xmlmodels/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,7 @@
from django.core.exceptions import (ObjectDoesNotExist, FieldError,
MultipleObjectsReturned,)
from django.db.models.base import subclass_exception
from django.utils.encoding import force_text
from django.utils.encoding import smart_bytes, smart_str
from django.utils.encoding import smart_str

from .signals import xmlclass_prepared
from .options import Options, DEFAULT_NAMES
Expand Down
16 changes: 6 additions & 10 deletions djxml/xmlmodels/fields.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,7 @@
from lxml import etree, isoschematron

from django.core.exceptions import ValidationError
try:
from django.utils.encoding import force_text as force_unicode
except ImportError:
from django.utils.encoding import force_unicode

from django.utils.encoding import force_str
from .descriptors import ImmutableFieldBase, XPathFieldBase, XsltFieldBase
from .exceptions import XmlSchemaValidationError
from .utils import parse_datetime
Expand Down Expand Up @@ -105,7 +101,7 @@ def get_default(self):
if self.has_default():
if callable(self.default):
return self.default()
return force_unicode(self.default, strings_only=True)
return force_str(self.default, strings_only=True)
return None


Expand Down Expand Up @@ -297,7 +293,7 @@ class XPathTextField(XPathSingleNodeField):
def __init__(self, *args, **kwargs):
none_vals = kwargs.pop('none_vals', None)
if none_vals is not None:
self.none_vals = [force_unicode(v) for v in none_vals]
self.none_vals = [force_str(v) for v in none_vals]
super(XPathTextField, self).__init__(*args, **kwargs)

def validate(self, value, model_instance):
Expand All @@ -316,9 +312,9 @@ def to_python(self, value):
if value is None:
return value
if isinstance(value, etree._Element):
return force_unicode(value.text)
return force_str(value.text)
else:
return force_unicode(value)
return force_str(value)


class XPathIntegerField(XPathTextField):
Expand Down Expand Up @@ -410,7 +406,7 @@ def to_python(self, value):
if value is None:
return value
else:
return [force_unicode(getattr(v, "text", v)) for v in value]
return [force_str(getattr(v, "text", v)) for v in value]


class XPathIntegerListField(XPathTextListField):
Expand Down
3 changes: 2 additions & 1 deletion djxml/xmlmodels/signals.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from __future__ import absolute_import
from django.dispatch import Signal

xmlclass_prepared = Signal(providing_args=["class"])
# Arguments: "class"
xmlclass_prepared = Signal()
3 changes: 3 additions & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,14 @@
'Programming Language :: Python',
'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Programming Language :: Python :: 3.10',
'Framework :: Django',
'Framework :: Django :: 2.2',
'Framework :: Django :: 3.0',
'Framework :: Django :: 3.1',
'Framework :: Django :: 3.2',
'Framework :: Django :: 4.0',
],
include_package_data=True,
zip_safe=False,
Expand Down
4 changes: 4 additions & 0 deletions tox.ini
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
[tox]
envlist =
py{37,38}-django{22,30,31,32}
py{38,39,310}-django{40}

[testenv]
commands =
Expand All @@ -10,6 +11,7 @@ deps =
django30: Django>=3.0.13,<3.1
django31: Django>=3.1.7,<3.2
django32: Django>=3.2rc1,<4.0
django40: Django>=4.0,<4.1

[testenv:pep8]
description = Run PEP8 pycodestyle (flake8) against the djxml/ package directory
Expand All @@ -36,3 +38,5 @@ commands =
python =
3.7: py37
3.8: py38
3.9: py39
3.10: py310