mirror of
https://github.com/pretix/pretix.git
synced 2026-08-25 13:12:00 +00:00
Revert "First steps into pytz deprecation"
This reverts commit e4e7d50659.
This commit is contained in:
@@ -23,9 +23,9 @@ import datetime
|
|||||||
import mimetypes
|
import mimetypes
|
||||||
import os
|
import os
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from zoneinfo import ZoneInfo
|
|
||||||
|
|
||||||
import django_filters
|
import django_filters
|
||||||
|
import pytz
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from django.db.models import (
|
from django.db.models import (
|
||||||
Exists, F, OuterRef, Prefetch, Q, Subquery, prefetch_related_objects,
|
Exists, F, OuterRef, Prefetch, Q, Subquery, prefetch_related_objects,
|
||||||
@@ -602,7 +602,7 @@ class OrderViewSet(viewsets.ModelViewSet):
|
|||||||
status=status.HTTP_400_BAD_REQUEST
|
status=status.HTTP_400_BAD_REQUEST
|
||||||
)
|
)
|
||||||
|
|
||||||
tz = ZoneInfo(self.request.event.settings.timezone)
|
tz = pytz.timezone(self.request.event.settings.timezone)
|
||||||
new_date = make_aware(datetime.datetime.combine(
|
new_date = make_aware(datetime.datetime.combine(
|
||||||
new_date,
|
new_date,
|
||||||
datetime.time(hour=23, minute=59, second=59)
|
datetime.time(hour=23, minute=59, second=59)
|
||||||
|
|||||||
@@ -37,8 +37,8 @@ import tempfile
|
|||||||
from collections import OrderedDict, namedtuple
|
from collections import OrderedDict, namedtuple
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from typing import Optional, Tuple
|
from typing import Optional, Tuple
|
||||||
from zoneinfo import ZoneInfo
|
|
||||||
|
|
||||||
|
import pytz
|
||||||
from defusedcsv import csv
|
from defusedcsv import csv
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
@@ -68,7 +68,7 @@ class BaseExporter:
|
|||||||
self.events = event
|
self.events = event
|
||||||
self.event = None
|
self.event = None
|
||||||
e = self.events.first()
|
e = self.events.first()
|
||||||
self.timezone = e.timezone if e else ZoneInfo(settings.TIME_ZONE)
|
self.timezone = e.timezone if e else pytz.timezone(settings.TIME_ZONE)
|
||||||
else:
|
else:
|
||||||
self.events = Event.objects.filter(pk=event.pk)
|
self.events = Event.objects.filter(pk=event.pk)
|
||||||
self.timezone = event.timezone
|
self.timezone = event.timezone
|
||||||
|
|||||||
@@ -34,8 +34,8 @@
|
|||||||
|
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from zoneinfo import ZoneInfo
|
|
||||||
|
|
||||||
|
import pytz
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.db.models import (
|
from django.db.models import (
|
||||||
Case, CharField, Count, DateTimeField, F, IntegerField, Max, Min, OuterRef,
|
Case, CharField, Count, DateTimeField, F, IntegerField, Max, Min, OuterRef,
|
||||||
@@ -319,7 +319,7 @@ class OrderListExporter(MultiSheetListExporter):
|
|||||||
|
|
||||||
yield self.ProgressSetTotal(total=qs.count())
|
yield self.ProgressSetTotal(total=qs.count())
|
||||||
for order in qs.order_by('datetime').iterator():
|
for order in qs.order_by('datetime').iterator():
|
||||||
tz = ZoneInfo(self.event_object_cache[order.event_id].settings.timezone)
|
tz = pytz.timezone(self.event_object_cache[order.event_id].settings.timezone)
|
||||||
|
|
||||||
row = [
|
row = [
|
||||||
self.event_object_cache[order.event_id].slug,
|
self.event_object_cache[order.event_id].slug,
|
||||||
@@ -452,7 +452,7 @@ class OrderListExporter(MultiSheetListExporter):
|
|||||||
yield self.ProgressSetTotal(total=qs.count())
|
yield self.ProgressSetTotal(total=qs.count())
|
||||||
for op in qs.order_by('order__datetime').iterator():
|
for op in qs.order_by('order__datetime').iterator():
|
||||||
order = op.order
|
order = op.order
|
||||||
tz = ZoneInfo(order.event.settings.timezone)
|
tz = pytz.timezone(order.event.settings.timezone)
|
||||||
row = [
|
row = [
|
||||||
self.event_object_cache[order.event_id].slug,
|
self.event_object_cache[order.event_id].slug,
|
||||||
order.code,
|
order.code,
|
||||||
@@ -621,7 +621,7 @@ class OrderListExporter(MultiSheetListExporter):
|
|||||||
|
|
||||||
for op in ops:
|
for op in ops:
|
||||||
order = op.order
|
order = op.order
|
||||||
tz = ZoneInfo(self.event_object_cache[order.event_id].settings.timezone)
|
tz = pytz.timezone(self.event_object_cache[order.event_id].settings.timezone)
|
||||||
row = [
|
row = [
|
||||||
self.event_object_cache[order.event_id].slug,
|
self.event_object_cache[order.event_id].slug,
|
||||||
order.code,
|
order.code,
|
||||||
@@ -803,7 +803,7 @@ class PaymentListExporter(ListExporter):
|
|||||||
|
|
||||||
yield self.ProgressSetTotal(total=len(objs))
|
yield self.ProgressSetTotal(total=len(objs))
|
||||||
for obj in objs:
|
for obj in objs:
|
||||||
tz = ZoneInfo(obj.order.event.settings.timezone)
|
tz = pytz.timezone(obj.order.event.settings.timezone)
|
||||||
if isinstance(obj, OrderPayment) and obj.payment_date:
|
if isinstance(obj, OrderPayment) and obj.payment_date:
|
||||||
d2 = obj.payment_date.astimezone(tz).date().strftime('%Y-%m-%d')
|
d2 = obj.payment_date.astimezone(tz).date().strftime('%Y-%m-%d')
|
||||||
elif isinstance(obj, OrderRefund) and obj.execution_date:
|
elif isinstance(obj, OrderRefund) and obj.execution_date:
|
||||||
@@ -968,7 +968,7 @@ class GiftcardRedemptionListExporter(ListExporter):
|
|||||||
yield headers
|
yield headers
|
||||||
|
|
||||||
for obj in objs:
|
for obj in objs:
|
||||||
tz = ZoneInfo(obj.order.event.settings.timezone)
|
tz = pytz.timezone(obj.order.event.settings.timezone)
|
||||||
gc = GiftCard.objects.get(pk=obj.info_data.get('gift_card'))
|
gc = GiftCard.objects.get(pk=obj.info_data.get('gift_card'))
|
||||||
row = [
|
row = [
|
||||||
obj.order.event.slug,
|
obj.order.event.slug,
|
||||||
|
|||||||
@@ -20,8 +20,8 @@
|
|||||||
# <https://www.gnu.org/licenses/>.
|
# <https://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
from zoneinfo import ZoneInfo
|
|
||||||
|
|
||||||
|
import pytz
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.db.models import F, Q
|
from django.db.models import F, Q
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
@@ -137,7 +137,7 @@ class WaitingListExporter(ListExporter):
|
|||||||
|
|
||||||
# which event should be used to output dates in columns "Start date" and "End date"
|
# which event should be used to output dates in columns "Start date" and "End date"
|
||||||
event_for_date_columns = entry.subevent if entry.subevent else entry.event
|
event_for_date_columns = entry.subevent if entry.subevent else entry.event
|
||||||
tz = ZoneInfo(entry.event.settings.timezone)
|
tz = pytz.timezone(entry.event.settings.timezone)
|
||||||
datetime_format = '%Y-%m-%d %H:%M:%S'
|
datetime_format = '%Y-%m-%d %H:%M:%S'
|
||||||
|
|
||||||
row = [
|
row = [
|
||||||
|
|||||||
@@ -37,10 +37,10 @@ import json
|
|||||||
import logging
|
import logging
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
from zoneinfo import ZoneInfo
|
|
||||||
|
|
||||||
import dateutil.parser
|
import dateutil.parser
|
||||||
import pycountry
|
import pycountry
|
||||||
|
import pytz
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
@@ -685,7 +685,7 @@ class BaseQuestionsForm(forms.Form):
|
|||||||
initial = answers[0]
|
initial = answers[0]
|
||||||
else:
|
else:
|
||||||
initial = None
|
initial = None
|
||||||
tz = ZoneInfo(event.settings.timezone)
|
tz = pytz.timezone(event.settings.timezone)
|
||||||
help_text = rich_text(q.help_text)
|
help_text = rich_text(q.help_text)
|
||||||
label = escape(q.question) # django-bootstrap3 calls mark_safe
|
label = escape(q.question) # django-bootstrap3 calls mark_safe
|
||||||
required = q.required and not self.all_optional
|
required = q.required and not self.all_optional
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
import json
|
import json
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
import pytz_deprecation_shim
|
import pytz
|
||||||
from django.core.management.base import BaseCommand
|
from django.core.management.base import BaseCommand
|
||||||
from django.utils.timezone import override
|
from django.utils.timezone import override
|
||||||
from django_scopes import scope
|
from django_scopes import scope
|
||||||
@@ -60,7 +60,7 @@ class Command(BaseCommand):
|
|||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
locale = options.get("locale", None)
|
locale = options.get("locale", None)
|
||||||
timezone = pytz_deprecation_shim.timezone(options['timezone']) if options.get('timezone') else None
|
timezone = pytz.timezone(options['timezone']) if options.get('timezone') else None
|
||||||
|
|
||||||
with scope(organizer=o):
|
with scope(organizer=o):
|
||||||
if options['event_slug']:
|
if options['event_slug']:
|
||||||
|
|||||||
@@ -21,8 +21,8 @@
|
|||||||
#
|
#
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
from urllib.parse import urlsplit
|
from urllib.parse import urlsplit
|
||||||
from zoneinfo import ZoneInfo, ZoneInfoNotFoundError
|
|
||||||
|
|
||||||
|
import pytz
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.http import Http404, HttpRequest, HttpResponse
|
from django.http import Http404, HttpRequest, HttpResponse
|
||||||
from django.middleware.common import CommonMiddleware
|
from django.middleware.common import CommonMiddleware
|
||||||
@@ -98,9 +98,9 @@ class LocaleMiddleware(MiddlewareMixin):
|
|||||||
tzname = request.user.timezone
|
tzname = request.user.timezone
|
||||||
if tzname:
|
if tzname:
|
||||||
try:
|
try:
|
||||||
timezone.activate(ZoneInfo(tzname))
|
timezone.activate(pytz.timezone(tzname))
|
||||||
request.timezone = tzname
|
request.timezone = tzname
|
||||||
except ZoneInfoNotFoundError:
|
except pytz.UnknownTimeZoneError:
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
timezone.deactivate()
|
timezone.deactivate()
|
||||||
|
|||||||
+1
-3
@@ -2,8 +2,6 @@
|
|||||||
# Generated by Django 1.10.4 on 2017-02-03 14:21
|
# Generated by Django 1.10.4 on 2017-02-03 14:21
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from zoneinfo import ZoneInfo
|
|
||||||
|
|
||||||
import django.core.validators
|
import django.core.validators
|
||||||
import django.db.migrations.operations.special
|
import django.db.migrations.operations.special
|
||||||
import django.db.models.deletion
|
import django.db.models.deletion
|
||||||
@@ -28,7 +26,7 @@ def forwards42(apps, schema_editor):
|
|||||||
for s in EventSetting.objects.filter(key='timezone').values('object_id', 'value')
|
for s in EventSetting.objects.filter(key='timezone').values('object_id', 'value')
|
||||||
}
|
}
|
||||||
for order in Order.objects.all():
|
for order in Order.objects.all():
|
||||||
tz = ZoneInfo(etz.get(order.event_id, 'UTC'))
|
tz = pytz.timezone(etz.get(order.event_id, 'UTC'))
|
||||||
order.expires = order.expires.astimezone(tz).replace(hour=23, minute=59, second=59)
|
order.expires = order.expires.astimezone(tz).replace(hour=23, minute=59, second=59)
|
||||||
order.save()
|
order.save()
|
||||||
|
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
# Generated by Django 1.10.2 on 2016-10-19 17:57
|
# Generated by Django 1.10.2 on 2016-10-19 17:57
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from zoneinfo import ZoneInfo
|
import pytz
|
||||||
|
|
||||||
from django.db import migrations
|
from django.db import migrations
|
||||||
|
from django.utils import timezone
|
||||||
|
|
||||||
|
|
||||||
def forwards(apps, schema_editor):
|
def forwards(apps, schema_editor):
|
||||||
@@ -15,7 +15,7 @@ def forwards(apps, schema_editor):
|
|||||||
for s in EventSetting.objects.filter(key='timezone').values('object_id', 'value')
|
for s in EventSetting.objects.filter(key='timezone').values('object_id', 'value')
|
||||||
}
|
}
|
||||||
for order in Order.objects.all():
|
for order in Order.objects.all():
|
||||||
tz = ZoneInfo(etz.get(order.event_id, 'UTC'))
|
tz = pytz.timezone(etz.get(order.event_id, 'UTC'))
|
||||||
order.expires = order.expires.astimezone(tz).replace(hour=23, minute=59, second=59)
|
order.expires = order.expires.astimezone(tz).replace(hour=23, minute=59, second=59)
|
||||||
order.save()
|
order.save()
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
# Generated by Django 3.2.4 on 2021-09-30 10:25
|
# Generated by Django 3.2.4 on 2021-09-30 10:25
|
||||||
from datetime import datetime, timezone
|
from datetime import datetime
|
||||||
|
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
|
from pytz import UTC
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
@@ -14,7 +15,7 @@ class Migration(migrations.Migration):
|
|||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='invoice',
|
model_name='invoice',
|
||||||
name='sent_to_customer',
|
name='sent_to_customer',
|
||||||
field=models.DateTimeField(blank=True, null=True, default=datetime(1970, 1, 1, 0, 0, 0, 0, tzinfo=timezone.utc)),
|
field=models.DateTimeField(blank=True, null=True, default=UTC.localize(datetime(1970, 1, 1, 0, 0, 0, 0))),
|
||||||
preserve_default=False,
|
preserve_default=False,
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -40,9 +40,8 @@ from collections import OrderedDict
|
|||||||
from datetime import datetime, time, timedelta
|
from datetime import datetime, time, timedelta
|
||||||
from operator import attrgetter
|
from operator import attrgetter
|
||||||
from urllib.parse import urljoin
|
from urllib.parse import urljoin
|
||||||
from zoneinfo import ZoneInfo
|
|
||||||
|
|
||||||
import pytz_deprecation_shim
|
import pytz
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.core.files.storage import default_storage
|
from django.core.files.storage import default_storage
|
||||||
@@ -215,7 +214,7 @@ class EventMixin:
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def timezone(self):
|
def timezone(self):
|
||||||
return pytz_deprecation_shim.timezone(self.settings.timezone)
|
return pytz.timezone(self.settings.timezone)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def effective_presale_end(self):
|
def effective_presale_end(self):
|
||||||
@@ -719,7 +718,7 @@ class Event(EventMixin, LoggedModel):
|
|||||||
"""
|
"""
|
||||||
The last datetime of payments for this event.
|
The last datetime of payments for this event.
|
||||||
"""
|
"""
|
||||||
tz = ZoneInfo(self.settings.timezone)
|
tz = pytz.timezone(self.settings.timezone)
|
||||||
return make_aware(datetime.combine(
|
return make_aware(datetime.combine(
|
||||||
self.settings.get('payment_term_last', as_type=RelativeDateWrapper).datetime(self).date(),
|
self.settings.get('payment_term_last', as_type=RelativeDateWrapper).datetime(self).date(),
|
||||||
time(hour=23, minute=59, second=59)
|
time(hour=23, minute=59, second=59)
|
||||||
|
|||||||
@@ -39,9 +39,9 @@ from collections import Counter, OrderedDict
|
|||||||
from datetime import date, datetime, time
|
from datetime import date, datetime, time
|
||||||
from decimal import Decimal, DecimalException
|
from decimal import Decimal, DecimalException
|
||||||
from typing import Tuple
|
from typing import Tuple
|
||||||
from zoneinfo import ZoneInfo
|
|
||||||
|
|
||||||
import dateutil.parser
|
import dateutil.parser
|
||||||
|
import pytz
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.core.validators import MinValueValidator, RegexValidator
|
from django.core.validators import MinValueValidator, RegexValidator
|
||||||
@@ -1474,7 +1474,7 @@ class Question(LoggedModel):
|
|||||||
try:
|
try:
|
||||||
dt = dateutil.parser.parse(answer)
|
dt = dateutil.parser.parse(answer)
|
||||||
if is_naive(dt):
|
if is_naive(dt):
|
||||||
dt = make_aware(dt, ZoneInfo(self.event.settings.timezone))
|
dt = make_aware(dt, pytz.timezone(self.event.settings.timezone))
|
||||||
except:
|
except:
|
||||||
raise ValidationError(_('Invalid datetime input.'))
|
raise ValidationError(_('Invalid datetime input.'))
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -42,10 +42,10 @@ from collections import Counter
|
|||||||
from datetime import datetime, time, timedelta
|
from datetime import datetime, time, timedelta
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from typing import Any, Dict, List, Union
|
from typing import Any, Dict, List, Union
|
||||||
from zoneinfo import ZoneInfo
|
|
||||||
|
|
||||||
import dateutil
|
import dateutil
|
||||||
import pycountry
|
import pycountry
|
||||||
|
import pytz
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.db import models, transaction
|
from django.db import models, transaction
|
||||||
@@ -485,7 +485,7 @@ class Order(LockModel, LoggedModel):
|
|||||||
|
|
||||||
def set_expires(self, now_dt=None, subevents=None):
|
def set_expires(self, now_dt=None, subevents=None):
|
||||||
now_dt = now_dt or now()
|
now_dt = now_dt or now()
|
||||||
tz = ZoneInfo(self.event.settings.timezone)
|
tz = pytz.timezone(self.event.settings.timezone)
|
||||||
mode = self.event.settings.get('payment_term_mode')
|
mode = self.event.settings.get('payment_term_mode')
|
||||||
if mode == 'days':
|
if mode == 'days':
|
||||||
exp_by_date = now_dt.astimezone(tz) + timedelta(days=self.event.settings.get('payment_term_days', as_type=int))
|
exp_by_date = now_dt.astimezone(tz) + timedelta(days=self.event.settings.get('payment_term_days', as_type=int))
|
||||||
@@ -856,7 +856,7 @@ class Order(LockModel, LoggedModel):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def payment_term_last(self):
|
def payment_term_last(self):
|
||||||
tz = ZoneInfo(self.event.settings.timezone)
|
tz = pytz.timezone(self.event.settings.timezone)
|
||||||
term_last = self.event.settings.get('payment_term_last', as_type=RelativeDateWrapper)
|
term_last = self.event.settings.get('payment_term_last', as_type=RelativeDateWrapper)
|
||||||
if term_last:
|
if term_last:
|
||||||
if self.event.has_subevents:
|
if self.event.has_subevents:
|
||||||
@@ -1216,7 +1216,7 @@ class QuestionAnswer(models.Model):
|
|||||||
try:
|
try:
|
||||||
d = dateutil.parser.parse(self.answer)
|
d = dateutil.parser.parse(self.answer)
|
||||||
if self.orderposition:
|
if self.orderposition:
|
||||||
tz = ZoneInfo(self.orderposition.order.event.settings.timezone)
|
tz = pytz.timezone(self.orderposition.order.event.settings.timezone)
|
||||||
d = d.astimezone(tz)
|
d = d.astimezone(tz)
|
||||||
return date_format(d, "SHORT_DATETIME_FORMAT")
|
return date_format(d, "SHORT_DATETIME_FORMAT")
|
||||||
except ValueError:
|
except ValueError:
|
||||||
|
|||||||
@@ -35,7 +35,7 @@
|
|||||||
import string
|
import string
|
||||||
from datetime import date, datetime, time
|
from datetime import date, datetime, time
|
||||||
|
|
||||||
import pytz_deprecation_shim
|
import pytz
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.mail import get_connection
|
from django.core.mail import get_connection
|
||||||
from django.core.validators import MinLengthValidator, RegexValidator
|
from django.core.validators import MinLengthValidator, RegexValidator
|
||||||
@@ -140,7 +140,7 @@ class Organizer(LoggedModel):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def timezone(self):
|
def timezone(self):
|
||||||
return pytz_deprecation_shim.timezone(self.settings.timezone)
|
return pytz.timezone(self.settings.timezone)
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def all_logentries_link(self):
|
def all_logentries_link(self):
|
||||||
|
|||||||
@@ -39,8 +39,8 @@ import logging
|
|||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
from decimal import ROUND_HALF_UP, Decimal
|
from decimal import ROUND_HALF_UP, Decimal
|
||||||
from typing import Any, Dict, Union
|
from typing import Any, Dict, Union
|
||||||
from zoneinfo import ZoneInfo
|
|
||||||
|
|
||||||
|
import pytz
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
@@ -508,7 +508,7 @@ class BasePaymentProvider:
|
|||||||
|
|
||||||
def _is_still_available(self, now_dt=None, cart_id=None, order=None):
|
def _is_still_available(self, now_dt=None, cart_id=None, order=None):
|
||||||
now_dt = now_dt or now()
|
now_dt = now_dt or now()
|
||||||
tz = ZoneInfo(self.event.settings.timezone)
|
tz = pytz.timezone(self.event.settings.timezone)
|
||||||
|
|
||||||
availability_date = self.settings.get('_availability_date', as_type=RelativeDateWrapper)
|
availability_date = self.settings.get('_availability_date', as_type=RelativeDateWrapper)
|
||||||
if availability_date:
|
if availability_date:
|
||||||
|
|||||||
+11
-11
@@ -46,7 +46,6 @@ import uuid
|
|||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
from functools import partial
|
from functools import partial
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
from zoneinfo import ZoneInfo
|
|
||||||
|
|
||||||
import jsonschema
|
import jsonschema
|
||||||
from arabic_reshaper import ArabicReshaper
|
from arabic_reshaper import ArabicReshaper
|
||||||
@@ -64,6 +63,7 @@ from django.utils.timezone import now
|
|||||||
from django.utils.translation import gettext_lazy as _, pgettext
|
from django.utils.translation import gettext_lazy as _, pgettext
|
||||||
from i18nfield.strings import LazyI18nString
|
from i18nfield.strings import LazyI18nString
|
||||||
from PyPDF2 import PdfReader
|
from PyPDF2 import PdfReader
|
||||||
|
from pytz import timezone
|
||||||
from reportlab.graphics import renderPDF
|
from reportlab.graphics import renderPDF
|
||||||
from reportlab.graphics.barcode.qr import QrCodeWidget
|
from reportlab.graphics.barcode.qr import QrCodeWidget
|
||||||
from reportlab.graphics.shapes import Drawing
|
from reportlab.graphics.shapes import Drawing
|
||||||
@@ -239,7 +239,7 @@ DEFAULT_VARIABLES = OrderedDict((
|
|||||||
"label": _("Event begin date and time"),
|
"label": _("Event begin date and time"),
|
||||||
"editor_sample": _("2017-05-31 20:00"),
|
"editor_sample": _("2017-05-31 20:00"),
|
||||||
"evaluate": lambda op, order, ev: date_format(
|
"evaluate": lambda op, order, ev: date_format(
|
||||||
ev.date_from.astimezone(ZoneInfo(ev.settings.timezone)),
|
ev.date_from.astimezone(timezone(ev.settings.timezone)),
|
||||||
"SHORT_DATETIME_FORMAT"
|
"SHORT_DATETIME_FORMAT"
|
||||||
) if ev.date_from else ""
|
) if ev.date_from else ""
|
||||||
}),
|
}),
|
||||||
@@ -247,7 +247,7 @@ DEFAULT_VARIABLES = OrderedDict((
|
|||||||
"label": _("Event begin date"),
|
"label": _("Event begin date"),
|
||||||
"editor_sample": _("2017-05-31"),
|
"editor_sample": _("2017-05-31"),
|
||||||
"evaluate": lambda op, order, ev: date_format(
|
"evaluate": lambda op, order, ev: date_format(
|
||||||
ev.date_from.astimezone(ZoneInfo(ev.settings.timezone)),
|
ev.date_from.astimezone(timezone(ev.settings.timezone)),
|
||||||
"SHORT_DATE_FORMAT"
|
"SHORT_DATE_FORMAT"
|
||||||
) if ev.date_from else ""
|
) if ev.date_from else ""
|
||||||
}),
|
}),
|
||||||
@@ -265,7 +265,7 @@ DEFAULT_VARIABLES = OrderedDict((
|
|||||||
"label": _("Event end date and time"),
|
"label": _("Event end date and time"),
|
||||||
"editor_sample": _("2017-05-31 22:00"),
|
"editor_sample": _("2017-05-31 22:00"),
|
||||||
"evaluate": lambda op, order, ev: date_format(
|
"evaluate": lambda op, order, ev: date_format(
|
||||||
ev.date_to.astimezone(ZoneInfo(ev.settings.timezone)),
|
ev.date_to.astimezone(timezone(ev.settings.timezone)),
|
||||||
"SHORT_DATETIME_FORMAT"
|
"SHORT_DATETIME_FORMAT"
|
||||||
) if ev.date_to else ""
|
) if ev.date_to else ""
|
||||||
}),
|
}),
|
||||||
@@ -273,7 +273,7 @@ DEFAULT_VARIABLES = OrderedDict((
|
|||||||
"label": _("Event end date"),
|
"label": _("Event end date"),
|
||||||
"editor_sample": _("2017-05-31"),
|
"editor_sample": _("2017-05-31"),
|
||||||
"evaluate": lambda op, order, ev: date_format(
|
"evaluate": lambda op, order, ev: date_format(
|
||||||
ev.date_to.astimezone(ZoneInfo(ev.settings.timezone)),
|
ev.date_to.astimezone(timezone(ev.settings.timezone)),
|
||||||
"SHORT_DATE_FORMAT"
|
"SHORT_DATE_FORMAT"
|
||||||
) if ev.date_to else ""
|
) if ev.date_to else ""
|
||||||
}),
|
}),
|
||||||
@@ -281,7 +281,7 @@ DEFAULT_VARIABLES = OrderedDict((
|
|||||||
"label": _("Event end time"),
|
"label": _("Event end time"),
|
||||||
"editor_sample": _("22:00"),
|
"editor_sample": _("22:00"),
|
||||||
"evaluate": lambda op, order, ev: date_format(
|
"evaluate": lambda op, order, ev: date_format(
|
||||||
ev.date_to.astimezone(ZoneInfo(ev.settings.timezone)),
|
ev.date_to.astimezone(timezone(ev.settings.timezone)),
|
||||||
"TIME_FORMAT"
|
"TIME_FORMAT"
|
||||||
) if ev.date_to else ""
|
) if ev.date_to else ""
|
||||||
}),
|
}),
|
||||||
@@ -294,7 +294,7 @@ DEFAULT_VARIABLES = OrderedDict((
|
|||||||
"label": _("Event admission date and time"),
|
"label": _("Event admission date and time"),
|
||||||
"editor_sample": _("2017-05-31 19:00"),
|
"editor_sample": _("2017-05-31 19:00"),
|
||||||
"evaluate": lambda op, order, ev: date_format(
|
"evaluate": lambda op, order, ev: date_format(
|
||||||
ev.date_admission.astimezone(ZoneInfo(ev.settings.timezone)),
|
ev.date_admission.astimezone(timezone(ev.settings.timezone)),
|
||||||
"SHORT_DATETIME_FORMAT"
|
"SHORT_DATETIME_FORMAT"
|
||||||
) if ev.date_admission else ""
|
) if ev.date_admission else ""
|
||||||
}),
|
}),
|
||||||
@@ -302,7 +302,7 @@ DEFAULT_VARIABLES = OrderedDict((
|
|||||||
"label": _("Event admission time"),
|
"label": _("Event admission time"),
|
||||||
"editor_sample": _("19:00"),
|
"editor_sample": _("19:00"),
|
||||||
"evaluate": lambda op, order, ev: date_format(
|
"evaluate": lambda op, order, ev: date_format(
|
||||||
ev.date_admission.astimezone(ZoneInfo(ev.settings.timezone)),
|
ev.date_admission.astimezone(timezone(ev.settings.timezone)),
|
||||||
"TIME_FORMAT"
|
"TIME_FORMAT"
|
||||||
) if ev.date_admission else ""
|
) if ev.date_admission else ""
|
||||||
}),
|
}),
|
||||||
@@ -387,7 +387,7 @@ DEFAULT_VARIABLES = OrderedDict((
|
|||||||
"label": _("Printing date"),
|
"label": _("Printing date"),
|
||||||
"editor_sample": _("2017-05-31"),
|
"editor_sample": _("2017-05-31"),
|
||||||
"evaluate": lambda op, order, ev: date_format(
|
"evaluate": lambda op, order, ev: date_format(
|
||||||
now().astimezone(ZoneInfo(ev.settings.timezone)),
|
now().astimezone(timezone(ev.settings.timezone)),
|
||||||
"SHORT_DATE_FORMAT"
|
"SHORT_DATE_FORMAT"
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
@@ -395,7 +395,7 @@ DEFAULT_VARIABLES = OrderedDict((
|
|||||||
"label": _("Printing date and time"),
|
"label": _("Printing date and time"),
|
||||||
"editor_sample": _("2017-05-31 19:00"),
|
"editor_sample": _("2017-05-31 19:00"),
|
||||||
"evaluate": lambda op, order, ev: date_format(
|
"evaluate": lambda op, order, ev: date_format(
|
||||||
now().astimezone(ZoneInfo(ev.settings.timezone)),
|
now().astimezone(timezone(ev.settings.timezone)),
|
||||||
"SHORT_DATETIME_FORMAT"
|
"SHORT_DATETIME_FORMAT"
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
@@ -403,7 +403,7 @@ DEFAULT_VARIABLES = OrderedDict((
|
|||||||
"label": _("Printing time"),
|
"label": _("Printing time"),
|
||||||
"editor_sample": _("19:00"),
|
"editor_sample": _("19:00"),
|
||||||
"evaluate": lambda op, order, ev: date_format(
|
"evaluate": lambda op, order, ev: date_format(
|
||||||
now().astimezone(ZoneInfo(ev.settings.timezone)),
|
now().astimezone(timezone(ev.settings.timezone)),
|
||||||
"TIME_FORMAT"
|
"TIME_FORMAT"
|
||||||
) if ev.date_admission else ""
|
) if ev.date_admission else ""
|
||||||
}),
|
}),
|
||||||
|
|||||||
@@ -22,8 +22,8 @@
|
|||||||
import datetime
|
import datetime
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
from typing import Union
|
from typing import Union
|
||||||
from zoneinfo import ZoneInfo
|
|
||||||
|
|
||||||
|
import pytz
|
||||||
from dateutil import parser
|
from dateutil import parser
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
@@ -67,7 +67,7 @@ class RelativeDateWrapper:
|
|||||||
if self.data.minutes_before is not None:
|
if self.data.minutes_before is not None:
|
||||||
raise ValueError('A minute-based relative datetime can not be used as a date')
|
raise ValueError('A minute-based relative datetime can not be used as a date')
|
||||||
|
|
||||||
tz = ZoneInfo(event.settings.timezone)
|
tz = pytz.timezone(event.settings.timezone)
|
||||||
if isinstance(event, SubEvent):
|
if isinstance(event, SubEvent):
|
||||||
base_date = (
|
base_date = (
|
||||||
getattr(event, self.data.base_date_name)
|
getattr(event, self.data.base_date_name)
|
||||||
@@ -86,7 +86,7 @@ class RelativeDateWrapper:
|
|||||||
if isinstance(self.data, (datetime.datetime, datetime.date)):
|
if isinstance(self.data, (datetime.datetime, datetime.date)):
|
||||||
return self.data
|
return self.data
|
||||||
else:
|
else:
|
||||||
tz = ZoneInfo(event.settings.timezone)
|
tz = pytz.timezone(event.settings.timezone)
|
||||||
if isinstance(event, SubEvent):
|
if isinstance(event, SubEvent):
|
||||||
base_date = (
|
base_date = (
|
||||||
getattr(event, self.data.base_date_name)
|
getattr(event, self.data.base_date_name)
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
# License for the specific language governing permissions and limitations under the License.
|
# License for the specific language governing permissions and limitations under the License.
|
||||||
import os
|
import os
|
||||||
from datetime import datetime, timedelta, timezone
|
from datetime import datetime, timedelta
|
||||||
from functools import partial, reduce
|
from functools import partial, reduce
|
||||||
|
|
||||||
import dateutil
|
import dateutil
|
||||||
@@ -439,7 +439,7 @@ class SQLLogic:
|
|||||||
|
|
||||||
if operator == 'buildTime':
|
if operator == 'buildTime':
|
||||||
if values[0] == "custom":
|
if values[0] == "custom":
|
||||||
return Value(dateutil.parser.parse(values[1]).astimezone(timezone.utc))
|
return Value(dateutil.parser.parse(values[1]).astimezone(pytz.UTC))
|
||||||
elif values[0] == "customtime":
|
elif values[0] == "customtime":
|
||||||
parsed = dateutil.parser.parse(values[1])
|
parsed = dateutil.parser.parse(values[1])
|
||||||
return Value(now().astimezone(self.list.event.timezone).replace(
|
return Value(now().astimezone(self.list.event.timezone).replace(
|
||||||
@@ -447,7 +447,7 @@ class SQLLogic:
|
|||||||
minute=parsed.minute,
|
minute=parsed.minute,
|
||||||
second=parsed.second,
|
second=parsed.second,
|
||||||
microsecond=parsed.microsecond,
|
microsecond=parsed.microsecond,
|
||||||
).astimezone(timezone.utc))
|
).astimezone(pytz.UTC))
|
||||||
elif values[0] == 'date_from':
|
elif values[0] == 'date_from':
|
||||||
return Coalesce(
|
return Coalesce(
|
||||||
F('subevent__date_from'),
|
F('subevent__date_from'),
|
||||||
@@ -475,7 +475,7 @@ class SQLLogic:
|
|||||||
return int(values[1])
|
return int(values[1])
|
||||||
elif operator == 'var':
|
elif operator == 'var':
|
||||||
if values[0] == 'now':
|
if values[0] == 'now':
|
||||||
return Value(now().astimezone(timezone.utc))
|
return Value(now().astimezone(pytz.UTC))
|
||||||
elif values[0] == 'now_isoweekday':
|
elif values[0] == 'now_isoweekday':
|
||||||
return Value(now().astimezone(self.list.event.timezone).isoweekday())
|
return Value(now().astimezone(self.list.event.timezone).isoweekday())
|
||||||
elif values[0] == 'product':
|
elif values[0] == 'product':
|
||||||
|
|||||||
@@ -45,8 +45,8 @@ from email.mime.image import MIMEImage
|
|||||||
from email.utils import formataddr
|
from email.utils import formataddr
|
||||||
from typing import Any, Dict, List, Sequence, Union
|
from typing import Any, Dict, List, Sequence, Union
|
||||||
from urllib.parse import urljoin, urlparse
|
from urllib.parse import urljoin, urlparse
|
||||||
from zoneinfo import ZoneInfo
|
|
||||||
|
|
||||||
|
import pytz
|
||||||
import requests
|
import requests
|
||||||
from bs4 import BeautifulSoup
|
from bs4 import BeautifulSoup
|
||||||
from celery import chain
|
from celery import chain
|
||||||
@@ -218,11 +218,11 @@ def mail(email: Union[str, Sequence[str]], subject: str, template: Union[str, La
|
|||||||
if event:
|
if event:
|
||||||
timezone = event.timezone
|
timezone = event.timezone
|
||||||
elif user:
|
elif user:
|
||||||
timezone = ZoneInfo(user.timezone)
|
timezone = pytz.timezone(user.timezone)
|
||||||
elif organizer:
|
elif organizer:
|
||||||
timezone = organizer.timezone
|
timezone = organizer.timezone
|
||||||
else:
|
else:
|
||||||
timezone = ZoneInfo(settings.TIME_ZONE)
|
timezone = pytz.timezone(settings.TIME_ZONE)
|
||||||
|
|
||||||
if settings_holder:
|
if settings_holder:
|
||||||
if settings_holder.settings.mail_bcc:
|
if settings_holder.settings.mail_bcc:
|
||||||
|
|||||||
@@ -20,10 +20,11 @@
|
|||||||
# <https://www.gnu.org/licenses/>.
|
# <https://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
import calendar
|
import calendar
|
||||||
from datetime import date, datetime, time, timedelta, timezone
|
from datetime import date, datetime, time, timedelta
|
||||||
from itertools import groupby
|
from itertools import groupby
|
||||||
from typing import Optional, Tuple
|
from typing import Optional, Tuple
|
||||||
|
|
||||||
|
import pytz
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.utils.formats import date_format
|
from django.utils.formats import date_format
|
||||||
@@ -389,7 +390,7 @@ class SerializerDateFrameField(serializers.CharField):
|
|||||||
if data is None:
|
if data is None:
|
||||||
return None
|
return None
|
||||||
try:
|
try:
|
||||||
resolve_timeframe_to_dates_inclusive(now(), data, timezone.utc)
|
resolve_timeframe_to_dates_inclusive(now(), data, pytz.UTC)
|
||||||
except:
|
except:
|
||||||
raise ValidationError("Invalid date frame")
|
raise ValidationError("Invalid date frame")
|
||||||
|
|
||||||
|
|||||||
@@ -21,9 +21,9 @@
|
|||||||
#
|
#
|
||||||
import logging
|
import logging
|
||||||
from importlib import import_module
|
from importlib import import_module
|
||||||
from zoneinfo import ZoneInfo
|
|
||||||
|
|
||||||
import celery.exceptions
|
import celery.exceptions
|
||||||
|
import pytz
|
||||||
from celery import states
|
from celery import states
|
||||||
from celery.result import AsyncResult
|
from celery.result import AsyncResult
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
@@ -252,7 +252,7 @@ class AsyncFormView(AsyncMixin, FormView):
|
|||||||
task_self = self
|
task_self = self
|
||||||
view_instance._task_self = task_self
|
view_instance._task_self = task_self
|
||||||
|
|
||||||
with translation.override(locale), timezone.override(ZoneInfo(tz)):
|
with translation.override(locale), timezone.override(pytz.timezone(tz)):
|
||||||
form_class = view_instance.get_form_class()
|
form_class = view_instance.get_form_class()
|
||||||
if form_kwargs.get('instance'):
|
if form_kwargs.get('instance'):
|
||||||
form_kwargs['instance'] = cls.model.objects.get(pk=form_kwargs['instance'])
|
form_kwargs['instance'] = cls.model.objects.get(pk=form_kwargs['instance'])
|
||||||
@@ -377,7 +377,7 @@ class AsyncPostView(AsyncMixin, View):
|
|||||||
task_self = self
|
task_self = self
|
||||||
view_instance._task_self = task_self
|
view_instance._task_self = task_self
|
||||||
|
|
||||||
with translation.override(locale), timezone.override(ZoneInfo(tz)):
|
with translation.override(locale), timezone.override(pytz.timezone(tz)):
|
||||||
return view_instance.async_post(view_instance.request, *url_args, **url_kwargs)
|
return view_instance.async_post(view_instance.request, *url_args, **url_kwargs)
|
||||||
|
|
||||||
cls.async_execute = app.task(
|
cls.async_execute = app.task(
|
||||||
|
|||||||
@@ -36,7 +36,6 @@
|
|||||||
|
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from urllib.parse import urlencode, urlparse
|
from urllib.parse import urlencode, urlparse
|
||||||
from zoneinfo import ZoneInfo
|
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
@@ -56,7 +55,7 @@ from django_countries.fields import LazyTypedChoiceField
|
|||||||
from i18nfield.forms import (
|
from i18nfield.forms import (
|
||||||
I18nForm, I18nFormField, I18nFormSetMixin, I18nTextarea, I18nTextInput,
|
I18nForm, I18nFormField, I18nFormSetMixin, I18nTextarea, I18nTextInput,
|
||||||
)
|
)
|
||||||
from pytz import common_timezones
|
from pytz import common_timezones, timezone
|
||||||
|
|
||||||
from pretix.base.channels import get_all_sales_channels
|
from pretix.base.channels import get_all_sales_channels
|
||||||
from pretix.base.email import get_available_placeholders
|
from pretix.base.email import get_available_placeholders
|
||||||
@@ -222,7 +221,7 @@ class EventWizardBasicsForm(I18nModelForm):
|
|||||||
})
|
})
|
||||||
|
|
||||||
# change timezone
|
# change timezone
|
||||||
zone = ZoneInfo(data.get('timezone'))
|
zone = timezone(data.get('timezone'))
|
||||||
data['date_from'] = self.reset_timezone(zone, data.get('date_from'))
|
data['date_from'] = self.reset_timezone(zone, data.get('date_from'))
|
||||||
data['date_to'] = self.reset_timezone(zone, data.get('date_to'))
|
data['date_to'] = self.reset_timezone(zone, data.get('date_to'))
|
||||||
data['presale_start'] = self.reset_timezone(zone, data.get('presale_start'))
|
data['presale_start'] = self.reset_timezone(zone, data.get('presale_start'))
|
||||||
@@ -231,7 +230,7 @@ class EventWizardBasicsForm(I18nModelForm):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def reset_timezone(tz, dt):
|
def reset_timezone(tz, dt):
|
||||||
return dt.replace(tzinfo=tz) if dt is not None else None
|
return tz.localize(dt.replace(tzinfo=None)) if dt is not None else None
|
||||||
|
|
||||||
def clean_slug(self):
|
def clean_slug(self):
|
||||||
slug = self.cleaned_data['slug']
|
slug = self.cleaned_data['slug']
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ from decimal import Decimal
|
|||||||
|
|
||||||
import bleach
|
import bleach
|
||||||
import dateutil.parser
|
import dateutil.parser
|
||||||
|
import pytz
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.formats import date_format
|
from django.utils.formats import date_format
|
||||||
@@ -189,7 +190,7 @@ def _display_checkin(event, logentry):
|
|||||||
if 'datetime' in data:
|
if 'datetime' in data:
|
||||||
dt = dateutil.parser.parse(data.get('datetime'))
|
dt = dateutil.parser.parse(data.get('datetime'))
|
||||||
show_dt = abs((logentry.datetime - dt).total_seconds()) > 5 or 'forced' in data
|
show_dt = abs((logentry.datetime - dt).total_seconds()) > 5 or 'forced' in data
|
||||||
tz = event.timezone
|
tz = pytz.timezone(event.settings.timezone)
|
||||||
dt_formatted = date_format(dt.astimezone(tz), "SHORT_DATETIME_FORMAT")
|
dt_formatted = date_format(dt.astimezone(tz), "SHORT_DATETIME_FORMAT")
|
||||||
|
|
||||||
if 'list' in data:
|
if 'list' in data:
|
||||||
@@ -581,7 +582,7 @@ def pretixcontrol_logentry_display(sender: Event, logentry: LogEntry, **kwargs):
|
|||||||
if logentry.action_type == 'pretix.control.views.checkin':
|
if logentry.action_type == 'pretix.control.views.checkin':
|
||||||
# deprecated
|
# deprecated
|
||||||
dt = dateutil.parser.parse(data.get('datetime'))
|
dt = dateutil.parser.parse(data.get('datetime'))
|
||||||
tz = sender.timezone
|
tz = pytz.timezone(sender.settings.timezone)
|
||||||
dt_formatted = date_format(dt.astimezone(tz), "SHORT_DATETIME_FORMAT")
|
dt_formatted = date_format(dt.astimezone(tz), "SHORT_DATETIME_FORMAT")
|
||||||
if 'list' in data:
|
if 'list' in data:
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -19,7 +19,18 @@
|
|||||||
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
|
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
|
||||||
# <https://www.gnu.org/licenses/>.
|
# <https://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
from datetime import timezone
|
|
||||||
|
# This file is based on an earlier version of pretix which was released under the Apache License 2.0. The full text of
|
||||||
|
# the Apache License 2.0 can be obtained at <http://www.apache.org/licenses/LICENSE-2.0>.
|
||||||
|
#
|
||||||
|
# This file may have since been changed and any changes are released under the terms of AGPLv3 as described above. A
|
||||||
|
# full history of changes and contributors is available at <https://github.com/pretix/pretix>.
|
||||||
|
#
|
||||||
|
# This file contains Apache-licensed contributions copyrighted by: Jakob Schnell, jasonwaiting@live.hk, pajowu
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software distributed under the Apache License 2.0 is
|
||||||
|
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations under the License.
|
||||||
|
|
||||||
import dateutil.parser
|
import dateutil.parser
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
@@ -33,6 +44,7 @@ from django.utils.functional import cached_property
|
|||||||
from django.utils.timezone import is_aware, make_aware, now
|
from django.utils.timezone import is_aware, make_aware, now
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django.views.generic import ListView
|
from django.views.generic import ListView
|
||||||
|
from pytz import UTC
|
||||||
|
|
||||||
from pretix.base.channels import get_all_sales_channels
|
from pretix.base.channels import get_all_sales_channels
|
||||||
from pretix.base.models import Checkin, Order, OrderPosition
|
from pretix.base.models import Checkin, Order, OrderPosition
|
||||||
@@ -48,18 +60,6 @@ from pretix.control.views import CreateView, PaginationMixin, UpdateView
|
|||||||
from pretix.helpers.compat import CompatDeleteView
|
from pretix.helpers.compat import CompatDeleteView
|
||||||
from pretix.helpers.models import modelcopy
|
from pretix.helpers.models import modelcopy
|
||||||
|
|
||||||
# This file is based on an earlier version of pretix which was released under the Apache License 2.0. The full text of
|
|
||||||
# the Apache License 2.0 can be obtained at <http://www.apache.org/licenses/LICENSE-2.0>.
|
|
||||||
#
|
|
||||||
# This file may have since been changed and any changes are released under the terms of AGPLv3 as described above. A
|
|
||||||
# full history of changes and contributors is available at <https://github.com/pretix/pretix>.
|
|
||||||
#
|
|
||||||
# This file contains Apache-licensed contributions copyrighted by: Jakob Schnell, jasonwaiting@live.hk, pajowu
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software distributed under the Apache License 2.0 is
|
|
||||||
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
# License for the specific language governing permissions and limitations under the License.
|
|
||||||
|
|
||||||
|
|
||||||
class CheckInListQueryMixin:
|
class CheckInListQueryMixin:
|
||||||
|
|
||||||
@@ -156,20 +156,20 @@ class CheckInListShow(EventPermissionRequiredMixin, PaginationMixin, CheckInList
|
|||||||
if e.last_entry:
|
if e.last_entry:
|
||||||
if isinstance(e.last_entry, str):
|
if isinstance(e.last_entry, str):
|
||||||
# Apparently only happens on SQLite
|
# Apparently only happens on SQLite
|
||||||
e.last_entry_aware = make_aware(dateutil.parser.parse(e.last_entry), timezone.utc)
|
e.last_entry_aware = make_aware(dateutil.parser.parse(e.last_entry), UTC)
|
||||||
elif not is_aware(e.last_entry):
|
elif not is_aware(e.last_entry):
|
||||||
# Apparently only happens on MySQL
|
# Apparently only happens on MySQL
|
||||||
e.last_entry_aware = make_aware(e.last_entry, timezone.utc)
|
e.last_entry_aware = make_aware(e.last_entry, UTC)
|
||||||
else:
|
else:
|
||||||
# This would be correct, so guess on which database it works… Yes, it's PostgreSQL.
|
# This would be correct, so guess on which database it works… Yes, it's PostgreSQL.
|
||||||
e.last_entry_aware = e.last_entry
|
e.last_entry_aware = e.last_entry
|
||||||
if e.last_exit:
|
if e.last_exit:
|
||||||
if isinstance(e.last_exit, str):
|
if isinstance(e.last_exit, str):
|
||||||
# Apparently only happens on SQLite
|
# Apparently only happens on SQLite
|
||||||
e.last_exit_aware = make_aware(dateutil.parser.parse(e.last_exit), timezone.utc)
|
e.last_exit_aware = make_aware(dateutil.parser.parse(e.last_exit), UTC)
|
||||||
elif not is_aware(e.last_exit):
|
elif not is_aware(e.last_exit):
|
||||||
# Apparently only happens on MySQL
|
# Apparently only happens on MySQL
|
||||||
e.last_exit_aware = make_aware(e.last_exit, timezone.utc)
|
e.last_exit_aware = make_aware(e.last_exit, UTC)
|
||||||
else:
|
else:
|
||||||
# This would be correct, so guess on which database it works… Yes, it's PostgreSQL.
|
# This would be correct, so guess on which database it works… Yes, it's PostgreSQL.
|
||||||
e.last_exit_aware = e.last_exit
|
e.last_exit_aware = e.last_exit
|
||||||
|
|||||||
@@ -34,8 +34,8 @@
|
|||||||
|
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from zoneinfo import ZoneInfo
|
|
||||||
|
|
||||||
|
import pytz
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.contenttypes.models import ContentType
|
from django.contrib.contenttypes.models import ContentType
|
||||||
from django.db.models import (
|
from django.db.models import (
|
||||||
@@ -510,7 +510,7 @@ def widgets_for_event_qs(request, qs, user, nmax, lazy=False):
|
|||||||
for event in events:
|
for event in events:
|
||||||
if not lazy:
|
if not lazy:
|
||||||
tzname = event.cache.get_or_set('timezone', lambda: event.settings.timezone)
|
tzname = event.cache.get_or_set('timezone', lambda: event.settings.timezone)
|
||||||
tz = ZoneInfo(tzname)
|
tz = pytz.timezone(tzname)
|
||||||
if event.has_subevents:
|
if event.has_subevents:
|
||||||
if event.min_from is None:
|
if event.min_from is None:
|
||||||
dr = pgettext("subevent", "No dates")
|
dr = pgettext("subevent", "No dates")
|
||||||
|
|||||||
@@ -40,7 +40,6 @@ from collections import OrderedDict
|
|||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from itertools import groupby
|
from itertools import groupby
|
||||||
from urllib.parse import urlsplit
|
from urllib.parse import urlsplit
|
||||||
from zoneinfo import ZoneInfo
|
|
||||||
|
|
||||||
import bleach
|
import bleach
|
||||||
from django.apps import apps
|
from django.apps import apps
|
||||||
@@ -65,6 +64,7 @@ from django.views.generic.base import TemplateView, View
|
|||||||
from django.views.generic.detail import SingleObjectMixin
|
from django.views.generic.detail import SingleObjectMixin
|
||||||
from i18nfield.strings import LazyI18nString
|
from i18nfield.strings import LazyI18nString
|
||||||
from i18nfield.utils import I18nJSONEncoder
|
from i18nfield.utils import I18nJSONEncoder
|
||||||
|
from pytz import timezone
|
||||||
|
|
||||||
from pretix.base.channels import get_all_sales_channels
|
from pretix.base.channels import get_all_sales_channels
|
||||||
from pretix.base.email import get_available_placeholders
|
from pretix.base.email import get_available_placeholders
|
||||||
@@ -250,7 +250,7 @@ class EventUpdate(DecoupleMixin, EventSettingsViewMixin, EventPermissionRequired
|
|||||||
self.item_meta_property_formset.is_valid() and self.confirm_texts_formset.is_valid() and \
|
self.item_meta_property_formset.is_valid() and self.confirm_texts_formset.is_valid() and \
|
||||||
self.footer_links_formset.is_valid():
|
self.footer_links_formset.is_valid():
|
||||||
# reset timezone
|
# reset timezone
|
||||||
zone = ZoneInfo(self.sform.cleaned_data['timezone'])
|
zone = timezone(self.sform.cleaned_data['timezone'])
|
||||||
event = form.instance
|
event = form.instance
|
||||||
event.date_from = self.reset_timezone(zone, event.date_from)
|
event.date_from = self.reset_timezone(zone, event.date_from)
|
||||||
event.date_to = self.reset_timezone(zone, event.date_to)
|
event.date_to = self.reset_timezone(zone, event.date_to)
|
||||||
@@ -263,7 +263,7 @@ class EventUpdate(DecoupleMixin, EventSettingsViewMixin, EventPermissionRequired
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def reset_timezone(tz, dt):
|
def reset_timezone(tz, dt):
|
||||||
return dt.replace(tzinfo=tz) if dt is not None else None
|
return tz.localize(dt.replace(tzinfo=None)) if dt is not None else None
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def item_meta_property_formset(self):
|
def item_meta_property_formset(self):
|
||||||
|
|||||||
@@ -33,8 +33,8 @@
|
|||||||
# License for the specific language governing permissions and limitations under the License.
|
# License for the specific language governing permissions and limitations under the License.
|
||||||
|
|
||||||
from datetime import datetime, time
|
from datetime import datetime, time
|
||||||
from zoneinfo import ZoneInfo
|
|
||||||
|
|
||||||
|
import pytz
|
||||||
from dateutil.parser import parse
|
from dateutil.parser import parse
|
||||||
from django.core.exceptions import PermissionDenied
|
from django.core.exceptions import PermissionDenied
|
||||||
from django.db.models import F, Max, Min, Q
|
from django.db.models import F, Max, Min, Q
|
||||||
@@ -87,7 +87,7 @@ def serialize_event(e):
|
|||||||
if e.min_from is None:
|
if e.min_from is None:
|
||||||
dr = pgettext('subevent', 'No dates')
|
dr = pgettext('subevent', 'No dates')
|
||||||
else:
|
else:
|
||||||
tz = ZoneInfo(e.settings.timezone)
|
tz = pytz.timezone(e.settings.timezone)
|
||||||
dr = _('Series:') + ' ' + daterange(
|
dr = _('Series:') + ' ' + daterange(
|
||||||
e.min_from.astimezone(tz),
|
e.min_from.astimezone(tz),
|
||||||
(e.max_fromto or e.max_to or e.max_from).astimezone(tz)
|
(e.max_fromto or e.max_to or e.max_from).astimezone(tz)
|
||||||
|
|||||||
@@ -33,7 +33,6 @@
|
|||||||
# License for the specific language governing permissions and limitations under the License.
|
# License for the specific language governing permissions and limitations under the License.
|
||||||
|
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
from datetime import timezone
|
|
||||||
|
|
||||||
import bleach
|
import bleach
|
||||||
import dateutil.parser
|
import dateutil.parser
|
||||||
@@ -48,6 +47,7 @@ from django.utils.timezone import is_aware, make_aware, now
|
|||||||
from django.utils.translation import (
|
from django.utils.translation import (
|
||||||
gettext as _, gettext_lazy, pgettext, pgettext_lazy,
|
gettext as _, gettext_lazy, pgettext, pgettext_lazy,
|
||||||
)
|
)
|
||||||
|
from pytz import UTC
|
||||||
from reportlab.lib.units import mm
|
from reportlab.lib.units import mm
|
||||||
from reportlab.platypus import Flowable, Paragraph, Spacer, Table, TableStyle
|
from reportlab.platypus import Flowable, Paragraph, Spacer, Table, TableStyle
|
||||||
|
|
||||||
@@ -493,7 +493,7 @@ class CSVCheckinList(CheckInListMixin, ListExporter):
|
|||||||
elif op.last_checked_in:
|
elif op.last_checked_in:
|
||||||
last_checked_in = op.last_checked_in
|
last_checked_in = op.last_checked_in
|
||||||
if last_checked_in and not is_aware(last_checked_in):
|
if last_checked_in and not is_aware(last_checked_in):
|
||||||
last_checked_in = make_aware(last_checked_in, timezone.utc)
|
last_checked_in = make_aware(last_checked_in, UTC)
|
||||||
|
|
||||||
last_checked_out = None
|
last_checked_out = None
|
||||||
if isinstance(op.last_checked_out, str): # SQLite
|
if isinstance(op.last_checked_out, str): # SQLite
|
||||||
@@ -501,7 +501,7 @@ class CSVCheckinList(CheckInListMixin, ListExporter):
|
|||||||
elif op.last_checked_out:
|
elif op.last_checked_out:
|
||||||
last_checked_out = op.last_checked_out
|
last_checked_out = op.last_checked_out
|
||||||
if last_checked_out and not is_aware(last_checked_out):
|
if last_checked_out and not is_aware(last_checked_out):
|
||||||
last_checked_out = make_aware(last_checked_out, timezone.utc)
|
last_checked_out = make_aware(last_checked_out, UTC)
|
||||||
|
|
||||||
row = [
|
row = [
|
||||||
op.order.code,
|
op.order.code,
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ import tempfile
|
|||||||
from collections import OrderedDict, defaultdict
|
from collections import OrderedDict, defaultdict
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
|
|
||||||
|
import pytz
|
||||||
from dateutil.parser import parse
|
from dateutil.parser import parse
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
@@ -82,7 +83,7 @@ class ReportlabExportMixin:
|
|||||||
return 'report-%s.pdf' % self.event.slug, 'application/pdf', self.create(form_data)
|
return 'report-%s.pdf' % self.event.slug, 'application/pdf', self.create(form_data)
|
||||||
|
|
||||||
def get_filename(self):
|
def get_filename(self):
|
||||||
tz = self.event.timezone
|
tz = pytz.timezone(self.event.settings.timezone)
|
||||||
return "%s-%s.pdf" % (self.name, now().astimezone(tz).strftime("%Y-%m-%d-%H-%M-%S"))
|
return "%s-%s.pdf" % (self.name, now().astimezone(tz).strftime("%Y-%m-%d-%H-%M-%S"))
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@@ -443,7 +444,7 @@ class OrderTaxListReportPDF(Report):
|
|||||||
headlinestyle = self.get_style()
|
headlinestyle = self.get_style()
|
||||||
headlinestyle.fontSize = 15
|
headlinestyle.fontSize = 15
|
||||||
headlinestyle.fontName = 'OpenSansBd'
|
headlinestyle.fontName = 'OpenSansBd'
|
||||||
tz = self.event.timezone
|
tz = pytz.timezone(self.event.settings.timezone)
|
||||||
|
|
||||||
tax_rates = set(
|
tax_rates = set(
|
||||||
a for a
|
a for a
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
import datetime
|
import datetime
|
||||||
from urllib.parse import urlparse
|
from urllib.parse import urlparse
|
||||||
|
|
||||||
|
import pytz
|
||||||
import vobject
|
import vobject
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.utils.formats import date_format
|
from django.utils.formats import date_format
|
||||||
@@ -40,11 +41,11 @@ def get_public_ical(events):
|
|||||||
"""
|
"""
|
||||||
cal = vobject.iCalendar()
|
cal = vobject.iCalendar()
|
||||||
cal.add('prodid').value = '-//pretix//{}//'.format(settings.PRETIX_INSTANCE_NAME.replace(" ", "_"))
|
cal.add('prodid').value = '-//pretix//{}//'.format(settings.PRETIX_INSTANCE_NAME.replace(" ", "_"))
|
||||||
creation_time = datetime.datetime.now(datetime.timezone.utc)
|
creation_time = datetime.datetime.now(pytz.utc)
|
||||||
|
|
||||||
for ev in events:
|
for ev in events:
|
||||||
event = ev if isinstance(ev, Event) else ev.event
|
event = ev if isinstance(ev, Event) else ev.event
|
||||||
tz = event.timezone
|
tz = pytz.timezone(event.settings.timezone)
|
||||||
if isinstance(ev, Event):
|
if isinstance(ev, Event):
|
||||||
url = build_absolute_uri(event, 'presale:event.index')
|
url = build_absolute_uri(event, 'presale:event.index')
|
||||||
else:
|
else:
|
||||||
@@ -112,9 +113,9 @@ def get_private_icals(event, positions):
|
|||||||
- It would be pretty hard to implement it in a way that doesn't require us to use distinct
|
- It would be pretty hard to implement it in a way that doesn't require us to use distinct
|
||||||
settings fields for emails to customers and to attendees, which feels like an overcomplication.
|
settings fields for emails to customers and to attendees, which feels like an overcomplication.
|
||||||
"""
|
"""
|
||||||
tz = event.timezone
|
tz = pytz.timezone(event.settings.timezone)
|
||||||
|
|
||||||
creation_time = datetime.datetime.now(datetime.timezone.utc)
|
creation_time = datetime.datetime.now(pytz.utc)
|
||||||
calobjects = []
|
calobjects = []
|
||||||
|
|
||||||
evs = set(p.subevent or event for p in positions)
|
evs = set(p.subevent or event for p in positions)
|
||||||
|
|||||||
@@ -38,10 +38,10 @@ from collections import defaultdict
|
|||||||
from datetime import date, datetime, time, timedelta
|
from datetime import date, datetime, time, timedelta
|
||||||
from functools import reduce
|
from functools import reduce
|
||||||
from urllib.parse import quote, urlencode
|
from urllib.parse import quote, urlencode
|
||||||
from zoneinfo import ZoneInfo
|
|
||||||
|
|
||||||
import dateutil
|
import dateutil
|
||||||
import isoweek
|
import isoweek
|
||||||
|
import pytz
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.cache import caches
|
from django.core.cache import caches
|
||||||
from django.db.models import Exists, Max, Min, OuterRef, Prefetch, Q
|
from django.db.models import Exists, Max, Min, OuterRef, Prefetch, Q
|
||||||
@@ -392,7 +392,7 @@ class OrganizerIndex(OrganizerViewMixin, EventListMixin, ListView):
|
|||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
ctx = super().get_context_data(**kwargs)
|
ctx = super().get_context_data(**kwargs)
|
||||||
for event in ctx['events']:
|
for event in ctx['events']:
|
||||||
event.tzname = ZoneInfo(event.cache.get_or_set('timezone', lambda: event.settings.timezone))
|
event.tzname = pytz.timezone(event.cache.get_or_set('timezone', lambda: event.settings.timezone))
|
||||||
if event.has_subevents:
|
if event.has_subevents:
|
||||||
event.daterange = daterange(
|
event.daterange = daterange(
|
||||||
event.min_from.astimezone(event.tzname),
|
event.min_from.astimezone(event.tzname),
|
||||||
@@ -508,7 +508,7 @@ def add_subevents_for_days(qs, before, after, ebd, timezones, event=None, cart_n
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
timezones.add(s.timezone)
|
timezones.add(s.timezone)
|
||||||
tz = ZoneInfo(s.timezone)
|
tz = pytz.timezone(s.timezone)
|
||||||
datetime_from = se.date_from.astimezone(tz)
|
datetime_from = se.date_from.astimezone(tz)
|
||||||
date_from = datetime_from.date()
|
date_from = datetime_from.date()
|
||||||
if s.show_date_to and se.date_to:
|
if s.show_date_to and se.date_to:
|
||||||
|
|||||||
@@ -26,9 +26,9 @@ import logging
|
|||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from datetime import date, datetime, timedelta
|
from datetime import date, datetime, timedelta
|
||||||
from urllib.parse import urljoin
|
from urllib.parse import urljoin
|
||||||
from zoneinfo import ZoneInfo
|
|
||||||
|
|
||||||
import isoweek
|
import isoweek
|
||||||
|
import pytz
|
||||||
from compressor.filters.jsmin import rJSMinFilter
|
from compressor.filters.jsmin import rJSMinFilter
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.staticfiles import finders
|
from django.contrib.staticfiles import finders
|
||||||
@@ -427,7 +427,7 @@ class WidgetAPIProductList(EventListMixin, View):
|
|||||||
event = ev.event
|
event = ev.event
|
||||||
else:
|
else:
|
||||||
event = ev
|
event = ev
|
||||||
tz = ZoneInfo(e['timezone'])
|
tz = pytz.timezone(e['timezone'])
|
||||||
time = date_format(ev.date_from.astimezone(tz), 'TIME_FORMAT') if e.get('time') and event.settings.show_times else None
|
time = date_format(ev.date_from.astimezone(tz), 'TIME_FORMAT') if e.get('time') and event.settings.show_times else None
|
||||||
if time and ev.date_to and ev.date_from.astimezone(tz).date() == ev.date_to.astimezone(tz).date() and event.settings.show_date_to:
|
if time and ev.date_to and ev.date_from.astimezone(tz).date() == ev.date_to.astimezone(tz).date() and event.settings.show_date_to:
|
||||||
time += ' – ' + date_format(ev.date_to.astimezone(tz), 'TIME_FORMAT')
|
time += ' – ' + date_format(ev.date_to.astimezone(tz), 'TIME_FORMAT')
|
||||||
@@ -607,7 +607,7 @@ class WidgetAPIProductList(EventListMixin, View):
|
|||||||
data['events'] = []
|
data['events'] = []
|
||||||
qs = self._get_event_queryset()
|
qs = self._get_event_queryset()
|
||||||
for event in qs:
|
for event in qs:
|
||||||
tz = ZoneInfo(event.cache.get_or_set('timezone', lambda: event.settings.timezone))
|
tz = pytz.timezone(event.cache.get_or_set('timezone', lambda: event.settings.timezone))
|
||||||
if event.has_subevents:
|
if event.has_subevents:
|
||||||
dr = daterange(
|
dr = daterange(
|
||||||
event.min_from.astimezone(tz),
|
event.min_from.astimezone(tz),
|
||||||
|
|||||||
@@ -217,7 +217,6 @@ setup(
|
|||||||
'python-dateutil==2.8.*',
|
'python-dateutil==2.8.*',
|
||||||
'python-u2flib-server==4.*',
|
'python-u2flib-server==4.*',
|
||||||
'pytz',
|
'pytz',
|
||||||
'pytz-deprecation-shim==0.1.*',
|
|
||||||
'pyuca',
|
'pyuca',
|
||||||
'redis==4.4.*',
|
'redis==4.4.*',
|
||||||
'reportlab==3.6.*',
|
'reportlab==3.6.*',
|
||||||
|
|||||||
@@ -32,12 +32,13 @@
|
|||||||
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
# License for the specific language governing permissions and limitations under the License.
|
# License for the specific language governing permissions and limitations under the License.
|
||||||
|
|
||||||
from datetime import datetime, timezone
|
from datetime import datetime
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from django.test import utils
|
from django.test import utils
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django_scopes import scopes_disabled
|
from django_scopes import scopes_disabled
|
||||||
|
from pytz import UTC
|
||||||
from rest_framework.test import APIClient
|
from rest_framework.test import APIClient
|
||||||
|
|
||||||
from pretix.base.models import Device, Event, Organizer, Team, User
|
from pretix.base.models import Device, Event, Organizer, Team, User
|
||||||
@@ -66,7 +67,7 @@ def meta_prop(organizer):
|
|||||||
def event(organizer, meta_prop):
|
def event(organizer, meta_prop):
|
||||||
e = Event.objects.create(
|
e = Event.objects.create(
|
||||||
organizer=organizer, name='Dummy', slug='dummy',
|
organizer=organizer, name='Dummy', slug='dummy',
|
||||||
date_from=datetime(2017, 12, 27, 10, 0, 0, tzinfo=timezone.utc),
|
date_from=datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC),
|
||||||
plugins='pretix.plugins.banktransfer,pretix.plugins.ticketoutputpdf',
|
plugins='pretix.plugins.banktransfer,pretix.plugins.ticketoutputpdf',
|
||||||
is_public=True
|
is_public=True
|
||||||
)
|
)
|
||||||
@@ -81,7 +82,7 @@ def event(organizer, meta_prop):
|
|||||||
def event2(organizer, meta_prop):
|
def event2(organizer, meta_prop):
|
||||||
e = Event.objects.create(
|
e = Event.objects.create(
|
||||||
organizer=organizer, name='Dummy2', slug='dummy2',
|
organizer=organizer, name='Dummy2', slug='dummy2',
|
||||||
date_from=datetime(2017, 12, 27, 10, 0, 0, tzinfo=timezone.utc),
|
date_from=datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC),
|
||||||
plugins='pretix.plugins.banktransfer,pretix.plugins.ticketoutputpdf'
|
plugins='pretix.plugins.banktransfer,pretix.plugins.ticketoutputpdf'
|
||||||
)
|
)
|
||||||
e.meta_values.create(property=meta_prop, value="Conference")
|
e.meta_values.create(property=meta_prop, value="Conference")
|
||||||
@@ -93,7 +94,7 @@ def event2(organizer, meta_prop):
|
|||||||
def event3(organizer, meta_prop):
|
def event3(organizer, meta_prop):
|
||||||
e = Event.objects.create(
|
e = Event.objects.create(
|
||||||
organizer=organizer, name='Dummy3', slug='dummy3',
|
organizer=organizer, name='Dummy3', slug='dummy3',
|
||||||
date_from=datetime(2017, 12, 27, 10, 0, 0, tzinfo=timezone.utc),
|
date_from=datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC),
|
||||||
plugins='pretix.plugins.banktransfer,pretix.plugins.ticketoutputpdf'
|
plugins='pretix.plugins.banktransfer,pretix.plugins.ticketoutputpdf'
|
||||||
)
|
)
|
||||||
e.meta_values.create(property=meta_prop, value="Conference")
|
e.meta_values.create(property=meta_prop, value="Conference")
|
||||||
@@ -171,7 +172,7 @@ def device_client(client, device):
|
|||||||
def subevent(event, meta_prop):
|
def subevent(event, meta_prop):
|
||||||
event.has_subevents = True
|
event.has_subevents = True
|
||||||
event.save()
|
event.save()
|
||||||
se = event.subevents.create(name="Foobar", date_from=datetime(2017, 12, 27, 10, 0, 0, tzinfo=timezone.utc))
|
se = event.subevents.create(name="Foobar", date_from=datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
|
||||||
|
|
||||||
se.meta_values.create(property=meta_prop, value="Workshop")
|
se.meta_values.create(property=meta_prop, value="Workshop")
|
||||||
return se
|
return se
|
||||||
@@ -182,7 +183,7 @@ def subevent(event, meta_prop):
|
|||||||
def subevent2(event2, meta_prop):
|
def subevent2(event2, meta_prop):
|
||||||
event2.has_subevents = True
|
event2.has_subevents = True
|
||||||
event2.save()
|
event2.save()
|
||||||
se = event2.subevents.create(name="Foobar", date_from=datetime(2017, 12, 27, 10, 0, 0, tzinfo=timezone.utc))
|
se = event2.subevents.create(name="Foobar", date_from=datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
|
||||||
|
|
||||||
se.meta_values.create(property=meta_prop, value="Workshop")
|
se.meta_values.create(property=meta_prop, value="Workshop")
|
||||||
return se
|
return se
|
||||||
|
|||||||
+15
-14
@@ -28,6 +28,7 @@ import pytest
|
|||||||
from django.core.files.base import ContentFile
|
from django.core.files.base import ContentFile
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django_scopes import scopes_disabled
|
from django_scopes import scopes_disabled
|
||||||
|
from pytz import UTC
|
||||||
from tests.const import SAMPLE_PNG
|
from tests.const import SAMPLE_PNG
|
||||||
|
|
||||||
from pretix.base.models import Question, SeatingPlan
|
from pretix.base.models import Question, SeatingPlan
|
||||||
@@ -94,15 +95,15 @@ TEST_CARTPOSITION_RES = {
|
|||||||
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
def test_cp_list(token_client, organizer, event, item, taxrule, question):
|
def test_cp_list(token_client, organizer, event, item, taxrule, question):
|
||||||
testtime = datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=datetime.timezone.utc)
|
testtime = datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=UTC)
|
||||||
|
|
||||||
with mock.patch('django.utils.timezone.now') as mock_now:
|
with mock.patch('django.utils.timezone.now') as mock_now:
|
||||||
mock_now.return_value = testtime
|
mock_now.return_value = testtime
|
||||||
cr = CartPosition.objects.create(
|
cr = CartPosition.objects.create(
|
||||||
event=event, cart_id="aaa", item=item,
|
event=event, cart_id="aaa", item=item,
|
||||||
price=23, attendee_name_parts={'full_name': 'Peter'},
|
price=23, attendee_name_parts={'full_name': 'Peter'},
|
||||||
datetime=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=datetime.timezone.utc),
|
datetime=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=UTC),
|
||||||
expires=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=datetime.timezone.utc)
|
expires=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=UTC)
|
||||||
)
|
)
|
||||||
res = dict(TEST_CARTPOSITION_RES)
|
res = dict(TEST_CARTPOSITION_RES)
|
||||||
res["id"] = cr.pk
|
res["id"] = cr.pk
|
||||||
@@ -115,15 +116,15 @@ def test_cp_list(token_client, organizer, event, item, taxrule, question):
|
|||||||
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
def test_cp_list_api(token_client, organizer, event, item, taxrule, question):
|
def test_cp_list_api(token_client, organizer, event, item, taxrule, question):
|
||||||
testtime = datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=datetime.timezone.utc)
|
testtime = datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=UTC)
|
||||||
|
|
||||||
with mock.patch('django.utils.timezone.now') as mock_now:
|
with mock.patch('django.utils.timezone.now') as mock_now:
|
||||||
mock_now.return_value = testtime
|
mock_now.return_value = testtime
|
||||||
cr = CartPosition.objects.create(
|
cr = CartPosition.objects.create(
|
||||||
event=event, cart_id="aaa@api", item=item,
|
event=event, cart_id="aaa@api", item=item,
|
||||||
price=23, attendee_name_parts={'full_name': 'Peter'},
|
price=23, attendee_name_parts={'full_name': 'Peter'},
|
||||||
datetime=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=datetime.timezone.utc),
|
datetime=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=UTC),
|
||||||
expires=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=datetime.timezone.utc)
|
expires=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=UTC)
|
||||||
)
|
)
|
||||||
res = dict(TEST_CARTPOSITION_RES)
|
res = dict(TEST_CARTPOSITION_RES)
|
||||||
res["id"] = cr.pk
|
res["id"] = cr.pk
|
||||||
@@ -136,15 +137,15 @@ def test_cp_list_api(token_client, organizer, event, item, taxrule, question):
|
|||||||
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
def test_cp_detail(token_client, organizer, event, item, taxrule, question):
|
def test_cp_detail(token_client, organizer, event, item, taxrule, question):
|
||||||
testtime = datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=datetime.timezone.utc)
|
testtime = datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=UTC)
|
||||||
|
|
||||||
with mock.patch('django.utils.timezone.now') as mock_now:
|
with mock.patch('django.utils.timezone.now') as mock_now:
|
||||||
mock_now.return_value = testtime
|
mock_now.return_value = testtime
|
||||||
cr = CartPosition.objects.create(
|
cr = CartPosition.objects.create(
|
||||||
event=event, cart_id="aaa@api", item=item,
|
event=event, cart_id="aaa@api", item=item,
|
||||||
price=23, attendee_name_parts={'full_name': 'Peter'},
|
price=23, attendee_name_parts={'full_name': 'Peter'},
|
||||||
datetime=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=datetime.timezone.utc),
|
datetime=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=UTC),
|
||||||
expires=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=datetime.timezone.utc)
|
expires=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=UTC)
|
||||||
)
|
)
|
||||||
res = dict(TEST_CARTPOSITION_RES)
|
res = dict(TEST_CARTPOSITION_RES)
|
||||||
res["id"] = cr.pk
|
res["id"] = cr.pk
|
||||||
@@ -157,21 +158,21 @@ def test_cp_detail(token_client, organizer, event, item, taxrule, question):
|
|||||||
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
def test_cp_delete(token_client, organizer, event, item, taxrule, question):
|
def test_cp_delete(token_client, organizer, event, item, taxrule, question):
|
||||||
testtime = datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=datetime.timezone.utc)
|
testtime = datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=UTC)
|
||||||
|
|
||||||
with mock.patch('django.utils.timezone.now') as mock_now:
|
with mock.patch('django.utils.timezone.now') as mock_now:
|
||||||
mock_now.return_value = testtime
|
mock_now.return_value = testtime
|
||||||
cr = CartPosition.objects.create(
|
cr = CartPosition.objects.create(
|
||||||
event=event, cart_id="aaa@api", item=item,
|
event=event, cart_id="aaa@api", item=item,
|
||||||
price=23, attendee_name_parts={'full_name': 'Peter'},
|
price=23, attendee_name_parts={'full_name': 'Peter'},
|
||||||
datetime=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=datetime.timezone.utc),
|
datetime=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=UTC),
|
||||||
expires=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=datetime.timezone.utc)
|
expires=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=UTC)
|
||||||
)
|
)
|
||||||
CartPosition.objects.create(
|
CartPosition.objects.create(
|
||||||
event=event, cart_id="aaa@api", item=item, addon_to=cr,
|
event=event, cart_id="aaa@api", item=item, addon_to=cr,
|
||||||
price=23, attendee_name_parts={'full_name': 'Peter'},
|
price=23, attendee_name_parts={'full_name': 'Peter'},
|
||||||
datetime=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=datetime.timezone.utc),
|
datetime=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=UTC),
|
||||||
expires=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=datetime.timezone.utc)
|
expires=datetime.datetime(2018, 6, 11, 10, 0, 0, 0, tzinfo=UTC)
|
||||||
)
|
)
|
||||||
res = dict(TEST_CARTPOSITION_RES)
|
res = dict(TEST_CARTPOSITION_RES)
|
||||||
res["id"] = cr.pk
|
res["id"] = cr.pk
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ from django.utils.timezone import now
|
|||||||
from django_countries.fields import Country
|
from django_countries.fields import Country
|
||||||
from django_scopes import scopes_disabled
|
from django_scopes import scopes_disabled
|
||||||
from i18nfield.strings import LazyI18nString
|
from i18nfield.strings import LazyI18nString
|
||||||
|
from pytz import UTC
|
||||||
from tests.const import SAMPLE_PNG
|
from tests.const import SAMPLE_PNG
|
||||||
|
|
||||||
from pretix.api.serializers.item import QuestionSerializer
|
from pretix.api.serializers.item import QuestionSerializer
|
||||||
@@ -56,15 +57,15 @@ def other_item(event):
|
|||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def order(event, item, other_item, taxrule):
|
def order(event, item, other_item, taxrule):
|
||||||
testtime = datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=datetime.timezone.utc)
|
testtime = datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC)
|
||||||
|
|
||||||
with mock.patch('django.utils.timezone.now') as mock_now:
|
with mock.patch('django.utils.timezone.now') as mock_now:
|
||||||
mock_now.return_value = testtime
|
mock_now.return_value = testtime
|
||||||
o = Order.objects.create(
|
o = Order.objects.create(
|
||||||
code='FOO', event=event, email='dummy@dummy.test',
|
code='FOO', event=event, email='dummy@dummy.test',
|
||||||
status=Order.STATUS_PAID, secret="k24fiuwvu8kxz3y1",
|
status=Order.STATUS_PAID, secret="k24fiuwvu8kxz3y1",
|
||||||
datetime=datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=datetime.timezone.utc),
|
datetime=datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC),
|
||||||
expires=datetime.datetime(2017, 12, 10, 10, 0, 0, tzinfo=datetime.timezone.utc),
|
expires=datetime.datetime(2017, 12, 10, 10, 0, 0, tzinfo=UTC),
|
||||||
total=46, locale='en'
|
total=46, locale='en'
|
||||||
)
|
)
|
||||||
InvoiceAddress.objects.create(order=o, company="Sample company", country=Country('NZ'))
|
InvoiceAddress.objects.create(order=o, company="Sample company", country=Country('NZ'))
|
||||||
@@ -248,7 +249,7 @@ def test_list_list(token_client, organizer, event, clist, item, subevent, django
|
|||||||
'/api/v1/organizers/{}/events/{}/checkinlists/?subevent_match={}'.format(organizer.slug, event.slug, subevent.pk))
|
'/api/v1/organizers/{}/events/{}/checkinlists/?subevent_match={}'.format(organizer.slug, event.slug, subevent.pk))
|
||||||
assert [res] == resp.data['results']
|
assert [res] == resp.data['results']
|
||||||
with scopes_disabled():
|
with scopes_disabled():
|
||||||
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=datetime.timezone.utc))
|
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
|
||||||
resp = token_client.get(
|
resp = token_client.get(
|
||||||
'/api/v1/organizers/{}/events/{}/checkinlists/?subevent={}'.format(organizer.slug, event.slug, se2.pk))
|
'/api/v1/organizers/{}/events/{}/checkinlists/?subevent={}'.format(organizer.slug, event.slug, se2.pk))
|
||||||
assert [] == resp.data['results']
|
assert [] == resp.data['results']
|
||||||
@@ -567,7 +568,7 @@ def test_list_all_items_positions(token_client, organizer, event, clist, clist_a
|
|||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
def test_list_all_items_positions_by_subevent(token_client, organizer, event, clist, clist_all, item, other_item, order, subevent):
|
def test_list_all_items_positions_by_subevent(token_client, organizer, event, clist, clist_all, item, other_item, order, subevent):
|
||||||
with scopes_disabled():
|
with scopes_disabled():
|
||||||
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=datetime.timezone.utc))
|
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
|
||||||
pfirst = order.positions.get(positionid=1)
|
pfirst = order.positions.get(positionid=1)
|
||||||
pfirst.subevent = se2
|
pfirst.subevent = se2
|
||||||
pfirst.save()
|
pfirst.save()
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ from django.utils.timezone import now
|
|||||||
from django_countries.fields import Country
|
from django_countries.fields import Country
|
||||||
from django_scopes import scopes_disabled
|
from django_scopes import scopes_disabled
|
||||||
from i18nfield.strings import LazyI18nString
|
from i18nfield.strings import LazyI18nString
|
||||||
|
from pytz import UTC
|
||||||
from tests.const import SAMPLE_PNG
|
from tests.const import SAMPLE_PNG
|
||||||
|
|
||||||
from pretix.api.serializers.item import QuestionSerializer
|
from pretix.api.serializers.item import QuestionSerializer
|
||||||
@@ -56,15 +57,15 @@ def other_item(event):
|
|||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def order(event, item, other_item, taxrule):
|
def order(event, item, other_item, taxrule):
|
||||||
testtime = datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=datetime.timezone.utc)
|
testtime = datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC)
|
||||||
|
|
||||||
with mock.patch('django.utils.timezone.now') as mock_now:
|
with mock.patch('django.utils.timezone.now') as mock_now:
|
||||||
mock_now.return_value = testtime
|
mock_now.return_value = testtime
|
||||||
o = Order.objects.create(
|
o = Order.objects.create(
|
||||||
code='FOO', event=event, email='dummy@dummy.test',
|
code='FOO', event=event, email='dummy@dummy.test',
|
||||||
status=Order.STATUS_PAID, secret="k24fiuwvu8kxz3y1",
|
status=Order.STATUS_PAID, secret="k24fiuwvu8kxz3y1",
|
||||||
datetime=datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=datetime.timezone.utc),
|
datetime=datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC),
|
||||||
expires=datetime.datetime(2017, 12, 10, 10, 0, 0, tzinfo=datetime.timezone.utc),
|
expires=datetime.datetime(2017, 12, 10, 10, 0, 0, tzinfo=UTC),
|
||||||
total=46, locale='en'
|
total=46, locale='en'
|
||||||
)
|
)
|
||||||
InvoiceAddress.objects.create(order=o, company="Sample company", country=Country('NZ'))
|
InvoiceAddress.objects.create(order=o, company="Sample company", country=Country('NZ'))
|
||||||
@@ -103,15 +104,15 @@ def order(event, item, other_item, taxrule):
|
|||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def order2(event2, item_on_event2):
|
def order2(event2, item_on_event2):
|
||||||
testtime = datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=datetime.timezone.utc)
|
testtime = datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC)
|
||||||
|
|
||||||
with mock.patch('django.utils.timezone.now') as mock_now:
|
with mock.patch('django.utils.timezone.now') as mock_now:
|
||||||
mock_now.return_value = testtime
|
mock_now.return_value = testtime
|
||||||
o = Order.objects.create(
|
o = Order.objects.create(
|
||||||
code='BAR', event=event2, email='dummy@dummy.test',
|
code='BAR', event=event2, email='dummy@dummy.test',
|
||||||
status=Order.STATUS_PAID, secret="ylptCPNOxTyA",
|
status=Order.STATUS_PAID, secret="ylptCPNOxTyA",
|
||||||
datetime=datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=datetime.timezone.utc),
|
datetime=datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC),
|
||||||
expires=datetime.datetime(2017, 12, 10, 10, 0, 0, tzinfo=datetime.timezone.utc),
|
expires=datetime.datetime(2017, 12, 10, 10, 0, 0, tzinfo=UTC),
|
||||||
total=46, locale='en'
|
total=46, locale='en'
|
||||||
)
|
)
|
||||||
InvoiceAddress.objects.create(order=o, company="Sample company", country=Country('NZ'))
|
InvoiceAddress.objects.create(order=o, company="Sample company", country=Country('NZ'))
|
||||||
|
|||||||
@@ -20,13 +20,13 @@
|
|||||||
# <https://www.gnu.org/licenses/>.
|
# <https://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from zoneinfo import ZoneInfo
|
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
import pytz
|
||||||
from django_scopes import scopes_disabled
|
from django_scopes import scopes_disabled
|
||||||
from freezegun import freeze_time
|
from freezegun import freeze_time
|
||||||
|
|
||||||
tz = ZoneInfo("Asia/Tokyo")
|
tz = pytz.timezone("Asia/Tokyo")
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
@@ -40,22 +40,22 @@ def test_choose_between_events(device_client, device):
|
|||||||
with scopes_disabled():
|
with scopes_disabled():
|
||||||
e1 = device.organizer.events.create(
|
e1 = device.organizer.events.create(
|
||||||
name="Event", slug="e1", live=True,
|
name="Event", slug="e1", live=True,
|
||||||
date_from=datetime(2020, 1, 10, 14, 0, tzinfo=tz),
|
date_from=tz.localize(datetime(2020, 1, 10, 14, 0)),
|
||||||
date_to=datetime(2020, 1, 10, 15, 0, tzinfo=tz),
|
date_to=tz.localize(datetime(2020, 1, 10, 15, 0)),
|
||||||
)
|
)
|
||||||
cl1 = e1.checkin_lists.create(name="Same name")
|
cl1 = e1.checkin_lists.create(name="Same name")
|
||||||
e2 = device.organizer.events.create(
|
e2 = device.organizer.events.create(
|
||||||
name="Event", slug="e2", live=True,
|
name="Event", slug="e2", live=True,
|
||||||
date_from=datetime(2020, 1, 10, 16, 0, tzinfo=tz),
|
date_from=tz.localize(datetime(2020, 1, 10, 16, 0)),
|
||||||
date_to=datetime(2020, 1, 10, 17, 0, tzinfo=tz),
|
date_to=tz.localize(datetime(2020, 1, 10, 17, 0)),
|
||||||
)
|
)
|
||||||
e2.checkin_lists.create(name="Other name")
|
e2.checkin_lists.create(name="Other name")
|
||||||
cl2 = e2.checkin_lists.create(name="Same name")
|
cl2 = e2.checkin_lists.create(name="Same name")
|
||||||
e2.checkin_lists.create(name="Yet another name")
|
e2.checkin_lists.create(name="Yet another name")
|
||||||
tomorrow = device.organizer.events.create(
|
tomorrow = device.organizer.events.create(
|
||||||
name="Event", slug="tomorrow", live=True,
|
name="Event", slug="tomorrow", live=True,
|
||||||
date_from=datetime(2020, 1, 11, 15, 0, tzinfo=tz),
|
date_from=tz.localize(datetime(2020, 1, 11, 15, 0)),
|
||||||
date_to=datetime(2020, 1, 11, 16, 0, tzinfo=tz),
|
date_to=tz.localize(datetime(2020, 1, 11, 16, 0)),
|
||||||
)
|
)
|
||||||
cl3 = tomorrow.checkin_lists.create(name="Just any name")
|
cl3 = tomorrow.checkin_lists.create(name="Just any name")
|
||||||
for e in device.organizer.events.all():
|
for e in device.organizer.events.all():
|
||||||
@@ -117,7 +117,7 @@ def test_choose_between_events(device_client, device):
|
|||||||
assert resp.data['event']['slug'] == 'e2'
|
assert resp.data['event']['slug'] == 'e2'
|
||||||
|
|
||||||
# check for overlapping events
|
# check for overlapping events
|
||||||
e2.date_admission = datetime(2020, 1, 10, 14, 45, tzinfo=tz)
|
e2.date_admission = tz.localize(datetime(2020, 1, 10, 14, 45))
|
||||||
e2.save()
|
e2.save()
|
||||||
with freeze_time("2020-01-10T14:45:00+09:00"):
|
with freeze_time("2020-01-10T14:45:00+09:00"):
|
||||||
resp = device_client.get('/api/v1/device/eventselection?current_event=e1')
|
resp = device_client.get('/api/v1/device/eventselection?current_event=e1')
|
||||||
@@ -131,28 +131,28 @@ def test_choose_between_subevents(device_client, device):
|
|||||||
with scopes_disabled():
|
with scopes_disabled():
|
||||||
e = device.organizer.events.create(
|
e = device.organizer.events.create(
|
||||||
name="Event", slug="e1", live=True,
|
name="Event", slug="e1", live=True,
|
||||||
date_from=datetime(2020, 1, 10, 14, 0, tzinfo=tz),
|
date_from=tz.localize(datetime(2020, 1, 10, 14, 0)),
|
||||||
has_subevents=True,
|
has_subevents=True,
|
||||||
)
|
)
|
||||||
e.settings.timezone = "Asia/Tokyo"
|
e.settings.timezone = "Asia/Tokyo"
|
||||||
se1 = e.subevents.create(
|
se1 = e.subevents.create(
|
||||||
name="Event", active=True,
|
name="Event", active=True,
|
||||||
date_from=datetime(2020, 1, 10, 14, 0, tzinfo=tz),
|
date_from=tz.localize(datetime(2020, 1, 10, 14, 0)),
|
||||||
date_to=datetime(2020, 1, 10, 15, 0, tzinfo=tz),
|
date_to=tz.localize(datetime(2020, 1, 10, 15, 0)),
|
||||||
)
|
)
|
||||||
cl1 = e.checkin_lists.create(name="Same name", subevent=se1)
|
cl1 = e.checkin_lists.create(name="Same name", subevent=se1)
|
||||||
se2 = e.subevents.create(
|
se2 = e.subevents.create(
|
||||||
name="Event", active=True,
|
name="Event", active=True,
|
||||||
date_from=datetime(2020, 1, 10, 16, 0, tzinfo=tz),
|
date_from=tz.localize(datetime(2020, 1, 10, 16, 0)),
|
||||||
date_to=datetime(2020, 1, 10, 17, 0, tzinfo=tz),
|
date_to=tz.localize(datetime(2020, 1, 10, 17, 0)),
|
||||||
)
|
)
|
||||||
cl2 = e.checkin_lists.create(name="Same name", subevent=se2)
|
cl2 = e.checkin_lists.create(name="Same name", subevent=se2)
|
||||||
cl3 = e.checkin_lists.create(name="Other name")
|
cl3 = e.checkin_lists.create(name="Other name")
|
||||||
e.checkin_lists.create(name="Yet another name", subevent=se2)
|
e.checkin_lists.create(name="Yet another name", subevent=se2)
|
||||||
se_tomorrow = e.subevents.create(
|
se_tomorrow = e.subevents.create(
|
||||||
name="Event", active=True,
|
name="Event", active=True,
|
||||||
date_from=datetime(2020, 1, 11, 15, 0, tzinfo=tz),
|
date_from=tz.localize(datetime(2020, 1, 11, 15, 0)),
|
||||||
date_to=datetime(2020, 1, 11, 16, 0, tzinfo=tz),
|
date_to=tz.localize(datetime(2020, 1, 11, 16, 0)),
|
||||||
)
|
)
|
||||||
with freeze_time("2020-01-10T14:30:00+09:00"):
|
with freeze_time("2020-01-10T14:30:00+09:00"):
|
||||||
resp = device_client.get(f'/api/v1/device/eventselection?current_event=e1¤t_subevent={se1.pk}')
|
resp = device_client.get(f'/api/v1/device/eventselection?current_event=e1¤t_subevent={se1.pk}')
|
||||||
@@ -217,7 +217,7 @@ def test_choose_between_subevents(device_client, device):
|
|||||||
assert resp.data['subevent'] == se2.pk
|
assert resp.data['subevent'] == se2.pk
|
||||||
|
|
||||||
# check for overlapping events
|
# check for overlapping events
|
||||||
se2.date_admission = datetime(2020, 1, 10, 14, 45, tzinfo=tz)
|
se2.date_admission = tz.localize(datetime(2020, 1, 10, 14, 45))
|
||||||
se2.save()
|
se2.save()
|
||||||
with freeze_time("2020-01-10T14:45:00+09:00"):
|
with freeze_time("2020-01-10T14:45:00+09:00"):
|
||||||
resp = device_client.get(f'/api/v1/device/eventselection?current_event=e1¤t_subevent={se1.pk}')
|
resp = device_client.get(f'/api/v1/device/eventselection?current_event=e1¤t_subevent={se1.pk}')
|
||||||
@@ -234,25 +234,25 @@ def test_require_gate(device_client, device):
|
|||||||
device.save()
|
device.save()
|
||||||
e = device.organizer.events.create(
|
e = device.organizer.events.create(
|
||||||
name="Event", slug="e1", live=True,
|
name="Event", slug="e1", live=True,
|
||||||
date_from=datetime(2020, 1, 10, 14, 0, tzinfo=tz),
|
date_from=tz.localize(datetime(2020, 1, 10, 14, 0)),
|
||||||
has_subevents=True,
|
has_subevents=True,
|
||||||
)
|
)
|
||||||
e.settings.timezone = "Asia/Tokyo"
|
e.settings.timezone = "Asia/Tokyo"
|
||||||
se0 = e.subevents.create(
|
se0 = e.subevents.create(
|
||||||
name="Event", active=True,
|
name="Event", active=True,
|
||||||
date_from=datetime(2020, 1, 10, 9, 0, tzinfo=tz),
|
date_from=tz.localize(datetime(2020, 1, 10, 9, 0)),
|
||||||
date_to=datetime(2020, 1, 10, 10, 0, tzinfo=tz),
|
date_to=tz.localize(datetime(2020, 1, 10, 10, 0)),
|
||||||
)
|
)
|
||||||
e.subevents.create(
|
e.subevents.create(
|
||||||
name="Event", active=True,
|
name="Event", active=True,
|
||||||
date_from=datetime(2020, 1, 10, 14, 0, tzinfo=tz),
|
date_from=tz.localize(datetime(2020, 1, 10, 14, 0)),
|
||||||
date_to=datetime(2020, 1, 10, 15, 0, tzinfo=tz),
|
date_to=tz.localize(datetime(2020, 1, 10, 15, 0)),
|
||||||
)
|
)
|
||||||
cl1 = e.checkin_lists.create(name="Same name", subevent=se0)
|
cl1 = e.checkin_lists.create(name="Same name", subevent=se0)
|
||||||
se2 = e.subevents.create(
|
se2 = e.subevents.create(
|
||||||
name="Event", active=True,
|
name="Event", active=True,
|
||||||
date_from=datetime(2020, 1, 10, 16, 0, tzinfo=tz),
|
date_from=tz.localize(datetime(2020, 1, 10, 16, 0)),
|
||||||
date_to=datetime(2020, 1, 10, 17, 0, tzinfo=tz),
|
date_to=tz.localize(datetime(2020, 1, 10, 17, 0)),
|
||||||
)
|
)
|
||||||
e.checkin_lists.create(name="Same name", subevent=se2)
|
e.checkin_lists.create(name="Same name", subevent=se2)
|
||||||
cl3 = e.checkin_lists.create(name="Other name", subevent=se2)
|
cl3 = e.checkin_lists.create(name="Other name", subevent=se2)
|
||||||
|
|||||||
@@ -33,7 +33,7 @@
|
|||||||
# License for the specific language governing permissions and limitations under the License.
|
# License for the specific language governing permissions and limitations under the License.
|
||||||
|
|
||||||
import copy
|
import copy
|
||||||
from datetime import datetime, timedelta, timezone
|
from datetime import datetime, timedelta
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
|
|
||||||
@@ -43,6 +43,7 @@ from django.core.files.base import ContentFile
|
|||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django_countries.fields import Country
|
from django_countries.fields import Country
|
||||||
from django_scopes import scopes_disabled
|
from django_scopes import scopes_disabled
|
||||||
|
from pytz import UTC
|
||||||
from tests.const import SAMPLE_PNG
|
from tests.const import SAMPLE_PNG
|
||||||
|
|
||||||
from pretix.base.models import (
|
from pretix.base.models import (
|
||||||
@@ -62,15 +63,15 @@ def variations(item):
|
|||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def order(event, item, taxrule):
|
def order(event, item, taxrule):
|
||||||
testtime = datetime(2017, 12, 1, 10, 0, 0, tzinfo=timezone.utc)
|
testtime = datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC)
|
||||||
|
|
||||||
with mock.patch('django.utils.timezone.now') as mock_now:
|
with mock.patch('django.utils.timezone.now') as mock_now:
|
||||||
mock_now.return_value = testtime
|
mock_now.return_value = testtime
|
||||||
o = Order.objects.create(
|
o = Order.objects.create(
|
||||||
code='FOO', event=event, email='dummy@dummy.test',
|
code='FOO', event=event, email='dummy@dummy.test',
|
||||||
status=Order.STATUS_PENDING, secret="k24fiuwvu8kxz3y1",
|
status=Order.STATUS_PENDING, secret="k24fiuwvu8kxz3y1",
|
||||||
datetime=datetime(2017, 12, 1, 10, 0, 0, tzinfo=timezone.utc),
|
datetime=datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC),
|
||||||
expires=datetime(2017, 12, 10, 10, 0, 0, tzinfo=timezone.utc),
|
expires=datetime(2017, 12, 10, 10, 0, 0, tzinfo=UTC),
|
||||||
total=23, locale='en'
|
total=23, locale='en'
|
||||||
)
|
)
|
||||||
o.fees.create(fee_type=OrderFee.FEE_TYPE_PAYMENT, value=Decimal('0.25'), tax_rate=Decimal('19.00'),
|
o.fees.create(fee_type=OrderFee.FEE_TYPE_PAYMENT, value=Decimal('0.25'), tax_rate=Decimal('19.00'),
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import freezegun
|
|||||||
import pytest
|
import pytest
|
||||||
from django_countries.fields import Country
|
from django_countries.fields import Country
|
||||||
from django_scopes import scopes_disabled
|
from django_scopes import scopes_disabled
|
||||||
|
from pytz import UTC
|
||||||
|
|
||||||
from pretix.base.models import InvoiceAddress, Order, OrderPosition
|
from pretix.base.models import InvoiceAddress, Order, OrderPosition
|
||||||
from pretix.base.models.orders import OrderFee
|
from pretix.base.models.orders import OrderFee
|
||||||
@@ -74,7 +75,7 @@ def quota(event, item):
|
|||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def order(event, item, taxrule, question):
|
def order(event, item, taxrule, question):
|
||||||
testtime = datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=datetime.timezone.utc)
|
testtime = datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC)
|
||||||
event.plugins += ",pretix.plugins.stripe"
|
event.plugins += ",pretix.plugins.stripe"
|
||||||
event.save()
|
event.save()
|
||||||
|
|
||||||
@@ -83,8 +84,8 @@ def order(event, item, taxrule, question):
|
|||||||
o = Order.objects.create(
|
o = Order.objects.create(
|
||||||
code='FOO', event=event, email='dummy@dummy.test',
|
code='FOO', event=event, email='dummy@dummy.test',
|
||||||
status=Order.STATUS_PENDING, secret="k24fiuwvu8kxz3y1",
|
status=Order.STATUS_PENDING, secret="k24fiuwvu8kxz3y1",
|
||||||
datetime=datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=datetime.timezone.utc),
|
datetime=datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC),
|
||||||
expires=datetime.datetime(2017, 12, 10, 10, 0, 0, tzinfo=datetime.timezone.utc),
|
expires=datetime.datetime(2017, 12, 10, 10, 0, 0, tzinfo=UTC),
|
||||||
total=23, locale='en'
|
total=23, locale='en'
|
||||||
)
|
)
|
||||||
p1 = o.payments.create(
|
p1 = o.payments.create(
|
||||||
@@ -139,7 +140,7 @@ def order(event, item, taxrule, question):
|
|||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def invoice(order):
|
def invoice(order):
|
||||||
testtime = datetime.datetime(2017, 12, 10, 10, 0, 0, tzinfo=datetime.timezone.utc)
|
testtime = datetime.datetime(2017, 12, 10, 10, 0, 0, tzinfo=UTC)
|
||||||
|
|
||||||
with mock.patch('django.utils.timezone.now') as mock_now:
|
with mock.patch('django.utils.timezone.now') as mock_now:
|
||||||
mock_now.return_value = testtime
|
mock_now.return_value = testtime
|
||||||
|
|||||||
@@ -33,7 +33,7 @@
|
|||||||
# License for the specific language governing permissions and limitations under the License.
|
# License for the specific language governing permissions and limitations under the License.
|
||||||
import os
|
import os
|
||||||
import time
|
import time
|
||||||
from datetime import datetime, timedelta, timezone
|
from datetime import datetime, timedelta
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
|
|
||||||
@@ -42,6 +42,7 @@ from django.conf import settings
|
|||||||
from django.core.files.base import ContentFile
|
from django.core.files.base import ContentFile
|
||||||
from django_countries.fields import Country
|
from django_countries.fields import Country
|
||||||
from django_scopes import scopes_disabled
|
from django_scopes import scopes_disabled
|
||||||
|
from pytz import UTC
|
||||||
from tests.const import SAMPLE_PNG
|
from tests.const import SAMPLE_PNG
|
||||||
|
|
||||||
from pretix.base.channels import get_all_sales_channels
|
from pretix.base.channels import get_all_sales_channels
|
||||||
@@ -72,15 +73,15 @@ def category3(event, item):
|
|||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def order(event, item, taxrule):
|
def order(event, item, taxrule):
|
||||||
testtime = datetime(2017, 12, 1, 10, 0, 0, tzinfo=timezone.utc)
|
testtime = datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC)
|
||||||
|
|
||||||
with mock.patch('django.utils.timezone.now') as mock_now:
|
with mock.patch('django.utils.timezone.now') as mock_now:
|
||||||
mock_now.return_value = testtime
|
mock_now.return_value = testtime
|
||||||
o = Order.objects.create(
|
o = Order.objects.create(
|
||||||
code='FOO', event=event, email='dummy@dummy.test',
|
code='FOO', event=event, email='dummy@dummy.test',
|
||||||
status=Order.STATUS_PENDING, secret="k24fiuwvu8kxz3y1",
|
status=Order.STATUS_PENDING, secret="k24fiuwvu8kxz3y1",
|
||||||
datetime=datetime(2017, 12, 1, 10, 0, 0, tzinfo=timezone.utc),
|
datetime=datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC),
|
||||||
expires=datetime(2017, 12, 10, 10, 0, 0, tzinfo=timezone.utc),
|
expires=datetime(2017, 12, 10, 10, 0, 0, tzinfo=UTC),
|
||||||
total=23, locale='en'
|
total=23, locale='en'
|
||||||
)
|
)
|
||||||
o.fees.create(fee_type=OrderFee.FEE_TYPE_PAYMENT, value=Decimal('0.25'), tax_rate=Decimal('19.00'),
|
o.fees.create(fee_type=OrderFee.FEE_TYPE_PAYMENT, value=Decimal('0.25'), tax_rate=Decimal('19.00'),
|
||||||
@@ -107,7 +108,7 @@ def order_position(item, order, taxrule, variations):
|
|||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def cart_position(event, item, variations):
|
def cart_position(event, item, variations):
|
||||||
testtime = datetime(2017, 12, 1, 10, 0, 0, tzinfo=timezone.utc)
|
testtime = datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC)
|
||||||
|
|
||||||
with mock.patch('django.utils.timezone.now') as mock_now:
|
with mock.patch('django.utils.timezone.now') as mock_now:
|
||||||
mock_now.return_value = testtime
|
mock_now.return_value = testtime
|
||||||
@@ -1770,7 +1771,7 @@ def test_quota_list(token_client, organizer, event, quota, item, subevent):
|
|||||||
'/api/v1/organizers/{}/events/{}/quotas/?subevent={}'.format(organizer.slug, event.slug, subevent.pk))
|
'/api/v1/organizers/{}/events/{}/quotas/?subevent={}'.format(organizer.slug, event.slug, subevent.pk))
|
||||||
assert [res] == resp.data['results']
|
assert [res] == resp.data['results']
|
||||||
with scopes_disabled():
|
with scopes_disabled():
|
||||||
se2 = event.subevents.create(name="Foobar", date_from=datetime(2017, 12, 27, 10, 0, 0, tzinfo=timezone.utc))
|
se2 = event.subevents.create(name="Foobar", date_from=datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
|
||||||
resp = token_client.get(
|
resp = token_client.get(
|
||||||
'/api/v1/organizers/{}/events/{}/quotas/?subevent={}'.format(organizer.slug, event.slug, se2.pk))
|
'/api/v1/organizers/{}/events/{}/quotas/?subevent={}'.format(organizer.slug, event.slug, se2.pk))
|
||||||
assert [] == resp.data['results']
|
assert [] == resp.data['results']
|
||||||
|
|||||||
@@ -19,9 +19,10 @@
|
|||||||
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
|
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
|
||||||
# <https://www.gnu.org/licenses/>.
|
# <https://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
from datetime import datetime, timezone
|
from datetime import datetime
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
import pytz
|
||||||
from django_scopes import scopes_disabled
|
from django_scopes import scopes_disabled
|
||||||
from i18nfield.strings import LazyI18nString
|
from i18nfield.strings import LazyI18nString
|
||||||
|
|
||||||
@@ -53,8 +54,8 @@ def customer(organizer):
|
|||||||
def membership(organizer, customer, membershiptype):
|
def membership(organizer, customer, membershiptype):
|
||||||
return customer.memberships.create(
|
return customer.memberships.create(
|
||||||
membership_type=membershiptype,
|
membership_type=membershiptype,
|
||||||
date_start=datetime(2021, 4, 1, 0, 0, 0, 0, tzinfo=timezone.utc),
|
date_start=datetime(2021, 4, 1, 0, 0, 0, 0, tzinfo=pytz.UTC),
|
||||||
date_end=datetime(2021, 4, 8, 23, 59, 59, 999999, tzinfo=timezone.utc),
|
date_end=datetime(2021, 4, 8, 23, 59, 59, 999999, tzinfo=pytz.UTC),
|
||||||
attendee_name_parts={
|
attendee_name_parts={
|
||||||
"_scheme": "given_family",
|
"_scheme": "given_family",
|
||||||
'given_name': 'John',
|
'given_name': 'John',
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ from django.core.files.base import ContentFile
|
|||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django_countries.fields import Country
|
from django_countries.fields import Country
|
||||||
from django_scopes import scopes_disabled
|
from django_scopes import scopes_disabled
|
||||||
|
from pytz import UTC
|
||||||
from tests.const import SAMPLE_PNG
|
from tests.const import SAMPLE_PNG
|
||||||
|
|
||||||
from pretix.base.models import (
|
from pretix.base.models import (
|
||||||
@@ -89,7 +90,7 @@ def seat(event, organizer, item):
|
|||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def order(event, item, taxrule, question):
|
def order(event, item, taxrule, question):
|
||||||
testtime = datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=datetime.timezone.utc)
|
testtime = datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC)
|
||||||
event.plugins += ",pretix.plugins.stripe"
|
event.plugins += ",pretix.plugins.stripe"
|
||||||
event.save()
|
event.save()
|
||||||
|
|
||||||
@@ -98,8 +99,8 @@ def order(event, item, taxrule, question):
|
|||||||
o = Order.objects.create(
|
o = Order.objects.create(
|
||||||
code='FOO', event=event, email='dummy@dummy.test',
|
code='FOO', event=event, email='dummy@dummy.test',
|
||||||
status=Order.STATUS_PENDING, secret="k24fiuwvu8kxz3y1",
|
status=Order.STATUS_PENDING, secret="k24fiuwvu8kxz3y1",
|
||||||
datetime=datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=datetime.timezone.utc),
|
datetime=datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC),
|
||||||
expires=datetime.datetime(2017, 12, 10, 10, 0, 0, tzinfo=datetime.timezone.utc),
|
expires=datetime.datetime(2017, 12, 10, 10, 0, 0, tzinfo=UTC),
|
||||||
total=23, locale='en'
|
total=23, locale='en'
|
||||||
)
|
)
|
||||||
p1 = o.payments.create(
|
p1 = o.payments.create(
|
||||||
@@ -658,7 +659,7 @@ def test_orderposition_price_calculation_subevent(token_client, organizer, event
|
|||||||
def test_orderposition_price_calculation_subevent_with_override(token_client, organizer, event, order, subevent):
|
def test_orderposition_price_calculation_subevent_with_override(token_client, organizer, event, order, subevent):
|
||||||
with scopes_disabled():
|
with scopes_disabled():
|
||||||
item2 = event.items.create(name="Budget Ticket", default_price=23)
|
item2 = event.items.create(name="Budget Ticket", default_price=23)
|
||||||
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=datetime.timezone.utc))
|
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
|
||||||
se2.subeventitem_set.create(item=item2, price=12)
|
se2.subeventitem_set.create(item=item2, price=12)
|
||||||
op = order.positions.first()
|
op = order.positions.first()
|
||||||
op.subevent = subevent
|
op.subevent = subevent
|
||||||
@@ -1200,7 +1201,7 @@ def test_position_update_change_item_variation_mismatch(token_client, organizer,
|
|||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
def test_position_update_change_subevent(token_client, organizer, event, order, quota, item, subevent):
|
def test_position_update_change_subevent(token_client, organizer, event, order, quota, item, subevent):
|
||||||
with scopes_disabled():
|
with scopes_disabled():
|
||||||
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=datetime.timezone.utc))
|
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
|
||||||
q2 = se2.quotas.create(name="foo", size=1, event=event)
|
q2 = se2.quotas.create(name="foo", size=1, event=event)
|
||||||
q2.items.add(item)
|
q2.items.add(item)
|
||||||
op = order.positions.first()
|
op = order.positions.first()
|
||||||
@@ -1222,7 +1223,7 @@ def test_position_update_change_subevent(token_client, organizer, event, order,
|
|||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
def test_position_update_change_subevent_quota_empty(token_client, organizer, event, order, quota, item, subevent):
|
def test_position_update_change_subevent_quota_empty(token_client, organizer, event, order, quota, item, subevent):
|
||||||
with scopes_disabled():
|
with scopes_disabled():
|
||||||
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=datetime.timezone.utc))
|
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
|
||||||
q2 = se2.quotas.create(name="foo", size=0, event=event)
|
q2 = se2.quotas.create(name="foo", size=0, event=event)
|
||||||
q2.items.add(item)
|
q2.items.add(item)
|
||||||
op = order.positions.first()
|
op = order.positions.first()
|
||||||
@@ -1303,7 +1304,7 @@ def test_position_update_change_subevent_keep_seat(token_client, organizer, even
|
|||||||
with scopes_disabled():
|
with scopes_disabled():
|
||||||
seat.subevent = subevent
|
seat.subevent = subevent
|
||||||
seat.save()
|
seat.save()
|
||||||
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=datetime.timezone.utc))
|
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
|
||||||
seat2 = event.seats.create(seat_number="A1", product=item, seat_guid="A1", subevent=se2)
|
seat2 = event.seats.create(seat_number="A1", product=item, seat_guid="A1", subevent=se2)
|
||||||
q2 = se2.quotas.create(name="foo", size=1, event=event)
|
q2 = se2.quotas.create(name="foo", size=1, event=event)
|
||||||
q2.items.add(item)
|
q2.items.add(item)
|
||||||
@@ -1330,7 +1331,7 @@ def test_position_update_change_subevent_missing_seat(token_client, organizer, e
|
|||||||
with scopes_disabled():
|
with scopes_disabled():
|
||||||
seat.subevent = subevent
|
seat.subevent = subevent
|
||||||
seat.save()
|
seat.save()
|
||||||
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=datetime.timezone.utc))
|
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
|
||||||
q2 = se2.quotas.create(name="foo", size=1, event=event)
|
q2 = se2.quotas.create(name="foo", size=1, event=event)
|
||||||
q2.items.add(item)
|
q2.items.add(item)
|
||||||
op = order.positions.first()
|
op = order.positions.first()
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ from django.core.files.base import ContentFile
|
|||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django_countries.fields import Country
|
from django_countries.fields import Country
|
||||||
from django_scopes import scopes_disabled
|
from django_scopes import scopes_disabled
|
||||||
|
from pytz import UTC
|
||||||
from tests.const import SAMPLE_PNG
|
from tests.const import SAMPLE_PNG
|
||||||
|
|
||||||
from pretix.base.models import (
|
from pretix.base.models import (
|
||||||
@@ -78,7 +79,7 @@ def quota(event, item):
|
|||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def order(event, item, taxrule, question):
|
def order(event, item, taxrule, question):
|
||||||
testtime = datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=datetime.timezone.utc)
|
testtime = datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC)
|
||||||
event.plugins += ",pretix.plugins.stripe"
|
event.plugins += ",pretix.plugins.stripe"
|
||||||
event.save()
|
event.save()
|
||||||
|
|
||||||
@@ -87,8 +88,8 @@ def order(event, item, taxrule, question):
|
|||||||
o = Order.objects.create(
|
o = Order.objects.create(
|
||||||
code='FOO', event=event, email='dummy@dummy.test',
|
code='FOO', event=event, email='dummy@dummy.test',
|
||||||
status=Order.STATUS_PENDING, secret="k24fiuwvu8kxz3y1",
|
status=Order.STATUS_PENDING, secret="k24fiuwvu8kxz3y1",
|
||||||
datetime=datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=datetime.timezone.utc),
|
datetime=datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC),
|
||||||
expires=datetime.datetime(2017, 12, 10, 10, 0, 0, tzinfo=datetime.timezone.utc),
|
expires=datetime.datetime(2017, 12, 10, 10, 0, 0, tzinfo=UTC),
|
||||||
total=23, locale='en'
|
total=23, locale='en'
|
||||||
)
|
)
|
||||||
p1 = o.payments.create(
|
p1 = o.payments.create(
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ from django.core import mail as djmail
|
|||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django_countries.fields import Country
|
from django_countries.fields import Country
|
||||||
from django_scopes import scopes_disabled
|
from django_scopes import scopes_disabled
|
||||||
|
from pytz import UTC
|
||||||
from stripe.error import APIConnectionError
|
from stripe.error import APIConnectionError
|
||||||
from tests.plugins.stripe.test_provider import MockedCharge
|
from tests.plugins.stripe.test_provider import MockedCharge
|
||||||
|
|
||||||
@@ -76,7 +77,7 @@ def quota(event, item):
|
|||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def order(event, item, taxrule, question):
|
def order(event, item, taxrule, question):
|
||||||
testtime = datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=datetime.timezone.utc)
|
testtime = datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC)
|
||||||
event.plugins += ",pretix.plugins.stripe"
|
event.plugins += ",pretix.plugins.stripe"
|
||||||
event.save()
|
event.save()
|
||||||
|
|
||||||
@@ -85,8 +86,8 @@ def order(event, item, taxrule, question):
|
|||||||
o = Order.objects.create(
|
o = Order.objects.create(
|
||||||
code='FOO', event=event, email='dummy@dummy.test',
|
code='FOO', event=event, email='dummy@dummy.test',
|
||||||
status=Order.STATUS_PENDING, secret="k24fiuwvu8kxz3y1",
|
status=Order.STATUS_PENDING, secret="k24fiuwvu8kxz3y1",
|
||||||
datetime=datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=datetime.timezone.utc),
|
datetime=datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC),
|
||||||
expires=datetime.datetime(2017, 12, 10, 10, 0, 0, tzinfo=datetime.timezone.utc),
|
expires=datetime.datetime(2017, 12, 10, 10, 0, 0, tzinfo=UTC),
|
||||||
total=23, locale='en'
|
total=23, locale='en'
|
||||||
)
|
)
|
||||||
p1 = o.payments.create(
|
p1 = o.payments.create(
|
||||||
@@ -927,8 +928,8 @@ def test_orderposition_list(token_client, organizer, event, order, item, subeven
|
|||||||
|
|
||||||
with scopes_disabled():
|
with scopes_disabled():
|
||||||
cl = event.checkin_lists.create(name="Default")
|
cl = event.checkin_lists.create(name="Default")
|
||||||
c = op.checkins.create(datetime=datetime.datetime(2017, 12, 26, 10, 0, 0, tzinfo=datetime.timezone.utc), list=cl)
|
c = op.checkins.create(datetime=datetime.datetime(2017, 12, 26, 10, 0, 0, tzinfo=UTC), list=cl)
|
||||||
op.checkins.create(datetime=datetime.datetime(2017, 12, 26, 10, 0, 0, tzinfo=datetime.timezone.utc), list=cl, successful=False)
|
op.checkins.create(datetime=datetime.datetime(2017, 12, 26, 10, 0, 0, tzinfo=UTC), list=cl, successful=False)
|
||||||
res['checkins'] = [{ # successful only
|
res['checkins'] = [{ # successful only
|
||||||
'id': c.pk,
|
'id': c.pk,
|
||||||
'datetime': '2017-12-26T10:00:00Z',
|
'datetime': '2017-12-26T10:00:00Z',
|
||||||
|
|||||||
@@ -34,12 +34,13 @@
|
|||||||
|
|
||||||
import copy
|
import copy
|
||||||
import uuid
|
import uuid
|
||||||
from datetime import datetime, timedelta, timezone
|
from datetime import datetime, timedelta
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django_scopes import scopes_disabled
|
from django_scopes import scopes_disabled
|
||||||
|
from pytz import UTC
|
||||||
|
|
||||||
from pretix.base.models import Order, OrderPosition
|
from pretix.base.models import Order, OrderPosition
|
||||||
|
|
||||||
@@ -55,8 +56,8 @@ def order(event, item):
|
|||||||
o = Order.objects.create(
|
o = Order.objects.create(
|
||||||
code='FOO', event=event, email='dummy@dummy.test',
|
code='FOO', event=event, email='dummy@dummy.test',
|
||||||
status=Order.STATUS_PENDING, secret="k24fiuwvu8kxz3y1",
|
status=Order.STATUS_PENDING, secret="k24fiuwvu8kxz3y1",
|
||||||
datetime=datetime(2017, 12, 1, 10, 0, 0, tzinfo=timezone.utc),
|
datetime=datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC),
|
||||||
expires=datetime(2017, 12, 10, 10, 0, 0, tzinfo=timezone.utc),
|
expires=datetime(2017, 12, 10, 10, 0, 0, tzinfo=UTC),
|
||||||
total=23, locale='en'
|
total=23, locale='en'
|
||||||
)
|
)
|
||||||
OrderPosition.objects.create(
|
OrderPosition.objects.create(
|
||||||
|
|||||||
@@ -19,13 +19,14 @@
|
|||||||
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
|
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
|
||||||
# <https://www.gnu.org/licenses/>.
|
# <https://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
from datetime import datetime, timezone
|
from datetime import datetime
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from django_countries.fields import Country
|
from django_countries.fields import Country
|
||||||
from django_scopes import scopes_disabled
|
from django_scopes import scopes_disabled
|
||||||
|
from pytz import UTC
|
||||||
|
|
||||||
from pretix.base.models import (
|
from pretix.base.models import (
|
||||||
InvoiceAddress, Order, OrderPosition, SeatingPlan, SubEvent,
|
InvoiceAddress, Order, OrderPosition, SeatingPlan, SubEvent,
|
||||||
@@ -51,15 +52,15 @@ def variations2(item2):
|
|||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def order(event, item, taxrule):
|
def order(event, item, taxrule):
|
||||||
testtime = datetime(2017, 12, 1, 10, 0, 0, tzinfo=timezone.utc)
|
testtime = datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC)
|
||||||
|
|
||||||
with mock.patch('django.utils.timezone.now') as mock_now:
|
with mock.patch('django.utils.timezone.now') as mock_now:
|
||||||
mock_now.return_value = testtime
|
mock_now.return_value = testtime
|
||||||
o = Order.objects.create(
|
o = Order.objects.create(
|
||||||
code='FOO', event=event, email='dummy@dummy.test',
|
code='FOO', event=event, email='dummy@dummy.test',
|
||||||
status=Order.STATUS_PENDING, secret="k24fiuwvu8kxz3y1",
|
status=Order.STATUS_PENDING, secret="k24fiuwvu8kxz3y1",
|
||||||
datetime=datetime(2017, 12, 1, 10, 0, 0, tzinfo=timezone.utc),
|
datetime=datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC),
|
||||||
expires=datetime(2017, 12, 10, 10, 0, 0, tzinfo=timezone.utc),
|
expires=datetime(2017, 12, 10, 10, 0, 0, tzinfo=UTC),
|
||||||
total=23, locale='en'
|
total=23, locale='en'
|
||||||
)
|
)
|
||||||
o.fees.create(fee_type=OrderFee.FEE_TYPE_PAYMENT, value=Decimal('0.25'), tax_rate=Decimal('19.00'),
|
o.fees.create(fee_type=OrderFee.FEE_TYPE_PAYMENT, value=Decimal('0.25'), tax_rate=Decimal('19.00'),
|
||||||
@@ -343,8 +344,8 @@ def test_subevent_update(token_client, organizer, event, subevent, item, item2,
|
|||||||
assert resp.status_code == 200
|
assert resp.status_code == 200
|
||||||
with scopes_disabled():
|
with scopes_disabled():
|
||||||
subevent = event.subevents.get(id=subevent.id)
|
subevent = event.subevents.get(id=subevent.id)
|
||||||
assert subevent.date_from == datetime(2018, 12, 27, 10, 0, tzinfo=timezone.utc)
|
assert subevent.date_from == datetime(2018, 12, 27, 10, 0, tzinfo=UTC)
|
||||||
assert subevent.date_to == datetime(2018, 12, 28, 10, 0, tzinfo=timezone.utc)
|
assert subevent.date_to == datetime(2018, 12, 28, 10, 0, tzinfo=UTC)
|
||||||
|
|
||||||
resp = token_client.patch(
|
resp = token_client.patch(
|
||||||
'/api/v1/organizers/{}/events/{}/subevents/{}/'.format(organizer.slug, event.slug, subevent.pk),
|
'/api/v1/organizers/{}/events/{}/subevents/{}/'.format(organizer.slug, event.slug, subevent.pk),
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ import pytest
|
|||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django_scopes import scopes_disabled
|
from django_scopes import scopes_disabled
|
||||||
|
from pytz import UTC
|
||||||
|
|
||||||
from pretix.base.models import Event, SeatingPlan, Voucher
|
from pretix.base.models import Event, SeatingPlan, Voucher
|
||||||
|
|
||||||
@@ -248,7 +249,7 @@ def test_voucher_list(token_client, organizer, event, voucher, item, quota, sube
|
|||||||
'/api/v1/organizers/{}/events/{}/vouchers/?subevent={}'.format(organizer.slug, event.slug, subevent.pk))
|
'/api/v1/organizers/{}/events/{}/vouchers/?subevent={}'.format(organizer.slug, event.slug, subevent.pk))
|
||||||
assert [res] == resp.data['results']
|
assert [res] == resp.data['results']
|
||||||
with scopes_disabled():
|
with scopes_disabled():
|
||||||
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=timezone.utc))
|
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
|
||||||
resp = token_client.get(
|
resp = token_client.get(
|
||||||
'/api/v1/organizers/{}/events/{}/vouchers/?subevent={}'.format(organizer.slug, event.slug,
|
'/api/v1/organizers/{}/events/{}/vouchers/?subevent={}'.format(organizer.slug, event.slug,
|
||||||
se2.pk))
|
se2.pk))
|
||||||
@@ -610,7 +611,7 @@ def test_change_to_item_of_other_event(token_client, organizer, event, item):
|
|||||||
organizer=organizer,
|
organizer=organizer,
|
||||||
name='Dummy2',
|
name='Dummy2',
|
||||||
slug='dummy2',
|
slug='dummy2',
|
||||||
date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=timezone.utc),
|
date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC),
|
||||||
plugins='pretix.plugins.banktransfer,pretix.plugins.ticketoutputpdf'
|
plugins='pretix.plugins.banktransfer,pretix.plugins.ticketoutputpdf'
|
||||||
)
|
)
|
||||||
ticket2 = e2.items.create(name='Late-bird ticket', default_price=23)
|
ticket2 = e2.items.create(name='Late-bird ticket', default_price=23)
|
||||||
@@ -1253,8 +1254,8 @@ def test_set_seat_subevent(token_client, organizer, event, seatingplan, seat1, i
|
|||||||
with scopes_disabled():
|
with scopes_disabled():
|
||||||
event.has_subevents = True
|
event.has_subevents = True
|
||||||
event.save()
|
event.save()
|
||||||
se1 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=timezone.utc))
|
se1 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
|
||||||
se2 = event.subevents.create(name="Baz", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=timezone.utc))
|
se2 = event.subevents.create(name="Baz", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
|
||||||
seat1 = event.seats.create(seat_number="A1", product=item, seat_guid="A1", subevent=se1)
|
seat1 = event.seats.create(seat_number="A1", product=item, seat_guid="A1", subevent=se1)
|
||||||
event.seats.create(seat_number="A1", product=item, seat_guid="A1", subevent=se2)
|
event.seats.create(seat_number="A1", product=item, seat_guid="A1", subevent=se2)
|
||||||
v = event.vouchers.create(item=item)
|
v = event.vouchers.create(item=item)
|
||||||
@@ -1276,8 +1277,8 @@ def test_set_seat_subevent_required(token_client, organizer, event, seatingplan,
|
|||||||
with scopes_disabled():
|
with scopes_disabled():
|
||||||
event.has_subevents = True
|
event.has_subevents = True
|
||||||
event.save()
|
event.save()
|
||||||
se1 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=timezone.utc))
|
se1 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
|
||||||
se2 = event.subevents.create(name="Baz", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=timezone.utc))
|
se2 = event.subevents.create(name="Baz", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
|
||||||
seat1 = event.seats.create(seat_number="A1", product=item, seat_guid="A1", subevent=se1)
|
seat1 = event.seats.create(seat_number="A1", product=item, seat_guid="A1", subevent=se1)
|
||||||
event.seats.create(seat_number="A1", product=item, seat_guid="A1", subevent=se2)
|
event.seats.create(seat_number="A1", product=item, seat_guid="A1", subevent=se2)
|
||||||
event.vouchers.create(item=item, seat=seat1)
|
event.vouchers.create(item=item, seat=seat1)
|
||||||
@@ -1296,8 +1297,8 @@ def test_set_seat_subevent_invalid(token_client, organizer, event, seatingplan,
|
|||||||
with scopes_disabled():
|
with scopes_disabled():
|
||||||
event.has_subevents = True
|
event.has_subevents = True
|
||||||
event.save()
|
event.save()
|
||||||
se1 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=timezone.utc))
|
se1 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
|
||||||
se2 = event.subevents.create(name="Baz", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=timezone.utc))
|
se2 = event.subevents.create(name="Baz", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
|
||||||
seat1 = event.seats.create(seat_number="A1", product=item, seat_guid="A1", subevent=se1)
|
seat1 = event.seats.create(seat_number="A1", product=item, seat_guid="A1", subevent=se1)
|
||||||
event.seats.create(seat_number="B1", product=item, seat_guid="B1", subevent=se2)
|
event.seats.create(seat_number="B1", product=item, seat_guid="B1", subevent=se2)
|
||||||
event.vouchers.create(item=item, seat=seat1, subevent=se2)
|
event.vouchers.create(item=item, seat=seat1, subevent=se2)
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ from unittest import mock
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from django_scopes import scopes_disabled
|
from django_scopes import scopes_disabled
|
||||||
|
from pytz import UTC
|
||||||
|
|
||||||
from pretix.base.models import WaitingListEntry
|
from pretix.base.models import WaitingListEntry
|
||||||
|
|
||||||
@@ -43,7 +44,7 @@ def quota(event, item):
|
|||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def wle(event, item):
|
def wle(event, item):
|
||||||
testtime = datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=datetime.timezone.UTC)
|
testtime = datetime.datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC)
|
||||||
|
|
||||||
with mock.patch('django.utils.timezone.now') as mock_now:
|
with mock.patch('django.utils.timezone.now') as mock_now:
|
||||||
mock_now.return_value = testtime
|
mock_now.return_value = testtime
|
||||||
@@ -139,7 +140,7 @@ def test_wle_list(token_client, organizer, event, wle, item, subevent):
|
|||||||
'/api/v1/organizers/{}/events/{}/waitinglistentries/?subevent={}'.format(organizer.slug, event.slug, subevent.pk))
|
'/api/v1/organizers/{}/events/{}/waitinglistentries/?subevent={}'.format(organizer.slug, event.slug, subevent.pk))
|
||||||
assert [res] == resp.data['results']
|
assert [res] == resp.data['results']
|
||||||
with scopes_disabled():
|
with scopes_disabled():
|
||||||
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=datetime.timezone.UTC))
|
se2 = event.subevents.create(name="Foobar", date_from=datetime.datetime(2017, 12, 27, 10, 0, 0, tzinfo=UTC))
|
||||||
resp = token_client.get(
|
resp = token_client.get(
|
||||||
'/api/v1/organizers/{}/events/{}/waitinglistentries/?subevent={}'.format(organizer.slug, event.slug,
|
'/api/v1/organizers/{}/events/{}/waitinglistentries/?subevent={}'.format(organizer.slug, event.slug,
|
||||||
se2.pk))
|
se2.pk))
|
||||||
|
|||||||
@@ -19,9 +19,10 @@
|
|||||||
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
|
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
|
||||||
# <https://www.gnu.org/licenses/>.
|
# <https://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
from datetime import datetime, time, timedelta, timezone
|
from datetime import datetime, time, timedelta
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
import pytz
|
||||||
from django.core import mail as djmail
|
from django.core import mail as djmail
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django_scopes import scope
|
from django_scopes import scope
|
||||||
@@ -38,7 +39,7 @@ def event():
|
|||||||
o = Organizer.objects.create(name='Dummy', slug='dummy')
|
o = Organizer.objects.create(name='Dummy', slug='dummy')
|
||||||
event = Event.objects.create(
|
event = Event.objects.create(
|
||||||
organizer=o, name='Dummy', slug='dummy',
|
organizer=o, name='Dummy', slug='dummy',
|
||||||
date_from=datetime(2023, 1, 19, 2, 30, 0, tzinfo=timezone.utc),
|
date_from=datetime(2023, 1, 19, 2, 30, 0, tzinfo=pytz.UTC),
|
||||||
plugins='pretix.plugins.banktransfer'
|
plugins='pretix.plugins.banktransfer'
|
||||||
)
|
)
|
||||||
o.settings.timezone = "Europe/Berlin"
|
o.settings.timezone = "Europe/Berlin"
|
||||||
@@ -303,7 +304,7 @@ def test_organizer_limited_to_events(event, user, team):
|
|||||||
|
|
||||||
event2 = Event.objects.create(
|
event2 = Event.objects.create(
|
||||||
organizer=event.organizer, name='Dummy', slug='dummy2',
|
organizer=event.organizer, name='Dummy', slug='dummy2',
|
||||||
date_from=datetime(2023, 1, 19, 2, 30, 0, tzinfo=timezone.utc),
|
date_from=datetime(2023, 1, 19, 2, 30, 0, tzinfo=pytz.UTC),
|
||||||
plugins='pretix.plugins.banktransfer'
|
plugins='pretix.plugins.banktransfer'
|
||||||
)
|
)
|
||||||
team.all_events = False
|
team.all_events = False
|
||||||
@@ -343,7 +344,7 @@ def test_organizer_ok(event, user, team):
|
|||||||
|
|
||||||
Event.objects.create(
|
Event.objects.create(
|
||||||
organizer=event.organizer, name='Dummy', slug='dummy2',
|
organizer=event.organizer, name='Dummy', slug='dummy2',
|
||||||
date_from=datetime(2023, 1, 19, 2, 30, 0, tzinfo=timezone.utc),
|
date_from=datetime(2023, 1, 19, 2, 30, 0, tzinfo=pytz.UTC),
|
||||||
plugins='pretix.plugins.banktransfer'
|
plugins='pretix.plugins.banktransfer'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -21,9 +21,9 @@
|
|||||||
#
|
#
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from zoneinfo import ZoneInfo
|
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
import pytz
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
@@ -42,7 +42,7 @@ from pretix.base.services.orders import (
|
|||||||
)
|
)
|
||||||
from pretix.plugins.banktransfer.payment import BankTransfer
|
from pretix.plugins.banktransfer.payment import BankTransfer
|
||||||
|
|
||||||
TZ = ZoneInfo('Europe/Berlin')
|
TZ = pytz.timezone('Europe/Berlin')
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope='function')
|
@pytest.fixture(scope='function')
|
||||||
@@ -51,9 +51,9 @@ def event():
|
|||||||
o.settings.customer_accounts = True
|
o.settings.customer_accounts = True
|
||||||
event = Event.objects.create(
|
event = Event.objects.create(
|
||||||
organizer=o, name='Dummy', slug='dummy',
|
organizer=o, name='Dummy', slug='dummy',
|
||||||
date_from=datetime(2021, 4, 27, 10, 0, 0, 0, tzinfo=TZ),
|
date_from=TZ.localize(datetime(2021, 4, 27, 10, 0, 0, 0)),
|
||||||
date_to=datetime(2021, 4, 28, 10, 0, 0, 0, tzinfo=TZ),
|
date_to=TZ.localize(datetime(2021, 4, 28, 10, 0, 0, 0)),
|
||||||
presale_end=datetime(2221, 4, 28, 10, 0, 0, 0, tzinfo=TZ),
|
presale_end=TZ.localize(datetime(2221, 4, 28, 10, 0, 0, 0)),
|
||||||
plugins='pretix.plugins.banktransfer'
|
plugins='pretix.plugins.banktransfer'
|
||||||
)
|
)
|
||||||
event.settings.timezone = 'Europe/Berlin'
|
event.settings.timezone = 'Europe/Berlin'
|
||||||
@@ -75,8 +75,8 @@ def membership_type(event):
|
|||||||
def membership(event, membership_type, customer):
|
def membership(event, membership_type, customer):
|
||||||
return customer.memberships.create(
|
return customer.memberships.create(
|
||||||
membership_type=membership_type,
|
membership_type=membership_type,
|
||||||
date_start=datetime(2021, 4, 1, 0, 0, 0, 0, tzinfo=TZ),
|
date_start=TZ.localize(datetime(2021, 4, 1, 0, 0, 0, 0)),
|
||||||
date_end=datetime(2021, 4, 30, 23, 59, 59, 999999, tzinfo=TZ),
|
date_end=TZ.localize(datetime(2021, 4, 30, 23, 59, 59, 999999)),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -107,7 +107,7 @@ def subevent(event):
|
|||||||
event.has_subevents = True
|
event.has_subevents = True
|
||||||
return event.subevents.create(
|
return event.subevents.create(
|
||||||
name='Foo',
|
name='Foo',
|
||||||
date_from=datetime(2021, 4, 29, 10, 0, 0, 0, tzinfo=TZ),
|
date_from=TZ.localize(datetime(2021, 4, 29, 10, 0, 0, 0)),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -115,8 +115,8 @@ def subevent(event):
|
|||||||
def test_validity_membership_duration_like_event(event, granting_ticket, membership_type):
|
def test_validity_membership_duration_like_event(event, granting_ticket, membership_type):
|
||||||
granting_ticket.grant_membership_duration_like_event = True
|
granting_ticket.grant_membership_duration_like_event = True
|
||||||
assert membership_validity(granting_ticket, None, event) == (
|
assert membership_validity(granting_ticket, None, event) == (
|
||||||
datetime(2021, 4, 27, 10, 0, 0, 0, tzinfo=TZ),
|
TZ.localize(datetime(2021, 4, 27, 10, 0, 0, 0)),
|
||||||
datetime(2021, 4, 28, 10, 0, 0, 0, tzinfo=TZ),
|
TZ.localize(datetime(2021, 4, 28, 10, 0, 0, 0)),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -124,8 +124,8 @@ def test_validity_membership_duration_like_event(event, granting_ticket, members
|
|||||||
def test_validity_membership_duration_like_subevent_without_end(event, granting_ticket, subevent, membership_type):
|
def test_validity_membership_duration_like_subevent_without_end(event, granting_ticket, subevent, membership_type):
|
||||||
granting_ticket.grant_membership_duration_like_event = True
|
granting_ticket.grant_membership_duration_like_event = True
|
||||||
assert membership_validity(granting_ticket, subevent, event) == (
|
assert membership_validity(granting_ticket, subevent, event) == (
|
||||||
datetime(2021, 4, 29, 10, 0, 0, 0, tzinfo=TZ),
|
TZ.localize(datetime(2021, 4, 29, 10, 0, 0, 0)),
|
||||||
datetime(2021, 4, 29, 23, 59, 59, 999999, tzinfo=TZ),
|
TZ.localize(datetime(2021, 4, 29, 23, 59, 59, 999999)),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -135,8 +135,8 @@ def test_validity_membership_duration_days(event, granting_ticket, membership_ty
|
|||||||
granting_ticket.grant_membership_duration_days = 3
|
granting_ticket.grant_membership_duration_days = 3
|
||||||
with freeze_time("2021-04-10T11:00:00+02:00"):
|
with freeze_time("2021-04-10T11:00:00+02:00"):
|
||||||
assert membership_validity(granting_ticket, subevent, event) == (
|
assert membership_validity(granting_ticket, subevent, event) == (
|
||||||
datetime(2021, 4, 10, 0, 0, 0, 0, tzinfo=TZ),
|
TZ.localize(datetime(2021, 4, 10, 0, 0, 0, 0)),
|
||||||
datetime(2021, 4, 12, 23, 59, 59, 999999, tzinfo=TZ),
|
TZ.localize(datetime(2021, 4, 12, 23, 59, 59, 999999)),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -146,13 +146,13 @@ def test_validity_membership_duration_months(event, granting_ticket, membership_
|
|||||||
granting_ticket.grant_membership_duration_months = 1
|
granting_ticket.grant_membership_duration_months = 1
|
||||||
with freeze_time("2021-02-01T11:00:00+01:00"):
|
with freeze_time("2021-02-01T11:00:00+01:00"):
|
||||||
assert membership_validity(granting_ticket, subevent, event) == (
|
assert membership_validity(granting_ticket, subevent, event) == (
|
||||||
datetime(2021, 2, 1, 0, 0, 0, 0, tzinfo=TZ),
|
TZ.localize(datetime(2021, 2, 1, 0, 0, 0, 0)),
|
||||||
datetime(2021, 2, 28, 23, 59, 59, 999999, tzinfo=TZ),
|
TZ.localize(datetime(2021, 2, 28, 23, 59, 59, 999999)),
|
||||||
)
|
)
|
||||||
with freeze_time("2021-02-28T11:00:00+01:00"):
|
with freeze_time("2021-02-28T11:00:00+01:00"):
|
||||||
assert membership_validity(granting_ticket, subevent, event) == (
|
assert membership_validity(granting_ticket, subevent, event) == (
|
||||||
datetime(2021, 2, 28, 0, 0, 0, 0, tzinfo=TZ),
|
TZ.localize(datetime(2021, 2, 28, 0, 0, 0, 0)),
|
||||||
datetime(2021, 3, 27, 23, 59, 59, 999999, tzinfo=TZ),
|
TZ.localize(datetime(2021, 3, 27, 23, 59, 59, 999999)),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -163,13 +163,13 @@ def test_validity_membership_duration_months_plus_days(event, granting_ticket, m
|
|||||||
granting_ticket.grant_membership_duration_days = 2
|
granting_ticket.grant_membership_duration_days = 2
|
||||||
with freeze_time("2021-02-01T11:00:00+01:00"):
|
with freeze_time("2021-02-01T11:00:00+01:00"):
|
||||||
assert membership_validity(granting_ticket, subevent, event) == (
|
assert membership_validity(granting_ticket, subevent, event) == (
|
||||||
datetime(2021, 2, 1, 0, 0, 0, 0, tzinfo=TZ),
|
TZ.localize(datetime(2021, 2, 1, 0, 0, 0, 0)),
|
||||||
datetime(2021, 3, 2, 23, 59, 59, 999999, tzinfo=TZ),
|
TZ.localize(datetime(2021, 3, 2, 23, 59, 59, 999999)),
|
||||||
)
|
)
|
||||||
with freeze_time("2021-02-28T11:00:00+01:00"):
|
with freeze_time("2021-02-28T11:00:00+01:00"):
|
||||||
assert membership_validity(granting_ticket, subevent, event) == (
|
assert membership_validity(granting_ticket, subevent, event) == (
|
||||||
datetime(2021, 2, 28, 0, 0, 0, 0, tzinfo=TZ),
|
TZ.localize(datetime(2021, 2, 28, 0, 0, 0, 0)),
|
||||||
datetime(2021, 3, 29, 23, 59, 59, 999999, tzinfo=TZ),
|
TZ.localize(datetime(2021, 3, 29, 23, 59, 59, 999999)),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -420,7 +420,7 @@ def test_validate_membership_max_usages(event, customer, membership, requiring_t
|
|||||||
def test_validate_membership_parallel(event, customer, membership, subevent, requiring_ticket, membership_type):
|
def test_validate_membership_parallel(event, customer, membership, subevent, requiring_ticket, membership_type):
|
||||||
se2 = event.subevents.create(
|
se2 = event.subevents.create(
|
||||||
name='Foo',
|
name='Foo',
|
||||||
date_from=datetime(2021, 4, 28, 10, 0, 0, 0, tzinfo=TZ),
|
date_from=TZ.localize(datetime(2021, 4, 28, 10, 0, 0, 0)),
|
||||||
)
|
)
|
||||||
|
|
||||||
membership_type.allow_parallel_usage = False
|
membership_type.allow_parallel_usage = False
|
||||||
@@ -585,5 +585,5 @@ def test_grant_when_paid_and_changed(event, customer, granting_ticket):
|
|||||||
m = customer.memberships.get()
|
m = customer.memberships.get()
|
||||||
assert m.granted_in == order.positions.first()
|
assert m.granted_in == order.positions.first()
|
||||||
assert m.membership_type == granting_ticket.grant_membership_type
|
assert m.membership_type == granting_ticket.grant_membership_type
|
||||||
assert m.date_start == datetime(2021, 4, 27, 10, 0, 0, 0, tzinfo=TZ)
|
assert m.date_start == TZ.localize(datetime(2021, 4, 27, 10, 0, 0, 0))
|
||||||
assert m.date_end == datetime(2021, 4, 28, 10, 0, 0, 0, tzinfo=TZ)
|
assert m.date_end == TZ.localize(datetime(2021, 4, 28, 10, 0, 0, 0))
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ from datetime import date, timedelta
|
|||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
import pytz
|
||||||
from dateutil.tz import tzoffset
|
from dateutil.tz import tzoffset
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
@@ -1187,13 +1188,13 @@ class OrderTestCase(BaseQuotaTestCase):
|
|||||||
@classscope(attr='o')
|
@classscope(attr='o')
|
||||||
def test_payment_term_last_relative(self):
|
def test_payment_term_last_relative(self):
|
||||||
self.event.settings.set('payment_term_last', date(2017, 5, 3))
|
self.event.settings.set('payment_term_last', date(2017, 5, 3))
|
||||||
assert self.order.payment_term_last == datetime.datetime(2017, 5, 3, 23, 59, 59, tzinfo=datetime.timezone.utc)
|
assert self.order.payment_term_last == datetime.datetime(2017, 5, 3, 23, 59, 59, tzinfo=pytz.UTC)
|
||||||
self.event.date_from = datetime.datetime(2017, 5, 3, 12, 0, 0, tzinfo=datetime.timezone.utc)
|
self.event.date_from = datetime.datetime(2017, 5, 3, 12, 0, 0, tzinfo=pytz.UTC)
|
||||||
self.event.save()
|
self.event.save()
|
||||||
self.event.settings.set('payment_term_last', RelativeDateWrapper(
|
self.event.settings.set('payment_term_last', RelativeDateWrapper(
|
||||||
RelativeDate(days_before=2, time=None, base_date_name='date_from', minutes_before=None)
|
RelativeDate(days_before=2, time=None, base_date_name='date_from', minutes_before=None)
|
||||||
))
|
))
|
||||||
assert self.order.payment_term_last == datetime.datetime(2017, 5, 1, 23, 59, 59, tzinfo=datetime.timezone.utc)
|
assert self.order.payment_term_last == datetime.datetime(2017, 5, 1, 23, 59, 59, tzinfo=pytz.UTC)
|
||||||
|
|
||||||
@classscope(attr='o')
|
@classscope(attr='o')
|
||||||
def test_payment_term_last_subevent(self):
|
def test_payment_term_last_subevent(self):
|
||||||
@@ -1218,14 +1219,14 @@ class OrderTestCase(BaseQuotaTestCase):
|
|||||||
|
|
||||||
@classscope(attr='o')
|
@classscope(attr='o')
|
||||||
def test_ticket_download_date_relative(self):
|
def test_ticket_download_date_relative(self):
|
||||||
self.event.settings.set('ticket_download_date', datetime.datetime(2017, 5, 3, 12, 59, 59, tzinfo=datetime.timezone.utc))
|
self.event.settings.set('ticket_download_date', datetime.datetime(2017, 5, 3, 12, 59, 59, tzinfo=pytz.UTC))
|
||||||
assert self.order.ticket_download_date == datetime.datetime(2017, 5, 3, 12, 59, 59, tzinfo=datetime.timezone.utc)
|
assert self.order.ticket_download_date == datetime.datetime(2017, 5, 3, 12, 59, 59, tzinfo=pytz.UTC)
|
||||||
self.event.date_from = datetime.datetime(2017, 5, 3, 12, 0, 0, tzinfo=datetime.timezone.utc)
|
self.event.date_from = datetime.datetime(2017, 5, 3, 12, 0, 0, tzinfo=pytz.UTC)
|
||||||
self.event.save()
|
self.event.save()
|
||||||
self.event.settings.set('ticket_download_date', RelativeDateWrapper(
|
self.event.settings.set('ticket_download_date', RelativeDateWrapper(
|
||||||
RelativeDate(days_before=2, time=None, base_date_name='date_from', minutes_before=None)
|
RelativeDate(days_before=2, time=None, base_date_name='date_from', minutes_before=None)
|
||||||
))
|
))
|
||||||
assert self.order.ticket_download_date == datetime.datetime(2017, 5, 1, 12, 0, 0, tzinfo=datetime.timezone.utc)
|
assert self.order.ticket_download_date == datetime.datetime(2017, 5, 1, 12, 0, 0, tzinfo=pytz.UTC)
|
||||||
|
|
||||||
@classscope(attr='o')
|
@classscope(attr='o')
|
||||||
def test_ticket_download_date_subevent(self):
|
def test_ticket_download_date_subevent(self):
|
||||||
|
|||||||
@@ -22,9 +22,9 @@
|
|||||||
import json
|
import json
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from zoneinfo import ZoneInfo
|
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
import pytz
|
||||||
from django.core import mail as djmail
|
from django.core import mail as djmail
|
||||||
from django.db.models import F, Sum
|
from django.db.models import F, Sum
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
@@ -255,9 +255,9 @@ def test_expiry_last_relative_subevents(event):
|
|||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
def test_expiry_dst(event):
|
def test_expiry_dst(event):
|
||||||
event.settings.set('timezone', 'Europe/Berlin')
|
event.settings.set('timezone', 'Europe/Berlin')
|
||||||
tz = ZoneInfo('Europe/Berlin')
|
tz = pytz.timezone('Europe/Berlin')
|
||||||
utc = ZoneInfo('UTC')
|
utc = pytz.timezone('UTC')
|
||||||
today = datetime(2016, 10, 29, 12, 0, 0, tzinfo=tz).astimezone(utc)
|
today = tz.localize(datetime(2016, 10, 29, 12, 0, 0)).astimezone(utc)
|
||||||
order = _create_order(event, email='dummy@example.org', positions=[],
|
order = _create_order(event, email='dummy@example.org', positions=[],
|
||||||
now_dt=today,
|
now_dt=today,
|
||||||
payment_requests=[{
|
payment_requests=[{
|
||||||
|
|||||||
@@ -34,9 +34,9 @@
|
|||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from zoneinfo import ZoneInfo
|
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
import pytz
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django_scopes import scope
|
from django_scopes import scope
|
||||||
from tests.testdummy.payment import DummyPaymentProvider
|
from tests.testdummy.payment import DummyPaymentProvider
|
||||||
@@ -112,18 +112,18 @@ def test_availability_date_not_available(event):
|
|||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
def test_availability_date_relative(event):
|
def test_availability_date_relative(event):
|
||||||
event.settings.set('timezone', 'US/Pacific')
|
event.settings.set('timezone', 'US/Pacific')
|
||||||
tz = ZoneInfo('US/Pacific')
|
tz = pytz.timezone('US/Pacific')
|
||||||
event.date_from = datetime.datetime(2016, 12, 3, 12, 0, 0, tzinfo=tz)
|
event.date_from = tz.localize(datetime.datetime(2016, 12, 3, 12, 0, 0))
|
||||||
event.save()
|
event.save()
|
||||||
prov = DummyPaymentProvider(event)
|
prov = DummyPaymentProvider(event)
|
||||||
prov.settings.set('_availability_date', RelativeDateWrapper(
|
prov.settings.set('_availability_date', RelativeDateWrapper(
|
||||||
RelativeDate(days_before=2, time=None, base_date_name='date_from', minutes_before=None)
|
RelativeDate(days_before=2, time=None, base_date_name='date_from', minutes_before=None)
|
||||||
))
|
))
|
||||||
|
|
||||||
utc = datetime.timezone.utc
|
utc = pytz.timezone('UTC')
|
||||||
assert prov._is_still_available(datetime.datetime(2016, 11, 30, 23, 0, 0, tzinfo=tz).astimezone(utc))
|
assert prov._is_still_available(tz.localize(datetime.datetime(2016, 11, 30, 23, 0, 0)).astimezone(utc))
|
||||||
assert prov._is_still_available(datetime.datetime(2016, 12, 1, 23, 59, 0, tzinfo=tz).astimezone(utc))
|
assert prov._is_still_available(tz.localize(datetime.datetime(2016, 12, 1, 23, 59, 0)).astimezone(utc))
|
||||||
assert not prov._is_still_available(datetime.datetime(2016, 12, 2, 0, 0, 1, tzinfo=tz).astimezone(utc))
|
assert not prov._is_still_available(tz.localize(datetime.datetime(2016, 12, 2, 0, 0, 1)).astimezone(utc))
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
@@ -132,11 +132,11 @@ def test_availability_date_timezones(event):
|
|||||||
prov = DummyPaymentProvider(event)
|
prov = DummyPaymentProvider(event)
|
||||||
prov.settings.set('_availability_date', '2016-12-01')
|
prov.settings.set('_availability_date', '2016-12-01')
|
||||||
|
|
||||||
tz = ZoneInfo('US/Pacific')
|
tz = pytz.timezone('US/Pacific')
|
||||||
utc = ZoneInfo('UTC')
|
utc = pytz.timezone('UTC')
|
||||||
assert prov._is_still_available(datetime.datetime(2016, 11, 30, 23, 0, 0, tzinfo=tz).astimezone(utc))
|
assert prov._is_still_available(tz.localize(datetime.datetime(2016, 11, 30, 23, 0, 0)).astimezone(utc))
|
||||||
assert prov._is_still_available(datetime.datetime(2016, 12, 1, 23, 59, 0, tzinfo=tz).astimezone(utc))
|
assert prov._is_still_available(tz.localize(datetime.datetime(2016, 12, 1, 23, 59, 0)).astimezone(utc))
|
||||||
assert not prov._is_still_available(datetime.datetime(2016, 12, 2, 0, 0, 1, tzinfo=tz).astimezone(utc))
|
assert not prov._is_still_available(tz.localize(datetime.datetime(2016, 12, 2, 0, 0, 1)).astimezone(utc))
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
|
|||||||
@@ -20,16 +20,16 @@
|
|||||||
# <https://www.gnu.org/licenses/>.
|
# <https://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
from datetime import datetime, time
|
from datetime import datetime, time
|
||||||
from zoneinfo import ZoneInfo
|
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
import pytz
|
||||||
from django_scopes import scope
|
from django_scopes import scope
|
||||||
|
|
||||||
from pretix.base.models import Event, Organizer
|
from pretix.base.models import Event, Organizer
|
||||||
from pretix.base.reldate import RelativeDate, RelativeDateWrapper
|
from pretix.base.reldate import RelativeDate, RelativeDateWrapper
|
||||||
|
|
||||||
TOKYO = ZoneInfo('Asia/Tokyo')
|
TOKYO = pytz.timezone('Asia/Tokyo')
|
||||||
BERLIN = ZoneInfo('Europe/Berlin')
|
BERLIN = pytz.timezone('Europe/Berlin')
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
@@ -37,8 +37,8 @@ def event():
|
|||||||
o = Organizer.objects.create(name='Dummy', slug='dummy')
|
o = Organizer.objects.create(name='Dummy', slug='dummy')
|
||||||
event = Event.objects.create(
|
event = Event.objects.create(
|
||||||
organizer=o, name='Dummy', slug='dummy',
|
organizer=o, name='Dummy', slug='dummy',
|
||||||
date_from=datetime(2017, 12, 27, 5, 0, 0, tzinfo=TOKYO),
|
date_from=TOKYO.localize(datetime(2017, 12, 27, 5, 0, 0)),
|
||||||
presale_start=datetime(2017, 12, 1, 5, 0, 0, tzinfo=TOKYO),
|
presale_start=TOKYO.localize(datetime(2017, 12, 1, 5, 0, 0)),
|
||||||
plugins='pretix.plugins.banktransfer'
|
plugins='pretix.plugins.banktransfer'
|
||||||
|
|
||||||
)
|
)
|
||||||
@@ -57,7 +57,7 @@ def test_absolute_date(event):
|
|||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
def test_relative_date_without_time(event):
|
def test_relative_date_without_time(event):
|
||||||
rdw = RelativeDateWrapper(RelativeDate(days_before=1, time=None, base_date_name='date_from', minutes_before=None))
|
rdw = RelativeDateWrapper(RelativeDate(days_before=1, time=None, base_date_name='date_from', minutes_before=None))
|
||||||
assert rdw.datetime(event).astimezone(TOKYO) == datetime(2017, 12, 26, 5, 0, 0, tzinfo=TOKYO)
|
assert rdw.datetime(event).astimezone(TOKYO) == TOKYO.localize(datetime(2017, 12, 26, 5, 0, 0))
|
||||||
assert rdw.to_string() == 'RELDATE/1/-/date_from/'
|
assert rdw.to_string() == 'RELDATE/1/-/date_from/'
|
||||||
|
|
||||||
|
|
||||||
@@ -65,64 +65,64 @@ def test_relative_date_without_time(event):
|
|||||||
def test_relative_date_other_base_point(event):
|
def test_relative_date_other_base_point(event):
|
||||||
with scope(organizer=event.organizer):
|
with scope(organizer=event.organizer):
|
||||||
rdw = RelativeDateWrapper(RelativeDate(days_before=1, time=None, base_date_name='presale_start', minutes_before=None))
|
rdw = RelativeDateWrapper(RelativeDate(days_before=1, time=None, base_date_name='presale_start', minutes_before=None))
|
||||||
assert rdw.datetime(event) == datetime(2017, 11, 30, 5, 0, 0, tzinfo=TOKYO)
|
assert rdw.datetime(event) == TOKYO.localize(datetime(2017, 11, 30, 5, 0, 0))
|
||||||
assert rdw.to_string() == 'RELDATE/1/-/presale_start/'
|
assert rdw.to_string() == 'RELDATE/1/-/presale_start/'
|
||||||
|
|
||||||
# presale_end is unset, defaults to date_from
|
# presale_end is unset, defaults to date_from
|
||||||
rdw = RelativeDateWrapper(RelativeDate(days_before=1, time=None, base_date_name='presale_end', minutes_before=None))
|
rdw = RelativeDateWrapper(RelativeDate(days_before=1, time=None, base_date_name='presale_end', minutes_before=None))
|
||||||
assert rdw.datetime(event) == datetime(2017, 12, 26, 5, 0, 0, tzinfo=TOKYO)
|
assert rdw.datetime(event) == TOKYO.localize(datetime(2017, 12, 26, 5, 0, 0))
|
||||||
assert rdw.to_string() == 'RELDATE/1/-/presale_end/'
|
assert rdw.to_string() == 'RELDATE/1/-/presale_end/'
|
||||||
|
|
||||||
# subevent base
|
# subevent base
|
||||||
se = event.subevents.create(name="SE1", date_from=datetime(2017, 11, 27, 5, 0, 0, tzinfo=TOKYO))
|
se = event.subevents.create(name="SE1", date_from=TOKYO.localize(datetime(2017, 11, 27, 5, 0, 0)))
|
||||||
rdw = RelativeDateWrapper(RelativeDate(days_before=1, time=None, base_date_name='date_from', minutes_before=None))
|
rdw = RelativeDateWrapper(RelativeDate(days_before=1, time=None, base_date_name='date_from', minutes_before=None))
|
||||||
assert rdw.datetime(se) == datetime(2017, 11, 26, 5, 0, 0, tzinfo=TOKYO)
|
assert rdw.datetime(se) == TOKYO.localize(datetime(2017, 11, 26, 5, 0, 0))
|
||||||
|
|
||||||
# presale_start is unset on subevent, default to event
|
# presale_start is unset on subevent, default to event
|
||||||
rdw = RelativeDateWrapper(RelativeDate(days_before=1, time=None, base_date_name='presale_start', minutes_before=None))
|
rdw = RelativeDateWrapper(RelativeDate(days_before=1, time=None, base_date_name='presale_start', minutes_before=None))
|
||||||
assert rdw.datetime(se) == datetime(2017, 11, 30, 5, 0, 0, tzinfo=TOKYO)
|
assert rdw.datetime(se) == TOKYO.localize(datetime(2017, 11, 30, 5, 0, 0))
|
||||||
|
|
||||||
# presale_end is unset on all, default to date_from of subevent
|
# presale_end is unset on all, default to date_from of subevent
|
||||||
rdw = RelativeDateWrapper(RelativeDate(days_before=1, time=None, base_date_name='presale_end', minutes_before=None))
|
rdw = RelativeDateWrapper(RelativeDate(days_before=1, time=None, base_date_name='presale_end', minutes_before=None))
|
||||||
assert rdw.datetime(se) == datetime(2017, 11, 26, 5, 0, 0, tzinfo=TOKYO)
|
assert rdw.datetime(se) == TOKYO.localize(datetime(2017, 11, 26, 5, 0, 0))
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
def test_relative_date_in_minutes(event):
|
def test_relative_date_in_minutes(event):
|
||||||
rdw = RelativeDateWrapper(RelativeDate(days_before=0, time=None, base_date_name='date_from', minutes_before=60))
|
rdw = RelativeDateWrapper(RelativeDate(days_before=0, time=None, base_date_name='date_from', minutes_before=60))
|
||||||
assert rdw.to_string() == 'RELDATE/minutes/60/date_from/'
|
assert rdw.to_string() == 'RELDATE/minutes/60/date_from/'
|
||||||
assert rdw.datetime(event) == datetime(2017, 12, 27, 4, 0, 0, tzinfo=TOKYO)
|
assert rdw.datetime(event) == TOKYO.localize(datetime(2017, 12, 27, 4, 0, 0))
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
def test_relative_date_with_time(event):
|
def test_relative_date_with_time(event):
|
||||||
rdw = RelativeDateWrapper(RelativeDate(days_before=1, time=time(8, 5, 13), base_date_name='date_from', minutes_before=None))
|
rdw = RelativeDateWrapper(RelativeDate(days_before=1, time=time(8, 5, 13), base_date_name='date_from', minutes_before=None))
|
||||||
assert rdw.to_string() == 'RELDATE/1/08:05:13/date_from/'
|
assert rdw.to_string() == 'RELDATE/1/08:05:13/date_from/'
|
||||||
assert rdw.datetime(event) == datetime(2017, 12, 26, 8, 5, 13, tzinfo=TOKYO)
|
assert rdw.datetime(event) == TOKYO.localize(datetime(2017, 12, 26, 8, 5, 13))
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
def test_relative_date_with_time_around_dst(event):
|
def test_relative_date_with_time_around_dst(event):
|
||||||
event.settings.timezone = "Europe/Berlin"
|
event.settings.timezone = "Europe/Berlin"
|
||||||
event.date_from = datetime(2020, 3, 29, 18, 0, 0, tzinfo=BERLIN)
|
event.date_from = BERLIN.localize(datetime(2020, 3, 29, 18, 0, 0))
|
||||||
|
|
||||||
rdw = RelativeDateWrapper(RelativeDate(days_before=1, time=time(18, 0, 0), base_date_name='date_from', minutes_before=None))
|
rdw = RelativeDateWrapper(RelativeDate(days_before=1, time=time(18, 0, 0), base_date_name='date_from', minutes_before=None))
|
||||||
assert rdw.to_string() == 'RELDATE/1/18:00:00/date_from/'
|
assert rdw.to_string() == 'RELDATE/1/18:00:00/date_from/'
|
||||||
assert rdw.datetime(event) == datetime(2020, 3, 28, 18, 0, 0, tzinfo=BERLIN)
|
assert rdw.datetime(event) == BERLIN.localize(datetime(2020, 3, 28, 18, 0, 0))
|
||||||
|
|
||||||
rdw = RelativeDateWrapper(RelativeDate(days_before=0, time=time(2, 30, 0), base_date_name='date_from', minutes_before=None))
|
rdw = RelativeDateWrapper(RelativeDate(days_before=0, time=time(2, 30, 0), base_date_name='date_from', minutes_before=None))
|
||||||
assert rdw.to_string() == 'RELDATE/0/02:30:00/date_from/'
|
assert rdw.to_string() == 'RELDATE/0/02:30:00/date_from/'
|
||||||
assert rdw.datetime(event) == datetime(2020, 3, 29, 2, 30, 0, tzinfo=BERLIN)
|
assert rdw.datetime(event) == BERLIN.localize(datetime(2020, 3, 29, 2, 30, 0))
|
||||||
|
|
||||||
event.date_from = datetime(2020, 10, 25, 18, 0, 0, tzinfo=BERLIN)
|
event.date_from = BERLIN.localize(datetime(2020, 10, 25, 18, 0, 0))
|
||||||
|
|
||||||
rdw = RelativeDateWrapper(RelativeDate(days_before=1, time=time(18, 0, 0), base_date_name='date_from', minutes_before=None))
|
rdw = RelativeDateWrapper(RelativeDate(days_before=1, time=time(18, 0, 0), base_date_name='date_from', minutes_before=None))
|
||||||
assert rdw.to_string() == 'RELDATE/1/18:00:00/date_from/'
|
assert rdw.to_string() == 'RELDATE/1/18:00:00/date_from/'
|
||||||
assert rdw.datetime(event) == datetime(2020, 10, 24, 18, 0, 0, tzinfo=BERLIN)
|
assert rdw.datetime(event) == BERLIN.localize(datetime(2020, 10, 24, 18, 0, 0))
|
||||||
|
|
||||||
rdw = RelativeDateWrapper(RelativeDate(days_before=0, time=time(2, 30, 0), base_date_name='date_from', minutes_before=None))
|
rdw = RelativeDateWrapper(RelativeDate(days_before=0, time=time(2, 30, 0), base_date_name='date_from', minutes_before=None))
|
||||||
assert rdw.to_string() == 'RELDATE/0/02:30:00/date_from/'
|
assert rdw.to_string() == 'RELDATE/0/02:30:00/date_from/'
|
||||||
assert rdw.datetime(event) == datetime(2020, 10, 25, 2, 30, 0, tzinfo=BERLIN)
|
assert rdw.datetime(event) == BERLIN.localize(datetime(2020, 10, 25, 2, 30, 0))
|
||||||
|
|
||||||
|
|
||||||
def test_unserialize():
|
def test_unserialize():
|
||||||
|
|||||||
@@ -21,20 +21,20 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
from datetime import date, datetime
|
from datetime import date, datetime
|
||||||
from zoneinfo import ZoneInfo
|
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
import pytz
|
||||||
|
|
||||||
from pretix.base.timeframes import (
|
from pretix.base.timeframes import (
|
||||||
REPORTING_DATE_TIMEFRAMES, resolve_timeframe_to_dates_inclusive,
|
REPORTING_DATE_TIMEFRAMES, resolve_timeframe_to_dates_inclusive,
|
||||||
resolve_timeframe_to_datetime_start_inclusive_end_exclusive,
|
resolve_timeframe_to_datetime_start_inclusive_end_exclusive,
|
||||||
)
|
)
|
||||||
|
|
||||||
tz = ZoneInfo("Europe/Berlin")
|
tz = pytz.timezone("Europe/Berlin")
|
||||||
|
|
||||||
|
|
||||||
def dt(*args):
|
def dt(*args):
|
||||||
return datetime(*args, tzinfo=tz)
|
return tz.localize(datetime(*args))
|
||||||
|
|
||||||
|
|
||||||
ref_date = date(2023, 3, 28)
|
ref_date = date(2023, 3, 28)
|
||||||
|
|||||||
@@ -21,16 +21,16 @@
|
|||||||
#
|
#
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from zoneinfo import ZoneInfo
|
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
import pytz
|
||||||
from django_scopes import scope
|
from django_scopes import scope
|
||||||
|
|
||||||
from pretix.base.i18n import language
|
from pretix.base.i18n import language
|
||||||
from pretix.base.models import Event, Organizer
|
from pretix.base.models import Event, Organizer
|
||||||
from pretix.base.timeline import timeline_for_event
|
from pretix.base.timeline import timeline_for_event
|
||||||
|
|
||||||
tz = ZoneInfo('Europe/Berlin')
|
tz = pytz.timezone('Europe/Berlin')
|
||||||
|
|
||||||
|
|
||||||
def one(iterable):
|
def one(iterable):
|
||||||
|
|||||||
@@ -37,13 +37,14 @@ import datetime
|
|||||||
import time
|
import time
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from smtplib import SMTPResponseException
|
from smtplib import SMTPResponseException
|
||||||
from zoneinfo import ZoneInfo
|
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
import pytz
|
||||||
from django.test.utils import override_settings
|
from django.test.utils import override_settings
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django_scopes import scopes_disabled
|
from django_scopes import scopes_disabled
|
||||||
from i18nfield.strings import LazyI18nString
|
from i18nfield.strings import LazyI18nString
|
||||||
|
from pytz import timezone
|
||||||
from tests.base import SoupTest, extract_form_fields
|
from tests.base import SoupTest, extract_form_fields
|
||||||
|
|
||||||
from pretix.base.models import Event, LogEntry, Order, Organizer, Team, User
|
from pretix.base.models import Event, LogEntry, Order, Organizer, Team, User
|
||||||
@@ -834,11 +835,11 @@ class EventsTest(SoupTest):
|
|||||||
assert ev.location == LazyI18nString({'de': 'Hamburg', 'en': 'Hamburg'})
|
assert ev.location == LazyI18nString({'de': 'Hamburg', 'en': 'Hamburg'})
|
||||||
assert Team.objects.filter(limit_events=ev, members=self.user).exists()
|
assert Team.objects.filter(limit_events=ev, members=self.user).exists()
|
||||||
|
|
||||||
berlin_tz = ZoneInfo('Europe/Berlin')
|
berlin_tz = timezone('Europe/Berlin')
|
||||||
assert ev.date_from == datetime.datetime(2016, 12, 27, 10, 0, 0, tzinfo=berlin_tz).astimezone(datetime.timezone.utc)
|
assert ev.date_from == berlin_tz.localize(datetime.datetime(2016, 12, 27, 10, 0, 0)).astimezone(pytz.utc)
|
||||||
assert ev.date_to == datetime.datetime(2016, 12, 30, 19, 0, 0, tzinfo=berlin_tz).astimezone(datetime.timezone.utc)
|
assert ev.date_to == berlin_tz.localize(datetime.datetime(2016, 12, 30, 19, 0, 0)).astimezone(pytz.utc)
|
||||||
assert ev.presale_start == datetime.datetime(2016, 11, 1, 10, 0, 0, tzinfo=berlin_tz).astimezone(datetime.timezone.utc)
|
assert ev.presale_start == berlin_tz.localize(datetime.datetime(2016, 11, 1, 10, 0, 0)).astimezone(pytz.utc)
|
||||||
assert ev.presale_end == datetime.datetime(2016, 11, 30, 18, 0, 0, tzinfo=berlin_tz).astimezone(datetime.timezone.utc)
|
assert ev.presale_end == berlin_tz.localize(datetime.datetime(2016, 11, 30, 18, 0, 0)).astimezone(pytz.utc)
|
||||||
|
|
||||||
assert ev.tax_rules.filter(rate=Decimal('19.00')).exists()
|
assert ev.tax_rules.filter(rate=Decimal('19.00')).exists()
|
||||||
|
|
||||||
@@ -953,11 +954,11 @@ class EventsTest(SoupTest):
|
|||||||
assert Team.objects.filter(limit_events=ev, members=self.user).exists()
|
assert Team.objects.filter(limit_events=ev, members=self.user).exists()
|
||||||
assert ev.items.count() == 1
|
assert ev.items.count() == 1
|
||||||
|
|
||||||
berlin_tz = ZoneInfo('Europe/Berlin')
|
berlin_tz = timezone('Europe/Berlin')
|
||||||
assert ev.date_from == datetime.datetime(2016, 12, 27, 10, 0, 0, tzinfo=berlin_tz).astimezone(datetime.timezone.utc)
|
assert ev.date_from == berlin_tz.localize(datetime.datetime(2016, 12, 27, 10, 0, 0)).astimezone(pytz.utc)
|
||||||
assert ev.date_to == datetime.datetime(2016, 12, 30, 19, 0, 0, tzinfo=berlin_tz).astimezone(datetime.timezone.utc)
|
assert ev.date_to == berlin_tz.localize(datetime.datetime(2016, 12, 30, 19, 0, 0)).astimezone(pytz.utc)
|
||||||
assert ev.presale_start == datetime.datetime(2016, 11, 1, 10, 0, 0, tzinfo=berlin_tz).astimezone(datetime.timezone.utc)
|
assert ev.presale_start == berlin_tz.localize(datetime.datetime(2016, 11, 1, 10, 0, 0)).astimezone(pytz.utc)
|
||||||
assert ev.presale_end == datetime.datetime(2016, 11, 30, 18, 0, 0, tzinfo=berlin_tz).astimezone(datetime.timezone.utc)
|
assert ev.presale_end == berlin_tz.localize(datetime.datetime(2016, 11, 30, 18, 0, 0)).astimezone(pytz.utc)
|
||||||
|
|
||||||
assert ev.tax_rules.filter(rate=Decimal('19.00')).count() == 1
|
assert ev.tax_rules.filter(rate=Decimal('19.00')).count() == 1
|
||||||
i = ev.items.get()
|
i = ev.items.get()
|
||||||
@@ -1026,11 +1027,11 @@ class EventsTest(SoupTest):
|
|||||||
assert Team.objects.filter(limit_events=ev, members=self.user).exists()
|
assert Team.objects.filter(limit_events=ev, members=self.user).exists()
|
||||||
assert ev.items.count() == 1
|
assert ev.items.count() == 1
|
||||||
|
|
||||||
berlin_tz = ZoneInfo('Europe/Berlin')
|
berlin_tz = timezone('Europe/Berlin')
|
||||||
assert ev.date_from == datetime.datetime(2016, 12, 27, 10, 0, 0, tzinfo=berlin_tz).astimezone(datetime.timezone.utc)
|
assert ev.date_from == berlin_tz.localize(datetime.datetime(2016, 12, 27, 10, 0, 0)).astimezone(pytz.utc)
|
||||||
assert ev.date_to == datetime.datetime(2016, 12, 30, 19, 0, 0, tzinfo=berlin_tz).astimezone(datetime.timezone.utc)
|
assert ev.date_to == berlin_tz.localize(datetime.datetime(2016, 12, 30, 19, 0, 0)).astimezone(pytz.utc)
|
||||||
assert ev.presale_start == datetime.datetime(2016, 11, 1, 10, 0, 0, tzinfo=berlin_tz).astimezone(datetime.timezone.utc)
|
assert ev.presale_start == berlin_tz.localize(datetime.datetime(2016, 11, 1, 10, 0, 0)).astimezone(pytz.utc)
|
||||||
assert ev.presale_end == datetime.datetime(2016, 11, 30, 18, 0, 0, tzinfo=berlin_tz).astimezone(datetime.timezone.utc)
|
assert ev.presale_end == berlin_tz.localize(datetime.datetime(2016, 11, 30, 18, 0, 0)).astimezone(pytz.utc)
|
||||||
|
|
||||||
assert ev.tax_rules.filter(rate=Decimal('19.00')).count() == 1
|
assert ev.tax_rules.filter(rate=Decimal('19.00')).count() == 1
|
||||||
|
|
||||||
@@ -1078,7 +1079,7 @@ class EventsTest(SoupTest):
|
|||||||
assert ev.organizer == self.orga1
|
assert ev.organizer == self.orga1
|
||||||
assert ev.location == LazyI18nString({'en': 'Hamburg'})
|
assert ev.location == LazyI18nString({'en': 'Hamburg'})
|
||||||
assert Team.objects.filter(limit_events=ev, members=self.user).exists()
|
assert Team.objects.filter(limit_events=ev, members=self.user).exists()
|
||||||
assert ev.date_from == datetime.datetime(2016, 12, 27, 10, 0, 0, tzinfo=datetime.timezone.utc)
|
assert ev.date_from == datetime.datetime(2016, 12, 27, 10, 0, 0, tzinfo=pytz.utc)
|
||||||
assert ev.date_to is None
|
assert ev.date_to is None
|
||||||
assert ev.presale_start is None
|
assert ev.presale_start is None
|
||||||
assert ev.presale_end is None
|
assert ev.presale_end is None
|
||||||
@@ -1127,7 +1128,7 @@ class EventsTest(SoupTest):
|
|||||||
assert ev.location == LazyI18nString({'en': 'Hamburg'})
|
assert ev.location == LazyI18nString({'en': 'Hamburg'})
|
||||||
team = Team.objects.filter(limit_events=ev, members=self.user).first()
|
team = Team.objects.filter(limit_events=ev, members=self.user).first()
|
||||||
assert team == self.team2
|
assert team == self.team2
|
||||||
assert ev.date_from == datetime.datetime(2016, 12, 27, 10, 0, 0, tzinfo=datetime.timezone.utc)
|
assert ev.date_from == datetime.datetime(2016, 12, 27, 10, 0, 0, tzinfo=pytz.utc)
|
||||||
assert ev.date_to is None
|
assert ev.date_to is None
|
||||||
assert ev.presale_start is None
|
assert ev.presale_start is None
|
||||||
assert ev.presale_end is None
|
assert ev.presale_end is None
|
||||||
|
|||||||
@@ -21,12 +21,13 @@
|
|||||||
#
|
#
|
||||||
import copy
|
import copy
|
||||||
import json
|
import json
|
||||||
from datetime import datetime, timedelta, timezone
|
from datetime import datetime, timedelta
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django_scopes import scopes_disabled
|
from django_scopes import scopes_disabled
|
||||||
|
from pytz import UTC
|
||||||
|
|
||||||
from pretix.base.models import (
|
from pretix.base.models import (
|
||||||
Event, Item, Order, OrderPosition, Organizer, Quota, Team, User,
|
Event, Item, Order, OrderPosition, Organizer, Quota, Team, User,
|
||||||
@@ -88,7 +89,7 @@ RES_JOB = {
|
|||||||
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
def test_api_list(env, client):
|
def test_api_list(env, client):
|
||||||
testtime = datetime(2017, 12, 1, 10, 0, 0, tzinfo=timezone.utc)
|
testtime = datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC)
|
||||||
|
|
||||||
with mock.patch('django.utils.timezone.now') as mock_now:
|
with mock.patch('django.utils.timezone.now') as mock_now:
|
||||||
mock_now.return_value = testtime
|
mock_now.return_value = testtime
|
||||||
@@ -108,7 +109,7 @@ def test_api_list(env, client):
|
|||||||
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
def test_api_detail(env, client):
|
def test_api_detail(env, client):
|
||||||
testtime = datetime(2017, 12, 1, 10, 0, 0, tzinfo=timezone.UTC)
|
testtime = datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC)
|
||||||
|
|
||||||
with mock.patch('django.utils.timezone.now') as mock_now:
|
with mock.patch('django.utils.timezone.now') as mock_now:
|
||||||
mock_now.return_value = testtime
|
mock_now.return_value = testtime
|
||||||
|
|||||||
@@ -21,9 +21,9 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
from zoneinfo import ZoneInfo
|
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
import pytz
|
||||||
from django.core import mail as djmail
|
from django.core import mail as djmail
|
||||||
from django.utils.timezone import now, utc
|
from django.utils.timezone import now, utc
|
||||||
from django_scopes import scopes_disabled
|
from django_scopes import scopes_disabled
|
||||||
@@ -46,8 +46,8 @@ def test_sendmail_rule_create_single(event):
|
|||||||
|
|
||||||
|
|
||||||
dt_now = now()
|
dt_now = now()
|
||||||
NZ = ZoneInfo('NZ')
|
NZ = pytz.timezone('NZ')
|
||||||
Berlin = ZoneInfo('Europe/Berlin')
|
Berlin = pytz.timezone('Europe/Berlin')
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
@@ -101,28 +101,28 @@ Berlin = ZoneInfo('Europe/Berlin')
|
|||||||
datetime.datetime(2020, 2, 29, 9, tzinfo=utc)
|
datetime.datetime(2020, 2, 29, 9, tzinfo=utc)
|
||||||
),
|
),
|
||||||
( # Test timezone far off from UTC
|
( # Test timezone far off from UTC
|
||||||
datetime.datetime(2021, 5, 17, 22, tzinfo=NZ),
|
NZ.localize(datetime.datetime(2021, 5, 17, 22)),
|
||||||
None,
|
None,
|
||||||
'NZ',
|
'NZ',
|
||||||
Rule(date_is_absolute=False, offset_is_after=True, send_offset_days=1, send_offset_time=datetime.time(hour=9)),
|
Rule(date_is_absolute=False, offset_is_after=True, send_offset_days=1, send_offset_time=datetime.time(hour=9)),
|
||||||
datetime.datetime(2021, 5, 18, 9, tzinfo=NZ)
|
NZ.localize(datetime.datetime(2021, 5, 18, 9))
|
||||||
),
|
),
|
||||||
( # Test across DST change
|
( # Test across DST change
|
||||||
datetime.datetime(2021, 10, 29, 16, 30, tzinfo=Berlin),
|
Berlin.localize(datetime.datetime(2021, 10, 29, 16, 30)),
|
||||||
None,
|
None,
|
||||||
'Europe/Berlin',
|
'Europe/Berlin',
|
||||||
Rule(date_is_absolute=False, offset_is_after=True, send_offset_days=4, send_offset_time=datetime.time(hour=2, minute=30)),
|
Rule(date_is_absolute=False, offset_is_after=True, send_offset_days=4, send_offset_time=datetime.time(hour=2, minute=30)),
|
||||||
datetime.datetime(2021, 11, 2, 2, 30, tzinfo=Berlin)
|
Berlin.localize(datetime.datetime(2021, 11, 2, 2, 30))
|
||||||
),
|
),
|
||||||
( # Test ambiguous time at DST change
|
( # Test ambiguous time at DST change
|
||||||
datetime.datetime(2021, 10, 29, 18, 30, tzinfo=Berlin),
|
Berlin.localize(datetime.datetime(2021, 10, 29, 18, 30)),
|
||||||
None,
|
None,
|
||||||
'Europe/Berlin',
|
'Europe/Berlin',
|
||||||
Rule(date_is_absolute=False, offset_is_after=True, send_offset_days=2, send_offset_time=datetime.time(hour=2, minute=30)),
|
Rule(date_is_absolute=False, offset_is_after=True, send_offset_days=2, send_offset_time=datetime.time(hour=2, minute=30)),
|
||||||
datetime.datetime(2021, 10, 31, 1, 30, tzinfo=utc)
|
datetime.datetime(2021, 10, 31, 1, 30, tzinfo=utc)
|
||||||
),
|
),
|
||||||
( # Test non-existing time at DST change
|
( # Test non-existing time at DST change
|
||||||
datetime.datetime(2021, 3, 29, 14, 30, tzinfo=Berlin),
|
Berlin.localize(datetime.datetime(2021, 3, 29, 14, 30)),
|
||||||
None,
|
None,
|
||||||
'Europe/Berlin',
|
'Europe/Berlin',
|
||||||
Rule(date_is_absolute=False, offset_is_after=False, send_offset_days=1, send_offset_time=datetime.time(hour=2, minute=30)),
|
Rule(date_is_absolute=False, offset_is_after=False, send_offset_days=1, send_offset_time=datetime.time(hour=2, minute=30)),
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import datetime
|
|||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
import pytz
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django_scopes import scope
|
from django_scopes import scope
|
||||||
|
|
||||||
@@ -50,7 +51,7 @@ def event():
|
|||||||
order_paid = Order.objects.create(
|
order_paid = Order.objects.create(
|
||||||
code='FOO', event=event, email='dummy@dummy.test', phone="+498912345678",
|
code='FOO', event=event, email='dummy@dummy.test', phone="+498912345678",
|
||||||
status=Order.STATUS_PAID,
|
status=Order.STATUS_PAID,
|
||||||
datetime=datetime.datetime(2019, 2, 22, 14, 0, 0, tzinfo=datetime.timezone.utc), expires=now() + datetime.timedelta(days=10),
|
datetime=datetime.datetime(2019, 2, 22, 14, 0, 0, tzinfo=pytz.UTC), expires=now() + datetime.timedelta(days=10),
|
||||||
total=33, locale='en'
|
total=33, locale='en'
|
||||||
)
|
)
|
||||||
item_ticket = Item.objects.create(event=event, name="Ticket", default_price=23, admission=True)
|
item_ticket = Item.objects.create(event=event, name="Ticket", default_price=23, admission=True)
|
||||||
@@ -146,7 +147,7 @@ def test_csv_order_by_inherited_name_parts(event): # noqa
|
|||||||
order2 = Order.objects.create(
|
order2 = Order.objects.create(
|
||||||
code='BAR', event=event, email='dummy@dummy.test', phone='+498912345678',
|
code='BAR', event=event, email='dummy@dummy.test', phone='+498912345678',
|
||||||
status=Order.STATUS_PAID,
|
status=Order.STATUS_PAID,
|
||||||
datetime=datetime.datetime(2019, 2, 22, 14, 0, 0, tzinfo=datetime.timezone.utc), expires=now() + datetime.timedelta(days=10),
|
datetime=datetime.datetime(2019, 2, 22, 14, 0, 0, tzinfo=pytz.UTC), expires=now() + datetime.timedelta(days=10),
|
||||||
total=33, locale='en'
|
total=33, locale='en'
|
||||||
)
|
)
|
||||||
OrderPosition.objects.create(
|
OrderPosition.objects.create(
|
||||||
|
|||||||
@@ -37,7 +37,6 @@ import datetime
|
|||||||
import re
|
import re
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from json import loads
|
from json import loads
|
||||||
from zoneinfo import ZoneInfo
|
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core import mail
|
from django.core import mail
|
||||||
@@ -45,6 +44,7 @@ from django.core.exceptions import ValidationError
|
|||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django_scopes import scopes_disabled
|
from django_scopes import scopes_disabled
|
||||||
|
from pytz import timezone
|
||||||
from tests.base import SoupTest
|
from tests.base import SoupTest
|
||||||
from tests.testdummy.signals import FoobarSalesChannel
|
from tests.testdummy.signals import FoobarSalesChannel
|
||||||
|
|
||||||
@@ -1390,11 +1390,11 @@ class EventIcalDownloadTest(EventTestMixin, SoupTest):
|
|||||||
fmt = '%Y%m%dT%H%M%S'
|
fmt = '%Y%m%dT%H%M%S'
|
||||||
self.assertIn('DTSTART;TZID=%s:%s' %
|
self.assertIn('DTSTART;TZID=%s:%s' %
|
||||||
(self.event.settings.timezone,
|
(self.event.settings.timezone,
|
||||||
self.event.date_from.astimezone(ZoneInfo(self.event.settings.timezone)).strftime(fmt)),
|
self.event.date_from.astimezone(timezone(self.event.settings.timezone)).strftime(fmt)),
|
||||||
ical, 'incorrect start time')
|
ical, 'incorrect start time')
|
||||||
self.assertIn('DTEND;TZID=%s:%s' %
|
self.assertIn('DTEND;TZID=%s:%s' %
|
||||||
(self.event.settings.timezone,
|
(self.event.settings.timezone,
|
||||||
self.event.date_to.astimezone(ZoneInfo(self.event.settings.timezone)).strftime(fmt)),
|
self.event.date_to.astimezone(timezone(self.event.settings.timezone)).strftime(fmt)),
|
||||||
ical, 'incorrect end time')
|
ical, 'incorrect end time')
|
||||||
self.assertIn('TZID:%s' % self.event.settings.timezone, ical, 'missing VCALENDAR')
|
self.assertIn('TZID:%s' % self.event.settings.timezone, ical, 'missing VCALENDAR')
|
||||||
|
|
||||||
@@ -1413,7 +1413,7 @@ class EventIcalDownloadTest(EventTestMixin, SoupTest):
|
|||||||
fmt = '%Y%m%dT%H%M%S'
|
fmt = '%Y%m%dT%H%M%S'
|
||||||
self.assertIn('DTSTART;TZID=%s:%s' %
|
self.assertIn('DTSTART;TZID=%s:%s' %
|
||||||
(self.event.settings.timezone,
|
(self.event.settings.timezone,
|
||||||
self.event.date_from.astimezone(ZoneInfo(self.event.settings.timezone)).strftime(fmt)),
|
self.event.date_from.astimezone(timezone(self.event.settings.timezone)).strftime(fmt)),
|
||||||
ical, 'incorrect start time')
|
ical, 'incorrect start time')
|
||||||
self.assertNotIn('DTEND', ical, 'unexpected end time attribute')
|
self.assertNotIn('DTEND', ical, 'unexpected end time attribute')
|
||||||
|
|
||||||
|
|||||||
@@ -19,11 +19,12 @@
|
|||||||
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
|
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
|
||||||
# <https://www.gnu.org/licenses/>.
|
# <https://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
from datetime import datetime, timedelta, timezone
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django_scopes import scopes_disabled
|
from django_scopes import scopes_disabled
|
||||||
|
from pytz import UTC
|
||||||
|
|
||||||
from pretix.base.models import Event, Organizer
|
from pretix.base.models import Event, Organizer
|
||||||
|
|
||||||
@@ -148,7 +149,7 @@ def test_calendar(env, client):
|
|||||||
env[0].settings.event_list_type = 'calendar'
|
env[0].settings.event_list_type = 'calendar'
|
||||||
e = Event.objects.create(
|
e = Event.objects.create(
|
||||||
organizer=env[0], name='MRMCD2017', slug='2017',
|
organizer=env[0], name='MRMCD2017', slug='2017',
|
||||||
date_from=datetime(now().year + 1, 9, 1, tzinfo=timezone.utc),
|
date_from=datetime(now().year + 1, 9, 1, tzinfo=UTC),
|
||||||
live=True, is_public=False
|
live=True, is_public=False
|
||||||
)
|
)
|
||||||
r = client.get('/mrmcd/?style=calendar')
|
r = client.get('/mrmcd/?style=calendar')
|
||||||
@@ -168,7 +169,7 @@ def test_week_calendar(env, client):
|
|||||||
env[0].settings.event_list_type = 'calendar'
|
env[0].settings.event_list_type = 'calendar'
|
||||||
e = Event.objects.create(
|
e = Event.objects.create(
|
||||||
organizer=env[0], name='MRMCD2017', slug='2017',
|
organizer=env[0], name='MRMCD2017', slug='2017',
|
||||||
date_from=datetime(now().year + 1, 9, 1, tzinfo=timezone.utc),
|
date_from=datetime(now().year + 1, 9, 1, tzinfo=UTC),
|
||||||
live=True, is_public=False
|
live=True, is_public=False
|
||||||
)
|
)
|
||||||
r = client.get('/mrmcd/?style=week')
|
r = client.get('/mrmcd/?style=week')
|
||||||
@@ -186,7 +187,7 @@ def test_attributes_in_calendar(env, client):
|
|||||||
env[0].settings.event_list_type = 'calendar'
|
env[0].settings.event_list_type = 'calendar'
|
||||||
e = Event.objects.create(
|
e = Event.objects.create(
|
||||||
organizer=env[0], name='MRMCD2017', slug='2017',
|
organizer=env[0], name='MRMCD2017', slug='2017',
|
||||||
date_from=datetime(now().year + 1, 9, 1, tzinfo=timezone.utc),
|
date_from=datetime(now().year + 1, 9, 1, tzinfo=UTC),
|
||||||
live=True, is_public=True
|
live=True, is_public=True
|
||||||
)
|
)
|
||||||
prop = env[0].meta_properties.create(name='loc')
|
prop = env[0].meta_properties.create(name='loc')
|
||||||
@@ -202,7 +203,7 @@ def test_attributes_in_calendar(env, client):
|
|||||||
def test_ics(env, client):
|
def test_ics(env, client):
|
||||||
e = Event.objects.create(
|
e = Event.objects.create(
|
||||||
organizer=env[0], name='MRMCD2017', slug='2017',
|
organizer=env[0], name='MRMCD2017', slug='2017',
|
||||||
date_from=datetime(now().year + 1, 9, 1, tzinfo=timezone.utc),
|
date_from=datetime(now().year + 1, 9, 1, tzinfo=UTC),
|
||||||
live=True, is_public=False
|
live=True, is_public=False
|
||||||
)
|
)
|
||||||
r = client.get('/mrmcd/events/ical/')
|
r = client.get('/mrmcd/events/ical/')
|
||||||
@@ -217,7 +218,7 @@ def test_ics(env, client):
|
|||||||
def test_ics_subevents(env, client):
|
def test_ics_subevents(env, client):
|
||||||
e = Event.objects.create(
|
e = Event.objects.create(
|
||||||
organizer=env[0], name='MRMCD2017', slug='2017',
|
organizer=env[0], name='MRMCD2017', slug='2017',
|
||||||
date_from=datetime(now().year + 1, 9, 1, tzinfo=timezone.utc),
|
date_from=datetime(now().year + 1, 9, 1, tzinfo=UTC),
|
||||||
live=True, is_public=True, has_subevents=True
|
live=True, is_public=True, has_subevents=True
|
||||||
)
|
)
|
||||||
with scopes_disabled():
|
with scopes_disabled():
|
||||||
@@ -231,12 +232,12 @@ def test_ics_subevents(env, client):
|
|||||||
def test_ics_subevents_attributes(env, client):
|
def test_ics_subevents_attributes(env, client):
|
||||||
e0 = Event.objects.create(
|
e0 = Event.objects.create(
|
||||||
organizer=env[0], name='DS2017', slug='DS2017',
|
organizer=env[0], name='DS2017', slug='DS2017',
|
||||||
date_from=datetime(now().year + 1, 9, 1, tzinfo=timezone.utc),
|
date_from=datetime(now().year + 1, 9, 1, tzinfo=UTC),
|
||||||
live=True, is_public=True
|
live=True, is_public=True
|
||||||
)
|
)
|
||||||
e = Event.objects.create(
|
e = Event.objects.create(
|
||||||
organizer=env[0], name='MRMCD2017', slug='2017',
|
organizer=env[0], name='MRMCD2017', slug='2017',
|
||||||
date_from=datetime(now().year + 1, 9, 1, tzinfo=timezone.utc),
|
date_from=datetime(now().year + 1, 9, 1, tzinfo=UTC),
|
||||||
live=True, is_public=True, has_subevents=True
|
live=True, is_public=True, has_subevents=True
|
||||||
)
|
)
|
||||||
with scopes_disabled():
|
with scopes_disabled():
|
||||||
|
|||||||
Reference in New Issue
Block a user