diff --git a/src/pretix/base/management/commands/check_order_transactions.py b/src/pretix/base/management/commands/check_order_transactions.py index e7b8b57ed1..2fa5d67413 100644 --- a/src/pretix/base/management/commands/check_order_transactions.py +++ b/src/pretix/base/management/commands/check_order_transactions.py @@ -104,4 +104,4 @@ class Command(BaseCommand): print(f"Error in order {o.full_code}: status={o.status}, sum(positions)+sum(fees)={o.position_total + o.fee_total}, " f"order.total={o.total}, sum(transactions)={o.tx_total}, expected={o.correct_total}, pos_cnt={o.position_cnt}, tx_pos_cnt={o.tx_cnt}") - self.stderr.write(self.style.SUCCESS(f'Check completed.')) + self.stderr.write(self.style.SUCCESS('Check completed.')) diff --git a/src/pretix/base/models/checkin.py b/src/pretix/base/models/checkin.py index bc54707b22..b49084a226 100644 --- a/src/pretix/base/models/checkin.py +++ b/src/pretix/base/models/checkin.py @@ -221,7 +221,7 @@ class CheckinList(LoggedModel): return rules if operator in ('or', 'and') and seen_nonbool: - raise ValidationError(f'You cannot use OR/AND logic on a level below a comparison operator.') + raise ValidationError('You cannot use OR/AND logic on a level below a comparison operator.') for v in values: cls.validate_rules(v, seen_nonbool=seen_nonbool or operator not in ('or', 'and'), depth=depth + 1) diff --git a/src/pretix/base/services/checkin.py b/src/pretix/base/services/checkin.py index b8f2b863ea..92fba0c7db 100644 --- a/src/pretix/base/services/checkin.py +++ b/src/pretix/base/services/checkin.py @@ -373,22 +373,22 @@ class SQLLogic: ).astimezone(pytz.UTC)) elif values[0] == 'date_from': return Coalesce( - F(f'subevent__date_from'), - F(f'order__event__date_from'), + F('subevent__date_from'), + F('order__event__date_from'), ) elif values[0] == 'date_to': return Coalesce( - F(f'subevent__date_to'), - F(f'subevent__date_from'), - F(f'order__event__date_to'), - F(f'order__event__date_from'), + F('subevent__date_to'), + F('subevent__date_from'), + F('order__event__date_to'), + F('order__event__date_from'), ) elif values[0] == 'date_admission': return Coalesce( - F(f'subevent__date_admission'), - F(f'subevent__date_from'), - F(f'order__event__date_admission'), - F(f'order__event__date_from'), + F('subevent__date_admission'), + F('subevent__date_from'), + F('order__event__date_admission'), + F('order__event__date_from'), ) else: raise ValueError(f'Unknown time type {values[0]}') diff --git a/src/pretix/control/views/subevents.py b/src/pretix/control/views/subevents.py index 349234ea76..78552bd38b 100644 --- a/src/pretix/control/views/subevents.py +++ b/src/pretix/control/views/subevents.py @@ -1470,7 +1470,7 @@ class SubEventBulkEdit(SubEventQueryMixin, EventPermissionRequiredMixin, FormVie form.is_valid() and self.quota_formset.is_valid() and (not self.list_formset or self.list_formset.is_valid()) and - all(f.is_valid() for f in self.itemvar_forms)and + all(f.is_valid() for f in self.itemvar_forms) and all(f.is_valid() for f in self.meta_forms) ) if is_valid: diff --git a/src/pretix/presale/ical.py b/src/pretix/presale/ical.py index 8eeb082a6d..84d3c201f5 100644 --- a/src/pretix/presale/ical.py +++ b/src/pretix/presale/ical.py @@ -156,7 +156,7 @@ def get_private_icals(event, positions): vevent.add('uid').value = 'pretix-{}-{}-{}@{}'.format( event.organizer.slug, - event.organizer.slug, event.slug, + event.slug, ev.pk if not isinstance(ev, Event) else '0', urlparse(url).netloc ) diff --git a/src/setup.cfg b/src/setup.cfg index 50e67a1cb3..f414c85e6b 100644 --- a/src/setup.cfg +++ b/src/setup.cfg @@ -1,5 +1,5 @@ [flake8] -ignore = N802,W503,E402,C901,E722,W504,E252,N812,N806,E741 +ignore = N802,W503,E402,C901,E722,W504,E252,N812,N806,N818,E741 max-line-length = 160 exclude = migrations,.ropeproject,static,mt940.py,_static,build,make_testdata.py,*/testutils/settings.py,tests/settings.py,pretix/base/models/__init__.py,pretix/base/secretgenerators/pretix_sig1_pb2.py,.eggs/* max-complexity = 11 diff --git a/src/setup.py b/src/setup.py index 5ced27ad9d..386f161e78 100644 --- a/src/setup.py +++ b/src/setup.py @@ -237,13 +237,13 @@ setup( 'coverage', 'coveralls', 'django-debug-toolbar==3.2.*', - 'flake8>=3.7,<4.1', + 'flake8==4.0.*', 'freezegun', - 'isort', - 'pep8-naming', + 'isort==5.10.*', + 'pep8-naming==0.12.*', 'potypo', - 'pycodestyle==2.5.*', - 'pyflakes>=2.1,<2.5', + 'pycodestyle==2.8.*', + 'pyflakes==2.4../pretix/base/models/checkin.py*', 'pytest-cache', 'pytest-cov', 'pytest-django==4.*', diff --git a/src/tests/api/test_device_event_selection.py b/src/tests/api/test_device_event_selection.py index baa9d85ecc..9dc823d301 100644 --- a/src/tests/api/test_device_event_selection.py +++ b/src/tests/api/test_device_event_selection.py @@ -31,7 +31,7 @@ tz = pytz.timezone("Asia/Tokyo") @pytest.mark.django_db def test_no_events(device_client, device): - resp = device_client.get(f'/api/v1/device/eventselection?current_event=e1') + resp = device_client.get('/api/v1/device/eventselection?current_event=e1') assert resp.status_code == 404 @@ -66,26 +66,26 @@ def test_choose_between_events(device_client, device): resp = device_client.get(f'/api/v1/device/eventselection?current_event=e1¤t_checkinlist={cl1.pk}') assert resp.status_code == 304 with freeze_time("2020-01-10T16:30:00+09:00"): - resp = device_client.get(f'/api/v1/device/eventselection?current_event=e1') + resp = device_client.get('/api/v1/device/eventselection?current_event=e1') assert resp.status_code == 200 - resp = device_client.get(f'/api/v1/device/eventselection?current_event=e2') + resp = device_client.get('/api/v1/device/eventselection?current_event=e2') assert resp.status_code == 304 # Next one only with freeze_time("2020-01-10T12:30:00+09:00"): - resp = device_client.get(f'/api/v1/device/eventselection') + resp = device_client.get('/api/v1/device/eventselection') assert resp.status_code == 200 assert resp.data['event']['slug'] == 'e1' # Last one only with freeze_time("2020-01-10T17:30:00+09:00"): - resp = device_client.get(f'/api/v1/device/eventselection') + resp = device_client.get('/api/v1/device/eventselection') assert resp.status_code == 200 assert resp.data['event']['slug'] == 'e2' # Running one with freeze_time("2020-01-10T14:30:00+09:00"): - resp = device_client.get(f'/api/v1/device/eventselection') + resp = device_client.get('/api/v1/device/eventselection') assert resp.status_code == 200 assert resp.data['event']['slug'] == 'e1' with freeze_time("2020-01-10T16:01:00+09:00"): @@ -108,11 +108,11 @@ def test_choose_between_events(device_client, device): # Switch at half-time with freeze_time("2020-01-10T15:29:00+09:00"): - resp = device_client.get(f'/api/v1/device/eventselection') + resp = device_client.get('/api/v1/device/eventselection') assert resp.status_code == 200 assert resp.data['event']['slug'] == 'e1' with freeze_time("2020-01-10T15:31:00+09:00"): - resp = device_client.get(f'/api/v1/device/eventselection') + resp = device_client.get('/api/v1/device/eventselection') assert resp.status_code == 200 assert resp.data['event']['slug'] == 'e2' @@ -120,9 +120,9 @@ def test_choose_between_events(device_client, device): e2.date_admission = tz.localize(datetime(2020, 1, 10, 14, 45)) e2.save() with freeze_time("2020-01-10T14:45:00+09:00"): - resp = device_client.get(f'/api/v1/device/eventselection?current_event=e1') + resp = device_client.get('/api/v1/device/eventselection?current_event=e1') assert resp.status_code == 200 - resp = device_client.get(f'/api/v1/device/eventselection?current_event=e2') + resp = device_client.get('/api/v1/device/eventselection?current_event=e2') assert resp.status_code == 304 @@ -165,21 +165,21 @@ def test_choose_between_subevents(device_client, device): # Next one only with freeze_time("2020-01-10T12:30:00+09:00"): - resp = device_client.get(f'/api/v1/device/eventselection') + resp = device_client.get('/api/v1/device/eventselection') assert resp.status_code == 200 assert resp.data['event']['slug'] == 'e1' assert resp.data['subevent'] == se1.pk # Last one only with freeze_time("2020-01-10T17:30:00+09:00"): - resp = device_client.get(f'/api/v1/device/eventselection') + resp = device_client.get('/api/v1/device/eventselection') assert resp.status_code == 200 assert resp.data['event']['slug'] == 'e1' assert resp.data['subevent'] == se2.pk # Running one with freeze_time("2020-01-10T14:30:00+09:00"): - resp = device_client.get(f'/api/v1/device/eventselection') + resp = device_client.get('/api/v1/device/eventselection') assert resp.status_code == 200 assert resp.data['event']['slug'] == 'e1' assert resp.data['subevent'] == se1.pk @@ -193,7 +193,7 @@ def test_choose_between_subevents(device_client, device): # Prefer the one on the same day with freeze_time("2020-01-10T23:59:00+09:00"): - resp = device_client.get(f'/api/v1/device/eventselection') + resp = device_client.get('/api/v1/device/eventselection') assert resp.status_code == 200 assert resp.data['event']['slug'] == 'e1' assert resp.data['subevent'] == se2.pk @@ -207,12 +207,12 @@ def test_choose_between_subevents(device_client, device): # Switch at half-time with freeze_time("2020-01-10T15:29:00+09:00"): - resp = device_client.get(f'/api/v1/device/eventselection') + resp = device_client.get('/api/v1/device/eventselection') assert resp.status_code == 200 assert resp.data['event']['slug'] == 'e1' assert resp.data['subevent'] == se1.pk with freeze_time("2020-01-10T15:31:00+09:00"): - resp = device_client.get(f'/api/v1/device/eventselection') + resp = device_client.get('/api/v1/device/eventselection') assert resp.data['event']['slug'] == 'e1' assert resp.data['subevent'] == se2.pk diff --git a/src/tests/api/test_exporters.py b/src/tests/api/test_exporters.py index b6833c3ffb..17b5f8b97d 100644 --- a/src/tests/api/test_exporters.py +++ b/src/tests/api/test_exporters.py @@ -115,7 +115,7 @@ def test_org_list(token_client, organizer, event): resp = token_client.get('/api/v1/organizers/{}/exporters/'.format(organizer.slug)) assert resp.status_code == 200 assert c in resp.data['results'] - resp = token_client.get('/api/v1/organizers/{}/exporters/orderlist/'.format(organizer.slug, event.slug)) + resp = token_client.get('/api/v1/organizers/{}/exporters/orderlist/'.format(organizer.slug)) assert resp.status_code == 200 assert c == resp.data diff --git a/src/tests/api/test_idempotency.py b/src/tests/api/test_idempotency.py index 76d5fa3d4c..c7915523e2 100644 --- a/src/tests/api/test_idempotency.py +++ b/src/tests/api/test_idempotency.py @@ -133,10 +133,10 @@ def test_ignore_get(token_client, organizer, event): @pytest.mark.django_db def test_ignore_outside_api(token_client, organizer): - resp = token_client.post('/control/login'.format(organizer.slug), + resp = token_client.post('/control/login', PAYLOAD, format='json', HTTP_X_IDEMPOTENCY_KEY='foo') assert resp.status_code == 200 - resp = token_client.post('/control/invalid/'.format(organizer.slug), + resp = token_client.post('/control/invalid/', PAYLOAD, format='json', HTTP_X_IDEMPOTENCY_KEY='foo') assert resp.status_code == 302 diff --git a/src/tests/control/test_auth.py b/src/tests/control/test_auth.py index a6d3a4409f..0a29785f04 100644 --- a/src/tests/control/test_auth.py +++ b/src/tests/control/test_auth.py @@ -348,7 +348,7 @@ class Login2FAFormTest(TestCase): d = TOTPDevice.objects.create(user=self.user, name='test') totp = TOTP(d.bin_key, d.step, d.t0, d.digits, d.drift) totp.time = time.time() - response = self.client.post('/control/login/2fa'.format(d.pk), { + response = self.client.post('/control/login/2fa', { 'token': str(totp.token() + 2) }) self.assertEqual(response.status_code, 302) @@ -360,7 +360,7 @@ class Login2FAFormTest(TestCase): d = TOTPDevice.objects.create(user=self.user, name='test') totp = TOTP(d.bin_key, d.step, d.t0, d.digits, d.drift) totp.time = time.time() - response = self.client.post('/control/login/2fa?next=/control/events/'.format(d.pk), { + response = self.client.post('/control/login/2fa?next=/control/events/', { 'token': str(totp.token()) }) self.assertEqual(response.status_code, 302) @@ -374,7 +374,7 @@ class Login2FAFormTest(TestCase): m = self.monkeypatch m.setattr("webauthn.WebAuthnAssertionResponse.verify", fail) - d = U2FDevice.objects.create( + U2FDevice.objects.create( user=self.user, name='test', json_data='{"appId": "https://local.pretix.eu", "keyHandle": ' '"j9Rkpon1J5U3eDQMM8YqAvwEapt-m87V8qdCaImiAqmvTJ' @@ -384,7 +384,7 @@ class Login2FAFormTest(TestCase): response = self.client.get('/control/login/2fa') assert 'token' in response.content.decode() - response = self.client.post('/control/login/2fa'.format(d.pk), { + response = self.client.post('/control/login/2fa', { 'token': '{"response": "true"}' }) self.assertEqual(response.status_code, 302) @@ -396,7 +396,7 @@ class Login2FAFormTest(TestCase): m = self.monkeypatch m.setattr("webauthn.WebAuthnAssertionResponse.verify", lambda *args, **kwargs: 1) - d = U2FDevice.objects.create( + U2FDevice.objects.create( user=self.user, name='test', json_data='{"appId": "https://local.pretix.eu", "keyHandle": ' '"j9Rkpon1J5U3eDQMM8YqAvwEapt-m87V8qdCaImiAqmvTJ' @@ -406,7 +406,7 @@ class Login2FAFormTest(TestCase): response = self.client.get('/control/login/2fa') assert 'token' in response.content.decode() - response = self.client.post('/control/login/2fa'.format(d.pk), { + response = self.client.post('/control/login/2fa', { 'token': '{"response": "true"}' }) self.assertEqual(response.status_code, 302) @@ -964,7 +964,7 @@ class PasswordChangeRequiredTest(TestCase): totp = TOTP(d.bin_key, d.step, d.t0, d.digits, d.drift) totp.time = time.time() - self.client.post('/control/login/2fa?next=/control/events/'.format(d.pk), { + self.client.post('/control/login/2fa?next=/control/events/', { 'token': str(totp.token()) }) response = self.client.get('/control/events/') diff --git a/src/tests/control/test_customer.py b/src/tests/control/test_customer.py index 6db491eea0..e8c8097a78 100644 --- a/src/tests/control/test_customer.py +++ b/src/tests/control/test_customer.py @@ -145,7 +145,7 @@ def test_customer_anonymize(organizer, admin_user, customer, client, order): @pytest.mark.django_db def test_list_of_membership_types(organizer, admin_user, client, customer, membership_type): client.login(email='dummy@dummy.dummy', password='dummy') - resp = client.get('/control/organizer/dummy/membershiptypes'.format(customer.identifier)) + resp = client.get('/control/organizer/dummy/membershiptypes') c = resp.content.decode() assert 'Week pass' in c diff --git a/src/tests/control/test_giftcards.py b/src/tests/control/test_giftcards.py index cb813da17d..855488331d 100644 --- a/src/tests/control/test_giftcards.py +++ b/src/tests/control/test_giftcards.py @@ -174,11 +174,11 @@ def test_card_detail_view_transact_invalid_value(organizer, admin_user, gift_car @pytest.mark.django_db def test_manage_acceptance(organizer, organizer2, admin_user, gift_card, client, team2): client.login(email='dummy@dummy.dummy', password='dummy') - client.post('/control/organizer/dummy/giftcards'.format(gift_card.pk), { + client.post('/control/organizer/dummy/giftcards', { 'add': organizer2.slug }) assert organizer.gift_card_issuer_acceptance.filter(issuer=organizer2).exists() - client.post('/control/organizer/dummy/giftcards'.format(gift_card.pk), { + client.post('/control/organizer/dummy/giftcards', { 'del': organizer2.slug }) assert not organizer.gift_card_issuer_acceptance.filter(issuer=organizer2).exists() @@ -187,7 +187,7 @@ def test_manage_acceptance(organizer, organizer2, admin_user, gift_card, client, @pytest.mark.django_db def test_manage_acceptance_permission_required(organizer, organizer2, admin_user, gift_card, client): client.login(email='dummy@dummy.dummy', password='dummy') - client.post('/control/organizer/dummy/giftcards'.format(gift_card.pk), { + client.post('/control/organizer/dummy/giftcards', { 'add': organizer2.slug }) assert not organizer.gift_card_issuer_acceptance.filter(issuer=organizer2).exists() diff --git a/src/tests/control/test_orders.py b/src/tests/control/test_orders.py index 81b1c56eeb..6bcf8b9183 100644 --- a/src/tests/control/test_orders.py +++ b/src/tests/control/test_orders.py @@ -1978,7 +1978,7 @@ def test_refund_propose_lower_payment(client, env): }, follow=True) doc = BeautifulSoup(response.content.decode(), "lxml") assert doc.select("input[name=refund-{}]".format(p2.pk))[0]['value'] == '6.00' - assert doc.select("input[name=refund-manual]".format(p2.pk))[0]['value'] == '1.00' + assert doc.select("input[name=refund-manual]")[0]['value'] == '1.00' @pytest.mark.django_db @@ -1999,7 +1999,7 @@ def test_refund_propose_equal_payment(client, env): }, follow=True) doc = BeautifulSoup(response.content.decode(), "lxml") assert doc.select("input[name=refund-{}]".format(p2.pk))[0]['value'] == '7.00' - assert not doc.select("input[name=refund-manual]".format(p2.pk))[0].get('value') + assert not doc.select("input[name=refund-manual]")[0].get('value') @pytest.mark.django_db @@ -2020,7 +2020,7 @@ def test_refund_propose_higher_payment(client, env): }, follow=True) doc = BeautifulSoup(response.content.decode(), "lxml") assert doc.select("input[name=refund-{}]".format(p2.pk))[0]['value'] == '7.00' - assert not doc.select("input[name=refund-manual]".format(p2.pk))[0].get('value') + assert not doc.select("input[name=refund-manual]")[0].get('value') @pytest.mark.django_db diff --git a/src/tests/plugins/banktransfer/test_actions.py b/src/tests/plugins/banktransfer/test_actions.py index 7800dec479..975ce85fe2 100644 --- a/src/tests/plugins/banktransfer/test_actions.py +++ b/src/tests/plugins/banktransfer/test_actions.py @@ -134,7 +134,7 @@ def test_comment(env, client): amount=12, date='unknown') client.login(email='dummy@dummy.dummy', password='dummy') r = json.loads(client.post('/control/event/{}/{}/banktransfer/action/'.format(env[0].organizer.slug, env[0].slug), { - 'action_{}'.format(trans.pk): 'comment:This is my comment'.format(env[2].code) + 'action_{}'.format(trans.pk): 'comment:This is my comment' }).content.decode('utf-8')) assert r['status'] == 'ok' trans.refresh_from_db() diff --git a/src/tests/presale/test_customer.py b/src/tests/presale/test_customer.py index 3555e25167..05e7870926 100644 --- a/src/tests/presale/test_customer.py +++ b/src/tests/presale/test_customer.py @@ -151,13 +151,13 @@ def test_org_login_logout(env, client): }) assert r.status_code == 302 - r = client.get(f'/bigevents/account/') + r = client.get('/bigevents/account/') assert r.status_code == 200 r = client.get('/bigevents/account/logout') assert r.status_code == 302 - r = client.get(f'/bigevents/account/') + r = client.get('/bigevents/account/') assert r.status_code == 302 @@ -288,7 +288,7 @@ def test_org_order_list(env, client): }) assert r.status_code == 302 - r = client.get(f'/bigevents/account/') + r = client.get('/bigevents/account/') assert r.status_code == 200 content = r.content.decode() assert o1.code not in content @@ -297,7 +297,7 @@ def test_org_order_list(env, client): env[0].settings.customer_accounts_link_by_email = True - r = client.get(f'/bigevents/account/') + r = client.get('/bigevents/account/') assert r.status_code == 200 content = r.content.decode() assert o1.code not in content @@ -318,7 +318,7 @@ def test_change_name(env, client): }) assert r.status_code == 302 - r = client.post(f'/bigevents/account/change', { + r = client.post('/bigevents/account/change', { 'name_parts_0': 'John Doe', 'email': 'john@example.org', }) @@ -340,7 +340,7 @@ def test_change_email(env, client): }) assert r.status_code == 302 - r = client.post(f'/bigevents/account/change', { + r = client.post('/bigevents/account/change', { 'name_parts_0': 'John Doe', 'email': 'john@example.com' }) @@ -348,7 +348,7 @@ def test_change_email(env, client): customer.refresh_from_db() assert customer.email == 'john@example.org' - r = client.post(f'/bigevents/account/change', { + r = client.post('/bigevents/account/change', { 'name_parts_0': 'John Doe', 'email': 'john@example.com', 'password_current': 'foo', @@ -358,11 +358,11 @@ def test_change_email(env, client): assert customer.email == 'john@example.org' assert len(djmail.outbox) == 1 - token = dumps({ + dumps({ 'customer': customer.pk, 'email': 'john@example.com' }, salt='pretix.presale.views.customer.ChangeInformationView') - r = client.get(f'/bigevents/account/confirmchange?token={token}') + r = client.get('/bigevents/account/confirmchange?token={token}') assert r.status_code == 302 customer.refresh_from_db() assert customer.email == 'john@example.com' @@ -381,7 +381,7 @@ def test_change_pw(env, client): }) assert r.status_code == 302 - r = client.post(f'/bigevents/account/password', { + r = client.post('/bigevents/account/password', { 'password_current': 'invalid', 'password': 'aYLBRNg4', 'password_repeat': 'aYLBRNg4', @@ -390,7 +390,7 @@ def test_change_pw(env, client): customer.refresh_from_db() assert customer.check_password('foo') - r = client.post(f'/bigevents/account/password', { + r = client.post('/bigevents/account/password', { 'password_current': 'foo', 'password': 'aYLBRNg4', 'password_repeat': 'aYLBRNg4',