wip/75442-upgrade-hooks #27
|
@ -2,27 +2,27 @@
|
|||
# See https://pre-commit.com/hooks.html for more hooks
|
||||
repos:
|
||||
- repo: https://github.com/asottile/pyupgrade
|
||||
rev: v3.1.0
|
||||
rev: v3.3.1
|
||||
hooks:
|
||||
- id: pyupgrade
|
||||
args: ['--keep-percent-format', '--py37-plus']
|
||||
args: ['--keep-percent-format', '--py39-plus']
|
||||
- repo: https://github.com/adamchainz/django-upgrade
|
||||
rev: 1.10.0
|
||||
rev: 1.13.0
|
||||
hooks:
|
||||
- id: django-upgrade
|
||||
args: ['--target-version', '2.2']
|
||||
args: ['--target-version', '3.2']
|
||||
- repo: https://github.com/psf/black
|
||||
rev: 22.3.0
|
||||
rev: 23.3.0
|
||||
hooks:
|
||||
- id: black
|
||||
args: ['--target-version', 'py37', '--skip-string-normalization', '--line-length', '110']
|
||||
args: ['--target-version', 'py39', '--skip-string-normalization', '--line-length', '110']
|
||||
- repo: https://github.com/PyCQA/isort
|
||||
rev: 5.12.0
|
||||
hooks:
|
||||
- id: isort
|
||||
args: ['--profile', 'black', '--line-length', '110']
|
||||
- repo: https://github.com/rtts/djhtml
|
||||
rev: 'v1.5.2'
|
||||
rev: '3.0.6'
|
||||
hooks:
|
||||
- id: djhtml
|
||||
args: ['--tabwidth', '2']
|
||||
|
|
2
README
2
README
|
@ -194,7 +194,7 @@ djhtml is used to automatically indent html files, using those parameters:
|
|||
|
||||
django-upgrade is used to automatically upgrade Django syntax, using those parameters:
|
||||
|
||||
django-upgrade --target-version 2.2
|
||||
django-upgrade --target-version 3.2
|
||||
|
||||
There is .pre-commit-config.yaml to use pre-commit to automatically run these tools
|
||||
before commits. (execute `pre-commit install` to install the git hook.)
|
||||
|
|
|
@ -14,7 +14,7 @@ Package: python3-hobo
|
|||
Architecture: all
|
||||
Depends: python3-apt,
|
||||
python3-celery (>= 3.1.13),
|
||||
python3-django (>= 2:2.2),
|
||||
python3-django (>= 2:3.2),
|
||||
python3-djangorestframework,
|
||||
python3-dnspython,
|
||||
python3-memcache,
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
default_app_config = 'hobo.agent.authentic2.apps.Authentic2AgentConfig'
|
|
@ -15,7 +15,7 @@ from django.contrib.auth import get_user_model
|
|||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.core import serializers
|
||||
from django.utils.translation import activate
|
||||
from django.utils.translation import ugettext as _
|
||||
from django.utils.translation import gettext as _
|
||||
from tenant_schemas.utils import tenant_context
|
||||
|
||||
from hobo.agent.authentic2.provisionning import Provisionning
|
||||
|
|
|
@ -15,7 +15,7 @@ from django.conf import settings
|
|||
from django.contrib.auth import get_user_model
|
||||
from django.db import connection, transaction
|
||||
from django.urls import reverse
|
||||
from django.utils.encoding import force_text
|
||||
from django.utils.encoding import force_str
|
||||
|
||||
from hobo.agent.common import notify_agents
|
||||
from hobo.signature import sign_url
|
||||
|
@ -141,7 +141,7 @@ class Provisionning(threading.local):
|
|||
tuple(allowed_technical_roles_prefixes)
|
||||
)
|
||||
|
||||
issuer = force_text(self.get_entity_id())
|
||||
issuer = force_str(self.get_entity_id())
|
||||
if mode == 'provision':
|
||||
|
||||
def user_to_json(ou, service, user, user_roles):
|
||||
|
@ -245,7 +245,7 @@ class Provisionning(threading.local):
|
|||
continue
|
||||
logger.info(
|
||||
'provisionning users %s to %s',
|
||||
', '.join(map(force_text, users)),
|
||||
', '.join(map(force_str, users)),
|
||||
', '.join(audience),
|
||||
)
|
||||
self.notify_agents(
|
||||
|
@ -264,7 +264,7 @@ class Provisionning(threading.local):
|
|||
elif users:
|
||||
audience = [audience for ou in ous.keys() for s, audience in self.get_audience(ou)]
|
||||
logger.info(
|
||||
'deprovisionning users %s from %s', ', '.join(map(force_text, users)), ', '.join(audience)
|
||||
'deprovisionning users %s from %s', ', '.join(map(force_str, users)), ', '.join(audience)
|
||||
)
|
||||
self.notify_agents(
|
||||
{
|
||||
|
|
|
@ -9,7 +9,7 @@ import requests
|
|||
from django.conf import settings
|
||||
from django.core.management import call_command, get_commands
|
||||
from django.core.management.base import BaseCommand, CommandError
|
||||
from django.utils.encoding import force_text
|
||||
from django.utils.encoding import force_str
|
||||
from tenant_schemas.utils import tenant_context
|
||||
|
||||
from hobo.multitenant.middleware import TenantMiddleware, TenantNotFound
|
||||
|
@ -23,7 +23,7 @@ def replace_file(path, content):
|
|||
dirname = os.path.dirname(path)
|
||||
fd, temp = tempfile.mkstemp(dir=dirname, prefix='.tmp-' + os.path.basename(path) + '-')
|
||||
f = os.fdopen(fd, 'w')
|
||||
f.write(force_text(content))
|
||||
f.write(force_str(content))
|
||||
f.flush()
|
||||
os.fsync(f.fileno())
|
||||
f.close()
|
||||
|
@ -32,7 +32,7 @@ def replace_file(path, content):
|
|||
|
||||
class Command(BaseCommand):
|
||||
early_secondary_exit = True
|
||||
requires_system_checks = False
|
||||
requires_system_checks = []
|
||||
me = None
|
||||
|
||||
def add_arguments(self, parser):
|
||||
|
|
|
@ -29,7 +29,7 @@ logger = logging.getLogger(__name__)
|
|||
|
||||
|
||||
class Command(BaseCommand, NotificationProcessing):
|
||||
requires_system_checks = False
|
||||
requires_system_checks = []
|
||||
|
||||
def add_arguments(self, parser):
|
||||
parser.add_argument('notification', metavar='NOTIFICATION', type=str)
|
||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('auth', '0001_initial'),
|
||||
]
|
||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('common', '0001_initial'),
|
||||
]
|
||||
|
|
|
@ -5,7 +5,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('common', '0002_auto_20160105_1702'),
|
||||
]
|
||||
|
|
|
@ -4,7 +4,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('common', '0003_auto_20200707_1656'),
|
||||
]
|
||||
|
|
|
@ -7,7 +7,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('common', '0004_alter_role_uuid'),
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
from django.conf import settings
|
||||
from django.contrib.auth.models import Group
|
||||
from django.contrib.postgres.fields import ArrayField, JSONField
|
||||
from django.contrib.postgres.fields import ArrayField
|
||||
from django.db import models
|
||||
from django.db.models import JSONField
|
||||
|
||||
|
||||
class Role(Group):
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
default_app_config = 'hobo.agent.hobo.apps.HoboAgentConfig'
|
|
@ -15,7 +15,7 @@
|
|||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from django import forms
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from hobo.applications.models import Application
|
||||
|
||||
|
|
|
@ -7,7 +7,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = []
|
||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('applications', '0001_initial'),
|
||||
]
|
||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('applications', '0002_icon'),
|
||||
]
|
||||
|
|
|
@ -13,7 +13,6 @@ def forwards(apps, schema_editor):
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('applications', '0003_version_num_notes'),
|
||||
]
|
||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('applications', '0004_version_num_notes'),
|
||||
]
|
||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('applications', '0005_version_num_notes'),
|
||||
]
|
||||
|
|
|
@ -6,7 +6,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('applications', '0006_documentation_url'),
|
||||
]
|
||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('applications', '0007_asyncjob'),
|
||||
]
|
||||
|
|
|
@ -3,7 +3,6 @@ from django.db import migrations
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('applications', '0008_element_error'),
|
||||
]
|
||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('applications', '0009_job_progression'),
|
||||
]
|
||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('applications', '0010_relation_error'),
|
||||
]
|
||||
|
|
|
@ -23,12 +23,12 @@ import traceback
|
|||
import urllib.parse
|
||||
|
||||
from django.conf import settings
|
||||
from django.contrib.postgres.fields import JSONField
|
||||
from django.core.files.base import ContentFile
|
||||
from django.db import connection, models
|
||||
from django.db.models import JSONField
|
||||
from django.utils.text import slugify
|
||||
from django.utils.timezone import now
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from hobo.environment.utils import get_installed_services
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@ from django.shortcuts import get_object_or_404
|
|||
from django.urls import reverse, reverse_lazy
|
||||
from django.utils.text import slugify
|
||||
from django.utils.timezone import now
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from django.views.generic import DetailView, FormView, ListView, TemplateView
|
||||
from django.views.generic.edit import CreateView, DeleteView, UpdateView
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
from django import forms
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.core.validators import validate_ipv46_address
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
def validate_space_separated_ips(value):
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
<div class="buttons">
|
||||
<button class="submit-button">{% trans "Save" %}</button>
|
||||
<button class="submit-button"
|
||||
name="toggle-current-ip">{% if current_ip_debug %}{% trans "Remove current IP" %}{% else %}{% trans "Add current IP" %}{% endif %} - {{ view.current_ip }}</button>
|
||||
name="toggle-current-ip">{% if current_ip_debug %}{% trans "Remove current IP" %}{% else %}{% trans "Add current IP" %}{% endif %} - {{ view.current_ip }}</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
|
|
|
@ -1,27 +0,0 @@
|
|||
# hobo - portal to configure and deploy applications
|
||||
# Copyright (C) 2015 Entr'ouvert
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Affero General Public License as published
|
||||
# by the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import django.apps
|
||||
|
||||
|
||||
class AppConfig(django.apps.AppConfig):
|
||||
name = 'hobo.deploy'
|
||||
|
||||
def ready(self):
|
||||
from . import signals
|
||||
|
||||
|
||||
default_app_config = 'hobo.deploy.AppConfig'
|
|
@ -0,0 +1,24 @@
|
|||
# hobo - portal to configure and deploy applications
|
||||
# Copyright (C) 2015 Entr'ouvert
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Affero General Public License as published
|
||||
# by the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import django.apps
|
||||
|
||||
|
||||
class AppConfig(django.apps.AppConfig):
|
||||
name = 'hobo.deploy'
|
||||
|
||||
def ready(self):
|
||||
from . import signals
|
|
@ -15,7 +15,7 @@
|
|||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
from django import forms
|
||||
from django.core.validators import validate_email
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from hobo.emails.validators import validate_email_address, validate_email_domain, validate_email_spf
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ import dns.resolver
|
|||
from django.conf import settings
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.utils.encoding import force_bytes
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from hobo.environment.utils import get_operational_services
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from django.conf import settings
|
||||
from django.utils.translation import ugettext as _
|
||||
from django.utils.translation import gettext as _
|
||||
from django.views.generic import TemplateView
|
||||
|
||||
from hobo.environment.forms import VariablesFormMixin
|
||||
|
|
|
@ -19,7 +19,7 @@ from django.conf import settings
|
|||
from django.contrib import messages
|
||||
from django.http import HttpResponseRedirect
|
||||
from django.template.defaultfilters import slugify
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from .models import Authentic, BiJoe, Chrono, Combo, Fargo, Hobo, Lingo, Passerelle, Variable, Wcs, Welco
|
||||
from .utils import get_variable
|
||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('contenttypes', '0001_initial'),
|
||||
]
|
||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('environment', '0001_initial'),
|
||||
]
|
||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('environment', '0002_authentic_use_as_idp_for_self'),
|
||||
]
|
||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('environment', '0003_auto_20150309_0811'),
|
||||
]
|
||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('environment', '0004_fargo'),
|
||||
]
|
||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('environment', '0005_variable_label'),
|
||||
]
|
||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('environment', '0006_auto_20150708_0830'),
|
||||
]
|
||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('environment', '0007_auto_20151008_1406'),
|
||||
]
|
||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('environment', '0008_auto_20151021_1414'),
|
||||
]
|
||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('environment', '0009_mandayejs'),
|
||||
]
|
||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('environment', '0010_variable_auto'),
|
||||
]
|
||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('environment', '0011_chrono'),
|
||||
]
|
||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('environment', '0012_mandayejs_site_app'),
|
||||
]
|
||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('environment', '0013_auto_20160226_1633'),
|
||||
]
|
||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('environment', '0014_piwik'),
|
||||
]
|
||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('environment', '0015_corbo'),
|
||||
]
|
||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('environment', '0016_bijoe'),
|
||||
]
|
||||
|
|
|
@ -2,7 +2,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('environment', '0017_hobo'),
|
||||
]
|
||||
|
|
|
@ -4,7 +4,6 @@ from django.db import migrations
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('environment', '0018_auto_20161102_1929'),
|
||||
]
|
||||
|
|
|
@ -5,7 +5,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('environment', '0019_delete_piwik'),
|
||||
]
|
||||
|
|
|
@ -5,7 +5,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('environment', '0020_delete_corbo_mandaye'),
|
||||
]
|
||||
|
|
|
@ -4,7 +4,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('environment', '0021_base_url_validators'),
|
||||
]
|
||||
|
|
|
@ -33,7 +33,6 @@ def clean_local_hobo(apps, schema_editor):
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('environment', '0022_local_hobo'),
|
||||
]
|
||||
|
|
|
@ -31,7 +31,6 @@ def clean_local_hobo(apps, schema_editor):
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('environment', '0023_populate_local_hobo'),
|
||||
]
|
||||
|
|
|
@ -5,7 +5,6 @@ from django.db import migrations
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('environment', '0024_remove_local_hobo'),
|
||||
]
|
||||
|
|
|
@ -6,7 +6,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('environment', '0025_legacy_urls'),
|
||||
]
|
||||
|
|
|
@ -4,7 +4,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('environment', '0026_lingo'),
|
||||
]
|
||||
|
|
|
@ -16,7 +16,6 @@ def clean_internal_ips(apps, schema_editor):
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('environment', '0027_allow_long_slug'),
|
||||
]
|
||||
|
|
|
@ -4,7 +4,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('environment', '0028_clean_internal_ips'),
|
||||
]
|
||||
|
|
|
@ -25,15 +25,15 @@ import requests
|
|||
from django.conf import settings
|
||||
from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.contrib.postgres.fields import JSONField
|
||||
from django.core.cache import cache
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.core.validators import URLValidator
|
||||
from django.db import models
|
||||
from django.db.models import JSONField
|
||||
from django.utils.crypto import get_random_string
|
||||
from django.utils.encoding import force_text
|
||||
from django.utils.encoding import force_str
|
||||
from django.utils.timezone import now
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from .utils import Zone, get_installed_services, get_local_key
|
||||
|
||||
|
@ -188,7 +188,7 @@ class ServiceBase(models.Model):
|
|||
if self.legacy_urls:
|
||||
as_dict['legacy_urls'] = self.legacy_urls
|
||||
as_dict['service-id'] = self.Extra.service_id
|
||||
as_dict['service-label'] = force_text(self.Extra.service_label)
|
||||
as_dict['service-label'] = force_str(self.Extra.service_label)
|
||||
as_dict['variables'] = {v.name: v.json for v in self.variables.all()}
|
||||
as_dict['secondary'] = self.secondary
|
||||
if self.get_saml_sp_metadata_url():
|
||||
|
|
|
@ -23,9 +23,9 @@
|
|||
|
||||
{% for service in installed_services %}
|
||||
<div data-service-id="{{ service.Extra.service_id }}"
|
||||
data-slug="{{ service.slug }}"
|
||||
class="bo-block service-block {{ service.Extra.service_id }}-block"
|
||||
{% if service.wants_frequent_checks %}data-wants-check="true"{% endif %}>
|
||||
data-slug="{{ service.slug }}"
|
||||
class="bo-block service-block {{ service.Extra.service_id }}-block"
|
||||
{% if service.wants_frequent_checks %}data-wants-check="true"{% endif %}>
|
||||
<h3>{{ service.title }} <span class="slug">[{{service.slug}},
|
||||
<a href="{{service.base_url}}">{{service.base_url}}</a>]</span></h3>
|
||||
{% if not service.is_operational %}
|
||||
|
|
|
@ -22,7 +22,7 @@ from django.conf import settings
|
|||
from django.core.management.base import CommandError
|
||||
from django.db import connection, transaction
|
||||
from django.urls import reverse
|
||||
from django.utils.encoding import force_text
|
||||
from django.utils.encoding import force_str
|
||||
|
||||
from hobo.middleware.utils import StoreRequestMiddleware
|
||||
from hobo.multitenant.settings_loaders import KnownServices
|
||||
|
@ -48,7 +48,7 @@ def get_operational_services():
|
|||
|
||||
|
||||
def get_local_key(url):
|
||||
secret1 = force_text(settings.SECRET_KEY)
|
||||
secret1 = force_str(settings.SECRET_KEY)
|
||||
secret2 = url
|
||||
return KnownServices.shared_secret(secret1, secret2)[:40]
|
||||
|
||||
|
|
|
@ -23,8 +23,8 @@ from django.contrib.contenttypes.models import ContentType
|
|||
from django.http import Http404, HttpResponse, HttpResponseRedirect, JsonResponse
|
||||
from django.shortcuts import get_object_or_404
|
||||
from django.urls import reverse_lazy
|
||||
from django.utils.encoding import force_text
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.encoding import force_str
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from django.views.generic import View
|
||||
from django.views.generic.base import TemplateView
|
||||
from django.views.generic.edit import CreateView, DeleteView, FormView, UpdateView
|
||||
|
@ -213,7 +213,7 @@ class ImportView(FormView):
|
|||
|
||||
def form_valid(self, form):
|
||||
try:
|
||||
parameters_json = json.loads(force_text(self.request.FILES['parameters_json'].read()))
|
||||
parameters_json = json.loads(force_str(self.request.FILES['parameters_json'].read()))
|
||||
except ValueError:
|
||||
form.add_error('parameters_json', _('File is not in the expected JSON format.'))
|
||||
return self.form_invalid(form)
|
||||
|
@ -230,7 +230,6 @@ class ExportView(View):
|
|||
|
||||
|
||||
def operational_check_view(request, service, slug, **kwargs):
|
||||
|
||||
for klass in AVAILABLE_SERVICES:
|
||||
if klass.Extra.service_id == service:
|
||||
break
|
||||
|
|
|
@ -8,7 +8,6 @@ else:
|
|||
|
||||
|
||||
class HoboForm(ModelForm):
|
||||
|
||||
required_css_class = 'required'
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from django import forms
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class MaintenanceForm(forms.Form):
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
import xml.etree.ElementTree as etree
|
||||
|
||||
from django import forms
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class SettingsForm(forms.Form):
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import django
|
||||
from django.http import JsonResponse
|
||||
from django.middleware.common import CommonMiddleware
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class HoboCommonMiddleware(CommonMiddleware):
|
||||
|
|
|
@ -14,7 +14,7 @@ class CORSMiddleware(MiddlewareMixin):
|
|||
view/exception middleware along with the requested view;
|
||||
it will call any response middlewares
|
||||
"""
|
||||
if request.method == 'OPTIONS' and "HTTP_ACCESS_CONTROL_REQUEST_METHOD" in request.META:
|
||||
if request.method == 'OPTIONS' and "access-control-request-method" in request.headers:
|
||||
response = HttpResponse()
|
||||
return response
|
||||
return None
|
||||
|
|
|
@ -18,7 +18,7 @@ from ipaddress import ip_address, ip_network
|
|||
|
||||
from django.conf import settings
|
||||
from django.template.response import TemplateResponse
|
||||
from django.utils.translation import ugettext as _
|
||||
from django.utils.translation import gettext as _
|
||||
|
||||
|
||||
def pass_through(request):
|
||||
|
|
|
@ -10,7 +10,7 @@ class XForwardedForMiddleware(MiddlewareMixin):
|
|||
|
||||
def process_request(self, request):
|
||||
if getattr(settings, 'USE_X_FORWARDED_FOR', False):
|
||||
if 'HTTP_X_FORWARDED_FOR' in request.META:
|
||||
if 'x-forwarded-for' in request.headers:
|
||||
ip = request.headers.get('X-Forwarded-For', '').split(",")[0].strip()
|
||||
if ip:
|
||||
request.META['REMOTE_ADDR'] = ip
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
default_app_config = 'hobo.multitenant.apps.MultitenantAppConfig'
|
||||
|
||||
# import the context_processors module so it gets to compute the versions hash
|
||||
# early on.
|
||||
from hobo import context_processors
|
||||
|
|
|
@ -13,7 +13,7 @@ from django.core.exceptions import ImproperlyConfigured
|
|||
from django.core.management import call_command, get_commands, load_command_class
|
||||
from django.core.management.base import BaseCommand, CommandError, SystemCheckError, handle_default_options
|
||||
from django.db import connection, connections
|
||||
from django.utils.encoding import force_text
|
||||
from django.utils.encoding import force_str
|
||||
|
||||
from hobo.multitenant.management.commands import InteractiveTenantOption
|
||||
from hobo.multitenant.middleware import TenantMiddleware
|
||||
|
@ -26,12 +26,12 @@ def exception_to_text(e):
|
|||
pass
|
||||
|
||||
try:
|
||||
return force_text(str(e), errors='ignore')
|
||||
return force_str(str(e), errors='ignore')
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
try:
|
||||
return force_text(repr(e), errors='ignore')
|
||||
return force_str(repr(e), errors='ignore')
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from django import forms
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class EditFullNameTemplateForm(forms.Form):
|
||||
|
|
|
@ -3,7 +3,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = []
|
||||
|
||||
operations = [
|
||||
|
|
|
@ -24,7 +24,6 @@ def add_initial_data(apps, schema_editor):
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('profile', '0001_initial'),
|
||||
]
|
||||
|
|
|
@ -4,7 +4,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('profile', '0002_add_data'),
|
||||
]
|
||||
|
|
|
@ -5,7 +5,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('profile', '0003_attributedefinition_searchable'),
|
||||
]
|
||||
|
|
|
@ -4,7 +4,6 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('profile', '0004_auto_20200518_1810'),
|
||||
]
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
|
||||
from django.core.validators import RegexValidator
|
||||
from django.db import models
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
validate_attribute_name = RegexValidator(
|
||||
r'^[a-z][a-z0-9_]*\Z',
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
|
||||
from django.shortcuts import redirect
|
||||
from django.urls import reverse, reverse_lazy
|
||||
from django.utils.translation import ugettext as _
|
||||
from django.utils.translation import gettext as _
|
||||
from django.views.generic import CreateView, ListView, RedirectView, TemplateView, UpdateView
|
||||
|
||||
from hobo.deploy.signals import notify_agents
|
||||
|
|
|
@ -23,7 +23,7 @@ from django.conf import settings
|
|||
from django.db import connection
|
||||
from django.http import HttpResponseBadRequest, HttpResponseForbidden, JsonResponse
|
||||
from django.utils.deprecation import MiddlewareMixin
|
||||
from django.utils.encoding import force_bytes, force_text
|
||||
from django.utils.encoding import force_bytes, force_str
|
||||
|
||||
from hobo.provisionning.utils import NotificationProcessing
|
||||
from hobo.rest_authentication import PublikAuthentication, PublikAuthenticationFailed
|
||||
|
@ -46,7 +46,7 @@ class ProvisionningMiddleware(MiddlewareMixin, NotificationProcessing):
|
|||
return HttpResponseForbidden()
|
||||
|
||||
try:
|
||||
notification = json.loads(force_text(request.body))
|
||||
notification = json.loads(force_str(request.body))
|
||||
except ValueError:
|
||||
return HttpResponseBadRequest()
|
||||
if not isinstance(notification, dict) or 'objects' not in notification:
|
||||
|
|
|
@ -56,7 +56,6 @@ class AnonymousAdminServiceUser(AnonymousUser):
|
|||
|
||||
|
||||
class APIClientUser:
|
||||
|
||||
is_active = True
|
||||
is_anonymous = False
|
||||
is_authenticated = True
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from django import forms
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class RobotsTxtForm(forms.Form):
|
||||
|
|
|
@ -10,7 +10,7 @@ and to disable DEBUG mode in production.
|
|||
import os
|
||||
|
||||
from django.conf import global_settings
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
|
||||
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
|
||||
|
@ -116,6 +116,8 @@ DATABASES = {
|
|||
}
|
||||
}
|
||||
|
||||
DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'
|
||||
|
||||
# Internationalization
|
||||
# https://docs.djangoproject.com/en/1.6/topics/i18n/
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
from django import forms
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.core.validators import RegexValidator
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from hobo.utils import TemplateError, get_templated_url
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from django.conf import settings
|
||||
from django.utils.translation import ugettext as _
|
||||
from django.utils.translation import gettext as _
|
||||
from django.views.generic import TemplateView
|
||||
|
||||
from hobo.environment.forms import VariablesFormMixin
|
||||
|
|
|
@ -20,7 +20,6 @@ def helloworld(request):
|
|||
|
||||
|
||||
class AuthenticatedTestView(APIView):
|
||||
|
||||
permission_classes = [permissions.IsAuthenticated]
|
||||
|
||||
def get(self, request):
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from django import forms
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class ThemeOptionsForm(forms.Form):
|
||||
|
|
|
@ -19,7 +19,7 @@ import random
|
|||
|
||||
from django.contrib import messages
|
||||
from django.urls import reverse
|
||||
from django.utils.translation import ugettext as _
|
||||
from django.utils.translation import gettext as _
|
||||
from django.views.generic import RedirectView, TemplateView
|
||||
|
||||
from hobo.environment.forms import VariablesFormMixin
|
||||
|
|
|
@ -56,12 +56,12 @@ urlpatterns += [
|
|||
path('logout/', logout, name='logout'),
|
||||
path('login/', login, name='auth_login'),
|
||||
path('login/local/', login_local), # to be used as backup, in case of idp down
|
||||
re_path(r'^accounts/mellon/', include('mellon.urls')),
|
||||
path('accounts/mellon/', include('mellon.urls')),
|
||||
]
|
||||
|
||||
if settings.DEBUG and 'debug_toolbar' in settings.INSTALLED_APPS:
|
||||
import debug_toolbar # pylint: disable=import-error
|
||||
|
||||
urlpatterns = [
|
||||
re_path(r'^__debug__/', include(debug_toolbar.urls)),
|
||||
path('__debug__/', include(debug_toolbar.urls)),
|
||||
] + urlpatterns
|
||||
|
|
|
@ -9,8 +9,8 @@ from django.core.exceptions import PermissionDenied
|
|||
from django.http import HttpResponse, HttpResponseRedirect, JsonResponse
|
||||
from django.shortcuts import resolve_url
|
||||
from django.urls import reverse
|
||||
from django.utils.encoding import force_text
|
||||
from django.utils.translation import ugettext as _
|
||||
from django.utils.encoding import force_str
|
||||
from django.utils.translation import gettext as _
|
||||
from django.views.generic import edit
|
||||
from django.views.generic.base import TemplateView
|
||||
|
||||
|
@ -89,7 +89,7 @@ def health_json(request):
|
|||
def menu_json(request):
|
||||
label = _('System')
|
||||
json_str = json.dumps(
|
||||
[{'label': force_text(label), 'slug': 'system', 'url': request.build_absolute_uri(reverse('home'))}]
|
||||
[{'label': force_str(label), 'slug': 'system', 'url': request.build_absolute_uri(reverse('home'))}]
|
||||
)
|
||||
content_type = 'application/json'
|
||||
for variable in ('jsonpCallback', 'callback'):
|
||||
|
|
2
setup.py
2
setup.py
|
@ -148,7 +148,7 @@ setup(
|
|||
'Programming Language :: Python',
|
||||
],
|
||||
install_requires=[
|
||||
'django>=2.2, <3.3',
|
||||
'django>=3.2, <3.3',
|
||||
'gadjo',
|
||||
'celery<4' if sys.version_info < (3, 7) else 'celery>=4',
|
||||
'django-mellon',
|
||||
|
|
|
@ -9,7 +9,7 @@ from unittest import mock
|
|||
import dns.resolver
|
||||
import pytest
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.utils.encoding import force_text
|
||||
from django.utils.encoding import force_str
|
||||
from dns import name
|
||||
from dns.rdtypes.ANY import MX, TXT
|
||||
from test_manager import login
|
||||
|
@ -129,7 +129,7 @@ def test_invalid_address(client, admin_user):
|
|||
client.post('/login/', {'username': 'admin', 'password': 'password'})
|
||||
response = client.post('/emails/', {'default_from_email': 'foobar'})
|
||||
assert response.status_code == 200
|
||||
assert 'Enter a valid email address' in force_text(response.content)
|
||||
assert 'Enter a valid email address' in force_str(response.content)
|
||||
|
||||
|
||||
def test_unkown_address(client, admin_user, dns_resolver, smtp_server, settings):
|
||||
|
@ -137,7 +137,7 @@ def test_unkown_address(client, admin_user, dns_resolver, smtp_server, settings)
|
|||
client.post('/login/', {'username': 'admin', 'password': 'password'})
|
||||
response = client.post('/emails/', {'default_from_email': 'john.doe@unknown.com'})
|
||||
assert response.status_code == 200
|
||||
assert 'Email address not found' in force_text(response.content)
|
||||
assert 'Email address not found' in force_str(response.content)
|
||||
|
||||
|
||||
def test_kown_address_nospf(client, admin_user, dns_resolver, smtp_server, settings):
|
||||
|
@ -145,7 +145,7 @@ def test_kown_address_nospf(client, admin_user, dns_resolver, smtp_server, setti
|
|||
client.post('/login/', {'username': 'admin', 'password': 'password'})
|
||||
response = client.post('/emails/', {'default_from_email': 'john.doe@example.com'}, follow=True)
|
||||
assert response.status_code == 200
|
||||
assert 'Emails settings have been updated. It will take a few seconds to be effective.' in force_text(
|
||||
assert 'Emails settings have been updated. It will take a few seconds to be effective.' in force_str(
|
||||
response.content
|
||||
)
|
||||
|
||||
|
@ -157,7 +157,7 @@ def test_spf_allow_all_mail(client, admin_user, dns_resolver, smtp_server, setti
|
|||
'/emails/', {'default_from_email': 'john.doe@example-spf-allow-all.com'}, follow=True
|
||||
)
|
||||
assert response.status_code == 200
|
||||
assert 'Emails settings have been updated. It will take a few seconds to be effective.' in force_text(
|
||||
assert 'Emails settings have been updated. It will take a few seconds to be effective.' in force_str(
|
||||
response.content
|
||||
)
|
||||
|
||||
|
@ -168,7 +168,7 @@ def test_invalid_spf(client, admin_user, dns_resolver, smtp_server, settings):
|
|||
client.post('/login/', {'username': 'admin', 'password': 'password'})
|
||||
response = client.post('/emails/', {'default_from_email': 'john.doe@example-invalid-spf.com'})
|
||||
assert response.status_code == 200
|
||||
assert 'No suitable SPF record found' in force_text(response.content)
|
||||
assert 'No suitable SPF record found' in force_str(response.content)
|
||||
|
||||
|
||||
def test_strict_nospf(client, admin_user, dns_resolver, smtp_server, monkeypatch, settings):
|
||||
|
@ -178,7 +178,7 @@ def test_strict_nospf(client, admin_user, dns_resolver, smtp_server, monkeypatch
|
|||
client.post('/login/', {'username': 'admin', 'password': 'password'})
|
||||
response = client.post('/emails/', {'default_from_email': 'john.doe@example.com'}, follow=True)
|
||||
assert response.status_code == 200
|
||||
assert 'No suitable SPF record found' in force_text(response.content)
|
||||
assert 'No suitable SPF record found' in force_str(response.content)
|
||||
|
||||
|
||||
def test_valid_spf(client, admin_user, dns_resolver, smtp_server, settings):
|
||||
|
@ -187,7 +187,7 @@ def test_valid_spf(client, admin_user, dns_resolver, smtp_server, settings):
|
|||
client.post('/login/', {'username': 'admin', 'password': 'password'})
|
||||
response = client.post('/emails/', {'default_from_email': 'john.doe@example-spf.com'}, follow=True)
|
||||
assert response.status_code == 200
|
||||
assert 'Emails settings have been updated. It will take a few seconds to be effective.' in force_text(
|
||||
assert 'Emails settings have been updated. It will take a few seconds to be effective.' in force_str(
|
||||
response.content
|
||||
)
|
||||
|
||||
|
@ -200,7 +200,7 @@ def test_no_spf_validation(client, admin_user, dns_resolver, smtp_server, settin
|
|||
'/emails/', {'default_from_email': 'john.doe@example-invalid-spf.com'}, follow=True
|
||||
)
|
||||
assert response.status_code == 200
|
||||
assert 'Emails settings have been updated. It will take a few seconds to be effective.' in force_text(
|
||||
assert 'Emails settings have been updated. It will take a few seconds to be effective.' in force_str(
|
||||
response.content
|
||||
)
|
||||
|
||||
|
@ -211,14 +211,14 @@ def test_sender_allowed_domains(client, admin_user, dns_resolver, smtp_server, s
|
|||
client.post('/login/', {'username': 'admin', 'password': 'password'})
|
||||
response = client.post('/emails/', {'default_from_email': 'john.doe@example.com'}, follow=True)
|
||||
assert response.status_code == 200
|
||||
assert 'Domain example.com is not allowed' in force_text(response.content)
|
||||
assert 'Emails settings have been updated.' not in force_text(response.content)
|
||||
assert 'Domain example.com is not allowed' in force_str(response.content)
|
||||
assert 'Emails settings have been updated.' not in force_str(response.content)
|
||||
|
||||
settings.EMAIL_FROM_ALLOWED_DOMAINS = ['example.com', 'foo.bar']
|
||||
response = client.post('/emails/', {'default_from_email': 'john.doe@example.com'}, follow=True)
|
||||
assert response.status_code == 200
|
||||
assert 'Emails settings have been updated.' in force_text(response.content)
|
||||
assert 'Domain example.com is not allowed' not in force_text(response.content)
|
||||
assert 'Emails settings have been updated.' in force_str(response.content)
|
||||
assert 'Domain example.com is not allowed' not in force_str(response.content)
|
||||
|
||||
settings.EMAIL_FROM_ALLOWED_DOMAINS = []
|
||||
combo = Combo(base_url='https://example.org/test')
|
||||
|
@ -227,21 +227,21 @@ def test_sender_allowed_domains(client, admin_user, dns_resolver, smtp_server, s
|
|||
|
||||
response = client.post('/emails/', {'default_from_email': 'john.doe@example.org'}, follow=True)
|
||||
assert response.status_code == 200
|
||||
assert 'Emails settings have been updated.' in force_text(response.content)
|
||||
assert 'Emails settings have been updated.' in force_str(response.content)
|
||||
|
||||
response = client.post('/emails/', {'default_from_email': 'john.doe@example.com'}, follow=True)
|
||||
assert response.status_code == 200
|
||||
assert 'Domain example.com is not allowed' in force_text(response.content)
|
||||
assert 'Domain example.com is not allowed' in force_str(response.content)
|
||||
|
||||
response = client.post('/emails/', {'default_from_email': 'john.doe@brother.example.org'}, follow=True)
|
||||
assert response.status_code == 200
|
||||
assert 'Domain brother.example.org is not allowed' in force_text(response.content)
|
||||
assert 'Domain brother.example.org is not allowed' in force_str(response.content)
|
||||
|
||||
combo.base_url = 'https://www.example.com'
|
||||
combo.save()
|
||||
response = client.post('/emails/', {'default_from_email': 'john.doe@example.com'}, follow=True)
|
||||
assert response.status_code == 200
|
||||
assert 'Emails settings have been updated.' in force_text(response.content)
|
||||
assert 'Emails settings have been updated.' in force_str(response.content)
|
||||
|
||||
|
||||
def test_emails_view(app, admin_user, dns_resolver, smtp_server, settings):
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue