1
0
Fork 1
mirror of https://github.com/coddingtonbear/django-mailbox.git synced 2026-07-09 22:38:19 +02:00

Upgrade to last Django & Python supported versions

This commit is contained in:
Pascal F 2023-11-24 07:17:36 +01:00
parent 462fdd3e49
commit 1c7ddca6ca
No known key found for this signature in database
GPG key ID: 3C576B538F890866
10 changed files with 63 additions and 66 deletions

View file

@ -1,6 +1,15 @@
Changelog
=========
Unreleased
-----
* Add Django 3.2, 4.0, 4.1, 4.2, 5.0 support
* Remove support for deprecated Django versions
* Add Python 3.8, 3.9, 3.10, 3.11, 3.12 support
* Remove support for deprecated Python versions
4.8.1
-----

View file

@ -5,3 +5,5 @@ from django.utils.translation import gettext_lazy as _
class MailBoxConfig(AppConfig):
name = 'django_mailbox'
verbose_name = _("Mail Box")
default_auto_field = "django.db.models.AutoField"

View file

@ -1,3 +1,3 @@
from django.dispatch.dispatcher import Signal
message_received = Signal(providing_args=['message'])
message_received = Signal() # providing_args=['message']

View file

@ -9,7 +9,7 @@ from django_mailbox.models import Mailbox, Message
from django_mailbox.utils import convert_header_to_unicode
from django_mailbox import utils
from django_mailbox.tests.base import EmailMessageTestCase
from django.utils.encoding import force_text
from django.utils.encoding import force_str
from django.core.mail import EmailMessage
__all__ = ['TestProcessEmail']
@ -367,12 +367,12 @@ class TestProcessEmail(EmailMessageTestCase):
email_object = self._get_email_object(
'message_with_long_content.eml',
)
size = len(force_text(email_object.as_string()))
size = len(force_str(email_object.as_string()))
msg = self.mailbox.process_incoming_message(email_object)
self.assertEqual(size,
len(force_text(msg.get_email_object().as_string())))
len(force_str(msg.get_email_object().as_string())))
def test_message_saved(self):
message = self._get_email_object('generic_message.eml')
@ -386,7 +386,7 @@ class TestProcessEmail(EmailMessageTestCase):
msg = self.mailbox.process_incoming_message(message)
self.assertNotEquals(msg.eml, None)
assert msg.eml
self.assertTrue(msg.eml.name.endswith('.eml'))
@ -408,7 +408,7 @@ class TestProcessEmail(EmailMessageTestCase):
msg = self.mailbox.process_incoming_message(message)
self.assertEquals(msg.eml, None)
assert not msg.eml
def test_message_compressed(self):
message = self._get_email_object('generic_message.eml')

View file

@ -1,4 +1,3 @@
from distutils.version import LooseVersion
from unittest import mock
from django.core.management import call_command, CommandError
@ -20,14 +19,7 @@ class CommandsTestCase(TestCase):
args, kwargs = handle.call_args
# Make sure that we called with the right arguments
try:
self.assertEqual(kwargs['mailbox_name'], mailbox_name)
except KeyError:
# Handle Django 1.7
# It uses optparse instead of argparse, so instead of being
# set to None, mailbox_name is simply left out altogether
# Thus we expect an empty tuple here
self.assertEqual(args, tuple())
self.assertEqual(kwargs['mailbox_name'], mailbox_name)
def test_processincomingmessage_with_arg(self):
@ -40,26 +32,11 @@ class CommandsTestCase(TestCase):
call_command('processincomingmessage', mailbox_name)
args, kwargs = handle.call_args
try:
self.assertEqual(kwargs['mailbox_name'], mailbox_name)
except (AssertionError, KeyError):
# Handle Django 1.7
# It uses optparse instead of argparse, so instead of being
# in kwargs, mailbox_name is in args
self.assertEqual(args[0], mailbox_name)
self.assertEqual(kwargs['mailbox_name'], mailbox_name)
def test_processincomingmessage_too_many_args(self):
"""Check that processincomingmessage raises an error if too many args"""
# Only perform this test for Django versions greater than 1.7.*. This
# is because, with optparse, too many arguments doesn't result in an
# error, which means this test is worthless anyway
# For the "compatibility" versions, unexpected arguments aren't handled
# very well, and result in a TypeError
if (LooseVersion(django.get_version()) >= LooseVersion('1.8') and
LooseVersion(django.get_version()) < LooseVersion('1.10')):
with self.assertRaises(TypeError):
call_command('processincomingmessage', 'foo_mailbox', 'invalid_arg')
# In 1.10 and later a proper CommandError should be raised
elif LooseVersion(django.get_version()) >= LooseVersion('1.10'):
with self.assertRaises(CommandError):
call_command('processincomingmessage', 'foo_mailbox', 'invalid_arg')
with self.assertRaises(CommandError):
call_command('processincomingmessage', 'foo_mailbox', 'invalid_arg')

View file

@ -244,7 +244,7 @@ sys.path.insert(0, os.path.abspath('..'))
import inspect
import django
from django.utils.html import strip_tags
from django.utils.encoding import force_text
from django.utils.encoding import force_str
from django.conf import settings
settings.configure(INSTALLED_APPS=['django_mailbox', ])
django.setup()
@ -265,11 +265,11 @@ def process_docstring(app, what, name, obj, options, lines):
continue
# Decode and strip any html out of the field's help text
help_text = strip_tags(force_text(field.help_text))
help_text = strip_tags(force_str(field.help_text))
# Decode and capitalize the verbose name, for use if there isn't
# any help text
verbose_name = force_text(field.verbose_name).capitalize()
verbose_name = force_str(field.verbose_name).capitalize()
if help_text:
# Add the model field to the end of the docstring as a param

View file

@ -1,2 +1,2 @@
django>=3.1.1,<3.2
django>=3.2,<4.0
six

View file

@ -32,25 +32,25 @@ setup(
'gmail-oauth2': gmail_oauth2_require,
'office365-oauth2': office365_oauth2_require
},
python_requires=">=3",
python_requires=">=3.8",
classifiers=[
'Framework :: Django',
'Intended Audience :: Developers',
'License :: OSI Approved :: MIT License',
'Operating System :: OS Independent',
'Framework :: Django',
'Framework :: Django :: 1.11',
'Framework :: Django :: 2.0',
'Framework :: Django :: 2.1',
'Framework :: Django :: 2.2',
'Framework :: Django :: 3.0',
'Framework :: Django :: 3.2',
'Framework :: Django :: 4.0',
'Framework :: Django :: 4.1',
'Framework :: Django :: 4.2',
'Framework :: Django :: 5.0',
'Programming Language :: Python',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.4',
'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Programming Language :: Python :: 3.10',
'Programming Language :: Python :: 3.11',
'Programming Language :: Python :: 3.12',
'Topic :: Communications :: Email',
'Topic :: Communications :: Email :: Post-Office',
'Topic :: Communications :: Email :: Post-Office :: IMAP',
@ -59,7 +59,4 @@ setup(
],
packages=find_packages(),
include_package_data=True,
install_requires=[
'six>=1.6.1'
]
)

View file

@ -1,3 +1,3 @@
pytest==2.9.1
pytest-django==2.9.1
mock==2.0.0
pytest
pytest-django
mock

34
tox.ini
View file

@ -2,20 +2,32 @@
# sort by django version, next by python version
envlist=
flake8
py{35,36}-django111
py{35,36}-django20
py{35,36,37}-django21
py{35,36,37}-django22
py{36,37,38}-django30
py{310,311,312}-django50
py{38,39,310,311}-django42
py{38,39,310,311}-django41
py{38,39,310}-django40
py{38,39,310}-django32
[gh-actions]
python =
3.8: py38
3.9: py39
3.10: py310
3.11: py311
3.12: py312
[testenv]
passenv=EMAIL_IMAP_SERVER EMAIL_ACCOUNT EMAIL_PASSWORD EMAIL_SMTP_SERVER
passenv=
EMAIL_IMAP_SERVER
EMAIL_ACCOUNT
EMAIL_PASSWORD
EMAIL_SMTP_SERVER
deps=
django111: django==1.11.*
django20: django==2.0.*
django21: django==2.0.*
django22: django==2.0.*
django30: django==3.0b1
django50: Django>=5.0rc1,<5.1
django42: Django>=4.2,<5.0
django41: Django>=4.1,<4.2
django40: Django>=4.0,<4.1
django32: Django>=3.2,<4.0
-r{toxinidir}/test_requirements.txt
sitepackages=False
commands=