diff --git a/brutaldon/forms.py b/brutaldon/forms.py
index 1064fa6..dfc6bd1 100644
--- a/brutaldon/forms.py
+++ b/brutaldon/forms.py
@@ -5,69 +5,91 @@ from pytz import common_timezones
from .models import Theme, Preference
-PRIVACY_CHOICES = (('public', _('Public')),
- ('unlisted', _('Unlisted')),
- ('private', _('Private')),
- ('direct', _('Direct')))
+PRIVACY_CHOICES = (
+ ("public", _("Public")),
+ ("unlisted", _("Unlisted")),
+ ("private", _("Private")),
+ ("direct", _("Direct")),
+)
+
+timezones = [(tz, tz) for tz in common_timezones]
-timezones = [ (tz, tz) for tz in common_timezones]
class LoginForm(forms.Form):
- instance = forms.CharField(label=_("Instance"),
- max_length=256)
+ instance = forms.CharField(label=_("Instance"), max_length=256)
email = forms.EmailField(label=_("Email"))
password = forms.CharField(widget=forms.PasswordInput())
+
class OAuthLoginForm(forms.Form):
- instance = forms.CharField(label=_("Instance"),
- max_length=256)
+ instance = forms.CharField(label=_("Instance"), max_length=256)
+
class PreferencesForm(forms.ModelForm):
class Meta:
model = Preference
- fields = ['theme', 'filter_replies', 'filter_boosts', 'timezone',
- 'no_javascript', 'notifications', 'click_to_load', 'lightbox',
- 'filter_notifications', 'poll_frequency']
+ fields = [
+ "theme",
+ "filter_replies",
+ "filter_boosts",
+ "timezone",
+ "no_javascript",
+ "notifications",
+ "click_to_load",
+ "lightbox",
+ "filter_notifications",
+ "poll_frequency",
+ ]
+
class PostForm(forms.Form):
"""def status_post(self, status, in_reply_to_id=None, media_ids=None,
sensitive=False, visibility=None, spoiler_text=None):"""
+
status = forms.CharField(label="Toot", widget=forms.Textarea)
- visibility = forms.ChoiceField(label=_("Toot visibility"), choices=PRIVACY_CHOICES,
- required=False)
- spoiler_text = forms.CharField(label=_("CW or Subject"),
- required=False)
- media_file_1 = forms.FileField(label = _("Media 1"),
- required=False)
- media_text_1 = forms.CharField(label=_("Describe media 1."),
- required=False)
- media_file_2 = forms.FileField(label = _("Media 2"),
- required=False)
- media_text_2 = forms.CharField(label=_("Describe media 2."),
- required=False)
- media_file_3 = forms.FileField(label = _("Media 3"),
- required=False)
- media_text_3 = forms.CharField(label=_("Describe media 3."),
- required=False)
- media_file_4 = forms.FileField(label = _("Media 4"),
- required=False)
- media_text_4 = forms.CharField(label=_("Describe media 4."),
- required=False)
+ visibility = forms.ChoiceField(
+ label=_("Toot visibility"), choices=PRIVACY_CHOICES, required=False
+ )
+ spoiler_text = forms.CharField(label=_("CW or Subject"), required=False)
+ media_file_1 = forms.FileField(label=_("Media 1"), required=False)
+ media_text_1 = forms.CharField(label=_("Describe media 1."), required=False)
+ media_file_2 = forms.FileField(label=_("Media 2"), required=False)
+ media_text_2 = forms.CharField(label=_("Describe media 2."), required=False)
+ media_file_3 = forms.FileField(label=_("Media 3"), required=False)
+ media_text_3 = forms.CharField(label=_("Describe media 3."), required=False)
+ media_file_4 = forms.FileField(label=_("Media 4"), required=False)
+ media_text_4 = forms.CharField(label=_("Describe media 4."), required=False)
media_sensitive = forms.BooleanField(label=_("Sensitive media?"), required=False)
+
class FilterForm(forms.Form):
phrase = forms.CharField(label=_("Word or phrase to filter"))
- context_home = forms.BooleanField(label=_("In home timeline"), required=False, initial=True)
- context_public = forms.BooleanField(label=_("In public timelines"), required=False, initial=True)
- context_notes = forms.BooleanField(label=_("In notifications"), required=False, initial=True)
- context_thread = forms.BooleanField(label=_("In thread contexts"), required=False, initial=True)
- whole_word = forms.BooleanField(label=_("Whole words only"), required=False, initial=True)
- expires_in = forms.TypedChoiceField(label=_("Expires in"),
- choices=(("", "Never"),
- ("1800", "30 minutes"),
- ("3600", "1 hour"),
- ("21600", "6 hours"),
- ("43200", "12 hours"),
- ("86400", "1 day"),
- ("604800", "1 week")),
- coerce=int, required=False)
+ context_home = forms.BooleanField(
+ label=_("In home timeline"), required=False, initial=True
+ )
+ context_public = forms.BooleanField(
+ label=_("In public timelines"), required=False, initial=True
+ )
+ context_notes = forms.BooleanField(
+ label=_("In notifications"), required=False, initial=True
+ )
+ context_thread = forms.BooleanField(
+ label=_("In thread contexts"), required=False, initial=True
+ )
+ whole_word = forms.BooleanField(
+ label=_("Whole words only"), required=False, initial=True
+ )
+ expires_in = forms.TypedChoiceField(
+ label=_("Expires in"),
+ choices=(
+ ("", "Never"),
+ ("1800", "30 minutes"),
+ ("3600", "1 hour"),
+ ("21600", "6 hours"),
+ ("43200", "12 hours"),
+ ("86400", "1 day"),
+ ("604800", "1 week"),
+ ),
+ coerce=int,
+ required=False,
+ )
diff --git a/brutaldon/middleware/timezone.py b/brutaldon/middleware/timezone.py
index 0cba5b6..397a4c9 100644
--- a/brutaldon/middleware/timezone.py
+++ b/brutaldon/middleware/timezone.py
@@ -3,9 +3,10 @@ import pytz
from django.utils import timezone
from django.utils.deprecation import MiddlewareMixin
+
class TimezoneMiddleware(MiddlewareMixin):
def process_request(self, request):
- tzname = request.session.get('timezone', "UTC")
+ tzname = request.session.get("timezone", "UTC")
if tzname:
timezone.activate(pytz.timezone(tzname))
else:
diff --git a/brutaldon/migrations/0001_initial.py b/brutaldon/migrations/0001_initial.py
index 83207f5..e161ce2 100644
--- a/brutaldon/migrations/0001_initial.py
+++ b/brutaldon/migrations/0001_initial.py
@@ -7,18 +7,25 @@ class Migration(migrations.Migration):
initial = True
- dependencies = [
- ]
+ dependencies = []
operations = [
migrations.CreateModel(
- name='Client',
+ name="Client",
fields=[
- ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('name', models.TextField(default='brutaldon')),
- ('api_base_id', models.URLField(default='mastodon.social')),
- ('client_id', models.TextField(blank=True, null=True)),
- ('client_secret', models.TextField(blank=True, null=True)),
+ (
+ "id",
+ models.AutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ ("name", models.TextField(default="brutaldon")),
+ ("api_base_id", models.URLField(default="mastodon.social")),
+ ("client_id", models.TextField(blank=True, null=True)),
+ ("client_secret", models.TextField(blank=True, null=True)),
],
- ),
+ )
]
diff --git a/brutaldon/migrations/0002_account.py b/brutaldon/migrations/0002_account.py
index f755886..147869b 100644
--- a/brutaldon/migrations/0002_account.py
+++ b/brutaldon/migrations/0002_account.py
@@ -9,17 +9,32 @@ class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
- ('brutaldon', '0001_initial'),
+ ("brutaldon", "0001_initial"),
]
operations = [
migrations.CreateModel(
- name='Account',
+ name="Account",
fields=[
- ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('username', models.CharField(max_length=80)),
- ('access_token', models.TextField(blank=True, null=True)),
- ('django_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
+ (
+ "id",
+ models.AutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ ("username", models.CharField(max_length=80)),
+ ("access_token", models.TextField(blank=True, null=True)),
+ (
+ "django_user",
+ models.ForeignKey(
+ null=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ to=settings.AUTH_USER_MODEL,
+ ),
+ ),
],
- ),
+ )
]
diff --git a/brutaldon/migrations/0003_auto_20180424_1255.py b/brutaldon/migrations/0003_auto_20180424_1255.py
index d4b32bb..72571f1 100644
--- a/brutaldon/migrations/0003_auto_20180424_1255.py
+++ b/brutaldon/migrations/0003_auto_20180424_1255.py
@@ -6,19 +6,21 @@ import django.db.models.deletion
class Migration(migrations.Migration):
- dependencies = [
- ('brutaldon', '0002_account'),
- ]
+ dependencies = [("brutaldon", "0002_account")]
operations = [
migrations.AddField(
- model_name='account',
- name='client',
- field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='brutaldon.Client'),
+ model_name="account",
+ name="client",
+ field=models.ForeignKey(
+ null=True,
+ on_delete=django.db.models.deletion.SET_NULL,
+ to="brutaldon.Client",
+ ),
),
migrations.AlterField(
- model_name='client',
- name='api_base_id',
- field=models.URLField(default='https://mastodon.social'),
+ model_name="client",
+ name="api_base_id",
+ field=models.URLField(default="https://mastodon.social"),
),
]
diff --git a/brutaldon/migrations/0004_auto_20180424_1424.py b/brutaldon/migrations/0004_auto_20180424_1424.py
index 4f62141..13a194d 100644
--- a/brutaldon/migrations/0004_auto_20180424_1424.py
+++ b/brutaldon/migrations/0004_auto_20180424_1424.py
@@ -5,14 +5,12 @@ from django.db import migrations, models
class Migration(migrations.Migration):
- dependencies = [
- ('brutaldon', '0003_auto_20180424_1255'),
- ]
+ dependencies = [("brutaldon", "0003_auto_20180424_1255")]
operations = [
migrations.AlterField(
- model_name='account',
- name='username',
+ model_name="account",
+ name="username",
field=models.EmailField(max_length=254),
- ),
+ )
]
diff --git a/brutaldon/migrations/0005_auto_20180618_2103.py b/brutaldon/migrations/0005_auto_20180618_2103.py
index 112af5f..a0d839e 100644
--- a/brutaldon/migrations/0005_auto_20180618_2103.py
+++ b/brutaldon/migrations/0005_auto_20180618_2103.py
@@ -6,37 +6,62 @@ import django.db.models.deletion
class Migration(migrations.Migration):
- dependencies = [
- ('brutaldon', '0004_auto_20180424_1424'),
- ]
+ dependencies = [("brutaldon", "0004_auto_20180424_1424")]
operations = [
migrations.CreateModel(
- name='Preference',
+ name="Preference",
fields=[
- ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('data_saver', models.BooleanField(default=False)),
- ('fix_emojos', models.BooleanField(default=False)),
+ (
+ "id",
+ models.AutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ ("data_saver", models.BooleanField(default=False)),
+ ("fix_emojos", models.BooleanField(default=False)),
],
),
migrations.CreateModel(
- name='Theme',
+ name="Theme",
fields=[
- ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('name', models.TextField(max_length=80)),
- ('main_css', models.TextField(max_length=1024)),
- ('tweaks_css', models.TextField(blank=True, max_length=1024, null=True)),
- ('is_brutalist', models.BooleanField(default=False)),
+ (
+ "id",
+ models.AutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ ("name", models.TextField(max_length=80)),
+ ("main_css", models.TextField(max_length=1024)),
+ (
+ "tweaks_css",
+ models.TextField(blank=True, max_length=1024, null=True),
+ ),
+ ("is_brutalist", models.BooleanField(default=False)),
],
),
migrations.AddField(
- model_name='preference',
- name='theme',
- field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='brutaldon.Theme'),
+ model_name="preference",
+ name="theme",
+ field=models.ForeignKey(
+ null=True,
+ on_delete=django.db.models.deletion.SET_NULL,
+ to="brutaldon.Theme",
+ ),
),
migrations.AddField(
- model_name='account',
- name='preferences',
- field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='brutaldon.Preference'),
+ model_name="account",
+ name="preferences",
+ field=models.ForeignKey(
+ null=True,
+ on_delete=django.db.models.deletion.SET_NULL,
+ to="brutaldon.Preference",
+ ),
),
]
diff --git a/brutaldon/migrations/0006_auto_20180618_2112.py b/brutaldon/migrations/0006_auto_20180618_2112.py
index 843bc18..d369c3f 100644
--- a/brutaldon/migrations/0006_auto_20180618_2112.py
+++ b/brutaldon/migrations/0006_auto_20180618_2112.py
@@ -5,14 +5,14 @@ from django.db import migrations, models
class Migration(migrations.Migration):
- dependencies = [
- ('brutaldon', '0005_auto_20180618_2103'),
- ]
+ dependencies = [("brutaldon", "0005_auto_20180618_2103")]
operations = [
migrations.AlterField(
- model_name='theme',
- name='main_css',
- field=models.TextField(blank=True, default='css/fullbrutalism.css', max_length=1024, null=True),
- ),
+ model_name="theme",
+ name="main_css",
+ field=models.TextField(
+ blank=True, default="css/fullbrutalism.css", max_length=1024, null=True
+ ),
+ )
]
diff --git a/brutaldon/migrations/0007_auto_20180618_2115.py b/brutaldon/migrations/0007_auto_20180618_2115.py
index 25b155d..3715d64 100644
--- a/brutaldon/migrations/0007_auto_20180618_2115.py
+++ b/brutaldon/migrations/0007_auto_20180618_2115.py
@@ -2,67 +2,80 @@
from django.db import migrations
+
def set_up_default_themes(apps, schema_editor):
- Theme = apps.get_model('brutaldon', 'Theme')
- default = Theme(name="default",
- main_css="css/bulma.min.css",
- tweaks_css="css/brutaldon.css",
- is_brutalist=False)
+ Theme = apps.get_model("brutaldon", "Theme")
+ default = Theme(
+ name="default",
+ main_css="css/bulma.min.css",
+ tweaks_css="css/brutaldon.css",
+ is_brutalist=False,
+ )
default.save()
- dark = Theme(name="default dark",
- main_css="css/bulmaswatch-darkly.min.css",
- tweaks_css="css/brutaldon-dark.css",
- is_brutalist=False)
+ dark = Theme(
+ name="default dark",
+ main_css="css/bulmaswatch-darkly.min.css",
+ tweaks_css="css/brutaldon-dark.css",
+ is_brutalist=False,
+ )
dark.save()
- lux = Theme(name="Lux",
- main_css="css/bulmaswatch-lux.min.css",
- tweaks_css="css/brutaldon.css",
- is_brutalist=False)
+ lux = Theme(
+ name="Lux",
+ main_css="css/bulmaswatch-lux.min.css",
+ tweaks_css="css/brutaldon.css",
+ is_brutalist=False,
+ )
lux.save()
- solar = Theme(name="Solar",
- main_css="css/bulmaswatch-solar.min.css",
- tweaks_css="css/brutaldon.css",
- is_brutalist=False)
+ solar = Theme(
+ name="Solar",
+ main_css="css/bulmaswatch-solar.min.css",
+ tweaks_css="css/brutaldon.css",
+ is_brutalist=False,
+ )
solar.save()
- brutalism = Theme(name="FULLBRUTALISM",
- main_css="css/fullbrutalism.css",
- is_brutalist=True)
+ brutalism = Theme(
+ name="FULLBRUTALISM", main_css="css/fullbrutalism.css", is_brutalist=True
+ )
brutalism.save()
- brutstrap = Theme(name="Brutstrap",
- main_css="css/brutstrap.css",
- is_brutalist=True,
- tweaks_css="css/brutstrap-tweaks.css")
+ brutstrap = Theme(
+ name="Brutstrap",
+ main_css="css/brutstrap.css",
+ is_brutalist=True,
+ tweaks_css="css/brutstrap-tweaks.css",
+ )
brutstrap.save()
- large = Theme(name="Minimalist Large", main_css="css/minimal-large.css",
- is_brutalist=True)
+ large = Theme(
+ name="Minimalist Large", main_css="css/minimal-large.css", is_brutalist=True
+ )
large.save()
- small = Theme(name="Minimalist Small", main_css="css/minimal-small.css",
- is_brutalist=True)
+ small = Theme(
+ name="Minimalist Small", main_css="css/minimal-small.css", is_brutalist=True
+ )
small.save()
- dark2 = Theme(name="Minimalist Dark", main_css="css/minimal-dark.css",
- is_brutalist=True)
+ dark2 = Theme(
+ name="Minimalist Dark", main_css="css/minimal-dark.css", is_brutalist=True
+ )
dark2.save()
- vt240 = Theme(name="vt240 amber", main_css="css/vt240don-amber.css",
- is_brutalist=True)
+ vt240 = Theme(
+ name="vt240 amber", main_css="css/vt240don-amber.css", is_brutalist=True
+ )
vt240.save()
- vt240_green = Theme(name="vt240 green", main_css="css/vt240don-green.css",
- is_brutalist=True)
+ vt240_green = Theme(
+ name="vt240 green", main_css="css/vt240don-green.css", is_brutalist=True
+ )
vt240_green.save()
minimal = Theme(name="No styling at all", main_css=None, is_brutalist=True)
minimal.save()
+
def delete_themes(apps, schema_editor):
- Theme = apps.get_model('brutaldon' 'Theme')
+ Theme = apps.get_model("brutaldon" "Theme")
for theme in Theme.objects.all():
theme.delete()
class Migration(migrations.Migration):
- dependencies = [
- ('brutaldon', '0006_auto_20180618_2112'),
- ]
+ dependencies = [("brutaldon", "0006_auto_20180618_2112")]
- operations = [
- migrations.RunPython(set_up_default_themes, delete_themes)
- ]
+ operations = [migrations.RunPython(set_up_default_themes, delete_themes)]
diff --git a/brutaldon/migrations/0008_auto_20180618_2140.py b/brutaldon/migrations/0008_auto_20180618_2140.py
index 16f1b2b..7086055 100644
--- a/brutaldon/migrations/0008_auto_20180618_2140.py
+++ b/brutaldon/migrations/0008_auto_20180618_2140.py
@@ -5,14 +5,12 @@ from django.db import migrations, models
class Migration(migrations.Migration):
- dependencies = [
- ('brutaldon', '0007_auto_20180618_2115'),
- ]
+ dependencies = [("brutaldon", "0007_auto_20180618_2115")]
operations = [
migrations.AlterField(
- model_name='theme',
- name='name',
+ model_name="theme",
+ name="name",
field=models.TextField(max_length=80, unique=True),
- ),
+ )
]
diff --git a/brutaldon/migrations/0009_auto_20180824_2241.py b/brutaldon/migrations/0009_auto_20180824_2241.py
index df8c32c..ed237b3 100644
--- a/brutaldon/migrations/0009_auto_20180824_2241.py
+++ b/brutaldon/migrations/0009_auto_20180824_2241.py
@@ -5,42 +5,488 @@ from django.db import migrations, models
class Migration(migrations.Migration):
- dependencies = [
- ('brutaldon', '0008_auto_20180618_2140'),
- ]
+ dependencies = [("brutaldon", "0008_auto_20180618_2140")]
operations = [
- migrations.RemoveField(
- model_name='preference',
- name='data_saver',
- ),
- migrations.RemoveField(
- model_name='preference',
- name='fix_emojos',
- ),
+ migrations.RemoveField(model_name="preference", name="data_saver"),
+ migrations.RemoveField(model_name="preference", name="fix_emojos"),
migrations.AddField(
- model_name='account',
- name='email',
+ model_name="account",
+ name="email",
field=models.EmailField(blank=True, max_length=254, null=True),
),
migrations.AddField(
- model_name='preference',
- name='filter_boosts',
+ model_name="preference",
+ name="filter_boosts",
field=models.BooleanField(default=False),
),
migrations.AddField(
- model_name='preference',
- name='filter_replies',
+ model_name="preference",
+ name="filter_replies",
field=models.BooleanField(default=False),
),
migrations.AddField(
- model_name='preference',
- name='timezone',
- field=models.TextField(blank=True, choices=[('Africa/Abidjan', 'Africa/Abidjan'), ('Africa/Accra', 'Africa/Accra'), ('Africa/Addis_Ababa', 'Africa/Addis_Ababa'), ('Africa/Algiers', 'Africa/Algiers'), ('Africa/Asmara', 'Africa/Asmara'), ('Africa/Bamako', 'Africa/Bamako'), ('Africa/Bangui', 'Africa/Bangui'), ('Africa/Banjul', 'Africa/Banjul'), ('Africa/Bissau', 'Africa/Bissau'), ('Africa/Blantyre', 'Africa/Blantyre'), ('Africa/Brazzaville', 'Africa/Brazzaville'), ('Africa/Bujumbura', 'Africa/Bujumbura'), ('Africa/Cairo', 'Africa/Cairo'), ('Africa/Casablanca', 'Africa/Casablanca'), ('Africa/Ceuta', 'Africa/Ceuta'), ('Africa/Conakry', 'Africa/Conakry'), ('Africa/Dakar', 'Africa/Dakar'), ('Africa/Dar_es_Salaam', 'Africa/Dar_es_Salaam'), ('Africa/Djibouti', 'Africa/Djibouti'), ('Africa/Douala', 'Africa/Douala'), ('Africa/El_Aaiun', 'Africa/El_Aaiun'), ('Africa/Freetown', 'Africa/Freetown'), ('Africa/Gaborone', 'Africa/Gaborone'), ('Africa/Harare', 'Africa/Harare'), ('Africa/Johannesburg', 'Africa/Johannesburg'), ('Africa/Juba', 'Africa/Juba'), ('Africa/Kampala', 'Africa/Kampala'), ('Africa/Khartoum', 'Africa/Khartoum'), ('Africa/Kigali', 'Africa/Kigali'), ('Africa/Kinshasa', 'Africa/Kinshasa'), ('Africa/Lagos', 'Africa/Lagos'), ('Africa/Libreville', 'Africa/Libreville'), ('Africa/Lome', 'Africa/Lome'), ('Africa/Luanda', 'Africa/Luanda'), ('Africa/Lubumbashi', 'Africa/Lubumbashi'), ('Africa/Lusaka', 'Africa/Lusaka'), ('Africa/Malabo', 'Africa/Malabo'), ('Africa/Maputo', 'Africa/Maputo'), ('Africa/Maseru', 'Africa/Maseru'), ('Africa/Mbabane', 'Africa/Mbabane'), ('Africa/Mogadishu', 'Africa/Mogadishu'), ('Africa/Monrovia', 'Africa/Monrovia'), ('Africa/Nairobi', 'Africa/Nairobi'), ('Africa/Ndjamena', 'Africa/Ndjamena'), ('Africa/Niamey', 'Africa/Niamey'), ('Africa/Nouakchott', 'Africa/Nouakchott'), ('Africa/Ouagadougou', 'Africa/Ouagadougou'), ('Africa/Porto-Novo', 'Africa/Porto-Novo'), ('Africa/Sao_Tome', 'Africa/Sao_Tome'), ('Africa/Tripoli', 'Africa/Tripoli'), ('Africa/Tunis', 'Africa/Tunis'), ('Africa/Windhoek', 'Africa/Windhoek'), ('America/Adak', 'America/Adak'), ('America/Anchorage', 'America/Anchorage'), ('America/Anguilla', 'America/Anguilla'), ('America/Antigua', 'America/Antigua'), ('America/Araguaina', 'America/Araguaina'), ('America/Argentina/Buenos_Aires', 'America/Argentina/Buenos_Aires'), ('America/Argentina/Catamarca', 'America/Argentina/Catamarca'), ('America/Argentina/Cordoba', 'America/Argentina/Cordoba'), ('America/Argentina/Jujuy', 'America/Argentina/Jujuy'), ('America/Argentina/La_Rioja', 'America/Argentina/La_Rioja'), ('America/Argentina/Mendoza', 'America/Argentina/Mendoza'), ('America/Argentina/Rio_Gallegos', 'America/Argentina/Rio_Gallegos'), ('America/Argentina/Salta', 'America/Argentina/Salta'), ('America/Argentina/San_Juan', 'America/Argentina/San_Juan'), ('America/Argentina/San_Luis', 'America/Argentina/San_Luis'), ('America/Argentina/Tucuman', 'America/Argentina/Tucuman'), ('America/Argentina/Ushuaia', 'America/Argentina/Ushuaia'), ('America/Aruba', 'America/Aruba'), ('America/Asuncion', 'America/Asuncion'), ('America/Atikokan', 'America/Atikokan'), ('America/Bahia', 'America/Bahia'), ('America/Bahia_Banderas', 'America/Bahia_Banderas'), ('America/Barbados', 'America/Barbados'), ('America/Belem', 'America/Belem'), ('America/Belize', 'America/Belize'), ('America/Blanc-Sablon', 'America/Blanc-Sablon'), ('America/Boa_Vista', 'America/Boa_Vista'), ('America/Bogota', 'America/Bogota'), ('America/Boise', 'America/Boise'), ('America/Cambridge_Bay', 'America/Cambridge_Bay'), ('America/Campo_Grande', 'America/Campo_Grande'), ('America/Cancun', 'America/Cancun'), ('America/Caracas', 'America/Caracas'), ('America/Cayenne', 'America/Cayenne'), ('America/Cayman', 'America/Cayman'), ('America/Chicago', 'America/Chicago'), ('America/Chihuahua', 'America/Chihuahua'), ('America/Costa_Rica', 'America/Costa_Rica'), ('America/Creston', 'America/Creston'), ('America/Cuiaba', 'America/Cuiaba'), ('America/Curacao', 'America/Curacao'), ('America/Danmarkshavn', 'America/Danmarkshavn'), ('America/Dawson', 'America/Dawson'), ('America/Dawson_Creek', 'America/Dawson_Creek'), ('America/Denver', 'America/Denver'), ('America/Detroit', 'America/Detroit'), ('America/Dominica', 'America/Dominica'), ('America/Edmonton', 'America/Edmonton'), ('America/Eirunepe', 'America/Eirunepe'), ('America/El_Salvador', 'America/El_Salvador'), ('America/Fort_Nelson', 'America/Fort_Nelson'), ('America/Fortaleza', 'America/Fortaleza'), ('America/Glace_Bay', 'America/Glace_Bay'), ('America/Godthab', 'America/Godthab'), ('America/Goose_Bay', 'America/Goose_Bay'), ('America/Grand_Turk', 'America/Grand_Turk'), ('America/Grenada', 'America/Grenada'), ('America/Guadeloupe', 'America/Guadeloupe'), ('America/Guatemala', 'America/Guatemala'), ('America/Guayaquil', 'America/Guayaquil'), ('America/Guyana', 'America/Guyana'), ('America/Halifax', 'America/Halifax'), ('America/Havana', 'America/Havana'), ('America/Hermosillo', 'America/Hermosillo'), ('America/Indiana/Indianapolis', 'America/Indiana/Indianapolis'), ('America/Indiana/Knox', 'America/Indiana/Knox'), ('America/Indiana/Marengo', 'America/Indiana/Marengo'), ('America/Indiana/Petersburg', 'America/Indiana/Petersburg'), ('America/Indiana/Tell_City', 'America/Indiana/Tell_City'), ('America/Indiana/Vevay', 'America/Indiana/Vevay'), ('America/Indiana/Vincennes', 'America/Indiana/Vincennes'), ('America/Indiana/Winamac', 'America/Indiana/Winamac'), ('America/Inuvik', 'America/Inuvik'), ('America/Iqaluit', 'America/Iqaluit'), ('America/Jamaica', 'America/Jamaica'), ('America/Juneau', 'America/Juneau'), ('America/Kentucky/Louisville', 'America/Kentucky/Louisville'), ('America/Kentucky/Monticello', 'America/Kentucky/Monticello'), ('America/Kralendijk', 'America/Kralendijk'), ('America/La_Paz', 'America/La_Paz'), ('America/Lima', 'America/Lima'), ('America/Los_Angeles', 'America/Los_Angeles'), ('America/Lower_Princes', 'America/Lower_Princes'), ('America/Maceio', 'America/Maceio'), ('America/Managua', 'America/Managua'), ('America/Manaus', 'America/Manaus'), ('America/Marigot', 'America/Marigot'), ('America/Martinique', 'America/Martinique'), ('America/Matamoros', 'America/Matamoros'), ('America/Mazatlan', 'America/Mazatlan'), ('America/Menominee', 'America/Menominee'), ('America/Merida', 'America/Merida'), ('America/Metlakatla', 'America/Metlakatla'), ('America/Mexico_City', 'America/Mexico_City'), ('America/Miquelon', 'America/Miquelon'), ('America/Moncton', 'America/Moncton'), ('America/Monterrey', 'America/Monterrey'), ('America/Montevideo', 'America/Montevideo'), ('America/Montserrat', 'America/Montserrat'), ('America/Nassau', 'America/Nassau'), ('America/New_York', 'America/New_York'), ('America/Nipigon', 'America/Nipigon'), ('America/Nome', 'America/Nome'), ('America/Noronha', 'America/Noronha'), ('America/North_Dakota/Beulah', 'America/North_Dakota/Beulah'), ('America/North_Dakota/Center', 'America/North_Dakota/Center'), ('America/North_Dakota/New_Salem', 'America/North_Dakota/New_Salem'), ('America/Ojinaga', 'America/Ojinaga'), ('America/Panama', 'America/Panama'), ('America/Pangnirtung', 'America/Pangnirtung'), ('America/Paramaribo', 'America/Paramaribo'), ('America/Phoenix', 'America/Phoenix'), ('America/Port-au-Prince', 'America/Port-au-Prince'), ('America/Port_of_Spain', 'America/Port_of_Spain'), ('America/Porto_Velho', 'America/Porto_Velho'), ('America/Puerto_Rico', 'America/Puerto_Rico'), ('America/Punta_Arenas', 'America/Punta_Arenas'), ('America/Rainy_River', 'America/Rainy_River'), ('America/Rankin_Inlet', 'America/Rankin_Inlet'), ('America/Recife', 'America/Recife'), ('America/Regina', 'America/Regina'), ('America/Resolute', 'America/Resolute'), ('America/Rio_Branco', 'America/Rio_Branco'), ('America/Santarem', 'America/Santarem'), ('America/Santiago', 'America/Santiago'), ('America/Santo_Domingo', 'America/Santo_Domingo'), ('America/Sao_Paulo', 'America/Sao_Paulo'), ('America/Scoresbysund', 'America/Scoresbysund'), ('America/Sitka', 'America/Sitka'), ('America/St_Barthelemy', 'America/St_Barthelemy'), ('America/St_Johns', 'America/St_Johns'), ('America/St_Kitts', 'America/St_Kitts'), ('America/St_Lucia', 'America/St_Lucia'), ('America/St_Thomas', 'America/St_Thomas'), ('America/St_Vincent', 'America/St_Vincent'), ('America/Swift_Current', 'America/Swift_Current'), ('America/Tegucigalpa', 'America/Tegucigalpa'), ('America/Thule', 'America/Thule'), ('America/Thunder_Bay', 'America/Thunder_Bay'), ('America/Tijuana', 'America/Tijuana'), ('America/Toronto', 'America/Toronto'), ('America/Tortola', 'America/Tortola'), ('America/Vancouver', 'America/Vancouver'), ('America/Whitehorse', 'America/Whitehorse'), ('America/Winnipeg', 'America/Winnipeg'), ('America/Yakutat', 'America/Yakutat'), ('America/Yellowknife', 'America/Yellowknife'), ('Antarctica/Casey', 'Antarctica/Casey'), ('Antarctica/Davis', 'Antarctica/Davis'), ('Antarctica/DumontDUrville', 'Antarctica/DumontDUrville'), ('Antarctica/Macquarie', 'Antarctica/Macquarie'), ('Antarctica/Mawson', 'Antarctica/Mawson'), ('Antarctica/McMurdo', 'Antarctica/McMurdo'), ('Antarctica/Palmer', 'Antarctica/Palmer'), ('Antarctica/Rothera', 'Antarctica/Rothera'), ('Antarctica/Syowa', 'Antarctica/Syowa'), ('Antarctica/Troll', 'Antarctica/Troll'), ('Antarctica/Vostok', 'Antarctica/Vostok'), ('Arctic/Longyearbyen', 'Arctic/Longyearbyen'), ('Asia/Aden', 'Asia/Aden'), ('Asia/Almaty', 'Asia/Almaty'), ('Asia/Amman', 'Asia/Amman'), ('Asia/Anadyr', 'Asia/Anadyr'), ('Asia/Aqtau', 'Asia/Aqtau'), ('Asia/Aqtobe', 'Asia/Aqtobe'), ('Asia/Ashgabat', 'Asia/Ashgabat'), ('Asia/Atyrau', 'Asia/Atyrau'), ('Asia/Baghdad', 'Asia/Baghdad'), ('Asia/Bahrain', 'Asia/Bahrain'), ('Asia/Baku', 'Asia/Baku'), ('Asia/Bangkok', 'Asia/Bangkok'), ('Asia/Barnaul', 'Asia/Barnaul'), ('Asia/Beirut', 'Asia/Beirut'), ('Asia/Bishkek', 'Asia/Bishkek'), ('Asia/Brunei', 'Asia/Brunei'), ('Asia/Chita', 'Asia/Chita'), ('Asia/Choibalsan', 'Asia/Choibalsan'), ('Asia/Colombo', 'Asia/Colombo'), ('Asia/Damascus', 'Asia/Damascus'), ('Asia/Dhaka', 'Asia/Dhaka'), ('Asia/Dili', 'Asia/Dili'), ('Asia/Dubai', 'Asia/Dubai'), ('Asia/Dushanbe', 'Asia/Dushanbe'), ('Asia/Famagusta', 'Asia/Famagusta'), ('Asia/Gaza', 'Asia/Gaza'), ('Asia/Hebron', 'Asia/Hebron'), ('Asia/Ho_Chi_Minh', 'Asia/Ho_Chi_Minh'), ('Asia/Hong_Kong', 'Asia/Hong_Kong'), ('Asia/Hovd', 'Asia/Hovd'), ('Asia/Irkutsk', 'Asia/Irkutsk'), ('Asia/Jakarta', 'Asia/Jakarta'), ('Asia/Jayapura', 'Asia/Jayapura'), ('Asia/Jerusalem', 'Asia/Jerusalem'), ('Asia/Kabul', 'Asia/Kabul'), ('Asia/Kamchatka', 'Asia/Kamchatka'), ('Asia/Karachi', 'Asia/Karachi'), ('Asia/Kathmandu', 'Asia/Kathmandu'), ('Asia/Khandyga', 'Asia/Khandyga'), ('Asia/Kolkata', 'Asia/Kolkata'), ('Asia/Krasnoyarsk', 'Asia/Krasnoyarsk'), ('Asia/Kuala_Lumpur', 'Asia/Kuala_Lumpur'), ('Asia/Kuching', 'Asia/Kuching'), ('Asia/Kuwait', 'Asia/Kuwait'), ('Asia/Macau', 'Asia/Macau'), ('Asia/Magadan', 'Asia/Magadan'), ('Asia/Makassar', 'Asia/Makassar'), ('Asia/Manila', 'Asia/Manila'), ('Asia/Muscat', 'Asia/Muscat'), ('Asia/Nicosia', 'Asia/Nicosia'), ('Asia/Novokuznetsk', 'Asia/Novokuznetsk'), ('Asia/Novosibirsk', 'Asia/Novosibirsk'), ('Asia/Omsk', 'Asia/Omsk'), ('Asia/Oral', 'Asia/Oral'), ('Asia/Phnom_Penh', 'Asia/Phnom_Penh'), ('Asia/Pontianak', 'Asia/Pontianak'), ('Asia/Pyongyang', 'Asia/Pyongyang'), ('Asia/Qatar', 'Asia/Qatar'), ('Asia/Qyzylorda', 'Asia/Qyzylorda'), ('Asia/Riyadh', 'Asia/Riyadh'), ('Asia/Sakhalin', 'Asia/Sakhalin'), ('Asia/Samarkand', 'Asia/Samarkand'), ('Asia/Seoul', 'Asia/Seoul'), ('Asia/Shanghai', 'Asia/Shanghai'), ('Asia/Singapore', 'Asia/Singapore'), ('Asia/Srednekolymsk', 'Asia/Srednekolymsk'), ('Asia/Taipei', 'Asia/Taipei'), ('Asia/Tashkent', 'Asia/Tashkent'), ('Asia/Tbilisi', 'Asia/Tbilisi'), ('Asia/Tehran', 'Asia/Tehran'), ('Asia/Thimphu', 'Asia/Thimphu'), ('Asia/Tokyo', 'Asia/Tokyo'), ('Asia/Tomsk', 'Asia/Tomsk'), ('Asia/Ulaanbaatar', 'Asia/Ulaanbaatar'), ('Asia/Urumqi', 'Asia/Urumqi'), ('Asia/Ust-Nera', 'Asia/Ust-Nera'), ('Asia/Vientiane', 'Asia/Vientiane'), ('Asia/Vladivostok', 'Asia/Vladivostok'), ('Asia/Yakutsk', 'Asia/Yakutsk'), ('Asia/Yangon', 'Asia/Yangon'), ('Asia/Yekaterinburg', 'Asia/Yekaterinburg'), ('Asia/Yerevan', 'Asia/Yerevan'), ('Atlantic/Azores', 'Atlantic/Azores'), ('Atlantic/Bermuda', 'Atlantic/Bermuda'), ('Atlantic/Canary', 'Atlantic/Canary'), ('Atlantic/Cape_Verde', 'Atlantic/Cape_Verde'), ('Atlantic/Faroe', 'Atlantic/Faroe'), ('Atlantic/Madeira', 'Atlantic/Madeira'), ('Atlantic/Reykjavik', 'Atlantic/Reykjavik'), ('Atlantic/South_Georgia', 'Atlantic/South_Georgia'), ('Atlantic/St_Helena', 'Atlantic/St_Helena'), ('Atlantic/Stanley', 'Atlantic/Stanley'), ('Australia/Adelaide', 'Australia/Adelaide'), ('Australia/Brisbane', 'Australia/Brisbane'), ('Australia/Broken_Hill', 'Australia/Broken_Hill'), ('Australia/Currie', 'Australia/Currie'), ('Australia/Darwin', 'Australia/Darwin'), ('Australia/Eucla', 'Australia/Eucla'), ('Australia/Hobart', 'Australia/Hobart'), ('Australia/Lindeman', 'Australia/Lindeman'), ('Australia/Lord_Howe', 'Australia/Lord_Howe'), ('Australia/Melbourne', 'Australia/Melbourne'), ('Australia/Perth', 'Australia/Perth'), ('Australia/Sydney', 'Australia/Sydney'), ('Canada/Atlantic', 'Canada/Atlantic'), ('Canada/Central', 'Canada/Central'), ('Canada/Eastern', 'Canada/Eastern'), ('Canada/Mountain', 'Canada/Mountain'), ('Canada/Newfoundland', 'Canada/Newfoundland'), ('Canada/Pacific', 'Canada/Pacific'), ('Europe/Amsterdam', 'Europe/Amsterdam'), ('Europe/Andorra', 'Europe/Andorra'), ('Europe/Astrakhan', 'Europe/Astrakhan'), ('Europe/Athens', 'Europe/Athens'), ('Europe/Belgrade', 'Europe/Belgrade'), ('Europe/Berlin', 'Europe/Berlin'), ('Europe/Bratislava', 'Europe/Bratislava'), ('Europe/Brussels', 'Europe/Brussels'), ('Europe/Bucharest', 'Europe/Bucharest'), ('Europe/Budapest', 'Europe/Budapest'), ('Europe/Busingen', 'Europe/Busingen'), ('Europe/Chisinau', 'Europe/Chisinau'), ('Europe/Copenhagen', 'Europe/Copenhagen'), ('Europe/Dublin', 'Europe/Dublin'), ('Europe/Gibraltar', 'Europe/Gibraltar'), ('Europe/Guernsey', 'Europe/Guernsey'), ('Europe/Helsinki', 'Europe/Helsinki'), ('Europe/Isle_of_Man', 'Europe/Isle_of_Man'), ('Europe/Istanbul', 'Europe/Istanbul'), ('Europe/Jersey', 'Europe/Jersey'), ('Europe/Kaliningrad', 'Europe/Kaliningrad'), ('Europe/Kiev', 'Europe/Kiev'), ('Europe/Kirov', 'Europe/Kirov'), ('Europe/Lisbon', 'Europe/Lisbon'), ('Europe/Ljubljana', 'Europe/Ljubljana'), ('Europe/London', 'Europe/London'), ('Europe/Luxembourg', 'Europe/Luxembourg'), ('Europe/Madrid', 'Europe/Madrid'), ('Europe/Malta', 'Europe/Malta'), ('Europe/Mariehamn', 'Europe/Mariehamn'), ('Europe/Minsk', 'Europe/Minsk'), ('Europe/Monaco', 'Europe/Monaco'), ('Europe/Moscow', 'Europe/Moscow'), ('Europe/Oslo', 'Europe/Oslo'), ('Europe/Paris', 'Europe/Paris'), ('Europe/Podgorica', 'Europe/Podgorica'), ('Europe/Prague', 'Europe/Prague'), ('Europe/Riga', 'Europe/Riga'), ('Europe/Rome', 'Europe/Rome'), ('Europe/Samara', 'Europe/Samara'), ('Europe/San_Marino', 'Europe/San_Marino'), ('Europe/Sarajevo', 'Europe/Sarajevo'), ('Europe/Saratov', 'Europe/Saratov'), ('Europe/Simferopol', 'Europe/Simferopol'), ('Europe/Skopje', 'Europe/Skopje'), ('Europe/Sofia', 'Europe/Sofia'), ('Europe/Stockholm', 'Europe/Stockholm'), ('Europe/Tallinn', 'Europe/Tallinn'), ('Europe/Tirane', 'Europe/Tirane'), ('Europe/Ulyanovsk', 'Europe/Ulyanovsk'), ('Europe/Uzhgorod', 'Europe/Uzhgorod'), ('Europe/Vaduz', 'Europe/Vaduz'), ('Europe/Vatican', 'Europe/Vatican'), ('Europe/Vienna', 'Europe/Vienna'), ('Europe/Vilnius', 'Europe/Vilnius'), ('Europe/Volgograd', 'Europe/Volgograd'), ('Europe/Warsaw', 'Europe/Warsaw'), ('Europe/Zagreb', 'Europe/Zagreb'), ('Europe/Zaporozhye', 'Europe/Zaporozhye'), ('Europe/Zurich', 'Europe/Zurich'), ('GMT', 'GMT'), ('Indian/Antananarivo', 'Indian/Antananarivo'), ('Indian/Chagos', 'Indian/Chagos'), ('Indian/Christmas', 'Indian/Christmas'), ('Indian/Cocos', 'Indian/Cocos'), ('Indian/Comoro', 'Indian/Comoro'), ('Indian/Kerguelen', 'Indian/Kerguelen'), ('Indian/Mahe', 'Indian/Mahe'), ('Indian/Maldives', 'Indian/Maldives'), ('Indian/Mauritius', 'Indian/Mauritius'), ('Indian/Mayotte', 'Indian/Mayotte'), ('Indian/Reunion', 'Indian/Reunion'), ('Pacific/Apia', 'Pacific/Apia'), ('Pacific/Auckland', 'Pacific/Auckland'), ('Pacific/Bougainville', 'Pacific/Bougainville'), ('Pacific/Chatham', 'Pacific/Chatham'), ('Pacific/Chuuk', 'Pacific/Chuuk'), ('Pacific/Easter', 'Pacific/Easter'), ('Pacific/Efate', 'Pacific/Efate'), ('Pacific/Enderbury', 'Pacific/Enderbury'), ('Pacific/Fakaofo', 'Pacific/Fakaofo'), ('Pacific/Fiji', 'Pacific/Fiji'), ('Pacific/Funafuti', 'Pacific/Funafuti'), ('Pacific/Galapagos', 'Pacific/Galapagos'), ('Pacific/Gambier', 'Pacific/Gambier'), ('Pacific/Guadalcanal', 'Pacific/Guadalcanal'), ('Pacific/Guam', 'Pacific/Guam'), ('Pacific/Honolulu', 'Pacific/Honolulu'), ('Pacific/Kiritimati', 'Pacific/Kiritimati'), ('Pacific/Kosrae', 'Pacific/Kosrae'), ('Pacific/Kwajalein', 'Pacific/Kwajalein'), ('Pacific/Majuro', 'Pacific/Majuro'), ('Pacific/Marquesas', 'Pacific/Marquesas'), ('Pacific/Midway', 'Pacific/Midway'), ('Pacific/Nauru', 'Pacific/Nauru'), ('Pacific/Niue', 'Pacific/Niue'), ('Pacific/Norfolk', 'Pacific/Norfolk'), ('Pacific/Noumea', 'Pacific/Noumea'), ('Pacific/Pago_Pago', 'Pacific/Pago_Pago'), ('Pacific/Palau', 'Pacific/Palau'), ('Pacific/Pitcairn', 'Pacific/Pitcairn'), ('Pacific/Pohnpei', 'Pacific/Pohnpei'), ('Pacific/Port_Moresby', 'Pacific/Port_Moresby'), ('Pacific/Rarotonga', 'Pacific/Rarotonga'), ('Pacific/Saipan', 'Pacific/Saipan'), ('Pacific/Tahiti', 'Pacific/Tahiti'), ('Pacific/Tarawa', 'Pacific/Tarawa'), ('Pacific/Tongatapu', 'Pacific/Tongatapu'), ('Pacific/Wake', 'Pacific/Wake'), ('Pacific/Wallis', 'Pacific/Wallis'), ('US/Alaska', 'US/Alaska'), ('US/Arizona', 'US/Arizona'), ('US/Central', 'US/Central'), ('US/Eastern', 'US/Eastern'), ('US/Hawaii', 'US/Hawaii'), ('US/Mountain', 'US/Mountain'), ('US/Pacific', 'US/Pacific'), ('UTC', 'UTC')], max_length=80, null=True),
+ model_name="preference",
+ name="timezone",
+ field=models.TextField(
+ blank=True,
+ choices=[
+ ("Africa/Abidjan", "Africa/Abidjan"),
+ ("Africa/Accra", "Africa/Accra"),
+ ("Africa/Addis_Ababa", "Africa/Addis_Ababa"),
+ ("Africa/Algiers", "Africa/Algiers"),
+ ("Africa/Asmara", "Africa/Asmara"),
+ ("Africa/Bamako", "Africa/Bamako"),
+ ("Africa/Bangui", "Africa/Bangui"),
+ ("Africa/Banjul", "Africa/Banjul"),
+ ("Africa/Bissau", "Africa/Bissau"),
+ ("Africa/Blantyre", "Africa/Blantyre"),
+ ("Africa/Brazzaville", "Africa/Brazzaville"),
+ ("Africa/Bujumbura", "Africa/Bujumbura"),
+ ("Africa/Cairo", "Africa/Cairo"),
+ ("Africa/Casablanca", "Africa/Casablanca"),
+ ("Africa/Ceuta", "Africa/Ceuta"),
+ ("Africa/Conakry", "Africa/Conakry"),
+ ("Africa/Dakar", "Africa/Dakar"),
+ ("Africa/Dar_es_Salaam", "Africa/Dar_es_Salaam"),
+ ("Africa/Djibouti", "Africa/Djibouti"),
+ ("Africa/Douala", "Africa/Douala"),
+ ("Africa/El_Aaiun", "Africa/El_Aaiun"),
+ ("Africa/Freetown", "Africa/Freetown"),
+ ("Africa/Gaborone", "Africa/Gaborone"),
+ ("Africa/Harare", "Africa/Harare"),
+ ("Africa/Johannesburg", "Africa/Johannesburg"),
+ ("Africa/Juba", "Africa/Juba"),
+ ("Africa/Kampala", "Africa/Kampala"),
+ ("Africa/Khartoum", "Africa/Khartoum"),
+ ("Africa/Kigali", "Africa/Kigali"),
+ ("Africa/Kinshasa", "Africa/Kinshasa"),
+ ("Africa/Lagos", "Africa/Lagos"),
+ ("Africa/Libreville", "Africa/Libreville"),
+ ("Africa/Lome", "Africa/Lome"),
+ ("Africa/Luanda", "Africa/Luanda"),
+ ("Africa/Lubumbashi", "Africa/Lubumbashi"),
+ ("Africa/Lusaka", "Africa/Lusaka"),
+ ("Africa/Malabo", "Africa/Malabo"),
+ ("Africa/Maputo", "Africa/Maputo"),
+ ("Africa/Maseru", "Africa/Maseru"),
+ ("Africa/Mbabane", "Africa/Mbabane"),
+ ("Africa/Mogadishu", "Africa/Mogadishu"),
+ ("Africa/Monrovia", "Africa/Monrovia"),
+ ("Africa/Nairobi", "Africa/Nairobi"),
+ ("Africa/Ndjamena", "Africa/Ndjamena"),
+ ("Africa/Niamey", "Africa/Niamey"),
+ ("Africa/Nouakchott", "Africa/Nouakchott"),
+ ("Africa/Ouagadougou", "Africa/Ouagadougou"),
+ ("Africa/Porto-Novo", "Africa/Porto-Novo"),
+ ("Africa/Sao_Tome", "Africa/Sao_Tome"),
+ ("Africa/Tripoli", "Africa/Tripoli"),
+ ("Africa/Tunis", "Africa/Tunis"),
+ ("Africa/Windhoek", "Africa/Windhoek"),
+ ("America/Adak", "America/Adak"),
+ ("America/Anchorage", "America/Anchorage"),
+ ("America/Anguilla", "America/Anguilla"),
+ ("America/Antigua", "America/Antigua"),
+ ("America/Araguaina", "America/Araguaina"),
+ (
+ "America/Argentina/Buenos_Aires",
+ "America/Argentina/Buenos_Aires",
+ ),
+ ("America/Argentina/Catamarca", "America/Argentina/Catamarca"),
+ ("America/Argentina/Cordoba", "America/Argentina/Cordoba"),
+ ("America/Argentina/Jujuy", "America/Argentina/Jujuy"),
+ ("America/Argentina/La_Rioja", "America/Argentina/La_Rioja"),
+ ("America/Argentina/Mendoza", "America/Argentina/Mendoza"),
+ (
+ "America/Argentina/Rio_Gallegos",
+ "America/Argentina/Rio_Gallegos",
+ ),
+ ("America/Argentina/Salta", "America/Argentina/Salta"),
+ ("America/Argentina/San_Juan", "America/Argentina/San_Juan"),
+ ("America/Argentina/San_Luis", "America/Argentina/San_Luis"),
+ ("America/Argentina/Tucuman", "America/Argentina/Tucuman"),
+ ("America/Argentina/Ushuaia", "America/Argentina/Ushuaia"),
+ ("America/Aruba", "America/Aruba"),
+ ("America/Asuncion", "America/Asuncion"),
+ ("America/Atikokan", "America/Atikokan"),
+ ("America/Bahia", "America/Bahia"),
+ ("America/Bahia_Banderas", "America/Bahia_Banderas"),
+ ("America/Barbados", "America/Barbados"),
+ ("America/Belem", "America/Belem"),
+ ("America/Belize", "America/Belize"),
+ ("America/Blanc-Sablon", "America/Blanc-Sablon"),
+ ("America/Boa_Vista", "America/Boa_Vista"),
+ ("America/Bogota", "America/Bogota"),
+ ("America/Boise", "America/Boise"),
+ ("America/Cambridge_Bay", "America/Cambridge_Bay"),
+ ("America/Campo_Grande", "America/Campo_Grande"),
+ ("America/Cancun", "America/Cancun"),
+ ("America/Caracas", "America/Caracas"),
+ ("America/Cayenne", "America/Cayenne"),
+ ("America/Cayman", "America/Cayman"),
+ ("America/Chicago", "America/Chicago"),
+ ("America/Chihuahua", "America/Chihuahua"),
+ ("America/Costa_Rica", "America/Costa_Rica"),
+ ("America/Creston", "America/Creston"),
+ ("America/Cuiaba", "America/Cuiaba"),
+ ("America/Curacao", "America/Curacao"),
+ ("America/Danmarkshavn", "America/Danmarkshavn"),
+ ("America/Dawson", "America/Dawson"),
+ ("America/Dawson_Creek", "America/Dawson_Creek"),
+ ("America/Denver", "America/Denver"),
+ ("America/Detroit", "America/Detroit"),
+ ("America/Dominica", "America/Dominica"),
+ ("America/Edmonton", "America/Edmonton"),
+ ("America/Eirunepe", "America/Eirunepe"),
+ ("America/El_Salvador", "America/El_Salvador"),
+ ("America/Fort_Nelson", "America/Fort_Nelson"),
+ ("America/Fortaleza", "America/Fortaleza"),
+ ("America/Glace_Bay", "America/Glace_Bay"),
+ ("America/Godthab", "America/Godthab"),
+ ("America/Goose_Bay", "America/Goose_Bay"),
+ ("America/Grand_Turk", "America/Grand_Turk"),
+ ("America/Grenada", "America/Grenada"),
+ ("America/Guadeloupe", "America/Guadeloupe"),
+ ("America/Guatemala", "America/Guatemala"),
+ ("America/Guayaquil", "America/Guayaquil"),
+ ("America/Guyana", "America/Guyana"),
+ ("America/Halifax", "America/Halifax"),
+ ("America/Havana", "America/Havana"),
+ ("America/Hermosillo", "America/Hermosillo"),
+ ("America/Indiana/Indianapolis", "America/Indiana/Indianapolis"),
+ ("America/Indiana/Knox", "America/Indiana/Knox"),
+ ("America/Indiana/Marengo", "America/Indiana/Marengo"),
+ ("America/Indiana/Petersburg", "America/Indiana/Petersburg"),
+ ("America/Indiana/Tell_City", "America/Indiana/Tell_City"),
+ ("America/Indiana/Vevay", "America/Indiana/Vevay"),
+ ("America/Indiana/Vincennes", "America/Indiana/Vincennes"),
+ ("America/Indiana/Winamac", "America/Indiana/Winamac"),
+ ("America/Inuvik", "America/Inuvik"),
+ ("America/Iqaluit", "America/Iqaluit"),
+ ("America/Jamaica", "America/Jamaica"),
+ ("America/Juneau", "America/Juneau"),
+ ("America/Kentucky/Louisville", "America/Kentucky/Louisville"),
+ ("America/Kentucky/Monticello", "America/Kentucky/Monticello"),
+ ("America/Kralendijk", "America/Kralendijk"),
+ ("America/La_Paz", "America/La_Paz"),
+ ("America/Lima", "America/Lima"),
+ ("America/Los_Angeles", "America/Los_Angeles"),
+ ("America/Lower_Princes", "America/Lower_Princes"),
+ ("America/Maceio", "America/Maceio"),
+ ("America/Managua", "America/Managua"),
+ ("America/Manaus", "America/Manaus"),
+ ("America/Marigot", "America/Marigot"),
+ ("America/Martinique", "America/Martinique"),
+ ("America/Matamoros", "America/Matamoros"),
+ ("America/Mazatlan", "America/Mazatlan"),
+ ("America/Menominee", "America/Menominee"),
+ ("America/Merida", "America/Merida"),
+ ("America/Metlakatla", "America/Metlakatla"),
+ ("America/Mexico_City", "America/Mexico_City"),
+ ("America/Miquelon", "America/Miquelon"),
+ ("America/Moncton", "America/Moncton"),
+ ("America/Monterrey", "America/Monterrey"),
+ ("America/Montevideo", "America/Montevideo"),
+ ("America/Montserrat", "America/Montserrat"),
+ ("America/Nassau", "America/Nassau"),
+ ("America/New_York", "America/New_York"),
+ ("America/Nipigon", "America/Nipigon"),
+ ("America/Nome", "America/Nome"),
+ ("America/Noronha", "America/Noronha"),
+ ("America/North_Dakota/Beulah", "America/North_Dakota/Beulah"),
+ ("America/North_Dakota/Center", "America/North_Dakota/Center"),
+ (
+ "America/North_Dakota/New_Salem",
+ "America/North_Dakota/New_Salem",
+ ),
+ ("America/Ojinaga", "America/Ojinaga"),
+ ("America/Panama", "America/Panama"),
+ ("America/Pangnirtung", "America/Pangnirtung"),
+ ("America/Paramaribo", "America/Paramaribo"),
+ ("America/Phoenix", "America/Phoenix"),
+ ("America/Port-au-Prince", "America/Port-au-Prince"),
+ ("America/Port_of_Spain", "America/Port_of_Spain"),
+ ("America/Porto_Velho", "America/Porto_Velho"),
+ ("America/Puerto_Rico", "America/Puerto_Rico"),
+ ("America/Punta_Arenas", "America/Punta_Arenas"),
+ ("America/Rainy_River", "America/Rainy_River"),
+ ("America/Rankin_Inlet", "America/Rankin_Inlet"),
+ ("America/Recife", "America/Recife"),
+ ("America/Regina", "America/Regina"),
+ ("America/Resolute", "America/Resolute"),
+ ("America/Rio_Branco", "America/Rio_Branco"),
+ ("America/Santarem", "America/Santarem"),
+ ("America/Santiago", "America/Santiago"),
+ ("America/Santo_Domingo", "America/Santo_Domingo"),
+ ("America/Sao_Paulo", "America/Sao_Paulo"),
+ ("America/Scoresbysund", "America/Scoresbysund"),
+ ("America/Sitka", "America/Sitka"),
+ ("America/St_Barthelemy", "America/St_Barthelemy"),
+ ("America/St_Johns", "America/St_Johns"),
+ ("America/St_Kitts", "America/St_Kitts"),
+ ("America/St_Lucia", "America/St_Lucia"),
+ ("America/St_Thomas", "America/St_Thomas"),
+ ("America/St_Vincent", "America/St_Vincent"),
+ ("America/Swift_Current", "America/Swift_Current"),
+ ("America/Tegucigalpa", "America/Tegucigalpa"),
+ ("America/Thule", "America/Thule"),
+ ("America/Thunder_Bay", "America/Thunder_Bay"),
+ ("America/Tijuana", "America/Tijuana"),
+ ("America/Toronto", "America/Toronto"),
+ ("America/Tortola", "America/Tortola"),
+ ("America/Vancouver", "America/Vancouver"),
+ ("America/Whitehorse", "America/Whitehorse"),
+ ("America/Winnipeg", "America/Winnipeg"),
+ ("America/Yakutat", "America/Yakutat"),
+ ("America/Yellowknife", "America/Yellowknife"),
+ ("Antarctica/Casey", "Antarctica/Casey"),
+ ("Antarctica/Davis", "Antarctica/Davis"),
+ ("Antarctica/DumontDUrville", "Antarctica/DumontDUrville"),
+ ("Antarctica/Macquarie", "Antarctica/Macquarie"),
+ ("Antarctica/Mawson", "Antarctica/Mawson"),
+ ("Antarctica/McMurdo", "Antarctica/McMurdo"),
+ ("Antarctica/Palmer", "Antarctica/Palmer"),
+ ("Antarctica/Rothera", "Antarctica/Rothera"),
+ ("Antarctica/Syowa", "Antarctica/Syowa"),
+ ("Antarctica/Troll", "Antarctica/Troll"),
+ ("Antarctica/Vostok", "Antarctica/Vostok"),
+ ("Arctic/Longyearbyen", "Arctic/Longyearbyen"),
+ ("Asia/Aden", "Asia/Aden"),
+ ("Asia/Almaty", "Asia/Almaty"),
+ ("Asia/Amman", "Asia/Amman"),
+ ("Asia/Anadyr", "Asia/Anadyr"),
+ ("Asia/Aqtau", "Asia/Aqtau"),
+ ("Asia/Aqtobe", "Asia/Aqtobe"),
+ ("Asia/Ashgabat", "Asia/Ashgabat"),
+ ("Asia/Atyrau", "Asia/Atyrau"),
+ ("Asia/Baghdad", "Asia/Baghdad"),
+ ("Asia/Bahrain", "Asia/Bahrain"),
+ ("Asia/Baku", "Asia/Baku"),
+ ("Asia/Bangkok", "Asia/Bangkok"),
+ ("Asia/Barnaul", "Asia/Barnaul"),
+ ("Asia/Beirut", "Asia/Beirut"),
+ ("Asia/Bishkek", "Asia/Bishkek"),
+ ("Asia/Brunei", "Asia/Brunei"),
+ ("Asia/Chita", "Asia/Chita"),
+ ("Asia/Choibalsan", "Asia/Choibalsan"),
+ ("Asia/Colombo", "Asia/Colombo"),
+ ("Asia/Damascus", "Asia/Damascus"),
+ ("Asia/Dhaka", "Asia/Dhaka"),
+ ("Asia/Dili", "Asia/Dili"),
+ ("Asia/Dubai", "Asia/Dubai"),
+ ("Asia/Dushanbe", "Asia/Dushanbe"),
+ ("Asia/Famagusta", "Asia/Famagusta"),
+ ("Asia/Gaza", "Asia/Gaza"),
+ ("Asia/Hebron", "Asia/Hebron"),
+ ("Asia/Ho_Chi_Minh", "Asia/Ho_Chi_Minh"),
+ ("Asia/Hong_Kong", "Asia/Hong_Kong"),
+ ("Asia/Hovd", "Asia/Hovd"),
+ ("Asia/Irkutsk", "Asia/Irkutsk"),
+ ("Asia/Jakarta", "Asia/Jakarta"),
+ ("Asia/Jayapura", "Asia/Jayapura"),
+ ("Asia/Jerusalem", "Asia/Jerusalem"),
+ ("Asia/Kabul", "Asia/Kabul"),
+ ("Asia/Kamchatka", "Asia/Kamchatka"),
+ ("Asia/Karachi", "Asia/Karachi"),
+ ("Asia/Kathmandu", "Asia/Kathmandu"),
+ ("Asia/Khandyga", "Asia/Khandyga"),
+ ("Asia/Kolkata", "Asia/Kolkata"),
+ ("Asia/Krasnoyarsk", "Asia/Krasnoyarsk"),
+ ("Asia/Kuala_Lumpur", "Asia/Kuala_Lumpur"),
+ ("Asia/Kuching", "Asia/Kuching"),
+ ("Asia/Kuwait", "Asia/Kuwait"),
+ ("Asia/Macau", "Asia/Macau"),
+ ("Asia/Magadan", "Asia/Magadan"),
+ ("Asia/Makassar", "Asia/Makassar"),
+ ("Asia/Manila", "Asia/Manila"),
+ ("Asia/Muscat", "Asia/Muscat"),
+ ("Asia/Nicosia", "Asia/Nicosia"),
+ ("Asia/Novokuznetsk", "Asia/Novokuznetsk"),
+ ("Asia/Novosibirsk", "Asia/Novosibirsk"),
+ ("Asia/Omsk", "Asia/Omsk"),
+ ("Asia/Oral", "Asia/Oral"),
+ ("Asia/Phnom_Penh", "Asia/Phnom_Penh"),
+ ("Asia/Pontianak", "Asia/Pontianak"),
+ ("Asia/Pyongyang", "Asia/Pyongyang"),
+ ("Asia/Qatar", "Asia/Qatar"),
+ ("Asia/Qyzylorda", "Asia/Qyzylorda"),
+ ("Asia/Riyadh", "Asia/Riyadh"),
+ ("Asia/Sakhalin", "Asia/Sakhalin"),
+ ("Asia/Samarkand", "Asia/Samarkand"),
+ ("Asia/Seoul", "Asia/Seoul"),
+ ("Asia/Shanghai", "Asia/Shanghai"),
+ ("Asia/Singapore", "Asia/Singapore"),
+ ("Asia/Srednekolymsk", "Asia/Srednekolymsk"),
+ ("Asia/Taipei", "Asia/Taipei"),
+ ("Asia/Tashkent", "Asia/Tashkent"),
+ ("Asia/Tbilisi", "Asia/Tbilisi"),
+ ("Asia/Tehran", "Asia/Tehran"),
+ ("Asia/Thimphu", "Asia/Thimphu"),
+ ("Asia/Tokyo", "Asia/Tokyo"),
+ ("Asia/Tomsk", "Asia/Tomsk"),
+ ("Asia/Ulaanbaatar", "Asia/Ulaanbaatar"),
+ ("Asia/Urumqi", "Asia/Urumqi"),
+ ("Asia/Ust-Nera", "Asia/Ust-Nera"),
+ ("Asia/Vientiane", "Asia/Vientiane"),
+ ("Asia/Vladivostok", "Asia/Vladivostok"),
+ ("Asia/Yakutsk", "Asia/Yakutsk"),
+ ("Asia/Yangon", "Asia/Yangon"),
+ ("Asia/Yekaterinburg", "Asia/Yekaterinburg"),
+ ("Asia/Yerevan", "Asia/Yerevan"),
+ ("Atlantic/Azores", "Atlantic/Azores"),
+ ("Atlantic/Bermuda", "Atlantic/Bermuda"),
+ ("Atlantic/Canary", "Atlantic/Canary"),
+ ("Atlantic/Cape_Verde", "Atlantic/Cape_Verde"),
+ ("Atlantic/Faroe", "Atlantic/Faroe"),
+ ("Atlantic/Madeira", "Atlantic/Madeira"),
+ ("Atlantic/Reykjavik", "Atlantic/Reykjavik"),
+ ("Atlantic/South_Georgia", "Atlantic/South_Georgia"),
+ ("Atlantic/St_Helena", "Atlantic/St_Helena"),
+ ("Atlantic/Stanley", "Atlantic/Stanley"),
+ ("Australia/Adelaide", "Australia/Adelaide"),
+ ("Australia/Brisbane", "Australia/Brisbane"),
+ ("Australia/Broken_Hill", "Australia/Broken_Hill"),
+ ("Australia/Currie", "Australia/Currie"),
+ ("Australia/Darwin", "Australia/Darwin"),
+ ("Australia/Eucla", "Australia/Eucla"),
+ ("Australia/Hobart", "Australia/Hobart"),
+ ("Australia/Lindeman", "Australia/Lindeman"),
+ ("Australia/Lord_Howe", "Australia/Lord_Howe"),
+ ("Australia/Melbourne", "Australia/Melbourne"),
+ ("Australia/Perth", "Australia/Perth"),
+ ("Australia/Sydney", "Australia/Sydney"),
+ ("Canada/Atlantic", "Canada/Atlantic"),
+ ("Canada/Central", "Canada/Central"),
+ ("Canada/Eastern", "Canada/Eastern"),
+ ("Canada/Mountain", "Canada/Mountain"),
+ ("Canada/Newfoundland", "Canada/Newfoundland"),
+ ("Canada/Pacific", "Canada/Pacific"),
+ ("Europe/Amsterdam", "Europe/Amsterdam"),
+ ("Europe/Andorra", "Europe/Andorra"),
+ ("Europe/Astrakhan", "Europe/Astrakhan"),
+ ("Europe/Athens", "Europe/Athens"),
+ ("Europe/Belgrade", "Europe/Belgrade"),
+ ("Europe/Berlin", "Europe/Berlin"),
+ ("Europe/Bratislava", "Europe/Bratislava"),
+ ("Europe/Brussels", "Europe/Brussels"),
+ ("Europe/Bucharest", "Europe/Bucharest"),
+ ("Europe/Budapest", "Europe/Budapest"),
+ ("Europe/Busingen", "Europe/Busingen"),
+ ("Europe/Chisinau", "Europe/Chisinau"),
+ ("Europe/Copenhagen", "Europe/Copenhagen"),
+ ("Europe/Dublin", "Europe/Dublin"),
+ ("Europe/Gibraltar", "Europe/Gibraltar"),
+ ("Europe/Guernsey", "Europe/Guernsey"),
+ ("Europe/Helsinki", "Europe/Helsinki"),
+ ("Europe/Isle_of_Man", "Europe/Isle_of_Man"),
+ ("Europe/Istanbul", "Europe/Istanbul"),
+ ("Europe/Jersey", "Europe/Jersey"),
+ ("Europe/Kaliningrad", "Europe/Kaliningrad"),
+ ("Europe/Kiev", "Europe/Kiev"),
+ ("Europe/Kirov", "Europe/Kirov"),
+ ("Europe/Lisbon", "Europe/Lisbon"),
+ ("Europe/Ljubljana", "Europe/Ljubljana"),
+ ("Europe/London", "Europe/London"),
+ ("Europe/Luxembourg", "Europe/Luxembourg"),
+ ("Europe/Madrid", "Europe/Madrid"),
+ ("Europe/Malta", "Europe/Malta"),
+ ("Europe/Mariehamn", "Europe/Mariehamn"),
+ ("Europe/Minsk", "Europe/Minsk"),
+ ("Europe/Monaco", "Europe/Monaco"),
+ ("Europe/Moscow", "Europe/Moscow"),
+ ("Europe/Oslo", "Europe/Oslo"),
+ ("Europe/Paris", "Europe/Paris"),
+ ("Europe/Podgorica", "Europe/Podgorica"),
+ ("Europe/Prague", "Europe/Prague"),
+ ("Europe/Riga", "Europe/Riga"),
+ ("Europe/Rome", "Europe/Rome"),
+ ("Europe/Samara", "Europe/Samara"),
+ ("Europe/San_Marino", "Europe/San_Marino"),
+ ("Europe/Sarajevo", "Europe/Sarajevo"),
+ ("Europe/Saratov", "Europe/Saratov"),
+ ("Europe/Simferopol", "Europe/Simferopol"),
+ ("Europe/Skopje", "Europe/Skopje"),
+ ("Europe/Sofia", "Europe/Sofia"),
+ ("Europe/Stockholm", "Europe/Stockholm"),
+ ("Europe/Tallinn", "Europe/Tallinn"),
+ ("Europe/Tirane", "Europe/Tirane"),
+ ("Europe/Ulyanovsk", "Europe/Ulyanovsk"),
+ ("Europe/Uzhgorod", "Europe/Uzhgorod"),
+ ("Europe/Vaduz", "Europe/Vaduz"),
+ ("Europe/Vatican", "Europe/Vatican"),
+ ("Europe/Vienna", "Europe/Vienna"),
+ ("Europe/Vilnius", "Europe/Vilnius"),
+ ("Europe/Volgograd", "Europe/Volgograd"),
+ ("Europe/Warsaw", "Europe/Warsaw"),
+ ("Europe/Zagreb", "Europe/Zagreb"),
+ ("Europe/Zaporozhye", "Europe/Zaporozhye"),
+ ("Europe/Zurich", "Europe/Zurich"),
+ ("GMT", "GMT"),
+ ("Indian/Antananarivo", "Indian/Antananarivo"),
+ ("Indian/Chagos", "Indian/Chagos"),
+ ("Indian/Christmas", "Indian/Christmas"),
+ ("Indian/Cocos", "Indian/Cocos"),
+ ("Indian/Comoro", "Indian/Comoro"),
+ ("Indian/Kerguelen", "Indian/Kerguelen"),
+ ("Indian/Mahe", "Indian/Mahe"),
+ ("Indian/Maldives", "Indian/Maldives"),
+ ("Indian/Mauritius", "Indian/Mauritius"),
+ ("Indian/Mayotte", "Indian/Mayotte"),
+ ("Indian/Reunion", "Indian/Reunion"),
+ ("Pacific/Apia", "Pacific/Apia"),
+ ("Pacific/Auckland", "Pacific/Auckland"),
+ ("Pacific/Bougainville", "Pacific/Bougainville"),
+ ("Pacific/Chatham", "Pacific/Chatham"),
+ ("Pacific/Chuuk", "Pacific/Chuuk"),
+ ("Pacific/Easter", "Pacific/Easter"),
+ ("Pacific/Efate", "Pacific/Efate"),
+ ("Pacific/Enderbury", "Pacific/Enderbury"),
+ ("Pacific/Fakaofo", "Pacific/Fakaofo"),
+ ("Pacific/Fiji", "Pacific/Fiji"),
+ ("Pacific/Funafuti", "Pacific/Funafuti"),
+ ("Pacific/Galapagos", "Pacific/Galapagos"),
+ ("Pacific/Gambier", "Pacific/Gambier"),
+ ("Pacific/Guadalcanal", "Pacific/Guadalcanal"),
+ ("Pacific/Guam", "Pacific/Guam"),
+ ("Pacific/Honolulu", "Pacific/Honolulu"),
+ ("Pacific/Kiritimati", "Pacific/Kiritimati"),
+ ("Pacific/Kosrae", "Pacific/Kosrae"),
+ ("Pacific/Kwajalein", "Pacific/Kwajalein"),
+ ("Pacific/Majuro", "Pacific/Majuro"),
+ ("Pacific/Marquesas", "Pacific/Marquesas"),
+ ("Pacific/Midway", "Pacific/Midway"),
+ ("Pacific/Nauru", "Pacific/Nauru"),
+ ("Pacific/Niue", "Pacific/Niue"),
+ ("Pacific/Norfolk", "Pacific/Norfolk"),
+ ("Pacific/Noumea", "Pacific/Noumea"),
+ ("Pacific/Pago_Pago", "Pacific/Pago_Pago"),
+ ("Pacific/Palau", "Pacific/Palau"),
+ ("Pacific/Pitcairn", "Pacific/Pitcairn"),
+ ("Pacific/Pohnpei", "Pacific/Pohnpei"),
+ ("Pacific/Port_Moresby", "Pacific/Port_Moresby"),
+ ("Pacific/Rarotonga", "Pacific/Rarotonga"),
+ ("Pacific/Saipan", "Pacific/Saipan"),
+ ("Pacific/Tahiti", "Pacific/Tahiti"),
+ ("Pacific/Tarawa", "Pacific/Tarawa"),
+ ("Pacific/Tongatapu", "Pacific/Tongatapu"),
+ ("Pacific/Wake", "Pacific/Wake"),
+ ("Pacific/Wallis", "Pacific/Wallis"),
+ ("US/Alaska", "US/Alaska"),
+ ("US/Arizona", "US/Arizona"),
+ ("US/Central", "US/Central"),
+ ("US/Eastern", "US/Eastern"),
+ ("US/Hawaii", "US/Hawaii"),
+ ("US/Mountain", "US/Mountain"),
+ ("US/Pacific", "US/Pacific"),
+ ("UTC", "UTC"),
+ ],
+ max_length=80,
+ null=True,
+ ),
),
migrations.AddField(
- model_name='theme',
- name='prefix',
- field=models.TextField(default='default', max_length=40, null=True),
+ model_name="theme",
+ name="prefix",
+ field=models.TextField(default="default", max_length=40, null=True),
),
]
diff --git a/brutaldon/migrations/0010_auto_20180825_1009.py b/brutaldon/migrations/0010_auto_20180825_1009.py
index 5a4c64c..8933c9d 100644
--- a/brutaldon/migrations/0010_auto_20180825_1009.py
+++ b/brutaldon/migrations/0010_auto_20180825_1009.py
@@ -5,54 +5,508 @@ from django.db import migrations, models
class Migration(migrations.Migration):
- dependencies = [
- ('brutaldon', '0009_auto_20180824_2241'),
- ]
+ dependencies = [("brutaldon", "0009_auto_20180824_2241")]
operations = [
migrations.AlterField(
- model_name='account',
- name='access_token',
+ model_name="account",
+ name="access_token",
field=models.CharField(blank=True, max_length=2048, null=True),
),
migrations.AlterField(
- model_name='client',
- name='client_id',
+ model_name="client",
+ name="client_id",
field=models.CharField(blank=True, max_length=2048, null=True),
),
migrations.AlterField(
- model_name='client',
- name='client_secret',
+ model_name="client",
+ name="client_secret",
field=models.CharField(blank=True, max_length=2048, null=True),
),
migrations.AlterField(
- model_name='client',
- name='name',
- field=models.CharField(default='brutaldon', max_length=80),
+ model_name="client",
+ name="name",
+ field=models.CharField(default="brutaldon", max_length=80),
),
migrations.AlterField(
- model_name='preference',
- name='timezone',
- field=models.CharField(blank=True, choices=[('Africa/Abidjan', 'Africa/Abidjan'), ('Africa/Accra', 'Africa/Accra'), ('Africa/Addis_Ababa', 'Africa/Addis_Ababa'), ('Africa/Algiers', 'Africa/Algiers'), ('Africa/Asmara', 'Africa/Asmara'), ('Africa/Bamako', 'Africa/Bamako'), ('Africa/Bangui', 'Africa/Bangui'), ('Africa/Banjul', 'Africa/Banjul'), ('Africa/Bissau', 'Africa/Bissau'), ('Africa/Blantyre', 'Africa/Blantyre'), ('Africa/Brazzaville', 'Africa/Brazzaville'), ('Africa/Bujumbura', 'Africa/Bujumbura'), ('Africa/Cairo', 'Africa/Cairo'), ('Africa/Casablanca', 'Africa/Casablanca'), ('Africa/Ceuta', 'Africa/Ceuta'), ('Africa/Conakry', 'Africa/Conakry'), ('Africa/Dakar', 'Africa/Dakar'), ('Africa/Dar_es_Salaam', 'Africa/Dar_es_Salaam'), ('Africa/Djibouti', 'Africa/Djibouti'), ('Africa/Douala', 'Africa/Douala'), ('Africa/El_Aaiun', 'Africa/El_Aaiun'), ('Africa/Freetown', 'Africa/Freetown'), ('Africa/Gaborone', 'Africa/Gaborone'), ('Africa/Harare', 'Africa/Harare'), ('Africa/Johannesburg', 'Africa/Johannesburg'), ('Africa/Juba', 'Africa/Juba'), ('Africa/Kampala', 'Africa/Kampala'), ('Africa/Khartoum', 'Africa/Khartoum'), ('Africa/Kigali', 'Africa/Kigali'), ('Africa/Kinshasa', 'Africa/Kinshasa'), ('Africa/Lagos', 'Africa/Lagos'), ('Africa/Libreville', 'Africa/Libreville'), ('Africa/Lome', 'Africa/Lome'), ('Africa/Luanda', 'Africa/Luanda'), ('Africa/Lubumbashi', 'Africa/Lubumbashi'), ('Africa/Lusaka', 'Africa/Lusaka'), ('Africa/Malabo', 'Africa/Malabo'), ('Africa/Maputo', 'Africa/Maputo'), ('Africa/Maseru', 'Africa/Maseru'), ('Africa/Mbabane', 'Africa/Mbabane'), ('Africa/Mogadishu', 'Africa/Mogadishu'), ('Africa/Monrovia', 'Africa/Monrovia'), ('Africa/Nairobi', 'Africa/Nairobi'), ('Africa/Ndjamena', 'Africa/Ndjamena'), ('Africa/Niamey', 'Africa/Niamey'), ('Africa/Nouakchott', 'Africa/Nouakchott'), ('Africa/Ouagadougou', 'Africa/Ouagadougou'), ('Africa/Porto-Novo', 'Africa/Porto-Novo'), ('Africa/Sao_Tome', 'Africa/Sao_Tome'), ('Africa/Tripoli', 'Africa/Tripoli'), ('Africa/Tunis', 'Africa/Tunis'), ('Africa/Windhoek', 'Africa/Windhoek'), ('America/Adak', 'America/Adak'), ('America/Anchorage', 'America/Anchorage'), ('America/Anguilla', 'America/Anguilla'), ('America/Antigua', 'America/Antigua'), ('America/Araguaina', 'America/Araguaina'), ('America/Argentina/Buenos_Aires', 'America/Argentina/Buenos_Aires'), ('America/Argentina/Catamarca', 'America/Argentina/Catamarca'), ('America/Argentina/Cordoba', 'America/Argentina/Cordoba'), ('America/Argentina/Jujuy', 'America/Argentina/Jujuy'), ('America/Argentina/La_Rioja', 'America/Argentina/La_Rioja'), ('America/Argentina/Mendoza', 'America/Argentina/Mendoza'), ('America/Argentina/Rio_Gallegos', 'America/Argentina/Rio_Gallegos'), ('America/Argentina/Salta', 'America/Argentina/Salta'), ('America/Argentina/San_Juan', 'America/Argentina/San_Juan'), ('America/Argentina/San_Luis', 'America/Argentina/San_Luis'), ('America/Argentina/Tucuman', 'America/Argentina/Tucuman'), ('America/Argentina/Ushuaia', 'America/Argentina/Ushuaia'), ('America/Aruba', 'America/Aruba'), ('America/Asuncion', 'America/Asuncion'), ('America/Atikokan', 'America/Atikokan'), ('America/Bahia', 'America/Bahia'), ('America/Bahia_Banderas', 'America/Bahia_Banderas'), ('America/Barbados', 'America/Barbados'), ('America/Belem', 'America/Belem'), ('America/Belize', 'America/Belize'), ('America/Blanc-Sablon', 'America/Blanc-Sablon'), ('America/Boa_Vista', 'America/Boa_Vista'), ('America/Bogota', 'America/Bogota'), ('America/Boise', 'America/Boise'), ('America/Cambridge_Bay', 'America/Cambridge_Bay'), ('America/Campo_Grande', 'America/Campo_Grande'), ('America/Cancun', 'America/Cancun'), ('America/Caracas', 'America/Caracas'), ('America/Cayenne', 'America/Cayenne'), ('America/Cayman', 'America/Cayman'), ('America/Chicago', 'America/Chicago'), ('America/Chihuahua', 'America/Chihuahua'), ('America/Costa_Rica', 'America/Costa_Rica'), ('America/Creston', 'America/Creston'), ('America/Cuiaba', 'America/Cuiaba'), ('America/Curacao', 'America/Curacao'), ('America/Danmarkshavn', 'America/Danmarkshavn'), ('America/Dawson', 'America/Dawson'), ('America/Dawson_Creek', 'America/Dawson_Creek'), ('America/Denver', 'America/Denver'), ('America/Detroit', 'America/Detroit'), ('America/Dominica', 'America/Dominica'), ('America/Edmonton', 'America/Edmonton'), ('America/Eirunepe', 'America/Eirunepe'), ('America/El_Salvador', 'America/El_Salvador'), ('America/Fort_Nelson', 'America/Fort_Nelson'), ('America/Fortaleza', 'America/Fortaleza'), ('America/Glace_Bay', 'America/Glace_Bay'), ('America/Godthab', 'America/Godthab'), ('America/Goose_Bay', 'America/Goose_Bay'), ('America/Grand_Turk', 'America/Grand_Turk'), ('America/Grenada', 'America/Grenada'), ('America/Guadeloupe', 'America/Guadeloupe'), ('America/Guatemala', 'America/Guatemala'), ('America/Guayaquil', 'America/Guayaquil'), ('America/Guyana', 'America/Guyana'), ('America/Halifax', 'America/Halifax'), ('America/Havana', 'America/Havana'), ('America/Hermosillo', 'America/Hermosillo'), ('America/Indiana/Indianapolis', 'America/Indiana/Indianapolis'), ('America/Indiana/Knox', 'America/Indiana/Knox'), ('America/Indiana/Marengo', 'America/Indiana/Marengo'), ('America/Indiana/Petersburg', 'America/Indiana/Petersburg'), ('America/Indiana/Tell_City', 'America/Indiana/Tell_City'), ('America/Indiana/Vevay', 'America/Indiana/Vevay'), ('America/Indiana/Vincennes', 'America/Indiana/Vincennes'), ('America/Indiana/Winamac', 'America/Indiana/Winamac'), ('America/Inuvik', 'America/Inuvik'), ('America/Iqaluit', 'America/Iqaluit'), ('America/Jamaica', 'America/Jamaica'), ('America/Juneau', 'America/Juneau'), ('America/Kentucky/Louisville', 'America/Kentucky/Louisville'), ('America/Kentucky/Monticello', 'America/Kentucky/Monticello'), ('America/Kralendijk', 'America/Kralendijk'), ('America/La_Paz', 'America/La_Paz'), ('America/Lima', 'America/Lima'), ('America/Los_Angeles', 'America/Los_Angeles'), ('America/Lower_Princes', 'America/Lower_Princes'), ('America/Maceio', 'America/Maceio'), ('America/Managua', 'America/Managua'), ('America/Manaus', 'America/Manaus'), ('America/Marigot', 'America/Marigot'), ('America/Martinique', 'America/Martinique'), ('America/Matamoros', 'America/Matamoros'), ('America/Mazatlan', 'America/Mazatlan'), ('America/Menominee', 'America/Menominee'), ('America/Merida', 'America/Merida'), ('America/Metlakatla', 'America/Metlakatla'), ('America/Mexico_City', 'America/Mexico_City'), ('America/Miquelon', 'America/Miquelon'), ('America/Moncton', 'America/Moncton'), ('America/Monterrey', 'America/Monterrey'), ('America/Montevideo', 'America/Montevideo'), ('America/Montserrat', 'America/Montserrat'), ('America/Nassau', 'America/Nassau'), ('America/New_York', 'America/New_York'), ('America/Nipigon', 'America/Nipigon'), ('America/Nome', 'America/Nome'), ('America/Noronha', 'America/Noronha'), ('America/North_Dakota/Beulah', 'America/North_Dakota/Beulah'), ('America/North_Dakota/Center', 'America/North_Dakota/Center'), ('America/North_Dakota/New_Salem', 'America/North_Dakota/New_Salem'), ('America/Ojinaga', 'America/Ojinaga'), ('America/Panama', 'America/Panama'), ('America/Pangnirtung', 'America/Pangnirtung'), ('America/Paramaribo', 'America/Paramaribo'), ('America/Phoenix', 'America/Phoenix'), ('America/Port-au-Prince', 'America/Port-au-Prince'), ('America/Port_of_Spain', 'America/Port_of_Spain'), ('America/Porto_Velho', 'America/Porto_Velho'), ('America/Puerto_Rico', 'America/Puerto_Rico'), ('America/Punta_Arenas', 'America/Punta_Arenas'), ('America/Rainy_River', 'America/Rainy_River'), ('America/Rankin_Inlet', 'America/Rankin_Inlet'), ('America/Recife', 'America/Recife'), ('America/Regina', 'America/Regina'), ('America/Resolute', 'America/Resolute'), ('America/Rio_Branco', 'America/Rio_Branco'), ('America/Santarem', 'America/Santarem'), ('America/Santiago', 'America/Santiago'), ('America/Santo_Domingo', 'America/Santo_Domingo'), ('America/Sao_Paulo', 'America/Sao_Paulo'), ('America/Scoresbysund', 'America/Scoresbysund'), ('America/Sitka', 'America/Sitka'), ('America/St_Barthelemy', 'America/St_Barthelemy'), ('America/St_Johns', 'America/St_Johns'), ('America/St_Kitts', 'America/St_Kitts'), ('America/St_Lucia', 'America/St_Lucia'), ('America/St_Thomas', 'America/St_Thomas'), ('America/St_Vincent', 'America/St_Vincent'), ('America/Swift_Current', 'America/Swift_Current'), ('America/Tegucigalpa', 'America/Tegucigalpa'), ('America/Thule', 'America/Thule'), ('America/Thunder_Bay', 'America/Thunder_Bay'), ('America/Tijuana', 'America/Tijuana'), ('America/Toronto', 'America/Toronto'), ('America/Tortola', 'America/Tortola'), ('America/Vancouver', 'America/Vancouver'), ('America/Whitehorse', 'America/Whitehorse'), ('America/Winnipeg', 'America/Winnipeg'), ('America/Yakutat', 'America/Yakutat'), ('America/Yellowknife', 'America/Yellowknife'), ('Antarctica/Casey', 'Antarctica/Casey'), ('Antarctica/Davis', 'Antarctica/Davis'), ('Antarctica/DumontDUrville', 'Antarctica/DumontDUrville'), ('Antarctica/Macquarie', 'Antarctica/Macquarie'), ('Antarctica/Mawson', 'Antarctica/Mawson'), ('Antarctica/McMurdo', 'Antarctica/McMurdo'), ('Antarctica/Palmer', 'Antarctica/Palmer'), ('Antarctica/Rothera', 'Antarctica/Rothera'), ('Antarctica/Syowa', 'Antarctica/Syowa'), ('Antarctica/Troll', 'Antarctica/Troll'), ('Antarctica/Vostok', 'Antarctica/Vostok'), ('Arctic/Longyearbyen', 'Arctic/Longyearbyen'), ('Asia/Aden', 'Asia/Aden'), ('Asia/Almaty', 'Asia/Almaty'), ('Asia/Amman', 'Asia/Amman'), ('Asia/Anadyr', 'Asia/Anadyr'), ('Asia/Aqtau', 'Asia/Aqtau'), ('Asia/Aqtobe', 'Asia/Aqtobe'), ('Asia/Ashgabat', 'Asia/Ashgabat'), ('Asia/Atyrau', 'Asia/Atyrau'), ('Asia/Baghdad', 'Asia/Baghdad'), ('Asia/Bahrain', 'Asia/Bahrain'), ('Asia/Baku', 'Asia/Baku'), ('Asia/Bangkok', 'Asia/Bangkok'), ('Asia/Barnaul', 'Asia/Barnaul'), ('Asia/Beirut', 'Asia/Beirut'), ('Asia/Bishkek', 'Asia/Bishkek'), ('Asia/Brunei', 'Asia/Brunei'), ('Asia/Chita', 'Asia/Chita'), ('Asia/Choibalsan', 'Asia/Choibalsan'), ('Asia/Colombo', 'Asia/Colombo'), ('Asia/Damascus', 'Asia/Damascus'), ('Asia/Dhaka', 'Asia/Dhaka'), ('Asia/Dili', 'Asia/Dili'), ('Asia/Dubai', 'Asia/Dubai'), ('Asia/Dushanbe', 'Asia/Dushanbe'), ('Asia/Famagusta', 'Asia/Famagusta'), ('Asia/Gaza', 'Asia/Gaza'), ('Asia/Hebron', 'Asia/Hebron'), ('Asia/Ho_Chi_Minh', 'Asia/Ho_Chi_Minh'), ('Asia/Hong_Kong', 'Asia/Hong_Kong'), ('Asia/Hovd', 'Asia/Hovd'), ('Asia/Irkutsk', 'Asia/Irkutsk'), ('Asia/Jakarta', 'Asia/Jakarta'), ('Asia/Jayapura', 'Asia/Jayapura'), ('Asia/Jerusalem', 'Asia/Jerusalem'), ('Asia/Kabul', 'Asia/Kabul'), ('Asia/Kamchatka', 'Asia/Kamchatka'), ('Asia/Karachi', 'Asia/Karachi'), ('Asia/Kathmandu', 'Asia/Kathmandu'), ('Asia/Khandyga', 'Asia/Khandyga'), ('Asia/Kolkata', 'Asia/Kolkata'), ('Asia/Krasnoyarsk', 'Asia/Krasnoyarsk'), ('Asia/Kuala_Lumpur', 'Asia/Kuala_Lumpur'), ('Asia/Kuching', 'Asia/Kuching'), ('Asia/Kuwait', 'Asia/Kuwait'), ('Asia/Macau', 'Asia/Macau'), ('Asia/Magadan', 'Asia/Magadan'), ('Asia/Makassar', 'Asia/Makassar'), ('Asia/Manila', 'Asia/Manila'), ('Asia/Muscat', 'Asia/Muscat'), ('Asia/Nicosia', 'Asia/Nicosia'), ('Asia/Novokuznetsk', 'Asia/Novokuznetsk'), ('Asia/Novosibirsk', 'Asia/Novosibirsk'), ('Asia/Omsk', 'Asia/Omsk'), ('Asia/Oral', 'Asia/Oral'), ('Asia/Phnom_Penh', 'Asia/Phnom_Penh'), ('Asia/Pontianak', 'Asia/Pontianak'), ('Asia/Pyongyang', 'Asia/Pyongyang'), ('Asia/Qatar', 'Asia/Qatar'), ('Asia/Qyzylorda', 'Asia/Qyzylorda'), ('Asia/Riyadh', 'Asia/Riyadh'), ('Asia/Sakhalin', 'Asia/Sakhalin'), ('Asia/Samarkand', 'Asia/Samarkand'), ('Asia/Seoul', 'Asia/Seoul'), ('Asia/Shanghai', 'Asia/Shanghai'), ('Asia/Singapore', 'Asia/Singapore'), ('Asia/Srednekolymsk', 'Asia/Srednekolymsk'), ('Asia/Taipei', 'Asia/Taipei'), ('Asia/Tashkent', 'Asia/Tashkent'), ('Asia/Tbilisi', 'Asia/Tbilisi'), ('Asia/Tehran', 'Asia/Tehran'), ('Asia/Thimphu', 'Asia/Thimphu'), ('Asia/Tokyo', 'Asia/Tokyo'), ('Asia/Tomsk', 'Asia/Tomsk'), ('Asia/Ulaanbaatar', 'Asia/Ulaanbaatar'), ('Asia/Urumqi', 'Asia/Urumqi'), ('Asia/Ust-Nera', 'Asia/Ust-Nera'), ('Asia/Vientiane', 'Asia/Vientiane'), ('Asia/Vladivostok', 'Asia/Vladivostok'), ('Asia/Yakutsk', 'Asia/Yakutsk'), ('Asia/Yangon', 'Asia/Yangon'), ('Asia/Yekaterinburg', 'Asia/Yekaterinburg'), ('Asia/Yerevan', 'Asia/Yerevan'), ('Atlantic/Azores', 'Atlantic/Azores'), ('Atlantic/Bermuda', 'Atlantic/Bermuda'), ('Atlantic/Canary', 'Atlantic/Canary'), ('Atlantic/Cape_Verde', 'Atlantic/Cape_Verde'), ('Atlantic/Faroe', 'Atlantic/Faroe'), ('Atlantic/Madeira', 'Atlantic/Madeira'), ('Atlantic/Reykjavik', 'Atlantic/Reykjavik'), ('Atlantic/South_Georgia', 'Atlantic/South_Georgia'), ('Atlantic/St_Helena', 'Atlantic/St_Helena'), ('Atlantic/Stanley', 'Atlantic/Stanley'), ('Australia/Adelaide', 'Australia/Adelaide'), ('Australia/Brisbane', 'Australia/Brisbane'), ('Australia/Broken_Hill', 'Australia/Broken_Hill'), ('Australia/Currie', 'Australia/Currie'), ('Australia/Darwin', 'Australia/Darwin'), ('Australia/Eucla', 'Australia/Eucla'), ('Australia/Hobart', 'Australia/Hobart'), ('Australia/Lindeman', 'Australia/Lindeman'), ('Australia/Lord_Howe', 'Australia/Lord_Howe'), ('Australia/Melbourne', 'Australia/Melbourne'), ('Australia/Perth', 'Australia/Perth'), ('Australia/Sydney', 'Australia/Sydney'), ('Canada/Atlantic', 'Canada/Atlantic'), ('Canada/Central', 'Canada/Central'), ('Canada/Eastern', 'Canada/Eastern'), ('Canada/Mountain', 'Canada/Mountain'), ('Canada/Newfoundland', 'Canada/Newfoundland'), ('Canada/Pacific', 'Canada/Pacific'), ('Europe/Amsterdam', 'Europe/Amsterdam'), ('Europe/Andorra', 'Europe/Andorra'), ('Europe/Astrakhan', 'Europe/Astrakhan'), ('Europe/Athens', 'Europe/Athens'), ('Europe/Belgrade', 'Europe/Belgrade'), ('Europe/Berlin', 'Europe/Berlin'), ('Europe/Bratislava', 'Europe/Bratislava'), ('Europe/Brussels', 'Europe/Brussels'), ('Europe/Bucharest', 'Europe/Bucharest'), ('Europe/Budapest', 'Europe/Budapest'), ('Europe/Busingen', 'Europe/Busingen'), ('Europe/Chisinau', 'Europe/Chisinau'), ('Europe/Copenhagen', 'Europe/Copenhagen'), ('Europe/Dublin', 'Europe/Dublin'), ('Europe/Gibraltar', 'Europe/Gibraltar'), ('Europe/Guernsey', 'Europe/Guernsey'), ('Europe/Helsinki', 'Europe/Helsinki'), ('Europe/Isle_of_Man', 'Europe/Isle_of_Man'), ('Europe/Istanbul', 'Europe/Istanbul'), ('Europe/Jersey', 'Europe/Jersey'), ('Europe/Kaliningrad', 'Europe/Kaliningrad'), ('Europe/Kiev', 'Europe/Kiev'), ('Europe/Kirov', 'Europe/Kirov'), ('Europe/Lisbon', 'Europe/Lisbon'), ('Europe/Ljubljana', 'Europe/Ljubljana'), ('Europe/London', 'Europe/London'), ('Europe/Luxembourg', 'Europe/Luxembourg'), ('Europe/Madrid', 'Europe/Madrid'), ('Europe/Malta', 'Europe/Malta'), ('Europe/Mariehamn', 'Europe/Mariehamn'), ('Europe/Minsk', 'Europe/Minsk'), ('Europe/Monaco', 'Europe/Monaco'), ('Europe/Moscow', 'Europe/Moscow'), ('Europe/Oslo', 'Europe/Oslo'), ('Europe/Paris', 'Europe/Paris'), ('Europe/Podgorica', 'Europe/Podgorica'), ('Europe/Prague', 'Europe/Prague'), ('Europe/Riga', 'Europe/Riga'), ('Europe/Rome', 'Europe/Rome'), ('Europe/Samara', 'Europe/Samara'), ('Europe/San_Marino', 'Europe/San_Marino'), ('Europe/Sarajevo', 'Europe/Sarajevo'), ('Europe/Saratov', 'Europe/Saratov'), ('Europe/Simferopol', 'Europe/Simferopol'), ('Europe/Skopje', 'Europe/Skopje'), ('Europe/Sofia', 'Europe/Sofia'), ('Europe/Stockholm', 'Europe/Stockholm'), ('Europe/Tallinn', 'Europe/Tallinn'), ('Europe/Tirane', 'Europe/Tirane'), ('Europe/Ulyanovsk', 'Europe/Ulyanovsk'), ('Europe/Uzhgorod', 'Europe/Uzhgorod'), ('Europe/Vaduz', 'Europe/Vaduz'), ('Europe/Vatican', 'Europe/Vatican'), ('Europe/Vienna', 'Europe/Vienna'), ('Europe/Vilnius', 'Europe/Vilnius'), ('Europe/Volgograd', 'Europe/Volgograd'), ('Europe/Warsaw', 'Europe/Warsaw'), ('Europe/Zagreb', 'Europe/Zagreb'), ('Europe/Zaporozhye', 'Europe/Zaporozhye'), ('Europe/Zurich', 'Europe/Zurich'), ('GMT', 'GMT'), ('Indian/Antananarivo', 'Indian/Antananarivo'), ('Indian/Chagos', 'Indian/Chagos'), ('Indian/Christmas', 'Indian/Christmas'), ('Indian/Cocos', 'Indian/Cocos'), ('Indian/Comoro', 'Indian/Comoro'), ('Indian/Kerguelen', 'Indian/Kerguelen'), ('Indian/Mahe', 'Indian/Mahe'), ('Indian/Maldives', 'Indian/Maldives'), ('Indian/Mauritius', 'Indian/Mauritius'), ('Indian/Mayotte', 'Indian/Mayotte'), ('Indian/Reunion', 'Indian/Reunion'), ('Pacific/Apia', 'Pacific/Apia'), ('Pacific/Auckland', 'Pacific/Auckland'), ('Pacific/Bougainville', 'Pacific/Bougainville'), ('Pacific/Chatham', 'Pacific/Chatham'), ('Pacific/Chuuk', 'Pacific/Chuuk'), ('Pacific/Easter', 'Pacific/Easter'), ('Pacific/Efate', 'Pacific/Efate'), ('Pacific/Enderbury', 'Pacific/Enderbury'), ('Pacific/Fakaofo', 'Pacific/Fakaofo'), ('Pacific/Fiji', 'Pacific/Fiji'), ('Pacific/Funafuti', 'Pacific/Funafuti'), ('Pacific/Galapagos', 'Pacific/Galapagos'), ('Pacific/Gambier', 'Pacific/Gambier'), ('Pacific/Guadalcanal', 'Pacific/Guadalcanal'), ('Pacific/Guam', 'Pacific/Guam'), ('Pacific/Honolulu', 'Pacific/Honolulu'), ('Pacific/Kiritimati', 'Pacific/Kiritimati'), ('Pacific/Kosrae', 'Pacific/Kosrae'), ('Pacific/Kwajalein', 'Pacific/Kwajalein'), ('Pacific/Majuro', 'Pacific/Majuro'), ('Pacific/Marquesas', 'Pacific/Marquesas'), ('Pacific/Midway', 'Pacific/Midway'), ('Pacific/Nauru', 'Pacific/Nauru'), ('Pacific/Niue', 'Pacific/Niue'), ('Pacific/Norfolk', 'Pacific/Norfolk'), ('Pacific/Noumea', 'Pacific/Noumea'), ('Pacific/Pago_Pago', 'Pacific/Pago_Pago'), ('Pacific/Palau', 'Pacific/Palau'), ('Pacific/Pitcairn', 'Pacific/Pitcairn'), ('Pacific/Pohnpei', 'Pacific/Pohnpei'), ('Pacific/Port_Moresby', 'Pacific/Port_Moresby'), ('Pacific/Rarotonga', 'Pacific/Rarotonga'), ('Pacific/Saipan', 'Pacific/Saipan'), ('Pacific/Tahiti', 'Pacific/Tahiti'), ('Pacific/Tarawa', 'Pacific/Tarawa'), ('Pacific/Tongatapu', 'Pacific/Tongatapu'), ('Pacific/Wake', 'Pacific/Wake'), ('Pacific/Wallis', 'Pacific/Wallis'), ('US/Alaska', 'US/Alaska'), ('US/Arizona', 'US/Arizona'), ('US/Central', 'US/Central'), ('US/Eastern', 'US/Eastern'), ('US/Hawaii', 'US/Hawaii'), ('US/Mountain', 'US/Mountain'), ('US/Pacific', 'US/Pacific'), ('UTC', 'UTC')], max_length=80, null=True),
+ model_name="preference",
+ name="timezone",
+ field=models.CharField(
+ blank=True,
+ choices=[
+ ("Africa/Abidjan", "Africa/Abidjan"),
+ ("Africa/Accra", "Africa/Accra"),
+ ("Africa/Addis_Ababa", "Africa/Addis_Ababa"),
+ ("Africa/Algiers", "Africa/Algiers"),
+ ("Africa/Asmara", "Africa/Asmara"),
+ ("Africa/Bamako", "Africa/Bamako"),
+ ("Africa/Bangui", "Africa/Bangui"),
+ ("Africa/Banjul", "Africa/Banjul"),
+ ("Africa/Bissau", "Africa/Bissau"),
+ ("Africa/Blantyre", "Africa/Blantyre"),
+ ("Africa/Brazzaville", "Africa/Brazzaville"),
+ ("Africa/Bujumbura", "Africa/Bujumbura"),
+ ("Africa/Cairo", "Africa/Cairo"),
+ ("Africa/Casablanca", "Africa/Casablanca"),
+ ("Africa/Ceuta", "Africa/Ceuta"),
+ ("Africa/Conakry", "Africa/Conakry"),
+ ("Africa/Dakar", "Africa/Dakar"),
+ ("Africa/Dar_es_Salaam", "Africa/Dar_es_Salaam"),
+ ("Africa/Djibouti", "Africa/Djibouti"),
+ ("Africa/Douala", "Africa/Douala"),
+ ("Africa/El_Aaiun", "Africa/El_Aaiun"),
+ ("Africa/Freetown", "Africa/Freetown"),
+ ("Africa/Gaborone", "Africa/Gaborone"),
+ ("Africa/Harare", "Africa/Harare"),
+ ("Africa/Johannesburg", "Africa/Johannesburg"),
+ ("Africa/Juba", "Africa/Juba"),
+ ("Africa/Kampala", "Africa/Kampala"),
+ ("Africa/Khartoum", "Africa/Khartoum"),
+ ("Africa/Kigali", "Africa/Kigali"),
+ ("Africa/Kinshasa", "Africa/Kinshasa"),
+ ("Africa/Lagos", "Africa/Lagos"),
+ ("Africa/Libreville", "Africa/Libreville"),
+ ("Africa/Lome", "Africa/Lome"),
+ ("Africa/Luanda", "Africa/Luanda"),
+ ("Africa/Lubumbashi", "Africa/Lubumbashi"),
+ ("Africa/Lusaka", "Africa/Lusaka"),
+ ("Africa/Malabo", "Africa/Malabo"),
+ ("Africa/Maputo", "Africa/Maputo"),
+ ("Africa/Maseru", "Africa/Maseru"),
+ ("Africa/Mbabane", "Africa/Mbabane"),
+ ("Africa/Mogadishu", "Africa/Mogadishu"),
+ ("Africa/Monrovia", "Africa/Monrovia"),
+ ("Africa/Nairobi", "Africa/Nairobi"),
+ ("Africa/Ndjamena", "Africa/Ndjamena"),
+ ("Africa/Niamey", "Africa/Niamey"),
+ ("Africa/Nouakchott", "Africa/Nouakchott"),
+ ("Africa/Ouagadougou", "Africa/Ouagadougou"),
+ ("Africa/Porto-Novo", "Africa/Porto-Novo"),
+ ("Africa/Sao_Tome", "Africa/Sao_Tome"),
+ ("Africa/Tripoli", "Africa/Tripoli"),
+ ("Africa/Tunis", "Africa/Tunis"),
+ ("Africa/Windhoek", "Africa/Windhoek"),
+ ("America/Adak", "America/Adak"),
+ ("America/Anchorage", "America/Anchorage"),
+ ("America/Anguilla", "America/Anguilla"),
+ ("America/Antigua", "America/Antigua"),
+ ("America/Araguaina", "America/Araguaina"),
+ (
+ "America/Argentina/Buenos_Aires",
+ "America/Argentina/Buenos_Aires",
+ ),
+ ("America/Argentina/Catamarca", "America/Argentina/Catamarca"),
+ ("America/Argentina/Cordoba", "America/Argentina/Cordoba"),
+ ("America/Argentina/Jujuy", "America/Argentina/Jujuy"),
+ ("America/Argentina/La_Rioja", "America/Argentina/La_Rioja"),
+ ("America/Argentina/Mendoza", "America/Argentina/Mendoza"),
+ (
+ "America/Argentina/Rio_Gallegos",
+ "America/Argentina/Rio_Gallegos",
+ ),
+ ("America/Argentina/Salta", "America/Argentina/Salta"),
+ ("America/Argentina/San_Juan", "America/Argentina/San_Juan"),
+ ("America/Argentina/San_Luis", "America/Argentina/San_Luis"),
+ ("America/Argentina/Tucuman", "America/Argentina/Tucuman"),
+ ("America/Argentina/Ushuaia", "America/Argentina/Ushuaia"),
+ ("America/Aruba", "America/Aruba"),
+ ("America/Asuncion", "America/Asuncion"),
+ ("America/Atikokan", "America/Atikokan"),
+ ("America/Bahia", "America/Bahia"),
+ ("America/Bahia_Banderas", "America/Bahia_Banderas"),
+ ("America/Barbados", "America/Barbados"),
+ ("America/Belem", "America/Belem"),
+ ("America/Belize", "America/Belize"),
+ ("America/Blanc-Sablon", "America/Blanc-Sablon"),
+ ("America/Boa_Vista", "America/Boa_Vista"),
+ ("America/Bogota", "America/Bogota"),
+ ("America/Boise", "America/Boise"),
+ ("America/Cambridge_Bay", "America/Cambridge_Bay"),
+ ("America/Campo_Grande", "America/Campo_Grande"),
+ ("America/Cancun", "America/Cancun"),
+ ("America/Caracas", "America/Caracas"),
+ ("America/Cayenne", "America/Cayenne"),
+ ("America/Cayman", "America/Cayman"),
+ ("America/Chicago", "America/Chicago"),
+ ("America/Chihuahua", "America/Chihuahua"),
+ ("America/Costa_Rica", "America/Costa_Rica"),
+ ("America/Creston", "America/Creston"),
+ ("America/Cuiaba", "America/Cuiaba"),
+ ("America/Curacao", "America/Curacao"),
+ ("America/Danmarkshavn", "America/Danmarkshavn"),
+ ("America/Dawson", "America/Dawson"),
+ ("America/Dawson_Creek", "America/Dawson_Creek"),
+ ("America/Denver", "America/Denver"),
+ ("America/Detroit", "America/Detroit"),
+ ("America/Dominica", "America/Dominica"),
+ ("America/Edmonton", "America/Edmonton"),
+ ("America/Eirunepe", "America/Eirunepe"),
+ ("America/El_Salvador", "America/El_Salvador"),
+ ("America/Fort_Nelson", "America/Fort_Nelson"),
+ ("America/Fortaleza", "America/Fortaleza"),
+ ("America/Glace_Bay", "America/Glace_Bay"),
+ ("America/Godthab", "America/Godthab"),
+ ("America/Goose_Bay", "America/Goose_Bay"),
+ ("America/Grand_Turk", "America/Grand_Turk"),
+ ("America/Grenada", "America/Grenada"),
+ ("America/Guadeloupe", "America/Guadeloupe"),
+ ("America/Guatemala", "America/Guatemala"),
+ ("America/Guayaquil", "America/Guayaquil"),
+ ("America/Guyana", "America/Guyana"),
+ ("America/Halifax", "America/Halifax"),
+ ("America/Havana", "America/Havana"),
+ ("America/Hermosillo", "America/Hermosillo"),
+ ("America/Indiana/Indianapolis", "America/Indiana/Indianapolis"),
+ ("America/Indiana/Knox", "America/Indiana/Knox"),
+ ("America/Indiana/Marengo", "America/Indiana/Marengo"),
+ ("America/Indiana/Petersburg", "America/Indiana/Petersburg"),
+ ("America/Indiana/Tell_City", "America/Indiana/Tell_City"),
+ ("America/Indiana/Vevay", "America/Indiana/Vevay"),
+ ("America/Indiana/Vincennes", "America/Indiana/Vincennes"),
+ ("America/Indiana/Winamac", "America/Indiana/Winamac"),
+ ("America/Inuvik", "America/Inuvik"),
+ ("America/Iqaluit", "America/Iqaluit"),
+ ("America/Jamaica", "America/Jamaica"),
+ ("America/Juneau", "America/Juneau"),
+ ("America/Kentucky/Louisville", "America/Kentucky/Louisville"),
+ ("America/Kentucky/Monticello", "America/Kentucky/Monticello"),
+ ("America/Kralendijk", "America/Kralendijk"),
+ ("America/La_Paz", "America/La_Paz"),
+ ("America/Lima", "America/Lima"),
+ ("America/Los_Angeles", "America/Los_Angeles"),
+ ("America/Lower_Princes", "America/Lower_Princes"),
+ ("America/Maceio", "America/Maceio"),
+ ("America/Managua", "America/Managua"),
+ ("America/Manaus", "America/Manaus"),
+ ("America/Marigot", "America/Marigot"),
+ ("America/Martinique", "America/Martinique"),
+ ("America/Matamoros", "America/Matamoros"),
+ ("America/Mazatlan", "America/Mazatlan"),
+ ("America/Menominee", "America/Menominee"),
+ ("America/Merida", "America/Merida"),
+ ("America/Metlakatla", "America/Metlakatla"),
+ ("America/Mexico_City", "America/Mexico_City"),
+ ("America/Miquelon", "America/Miquelon"),
+ ("America/Moncton", "America/Moncton"),
+ ("America/Monterrey", "America/Monterrey"),
+ ("America/Montevideo", "America/Montevideo"),
+ ("America/Montserrat", "America/Montserrat"),
+ ("America/Nassau", "America/Nassau"),
+ ("America/New_York", "America/New_York"),
+ ("America/Nipigon", "America/Nipigon"),
+ ("America/Nome", "America/Nome"),
+ ("America/Noronha", "America/Noronha"),
+ ("America/North_Dakota/Beulah", "America/North_Dakota/Beulah"),
+ ("America/North_Dakota/Center", "America/North_Dakota/Center"),
+ (
+ "America/North_Dakota/New_Salem",
+ "America/North_Dakota/New_Salem",
+ ),
+ ("America/Ojinaga", "America/Ojinaga"),
+ ("America/Panama", "America/Panama"),
+ ("America/Pangnirtung", "America/Pangnirtung"),
+ ("America/Paramaribo", "America/Paramaribo"),
+ ("America/Phoenix", "America/Phoenix"),
+ ("America/Port-au-Prince", "America/Port-au-Prince"),
+ ("America/Port_of_Spain", "America/Port_of_Spain"),
+ ("America/Porto_Velho", "America/Porto_Velho"),
+ ("America/Puerto_Rico", "America/Puerto_Rico"),
+ ("America/Punta_Arenas", "America/Punta_Arenas"),
+ ("America/Rainy_River", "America/Rainy_River"),
+ ("America/Rankin_Inlet", "America/Rankin_Inlet"),
+ ("America/Recife", "America/Recife"),
+ ("America/Regina", "America/Regina"),
+ ("America/Resolute", "America/Resolute"),
+ ("America/Rio_Branco", "America/Rio_Branco"),
+ ("America/Santarem", "America/Santarem"),
+ ("America/Santiago", "America/Santiago"),
+ ("America/Santo_Domingo", "America/Santo_Domingo"),
+ ("America/Sao_Paulo", "America/Sao_Paulo"),
+ ("America/Scoresbysund", "America/Scoresbysund"),
+ ("America/Sitka", "America/Sitka"),
+ ("America/St_Barthelemy", "America/St_Barthelemy"),
+ ("America/St_Johns", "America/St_Johns"),
+ ("America/St_Kitts", "America/St_Kitts"),
+ ("America/St_Lucia", "America/St_Lucia"),
+ ("America/St_Thomas", "America/St_Thomas"),
+ ("America/St_Vincent", "America/St_Vincent"),
+ ("America/Swift_Current", "America/Swift_Current"),
+ ("America/Tegucigalpa", "America/Tegucigalpa"),
+ ("America/Thule", "America/Thule"),
+ ("America/Thunder_Bay", "America/Thunder_Bay"),
+ ("America/Tijuana", "America/Tijuana"),
+ ("America/Toronto", "America/Toronto"),
+ ("America/Tortola", "America/Tortola"),
+ ("America/Vancouver", "America/Vancouver"),
+ ("America/Whitehorse", "America/Whitehorse"),
+ ("America/Winnipeg", "America/Winnipeg"),
+ ("America/Yakutat", "America/Yakutat"),
+ ("America/Yellowknife", "America/Yellowknife"),
+ ("Antarctica/Casey", "Antarctica/Casey"),
+ ("Antarctica/Davis", "Antarctica/Davis"),
+ ("Antarctica/DumontDUrville", "Antarctica/DumontDUrville"),
+ ("Antarctica/Macquarie", "Antarctica/Macquarie"),
+ ("Antarctica/Mawson", "Antarctica/Mawson"),
+ ("Antarctica/McMurdo", "Antarctica/McMurdo"),
+ ("Antarctica/Palmer", "Antarctica/Palmer"),
+ ("Antarctica/Rothera", "Antarctica/Rothera"),
+ ("Antarctica/Syowa", "Antarctica/Syowa"),
+ ("Antarctica/Troll", "Antarctica/Troll"),
+ ("Antarctica/Vostok", "Antarctica/Vostok"),
+ ("Arctic/Longyearbyen", "Arctic/Longyearbyen"),
+ ("Asia/Aden", "Asia/Aden"),
+ ("Asia/Almaty", "Asia/Almaty"),
+ ("Asia/Amman", "Asia/Amman"),
+ ("Asia/Anadyr", "Asia/Anadyr"),
+ ("Asia/Aqtau", "Asia/Aqtau"),
+ ("Asia/Aqtobe", "Asia/Aqtobe"),
+ ("Asia/Ashgabat", "Asia/Ashgabat"),
+ ("Asia/Atyrau", "Asia/Atyrau"),
+ ("Asia/Baghdad", "Asia/Baghdad"),
+ ("Asia/Bahrain", "Asia/Bahrain"),
+ ("Asia/Baku", "Asia/Baku"),
+ ("Asia/Bangkok", "Asia/Bangkok"),
+ ("Asia/Barnaul", "Asia/Barnaul"),
+ ("Asia/Beirut", "Asia/Beirut"),
+ ("Asia/Bishkek", "Asia/Bishkek"),
+ ("Asia/Brunei", "Asia/Brunei"),
+ ("Asia/Chita", "Asia/Chita"),
+ ("Asia/Choibalsan", "Asia/Choibalsan"),
+ ("Asia/Colombo", "Asia/Colombo"),
+ ("Asia/Damascus", "Asia/Damascus"),
+ ("Asia/Dhaka", "Asia/Dhaka"),
+ ("Asia/Dili", "Asia/Dili"),
+ ("Asia/Dubai", "Asia/Dubai"),
+ ("Asia/Dushanbe", "Asia/Dushanbe"),
+ ("Asia/Famagusta", "Asia/Famagusta"),
+ ("Asia/Gaza", "Asia/Gaza"),
+ ("Asia/Hebron", "Asia/Hebron"),
+ ("Asia/Ho_Chi_Minh", "Asia/Ho_Chi_Minh"),
+ ("Asia/Hong_Kong", "Asia/Hong_Kong"),
+ ("Asia/Hovd", "Asia/Hovd"),
+ ("Asia/Irkutsk", "Asia/Irkutsk"),
+ ("Asia/Jakarta", "Asia/Jakarta"),
+ ("Asia/Jayapura", "Asia/Jayapura"),
+ ("Asia/Jerusalem", "Asia/Jerusalem"),
+ ("Asia/Kabul", "Asia/Kabul"),
+ ("Asia/Kamchatka", "Asia/Kamchatka"),
+ ("Asia/Karachi", "Asia/Karachi"),
+ ("Asia/Kathmandu", "Asia/Kathmandu"),
+ ("Asia/Khandyga", "Asia/Khandyga"),
+ ("Asia/Kolkata", "Asia/Kolkata"),
+ ("Asia/Krasnoyarsk", "Asia/Krasnoyarsk"),
+ ("Asia/Kuala_Lumpur", "Asia/Kuala_Lumpur"),
+ ("Asia/Kuching", "Asia/Kuching"),
+ ("Asia/Kuwait", "Asia/Kuwait"),
+ ("Asia/Macau", "Asia/Macau"),
+ ("Asia/Magadan", "Asia/Magadan"),
+ ("Asia/Makassar", "Asia/Makassar"),
+ ("Asia/Manila", "Asia/Manila"),
+ ("Asia/Muscat", "Asia/Muscat"),
+ ("Asia/Nicosia", "Asia/Nicosia"),
+ ("Asia/Novokuznetsk", "Asia/Novokuznetsk"),
+ ("Asia/Novosibirsk", "Asia/Novosibirsk"),
+ ("Asia/Omsk", "Asia/Omsk"),
+ ("Asia/Oral", "Asia/Oral"),
+ ("Asia/Phnom_Penh", "Asia/Phnom_Penh"),
+ ("Asia/Pontianak", "Asia/Pontianak"),
+ ("Asia/Pyongyang", "Asia/Pyongyang"),
+ ("Asia/Qatar", "Asia/Qatar"),
+ ("Asia/Qyzylorda", "Asia/Qyzylorda"),
+ ("Asia/Riyadh", "Asia/Riyadh"),
+ ("Asia/Sakhalin", "Asia/Sakhalin"),
+ ("Asia/Samarkand", "Asia/Samarkand"),
+ ("Asia/Seoul", "Asia/Seoul"),
+ ("Asia/Shanghai", "Asia/Shanghai"),
+ ("Asia/Singapore", "Asia/Singapore"),
+ ("Asia/Srednekolymsk", "Asia/Srednekolymsk"),
+ ("Asia/Taipei", "Asia/Taipei"),
+ ("Asia/Tashkent", "Asia/Tashkent"),
+ ("Asia/Tbilisi", "Asia/Tbilisi"),
+ ("Asia/Tehran", "Asia/Tehran"),
+ ("Asia/Thimphu", "Asia/Thimphu"),
+ ("Asia/Tokyo", "Asia/Tokyo"),
+ ("Asia/Tomsk", "Asia/Tomsk"),
+ ("Asia/Ulaanbaatar", "Asia/Ulaanbaatar"),
+ ("Asia/Urumqi", "Asia/Urumqi"),
+ ("Asia/Ust-Nera", "Asia/Ust-Nera"),
+ ("Asia/Vientiane", "Asia/Vientiane"),
+ ("Asia/Vladivostok", "Asia/Vladivostok"),
+ ("Asia/Yakutsk", "Asia/Yakutsk"),
+ ("Asia/Yangon", "Asia/Yangon"),
+ ("Asia/Yekaterinburg", "Asia/Yekaterinburg"),
+ ("Asia/Yerevan", "Asia/Yerevan"),
+ ("Atlantic/Azores", "Atlantic/Azores"),
+ ("Atlantic/Bermuda", "Atlantic/Bermuda"),
+ ("Atlantic/Canary", "Atlantic/Canary"),
+ ("Atlantic/Cape_Verde", "Atlantic/Cape_Verde"),
+ ("Atlantic/Faroe", "Atlantic/Faroe"),
+ ("Atlantic/Madeira", "Atlantic/Madeira"),
+ ("Atlantic/Reykjavik", "Atlantic/Reykjavik"),
+ ("Atlantic/South_Georgia", "Atlantic/South_Georgia"),
+ ("Atlantic/St_Helena", "Atlantic/St_Helena"),
+ ("Atlantic/Stanley", "Atlantic/Stanley"),
+ ("Australia/Adelaide", "Australia/Adelaide"),
+ ("Australia/Brisbane", "Australia/Brisbane"),
+ ("Australia/Broken_Hill", "Australia/Broken_Hill"),
+ ("Australia/Currie", "Australia/Currie"),
+ ("Australia/Darwin", "Australia/Darwin"),
+ ("Australia/Eucla", "Australia/Eucla"),
+ ("Australia/Hobart", "Australia/Hobart"),
+ ("Australia/Lindeman", "Australia/Lindeman"),
+ ("Australia/Lord_Howe", "Australia/Lord_Howe"),
+ ("Australia/Melbourne", "Australia/Melbourne"),
+ ("Australia/Perth", "Australia/Perth"),
+ ("Australia/Sydney", "Australia/Sydney"),
+ ("Canada/Atlantic", "Canada/Atlantic"),
+ ("Canada/Central", "Canada/Central"),
+ ("Canada/Eastern", "Canada/Eastern"),
+ ("Canada/Mountain", "Canada/Mountain"),
+ ("Canada/Newfoundland", "Canada/Newfoundland"),
+ ("Canada/Pacific", "Canada/Pacific"),
+ ("Europe/Amsterdam", "Europe/Amsterdam"),
+ ("Europe/Andorra", "Europe/Andorra"),
+ ("Europe/Astrakhan", "Europe/Astrakhan"),
+ ("Europe/Athens", "Europe/Athens"),
+ ("Europe/Belgrade", "Europe/Belgrade"),
+ ("Europe/Berlin", "Europe/Berlin"),
+ ("Europe/Bratislava", "Europe/Bratislava"),
+ ("Europe/Brussels", "Europe/Brussels"),
+ ("Europe/Bucharest", "Europe/Bucharest"),
+ ("Europe/Budapest", "Europe/Budapest"),
+ ("Europe/Busingen", "Europe/Busingen"),
+ ("Europe/Chisinau", "Europe/Chisinau"),
+ ("Europe/Copenhagen", "Europe/Copenhagen"),
+ ("Europe/Dublin", "Europe/Dublin"),
+ ("Europe/Gibraltar", "Europe/Gibraltar"),
+ ("Europe/Guernsey", "Europe/Guernsey"),
+ ("Europe/Helsinki", "Europe/Helsinki"),
+ ("Europe/Isle_of_Man", "Europe/Isle_of_Man"),
+ ("Europe/Istanbul", "Europe/Istanbul"),
+ ("Europe/Jersey", "Europe/Jersey"),
+ ("Europe/Kaliningrad", "Europe/Kaliningrad"),
+ ("Europe/Kiev", "Europe/Kiev"),
+ ("Europe/Kirov", "Europe/Kirov"),
+ ("Europe/Lisbon", "Europe/Lisbon"),
+ ("Europe/Ljubljana", "Europe/Ljubljana"),
+ ("Europe/London", "Europe/London"),
+ ("Europe/Luxembourg", "Europe/Luxembourg"),
+ ("Europe/Madrid", "Europe/Madrid"),
+ ("Europe/Malta", "Europe/Malta"),
+ ("Europe/Mariehamn", "Europe/Mariehamn"),
+ ("Europe/Minsk", "Europe/Minsk"),
+ ("Europe/Monaco", "Europe/Monaco"),
+ ("Europe/Moscow", "Europe/Moscow"),
+ ("Europe/Oslo", "Europe/Oslo"),
+ ("Europe/Paris", "Europe/Paris"),
+ ("Europe/Podgorica", "Europe/Podgorica"),
+ ("Europe/Prague", "Europe/Prague"),
+ ("Europe/Riga", "Europe/Riga"),
+ ("Europe/Rome", "Europe/Rome"),
+ ("Europe/Samara", "Europe/Samara"),
+ ("Europe/San_Marino", "Europe/San_Marino"),
+ ("Europe/Sarajevo", "Europe/Sarajevo"),
+ ("Europe/Saratov", "Europe/Saratov"),
+ ("Europe/Simferopol", "Europe/Simferopol"),
+ ("Europe/Skopje", "Europe/Skopje"),
+ ("Europe/Sofia", "Europe/Sofia"),
+ ("Europe/Stockholm", "Europe/Stockholm"),
+ ("Europe/Tallinn", "Europe/Tallinn"),
+ ("Europe/Tirane", "Europe/Tirane"),
+ ("Europe/Ulyanovsk", "Europe/Ulyanovsk"),
+ ("Europe/Uzhgorod", "Europe/Uzhgorod"),
+ ("Europe/Vaduz", "Europe/Vaduz"),
+ ("Europe/Vatican", "Europe/Vatican"),
+ ("Europe/Vienna", "Europe/Vienna"),
+ ("Europe/Vilnius", "Europe/Vilnius"),
+ ("Europe/Volgograd", "Europe/Volgograd"),
+ ("Europe/Warsaw", "Europe/Warsaw"),
+ ("Europe/Zagreb", "Europe/Zagreb"),
+ ("Europe/Zaporozhye", "Europe/Zaporozhye"),
+ ("Europe/Zurich", "Europe/Zurich"),
+ ("GMT", "GMT"),
+ ("Indian/Antananarivo", "Indian/Antananarivo"),
+ ("Indian/Chagos", "Indian/Chagos"),
+ ("Indian/Christmas", "Indian/Christmas"),
+ ("Indian/Cocos", "Indian/Cocos"),
+ ("Indian/Comoro", "Indian/Comoro"),
+ ("Indian/Kerguelen", "Indian/Kerguelen"),
+ ("Indian/Mahe", "Indian/Mahe"),
+ ("Indian/Maldives", "Indian/Maldives"),
+ ("Indian/Mauritius", "Indian/Mauritius"),
+ ("Indian/Mayotte", "Indian/Mayotte"),
+ ("Indian/Reunion", "Indian/Reunion"),
+ ("Pacific/Apia", "Pacific/Apia"),
+ ("Pacific/Auckland", "Pacific/Auckland"),
+ ("Pacific/Bougainville", "Pacific/Bougainville"),
+ ("Pacific/Chatham", "Pacific/Chatham"),
+ ("Pacific/Chuuk", "Pacific/Chuuk"),
+ ("Pacific/Easter", "Pacific/Easter"),
+ ("Pacific/Efate", "Pacific/Efate"),
+ ("Pacific/Enderbury", "Pacific/Enderbury"),
+ ("Pacific/Fakaofo", "Pacific/Fakaofo"),
+ ("Pacific/Fiji", "Pacific/Fiji"),
+ ("Pacific/Funafuti", "Pacific/Funafuti"),
+ ("Pacific/Galapagos", "Pacific/Galapagos"),
+ ("Pacific/Gambier", "Pacific/Gambier"),
+ ("Pacific/Guadalcanal", "Pacific/Guadalcanal"),
+ ("Pacific/Guam", "Pacific/Guam"),
+ ("Pacific/Honolulu", "Pacific/Honolulu"),
+ ("Pacific/Kiritimati", "Pacific/Kiritimati"),
+ ("Pacific/Kosrae", "Pacific/Kosrae"),
+ ("Pacific/Kwajalein", "Pacific/Kwajalein"),
+ ("Pacific/Majuro", "Pacific/Majuro"),
+ ("Pacific/Marquesas", "Pacific/Marquesas"),
+ ("Pacific/Midway", "Pacific/Midway"),
+ ("Pacific/Nauru", "Pacific/Nauru"),
+ ("Pacific/Niue", "Pacific/Niue"),
+ ("Pacific/Norfolk", "Pacific/Norfolk"),
+ ("Pacific/Noumea", "Pacific/Noumea"),
+ ("Pacific/Pago_Pago", "Pacific/Pago_Pago"),
+ ("Pacific/Palau", "Pacific/Palau"),
+ ("Pacific/Pitcairn", "Pacific/Pitcairn"),
+ ("Pacific/Pohnpei", "Pacific/Pohnpei"),
+ ("Pacific/Port_Moresby", "Pacific/Port_Moresby"),
+ ("Pacific/Rarotonga", "Pacific/Rarotonga"),
+ ("Pacific/Saipan", "Pacific/Saipan"),
+ ("Pacific/Tahiti", "Pacific/Tahiti"),
+ ("Pacific/Tarawa", "Pacific/Tarawa"),
+ ("Pacific/Tongatapu", "Pacific/Tongatapu"),
+ ("Pacific/Wake", "Pacific/Wake"),
+ ("Pacific/Wallis", "Pacific/Wallis"),
+ ("US/Alaska", "US/Alaska"),
+ ("US/Arizona", "US/Arizona"),
+ ("US/Central", "US/Central"),
+ ("US/Eastern", "US/Eastern"),
+ ("US/Hawaii", "US/Hawaii"),
+ ("US/Mountain", "US/Mountain"),
+ ("US/Pacific", "US/Pacific"),
+ ("UTC", "UTC"),
+ ],
+ max_length=80,
+ null=True,
+ ),
),
migrations.AlterField(
- model_name='theme',
- name='main_css',
- field=models.CharField(blank=True, default='css/fullbrutalism.css', max_length=1024, null=True),
+ model_name="theme",
+ name="main_css",
+ field=models.CharField(
+ blank=True, default="css/fullbrutalism.css", max_length=1024, null=True
+ ),
),
migrations.AlterField(
- model_name='theme',
- name='name',
+ model_name="theme",
+ name="name",
field=models.CharField(max_length=80, unique=True),
),
migrations.AlterField(
- model_name='theme',
- name='prefix',
- field=models.CharField(default='default', max_length=40, null=True),
+ model_name="theme",
+ name="prefix",
+ field=models.CharField(default="default", max_length=40, null=True),
),
migrations.AlterField(
- model_name='theme',
- name='tweaks_css',
+ model_name="theme",
+ name="tweaks_css",
field=models.CharField(blank=True, max_length=1024, null=True),
),
]
diff --git a/brutaldon/migrations/0011_auto_20180825_1017.py b/brutaldon/migrations/0011_auto_20180825_1017.py
index cc3664f..669ad27 100644
--- a/brutaldon/migrations/0011_auto_20180825_1017.py
+++ b/brutaldon/migrations/0011_auto_20180825_1017.py
@@ -5,14 +5,467 @@ from django.db import migrations, models
class Migration(migrations.Migration):
- dependencies = [
- ('brutaldon', '0010_auto_20180825_1009'),
- ]
+ dependencies = [("brutaldon", "0010_auto_20180825_1009")]
operations = [
migrations.AlterField(
- model_name='preference',
- name='timezone',
- field=models.CharField(blank=True, choices=[('Africa/Abidjan', 'Africa/Abidjan'), ('Africa/Accra', 'Africa/Accra'), ('Africa/Addis_Ababa', 'Africa/Addis_Ababa'), ('Africa/Algiers', 'Africa/Algiers'), ('Africa/Asmara', 'Africa/Asmara'), ('Africa/Bamako', 'Africa/Bamako'), ('Africa/Bangui', 'Africa/Bangui'), ('Africa/Banjul', 'Africa/Banjul'), ('Africa/Bissau', 'Africa/Bissau'), ('Africa/Blantyre', 'Africa/Blantyre'), ('Africa/Brazzaville', 'Africa/Brazzaville'), ('Africa/Bujumbura', 'Africa/Bujumbura'), ('Africa/Cairo', 'Africa/Cairo'), ('Africa/Casablanca', 'Africa/Casablanca'), ('Africa/Ceuta', 'Africa/Ceuta'), ('Africa/Conakry', 'Africa/Conakry'), ('Africa/Dakar', 'Africa/Dakar'), ('Africa/Dar_es_Salaam', 'Africa/Dar_es_Salaam'), ('Africa/Djibouti', 'Africa/Djibouti'), ('Africa/Douala', 'Africa/Douala'), ('Africa/El_Aaiun', 'Africa/El_Aaiun'), ('Africa/Freetown', 'Africa/Freetown'), ('Africa/Gaborone', 'Africa/Gaborone'), ('Africa/Harare', 'Africa/Harare'), ('Africa/Johannesburg', 'Africa/Johannesburg'), ('Africa/Juba', 'Africa/Juba'), ('Africa/Kampala', 'Africa/Kampala'), ('Africa/Khartoum', 'Africa/Khartoum'), ('Africa/Kigali', 'Africa/Kigali'), ('Africa/Kinshasa', 'Africa/Kinshasa'), ('Africa/Lagos', 'Africa/Lagos'), ('Africa/Libreville', 'Africa/Libreville'), ('Africa/Lome', 'Africa/Lome'), ('Africa/Luanda', 'Africa/Luanda'), ('Africa/Lubumbashi', 'Africa/Lubumbashi'), ('Africa/Lusaka', 'Africa/Lusaka'), ('Africa/Malabo', 'Africa/Malabo'), ('Africa/Maputo', 'Africa/Maputo'), ('Africa/Maseru', 'Africa/Maseru'), ('Africa/Mbabane', 'Africa/Mbabane'), ('Africa/Mogadishu', 'Africa/Mogadishu'), ('Africa/Monrovia', 'Africa/Monrovia'), ('Africa/Nairobi', 'Africa/Nairobi'), ('Africa/Ndjamena', 'Africa/Ndjamena'), ('Africa/Niamey', 'Africa/Niamey'), ('Africa/Nouakchott', 'Africa/Nouakchott'), ('Africa/Ouagadougou', 'Africa/Ouagadougou'), ('Africa/Porto-Novo', 'Africa/Porto-Novo'), ('Africa/Sao_Tome', 'Africa/Sao_Tome'), ('Africa/Tripoli', 'Africa/Tripoli'), ('Africa/Tunis', 'Africa/Tunis'), ('Africa/Windhoek', 'Africa/Windhoek'), ('America/Adak', 'America/Adak'), ('America/Anchorage', 'America/Anchorage'), ('America/Anguilla', 'America/Anguilla'), ('America/Antigua', 'America/Antigua'), ('America/Araguaina', 'America/Araguaina'), ('America/Argentina/Buenos_Aires', 'America/Argentina/Buenos_Aires'), ('America/Argentina/Catamarca', 'America/Argentina/Catamarca'), ('America/Argentina/Cordoba', 'America/Argentina/Cordoba'), ('America/Argentina/Jujuy', 'America/Argentina/Jujuy'), ('America/Argentina/La_Rioja', 'America/Argentina/La_Rioja'), ('America/Argentina/Mendoza', 'America/Argentina/Mendoza'), ('America/Argentina/Rio_Gallegos', 'America/Argentina/Rio_Gallegos'), ('America/Argentina/Salta', 'America/Argentina/Salta'), ('America/Argentina/San_Juan', 'America/Argentina/San_Juan'), ('America/Argentina/San_Luis', 'America/Argentina/San_Luis'), ('America/Argentina/Tucuman', 'America/Argentina/Tucuman'), ('America/Argentina/Ushuaia', 'America/Argentina/Ushuaia'), ('America/Aruba', 'America/Aruba'), ('America/Asuncion', 'America/Asuncion'), ('America/Atikokan', 'America/Atikokan'), ('America/Bahia', 'America/Bahia'), ('America/Bahia_Banderas', 'America/Bahia_Banderas'), ('America/Barbados', 'America/Barbados'), ('America/Belem', 'America/Belem'), ('America/Belize', 'America/Belize'), ('America/Blanc-Sablon', 'America/Blanc-Sablon'), ('America/Boa_Vista', 'America/Boa_Vista'), ('America/Bogota', 'America/Bogota'), ('America/Boise', 'America/Boise'), ('America/Cambridge_Bay', 'America/Cambridge_Bay'), ('America/Campo_Grande', 'America/Campo_Grande'), ('America/Cancun', 'America/Cancun'), ('America/Caracas', 'America/Caracas'), ('America/Cayenne', 'America/Cayenne'), ('America/Cayman', 'America/Cayman'), ('America/Chicago', 'America/Chicago'), ('America/Chihuahua', 'America/Chihuahua'), ('America/Costa_Rica', 'America/Costa_Rica'), ('America/Creston', 'America/Creston'), ('America/Cuiaba', 'America/Cuiaba'), ('America/Curacao', 'America/Curacao'), ('America/Danmarkshavn', 'America/Danmarkshavn'), ('America/Dawson', 'America/Dawson'), ('America/Dawson_Creek', 'America/Dawson_Creek'), ('America/Denver', 'America/Denver'), ('America/Detroit', 'America/Detroit'), ('America/Dominica', 'America/Dominica'), ('America/Edmonton', 'America/Edmonton'), ('America/Eirunepe', 'America/Eirunepe'), ('America/El_Salvador', 'America/El_Salvador'), ('America/Fort_Nelson', 'America/Fort_Nelson'), ('America/Fortaleza', 'America/Fortaleza'), ('America/Glace_Bay', 'America/Glace_Bay'), ('America/Godthab', 'America/Godthab'), ('America/Goose_Bay', 'America/Goose_Bay'), ('America/Grand_Turk', 'America/Grand_Turk'), ('America/Grenada', 'America/Grenada'), ('America/Guadeloupe', 'America/Guadeloupe'), ('America/Guatemala', 'America/Guatemala'), ('America/Guayaquil', 'America/Guayaquil'), ('America/Guyana', 'America/Guyana'), ('America/Halifax', 'America/Halifax'), ('America/Havana', 'America/Havana'), ('America/Hermosillo', 'America/Hermosillo'), ('America/Indiana/Indianapolis', 'America/Indiana/Indianapolis'), ('America/Indiana/Knox', 'America/Indiana/Knox'), ('America/Indiana/Marengo', 'America/Indiana/Marengo'), ('America/Indiana/Petersburg', 'America/Indiana/Petersburg'), ('America/Indiana/Tell_City', 'America/Indiana/Tell_City'), ('America/Indiana/Vevay', 'America/Indiana/Vevay'), ('America/Indiana/Vincennes', 'America/Indiana/Vincennes'), ('America/Indiana/Winamac', 'America/Indiana/Winamac'), ('America/Inuvik', 'America/Inuvik'), ('America/Iqaluit', 'America/Iqaluit'), ('America/Jamaica', 'America/Jamaica'), ('America/Juneau', 'America/Juneau'), ('America/Kentucky/Louisville', 'America/Kentucky/Louisville'), ('America/Kentucky/Monticello', 'America/Kentucky/Monticello'), ('America/Kralendijk', 'America/Kralendijk'), ('America/La_Paz', 'America/La_Paz'), ('America/Lima', 'America/Lima'), ('America/Los_Angeles', 'America/Los_Angeles'), ('America/Lower_Princes', 'America/Lower_Princes'), ('America/Maceio', 'America/Maceio'), ('America/Managua', 'America/Managua'), ('America/Manaus', 'America/Manaus'), ('America/Marigot', 'America/Marigot'), ('America/Martinique', 'America/Martinique'), ('America/Matamoros', 'America/Matamoros'), ('America/Mazatlan', 'America/Mazatlan'), ('America/Menominee', 'America/Menominee'), ('America/Merida', 'America/Merida'), ('America/Metlakatla', 'America/Metlakatla'), ('America/Mexico_City', 'America/Mexico_City'), ('America/Miquelon', 'America/Miquelon'), ('America/Moncton', 'America/Moncton'), ('America/Monterrey', 'America/Monterrey'), ('America/Montevideo', 'America/Montevideo'), ('America/Montserrat', 'America/Montserrat'), ('America/Nassau', 'America/Nassau'), ('America/New_York', 'America/New_York'), ('America/Nipigon', 'America/Nipigon'), ('America/Nome', 'America/Nome'), ('America/Noronha', 'America/Noronha'), ('America/North_Dakota/Beulah', 'America/North_Dakota/Beulah'), ('America/North_Dakota/Center', 'America/North_Dakota/Center'), ('America/North_Dakota/New_Salem', 'America/North_Dakota/New_Salem'), ('America/Ojinaga', 'America/Ojinaga'), ('America/Panama', 'America/Panama'), ('America/Pangnirtung', 'America/Pangnirtung'), ('America/Paramaribo', 'America/Paramaribo'), ('America/Phoenix', 'America/Phoenix'), ('America/Port-au-Prince', 'America/Port-au-Prince'), ('America/Port_of_Spain', 'America/Port_of_Spain'), ('America/Porto_Velho', 'America/Porto_Velho'), ('America/Puerto_Rico', 'America/Puerto_Rico'), ('America/Punta_Arenas', 'America/Punta_Arenas'), ('America/Rainy_River', 'America/Rainy_River'), ('America/Rankin_Inlet', 'America/Rankin_Inlet'), ('America/Recife', 'America/Recife'), ('America/Regina', 'America/Regina'), ('America/Resolute', 'America/Resolute'), ('America/Rio_Branco', 'America/Rio_Branco'), ('America/Santarem', 'America/Santarem'), ('America/Santiago', 'America/Santiago'), ('America/Santo_Domingo', 'America/Santo_Domingo'), ('America/Sao_Paulo', 'America/Sao_Paulo'), ('America/Scoresbysund', 'America/Scoresbysund'), ('America/Sitka', 'America/Sitka'), ('America/St_Barthelemy', 'America/St_Barthelemy'), ('America/St_Johns', 'America/St_Johns'), ('America/St_Kitts', 'America/St_Kitts'), ('America/St_Lucia', 'America/St_Lucia'), ('America/St_Thomas', 'America/St_Thomas'), ('America/St_Vincent', 'America/St_Vincent'), ('America/Swift_Current', 'America/Swift_Current'), ('America/Tegucigalpa', 'America/Tegucigalpa'), ('America/Thule', 'America/Thule'), ('America/Thunder_Bay', 'America/Thunder_Bay'), ('America/Tijuana', 'America/Tijuana'), ('America/Toronto', 'America/Toronto'), ('America/Tortola', 'America/Tortola'), ('America/Vancouver', 'America/Vancouver'), ('America/Whitehorse', 'America/Whitehorse'), ('America/Winnipeg', 'America/Winnipeg'), ('America/Yakutat', 'America/Yakutat'), ('America/Yellowknife', 'America/Yellowknife'), ('Antarctica/Casey', 'Antarctica/Casey'), ('Antarctica/Davis', 'Antarctica/Davis'), ('Antarctica/DumontDUrville', 'Antarctica/DumontDUrville'), ('Antarctica/Macquarie', 'Antarctica/Macquarie'), ('Antarctica/Mawson', 'Antarctica/Mawson'), ('Antarctica/McMurdo', 'Antarctica/McMurdo'), ('Antarctica/Palmer', 'Antarctica/Palmer'), ('Antarctica/Rothera', 'Antarctica/Rothera'), ('Antarctica/Syowa', 'Antarctica/Syowa'), ('Antarctica/Troll', 'Antarctica/Troll'), ('Antarctica/Vostok', 'Antarctica/Vostok'), ('Arctic/Longyearbyen', 'Arctic/Longyearbyen'), ('Asia/Aden', 'Asia/Aden'), ('Asia/Almaty', 'Asia/Almaty'), ('Asia/Amman', 'Asia/Amman'), ('Asia/Anadyr', 'Asia/Anadyr'), ('Asia/Aqtau', 'Asia/Aqtau'), ('Asia/Aqtobe', 'Asia/Aqtobe'), ('Asia/Ashgabat', 'Asia/Ashgabat'), ('Asia/Atyrau', 'Asia/Atyrau'), ('Asia/Baghdad', 'Asia/Baghdad'), ('Asia/Bahrain', 'Asia/Bahrain'), ('Asia/Baku', 'Asia/Baku'), ('Asia/Bangkok', 'Asia/Bangkok'), ('Asia/Barnaul', 'Asia/Barnaul'), ('Asia/Beirut', 'Asia/Beirut'), ('Asia/Bishkek', 'Asia/Bishkek'), ('Asia/Brunei', 'Asia/Brunei'), ('Asia/Chita', 'Asia/Chita'), ('Asia/Choibalsan', 'Asia/Choibalsan'), ('Asia/Colombo', 'Asia/Colombo'), ('Asia/Damascus', 'Asia/Damascus'), ('Asia/Dhaka', 'Asia/Dhaka'), ('Asia/Dili', 'Asia/Dili'), ('Asia/Dubai', 'Asia/Dubai'), ('Asia/Dushanbe', 'Asia/Dushanbe'), ('Asia/Famagusta', 'Asia/Famagusta'), ('Asia/Gaza', 'Asia/Gaza'), ('Asia/Hebron', 'Asia/Hebron'), ('Asia/Ho_Chi_Minh', 'Asia/Ho_Chi_Minh'), ('Asia/Hong_Kong', 'Asia/Hong_Kong'), ('Asia/Hovd', 'Asia/Hovd'), ('Asia/Irkutsk', 'Asia/Irkutsk'), ('Asia/Jakarta', 'Asia/Jakarta'), ('Asia/Jayapura', 'Asia/Jayapura'), ('Asia/Jerusalem', 'Asia/Jerusalem'), ('Asia/Kabul', 'Asia/Kabul'), ('Asia/Kamchatka', 'Asia/Kamchatka'), ('Asia/Karachi', 'Asia/Karachi'), ('Asia/Kathmandu', 'Asia/Kathmandu'), ('Asia/Khandyga', 'Asia/Khandyga'), ('Asia/Kolkata', 'Asia/Kolkata'), ('Asia/Krasnoyarsk', 'Asia/Krasnoyarsk'), ('Asia/Kuala_Lumpur', 'Asia/Kuala_Lumpur'), ('Asia/Kuching', 'Asia/Kuching'), ('Asia/Kuwait', 'Asia/Kuwait'), ('Asia/Macau', 'Asia/Macau'), ('Asia/Magadan', 'Asia/Magadan'), ('Asia/Makassar', 'Asia/Makassar'), ('Asia/Manila', 'Asia/Manila'), ('Asia/Muscat', 'Asia/Muscat'), ('Asia/Nicosia', 'Asia/Nicosia'), ('Asia/Novokuznetsk', 'Asia/Novokuznetsk'), ('Asia/Novosibirsk', 'Asia/Novosibirsk'), ('Asia/Omsk', 'Asia/Omsk'), ('Asia/Oral', 'Asia/Oral'), ('Asia/Phnom_Penh', 'Asia/Phnom_Penh'), ('Asia/Pontianak', 'Asia/Pontianak'), ('Asia/Pyongyang', 'Asia/Pyongyang'), ('Asia/Qatar', 'Asia/Qatar'), ('Asia/Qyzylorda', 'Asia/Qyzylorda'), ('Asia/Riyadh', 'Asia/Riyadh'), ('Asia/Sakhalin', 'Asia/Sakhalin'), ('Asia/Samarkand', 'Asia/Samarkand'), ('Asia/Seoul', 'Asia/Seoul'), ('Asia/Shanghai', 'Asia/Shanghai'), ('Asia/Singapore', 'Asia/Singapore'), ('Asia/Srednekolymsk', 'Asia/Srednekolymsk'), ('Asia/Taipei', 'Asia/Taipei'), ('Asia/Tashkent', 'Asia/Tashkent'), ('Asia/Tbilisi', 'Asia/Tbilisi'), ('Asia/Tehran', 'Asia/Tehran'), ('Asia/Thimphu', 'Asia/Thimphu'), ('Asia/Tokyo', 'Asia/Tokyo'), ('Asia/Tomsk', 'Asia/Tomsk'), ('Asia/Ulaanbaatar', 'Asia/Ulaanbaatar'), ('Asia/Urumqi', 'Asia/Urumqi'), ('Asia/Ust-Nera', 'Asia/Ust-Nera'), ('Asia/Vientiane', 'Asia/Vientiane'), ('Asia/Vladivostok', 'Asia/Vladivostok'), ('Asia/Yakutsk', 'Asia/Yakutsk'), ('Asia/Yangon', 'Asia/Yangon'), ('Asia/Yekaterinburg', 'Asia/Yekaterinburg'), ('Asia/Yerevan', 'Asia/Yerevan'), ('Atlantic/Azores', 'Atlantic/Azores'), ('Atlantic/Bermuda', 'Atlantic/Bermuda'), ('Atlantic/Canary', 'Atlantic/Canary'), ('Atlantic/Cape_Verde', 'Atlantic/Cape_Verde'), ('Atlantic/Faroe', 'Atlantic/Faroe'), ('Atlantic/Madeira', 'Atlantic/Madeira'), ('Atlantic/Reykjavik', 'Atlantic/Reykjavik'), ('Atlantic/South_Georgia', 'Atlantic/South_Georgia'), ('Atlantic/St_Helena', 'Atlantic/St_Helena'), ('Atlantic/Stanley', 'Atlantic/Stanley'), ('Australia/Adelaide', 'Australia/Adelaide'), ('Australia/Brisbane', 'Australia/Brisbane'), ('Australia/Broken_Hill', 'Australia/Broken_Hill'), ('Australia/Currie', 'Australia/Currie'), ('Australia/Darwin', 'Australia/Darwin'), ('Australia/Eucla', 'Australia/Eucla'), ('Australia/Hobart', 'Australia/Hobart'), ('Australia/Lindeman', 'Australia/Lindeman'), ('Australia/Lord_Howe', 'Australia/Lord_Howe'), ('Australia/Melbourne', 'Australia/Melbourne'), ('Australia/Perth', 'Australia/Perth'), ('Australia/Sydney', 'Australia/Sydney'), ('Canada/Atlantic', 'Canada/Atlantic'), ('Canada/Central', 'Canada/Central'), ('Canada/Eastern', 'Canada/Eastern'), ('Canada/Mountain', 'Canada/Mountain'), ('Canada/Newfoundland', 'Canada/Newfoundland'), ('Canada/Pacific', 'Canada/Pacific'), ('Europe/Amsterdam', 'Europe/Amsterdam'), ('Europe/Andorra', 'Europe/Andorra'), ('Europe/Astrakhan', 'Europe/Astrakhan'), ('Europe/Athens', 'Europe/Athens'), ('Europe/Belgrade', 'Europe/Belgrade'), ('Europe/Berlin', 'Europe/Berlin'), ('Europe/Bratislava', 'Europe/Bratislava'), ('Europe/Brussels', 'Europe/Brussels'), ('Europe/Bucharest', 'Europe/Bucharest'), ('Europe/Budapest', 'Europe/Budapest'), ('Europe/Busingen', 'Europe/Busingen'), ('Europe/Chisinau', 'Europe/Chisinau'), ('Europe/Copenhagen', 'Europe/Copenhagen'), ('Europe/Dublin', 'Europe/Dublin'), ('Europe/Gibraltar', 'Europe/Gibraltar'), ('Europe/Guernsey', 'Europe/Guernsey'), ('Europe/Helsinki', 'Europe/Helsinki'), ('Europe/Isle_of_Man', 'Europe/Isle_of_Man'), ('Europe/Istanbul', 'Europe/Istanbul'), ('Europe/Jersey', 'Europe/Jersey'), ('Europe/Kaliningrad', 'Europe/Kaliningrad'), ('Europe/Kiev', 'Europe/Kiev'), ('Europe/Kirov', 'Europe/Kirov'), ('Europe/Lisbon', 'Europe/Lisbon'), ('Europe/Ljubljana', 'Europe/Ljubljana'), ('Europe/London', 'Europe/London'), ('Europe/Luxembourg', 'Europe/Luxembourg'), ('Europe/Madrid', 'Europe/Madrid'), ('Europe/Malta', 'Europe/Malta'), ('Europe/Mariehamn', 'Europe/Mariehamn'), ('Europe/Minsk', 'Europe/Minsk'), ('Europe/Monaco', 'Europe/Monaco'), ('Europe/Moscow', 'Europe/Moscow'), ('Europe/Oslo', 'Europe/Oslo'), ('Europe/Paris', 'Europe/Paris'), ('Europe/Podgorica', 'Europe/Podgorica'), ('Europe/Prague', 'Europe/Prague'), ('Europe/Riga', 'Europe/Riga'), ('Europe/Rome', 'Europe/Rome'), ('Europe/Samara', 'Europe/Samara'), ('Europe/San_Marino', 'Europe/San_Marino'), ('Europe/Sarajevo', 'Europe/Sarajevo'), ('Europe/Saratov', 'Europe/Saratov'), ('Europe/Simferopol', 'Europe/Simferopol'), ('Europe/Skopje', 'Europe/Skopje'), ('Europe/Sofia', 'Europe/Sofia'), ('Europe/Stockholm', 'Europe/Stockholm'), ('Europe/Tallinn', 'Europe/Tallinn'), ('Europe/Tirane', 'Europe/Tirane'), ('Europe/Ulyanovsk', 'Europe/Ulyanovsk'), ('Europe/Uzhgorod', 'Europe/Uzhgorod'), ('Europe/Vaduz', 'Europe/Vaduz'), ('Europe/Vatican', 'Europe/Vatican'), ('Europe/Vienna', 'Europe/Vienna'), ('Europe/Vilnius', 'Europe/Vilnius'), ('Europe/Volgograd', 'Europe/Volgograd'), ('Europe/Warsaw', 'Europe/Warsaw'), ('Europe/Zagreb', 'Europe/Zagreb'), ('Europe/Zaporozhye', 'Europe/Zaporozhye'), ('Europe/Zurich', 'Europe/Zurich'), ('GMT', 'GMT'), ('Indian/Antananarivo', 'Indian/Antananarivo'), ('Indian/Chagos', 'Indian/Chagos'), ('Indian/Christmas', 'Indian/Christmas'), ('Indian/Cocos', 'Indian/Cocos'), ('Indian/Comoro', 'Indian/Comoro'), ('Indian/Kerguelen', 'Indian/Kerguelen'), ('Indian/Mahe', 'Indian/Mahe'), ('Indian/Maldives', 'Indian/Maldives'), ('Indian/Mauritius', 'Indian/Mauritius'), ('Indian/Mayotte', 'Indian/Mayotte'), ('Indian/Reunion', 'Indian/Reunion'), ('Pacific/Apia', 'Pacific/Apia'), ('Pacific/Auckland', 'Pacific/Auckland'), ('Pacific/Bougainville', 'Pacific/Bougainville'), ('Pacific/Chatham', 'Pacific/Chatham'), ('Pacific/Chuuk', 'Pacific/Chuuk'), ('Pacific/Easter', 'Pacific/Easter'), ('Pacific/Efate', 'Pacific/Efate'), ('Pacific/Enderbury', 'Pacific/Enderbury'), ('Pacific/Fakaofo', 'Pacific/Fakaofo'), ('Pacific/Fiji', 'Pacific/Fiji'), ('Pacific/Funafuti', 'Pacific/Funafuti'), ('Pacific/Galapagos', 'Pacific/Galapagos'), ('Pacific/Gambier', 'Pacific/Gambier'), ('Pacific/Guadalcanal', 'Pacific/Guadalcanal'), ('Pacific/Guam', 'Pacific/Guam'), ('Pacific/Honolulu', 'Pacific/Honolulu'), ('Pacific/Kiritimati', 'Pacific/Kiritimati'), ('Pacific/Kosrae', 'Pacific/Kosrae'), ('Pacific/Kwajalein', 'Pacific/Kwajalein'), ('Pacific/Majuro', 'Pacific/Majuro'), ('Pacific/Marquesas', 'Pacific/Marquesas'), ('Pacific/Midway', 'Pacific/Midway'), ('Pacific/Nauru', 'Pacific/Nauru'), ('Pacific/Niue', 'Pacific/Niue'), ('Pacific/Norfolk', 'Pacific/Norfolk'), ('Pacific/Noumea', 'Pacific/Noumea'), ('Pacific/Pago_Pago', 'Pacific/Pago_Pago'), ('Pacific/Palau', 'Pacific/Palau'), ('Pacific/Pitcairn', 'Pacific/Pitcairn'), ('Pacific/Pohnpei', 'Pacific/Pohnpei'), ('Pacific/Port_Moresby', 'Pacific/Port_Moresby'), ('Pacific/Rarotonga', 'Pacific/Rarotonga'), ('Pacific/Saipan', 'Pacific/Saipan'), ('Pacific/Tahiti', 'Pacific/Tahiti'), ('Pacific/Tarawa', 'Pacific/Tarawa'), ('Pacific/Tongatapu', 'Pacific/Tongatapu'), ('Pacific/Wake', 'Pacific/Wake'), ('Pacific/Wallis', 'Pacific/Wallis'), ('US/Alaska', 'US/Alaska'), ('US/Arizona', 'US/Arizona'), ('US/Central', 'US/Central'), ('US/Eastern', 'US/Eastern'), ('US/Hawaii', 'US/Hawaii'), ('US/Mountain', 'US/Mountain'), ('US/Pacific', 'US/Pacific'), ('UTC', 'UTC')], default='UTC', max_length=80, null=True),
- ),
+ model_name="preference",
+ name="timezone",
+ field=models.CharField(
+ blank=True,
+ choices=[
+ ("Africa/Abidjan", "Africa/Abidjan"),
+ ("Africa/Accra", "Africa/Accra"),
+ ("Africa/Addis_Ababa", "Africa/Addis_Ababa"),
+ ("Africa/Algiers", "Africa/Algiers"),
+ ("Africa/Asmara", "Africa/Asmara"),
+ ("Africa/Bamako", "Africa/Bamako"),
+ ("Africa/Bangui", "Africa/Bangui"),
+ ("Africa/Banjul", "Africa/Banjul"),
+ ("Africa/Bissau", "Africa/Bissau"),
+ ("Africa/Blantyre", "Africa/Blantyre"),
+ ("Africa/Brazzaville", "Africa/Brazzaville"),
+ ("Africa/Bujumbura", "Africa/Bujumbura"),
+ ("Africa/Cairo", "Africa/Cairo"),
+ ("Africa/Casablanca", "Africa/Casablanca"),
+ ("Africa/Ceuta", "Africa/Ceuta"),
+ ("Africa/Conakry", "Africa/Conakry"),
+ ("Africa/Dakar", "Africa/Dakar"),
+ ("Africa/Dar_es_Salaam", "Africa/Dar_es_Salaam"),
+ ("Africa/Djibouti", "Africa/Djibouti"),
+ ("Africa/Douala", "Africa/Douala"),
+ ("Africa/El_Aaiun", "Africa/El_Aaiun"),
+ ("Africa/Freetown", "Africa/Freetown"),
+ ("Africa/Gaborone", "Africa/Gaborone"),
+ ("Africa/Harare", "Africa/Harare"),
+ ("Africa/Johannesburg", "Africa/Johannesburg"),
+ ("Africa/Juba", "Africa/Juba"),
+ ("Africa/Kampala", "Africa/Kampala"),
+ ("Africa/Khartoum", "Africa/Khartoum"),
+ ("Africa/Kigali", "Africa/Kigali"),
+ ("Africa/Kinshasa", "Africa/Kinshasa"),
+ ("Africa/Lagos", "Africa/Lagos"),
+ ("Africa/Libreville", "Africa/Libreville"),
+ ("Africa/Lome", "Africa/Lome"),
+ ("Africa/Luanda", "Africa/Luanda"),
+ ("Africa/Lubumbashi", "Africa/Lubumbashi"),
+ ("Africa/Lusaka", "Africa/Lusaka"),
+ ("Africa/Malabo", "Africa/Malabo"),
+ ("Africa/Maputo", "Africa/Maputo"),
+ ("Africa/Maseru", "Africa/Maseru"),
+ ("Africa/Mbabane", "Africa/Mbabane"),
+ ("Africa/Mogadishu", "Africa/Mogadishu"),
+ ("Africa/Monrovia", "Africa/Monrovia"),
+ ("Africa/Nairobi", "Africa/Nairobi"),
+ ("Africa/Ndjamena", "Africa/Ndjamena"),
+ ("Africa/Niamey", "Africa/Niamey"),
+ ("Africa/Nouakchott", "Africa/Nouakchott"),
+ ("Africa/Ouagadougou", "Africa/Ouagadougou"),
+ ("Africa/Porto-Novo", "Africa/Porto-Novo"),
+ ("Africa/Sao_Tome", "Africa/Sao_Tome"),
+ ("Africa/Tripoli", "Africa/Tripoli"),
+ ("Africa/Tunis", "Africa/Tunis"),
+ ("Africa/Windhoek", "Africa/Windhoek"),
+ ("America/Adak", "America/Adak"),
+ ("America/Anchorage", "America/Anchorage"),
+ ("America/Anguilla", "America/Anguilla"),
+ ("America/Antigua", "America/Antigua"),
+ ("America/Araguaina", "America/Araguaina"),
+ (
+ "America/Argentina/Buenos_Aires",
+ "America/Argentina/Buenos_Aires",
+ ),
+ ("America/Argentina/Catamarca", "America/Argentina/Catamarca"),
+ ("America/Argentina/Cordoba", "America/Argentina/Cordoba"),
+ ("America/Argentina/Jujuy", "America/Argentina/Jujuy"),
+ ("America/Argentina/La_Rioja", "America/Argentina/La_Rioja"),
+ ("America/Argentina/Mendoza", "America/Argentina/Mendoza"),
+ (
+ "America/Argentina/Rio_Gallegos",
+ "America/Argentina/Rio_Gallegos",
+ ),
+ ("America/Argentina/Salta", "America/Argentina/Salta"),
+ ("America/Argentina/San_Juan", "America/Argentina/San_Juan"),
+ ("America/Argentina/San_Luis", "America/Argentina/San_Luis"),
+ ("America/Argentina/Tucuman", "America/Argentina/Tucuman"),
+ ("America/Argentina/Ushuaia", "America/Argentina/Ushuaia"),
+ ("America/Aruba", "America/Aruba"),
+ ("America/Asuncion", "America/Asuncion"),
+ ("America/Atikokan", "America/Atikokan"),
+ ("America/Bahia", "America/Bahia"),
+ ("America/Bahia_Banderas", "America/Bahia_Banderas"),
+ ("America/Barbados", "America/Barbados"),
+ ("America/Belem", "America/Belem"),
+ ("America/Belize", "America/Belize"),
+ ("America/Blanc-Sablon", "America/Blanc-Sablon"),
+ ("America/Boa_Vista", "America/Boa_Vista"),
+ ("America/Bogota", "America/Bogota"),
+ ("America/Boise", "America/Boise"),
+ ("America/Cambridge_Bay", "America/Cambridge_Bay"),
+ ("America/Campo_Grande", "America/Campo_Grande"),
+ ("America/Cancun", "America/Cancun"),
+ ("America/Caracas", "America/Caracas"),
+ ("America/Cayenne", "America/Cayenne"),
+ ("America/Cayman", "America/Cayman"),
+ ("America/Chicago", "America/Chicago"),
+ ("America/Chihuahua", "America/Chihuahua"),
+ ("America/Costa_Rica", "America/Costa_Rica"),
+ ("America/Creston", "America/Creston"),
+ ("America/Cuiaba", "America/Cuiaba"),
+ ("America/Curacao", "America/Curacao"),
+ ("America/Danmarkshavn", "America/Danmarkshavn"),
+ ("America/Dawson", "America/Dawson"),
+ ("America/Dawson_Creek", "America/Dawson_Creek"),
+ ("America/Denver", "America/Denver"),
+ ("America/Detroit", "America/Detroit"),
+ ("America/Dominica", "America/Dominica"),
+ ("America/Edmonton", "America/Edmonton"),
+ ("America/Eirunepe", "America/Eirunepe"),
+ ("America/El_Salvador", "America/El_Salvador"),
+ ("America/Fort_Nelson", "America/Fort_Nelson"),
+ ("America/Fortaleza", "America/Fortaleza"),
+ ("America/Glace_Bay", "America/Glace_Bay"),
+ ("America/Godthab", "America/Godthab"),
+ ("America/Goose_Bay", "America/Goose_Bay"),
+ ("America/Grand_Turk", "America/Grand_Turk"),
+ ("America/Grenada", "America/Grenada"),
+ ("America/Guadeloupe", "America/Guadeloupe"),
+ ("America/Guatemala", "America/Guatemala"),
+ ("America/Guayaquil", "America/Guayaquil"),
+ ("America/Guyana", "America/Guyana"),
+ ("America/Halifax", "America/Halifax"),
+ ("America/Havana", "America/Havana"),
+ ("America/Hermosillo", "America/Hermosillo"),
+ ("America/Indiana/Indianapolis", "America/Indiana/Indianapolis"),
+ ("America/Indiana/Knox", "America/Indiana/Knox"),
+ ("America/Indiana/Marengo", "America/Indiana/Marengo"),
+ ("America/Indiana/Petersburg", "America/Indiana/Petersburg"),
+ ("America/Indiana/Tell_City", "America/Indiana/Tell_City"),
+ ("America/Indiana/Vevay", "America/Indiana/Vevay"),
+ ("America/Indiana/Vincennes", "America/Indiana/Vincennes"),
+ ("America/Indiana/Winamac", "America/Indiana/Winamac"),
+ ("America/Inuvik", "America/Inuvik"),
+ ("America/Iqaluit", "America/Iqaluit"),
+ ("America/Jamaica", "America/Jamaica"),
+ ("America/Juneau", "America/Juneau"),
+ ("America/Kentucky/Louisville", "America/Kentucky/Louisville"),
+ ("America/Kentucky/Monticello", "America/Kentucky/Monticello"),
+ ("America/Kralendijk", "America/Kralendijk"),
+ ("America/La_Paz", "America/La_Paz"),
+ ("America/Lima", "America/Lima"),
+ ("America/Los_Angeles", "America/Los_Angeles"),
+ ("America/Lower_Princes", "America/Lower_Princes"),
+ ("America/Maceio", "America/Maceio"),
+ ("America/Managua", "America/Managua"),
+ ("America/Manaus", "America/Manaus"),
+ ("America/Marigot", "America/Marigot"),
+ ("America/Martinique", "America/Martinique"),
+ ("America/Matamoros", "America/Matamoros"),
+ ("America/Mazatlan", "America/Mazatlan"),
+ ("America/Menominee", "America/Menominee"),
+ ("America/Merida", "America/Merida"),
+ ("America/Metlakatla", "America/Metlakatla"),
+ ("America/Mexico_City", "America/Mexico_City"),
+ ("America/Miquelon", "America/Miquelon"),
+ ("America/Moncton", "America/Moncton"),
+ ("America/Monterrey", "America/Monterrey"),
+ ("America/Montevideo", "America/Montevideo"),
+ ("America/Montserrat", "America/Montserrat"),
+ ("America/Nassau", "America/Nassau"),
+ ("America/New_York", "America/New_York"),
+ ("America/Nipigon", "America/Nipigon"),
+ ("America/Nome", "America/Nome"),
+ ("America/Noronha", "America/Noronha"),
+ ("America/North_Dakota/Beulah", "America/North_Dakota/Beulah"),
+ ("America/North_Dakota/Center", "America/North_Dakota/Center"),
+ (
+ "America/North_Dakota/New_Salem",
+ "America/North_Dakota/New_Salem",
+ ),
+ ("America/Ojinaga", "America/Ojinaga"),
+ ("America/Panama", "America/Panama"),
+ ("America/Pangnirtung", "America/Pangnirtung"),
+ ("America/Paramaribo", "America/Paramaribo"),
+ ("America/Phoenix", "America/Phoenix"),
+ ("America/Port-au-Prince", "America/Port-au-Prince"),
+ ("America/Port_of_Spain", "America/Port_of_Spain"),
+ ("America/Porto_Velho", "America/Porto_Velho"),
+ ("America/Puerto_Rico", "America/Puerto_Rico"),
+ ("America/Punta_Arenas", "America/Punta_Arenas"),
+ ("America/Rainy_River", "America/Rainy_River"),
+ ("America/Rankin_Inlet", "America/Rankin_Inlet"),
+ ("America/Recife", "America/Recife"),
+ ("America/Regina", "America/Regina"),
+ ("America/Resolute", "America/Resolute"),
+ ("America/Rio_Branco", "America/Rio_Branco"),
+ ("America/Santarem", "America/Santarem"),
+ ("America/Santiago", "America/Santiago"),
+ ("America/Santo_Domingo", "America/Santo_Domingo"),
+ ("America/Sao_Paulo", "America/Sao_Paulo"),
+ ("America/Scoresbysund", "America/Scoresbysund"),
+ ("America/Sitka", "America/Sitka"),
+ ("America/St_Barthelemy", "America/St_Barthelemy"),
+ ("America/St_Johns", "America/St_Johns"),
+ ("America/St_Kitts", "America/St_Kitts"),
+ ("America/St_Lucia", "America/St_Lucia"),
+ ("America/St_Thomas", "America/St_Thomas"),
+ ("America/St_Vincent", "America/St_Vincent"),
+ ("America/Swift_Current", "America/Swift_Current"),
+ ("America/Tegucigalpa", "America/Tegucigalpa"),
+ ("America/Thule", "America/Thule"),
+ ("America/Thunder_Bay", "America/Thunder_Bay"),
+ ("America/Tijuana", "America/Tijuana"),
+ ("America/Toronto", "America/Toronto"),
+ ("America/Tortola", "America/Tortola"),
+ ("America/Vancouver", "America/Vancouver"),
+ ("America/Whitehorse", "America/Whitehorse"),
+ ("America/Winnipeg", "America/Winnipeg"),
+ ("America/Yakutat", "America/Yakutat"),
+ ("America/Yellowknife", "America/Yellowknife"),
+ ("Antarctica/Casey", "Antarctica/Casey"),
+ ("Antarctica/Davis", "Antarctica/Davis"),
+ ("Antarctica/DumontDUrville", "Antarctica/DumontDUrville"),
+ ("Antarctica/Macquarie", "Antarctica/Macquarie"),
+ ("Antarctica/Mawson", "Antarctica/Mawson"),
+ ("Antarctica/McMurdo", "Antarctica/McMurdo"),
+ ("Antarctica/Palmer", "Antarctica/Palmer"),
+ ("Antarctica/Rothera", "Antarctica/Rothera"),
+ ("Antarctica/Syowa", "Antarctica/Syowa"),
+ ("Antarctica/Troll", "Antarctica/Troll"),
+ ("Antarctica/Vostok", "Antarctica/Vostok"),
+ ("Arctic/Longyearbyen", "Arctic/Longyearbyen"),
+ ("Asia/Aden", "Asia/Aden"),
+ ("Asia/Almaty", "Asia/Almaty"),
+ ("Asia/Amman", "Asia/Amman"),
+ ("Asia/Anadyr", "Asia/Anadyr"),
+ ("Asia/Aqtau", "Asia/Aqtau"),
+ ("Asia/Aqtobe", "Asia/Aqtobe"),
+ ("Asia/Ashgabat", "Asia/Ashgabat"),
+ ("Asia/Atyrau", "Asia/Atyrau"),
+ ("Asia/Baghdad", "Asia/Baghdad"),
+ ("Asia/Bahrain", "Asia/Bahrain"),
+ ("Asia/Baku", "Asia/Baku"),
+ ("Asia/Bangkok", "Asia/Bangkok"),
+ ("Asia/Barnaul", "Asia/Barnaul"),
+ ("Asia/Beirut", "Asia/Beirut"),
+ ("Asia/Bishkek", "Asia/Bishkek"),
+ ("Asia/Brunei", "Asia/Brunei"),
+ ("Asia/Chita", "Asia/Chita"),
+ ("Asia/Choibalsan", "Asia/Choibalsan"),
+ ("Asia/Colombo", "Asia/Colombo"),
+ ("Asia/Damascus", "Asia/Damascus"),
+ ("Asia/Dhaka", "Asia/Dhaka"),
+ ("Asia/Dili", "Asia/Dili"),
+ ("Asia/Dubai", "Asia/Dubai"),
+ ("Asia/Dushanbe", "Asia/Dushanbe"),
+ ("Asia/Famagusta", "Asia/Famagusta"),
+ ("Asia/Gaza", "Asia/Gaza"),
+ ("Asia/Hebron", "Asia/Hebron"),
+ ("Asia/Ho_Chi_Minh", "Asia/Ho_Chi_Minh"),
+ ("Asia/Hong_Kong", "Asia/Hong_Kong"),
+ ("Asia/Hovd", "Asia/Hovd"),
+ ("Asia/Irkutsk", "Asia/Irkutsk"),
+ ("Asia/Jakarta", "Asia/Jakarta"),
+ ("Asia/Jayapura", "Asia/Jayapura"),
+ ("Asia/Jerusalem", "Asia/Jerusalem"),
+ ("Asia/Kabul", "Asia/Kabul"),
+ ("Asia/Kamchatka", "Asia/Kamchatka"),
+ ("Asia/Karachi", "Asia/Karachi"),
+ ("Asia/Kathmandu", "Asia/Kathmandu"),
+ ("Asia/Khandyga", "Asia/Khandyga"),
+ ("Asia/Kolkata", "Asia/Kolkata"),
+ ("Asia/Krasnoyarsk", "Asia/Krasnoyarsk"),
+ ("Asia/Kuala_Lumpur", "Asia/Kuala_Lumpur"),
+ ("Asia/Kuching", "Asia/Kuching"),
+ ("Asia/Kuwait", "Asia/Kuwait"),
+ ("Asia/Macau", "Asia/Macau"),
+ ("Asia/Magadan", "Asia/Magadan"),
+ ("Asia/Makassar", "Asia/Makassar"),
+ ("Asia/Manila", "Asia/Manila"),
+ ("Asia/Muscat", "Asia/Muscat"),
+ ("Asia/Nicosia", "Asia/Nicosia"),
+ ("Asia/Novokuznetsk", "Asia/Novokuznetsk"),
+ ("Asia/Novosibirsk", "Asia/Novosibirsk"),
+ ("Asia/Omsk", "Asia/Omsk"),
+ ("Asia/Oral", "Asia/Oral"),
+ ("Asia/Phnom_Penh", "Asia/Phnom_Penh"),
+ ("Asia/Pontianak", "Asia/Pontianak"),
+ ("Asia/Pyongyang", "Asia/Pyongyang"),
+ ("Asia/Qatar", "Asia/Qatar"),
+ ("Asia/Qyzylorda", "Asia/Qyzylorda"),
+ ("Asia/Riyadh", "Asia/Riyadh"),
+ ("Asia/Sakhalin", "Asia/Sakhalin"),
+ ("Asia/Samarkand", "Asia/Samarkand"),
+ ("Asia/Seoul", "Asia/Seoul"),
+ ("Asia/Shanghai", "Asia/Shanghai"),
+ ("Asia/Singapore", "Asia/Singapore"),
+ ("Asia/Srednekolymsk", "Asia/Srednekolymsk"),
+ ("Asia/Taipei", "Asia/Taipei"),
+ ("Asia/Tashkent", "Asia/Tashkent"),
+ ("Asia/Tbilisi", "Asia/Tbilisi"),
+ ("Asia/Tehran", "Asia/Tehran"),
+ ("Asia/Thimphu", "Asia/Thimphu"),
+ ("Asia/Tokyo", "Asia/Tokyo"),
+ ("Asia/Tomsk", "Asia/Tomsk"),
+ ("Asia/Ulaanbaatar", "Asia/Ulaanbaatar"),
+ ("Asia/Urumqi", "Asia/Urumqi"),
+ ("Asia/Ust-Nera", "Asia/Ust-Nera"),
+ ("Asia/Vientiane", "Asia/Vientiane"),
+ ("Asia/Vladivostok", "Asia/Vladivostok"),
+ ("Asia/Yakutsk", "Asia/Yakutsk"),
+ ("Asia/Yangon", "Asia/Yangon"),
+ ("Asia/Yekaterinburg", "Asia/Yekaterinburg"),
+ ("Asia/Yerevan", "Asia/Yerevan"),
+ ("Atlantic/Azores", "Atlantic/Azores"),
+ ("Atlantic/Bermuda", "Atlantic/Bermuda"),
+ ("Atlantic/Canary", "Atlantic/Canary"),
+ ("Atlantic/Cape_Verde", "Atlantic/Cape_Verde"),
+ ("Atlantic/Faroe", "Atlantic/Faroe"),
+ ("Atlantic/Madeira", "Atlantic/Madeira"),
+ ("Atlantic/Reykjavik", "Atlantic/Reykjavik"),
+ ("Atlantic/South_Georgia", "Atlantic/South_Georgia"),
+ ("Atlantic/St_Helena", "Atlantic/St_Helena"),
+ ("Atlantic/Stanley", "Atlantic/Stanley"),
+ ("Australia/Adelaide", "Australia/Adelaide"),
+ ("Australia/Brisbane", "Australia/Brisbane"),
+ ("Australia/Broken_Hill", "Australia/Broken_Hill"),
+ ("Australia/Currie", "Australia/Currie"),
+ ("Australia/Darwin", "Australia/Darwin"),
+ ("Australia/Eucla", "Australia/Eucla"),
+ ("Australia/Hobart", "Australia/Hobart"),
+ ("Australia/Lindeman", "Australia/Lindeman"),
+ ("Australia/Lord_Howe", "Australia/Lord_Howe"),
+ ("Australia/Melbourne", "Australia/Melbourne"),
+ ("Australia/Perth", "Australia/Perth"),
+ ("Australia/Sydney", "Australia/Sydney"),
+ ("Canada/Atlantic", "Canada/Atlantic"),
+ ("Canada/Central", "Canada/Central"),
+ ("Canada/Eastern", "Canada/Eastern"),
+ ("Canada/Mountain", "Canada/Mountain"),
+ ("Canada/Newfoundland", "Canada/Newfoundland"),
+ ("Canada/Pacific", "Canada/Pacific"),
+ ("Europe/Amsterdam", "Europe/Amsterdam"),
+ ("Europe/Andorra", "Europe/Andorra"),
+ ("Europe/Astrakhan", "Europe/Astrakhan"),
+ ("Europe/Athens", "Europe/Athens"),
+ ("Europe/Belgrade", "Europe/Belgrade"),
+ ("Europe/Berlin", "Europe/Berlin"),
+ ("Europe/Bratislava", "Europe/Bratislava"),
+ ("Europe/Brussels", "Europe/Brussels"),
+ ("Europe/Bucharest", "Europe/Bucharest"),
+ ("Europe/Budapest", "Europe/Budapest"),
+ ("Europe/Busingen", "Europe/Busingen"),
+ ("Europe/Chisinau", "Europe/Chisinau"),
+ ("Europe/Copenhagen", "Europe/Copenhagen"),
+ ("Europe/Dublin", "Europe/Dublin"),
+ ("Europe/Gibraltar", "Europe/Gibraltar"),
+ ("Europe/Guernsey", "Europe/Guernsey"),
+ ("Europe/Helsinki", "Europe/Helsinki"),
+ ("Europe/Isle_of_Man", "Europe/Isle_of_Man"),
+ ("Europe/Istanbul", "Europe/Istanbul"),
+ ("Europe/Jersey", "Europe/Jersey"),
+ ("Europe/Kaliningrad", "Europe/Kaliningrad"),
+ ("Europe/Kiev", "Europe/Kiev"),
+ ("Europe/Kirov", "Europe/Kirov"),
+ ("Europe/Lisbon", "Europe/Lisbon"),
+ ("Europe/Ljubljana", "Europe/Ljubljana"),
+ ("Europe/London", "Europe/London"),
+ ("Europe/Luxembourg", "Europe/Luxembourg"),
+ ("Europe/Madrid", "Europe/Madrid"),
+ ("Europe/Malta", "Europe/Malta"),
+ ("Europe/Mariehamn", "Europe/Mariehamn"),
+ ("Europe/Minsk", "Europe/Minsk"),
+ ("Europe/Monaco", "Europe/Monaco"),
+ ("Europe/Moscow", "Europe/Moscow"),
+ ("Europe/Oslo", "Europe/Oslo"),
+ ("Europe/Paris", "Europe/Paris"),
+ ("Europe/Podgorica", "Europe/Podgorica"),
+ ("Europe/Prague", "Europe/Prague"),
+ ("Europe/Riga", "Europe/Riga"),
+ ("Europe/Rome", "Europe/Rome"),
+ ("Europe/Samara", "Europe/Samara"),
+ ("Europe/San_Marino", "Europe/San_Marino"),
+ ("Europe/Sarajevo", "Europe/Sarajevo"),
+ ("Europe/Saratov", "Europe/Saratov"),
+ ("Europe/Simferopol", "Europe/Simferopol"),
+ ("Europe/Skopje", "Europe/Skopje"),
+ ("Europe/Sofia", "Europe/Sofia"),
+ ("Europe/Stockholm", "Europe/Stockholm"),
+ ("Europe/Tallinn", "Europe/Tallinn"),
+ ("Europe/Tirane", "Europe/Tirane"),
+ ("Europe/Ulyanovsk", "Europe/Ulyanovsk"),
+ ("Europe/Uzhgorod", "Europe/Uzhgorod"),
+ ("Europe/Vaduz", "Europe/Vaduz"),
+ ("Europe/Vatican", "Europe/Vatican"),
+ ("Europe/Vienna", "Europe/Vienna"),
+ ("Europe/Vilnius", "Europe/Vilnius"),
+ ("Europe/Volgograd", "Europe/Volgograd"),
+ ("Europe/Warsaw", "Europe/Warsaw"),
+ ("Europe/Zagreb", "Europe/Zagreb"),
+ ("Europe/Zaporozhye", "Europe/Zaporozhye"),
+ ("Europe/Zurich", "Europe/Zurich"),
+ ("GMT", "GMT"),
+ ("Indian/Antananarivo", "Indian/Antananarivo"),
+ ("Indian/Chagos", "Indian/Chagos"),
+ ("Indian/Christmas", "Indian/Christmas"),
+ ("Indian/Cocos", "Indian/Cocos"),
+ ("Indian/Comoro", "Indian/Comoro"),
+ ("Indian/Kerguelen", "Indian/Kerguelen"),
+ ("Indian/Mahe", "Indian/Mahe"),
+ ("Indian/Maldives", "Indian/Maldives"),
+ ("Indian/Mauritius", "Indian/Mauritius"),
+ ("Indian/Mayotte", "Indian/Mayotte"),
+ ("Indian/Reunion", "Indian/Reunion"),
+ ("Pacific/Apia", "Pacific/Apia"),
+ ("Pacific/Auckland", "Pacific/Auckland"),
+ ("Pacific/Bougainville", "Pacific/Bougainville"),
+ ("Pacific/Chatham", "Pacific/Chatham"),
+ ("Pacific/Chuuk", "Pacific/Chuuk"),
+ ("Pacific/Easter", "Pacific/Easter"),
+ ("Pacific/Efate", "Pacific/Efate"),
+ ("Pacific/Enderbury", "Pacific/Enderbury"),
+ ("Pacific/Fakaofo", "Pacific/Fakaofo"),
+ ("Pacific/Fiji", "Pacific/Fiji"),
+ ("Pacific/Funafuti", "Pacific/Funafuti"),
+ ("Pacific/Galapagos", "Pacific/Galapagos"),
+ ("Pacific/Gambier", "Pacific/Gambier"),
+ ("Pacific/Guadalcanal", "Pacific/Guadalcanal"),
+ ("Pacific/Guam", "Pacific/Guam"),
+ ("Pacific/Honolulu", "Pacific/Honolulu"),
+ ("Pacific/Kiritimati", "Pacific/Kiritimati"),
+ ("Pacific/Kosrae", "Pacific/Kosrae"),
+ ("Pacific/Kwajalein", "Pacific/Kwajalein"),
+ ("Pacific/Majuro", "Pacific/Majuro"),
+ ("Pacific/Marquesas", "Pacific/Marquesas"),
+ ("Pacific/Midway", "Pacific/Midway"),
+ ("Pacific/Nauru", "Pacific/Nauru"),
+ ("Pacific/Niue", "Pacific/Niue"),
+ ("Pacific/Norfolk", "Pacific/Norfolk"),
+ ("Pacific/Noumea", "Pacific/Noumea"),
+ ("Pacific/Pago_Pago", "Pacific/Pago_Pago"),
+ ("Pacific/Palau", "Pacific/Palau"),
+ ("Pacific/Pitcairn", "Pacific/Pitcairn"),
+ ("Pacific/Pohnpei", "Pacific/Pohnpei"),
+ ("Pacific/Port_Moresby", "Pacific/Port_Moresby"),
+ ("Pacific/Rarotonga", "Pacific/Rarotonga"),
+ ("Pacific/Saipan", "Pacific/Saipan"),
+ ("Pacific/Tahiti", "Pacific/Tahiti"),
+ ("Pacific/Tarawa", "Pacific/Tarawa"),
+ ("Pacific/Tongatapu", "Pacific/Tongatapu"),
+ ("Pacific/Wake", "Pacific/Wake"),
+ ("Pacific/Wallis", "Pacific/Wallis"),
+ ("US/Alaska", "US/Alaska"),
+ ("US/Arizona", "US/Arizona"),
+ ("US/Central", "US/Central"),
+ ("US/Eastern", "US/Eastern"),
+ ("US/Hawaii", "US/Hawaii"),
+ ("US/Mountain", "US/Mountain"),
+ ("US/Pacific", "US/Pacific"),
+ ("UTC", "UTC"),
+ ],
+ default="UTC",
+ max_length=80,
+ null=True,
+ ),
+ )
]
diff --git a/brutaldon/migrations/0012_auto_20180826_1853.py b/brutaldon/migrations/0012_auto_20180826_1853.py
index d407a46..3b3577e 100644
--- a/brutaldon/migrations/0012_auto_20180826_1853.py
+++ b/brutaldon/migrations/0012_auto_20180826_1853.py
@@ -5,14 +5,12 @@ from django.db import migrations, models
class Migration(migrations.Migration):
- dependencies = [
- ('brutaldon', '0011_auto_20180825_1017'),
- ]
+ dependencies = [("brutaldon", "0011_auto_20180825_1017")]
operations = [
migrations.AlterField(
- model_name='account',
- name='username',
+ model_name="account",
+ name="username",
field=models.EmailField(max_length=254, unique=True),
- ),
+ )
]
diff --git a/brutaldon/migrations/0013_auto_20180826_1935.py b/brutaldon/migrations/0013_auto_20180826_1935.py
index e048094..431db9a 100644
--- a/brutaldon/migrations/0013_auto_20180826_1935.py
+++ b/brutaldon/migrations/0013_auto_20180826_1935.py
@@ -6,14 +6,16 @@ import django.db.models.deletion
class Migration(migrations.Migration):
- dependencies = [
- ('brutaldon', '0012_auto_20180826_1853'),
- ]
+ dependencies = [("brutaldon", "0012_auto_20180826_1853")]
operations = [
migrations.AlterField(
- model_name='preference',
- name='theme',
- field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='brutaldon.Theme'),
- ),
+ model_name="preference",
+ name="theme",
+ field=models.ForeignKey(
+ default=1,
+ on_delete=django.db.models.deletion.CASCADE,
+ to="brutaldon.Theme",
+ ),
+ )
]
diff --git a/brutaldon/migrations/0014_account_note_seen.py b/brutaldon/migrations/0014_account_note_seen.py
index 10e8670..d8a0386 100644
--- a/brutaldon/migrations/0014_account_note_seen.py
+++ b/brutaldon/migrations/0014_account_note_seen.py
@@ -5,14 +5,10 @@ from django.db import migrations, models
class Migration(migrations.Migration):
- dependencies = [
- ('brutaldon', '0013_auto_20180826_1935'),
- ]
+ dependencies = [("brutaldon", "0013_auto_20180826_1935")]
operations = [
migrations.AddField(
- model_name='account',
- name='note_seen',
- field=models.IntegerField(null=True),
- ),
+ model_name="account", name="note_seen", field=models.IntegerField(null=True)
+ )
]
diff --git a/brutaldon/migrations/0015_auto_20181001_1812.py b/brutaldon/migrations/0015_auto_20181001_1812.py
index 5a9b38b..dc1e8dd 100644
--- a/brutaldon/migrations/0015_auto_20181001_1812.py
+++ b/brutaldon/migrations/0015_auto_20181001_1812.py
@@ -5,24 +5,22 @@ from django.db import migrations, models
class Migration(migrations.Migration):
- dependencies = [
- ('brutaldon', '0014_account_note_seen'),
- ]
+ dependencies = [("brutaldon", "0014_account_note_seen")]
operations = [
migrations.AddField(
- model_name='preference',
- name='click_to_load',
+ model_name="preference",
+ name="click_to_load",
field=models.BooleanField(default=False),
),
migrations.AddField(
- model_name='preference',
- name='no_javascript',
+ model_name="preference",
+ name="no_javascript",
field=models.BooleanField(default=False),
),
migrations.AddField(
- model_name='preference',
- name='notifications',
+ model_name="preference",
+ name="notifications",
field=models.BooleanField(default=True),
),
]
diff --git a/brutaldon/migrations/0016_auto_20181009_1805.py b/brutaldon/migrations/0016_auto_20181009_1805.py
index c3fba21..0c07acf 100644
--- a/brutaldon/migrations/0016_auto_20181009_1805.py
+++ b/brutaldon/migrations/0016_auto_20181009_1805.py
@@ -5,29 +5,37 @@ from django.db import migrations, models
class Migration(migrations.Migration):
- dependencies = [
- ('brutaldon', '0015_auto_20181001_1812'),
- ]
+ dependencies = [("brutaldon", "0015_auto_20181001_1812")]
operations = [
migrations.AddField(
- model_name='preference',
- name='lightbox',
- field=models.BooleanField(default=False, help_text='Use a JavaScript lightbox to display media.'),
+ model_name="preference",
+ name="lightbox",
+ field=models.BooleanField(
+ default=False, help_text="Use a JavaScript lightbox to display media."
+ ),
),
migrations.AlterField(
- model_name='preference',
- name='click_to_load',
- field=models.BooleanField(default=False, help_text='Click to load more toots in the same page, rather than using pagination.'),
+ model_name="preference",
+ name="click_to_load",
+ field=models.BooleanField(
+ default=False,
+ help_text="Click to load more toots in the same page, rather than using pagination.",
+ ),
),
migrations.AlterField(
- model_name='preference',
- name='no_javascript',
- field=models.BooleanField(default=False, help_text='Disable all JavaScript. Overrides all other JavaScript options.'),
+ model_name="preference",
+ name="no_javascript",
+ field=models.BooleanField(
+ default=False,
+ help_text="Disable all JavaScript. Overrides all other JavaScript options.",
+ ),
),
migrations.AlterField(
- model_name='preference',
- name='notifications',
- field=models.BooleanField(default=True, help_text='Display live notifications in header.'),
+ model_name="preference",
+ name="notifications",
+ field=models.BooleanField(
+ default=True, help_text="Display live notifications in header."
+ ),
),
]
diff --git a/brutaldon/migrations/0017_preference_poll_frequency.py b/brutaldon/migrations/0017_preference_poll_frequency.py
index dac1672..be31208 100644
--- a/brutaldon/migrations/0017_preference_poll_frequency.py
+++ b/brutaldon/migrations/0017_preference_poll_frequency.py
@@ -5,14 +5,15 @@ from django.db import migrations, models
class Migration(migrations.Migration):
- dependencies = [
- ('brutaldon', '0016_auto_20181009_1805'),
- ]
+ dependencies = [("brutaldon", "0016_auto_20181009_1805")]
operations = [
migrations.AddField(
- model_name='preference',
- name='poll_frequency',
- field=models.IntegerField(default=300, help_text='Number of seconds to wait between checking notifications. Default: 300'),
- ),
+ model_name="preference",
+ name="poll_frequency",
+ field=models.IntegerField(
+ default=300,
+ help_text="Number of seconds to wait between checking notifications. Default: 300",
+ ),
+ )
]
diff --git a/brutaldon/migrations/0018_preference_filter_notifications.py b/brutaldon/migrations/0018_preference_filter_notifications.py
index 741515d..b403317 100644
--- a/brutaldon/migrations/0018_preference_filter_notifications.py
+++ b/brutaldon/migrations/0018_preference_filter_notifications.py
@@ -5,14 +5,15 @@ from django.db import migrations, models
class Migration(migrations.Migration):
- dependencies = [
- ('brutaldon', '0017_preference_poll_frequency'),
- ]
+ dependencies = [("brutaldon", "0017_preference_poll_frequency")]
operations = [
migrations.AddField(
- model_name='preference',
- name='filter_notifications',
- field=models.BooleanField(default=False, help_text='Exclude boosts and favs from your notifications.'),
- ),
+ model_name="preference",
+ name="filter_notifications",
+ field=models.BooleanField(
+ default=False,
+ help_text="Exclude boosts and favs from your notifications.",
+ ),
+ )
]
diff --git a/brutaldon/migrations/0019_auto_20190124_0813.py b/brutaldon/migrations/0019_auto_20190124_0813.py
index 4aea3f9..c77254f 100644
--- a/brutaldon/migrations/0019_auto_20190124_0813.py
+++ b/brutaldon/migrations/0019_auto_20190124_0813.py
@@ -5,14 +5,468 @@ from django.db import migrations, models
class Migration(migrations.Migration):
- dependencies = [
- ('brutaldon', '0018_preference_filter_notifications'),
- ]
+ dependencies = [("brutaldon", "0018_preference_filter_notifications")]
operations = [
migrations.AlterField(
- model_name='preference',
- name='timezone',
- field=models.CharField(blank=True, choices=[('Africa/Abidjan', 'Africa/Abidjan'), ('Africa/Accra', 'Africa/Accra'), ('Africa/Addis_Ababa', 'Africa/Addis_Ababa'), ('Africa/Algiers', 'Africa/Algiers'), ('Africa/Asmara', 'Africa/Asmara'), ('Africa/Bamako', 'Africa/Bamako'), ('Africa/Bangui', 'Africa/Bangui'), ('Africa/Banjul', 'Africa/Banjul'), ('Africa/Bissau', 'Africa/Bissau'), ('Africa/Blantyre', 'Africa/Blantyre'), ('Africa/Brazzaville', 'Africa/Brazzaville'), ('Africa/Bujumbura', 'Africa/Bujumbura'), ('Africa/Cairo', 'Africa/Cairo'), ('Africa/Casablanca', 'Africa/Casablanca'), ('Africa/Ceuta', 'Africa/Ceuta'), ('Africa/Conakry', 'Africa/Conakry'), ('Africa/Dakar', 'Africa/Dakar'), ('Africa/Dar_es_Salaam', 'Africa/Dar_es_Salaam'), ('Africa/Djibouti', 'Africa/Djibouti'), ('Africa/Douala', 'Africa/Douala'), ('Africa/El_Aaiun', 'Africa/El_Aaiun'), ('Africa/Freetown', 'Africa/Freetown'), ('Africa/Gaborone', 'Africa/Gaborone'), ('Africa/Harare', 'Africa/Harare'), ('Africa/Johannesburg', 'Africa/Johannesburg'), ('Africa/Juba', 'Africa/Juba'), ('Africa/Kampala', 'Africa/Kampala'), ('Africa/Khartoum', 'Africa/Khartoum'), ('Africa/Kigali', 'Africa/Kigali'), ('Africa/Kinshasa', 'Africa/Kinshasa'), ('Africa/Lagos', 'Africa/Lagos'), ('Africa/Libreville', 'Africa/Libreville'), ('Africa/Lome', 'Africa/Lome'), ('Africa/Luanda', 'Africa/Luanda'), ('Africa/Lubumbashi', 'Africa/Lubumbashi'), ('Africa/Lusaka', 'Africa/Lusaka'), ('Africa/Malabo', 'Africa/Malabo'), ('Africa/Maputo', 'Africa/Maputo'), ('Africa/Maseru', 'Africa/Maseru'), ('Africa/Mbabane', 'Africa/Mbabane'), ('Africa/Mogadishu', 'Africa/Mogadishu'), ('Africa/Monrovia', 'Africa/Monrovia'), ('Africa/Nairobi', 'Africa/Nairobi'), ('Africa/Ndjamena', 'Africa/Ndjamena'), ('Africa/Niamey', 'Africa/Niamey'), ('Africa/Nouakchott', 'Africa/Nouakchott'), ('Africa/Ouagadougou', 'Africa/Ouagadougou'), ('Africa/Porto-Novo', 'Africa/Porto-Novo'), ('Africa/Sao_Tome', 'Africa/Sao_Tome'), ('Africa/Tripoli', 'Africa/Tripoli'), ('Africa/Tunis', 'Africa/Tunis'), ('Africa/Windhoek', 'Africa/Windhoek'), ('America/Adak', 'America/Adak'), ('America/Anchorage', 'America/Anchorage'), ('America/Anguilla', 'America/Anguilla'), ('America/Antigua', 'America/Antigua'), ('America/Araguaina', 'America/Araguaina'), ('America/Argentina/Buenos_Aires', 'America/Argentina/Buenos_Aires'), ('America/Argentina/Catamarca', 'America/Argentina/Catamarca'), ('America/Argentina/Cordoba', 'America/Argentina/Cordoba'), ('America/Argentina/Jujuy', 'America/Argentina/Jujuy'), ('America/Argentina/La_Rioja', 'America/Argentina/La_Rioja'), ('America/Argentina/Mendoza', 'America/Argentina/Mendoza'), ('America/Argentina/Rio_Gallegos', 'America/Argentina/Rio_Gallegos'), ('America/Argentina/Salta', 'America/Argentina/Salta'), ('America/Argentina/San_Juan', 'America/Argentina/San_Juan'), ('America/Argentina/San_Luis', 'America/Argentina/San_Luis'), ('America/Argentina/Tucuman', 'America/Argentina/Tucuman'), ('America/Argentina/Ushuaia', 'America/Argentina/Ushuaia'), ('America/Aruba', 'America/Aruba'), ('America/Asuncion', 'America/Asuncion'), ('America/Atikokan', 'America/Atikokan'), ('America/Bahia', 'America/Bahia'), ('America/Bahia_Banderas', 'America/Bahia_Banderas'), ('America/Barbados', 'America/Barbados'), ('America/Belem', 'America/Belem'), ('America/Belize', 'America/Belize'), ('America/Blanc-Sablon', 'America/Blanc-Sablon'), ('America/Boa_Vista', 'America/Boa_Vista'), ('America/Bogota', 'America/Bogota'), ('America/Boise', 'America/Boise'), ('America/Cambridge_Bay', 'America/Cambridge_Bay'), ('America/Campo_Grande', 'America/Campo_Grande'), ('America/Cancun', 'America/Cancun'), ('America/Caracas', 'America/Caracas'), ('America/Cayenne', 'America/Cayenne'), ('America/Cayman', 'America/Cayman'), ('America/Chicago', 'America/Chicago'), ('America/Chihuahua', 'America/Chihuahua'), ('America/Costa_Rica', 'America/Costa_Rica'), ('America/Creston', 'America/Creston'), ('America/Cuiaba', 'America/Cuiaba'), ('America/Curacao', 'America/Curacao'), ('America/Danmarkshavn', 'America/Danmarkshavn'), ('America/Dawson', 'America/Dawson'), ('America/Dawson_Creek', 'America/Dawson_Creek'), ('America/Denver', 'America/Denver'), ('America/Detroit', 'America/Detroit'), ('America/Dominica', 'America/Dominica'), ('America/Edmonton', 'America/Edmonton'), ('America/Eirunepe', 'America/Eirunepe'), ('America/El_Salvador', 'America/El_Salvador'), ('America/Fort_Nelson', 'America/Fort_Nelson'), ('America/Fortaleza', 'America/Fortaleza'), ('America/Glace_Bay', 'America/Glace_Bay'), ('America/Godthab', 'America/Godthab'), ('America/Goose_Bay', 'America/Goose_Bay'), ('America/Grand_Turk', 'America/Grand_Turk'), ('America/Grenada', 'America/Grenada'), ('America/Guadeloupe', 'America/Guadeloupe'), ('America/Guatemala', 'America/Guatemala'), ('America/Guayaquil', 'America/Guayaquil'), ('America/Guyana', 'America/Guyana'), ('America/Halifax', 'America/Halifax'), ('America/Havana', 'America/Havana'), ('America/Hermosillo', 'America/Hermosillo'), ('America/Indiana/Indianapolis', 'America/Indiana/Indianapolis'), ('America/Indiana/Knox', 'America/Indiana/Knox'), ('America/Indiana/Marengo', 'America/Indiana/Marengo'), ('America/Indiana/Petersburg', 'America/Indiana/Petersburg'), ('America/Indiana/Tell_City', 'America/Indiana/Tell_City'), ('America/Indiana/Vevay', 'America/Indiana/Vevay'), ('America/Indiana/Vincennes', 'America/Indiana/Vincennes'), ('America/Indiana/Winamac', 'America/Indiana/Winamac'), ('America/Inuvik', 'America/Inuvik'), ('America/Iqaluit', 'America/Iqaluit'), ('America/Jamaica', 'America/Jamaica'), ('America/Juneau', 'America/Juneau'), ('America/Kentucky/Louisville', 'America/Kentucky/Louisville'), ('America/Kentucky/Monticello', 'America/Kentucky/Monticello'), ('America/Kralendijk', 'America/Kralendijk'), ('America/La_Paz', 'America/La_Paz'), ('America/Lima', 'America/Lima'), ('America/Los_Angeles', 'America/Los_Angeles'), ('America/Lower_Princes', 'America/Lower_Princes'), ('America/Maceio', 'America/Maceio'), ('America/Managua', 'America/Managua'), ('America/Manaus', 'America/Manaus'), ('America/Marigot', 'America/Marigot'), ('America/Martinique', 'America/Martinique'), ('America/Matamoros', 'America/Matamoros'), ('America/Mazatlan', 'America/Mazatlan'), ('America/Menominee', 'America/Menominee'), ('America/Merida', 'America/Merida'), ('America/Metlakatla', 'America/Metlakatla'), ('America/Mexico_City', 'America/Mexico_City'), ('America/Miquelon', 'America/Miquelon'), ('America/Moncton', 'America/Moncton'), ('America/Monterrey', 'America/Monterrey'), ('America/Montevideo', 'America/Montevideo'), ('America/Montserrat', 'America/Montserrat'), ('America/Nassau', 'America/Nassau'), ('America/New_York', 'America/New_York'), ('America/Nipigon', 'America/Nipigon'), ('America/Nome', 'America/Nome'), ('America/Noronha', 'America/Noronha'), ('America/North_Dakota/Beulah', 'America/North_Dakota/Beulah'), ('America/North_Dakota/Center', 'America/North_Dakota/Center'), ('America/North_Dakota/New_Salem', 'America/North_Dakota/New_Salem'), ('America/Ojinaga', 'America/Ojinaga'), ('America/Panama', 'America/Panama'), ('America/Pangnirtung', 'America/Pangnirtung'), ('America/Paramaribo', 'America/Paramaribo'), ('America/Phoenix', 'America/Phoenix'), ('America/Port-au-Prince', 'America/Port-au-Prince'), ('America/Port_of_Spain', 'America/Port_of_Spain'), ('America/Porto_Velho', 'America/Porto_Velho'), ('America/Puerto_Rico', 'America/Puerto_Rico'), ('America/Punta_Arenas', 'America/Punta_Arenas'), ('America/Rainy_River', 'America/Rainy_River'), ('America/Rankin_Inlet', 'America/Rankin_Inlet'), ('America/Recife', 'America/Recife'), ('America/Regina', 'America/Regina'), ('America/Resolute', 'America/Resolute'), ('America/Rio_Branco', 'America/Rio_Branco'), ('America/Santarem', 'America/Santarem'), ('America/Santiago', 'America/Santiago'), ('America/Santo_Domingo', 'America/Santo_Domingo'), ('America/Sao_Paulo', 'America/Sao_Paulo'), ('America/Scoresbysund', 'America/Scoresbysund'), ('America/Sitka', 'America/Sitka'), ('America/St_Barthelemy', 'America/St_Barthelemy'), ('America/St_Johns', 'America/St_Johns'), ('America/St_Kitts', 'America/St_Kitts'), ('America/St_Lucia', 'America/St_Lucia'), ('America/St_Thomas', 'America/St_Thomas'), ('America/St_Vincent', 'America/St_Vincent'), ('America/Swift_Current', 'America/Swift_Current'), ('America/Tegucigalpa', 'America/Tegucigalpa'), ('America/Thule', 'America/Thule'), ('America/Thunder_Bay', 'America/Thunder_Bay'), ('America/Tijuana', 'America/Tijuana'), ('America/Toronto', 'America/Toronto'), ('America/Tortola', 'America/Tortola'), ('America/Vancouver', 'America/Vancouver'), ('America/Whitehorse', 'America/Whitehorse'), ('America/Winnipeg', 'America/Winnipeg'), ('America/Yakutat', 'America/Yakutat'), ('America/Yellowknife', 'America/Yellowknife'), ('Antarctica/Casey', 'Antarctica/Casey'), ('Antarctica/Davis', 'Antarctica/Davis'), ('Antarctica/DumontDUrville', 'Antarctica/DumontDUrville'), ('Antarctica/Macquarie', 'Antarctica/Macquarie'), ('Antarctica/Mawson', 'Antarctica/Mawson'), ('Antarctica/McMurdo', 'Antarctica/McMurdo'), ('Antarctica/Palmer', 'Antarctica/Palmer'), ('Antarctica/Rothera', 'Antarctica/Rothera'), ('Antarctica/Syowa', 'Antarctica/Syowa'), ('Antarctica/Troll', 'Antarctica/Troll'), ('Antarctica/Vostok', 'Antarctica/Vostok'), ('Arctic/Longyearbyen', 'Arctic/Longyearbyen'), ('Asia/Aden', 'Asia/Aden'), ('Asia/Almaty', 'Asia/Almaty'), ('Asia/Amman', 'Asia/Amman'), ('Asia/Anadyr', 'Asia/Anadyr'), ('Asia/Aqtau', 'Asia/Aqtau'), ('Asia/Aqtobe', 'Asia/Aqtobe'), ('Asia/Ashgabat', 'Asia/Ashgabat'), ('Asia/Atyrau', 'Asia/Atyrau'), ('Asia/Baghdad', 'Asia/Baghdad'), ('Asia/Bahrain', 'Asia/Bahrain'), ('Asia/Baku', 'Asia/Baku'), ('Asia/Bangkok', 'Asia/Bangkok'), ('Asia/Barnaul', 'Asia/Barnaul'), ('Asia/Beirut', 'Asia/Beirut'), ('Asia/Bishkek', 'Asia/Bishkek'), ('Asia/Brunei', 'Asia/Brunei'), ('Asia/Chita', 'Asia/Chita'), ('Asia/Choibalsan', 'Asia/Choibalsan'), ('Asia/Colombo', 'Asia/Colombo'), ('Asia/Damascus', 'Asia/Damascus'), ('Asia/Dhaka', 'Asia/Dhaka'), ('Asia/Dili', 'Asia/Dili'), ('Asia/Dubai', 'Asia/Dubai'), ('Asia/Dushanbe', 'Asia/Dushanbe'), ('Asia/Famagusta', 'Asia/Famagusta'), ('Asia/Gaza', 'Asia/Gaza'), ('Asia/Hebron', 'Asia/Hebron'), ('Asia/Ho_Chi_Minh', 'Asia/Ho_Chi_Minh'), ('Asia/Hong_Kong', 'Asia/Hong_Kong'), ('Asia/Hovd', 'Asia/Hovd'), ('Asia/Irkutsk', 'Asia/Irkutsk'), ('Asia/Jakarta', 'Asia/Jakarta'), ('Asia/Jayapura', 'Asia/Jayapura'), ('Asia/Jerusalem', 'Asia/Jerusalem'), ('Asia/Kabul', 'Asia/Kabul'), ('Asia/Kamchatka', 'Asia/Kamchatka'), ('Asia/Karachi', 'Asia/Karachi'), ('Asia/Kathmandu', 'Asia/Kathmandu'), ('Asia/Khandyga', 'Asia/Khandyga'), ('Asia/Kolkata', 'Asia/Kolkata'), ('Asia/Krasnoyarsk', 'Asia/Krasnoyarsk'), ('Asia/Kuala_Lumpur', 'Asia/Kuala_Lumpur'), ('Asia/Kuching', 'Asia/Kuching'), ('Asia/Kuwait', 'Asia/Kuwait'), ('Asia/Macau', 'Asia/Macau'), ('Asia/Magadan', 'Asia/Magadan'), ('Asia/Makassar', 'Asia/Makassar'), ('Asia/Manila', 'Asia/Manila'), ('Asia/Muscat', 'Asia/Muscat'), ('Asia/Nicosia', 'Asia/Nicosia'), ('Asia/Novokuznetsk', 'Asia/Novokuznetsk'), ('Asia/Novosibirsk', 'Asia/Novosibirsk'), ('Asia/Omsk', 'Asia/Omsk'), ('Asia/Oral', 'Asia/Oral'), ('Asia/Phnom_Penh', 'Asia/Phnom_Penh'), ('Asia/Pontianak', 'Asia/Pontianak'), ('Asia/Pyongyang', 'Asia/Pyongyang'), ('Asia/Qatar', 'Asia/Qatar'), ('Asia/Qostanay', 'Asia/Qostanay'), ('Asia/Qyzylorda', 'Asia/Qyzylorda'), ('Asia/Riyadh', 'Asia/Riyadh'), ('Asia/Sakhalin', 'Asia/Sakhalin'), ('Asia/Samarkand', 'Asia/Samarkand'), ('Asia/Seoul', 'Asia/Seoul'), ('Asia/Shanghai', 'Asia/Shanghai'), ('Asia/Singapore', 'Asia/Singapore'), ('Asia/Srednekolymsk', 'Asia/Srednekolymsk'), ('Asia/Taipei', 'Asia/Taipei'), ('Asia/Tashkent', 'Asia/Tashkent'), ('Asia/Tbilisi', 'Asia/Tbilisi'), ('Asia/Tehran', 'Asia/Tehran'), ('Asia/Thimphu', 'Asia/Thimphu'), ('Asia/Tokyo', 'Asia/Tokyo'), ('Asia/Tomsk', 'Asia/Tomsk'), ('Asia/Ulaanbaatar', 'Asia/Ulaanbaatar'), ('Asia/Urumqi', 'Asia/Urumqi'), ('Asia/Ust-Nera', 'Asia/Ust-Nera'), ('Asia/Vientiane', 'Asia/Vientiane'), ('Asia/Vladivostok', 'Asia/Vladivostok'), ('Asia/Yakutsk', 'Asia/Yakutsk'), ('Asia/Yangon', 'Asia/Yangon'), ('Asia/Yekaterinburg', 'Asia/Yekaterinburg'), ('Asia/Yerevan', 'Asia/Yerevan'), ('Atlantic/Azores', 'Atlantic/Azores'), ('Atlantic/Bermuda', 'Atlantic/Bermuda'), ('Atlantic/Canary', 'Atlantic/Canary'), ('Atlantic/Cape_Verde', 'Atlantic/Cape_Verde'), ('Atlantic/Faroe', 'Atlantic/Faroe'), ('Atlantic/Madeira', 'Atlantic/Madeira'), ('Atlantic/Reykjavik', 'Atlantic/Reykjavik'), ('Atlantic/South_Georgia', 'Atlantic/South_Georgia'), ('Atlantic/St_Helena', 'Atlantic/St_Helena'), ('Atlantic/Stanley', 'Atlantic/Stanley'), ('Australia/Adelaide', 'Australia/Adelaide'), ('Australia/Brisbane', 'Australia/Brisbane'), ('Australia/Broken_Hill', 'Australia/Broken_Hill'), ('Australia/Currie', 'Australia/Currie'), ('Australia/Darwin', 'Australia/Darwin'), ('Australia/Eucla', 'Australia/Eucla'), ('Australia/Hobart', 'Australia/Hobart'), ('Australia/Lindeman', 'Australia/Lindeman'), ('Australia/Lord_Howe', 'Australia/Lord_Howe'), ('Australia/Melbourne', 'Australia/Melbourne'), ('Australia/Perth', 'Australia/Perth'), ('Australia/Sydney', 'Australia/Sydney'), ('Canada/Atlantic', 'Canada/Atlantic'), ('Canada/Central', 'Canada/Central'), ('Canada/Eastern', 'Canada/Eastern'), ('Canada/Mountain', 'Canada/Mountain'), ('Canada/Newfoundland', 'Canada/Newfoundland'), ('Canada/Pacific', 'Canada/Pacific'), ('Europe/Amsterdam', 'Europe/Amsterdam'), ('Europe/Andorra', 'Europe/Andorra'), ('Europe/Astrakhan', 'Europe/Astrakhan'), ('Europe/Athens', 'Europe/Athens'), ('Europe/Belgrade', 'Europe/Belgrade'), ('Europe/Berlin', 'Europe/Berlin'), ('Europe/Bratislava', 'Europe/Bratislava'), ('Europe/Brussels', 'Europe/Brussels'), ('Europe/Bucharest', 'Europe/Bucharest'), ('Europe/Budapest', 'Europe/Budapest'), ('Europe/Busingen', 'Europe/Busingen'), ('Europe/Chisinau', 'Europe/Chisinau'), ('Europe/Copenhagen', 'Europe/Copenhagen'), ('Europe/Dublin', 'Europe/Dublin'), ('Europe/Gibraltar', 'Europe/Gibraltar'), ('Europe/Guernsey', 'Europe/Guernsey'), ('Europe/Helsinki', 'Europe/Helsinki'), ('Europe/Isle_of_Man', 'Europe/Isle_of_Man'), ('Europe/Istanbul', 'Europe/Istanbul'), ('Europe/Jersey', 'Europe/Jersey'), ('Europe/Kaliningrad', 'Europe/Kaliningrad'), ('Europe/Kiev', 'Europe/Kiev'), ('Europe/Kirov', 'Europe/Kirov'), ('Europe/Lisbon', 'Europe/Lisbon'), ('Europe/Ljubljana', 'Europe/Ljubljana'), ('Europe/London', 'Europe/London'), ('Europe/Luxembourg', 'Europe/Luxembourg'), ('Europe/Madrid', 'Europe/Madrid'), ('Europe/Malta', 'Europe/Malta'), ('Europe/Mariehamn', 'Europe/Mariehamn'), ('Europe/Minsk', 'Europe/Minsk'), ('Europe/Monaco', 'Europe/Monaco'), ('Europe/Moscow', 'Europe/Moscow'), ('Europe/Oslo', 'Europe/Oslo'), ('Europe/Paris', 'Europe/Paris'), ('Europe/Podgorica', 'Europe/Podgorica'), ('Europe/Prague', 'Europe/Prague'), ('Europe/Riga', 'Europe/Riga'), ('Europe/Rome', 'Europe/Rome'), ('Europe/Samara', 'Europe/Samara'), ('Europe/San_Marino', 'Europe/San_Marino'), ('Europe/Sarajevo', 'Europe/Sarajevo'), ('Europe/Saratov', 'Europe/Saratov'), ('Europe/Simferopol', 'Europe/Simferopol'), ('Europe/Skopje', 'Europe/Skopje'), ('Europe/Sofia', 'Europe/Sofia'), ('Europe/Stockholm', 'Europe/Stockholm'), ('Europe/Tallinn', 'Europe/Tallinn'), ('Europe/Tirane', 'Europe/Tirane'), ('Europe/Ulyanovsk', 'Europe/Ulyanovsk'), ('Europe/Uzhgorod', 'Europe/Uzhgorod'), ('Europe/Vaduz', 'Europe/Vaduz'), ('Europe/Vatican', 'Europe/Vatican'), ('Europe/Vienna', 'Europe/Vienna'), ('Europe/Vilnius', 'Europe/Vilnius'), ('Europe/Volgograd', 'Europe/Volgograd'), ('Europe/Warsaw', 'Europe/Warsaw'), ('Europe/Zagreb', 'Europe/Zagreb'), ('Europe/Zaporozhye', 'Europe/Zaporozhye'), ('Europe/Zurich', 'Europe/Zurich'), ('GMT', 'GMT'), ('Indian/Antananarivo', 'Indian/Antananarivo'), ('Indian/Chagos', 'Indian/Chagos'), ('Indian/Christmas', 'Indian/Christmas'), ('Indian/Cocos', 'Indian/Cocos'), ('Indian/Comoro', 'Indian/Comoro'), ('Indian/Kerguelen', 'Indian/Kerguelen'), ('Indian/Mahe', 'Indian/Mahe'), ('Indian/Maldives', 'Indian/Maldives'), ('Indian/Mauritius', 'Indian/Mauritius'), ('Indian/Mayotte', 'Indian/Mayotte'), ('Indian/Reunion', 'Indian/Reunion'), ('Pacific/Apia', 'Pacific/Apia'), ('Pacific/Auckland', 'Pacific/Auckland'), ('Pacific/Bougainville', 'Pacific/Bougainville'), ('Pacific/Chatham', 'Pacific/Chatham'), ('Pacific/Chuuk', 'Pacific/Chuuk'), ('Pacific/Easter', 'Pacific/Easter'), ('Pacific/Efate', 'Pacific/Efate'), ('Pacific/Enderbury', 'Pacific/Enderbury'), ('Pacific/Fakaofo', 'Pacific/Fakaofo'), ('Pacific/Fiji', 'Pacific/Fiji'), ('Pacific/Funafuti', 'Pacific/Funafuti'), ('Pacific/Galapagos', 'Pacific/Galapagos'), ('Pacific/Gambier', 'Pacific/Gambier'), ('Pacific/Guadalcanal', 'Pacific/Guadalcanal'), ('Pacific/Guam', 'Pacific/Guam'), ('Pacific/Honolulu', 'Pacific/Honolulu'), ('Pacific/Kiritimati', 'Pacific/Kiritimati'), ('Pacific/Kosrae', 'Pacific/Kosrae'), ('Pacific/Kwajalein', 'Pacific/Kwajalein'), ('Pacific/Majuro', 'Pacific/Majuro'), ('Pacific/Marquesas', 'Pacific/Marquesas'), ('Pacific/Midway', 'Pacific/Midway'), ('Pacific/Nauru', 'Pacific/Nauru'), ('Pacific/Niue', 'Pacific/Niue'), ('Pacific/Norfolk', 'Pacific/Norfolk'), ('Pacific/Noumea', 'Pacific/Noumea'), ('Pacific/Pago_Pago', 'Pacific/Pago_Pago'), ('Pacific/Palau', 'Pacific/Palau'), ('Pacific/Pitcairn', 'Pacific/Pitcairn'), ('Pacific/Pohnpei', 'Pacific/Pohnpei'), ('Pacific/Port_Moresby', 'Pacific/Port_Moresby'), ('Pacific/Rarotonga', 'Pacific/Rarotonga'), ('Pacific/Saipan', 'Pacific/Saipan'), ('Pacific/Tahiti', 'Pacific/Tahiti'), ('Pacific/Tarawa', 'Pacific/Tarawa'), ('Pacific/Tongatapu', 'Pacific/Tongatapu'), ('Pacific/Wake', 'Pacific/Wake'), ('Pacific/Wallis', 'Pacific/Wallis'), ('US/Alaska', 'US/Alaska'), ('US/Arizona', 'US/Arizona'), ('US/Central', 'US/Central'), ('US/Eastern', 'US/Eastern'), ('US/Hawaii', 'US/Hawaii'), ('US/Mountain', 'US/Mountain'), ('US/Pacific', 'US/Pacific'), ('UTC', 'UTC')], default='UTC', max_length=80, null=True),
- ),
+ model_name="preference",
+ name="timezone",
+ field=models.CharField(
+ blank=True,
+ choices=[
+ ("Africa/Abidjan", "Africa/Abidjan"),
+ ("Africa/Accra", "Africa/Accra"),
+ ("Africa/Addis_Ababa", "Africa/Addis_Ababa"),
+ ("Africa/Algiers", "Africa/Algiers"),
+ ("Africa/Asmara", "Africa/Asmara"),
+ ("Africa/Bamako", "Africa/Bamako"),
+ ("Africa/Bangui", "Africa/Bangui"),
+ ("Africa/Banjul", "Africa/Banjul"),
+ ("Africa/Bissau", "Africa/Bissau"),
+ ("Africa/Blantyre", "Africa/Blantyre"),
+ ("Africa/Brazzaville", "Africa/Brazzaville"),
+ ("Africa/Bujumbura", "Africa/Bujumbura"),
+ ("Africa/Cairo", "Africa/Cairo"),
+ ("Africa/Casablanca", "Africa/Casablanca"),
+ ("Africa/Ceuta", "Africa/Ceuta"),
+ ("Africa/Conakry", "Africa/Conakry"),
+ ("Africa/Dakar", "Africa/Dakar"),
+ ("Africa/Dar_es_Salaam", "Africa/Dar_es_Salaam"),
+ ("Africa/Djibouti", "Africa/Djibouti"),
+ ("Africa/Douala", "Africa/Douala"),
+ ("Africa/El_Aaiun", "Africa/El_Aaiun"),
+ ("Africa/Freetown", "Africa/Freetown"),
+ ("Africa/Gaborone", "Africa/Gaborone"),
+ ("Africa/Harare", "Africa/Harare"),
+ ("Africa/Johannesburg", "Africa/Johannesburg"),
+ ("Africa/Juba", "Africa/Juba"),
+ ("Africa/Kampala", "Africa/Kampala"),
+ ("Africa/Khartoum", "Africa/Khartoum"),
+ ("Africa/Kigali", "Africa/Kigali"),
+ ("Africa/Kinshasa", "Africa/Kinshasa"),
+ ("Africa/Lagos", "Africa/Lagos"),
+ ("Africa/Libreville", "Africa/Libreville"),
+ ("Africa/Lome", "Africa/Lome"),
+ ("Africa/Luanda", "Africa/Luanda"),
+ ("Africa/Lubumbashi", "Africa/Lubumbashi"),
+ ("Africa/Lusaka", "Africa/Lusaka"),
+ ("Africa/Malabo", "Africa/Malabo"),
+ ("Africa/Maputo", "Africa/Maputo"),
+ ("Africa/Maseru", "Africa/Maseru"),
+ ("Africa/Mbabane", "Africa/Mbabane"),
+ ("Africa/Mogadishu", "Africa/Mogadishu"),
+ ("Africa/Monrovia", "Africa/Monrovia"),
+ ("Africa/Nairobi", "Africa/Nairobi"),
+ ("Africa/Ndjamena", "Africa/Ndjamena"),
+ ("Africa/Niamey", "Africa/Niamey"),
+ ("Africa/Nouakchott", "Africa/Nouakchott"),
+ ("Africa/Ouagadougou", "Africa/Ouagadougou"),
+ ("Africa/Porto-Novo", "Africa/Porto-Novo"),
+ ("Africa/Sao_Tome", "Africa/Sao_Tome"),
+ ("Africa/Tripoli", "Africa/Tripoli"),
+ ("Africa/Tunis", "Africa/Tunis"),
+ ("Africa/Windhoek", "Africa/Windhoek"),
+ ("America/Adak", "America/Adak"),
+ ("America/Anchorage", "America/Anchorage"),
+ ("America/Anguilla", "America/Anguilla"),
+ ("America/Antigua", "America/Antigua"),
+ ("America/Araguaina", "America/Araguaina"),
+ (
+ "America/Argentina/Buenos_Aires",
+ "America/Argentina/Buenos_Aires",
+ ),
+ ("America/Argentina/Catamarca", "America/Argentina/Catamarca"),
+ ("America/Argentina/Cordoba", "America/Argentina/Cordoba"),
+ ("America/Argentina/Jujuy", "America/Argentina/Jujuy"),
+ ("America/Argentina/La_Rioja", "America/Argentina/La_Rioja"),
+ ("America/Argentina/Mendoza", "America/Argentina/Mendoza"),
+ (
+ "America/Argentina/Rio_Gallegos",
+ "America/Argentina/Rio_Gallegos",
+ ),
+ ("America/Argentina/Salta", "America/Argentina/Salta"),
+ ("America/Argentina/San_Juan", "America/Argentina/San_Juan"),
+ ("America/Argentina/San_Luis", "America/Argentina/San_Luis"),
+ ("America/Argentina/Tucuman", "America/Argentina/Tucuman"),
+ ("America/Argentina/Ushuaia", "America/Argentina/Ushuaia"),
+ ("America/Aruba", "America/Aruba"),
+ ("America/Asuncion", "America/Asuncion"),
+ ("America/Atikokan", "America/Atikokan"),
+ ("America/Bahia", "America/Bahia"),
+ ("America/Bahia_Banderas", "America/Bahia_Banderas"),
+ ("America/Barbados", "America/Barbados"),
+ ("America/Belem", "America/Belem"),
+ ("America/Belize", "America/Belize"),
+ ("America/Blanc-Sablon", "America/Blanc-Sablon"),
+ ("America/Boa_Vista", "America/Boa_Vista"),
+ ("America/Bogota", "America/Bogota"),
+ ("America/Boise", "America/Boise"),
+ ("America/Cambridge_Bay", "America/Cambridge_Bay"),
+ ("America/Campo_Grande", "America/Campo_Grande"),
+ ("America/Cancun", "America/Cancun"),
+ ("America/Caracas", "America/Caracas"),
+ ("America/Cayenne", "America/Cayenne"),
+ ("America/Cayman", "America/Cayman"),
+ ("America/Chicago", "America/Chicago"),
+ ("America/Chihuahua", "America/Chihuahua"),
+ ("America/Costa_Rica", "America/Costa_Rica"),
+ ("America/Creston", "America/Creston"),
+ ("America/Cuiaba", "America/Cuiaba"),
+ ("America/Curacao", "America/Curacao"),
+ ("America/Danmarkshavn", "America/Danmarkshavn"),
+ ("America/Dawson", "America/Dawson"),
+ ("America/Dawson_Creek", "America/Dawson_Creek"),
+ ("America/Denver", "America/Denver"),
+ ("America/Detroit", "America/Detroit"),
+ ("America/Dominica", "America/Dominica"),
+ ("America/Edmonton", "America/Edmonton"),
+ ("America/Eirunepe", "America/Eirunepe"),
+ ("America/El_Salvador", "America/El_Salvador"),
+ ("America/Fort_Nelson", "America/Fort_Nelson"),
+ ("America/Fortaleza", "America/Fortaleza"),
+ ("America/Glace_Bay", "America/Glace_Bay"),
+ ("America/Godthab", "America/Godthab"),
+ ("America/Goose_Bay", "America/Goose_Bay"),
+ ("America/Grand_Turk", "America/Grand_Turk"),
+ ("America/Grenada", "America/Grenada"),
+ ("America/Guadeloupe", "America/Guadeloupe"),
+ ("America/Guatemala", "America/Guatemala"),
+ ("America/Guayaquil", "America/Guayaquil"),
+ ("America/Guyana", "America/Guyana"),
+ ("America/Halifax", "America/Halifax"),
+ ("America/Havana", "America/Havana"),
+ ("America/Hermosillo", "America/Hermosillo"),
+ ("America/Indiana/Indianapolis", "America/Indiana/Indianapolis"),
+ ("America/Indiana/Knox", "America/Indiana/Knox"),
+ ("America/Indiana/Marengo", "America/Indiana/Marengo"),
+ ("America/Indiana/Petersburg", "America/Indiana/Petersburg"),
+ ("America/Indiana/Tell_City", "America/Indiana/Tell_City"),
+ ("America/Indiana/Vevay", "America/Indiana/Vevay"),
+ ("America/Indiana/Vincennes", "America/Indiana/Vincennes"),
+ ("America/Indiana/Winamac", "America/Indiana/Winamac"),
+ ("America/Inuvik", "America/Inuvik"),
+ ("America/Iqaluit", "America/Iqaluit"),
+ ("America/Jamaica", "America/Jamaica"),
+ ("America/Juneau", "America/Juneau"),
+ ("America/Kentucky/Louisville", "America/Kentucky/Louisville"),
+ ("America/Kentucky/Monticello", "America/Kentucky/Monticello"),
+ ("America/Kralendijk", "America/Kralendijk"),
+ ("America/La_Paz", "America/La_Paz"),
+ ("America/Lima", "America/Lima"),
+ ("America/Los_Angeles", "America/Los_Angeles"),
+ ("America/Lower_Princes", "America/Lower_Princes"),
+ ("America/Maceio", "America/Maceio"),
+ ("America/Managua", "America/Managua"),
+ ("America/Manaus", "America/Manaus"),
+ ("America/Marigot", "America/Marigot"),
+ ("America/Martinique", "America/Martinique"),
+ ("America/Matamoros", "America/Matamoros"),
+ ("America/Mazatlan", "America/Mazatlan"),
+ ("America/Menominee", "America/Menominee"),
+ ("America/Merida", "America/Merida"),
+ ("America/Metlakatla", "America/Metlakatla"),
+ ("America/Mexico_City", "America/Mexico_City"),
+ ("America/Miquelon", "America/Miquelon"),
+ ("America/Moncton", "America/Moncton"),
+ ("America/Monterrey", "America/Monterrey"),
+ ("America/Montevideo", "America/Montevideo"),
+ ("America/Montserrat", "America/Montserrat"),
+ ("America/Nassau", "America/Nassau"),
+ ("America/New_York", "America/New_York"),
+ ("America/Nipigon", "America/Nipigon"),
+ ("America/Nome", "America/Nome"),
+ ("America/Noronha", "America/Noronha"),
+ ("America/North_Dakota/Beulah", "America/North_Dakota/Beulah"),
+ ("America/North_Dakota/Center", "America/North_Dakota/Center"),
+ (
+ "America/North_Dakota/New_Salem",
+ "America/North_Dakota/New_Salem",
+ ),
+ ("America/Ojinaga", "America/Ojinaga"),
+ ("America/Panama", "America/Panama"),
+ ("America/Pangnirtung", "America/Pangnirtung"),
+ ("America/Paramaribo", "America/Paramaribo"),
+ ("America/Phoenix", "America/Phoenix"),
+ ("America/Port-au-Prince", "America/Port-au-Prince"),
+ ("America/Port_of_Spain", "America/Port_of_Spain"),
+ ("America/Porto_Velho", "America/Porto_Velho"),
+ ("America/Puerto_Rico", "America/Puerto_Rico"),
+ ("America/Punta_Arenas", "America/Punta_Arenas"),
+ ("America/Rainy_River", "America/Rainy_River"),
+ ("America/Rankin_Inlet", "America/Rankin_Inlet"),
+ ("America/Recife", "America/Recife"),
+ ("America/Regina", "America/Regina"),
+ ("America/Resolute", "America/Resolute"),
+ ("America/Rio_Branco", "America/Rio_Branco"),
+ ("America/Santarem", "America/Santarem"),
+ ("America/Santiago", "America/Santiago"),
+ ("America/Santo_Domingo", "America/Santo_Domingo"),
+ ("America/Sao_Paulo", "America/Sao_Paulo"),
+ ("America/Scoresbysund", "America/Scoresbysund"),
+ ("America/Sitka", "America/Sitka"),
+ ("America/St_Barthelemy", "America/St_Barthelemy"),
+ ("America/St_Johns", "America/St_Johns"),
+ ("America/St_Kitts", "America/St_Kitts"),
+ ("America/St_Lucia", "America/St_Lucia"),
+ ("America/St_Thomas", "America/St_Thomas"),
+ ("America/St_Vincent", "America/St_Vincent"),
+ ("America/Swift_Current", "America/Swift_Current"),
+ ("America/Tegucigalpa", "America/Tegucigalpa"),
+ ("America/Thule", "America/Thule"),
+ ("America/Thunder_Bay", "America/Thunder_Bay"),
+ ("America/Tijuana", "America/Tijuana"),
+ ("America/Toronto", "America/Toronto"),
+ ("America/Tortola", "America/Tortola"),
+ ("America/Vancouver", "America/Vancouver"),
+ ("America/Whitehorse", "America/Whitehorse"),
+ ("America/Winnipeg", "America/Winnipeg"),
+ ("America/Yakutat", "America/Yakutat"),
+ ("America/Yellowknife", "America/Yellowknife"),
+ ("Antarctica/Casey", "Antarctica/Casey"),
+ ("Antarctica/Davis", "Antarctica/Davis"),
+ ("Antarctica/DumontDUrville", "Antarctica/DumontDUrville"),
+ ("Antarctica/Macquarie", "Antarctica/Macquarie"),
+ ("Antarctica/Mawson", "Antarctica/Mawson"),
+ ("Antarctica/McMurdo", "Antarctica/McMurdo"),
+ ("Antarctica/Palmer", "Antarctica/Palmer"),
+ ("Antarctica/Rothera", "Antarctica/Rothera"),
+ ("Antarctica/Syowa", "Antarctica/Syowa"),
+ ("Antarctica/Troll", "Antarctica/Troll"),
+ ("Antarctica/Vostok", "Antarctica/Vostok"),
+ ("Arctic/Longyearbyen", "Arctic/Longyearbyen"),
+ ("Asia/Aden", "Asia/Aden"),
+ ("Asia/Almaty", "Asia/Almaty"),
+ ("Asia/Amman", "Asia/Amman"),
+ ("Asia/Anadyr", "Asia/Anadyr"),
+ ("Asia/Aqtau", "Asia/Aqtau"),
+ ("Asia/Aqtobe", "Asia/Aqtobe"),
+ ("Asia/Ashgabat", "Asia/Ashgabat"),
+ ("Asia/Atyrau", "Asia/Atyrau"),
+ ("Asia/Baghdad", "Asia/Baghdad"),
+ ("Asia/Bahrain", "Asia/Bahrain"),
+ ("Asia/Baku", "Asia/Baku"),
+ ("Asia/Bangkok", "Asia/Bangkok"),
+ ("Asia/Barnaul", "Asia/Barnaul"),
+ ("Asia/Beirut", "Asia/Beirut"),
+ ("Asia/Bishkek", "Asia/Bishkek"),
+ ("Asia/Brunei", "Asia/Brunei"),
+ ("Asia/Chita", "Asia/Chita"),
+ ("Asia/Choibalsan", "Asia/Choibalsan"),
+ ("Asia/Colombo", "Asia/Colombo"),
+ ("Asia/Damascus", "Asia/Damascus"),
+ ("Asia/Dhaka", "Asia/Dhaka"),
+ ("Asia/Dili", "Asia/Dili"),
+ ("Asia/Dubai", "Asia/Dubai"),
+ ("Asia/Dushanbe", "Asia/Dushanbe"),
+ ("Asia/Famagusta", "Asia/Famagusta"),
+ ("Asia/Gaza", "Asia/Gaza"),
+ ("Asia/Hebron", "Asia/Hebron"),
+ ("Asia/Ho_Chi_Minh", "Asia/Ho_Chi_Minh"),
+ ("Asia/Hong_Kong", "Asia/Hong_Kong"),
+ ("Asia/Hovd", "Asia/Hovd"),
+ ("Asia/Irkutsk", "Asia/Irkutsk"),
+ ("Asia/Jakarta", "Asia/Jakarta"),
+ ("Asia/Jayapura", "Asia/Jayapura"),
+ ("Asia/Jerusalem", "Asia/Jerusalem"),
+ ("Asia/Kabul", "Asia/Kabul"),
+ ("Asia/Kamchatka", "Asia/Kamchatka"),
+ ("Asia/Karachi", "Asia/Karachi"),
+ ("Asia/Kathmandu", "Asia/Kathmandu"),
+ ("Asia/Khandyga", "Asia/Khandyga"),
+ ("Asia/Kolkata", "Asia/Kolkata"),
+ ("Asia/Krasnoyarsk", "Asia/Krasnoyarsk"),
+ ("Asia/Kuala_Lumpur", "Asia/Kuala_Lumpur"),
+ ("Asia/Kuching", "Asia/Kuching"),
+ ("Asia/Kuwait", "Asia/Kuwait"),
+ ("Asia/Macau", "Asia/Macau"),
+ ("Asia/Magadan", "Asia/Magadan"),
+ ("Asia/Makassar", "Asia/Makassar"),
+ ("Asia/Manila", "Asia/Manila"),
+ ("Asia/Muscat", "Asia/Muscat"),
+ ("Asia/Nicosia", "Asia/Nicosia"),
+ ("Asia/Novokuznetsk", "Asia/Novokuznetsk"),
+ ("Asia/Novosibirsk", "Asia/Novosibirsk"),
+ ("Asia/Omsk", "Asia/Omsk"),
+ ("Asia/Oral", "Asia/Oral"),
+ ("Asia/Phnom_Penh", "Asia/Phnom_Penh"),
+ ("Asia/Pontianak", "Asia/Pontianak"),
+ ("Asia/Pyongyang", "Asia/Pyongyang"),
+ ("Asia/Qatar", "Asia/Qatar"),
+ ("Asia/Qostanay", "Asia/Qostanay"),
+ ("Asia/Qyzylorda", "Asia/Qyzylorda"),
+ ("Asia/Riyadh", "Asia/Riyadh"),
+ ("Asia/Sakhalin", "Asia/Sakhalin"),
+ ("Asia/Samarkand", "Asia/Samarkand"),
+ ("Asia/Seoul", "Asia/Seoul"),
+ ("Asia/Shanghai", "Asia/Shanghai"),
+ ("Asia/Singapore", "Asia/Singapore"),
+ ("Asia/Srednekolymsk", "Asia/Srednekolymsk"),
+ ("Asia/Taipei", "Asia/Taipei"),
+ ("Asia/Tashkent", "Asia/Tashkent"),
+ ("Asia/Tbilisi", "Asia/Tbilisi"),
+ ("Asia/Tehran", "Asia/Tehran"),
+ ("Asia/Thimphu", "Asia/Thimphu"),
+ ("Asia/Tokyo", "Asia/Tokyo"),
+ ("Asia/Tomsk", "Asia/Tomsk"),
+ ("Asia/Ulaanbaatar", "Asia/Ulaanbaatar"),
+ ("Asia/Urumqi", "Asia/Urumqi"),
+ ("Asia/Ust-Nera", "Asia/Ust-Nera"),
+ ("Asia/Vientiane", "Asia/Vientiane"),
+ ("Asia/Vladivostok", "Asia/Vladivostok"),
+ ("Asia/Yakutsk", "Asia/Yakutsk"),
+ ("Asia/Yangon", "Asia/Yangon"),
+ ("Asia/Yekaterinburg", "Asia/Yekaterinburg"),
+ ("Asia/Yerevan", "Asia/Yerevan"),
+ ("Atlantic/Azores", "Atlantic/Azores"),
+ ("Atlantic/Bermuda", "Atlantic/Bermuda"),
+ ("Atlantic/Canary", "Atlantic/Canary"),
+ ("Atlantic/Cape_Verde", "Atlantic/Cape_Verde"),
+ ("Atlantic/Faroe", "Atlantic/Faroe"),
+ ("Atlantic/Madeira", "Atlantic/Madeira"),
+ ("Atlantic/Reykjavik", "Atlantic/Reykjavik"),
+ ("Atlantic/South_Georgia", "Atlantic/South_Georgia"),
+ ("Atlantic/St_Helena", "Atlantic/St_Helena"),
+ ("Atlantic/Stanley", "Atlantic/Stanley"),
+ ("Australia/Adelaide", "Australia/Adelaide"),
+ ("Australia/Brisbane", "Australia/Brisbane"),
+ ("Australia/Broken_Hill", "Australia/Broken_Hill"),
+ ("Australia/Currie", "Australia/Currie"),
+ ("Australia/Darwin", "Australia/Darwin"),
+ ("Australia/Eucla", "Australia/Eucla"),
+ ("Australia/Hobart", "Australia/Hobart"),
+ ("Australia/Lindeman", "Australia/Lindeman"),
+ ("Australia/Lord_Howe", "Australia/Lord_Howe"),
+ ("Australia/Melbourne", "Australia/Melbourne"),
+ ("Australia/Perth", "Australia/Perth"),
+ ("Australia/Sydney", "Australia/Sydney"),
+ ("Canada/Atlantic", "Canada/Atlantic"),
+ ("Canada/Central", "Canada/Central"),
+ ("Canada/Eastern", "Canada/Eastern"),
+ ("Canada/Mountain", "Canada/Mountain"),
+ ("Canada/Newfoundland", "Canada/Newfoundland"),
+ ("Canada/Pacific", "Canada/Pacific"),
+ ("Europe/Amsterdam", "Europe/Amsterdam"),
+ ("Europe/Andorra", "Europe/Andorra"),
+ ("Europe/Astrakhan", "Europe/Astrakhan"),
+ ("Europe/Athens", "Europe/Athens"),
+ ("Europe/Belgrade", "Europe/Belgrade"),
+ ("Europe/Berlin", "Europe/Berlin"),
+ ("Europe/Bratislava", "Europe/Bratislava"),
+ ("Europe/Brussels", "Europe/Brussels"),
+ ("Europe/Bucharest", "Europe/Bucharest"),
+ ("Europe/Budapest", "Europe/Budapest"),
+ ("Europe/Busingen", "Europe/Busingen"),
+ ("Europe/Chisinau", "Europe/Chisinau"),
+ ("Europe/Copenhagen", "Europe/Copenhagen"),
+ ("Europe/Dublin", "Europe/Dublin"),
+ ("Europe/Gibraltar", "Europe/Gibraltar"),
+ ("Europe/Guernsey", "Europe/Guernsey"),
+ ("Europe/Helsinki", "Europe/Helsinki"),
+ ("Europe/Isle_of_Man", "Europe/Isle_of_Man"),
+ ("Europe/Istanbul", "Europe/Istanbul"),
+ ("Europe/Jersey", "Europe/Jersey"),
+ ("Europe/Kaliningrad", "Europe/Kaliningrad"),
+ ("Europe/Kiev", "Europe/Kiev"),
+ ("Europe/Kirov", "Europe/Kirov"),
+ ("Europe/Lisbon", "Europe/Lisbon"),
+ ("Europe/Ljubljana", "Europe/Ljubljana"),
+ ("Europe/London", "Europe/London"),
+ ("Europe/Luxembourg", "Europe/Luxembourg"),
+ ("Europe/Madrid", "Europe/Madrid"),
+ ("Europe/Malta", "Europe/Malta"),
+ ("Europe/Mariehamn", "Europe/Mariehamn"),
+ ("Europe/Minsk", "Europe/Minsk"),
+ ("Europe/Monaco", "Europe/Monaco"),
+ ("Europe/Moscow", "Europe/Moscow"),
+ ("Europe/Oslo", "Europe/Oslo"),
+ ("Europe/Paris", "Europe/Paris"),
+ ("Europe/Podgorica", "Europe/Podgorica"),
+ ("Europe/Prague", "Europe/Prague"),
+ ("Europe/Riga", "Europe/Riga"),
+ ("Europe/Rome", "Europe/Rome"),
+ ("Europe/Samara", "Europe/Samara"),
+ ("Europe/San_Marino", "Europe/San_Marino"),
+ ("Europe/Sarajevo", "Europe/Sarajevo"),
+ ("Europe/Saratov", "Europe/Saratov"),
+ ("Europe/Simferopol", "Europe/Simferopol"),
+ ("Europe/Skopje", "Europe/Skopje"),
+ ("Europe/Sofia", "Europe/Sofia"),
+ ("Europe/Stockholm", "Europe/Stockholm"),
+ ("Europe/Tallinn", "Europe/Tallinn"),
+ ("Europe/Tirane", "Europe/Tirane"),
+ ("Europe/Ulyanovsk", "Europe/Ulyanovsk"),
+ ("Europe/Uzhgorod", "Europe/Uzhgorod"),
+ ("Europe/Vaduz", "Europe/Vaduz"),
+ ("Europe/Vatican", "Europe/Vatican"),
+ ("Europe/Vienna", "Europe/Vienna"),
+ ("Europe/Vilnius", "Europe/Vilnius"),
+ ("Europe/Volgograd", "Europe/Volgograd"),
+ ("Europe/Warsaw", "Europe/Warsaw"),
+ ("Europe/Zagreb", "Europe/Zagreb"),
+ ("Europe/Zaporozhye", "Europe/Zaporozhye"),
+ ("Europe/Zurich", "Europe/Zurich"),
+ ("GMT", "GMT"),
+ ("Indian/Antananarivo", "Indian/Antananarivo"),
+ ("Indian/Chagos", "Indian/Chagos"),
+ ("Indian/Christmas", "Indian/Christmas"),
+ ("Indian/Cocos", "Indian/Cocos"),
+ ("Indian/Comoro", "Indian/Comoro"),
+ ("Indian/Kerguelen", "Indian/Kerguelen"),
+ ("Indian/Mahe", "Indian/Mahe"),
+ ("Indian/Maldives", "Indian/Maldives"),
+ ("Indian/Mauritius", "Indian/Mauritius"),
+ ("Indian/Mayotte", "Indian/Mayotte"),
+ ("Indian/Reunion", "Indian/Reunion"),
+ ("Pacific/Apia", "Pacific/Apia"),
+ ("Pacific/Auckland", "Pacific/Auckland"),
+ ("Pacific/Bougainville", "Pacific/Bougainville"),
+ ("Pacific/Chatham", "Pacific/Chatham"),
+ ("Pacific/Chuuk", "Pacific/Chuuk"),
+ ("Pacific/Easter", "Pacific/Easter"),
+ ("Pacific/Efate", "Pacific/Efate"),
+ ("Pacific/Enderbury", "Pacific/Enderbury"),
+ ("Pacific/Fakaofo", "Pacific/Fakaofo"),
+ ("Pacific/Fiji", "Pacific/Fiji"),
+ ("Pacific/Funafuti", "Pacific/Funafuti"),
+ ("Pacific/Galapagos", "Pacific/Galapagos"),
+ ("Pacific/Gambier", "Pacific/Gambier"),
+ ("Pacific/Guadalcanal", "Pacific/Guadalcanal"),
+ ("Pacific/Guam", "Pacific/Guam"),
+ ("Pacific/Honolulu", "Pacific/Honolulu"),
+ ("Pacific/Kiritimati", "Pacific/Kiritimati"),
+ ("Pacific/Kosrae", "Pacific/Kosrae"),
+ ("Pacific/Kwajalein", "Pacific/Kwajalein"),
+ ("Pacific/Majuro", "Pacific/Majuro"),
+ ("Pacific/Marquesas", "Pacific/Marquesas"),
+ ("Pacific/Midway", "Pacific/Midway"),
+ ("Pacific/Nauru", "Pacific/Nauru"),
+ ("Pacific/Niue", "Pacific/Niue"),
+ ("Pacific/Norfolk", "Pacific/Norfolk"),
+ ("Pacific/Noumea", "Pacific/Noumea"),
+ ("Pacific/Pago_Pago", "Pacific/Pago_Pago"),
+ ("Pacific/Palau", "Pacific/Palau"),
+ ("Pacific/Pitcairn", "Pacific/Pitcairn"),
+ ("Pacific/Pohnpei", "Pacific/Pohnpei"),
+ ("Pacific/Port_Moresby", "Pacific/Port_Moresby"),
+ ("Pacific/Rarotonga", "Pacific/Rarotonga"),
+ ("Pacific/Saipan", "Pacific/Saipan"),
+ ("Pacific/Tahiti", "Pacific/Tahiti"),
+ ("Pacific/Tarawa", "Pacific/Tarawa"),
+ ("Pacific/Tongatapu", "Pacific/Tongatapu"),
+ ("Pacific/Wake", "Pacific/Wake"),
+ ("Pacific/Wallis", "Pacific/Wallis"),
+ ("US/Alaska", "US/Alaska"),
+ ("US/Arizona", "US/Arizona"),
+ ("US/Central", "US/Central"),
+ ("US/Eastern", "US/Eastern"),
+ ("US/Hawaii", "US/Hawaii"),
+ ("US/Mountain", "US/Mountain"),
+ ("US/Pacific", "US/Pacific"),
+ ("UTC", "UTC"),
+ ],
+ default="UTC",
+ max_length=80,
+ null=True,
+ ),
+ )
]
diff --git a/brutaldon/migrations/0020_auto_20190127_2159.py b/brutaldon/migrations/0020_auto_20190127_2159.py
index 53846bb..f543e7e 100644
--- a/brutaldon/migrations/0020_auto_20190127_2159.py
+++ b/brutaldon/migrations/0020_auto_20190127_2159.py
@@ -5,14 +5,12 @@ from django.db import migrations, models
class Migration(migrations.Migration):
- dependencies = [
- ('brutaldon', '0019_auto_20190124_0813'),
- ]
+ dependencies = [("brutaldon", "0019_auto_20190124_0813")]
operations = [
migrations.AlterField(
- model_name='account',
- name='note_seen',
+ model_name="account",
+ name="note_seen",
field=models.CharField(blank=True, max_length=128, null=True),
- ),
+ )
]
diff --git a/brutaldon/migrations/0021_client_version.py b/brutaldon/migrations/0021_client_version.py
index ba27dad..fefe592 100644
--- a/brutaldon/migrations/0021_client_version.py
+++ b/brutaldon/migrations/0021_client_version.py
@@ -5,14 +5,12 @@ from django.db import migrations, models
class Migration(migrations.Migration):
- dependencies = [
- ('brutaldon', '0020_auto_20190127_2159'),
- ]
+ dependencies = [("brutaldon", "0020_auto_20190127_2159")]
operations = [
migrations.AddField(
- model_name='client',
- name='version',
- field=models.CharField(default='1.0', max_length=8),
- ),
+ model_name="client",
+ name="version",
+ field=models.CharField(default="1.0", max_length=8),
+ )
]
diff --git a/brutaldon/migrations/0022_auto_20190506_0938.py b/brutaldon/migrations/0022_auto_20190506_0938.py
index 1b4b44f..4eb7dac 100644
--- a/brutaldon/migrations/0022_auto_20190506_0938.py
+++ b/brutaldon/migrations/0022_auto_20190506_0938.py
@@ -5,14 +5,12 @@ from django.db import migrations, models
class Migration(migrations.Migration):
- dependencies = [
- ('brutaldon', '0021_client_version'),
- ]
+ dependencies = [("brutaldon", "0021_client_version")]
operations = [
migrations.AlterField(
- model_name='client',
- name='version',
- field=models.CharField(default='1.0', max_length=80),
- ),
+ model_name="client",
+ name="version",
+ field=models.CharField(default="1.0", max_length=80),
+ )
]
diff --git a/brutaldon/models.py b/brutaldon/models.py
index 577b52f..b63f4fe 100644
--- a/brutaldon/models.py
+++ b/brutaldon/models.py
@@ -5,8 +5,9 @@ from pytz import common_timezones
timezones = [(tz, tz) for tz in common_timezones]
+
class Client(models.Model):
- name = models.CharField(default = "brutaldon", max_length=80)
+ name = models.CharField(default="brutaldon", max_length=80)
api_base_id = models.URLField(default="https://mastodon.social")
version = models.CharField(default="1.0", max_length=80)
client_id = models.CharField(null=True, blank=True, max_length=2048)
@@ -15,42 +16,62 @@ class Client(models.Model):
def __str__(self):
return self.name + ": " + self.api_base_id
+
class Theme(models.Model):
name = models.CharField(max_length=80, unique=True)
prefix = models.CharField(max_length=40, null=True, default="default")
- main_css = models.CharField(max_length=1024, blank=True, null=True,
- default="css/fullbrutalism.css")
+ main_css = models.CharField(
+ max_length=1024, blank=True, null=True, default="css/fullbrutalism.css"
+ )
tweaks_css = models.CharField(max_length=1024, blank=True, null=True)
is_brutalist = models.BooleanField(default=False)
def __str__(self):
return self.name
+
class Preference(models.Model):
theme = models.ForeignKey(Theme, models.CASCADE, null=False, default=1)
filter_replies = models.BooleanField(default=False)
filter_boosts = models.BooleanField(default=False)
- timezone = models.CharField(max_length=80, blank=True, null=True,
- choices=timezones, default='UTC')
- no_javascript = models.BooleanField(default=False,
- help_text=_("""Disable all JavaScript. Overrides all other JavaScript options."""))
- notifications = models.BooleanField(default=True,
- help_text=_("""Display live notifications in header."""))
- click_to_load = models.BooleanField(default=False,
- help_text=_("""Click to load more toots in the same page, rather than using pagination."""))
- lightbox = models.BooleanField(default=False,
- help_text=_("""Use a JavaScript lightbox to display media."""))
- poll_frequency = models.IntegerField(default=300,
- help_text=_("""Number of seconds to wait between checking notifications. Default: 300"""))
- filter_notifications = models.BooleanField(default=False,
- help_text=_("""Exclude boosts and favs from your notifications."""))
+ timezone = models.CharField(
+ max_length=80, blank=True, null=True, choices=timezones, default="UTC"
+ )
+ no_javascript = models.BooleanField(
+ default=False,
+ help_text=_(
+ """Disable all JavaScript. Overrides all other JavaScript options."""
+ ),
+ )
+ notifications = models.BooleanField(
+ default=True, help_text=_("""Display live notifications in header.""")
+ )
+ click_to_load = models.BooleanField(
+ default=False,
+ help_text=_(
+ """Click to load more toots in the same page, rather than using pagination."""
+ ),
+ )
+ lightbox = models.BooleanField(
+ default=False, help_text=_("""Use a JavaScript lightbox to display media.""")
+ )
+ poll_frequency = models.IntegerField(
+ default=300,
+ help_text=_(
+ """Number of seconds to wait between checking notifications. Default: 300"""
+ ),
+ )
+ filter_notifications = models.BooleanField(
+ default=False,
+ help_text=_("""Exclude boosts and favs from your notifications."""),
+ )
+
class Account(models.Model):
username = models.EmailField(unique=True)
email = models.EmailField(null=True, blank=True)
django_user = models.ForeignKey(settings.AUTH_USER_MODEL, models.CASCADE, null=True)
access_token = models.CharField(null=True, blank=True, max_length=2048)
- client= models.ForeignKey(Client, models.SET_NULL, null=True)
+ client = models.ForeignKey(Client, models.SET_NULL, null=True)
preferences = models.ForeignKey(Preference, models.SET_NULL, null=True)
note_seen = models.CharField(null=True, blank=True, max_length=128)
-
diff --git a/brutaldon/settings.py b/brutaldon/settings.py
index 166a58d..77854a9 100644
--- a/brutaldon/settings.py
+++ b/brutaldon/settings.py
@@ -20,7 +20,7 @@ BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# See https://docs.djangoproject.com/en/2.0/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
-SECRET_KEY = '6lq9!52j^)=m89))umaphx9ac%)b$k^gs%x1rkk^v^$u9zjz$@'
+SECRET_KEY = "6lq9!52j^)=m89))umaphx9ac%)b$k^gs%x1rkk^v^$u9zjz$@"
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
@@ -31,57 +31,57 @@ ALLOWED_HOSTS = []
# Application definition
INSTALLED_APPS = [
- 'django.contrib.admin',
- 'django.contrib.auth',
- 'django.contrib.contenttypes',
- 'django.contrib.sessions',
- 'django.contrib.messages',
- 'django.contrib.staticfiles',
- 'widget_tweaks',
- 'sanitizer',
- 'django.contrib.humanize',
- 'brutaldon',
+ "django.contrib.admin",
+ "django.contrib.auth",
+ "django.contrib.contenttypes",
+ "django.contrib.sessions",
+ "django.contrib.messages",
+ "django.contrib.staticfiles",
+ "widget_tweaks",
+ "sanitizer",
+ "django.contrib.humanize",
+ "brutaldon",
]
MIDDLEWARE = [
- 'django.middleware.security.SecurityMiddleware',
- 'django.contrib.sessions.middleware.SessionMiddleware',
- 'django.middleware.common.CommonMiddleware',
- 'django.middleware.csrf.CsrfViewMiddleware',
- 'django.contrib.auth.middleware.AuthenticationMiddleware',
- 'django.contrib.messages.middleware.MessageMiddleware',
- 'django.middleware.clickjacking.XFrameOptionsMiddleware',
- 'brutaldon.middleware.timezone.TimezoneMiddleware',
+ "django.middleware.security.SecurityMiddleware",
+ "django.contrib.sessions.middleware.SessionMiddleware",
+ "django.middleware.common.CommonMiddleware",
+ "django.middleware.csrf.CsrfViewMiddleware",
+ "django.contrib.auth.middleware.AuthenticationMiddleware",
+ "django.contrib.messages.middleware.MessageMiddleware",
+ "django.middleware.clickjacking.XFrameOptionsMiddleware",
+ "brutaldon.middleware.timezone.TimezoneMiddleware",
]
-ROOT_URLCONF = 'brutaldon.urls'
+ROOT_URLCONF = "brutaldon.urls"
TEMPLATES = [
{
- 'BACKEND': 'django.template.backends.django.DjangoTemplates',
- 'DIRS': [],
- 'APP_DIRS': True,
- 'OPTIONS': {
- 'context_processors': [
- 'django.template.context_processors.debug',
- 'django.template.context_processors.request',
- 'django.contrib.auth.context_processors.auth',
- 'django.contrib.messages.context_processors.messages',
- ],
+ "BACKEND": "django.template.backends.django.DjangoTemplates",
+ "DIRS": [],
+ "APP_DIRS": True,
+ "OPTIONS": {
+ "context_processors": [
+ "django.template.context_processors.debug",
+ "django.template.context_processors.request",
+ "django.contrib.auth.context_processors.auth",
+ "django.contrib.messages.context_processors.messages",
+ ]
},
- },
+ }
]
-WSGI_APPLICATION = 'brutaldon.wsgi.application'
+WSGI_APPLICATION = "brutaldon.wsgi.application"
# Database
# https://docs.djangoproject.com/en/2.0/ref/settings/#databases
DATABASES = {
- 'default': {
- 'ENGINE': 'django.db.backends.sqlite3',
- 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
+ "default": {
+ "ENGINE": "django.db.backends.sqlite3",
+ "NAME": os.path.join(BASE_DIR, "db.sqlite3"),
}
}
@@ -91,78 +91,68 @@ DATABASES = {
AUTH_PASSWORD_VALIDATORS = [
{
- 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
- },
- {
- 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
- },
- {
- 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
- },
- {
- 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
+ "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator"
},
+ {"NAME": "django.contrib.auth.password_validation.MinimumLengthValidator"},
+ {"NAME": "django.contrib.auth.password_validation.CommonPasswordValidator"},
+ {"NAME": "django.contrib.auth.password_validation.NumericPasswordValidator"},
]
LOGGING = {
- 'version': 1,
- 'disable_existing_loggers': False,
- 'filters': {
- 'require_debug_false': {
- '()': 'django.utils.log.RequireDebugFalse',
- },
- 'require_debug_true': {
- '()': 'django.utils.log.RequireDebugTrue',
- },
- },
- 'formatters': {
- 'django.server': {
- '()': 'django.utils.log.ServerFormatter',
- 'format': '[%(server_time)s] %(message)s',
- }
- },
- 'handlers': {
- 'console': {
- 'level': 'INFO',
- 'filters': ['require_debug_true'],
- 'class': 'logging.StreamHandler',
- },
- 'console_debug_false': {
- 'level': 'ERROR',
- 'filters': ['require_debug_false'],
- 'class': 'logging.StreamHandler',
- },
- 'django.server': {
- 'level': 'INFO',
- 'class': 'logging.StreamHandler',
- 'formatter': 'django.server',
- },
- 'mail_admins': {
- 'level': 'ERROR',
- 'filters': ['require_debug_false'],
- 'class': 'django.utils.log.AdminEmailHandler'
- }
- },
- 'loggers': {
- 'django': {
- 'handlers': ['console', 'console_debug_false', 'mail_admins'],
- 'level': 'INFO',
- },
- 'django.server': {
- 'handlers': ['django.server'],
- 'level': 'INFO',
- 'propagate': False,
- }
- }
+ "version": 1,
+ "disable_existing_loggers": False,
+ "filters": {
+ "require_debug_false": {"()": "django.utils.log.RequireDebugFalse"},
+ "require_debug_true": {"()": "django.utils.log.RequireDebugTrue"},
+ },
+ "formatters": {
+ "django.server": {
+ "()": "django.utils.log.ServerFormatter",
+ "format": "[%(server_time)s] %(message)s",
+ }
+ },
+ "handlers": {
+ "console": {
+ "level": "INFO",
+ "filters": ["require_debug_true"],
+ "class": "logging.StreamHandler",
+ },
+ "console_debug_false": {
+ "level": "ERROR",
+ "filters": ["require_debug_false"],
+ "class": "logging.StreamHandler",
+ },
+ "django.server": {
+ "level": "INFO",
+ "class": "logging.StreamHandler",
+ "formatter": "django.server",
+ },
+ "mail_admins": {
+ "level": "ERROR",
+ "filters": ["require_debug_false"],
+ "class": "django.utils.log.AdminEmailHandler",
+ },
+ },
+ "loggers": {
+ "django": {
+ "handlers": ["console", "console_debug_false", "mail_admins"],
+ "level": "INFO",
+ },
+ "django.server": {
+ "handlers": ["django.server"],
+ "level": "INFO",
+ "propagate": False,
+ },
+ },
}
# Internationalization
# https://docs.djangoproject.com/en/2.0/topics/i18n/
-LANGUAGE_CODE = 'en-us'
+LANGUAGE_CODE = "en-us"
-TIME_ZONE = 'America/New_York'
+TIME_ZONE = "America/New_York"
USE_I18N = True
@@ -174,13 +164,29 @@ USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.0/howto/static-files/
-STATIC_URL = '/static/'
-STATIC_ROOT = os.path.join(BASE_DIR, 'static')
+STATIC_URL = "/static/"
+STATIC_ROOT = os.path.join(BASE_DIR, "static")
# Sanitizer settings
-SANITIZER_ALLOWED_TAGS = ['a', 'p', 'img', 'br', 'i', 'strong', 'em', 'pre', 'code',
- 'ul', 'li', 'ol', 'blockquote', 'del', 'span', 'u']
-SANITIZER_ALLOWED_ATTRIBUTES = ['href', 'src', 'title', 'alt', 'class', 'lang']
+SANITIZER_ALLOWED_TAGS = [
+ "a",
+ "p",
+ "img",
+ "br",
+ "i",
+ "strong",
+ "em",
+ "pre",
+ "code",
+ "ul",
+ "li",
+ "ol",
+ "blockquote",
+ "del",
+ "span",
+ "u",
+]
+SANITIZER_ALLOWED_ATTRIBUTES = ["href", "src", "title", "alt", "class", "lang"]
# File upload settings.
# Important: media will not work if you change this.
@@ -188,11 +194,10 @@ FILE_UPLOAD_HANDLERS = ["django.core.files.uploadhandler.TemporaryFileUploadHand
# Session serialization
# Important: whatever you choose has to be able to serialize DateTime, so not JSON.
-SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
+SESSION_SERIALIZER = "django.contrib.sessions.serializers.PickleSerializer"
# URL to redirect users to when not logged in
-ANONYMOUS_HOME_URL = 'about'
+ANONYMOUS_HOME_URL = "about"
# Version number displayed on about page
BRUTALDON_VERSION = "2.12.1"
-
diff --git a/brutaldon/templatetags/humanetime.py b/brutaldon/templatetags/humanetime.py
index 2b86294..48977f4 100644
--- a/brutaldon/templatetags/humanetime.py
+++ b/brutaldon/templatetags/humanetime.py
@@ -6,9 +6,10 @@ from django import template
register = template.Library()
+
@register.filter(is_safe=True)
def humane_time(arg):
- '''Returns a time string that is humane but not relative (unlike Django's humanetime)
+ """Returns a time string that is humane but not relative (unlike Django's humanetime)
For times less than 6 hours ago: display date and time to the minute.
For times less than 12 hours ago: display date and time to the hour.
@@ -27,7 +28,7 @@ def humane_time(arg):
FIXME: work out how best to make these strings translatable
- '''
+ """
now = django_now()
arg = localtime(arg)
diff = now - arg
@@ -42,13 +43,14 @@ def humane_time(arg):
return arg.strftime("%a, %b %d, %Y around %I %p") + utc
elif diff < timedelta(hours=36):
return arg.strftime("%a, %b %d, %Y in the ") + time_of_day(arg.hour) + utc
- elif diff < timedelta(days=6*28):
+ elif diff < timedelta(days=6 * 28):
return arg.strftime("%b %d, %Y")
- elif diff < timedelta(days=10*365):
+ elif diff < timedelta(days=10 * 365):
return arg.strftime("%b, %Y")
else:
return arg.strftime("%Y")
+
def time_of_day(hour):
"""Return a description of what time of day an hour is.
diff --git a/brutaldon/templatetags/taglinks.py b/brutaldon/templatetags/taglinks.py
index afe2ac7..a3dba9a 100644
--- a/brutaldon/templatetags/taglinks.py
+++ b/brutaldon/templatetags/taglinks.py
@@ -7,79 +7,88 @@ from pdb import set_trace
register = template.Library()
+
@register.filter
def pdb(element):
set_trace()
return element
+
@register.filter
def relink_tags(value):
- '''Treat the text as html, and replace tag links with app-internal tag links
+ """Treat the text as html, and replace tag links with app-internal tag links
Currently, this only works for tags in toots coming from Mastodon servers,
not necessarily GNU Social, Pleroma, or other fediverse servers, because
it relies on the markup that Mastodon puts on tags.
FIXME: handle arbitrary tag links
- '''
- value = value.replace(''', "'")
- soup = BeautifulSoup(value, 'html.parser')
- for link in soup.find_all('a', class_='hashtag'):
+ """
+ value = value.replace("'", "'")
+ soup = BeautifulSoup(value, "html.parser")
+ for link in soup.find_all("a", class_="hashtag"):
try:
- link['href'] = reverse('tag', args=[link.span.string])
+ link["href"] = reverse("tag", args=[link.span.string])
except:
continue
- return soup.decode(formatter='html')
+ return soup.decode(formatter="html")
+
@register.filter
def relink_mentions(value):
- '''Treat the text as html, and replace mention links with app-internal links
+ """Treat the text as html, and replace mention links with app-internal links
Currently, this only works for mentions in toots coming from Mastodon servers,
not necessarily GNU Social, Pleroma, or other fediverse servers, because
it relies on the markup that Mastodon puts on mentions.
FIXME: handle arbitrary mention links
- '''
- value = value.replace(''', "'")
- soup = BeautifulSoup(value, 'html.parser')
- for link in soup.find_all('a', class_='mention'):
- parsed = parse.urlparse(link['href'])
+ """
+ value = value.replace("'", "'")
+ soup = BeautifulSoup(value, "html.parser")
+ for link in soup.find_all("a", class_="mention"):
+ parsed = parse.urlparse(link["href"])
try:
instance = parsed[1]
user = parsed[2][2:]
- link['href'] = reverse('user', args=[user+'@'+instance])
+ link["href"] = reverse("user", args=[user + "@" + instance])
except:
continue
- return soup.decode(formatter='html')
+ return soup.decode(formatter="html")
+
@register.filter
def relink_toot(value):
return relink_tags(relink_mentions(value))
+
@register.filter
def localuser(value):
- '''Convert a remote user link to local'''
+ """Convert a remote user link to local"""
try:
parsed = parse.urlparse(value)
instance = parsed[1]
- if parsed[2].startswith('/@'):
+ if parsed[2].startswith("/@"):
user = parsed[2][2:]
else:
- user = parsed[2].split('/')[-1]
- local = reverse('user', args=[user+'@'+instance])
+ user = parsed[2].split("/")[-1]
+ local = reverse("user", args=[user + "@" + instance])
except:
local = value
return local
+
@register.filter
def fix_emojos(value, emojos):
- '''Replace instances of recognized custom emoji :shortcodes: in value with image link tags
- '''
+ """Replace instances of recognized custom emoji :shortcodes: in value with image link tags
+ """
for emojo in emojos:
try:
- value = value.replace(":%(shortcode)s:" % emojo,
- '' % emojo)
+ value = value.replace(
+ ":%(shortcode)s:" % emojo,
+ ''
+ % emojo,
+ )
except:
continue
return value
diff --git a/brutaldon/urls.py b/brutaldon/urls.py
index 0cfe5ad..dea6ac7 100644
--- a/brutaldon/urls.py
+++ b/brutaldon/urls.py
@@ -18,55 +18,55 @@ from django.urls import path
from brutaldon import views
urlpatterns = [
- path('admin/', admin.site.urls),
- path('about', views.about, name='about'),
- path('privacy', views.privacy, name='privacy'),
- path('home/next/', views.home, name='home_next'),
- path('home/prev/', views.home, name='home_prev'),
- path('home', views.home, name='home'),
- path('login', views.login, name="login"),
- path('oldlogin', views.old_login, name="oldlogin"),
- path('logout', views.logout, name='logout'),
- path('oauth_callback', views.oauth_callback, name="oauth_callback"),
- path('error', views.error, name='error'),
- path('local', views.local, name='local'),
- path('local/next/', views.local, name='local_next'),
- path('local/prev/', views.local, name='local_prev'),
- path('fed', views.fed, name='fed'),
- path('fed/next/', views.fed, name='fed_next'),
- path('fed/prev/', views.fed, name='fed_prev'),
- path('note', views.note, name='note'),
- path('note/next', views.note, name='note_next'),
- path('note/prev/', views.note, name='note_prev'),
- path('notes_count', views.notes_count, name='notes_count'),
- path('user_search', views.user_search, name='user_search'),
- path('settings', views.settings, name='settings'),
- path('thread/', views.thread, name='thread'),
- path('tags/', views.tag, name='tag'),
- path('user/', views.home, name='user_bad'),
- path('user/', views.user, name='user'),
- path('user//next/', views.user, name='user_next'),
- path('user//prev/', views.user, name='user_prev'),
- path('toot/', views.toot, name='toot'),
- path('toot', views.toot, name="toot"),
- path('reply/', views.reply, name='reply'),
- path('redraft/', views.redraft, name='redraft'),
- path('fav/', views.fav, name='fav'),
- path('boost/', views.boost, name='boost'),
- path('delete/', views.delete, name='delete'),
- path('follow/', views.follow, name='follow'),
- path('block/', views.block, name='block'),
- path('mute/', views.mute, name='mute'),
- path('search', views.search, name='search'),
- path('search_results', views.search_results, name='search_results'),
- path('emoji', views.emoji_reference, name='emoji'),
- path('filters/list', views.list_filters, name='list_filters'),
- path('filters/create', views.create_filter, name='create_filter'),
- path('filters/delete/', views.delete_filter, name='delete_filter'),
- path('filters/edit/', views.edit_filter, name='edit_filter'),
- path('requests/', views.follow_requests, name='follow_requests'),
- path('requests/', views.follow_requests, name='follow_requests'),
- path('accounts/', views.accounts, name='accounts'),
- path('accounts/', views.accounts, name='accounts'),
- path('', views.home, name=''),
+ path("admin/", admin.site.urls),
+ path("about", views.about, name="about"),
+ path("privacy", views.privacy, name="privacy"),
+ path("home/next/", views.home, name="home_next"),
+ path("home/prev/", views.home, name="home_prev"),
+ path("home", views.home, name="home"),
+ path("login", views.login, name="login"),
+ path("oldlogin", views.old_login, name="oldlogin"),
+ path("logout", views.logout, name="logout"),
+ path("oauth_callback", views.oauth_callback, name="oauth_callback"),
+ path("error", views.error, name="error"),
+ path("local", views.local, name="local"),
+ path("local/next/", views.local, name="local_next"),
+ path("local/prev/", views.local, name="local_prev"),
+ path("fed", views.fed, name="fed"),
+ path("fed/next/", views.fed, name="fed_next"),
+ path("fed/prev/", views.fed, name="fed_prev"),
+ path("note", views.note, name="note"),
+ path("note/next", views.note, name="note_next"),
+ path("note/prev/", views.note, name="note_prev"),
+ path("notes_count", views.notes_count, name="notes_count"),
+ path("user_search", views.user_search, name="user_search"),
+ path("settings", views.settings, name="settings"),
+ path("thread/", views.thread, name="thread"),
+ path("tags/", views.tag, name="tag"),
+ path("user/", views.home, name="user_bad"),
+ path("user/", views.user, name="user"),
+ path("user//next/", views.user, name="user_next"),
+ path("user//prev/", views.user, name="user_prev"),
+ path("toot/", views.toot, name="toot"),
+ path("toot", views.toot, name="toot"),
+ path("reply/", views.reply, name="reply"),
+ path("redraft/", views.redraft, name="redraft"),
+ path("fav/", views.fav, name="fav"),
+ path("boost/", views.boost, name="boost"),
+ path("delete/", views.delete, name="delete"),
+ path("follow/", views.follow, name="follow"),
+ path("block/", views.block, name="block"),
+ path("mute/", views.mute, name="mute"),
+ path("search", views.search, name="search"),
+ path("search_results", views.search_results, name="search_results"),
+ path("emoji", views.emoji_reference, name="emoji"),
+ path("filters/list", views.list_filters, name="list_filters"),
+ path("filters/create", views.create_filter, name="create_filter"),
+ path("filters/delete/", views.delete_filter, name="delete_filter"),
+ path("filters/edit/", views.edit_filter, name="edit_filter"),
+ path("requests/", views.follow_requests, name="follow_requests"),
+ path("requests/", views.follow_requests, name="follow_requests"),
+ path("accounts/", views.accounts, name="accounts"),
+ path("accounts/", views.accounts, name="accounts"),
+ path("", views.home, name=""),
]
diff --git a/brutaldon/views.py b/brutaldon/views.py
index 21a9eb0..d70ad73 100644
--- a/brutaldon/views.py
+++ b/brutaldon/views.py
@@ -7,49 +7,73 @@ from django.views.decorators.cache import never_cache, cache_page
from django.urls import reverse
from django.core.files.uploadhandler import TemporaryFileUploadHandler
from django.utils.translation import gettext as _
-from brutaldon.forms import LoginForm, OAuthLoginForm, PreferencesForm, PostForm, FilterForm
+from brutaldon.forms import (
+ LoginForm,
+ OAuthLoginForm,
+ PreferencesForm,
+ PostForm,
+ FilterForm,
+)
from brutaldon.models import Client, Account, Preference, Theme
-from mastodon import Mastodon, AttribAccessDict, MastodonError, MastodonAPIError, MastodonNotFoundError
+from mastodon import (
+ Mastodon,
+ AttribAccessDict,
+ MastodonError,
+ MastodonAPIError,
+ MastodonNotFoundError,
+)
from urllib import parse
from pdb import set_trace
from inscriptis import get_text
from time import sleep
import re
+
class NotLoggedInException(Exception):
pass
+
###
### Utility functions
###
+
def get_usercontext(request):
if is_logged_in(request):
try:
- client = Client.objects.get(api_base_id=request.session['active_instance'])
- user = Account.objects.get(username=request.session['active_username'])
- except (Client.DoesNotExist, Client.MultipleObjectsReturned,
- Account.DoesNotExist, Account.MultipleObjectsReturned):
+ client = Client.objects.get(api_base_id=request.session["active_instance"])
+ user = Account.objects.get(username=request.session["active_username"])
+ except (
+ Client.DoesNotExist,
+ Client.MultipleObjectsReturned,
+ Account.DoesNotExist,
+ Account.MultipleObjectsReturned,
+ ):
raise NotLoggedInException()
mastodon = Mastodon(
- client_id = client.client_id,
- client_secret = client.client_secret,
- access_token = user.access_token,
- api_base_url = client.api_base_id,
- ratelimit_method="throw")
+ client_id=client.client_id,
+ client_secret=client.client_secret,
+ access_token=user.access_token,
+ api_base_url=client.api_base_id,
+ ratelimit_method="throw",
+ )
return user, mastodon
else:
return None, None
+
def is_logged_in(request):
- return request.session.has_key('active_user')
+ return request.session.has_key("active_user")
+
def _notes_count(account, mastodon):
if not mastodon:
return ""
notes = mastodon.notifications(limit=40)
if account.preferences.filter_notifications:
- notes = [ note for note in notes if note.type == 'mention' or note.type == 'follow']
+ notes = [
+ note for note in notes if note.type == "mention" or note.type == "follow"
+ ]
for index, item in enumerate(notes):
if account.note_seen is None:
account.note_seen = "0"
@@ -60,6 +84,7 @@ def _notes_count(account, mastodon):
index = "40+"
return str(index)
+
def br_login_required(function=None, home_url=None, redirect_field_name=None):
"""Check that the user is logged in to a Mastodon instance.
@@ -97,11 +122,12 @@ def br_login_required(function=None, home_url=None, redirect_field_name=None):
else:
return _dec(function)
+
def user_search(request):
check = request.POST.get("status", "").split()
if len(check):
check = check[-1]
- if len(check) > 1 and check.startswith('@'):
+ if len(check) > 1 and check.startswith("@"):
check = check[1:]
return user_search_inner(request, check)
else:
@@ -110,28 +136,44 @@ def user_search(request):
check = " "
return HttpResponse(check)
+
def user_search_inner(request, query):
account, mastodon = get_usercontext(request)
results = mastodon.search(query)
- return render(request, 'intercooler/users.html',
- {'active_users': "\n".join([ user.acct for user in results.accounts ]),
- 'preferences': account.preferences })
+ return render(
+ request,
+ "intercooler/users.html",
+ {
+ "active_users": "\n".join([user.acct for user in results.accounts]),
+ "preferences": account.preferences,
+ },
+ )
-def timeline(request, timeline='home', timeline_name='Home', max_id=None, min_id=None, filter_context='home'):
+
+def timeline(
+ request,
+ timeline="home",
+ timeline_name="Home",
+ max_id=None,
+ min_id=None,
+ filter_context="home",
+):
account, mastodon = get_usercontext(request)
data = mastodon.timeline(timeline, limit=40, max_id=max_id, min_id=min_id)
- form = PostForm(initial={'visibility': request.session['active_user'].source.privacy})
+ form = PostForm(
+ initial={"visibility": request.session["active_user"].source.privacy}
+ )
try:
prev = data[0]._pagination_prev
- if len(mastodon.timeline(min_id=prev['min_id'])) == 0:
+ if len(mastodon.timeline(min_id=prev["min_id"])) == 0:
prev = None
else:
- prev['min_id'] = data[0].id
+ prev["min_id"] = data[0].id
except (IndexError, AttributeError, KeyError):
prev = None
try:
next = data[-1]._pagination_next
- next['max_id'] = data[-1].id
+ next["max_id"] = data[-1].id
except (IndexError, AttributeError, KeyError):
next = None
@@ -147,40 +189,55 @@ def timeline(request, timeline='home', timeline_name='Home', max_id=None, min_id
# Apply filters
data = [x for x in data if not toot_matches_filters(x, filters)]
- return render(request, 'main/%s_timeline.html' % timeline,
- {'toots': data, 'form': form, 'timeline': timeline,
- 'timeline_name': timeline_name,
- 'own_acct': request.session['active_user'],
- 'preferences': account.preferences,
- 'notifications': notifications,
- 'prev': prev, 'next': next})
+ return render(
+ request,
+ "main/%s_timeline.html" % timeline,
+ {
+ "toots": data,
+ "form": form,
+ "timeline": timeline,
+ "timeline_name": timeline_name,
+ "own_acct": request.session["active_user"],
+ "preferences": account.preferences,
+ "notifications": notifications,
+ "prev": prev,
+ "next": next,
+ },
+ )
+
def get_filters(mastodon, context=None):
try:
if context:
- return [ff for ff in mastodon.filters() if context in ff.context]
+ return [ff for ff in mastodon.filters() if context in ff.context]
else:
return mastodon.filters()
except:
return []
+
def toot_matches_filters(toot, filters=[]):
if not filters:
return False
+
def maybe_rewrite_filter(filter):
if filter.whole_word:
return f"\\b{filter.phrase}\\b"
else:
return filter.phrase
+
phrases = [maybe_rewrite_filter(x) for x in filters]
pattern = "|".join(phrases)
try:
- if toot.get('type') in ['reblog', 'favourite']:
- return re.search(pattern, toot.status.spoiler_text + toot.status.content, re.I)
+ if toot.get("type") in ["reblog", "favourite"]:
+ return re.search(
+ pattern, toot.status.spoiler_text + toot.status.content, re.I
+ )
return re.search(pattern, toot.spoiler_text + toot.content, re.I)
except:
return False
+
def switch_accounts(request, new_account):
"""Try to switch accounts to the specified account, if it is already in
the user's session. Sets up new session variables. Returns boolean success
@@ -189,16 +246,17 @@ def switch_accounts(request, new_account):
if not accounts_dict or not new_account in accounts_dict.keys():
return False
try:
- account = Account.objects.get(id=accounts_dict[new_account]['account_id'])
+ account = Account.objects.get(id=accounts_dict[new_account]["account_id"])
if account.username != new_account:
return False
except Account.DoesNotExist:
return False
- request.session['active_user'] = accounts_dict[new_account]['user']
- request.session['active_username'] = account.username
- request.session['active_instance'] = account.client.api_base_id
+ request.session["active_user"] = accounts_dict[new_account]["user"]
+ request.session["active_username"] = account.username
+ request.session["active_instance"] = account.client.api_base_id
return True
+
def forget_account(request, account_name):
"""Forget that you were logged into an account. If it's the last one, log out
entirely. Sets up session variables. Returns a redirect to the correct
@@ -227,24 +285,33 @@ def forget_account(request, account_name):
### View functions
###
+
def notes_count(request):
account, mastodon = get_usercontext(request)
count = _notes_count(account, mastodon)
- return render(request, 'intercooler/notes.html',
- {'notifications': count,
- 'preferences': account.preferences })
+ return render(
+ request,
+ "intercooler/notes.html",
+ {"notifications": count, "preferences": account.preferences},
+ )
+
@br_login_required
def home(request, next=None, prev=None):
- return timeline(request, 'home', 'Home', max_id=next, min_id=prev, filter_context='home')
+ return timeline(
+ request, "home", "Home", max_id=next, min_id=prev, filter_context="home"
+ )
+
@br_login_required
-def local(request, next=None, prev=None, filter_context='public'):
- return timeline(request, 'local', 'Local', max_id=next, min_id=prev)
+def local(request, next=None, prev=None, filter_context="public"):
+ return timeline(request, "local", "Local", max_id=next, min_id=prev)
+
@br_login_required
-def fed(request, next=None, prev=None, filter_context='public'):
- return timeline(request, 'public', 'Federated', max_id=next, min_id=prev)
+def fed(request, next=None, prev=None, filter_context="public"):
+ return timeline(request, "public", "Federated", max_id=next, min_id=prev)
+
@br_login_required
def tag(request, tag):
@@ -254,11 +321,18 @@ def tag(request, tag):
return redirect(login)
data = mastodon.timeline_hashtag(tag)
notifications = _notes_count(account, mastodon)
- return render(request, 'main/timeline.html',
- {'toots': data, 'timeline_name': '#'+tag,
- 'own_acct': request.session['active_user'],
- 'notifications': notifications,
- 'preferences': account.preferences})
+ return render(
+ request,
+ "main/timeline.html",
+ {
+ "toots": data,
+ "timeline_name": "#" + tag,
+ "own_acct": request.session["active_user"],
+ "notifications": notifications,
+ "preferences": account.preferences,
+ },
+ )
+
@never_cache
def login(request):
@@ -268,92 +342,108 @@ def login(request):
# oauth_after_login view saves credential in session, then redirects to home.
if request.method == "GET":
form = OAuthLoginForm()
- return render(request, 'setup/login-oauth.html', {'form': form})
+ return render(request, "setup/login-oauth.html", {"form": form})
elif request.method == "POST":
form = OAuthLoginForm(request.POST)
- redirect_uris = request.build_absolute_uri(reverse('oauth_callback'))
+ redirect_uris = request.build_absolute_uri(reverse("oauth_callback"))
if form.is_valid():
- api_base_url = form.cleaned_data['instance']
+ api_base_url = form.cleaned_data["instance"]
tmp_base = parse.urlparse(api_base_url.lower())
- if tmp_base.netloc == '':
- api_base_url = parse.urlunparse(('https', tmp_base.path,
- '','','',''))
- request.session['active_instance_hostname'] = tmp_base.path
+ if tmp_base.netloc == "":
+ api_base_url = parse.urlunparse(
+ ("https", tmp_base.path, "", "", "", "")
+ )
+ request.session["active_instance_hostname"] = tmp_base.path
else:
api_base_url = api_base_url.lower()
- request.session['active_instance_hostname'] = tmp_base.netloc
+ request.session["active_instance_hostname"] = tmp_base.netloc
- request.session['active_instance'] = api_base_url
+ request.session["active_instance"] = api_base_url
try:
client = Client.objects.get(api_base_id=api_base_url)
except (Client.DoesNotExist, Client.MultipleObjectsReturned):
- (client_id, client_secret) = Mastodon.create_app('brutaldon',
- api_base_url=api_base_url,
- redirect_uris=redirect_uris,
- scopes=['read', 'write', 'follow'])
+ (client_id, client_secret) = Mastodon.create_app(
+ "brutaldon",
+ api_base_url=api_base_url,
+ redirect_uris=redirect_uris,
+ scopes=["read", "write", "follow"],
+ )
client = Client(
- api_base_id = api_base_url,
+ api_base_id=api_base_url,
client_id=client_id,
- client_secret = client_secret)
+ client_secret=client_secret,
+ )
client.save()
- request.session['active_client_id'] = client.client_id
- request.session['active_client_secret'] = client.client_secret
+ request.session["active_client_id"] = client.client_id
+ request.session["active_client_secret"] = client.client_secret
mastodon = Mastodon(
- client_id = client.client_id,
- client_secret = client.client_secret,
- api_base_url = api_base_url)
+ client_id=client.client_id,
+ client_secret=client.client_secret,
+ api_base_url=api_base_url,
+ )
client.version = mastodon.instance().get("version")
client.save()
- return redirect(mastodon.auth_request_url(redirect_uris=redirect_uris,
- scopes=['read', 'write', 'follow']))
+ return redirect(
+ mastodon.auth_request_url(
+ redirect_uris=redirect_uris, scopes=["read", "write", "follow"]
+ )
+ )
else:
- return render(request, 'setup/login.html', {'form': form})
+ return render(request, "setup/login.html", {"form": form})
else:
return redirect(login)
+
@never_cache
def oauth_callback(request):
- code = request.GET.get('code', '')
- mastodon = Mastodon(client_id=request.session['active_client_id'],
- client_secret=request.session['active_client_secret'],
- api_base_url=request.session['active_instance'])
- redirect_uri = request.build_absolute_uri(reverse('oauth_callback'))
- access_token = mastodon.log_in(code=code,
- redirect_uri=redirect_uri,
- scopes=['read', 'write', 'follow'])
- request.session['access_token'] = access_token
+ code = request.GET.get("code", "")
+ mastodon = Mastodon(
+ client_id=request.session["active_client_id"],
+ client_secret=request.session["active_client_secret"],
+ api_base_url=request.session["active_instance"],
+ )
+ redirect_uri = request.build_absolute_uri(reverse("oauth_callback"))
+ access_token = mastodon.log_in(
+ code=code, redirect_uri=redirect_uri, scopes=["read", "write", "follow"]
+ )
+ request.session["access_token"] = access_token
user = mastodon.account_verify_credentials()
try:
- account = Account.objects.get(username=user.username + '@' +
- request.session['active_instance_hostname'])
+ account = Account.objects.get(
+ username=user.username + "@" + request.session["active_instance_hostname"]
+ )
account.access_token = access_token
if not account.preferences:
- preferences = Preference(theme = Theme.objects.get(id=1))
+ preferences = Preference(theme=Theme.objects.get(id=1))
preferences.save()
account.preferences = preferences
else:
- request.session['timezone'] = account.preferences.timezone
+ request.session["timezone"] = account.preferences.timezone
account.save()
except (Account.DoesNotExist, Account.MultipleObjectsReturned):
- preferences = Preference(theme = Theme.objects.get(id=1))
+ preferences = Preference(theme=Theme.objects.get(id=1))
preferences.save()
- account = Account(username=user.username + '@' + request.session['active_instance_hostname'],
- access_token = access_token,
- client = Client.objects.get(api_base_id=request.session['active_instance']),
- preferences = preferences)
+ account = Account(
+ username=user.username + "@" + request.session["active_instance_hostname"],
+ access_token=access_token,
+ client=Client.objects.get(api_base_id=request.session["active_instance"]),
+ preferences=preferences,
+ )
account.save()
- request.session['active_user'] = user
- request.session['active_username'] = user.username + '@' + request.session['active_instance_hostname']
+ request.session["active_user"] = user
+ request.session["active_username"] = (
+ user.username + "@" + request.session["active_instance_hostname"]
+ )
- accounts_dict = request.session.get('accounts_dict')
+ accounts_dict = request.session.get("accounts_dict")
if not accounts_dict:
accounts_dict = {}
- accounts_dict[account.username] = { 'account_id': account.id, 'user': user }
- request.session['accounts_dict'] = accounts_dict
+ accounts_dict[account.username] = {"account_id": account.id, "user": user}
+ request.session["accounts_dict"] = accounts_dict
return redirect(home)
@@ -362,90 +452,104 @@ def oauth_callback(request):
def old_login(request):
if request.method == "GET":
form = LoginForm()
- return render(request, 'setup/login.html', {'form': form})
+ return render(request, "setup/login.html", {"form": form})
elif request.method == "POST":
form = LoginForm(request.POST)
if form.is_valid():
- api_base_url = form.cleaned_data['instance']
+ api_base_url = form.cleaned_data["instance"]
tmp_base = parse.urlparse(api_base_url.lower())
- if tmp_base.netloc == '':
- api_base_url = parse.urlunparse(('https', tmp_base.path,
- '','','',''))
- request.session['active_instance_hostname'] = tmp_base.path
+ if tmp_base.netloc == "":
+ api_base_url = parse.urlunparse(
+ ("https", tmp_base.path, "", "", "", "")
+ )
+ request.session["active_instance_hostname"] = tmp_base.path
else:
api_base_url = api_base_url.lower()
- request.session['active_instance_hostname'] = tmp_base.netloc
+ request.session["active_instance_hostname"] = tmp_base.netloc
- request.session['active_instance'] = api_base_url
- email = form.cleaned_data['email']
- password = form.cleaned_data['password']
+ request.session["active_instance"] = api_base_url
+ email = form.cleaned_data["email"]
+ password = form.cleaned_data["password"]
try:
client = Client.objects.get(api_base_id=api_base_url)
except (Client.DoesNotExist, Client.MultipleObjectsReturned):
- (client_id, client_secret) = Mastodon.create_app('brutaldon',
- api_base_url=api_base_url,
- scopes=['read', 'write', 'follow'])
+ (client_id, client_secret) = Mastodon.create_app(
+ "brutaldon",
+ api_base_url=api_base_url,
+ scopes=["read", "write", "follow"],
+ )
client = Client(
- api_base_id = api_base_url,
+ api_base_id=api_base_url,
client_id=client_id,
- client_secret = client_secret)
+ client_secret=client_secret,
+ )
client.save()
mastodon = Mastodon(
- client_id = client.client_id,
- client_secret = client.client_secret,
- api_base_url = api_base_url)
+ client_id=client.client_id,
+ client_secret=client.client_secret,
+ api_base_url=api_base_url,
+ )
client.version = mastodon.instance().get("version")
client.save()
try:
account = Account.objects.get(email=email, client_id=client.id)
except (Account.DoesNotExist, Account.MultipleObjectsReturned):
- preferences = Preference(theme = Theme.objects.get(id=1))
+ preferences = Preference(theme=Theme.objects.get(id=1))
preferences.save()
account = Account(
- email = email,
- access_token = "",
- client = client,
- preferences = preferences)
+ email=email, access_token="", client=client, preferences=preferences
+ )
try:
- access_token = mastodon.log_in(email,
- password,
- scopes=['read', 'write', 'follow'])
+ access_token = mastodon.log_in(
+ email, password, scopes=["read", "write", "follow"]
+ )
account.access_token = access_token
user = mastodon.account_verify_credentials()
- request.session['active_user'] = user
- request.session['active_username'] = user.username + '@' + request.session['active_instance_hostname']
- account.username = request.session['active_username']
- request.session['timezone'] = account.preferences.timezone;
+ request.session["active_user"] = user
+ request.session["active_username"] = (
+ user.username + "@" + request.session["active_instance_hostname"]
+ )
+ account.username = request.session["active_username"]
+ request.session["timezone"] = account.preferences.timezone
- accounts_dict = request.session.get('accounts_dict')
+ accounts_dict = request.session.get("accounts_dict")
if not accounts_dict:
accounts_dict = {}
- accounts_dict[account.username] = { 'account_id': account.id, 'user': user }
- request.session['accounts_dict'] = accounts_dict
+ accounts_dict[account.username] = {
+ "account_id": account.id,
+ "user": user,
+ }
+ request.session["accounts_dict"] = accounts_dict
account.save()
return redirect(home)
except IntegrityError:
account = Account.objects.get(username=account.username)
- accounts_dict[account.username] = { 'account_id': account.id, 'user': user }
- request.session['accounts_dict'] = accounts_dict
+ accounts_dict[account.username] = {
+ "account_id": account.id,
+ "user": user,
+ }
+ request.session["accounts_dict"] = accounts_dict
return redirect(home)
except Exception as ex:
- form.add_error('', ex)
- return render(request, 'setup/login.html', {'form': form})
+ form.add_error("", ex)
+ return render(request, "setup/login.html", {"form": form})
else:
- return render(request, 'setup/login.html', {'form': form})
+ return render(request, "setup/login.html", {"form": form})
+
@never_cache
def logout(request):
request.session.flush()
return redirect(about)
+
def error(request):
- return render(request, 'error.html', { 'error': _("Not logged in yet.")})
+ return render(request, "error.html", {"error": _("Not logged in yet.")})
+
@br_login_required
def note(request, next=None, prev=None):
@@ -458,17 +562,19 @@ def note(request, next=None, prev=None):
account.save()
notes = mastodon.notifications(limit=40, max_id=next, min_id=prev)
- filters = get_filters(mastodon, context='notifications')
+ filters = get_filters(mastodon, context="notifications")
if account.preferences.filter_notifications:
- notes = [ note for note in notes if note.type == 'mention' or note.type == 'follow']
+ notes = [
+ note for note in notes if note.type == "mention" or note.type == "follow"
+ ]
# Apply filters
notes = [x for x in notes if not toot_matches_filters(x, filters)]
try:
prev = notes[0]._pagination_prev
- if len(mastodon.notifications(min_id=prev['min_id'])) == 0:
+ if len(mastodon.notifications(min_id=prev["min_id"])) == 0:
prev = None
except (IndexError, AttributeError, KeyError):
prev = None
@@ -476,12 +582,20 @@ def note(request, next=None, prev=None):
next = notes[-1]._pagination_next
except (IndexError, AttributeError, KeyError):
next = None
- return render(request, 'main/notifications.html',
- {'notes': notes,'timeline': 'Notifications',
- 'timeline_name': 'Notifications',
- 'own_acct': request.session['active_user'],
- 'preferences': account.preferences,
- 'prev': prev, 'next': next})
+ return render(
+ request,
+ "main/notifications.html",
+ {
+ "notes": notes,
+ "timeline": "Notifications",
+ "timeline_name": "Notifications",
+ "own_acct": request.session["active_user"],
+ "preferences": account.preferences,
+ "prev": prev,
+ "next": next,
+ },
+ )
+
@br_login_required
def thread(request, id):
@@ -492,20 +606,28 @@ def thread(request, id):
raise Http404(_("Thread not found; the message may have been deleted."))
toot = mastodon.status(id)
notifications = _notes_count(account, mastodon)
- filters = get_filters(mastodon, context='thread')
+ filters = get_filters(mastodon, context="thread")
# Apply filters
ancestors = [x for x in context.ancestors if not toot_matches_filters(x, filters)]
- descendants = [x for x in context.descendants if not toot_matches_filters(x, filters)]
+ descendants = [
+ x for x in context.descendants if not toot_matches_filters(x, filters)
+ ]
+ return render(
+ request,
+ "main/thread.html",
+ {
+ "context": context,
+ "toot": toot,
+ "ancestors": ancestors,
+ "descendants": descendants,
+ "own_acct": request.session["active_user"],
+ "notifications": notifications,
+ "preferences": account.preferences,
+ },
+ )
- return render(request, 'main/thread.html',
- {'context': context, 'toot': toot,
- 'ancestors': ancestors,
- 'descendants': descendants,
- 'own_acct': request.session['active_user'],
- 'notifications': notifications,
- 'preferences': account.preferences})
@br_login_required
def user(request, username, prev=None, next=None):
@@ -514,10 +636,17 @@ def user(request, username, prev=None, next=None):
except NotLoggedInException:
return redirect(about)
try:
- user_dict = [dict for dict in mastodon.account_search(username)
- if ((dict.acct == username) or
- (dict.acct == username.split('@')[0] and
- username.split('@')[1] == account.username.split('@')[1]))][0]
+ user_dict = [
+ dict
+ for dict in mastodon.account_search(username)
+ if (
+ (dict.acct == username)
+ or (
+ dict.acct == username.split("@")[0]
+ and username.split("@")[1] == account.username.split("@")[1]
+ )
+ )
+ ][0]
except (IndexError, AttributeError):
raise Http404(_("The user %s could not be found.") % username)
data = mastodon.account_statuses(user_dict.id, max_id=next, min_id=prev)
@@ -525,8 +654,7 @@ def user(request, username, prev=None, next=None):
notifications = _notes_count(account, mastodon)
try:
prev = data[0]._pagination_prev
- if len(mastodon.account_statuses(user_dict.id,
- min_id=prev['min_id'])) == 0:
+ if len(mastodon.account_statuses(user_dict.id, min_id=prev["min_id"])) == 0:
prev = None
except (IndexError, AttributeError, KeyError):
prev = None
@@ -534,14 +662,20 @@ def user(request, username, prev=None, next=None):
next = data[-1]._pagination_next
except (IndexError, AttributeError, KeyError):
next = None
- return render(request, 'main/user.html',
- {'toots': data,
- 'user': user_dict,
- 'relationship': relationship,
- 'own_acct': request.session['active_user'],
- 'preferences': account.preferences,
- 'notifications': notifications,
- 'prev': prev, 'next': next})
+ return render(
+ request,
+ "main/user.html",
+ {
+ "toots": data,
+ "user": user_dict,
+ "relationship": relationship,
+ "own_acct": request.session["active_user"],
+ "preferences": account.preferences,
+ "notifications": notifications,
+ "prev": prev,
+ "next": next,
+ },
+ )
@never_cache
@@ -554,180 +688,268 @@ def settings(request):
except NotLoggedInException:
return redirect(about)
- if request.method == 'POST':
+ if request.method == "POST":
form = PreferencesForm(request.POST)
if form.is_valid():
- account.preferences.theme = form.cleaned_data['theme']
- account.preferences.filter_replies = form.cleaned_data['filter_replies']
- account.preferences.filter_boosts = form.cleaned_data['filter_boosts']
- account.preferences.timezone = form.cleaned_data['timezone']
- account.preferences.no_javascript = form.cleaned_data['no_javascript']
- account.preferences.notifications = form.cleaned_data['notifications']
- account.preferences.click_to_load = form.cleaned_data['click_to_load']
- account.preferences.lightbox = form.cleaned_data['lightbox']
- account.preferences.filter_notifications = form.cleaned_data['filter_notifications']
- account.preferences.poll_frequency = form.cleaned_data['poll_frequency']
- request.session['timezone'] = account.preferences.timezone
+ account.preferences.theme = form.cleaned_data["theme"]
+ account.preferences.filter_replies = form.cleaned_data["filter_replies"]
+ account.preferences.filter_boosts = form.cleaned_data["filter_boosts"]
+ account.preferences.timezone = form.cleaned_data["timezone"]
+ account.preferences.no_javascript = form.cleaned_data["no_javascript"]
+ account.preferences.notifications = form.cleaned_data["notifications"]
+ account.preferences.click_to_load = form.cleaned_data["click_to_load"]
+ account.preferences.lightbox = form.cleaned_data["lightbox"]
+ account.preferences.filter_notifications = form.cleaned_data[
+ "filter_notifications"
+ ]
+ account.preferences.poll_frequency = form.cleaned_data["poll_frequency"]
+ request.session["timezone"] = account.preferences.timezone
account.preferences.save()
account.save()
# Update this here because it's a handy place to do it.
user_info = mastodon.account_verify_credentials()
- request.session['active_user'] = user_info
-
+ request.session["active_user"] = user_info
return redirect(home)
else:
- return render(request, 'setup/settings.html',
- {'form' : form, 'account': account})
+ return render(
+ request, "setup/settings.html", {"form": form, "account": account}
+ )
else:
- request.session['timezone'] = account.preferences.timezone
+ request.session["timezone"] = account.preferences.timezone
form = PreferencesForm(instance=account.preferences)
- return render(request, 'setup/settings.html',
- { 'form': form,
- 'account': account,
- 'preferences': account.preferences})
+ return render(
+ request,
+ "setup/settings.html",
+ {"form": form, "account": account, "preferences": account.preferences},
+ )
+
@never_cache
@br_login_required
def toot(request, mention=None):
account, mastodon = get_usercontext(request)
- if request.method == 'GET':
+ if request.method == "GET":
if mention:
- if not mention.startswith('@'):
- mention = '@'+mention
- form = PostForm(initial={'visibility': request.session['active_user'].source.privacy,
- 'status': mention + ' ' })
+ if not mention.startswith("@"):
+ mention = "@" + mention
+ form = PostForm(
+ initial={
+ "visibility": request.session["active_user"].source.privacy,
+ "status": mention + " ",
+ }
+ )
else:
- form = PostForm(initial={'visibility': request.session['active_user'].source.privacy})
- if request.GET.get('ic-request'):
- return render(request, 'intercooler/post.html',
- {'form': form,
- 'own_acct': request.session['active_user'],
- 'preferences': account.preferences})
+ form = PostForm(
+ initial={"visibility": request.session["active_user"].source.privacy}
+ )
+ if request.GET.get("ic-request"):
+ return render(
+ request,
+ "intercooler/post.html",
+ {
+ "form": form,
+ "own_acct": request.session["active_user"],
+ "preferences": account.preferences,
+ },
+ )
else:
- return render(request, 'main/post.html',
- {'form': form,
- 'own_acct': request.session['active_user'],
- 'preferences': account.preferences})
- elif request.method == 'POST':
+ return render(
+ request,
+ "main/post.html",
+ {
+ "form": form,
+ "own_acct": request.session["active_user"],
+ "preferences": account.preferences,
+ },
+ )
+ elif request.method == "POST":
form = PostForm(request.POST, request.FILES)
if form.is_valid():
# create media objects
media_objects = []
- for index in range(1,5):
- if 'media_file_'+str(index) in request.FILES:
+ for index in range(1, 5):
+ if "media_file_" + str(index) in request.FILES:
media_objects.append(
- mastodon.media_post(request.FILES['media_file_'+str(index)]
- .temporary_file_path(),
- description=request.POST.get('media_text_'
- +str(index),
- None)))
- if form.cleaned_data['visibility'] == '':
- form.cleaned_data['visibility'] = request.session['active_user'].source.privacy
+ mastodon.media_post(
+ request.FILES[
+ "media_file_" + str(index)
+ ].temporary_file_path(),
+ description=request.POST.get(
+ "media_text_" + str(index), None
+ ),
+ )
+ )
+ if form.cleaned_data["visibility"] == "":
+ form.cleaned_data["visibility"] = request.session[
+ "active_user"
+ ].source.privacy
try:
try:
- mastodon.status_post(status=form.cleaned_data['status'],
- visibility=form.cleaned_data['visibility'],
- spoiler_text=form.cleaned_data['spoiler_text'],
- media_ids=media_objects,
- content_type='text/markdown')
+ mastodon.status_post(
+ status=form.cleaned_data["status"],
+ visibility=form.cleaned_data["visibility"],
+ spoiler_text=form.cleaned_data["spoiler_text"],
+ media_ids=media_objects,
+ content_type="text/markdown",
+ )
except TypeError:
- mastodon.status_post(status=form.cleaned_data['status'],
- visibility=form.cleaned_data['visibility'],
- spoiler_text=form.cleaned_data['spoiler_text'],
- media_ids=media_objects)
+ mastodon.status_post(
+ status=form.cleaned_data["status"],
+ visibility=form.cleaned_data["visibility"],
+ spoiler_text=form.cleaned_data["spoiler_text"],
+ media_ids=media_objects,
+ )
except MastodonAPIError as error:
- form.add_error("", "%s (%s used)" % (error.args[-1],
- len(form.cleaned_data['status'])
- + len(form.cleaned_data['spoiler_text'])))
- return render(request, 'main/post.html',
- {'form': form,
- 'own_acct': request.session['active_user'],
- 'preferences': account.preferences})
+ form.add_error(
+ "",
+ "%s (%s used)"
+ % (
+ error.args[-1],
+ len(form.cleaned_data["status"])
+ + len(form.cleaned_data["spoiler_text"]),
+ ),
+ )
+ return render(
+ request,
+ "main/post.html",
+ {
+ "form": form,
+ "own_acct": request.session["active_user"],
+ "preferences": account.preferences,
+ },
+ )
return redirect(home)
else:
- return render(request, 'main/post.html',
- {'form': form,
- 'own_acct': request.session['active_user'],
- 'preferences': account.preferences})
+ return render(
+ request,
+ "main/post.html",
+ {
+ "form": form,
+ "own_acct": request.session["active_user"],
+ "preferences": account.preferences,
+ },
+ )
else:
return redirect(toot)
+
@br_login_required
def redraft(request, id):
- if request.method == 'GET':
+ if request.method == "GET":
account, mastodon = get_usercontext(request)
toot = mastodon.status(id)
- toot_content = get_text(toot.content) # convert to plain text
+ toot_content = get_text(toot.content) # convert to plain text
# fix up white space
- toot_content = re.sub("(^\n)|(\n$)", '',
- re.sub("\n\n", "\n", toot_content))
+ toot_content = re.sub("(^\n)|(\n$)", "", re.sub("\n\n", "\n", toot_content))
# Fix up references
for mention in toot.mentions:
- menchie_re = re.compile( r"\s?@" + mention.username + r"\s", re.I)
- toot_content = menchie_re.sub(" @" + mention.acct + " ",
- toot_content, count=1)
- form = PostForm({'status': toot_content.strip(),
- 'visibility': toot.visibility,
- 'spoiler_text': toot.spoiler_text,
- 'media_text_1': safe_get_attachment(toot, 0).description,
- 'media_text_2': safe_get_attachment(toot, 1).description,
- 'media_text_3': safe_get_attachment(toot, 2).description,
- 'media_text_4': safe_get_attachment(toot, 3).description,
- })
- return render(request, 'main/redraft.html',
- {'toot': toot, 'form': form, 'redraft':True,
- 'own_acct': request.session['active_user'],
- 'preferences': account.preferences})
- elif request.method == 'POST':
+ menchie_re = re.compile(r"\s?@" + mention.username + r"\s", re.I)
+ toot_content = menchie_re.sub(
+ " @" + mention.acct + " ", toot_content, count=1
+ )
+ form = PostForm(
+ {
+ "status": toot_content.strip(),
+ "visibility": toot.visibility,
+ "spoiler_text": toot.spoiler_text,
+ "media_text_1": safe_get_attachment(toot, 0).description,
+ "media_text_2": safe_get_attachment(toot, 1).description,
+ "media_text_3": safe_get_attachment(toot, 2).description,
+ "media_text_4": safe_get_attachment(toot, 3).description,
+ }
+ )
+ return render(
+ request,
+ "main/redraft.html",
+ {
+ "toot": toot,
+ "form": form,
+ "redraft": True,
+ "own_acct": request.session["active_user"],
+ "preferences": account.preferences,
+ },
+ )
+ elif request.method == "POST":
form = PostForm(request.POST, request.FILES)
account, mastodon = get_usercontext(request)
toot = mastodon.status(id)
if form.is_valid():
media_objects = []
- for index in range(1,5):
- if 'media_file_'+str(index) in request.FILES:
+ for index in range(1, 5):
+ if "media_file_" + str(index) in request.FILES:
media_objects.append(
- mastodon.media_post(request.FILES['media_file_'+str(index)]
- .temporary_file_path(),
- description=request.POST.get('media_text_'
- +str(index),
- None)))
- if form.cleaned_data['visibility'] == '':
- form.cleaned_data['visibility'] = request.session['active_user'].source.privacy
+ mastodon.media_post(
+ request.FILES[
+ "media_file_" + str(index)
+ ].temporary_file_path(),
+ description=request.POST.get(
+ "media_text_" + str(index), None
+ ),
+ )
+ )
+ if form.cleaned_data["visibility"] == "":
+ form.cleaned_data["visibility"] = request.session[
+ "active_user"
+ ].source.privacy
try:
try:
- mastodon.status_post(status=form.cleaned_data['status'],
- visibility=form.cleaned_data['visibility'],
- spoiler_text=form.cleaned_data['spoiler_text'],
- media_ids=media_objects,
- in_reply_to_id=toot.in_reply_to_id,
- content_type='text/markdown')
+ mastodon.status_post(
+ status=form.cleaned_data["status"],
+ visibility=form.cleaned_data["visibility"],
+ spoiler_text=form.cleaned_data["spoiler_text"],
+ media_ids=media_objects,
+ in_reply_to_id=toot.in_reply_to_id,
+ content_type="text/markdown",
+ )
except TypeError:
- mastodon.status_post(status=form.cleaned_data['status'],
- visibility=form.cleaned_data['visibility'],
- spoiler_text=form.cleaned_data['spoiler_text'],
- media_ids=media_objects,
- in_reply_to_id=toot.in_reply_to_id)
+ mastodon.status_post(
+ status=form.cleaned_data["status"],
+ visibility=form.cleaned_data["visibility"],
+ spoiler_text=form.cleaned_data["spoiler_text"],
+ media_ids=media_objects,
+ in_reply_to_id=toot.in_reply_to_id,
+ )
mastodon.status_delete(id)
except MastodonAPIError as error:
- form.add_error("", "%s (%s used)" % (error.args[-1],
- len(form.cleaned_data['status'])
- + len(form.cleaned_data['spoiler_text'])))
- return render(request, 'main/redraft.html',
- {'toot': toot, 'form': form, 'redraft': True,
- 'own_acct': request.session['active_user'],
- 'preferences': account.preferences})
+ form.add_error(
+ "",
+ "%s (%s used)"
+ % (
+ error.args[-1],
+ len(form.cleaned_data["status"])
+ + len(form.cleaned_data["spoiler_text"]),
+ ),
+ )
+ return render(
+ request,
+ "main/redraft.html",
+ {
+ "toot": toot,
+ "form": form,
+ "redraft": True,
+ "own_acct": request.session["active_user"],
+ "preferences": account.preferences,
+ },
+ )
return redirect(home)
else:
- return render(request, 'main/redraft.html',
- {'toot': toot, 'form': form, 'redraft': True,
- 'own_acct': request.session['active_user'],
- 'preferences': account.preferences})
+ return render(
+ request,
+ "main/redraft.html",
+ {
+ "toot": toot,
+ "form": form,
+ "redraft": True,
+ "own_acct": request.session["active_user"],
+ "preferences": account.preferences,
+ },
+ )
else:
return redirect(redraft, id)
+
def safe_get_attachment(toot, index):
"""Get an attachment from a toot, without crashing if it isn't there."""
try:
@@ -735,35 +957,50 @@ def safe_get_attachment(toot, index):
except IndexError:
adict = AttribAccessDict()
adict.id, adict.type, adict.description = "", "unknown", ""
- adict.url, adict.remote_url, adict.preview_url = '', '', ''
- adict.text_url = ''
+ adict.url, adict.remote_url, adict.preview_url = "", "", ""
+ adict.text_url = ""
return adict
@br_login_required
def reply(request, id):
- if request.method == 'GET':
+ if request.method == "GET":
account, mastodon = get_usercontext(request)
toot = mastodon.status(id)
context = mastodon.status_context(id)
notifications = _notes_count(account, mastodon)
- if toot.account.acct != request.session['active_user'].acct:
- initial_text = '@' + toot.account.acct + " "
+ if toot.account.acct != request.session["active_user"].acct:
+ initial_text = "@" + toot.account.acct + " "
else:
initial_text = ""
- for mention in [x for x in toot.mentions
- if x.acct != request.session['active_user'].acct and
- x.acct != toot.account.acct]:
- initial_text +=('@' + mention.acct + " ")
- form = PostForm(initial={'status': initial_text,
- 'visibility': toot.visibility,
- 'spoiler_text': toot.spoiler_text})
- return render(request, 'main/reply.html',
- {'context': context, 'toot': toot, 'form': form, 'reply':True,
- 'own_acct': request.session['active_user'],
- 'notifications': notifications,
- 'preferences': account.preferences})
- elif request.method == 'POST':
+ for mention in [
+ x
+ for x in toot.mentions
+ if x.acct != request.session["active_user"].acct
+ and x.acct != toot.account.acct
+ ]:
+ initial_text += "@" + mention.acct + " "
+ form = PostForm(
+ initial={
+ "status": initial_text,
+ "visibility": toot.visibility,
+ "spoiler_text": toot.spoiler_text,
+ }
+ )
+ return render(
+ request,
+ "main/reply.html",
+ {
+ "context": context,
+ "toot": toot,
+ "form": form,
+ "reply": True,
+ "own_acct": request.session["active_user"],
+ "notifications": notifications,
+ "preferences": account.preferences,
+ },
+ )
+ elif request.method == "POST":
form = PostForm(request.POST, request.FILES)
account, mastodon = get_usercontext(request)
toot = mastodon.status(id)
@@ -772,45 +1009,77 @@ def reply(request, id):
if form.is_valid():
# create media objects
media_objects = []
- for index in range(1,5):
- if 'media_file_'+str(index) in request.FILES:
+ for index in range(1, 5):
+ if "media_file_" + str(index) in request.FILES:
media_objects.append(
- mastodon.media_post(request.FILES['media_file_'+str(index)]
- .temporary_file_path(),
- description=request.POST.get('media_text_'
- +str(index),
- None)))
+ mastodon.media_post(
+ request.FILES[
+ "media_file_" + str(index)
+ ].temporary_file_path(),
+ description=request.POST.get(
+ "media_text_" + str(index), None
+ ),
+ )
+ )
try:
try:
- mastodon.status_post(status=form.cleaned_data['status'],
- visibility=form.cleaned_data['visibility'],
- spoiler_text=form.cleaned_data['spoiler_text'],
- media_ids=media_objects,
- in_reply_to_id=id,
- content_type="text/markdown")
+ mastodon.status_post(
+ status=form.cleaned_data["status"],
+ visibility=form.cleaned_data["visibility"],
+ spoiler_text=form.cleaned_data["spoiler_text"],
+ media_ids=media_objects,
+ in_reply_to_id=id,
+ content_type="text/markdown",
+ )
except TypeError:
- mastodon.status_post(status=form.cleaned_data['status'],
- visibility=form.cleaned_data['visibility'],
- spoiler_text=form.cleaned_data['spoiler_text'],
- media_ids=media_objects,
- in_reply_to_id=id)
+ mastodon.status_post(
+ status=form.cleaned_data["status"],
+ visibility=form.cleaned_data["visibility"],
+ spoiler_text=form.cleaned_data["spoiler_text"],
+ media_ids=media_objects,
+ in_reply_to_id=id,
+ )
except MastodonAPIError as error:
- form.add_error("", "%s (%s used)" % (error.args[-1],
- len(form.cleaned_data['status'])
- + len(form.cleaned_data['spoiler_text'])))
- return render(request, 'main/reply.html',
- {'context': context, 'toot': toot, 'form': form, 'reply': True,
- 'own_acct': request.session['active_user'],
- 'notifications': notifications,
- 'preferences': account.preferences})
- return HttpResponseRedirect(reverse('thread', args=[id]) + "#toot-"+str(id))
+ form.add_error(
+ "",
+ "%s (%s used)"
+ % (
+ error.args[-1],
+ len(form.cleaned_data["status"])
+ + len(form.cleaned_data["spoiler_text"]),
+ ),
+ )
+ return render(
+ request,
+ "main/reply.html",
+ {
+ "context": context,
+ "toot": toot,
+ "form": form,
+ "reply": True,
+ "own_acct": request.session["active_user"],
+ "notifications": notifications,
+ "preferences": account.preferences,
+ },
+ )
+ return HttpResponseRedirect(
+ reverse("thread", args=[id]) + "#toot-" + str(id)
+ )
else:
- return render(request, 'main/reply.html',
- {'context': context, 'toot': toot, 'form': form, 'reply': True,
- 'own_acct': request.session['active_user'],
- 'preferences': account.preferences})
+ return render(
+ request,
+ "main/reply.html",
+ {
+ "context": context,
+ "toot": toot,
+ "form": form,
+ "reply": True,
+ "own_acct": request.session["active_user"],
+ "preferences": account.preferences,
+ },
+ )
else:
- return HttpResponseRedirect(reverse('reply', args=[id]) + "#toot-"+str(id))
+ return HttpResponseRedirect(reverse("reply", args=[id]) + "#toot-" + str(id))
@never_cache
@@ -818,72 +1087,104 @@ def reply(request, id):
def fav(request, id):
account, mastodon = get_usercontext(request)
toot = mastodon.status(id)
- if request.method == 'POST':
- if not request.POST.get('cancel', None):
+ if request.method == "POST":
+ if not request.POST.get("cancel", None):
if toot.favourited:
mastodon.status_unfavourite(id)
else:
mastodon.status_favourite(id)
- if request.POST.get('ic-request'):
- toot['favourited'] = not toot['favourited']
- return render(request, 'intercooler/fav.html',
- {"toot": toot,
- 'own_acct': request.session['active_user'],
- "preferences": account.preferences})
+ if request.POST.get("ic-request"):
+ toot["favourited"] = not toot["favourited"]
+ return render(
+ request,
+ "intercooler/fav.html",
+ {
+ "toot": toot,
+ "own_acct": request.session["active_user"],
+ "preferences": account.preferences,
+ },
+ )
else:
- return HttpResponseRedirect(reverse('thread', args=[id]) + "#toot-"+str(id))
+ return HttpResponseRedirect(
+ reverse("thread", args=[id]) + "#toot-" + str(id)
+ )
else:
- return render(request, 'main/fav.html',
- {"toot": toot,
- 'own_acct': request.session['active_user'],
- "confirm_page": True,
- 'preferences': account.preferences})
+ return render(
+ request,
+ "main/fav.html",
+ {
+ "toot": toot,
+ "own_acct": request.session["active_user"],
+ "confirm_page": True,
+ "preferences": account.preferences,
+ },
+ )
+
@never_cache
@br_login_required
def boost(request, id):
account, mastodon = get_usercontext(request)
toot = mastodon.status(id)
- if request.method == 'POST':
- if not request.POST.get('cancel', None):
+ if request.method == "POST":
+ if not request.POST.get("cancel", None):
if toot.reblogged:
mastodon.status_unreblog(id)
else:
mastodon.status_reblog(id)
- if request.POST.get('ic-request'):
- toot['reblogged'] = not toot['reblogged']
- return render(request, 'intercooler/boost.html',
- {"toot": toot,
- 'own_acct': request.session['active_user'],
- "preferences": account.preferences})
+ if request.POST.get("ic-request"):
+ toot["reblogged"] = not toot["reblogged"]
+ return render(
+ request,
+ "intercooler/boost.html",
+ {
+ "toot": toot,
+ "own_acct": request.session["active_user"],
+ "preferences": account.preferences,
+ },
+ )
else:
- return HttpResponseRedirect(reverse('thread', args=[id]) + "#toot-"+str(id))
+ return HttpResponseRedirect(
+ reverse("thread", args=[id]) + "#toot-" + str(id)
+ )
else:
- return render(request, 'main/boost.html',
- {"toot": toot,
- 'own_acct': request.session['active_user'],
- 'confirm_page': True,
- "preferences": account.preferences})
+ return render(
+ request,
+ "main/boost.html",
+ {
+ "toot": toot,
+ "own_acct": request.session["active_user"],
+ "confirm_page": True,
+ "preferences": account.preferences,
+ },
+ )
+
@never_cache
@br_login_required
def delete(request, id):
account, mastodon = get_usercontext(request)
toot = mastodon.status(id)
- if request.method == 'POST' or request.method == 'DELETE':
- if toot.account.acct != request.session['active_user'].acct:
- return redirect('home')
- if not request.POST.get('cancel', None):
+ if request.method == "POST" or request.method == "DELETE":
+ if toot.account.acct != request.session["active_user"].acct:
+ return redirect("home")
+ if not request.POST.get("cancel", None):
mastodon.status_delete(id)
- if request.POST.get('ic-request'):
+ if request.POST.get("ic-request"):
return HttpResponse("")
return redirect(home)
else:
- return render(request, 'main/delete.html',
- {"toot": toot,
- 'own_acct': request.session['active_user'],
- 'confirm_page': True,
- "preferences": account.preferences})
+ return render(
+ request,
+ "main/delete.html",
+ {
+ "toot": toot,
+ "own_acct": request.session["active_user"],
+ "confirm_page": True,
+ "preferences": account.preferences,
+ },
+ )
+
@never_cache
@br_login_required
@@ -894,27 +1195,42 @@ def follow(request, id):
relationship = mastodon.account_relationships(user_dict.id)[0]
except (IndexError, AttributeError, KeyError):
raise Http404("The user could not be found.")
- if request.method == 'POST':
- if not request.POST.get('cancel', None):
+ if request.method == "POST":
+ if not request.POST.get("cancel", None):
if relationship.requested or relationship.following:
mastodon.account_unfollow(id)
else:
mastodon.account_follow(id)
- if request.POST.get('ic-request'):
- sleep(1) # This is annoying, but the next call will return Requested instead of Following in some cases
+ if request.POST.get("ic-request"):
+ sleep(
+ 1
+ ) # This is annoying, but the next call will return Requested instead of Following in some cases
relationship = mastodon.account_relationships(user_dict.id)[0]
- return render(request, 'intercooler/follow.html',
- {"user": user_dict, "relationship": relationship,
- 'own_acct': request.session['active_user'],
- 'preferences': account.preferences})
+ return render(
+ request,
+ "intercooler/follow.html",
+ {
+ "user": user_dict,
+ "relationship": relationship,
+ "own_acct": request.session["active_user"],
+ "preferences": account.preferences,
+ },
+ )
else:
return redirect(user, user_dict.acct)
else:
- return render(request, 'main/follow.html',
- {"user": user_dict, "relationship": relationship,
- "confirm_page": True,
- 'own_acct': request.session['active_user'],
- 'preferences': account.preferences})
+ return render(
+ request,
+ "main/follow.html",
+ {
+ "user": user_dict,
+ "relationship": relationship,
+ "confirm_page": True,
+ "own_acct": request.session["active_user"],
+ "preferences": account.preferences,
+ },
+ )
+
@never_cache
@br_login_required
@@ -925,26 +1241,34 @@ def block(request, id):
relationship = mastodon.account_relationships(user_dict.id)[0]
except (IndexError, AttributeError, KeyError):
raise Http404("The user could not be found.")
- if request.method == 'POST':
- if not request.POST.get('cancel', None):
+ if request.method == "POST":
+ if not request.POST.get("cancel", None):
if relationship.blocking:
mastodon.account_unblock(id)
else:
mastodon.account_block(id)
- if request.POST.get('ic-request'):
- relationship['blocking'] = not relationship['blocking']
- return render(request, 'intercooler/block.html',
- {"user": user_dict,
- "relationship": relationship,
- })
+ if request.POST.get("ic-request"):
+ relationship["blocking"] = not relationship["blocking"]
+ return render(
+ request,
+ "intercooler/block.html",
+ {"user": user_dict, "relationship": relationship},
+ )
else:
return redirect(user, user_dict.acct)
else:
- return render(request, 'main/block.html',
- {"user": user_dict, "relationship": relationship,
- "confirm_page": True,
- 'own_acct': request.session['active_user'],
- 'preferences': account.preferences})
+ return render(
+ request,
+ "main/block.html",
+ {
+ "user": user_dict,
+ "relationship": relationship,
+ "confirm_page": True,
+ "own_acct": request.session["active_user"],
+ "preferences": account.preferences,
+ },
+ )
+
@never_cache
@br_login_required
@@ -955,60 +1279,83 @@ def mute(request, id):
relationship = mastodon.account_relationships(user_dict.id)[0]
except (IndexError, AttributeError, KeyError):
raise Http404("The user could not be found.")
- if request.method == 'POST':
- if not request.POST.get('cancel', None):
+ if request.method == "POST":
+ if not request.POST.get("cancel", None):
if relationship.muting:
mastodon.account_unmute(id)
else:
mastodon.account_mute(id)
- if request.POST.get('ic-request'):
- relationship['muting'] = not relationship['muting']
- return render(request, 'intercooler/mute.html',
- {"user": user_dict,
- "relationship": relationship,
- })
+ if request.POST.get("ic-request"):
+ relationship["muting"] = not relationship["muting"]
+ return render(
+ request,
+ "intercooler/mute.html",
+ {"user": user_dict, "relationship": relationship},
+ )
else:
return redirect(user, user_dict.acct)
else:
- return render(request, 'main/mute.html',
- {"user": user_dict, "relationship": relationship,
- "confirm_page": True,
- 'own_acct': request.session['active_user'],
- 'preferences': account.preferences})
+ return render(
+ request,
+ "main/mute.html",
+ {
+ "user": user_dict,
+ "relationship": relationship,
+ "confirm_page": True,
+ "own_acct": request.session["active_user"],
+ "preferences": account.preferences,
+ },
+ )
+
@br_login_required
def search(request):
account, mastodon = get_usercontext(request)
- if request.GET.get('ic-request'):
- return render(request, 'intercooler/search.html',
- {"preferences": account.preferences,
- 'own_acct': request.session['active_user'],
- })
+ if request.GET.get("ic-request"):
+ return render(
+ request,
+ "intercooler/search.html",
+ {
+ "preferences": account.preferences,
+ "own_acct": request.session["active_user"],
+ },
+ )
else:
- return render(request, 'main/search.html',
- {"preferences": account.preferences,
- 'own_acct': request.session['active_user'],
- })
+ return render(
+ request,
+ "main/search.html",
+ {
+ "preferences": account.preferences,
+ "own_acct": request.session["active_user"],
+ },
+ )
+
@br_login_required
-@cache_page(60*5)
+@cache_page(60 * 5)
def search_results(request):
- if request.method == 'GET':
- query = request.GET.get('q', '')
- elif request.method == 'POST':
- query = request.POST.get('q', '')
+ if request.method == "GET":
+ query = request.GET.get("q", "")
+ elif request.method == "POST":
+ query = request.POST.get("q", "")
else:
- query = ''
+ query = ""
account, mastodon = get_usercontext(request)
results = mastodon.search(query)
notifications = _notes_count(account, mastodon)
- return render(request, 'main/search_results.html',
- {"results": results,
- 'own_acct': request.session['active_user'],
- 'notifications': notifications,
- "preferences": account.preferences})
+ return render(
+ request,
+ "main/search_results.html",
+ {
+ "results": results,
+ "own_acct": request.session["active_user"],
+ "notifications": notifications,
+ "preferences": account.preferences,
+ },
+ )
-@cache_page(60*30)
+
+@cache_page(60 * 30)
def about(request):
version = django_settings.BRUTALDON_VERSION
account, mastodon = get_usercontext(request)
@@ -1016,21 +1363,33 @@ def about(request):
preferences = account.preferences
else:
preferences = None
- return render(request, 'about.html',
- {"preferences": preferences,
- "version": version,
- 'own_acct': request.session.get('active_user', None),
- })
-@cache_page(60*30)
+ return render(
+ request,
+ "about.html",
+ {
+ "preferences": preferences,
+ "version": version,
+ "own_acct": request.session.get("active_user", None),
+ },
+ )
+
+
+@cache_page(60 * 30)
def privacy(request):
account, mastodon = get_usercontext(request)
if account:
preferences = account.preferences
else:
preferences = None
- return render(request, 'privacy.html',
- {"preferences": preferences,
- 'own_acct' : request.session.get('active_user', None)})
+ return render(
+ request,
+ "privacy.html",
+ {
+ "preferences": preferences,
+ "own_acct": request.session.get("active_user", None),
+ },
+ )
+
@cache_page(60 * 30)
@br_login_required
@@ -1038,74 +1397,92 @@ def emoji_reference(request):
account, mastodon = get_usercontext(request)
emojos = mastodon.custom_emojis()
notifications = _notes_count(account, mastodon)
- return render(request, 'main/emoji.html',
- {"preferences": account.preferences,
- "emojos": sorted(emojos, key=lambda x: x['shortcode']),
- "notifications": notifications,
- 'own_acct' : request.session['active_user']})
+ return render(
+ request,
+ "main/emoji.html",
+ {
+ "preferences": account.preferences,
+ "emojos": sorted(emojos, key=lambda x: x["shortcode"]),
+ "notifications": notifications,
+ "own_acct": request.session["active_user"],
+ },
+ )
@br_login_required
def list_filters(request):
account, mastodon = get_usercontext(request)
filters = mastodon.filters()
- return render(request, 'filters/list.html',
- {'account': account,
- 'preferences': account.preferences,
- 'filters': filters })
+ return render(
+ request,
+ "filters/list.html",
+ {"account": account, "preferences": account.preferences, "filters": filters},
+ )
+
@br_login_required
def create_filter(request):
account, mastodon = get_usercontext(request)
- if request.method == 'POST':
+ if request.method == "POST":
form = FilterForm(request.POST)
if form.is_valid():
contexts = []
- if form.cleaned_data['context_home']:
- contexts.append('home')
- if form.cleaned_data['context_public']:
- contexts.append('public')
- if form.cleaned_data['context_notes']:
- contexts.append('notifications')
- if form.cleaned_data['context_thread']:
- contexts.append('thread')
- expires = form.cleaned_data['expires_in']
+ if form.cleaned_data["context_home"]:
+ contexts.append("home")
+ if form.cleaned_data["context_public"]:
+ contexts.append("public")
+ if form.cleaned_data["context_notes"]:
+ contexts.append("notifications")
+ if form.cleaned_data["context_thread"]:
+ contexts.append("thread")
+ expires = form.cleaned_data["expires_in"]
if expires == "":
expires = None
- mastodon.filter_create(form.cleaned_data['phrase'],
- contexts,
- whole_word=form.cleaned_data['whole_word'],
- expires_in=expires)
+ mastodon.filter_create(
+ form.cleaned_data["phrase"],
+ contexts,
+ whole_word=form.cleaned_data["whole_word"],
+ expires_in=expires,
+ )
return redirect(list_filters)
else:
- return render(request, 'filters/create.html',
- { 'form': form,
- 'account': account,
- 'preferences': account.preferences})
+ return render(
+ request,
+ "filters/create.html",
+ {"form": form, "account": account, "preferences": account.preferences},
+ )
else:
form = FilterForm()
- return render(request, 'filters/create.html',
- { 'form': form,
- 'account': account,
- 'preferences': account.preferences})
+ return render(
+ request,
+ "filters/create.html",
+ {"form": form, "account": account, "preferences": account.preferences},
+ )
+
@br_login_required
def delete_filter(request, id):
account, mastodon = get_usercontext(request)
filter = mastodon.filter(id)
- if request.method == 'POST' or request.method == 'DELETE':
- if not request.POST.get('cancel', None):
+ if request.method == "POST" or request.method == "DELETE":
+ if not request.POST.get("cancel", None):
mastodon.filter_delete(filter.id)
if request.POST.get("ic-request"):
return HttpResponse("")
return redirect(list_filters)
else:
- return render(request, "filters/delete.html",
- {"filter": filter,
- "own_acct": request.session["active_user"],
- "confirm_page": True,
- "preferences": account.preferences})
+ return render(
+ request,
+ "filters/delete.html",
+ {
+ "filter": filter,
+ "own_acct": request.session["active_user"],
+ "confirm_page": True,
+ "preferences": account.preferences,
+ },
+ )
+
@br_login_required
def edit_filter(request, id):
@@ -1113,54 +1490,73 @@ def edit_filter(request, id):
filter = mastodon.filter(id)
contexts = []
- if request.method == 'POST':
+ if request.method == "POST":
form = FilterForm(request.POST)
if form.is_valid():
- if form.cleaned_data['context_home']:
- contexts.append('home')
- if form.cleaned_data['context_public']:
- contexts.append('public')
- if form.cleaned_data['context_notes']:
- contexts.append('notifications')
- if form.cleaned_data['context_thread']:
- contexts.append('thread')
- expires = form.cleaned_data['expires_in']
+ if form.cleaned_data["context_home"]:
+ contexts.append("home")
+ if form.cleaned_data["context_public"]:
+ contexts.append("public")
+ if form.cleaned_data["context_notes"]:
+ contexts.append("notifications")
+ if form.cleaned_data["context_thread"]:
+ contexts.append("thread")
+ expires = form.cleaned_data["expires_in"]
if expires == "":
expires = None
- mastodon.filter_update(id, form.cleaned_data['phrase'],
- contexts,
- whole_word=form.cleaned_data['whole_word'],
- expires_in=expires)
+ mastodon.filter_update(
+ id,
+ form.cleaned_data["phrase"],
+ contexts,
+ whole_word=form.cleaned_data["whole_word"],
+ expires_in=expires,
+ )
return redirect(list_filters)
else:
- return render(request, 'filters/edit.html',
- { 'form': form,
- 'account': account,
- 'filter': filter,
- 'preferences': account.preferences})
+ return render(
+ request,
+ "filters/edit.html",
+ {
+ "form": form,
+ "account": account,
+ "filter": filter,
+ "preferences": account.preferences,
+ },
+ )
else:
contexts = []
- form = FilterForm({'phrase': filter.phrase,
- 'context_home': "home" in filter.context,
- 'context_public': "public" in filter.context,
- 'context_notes': "notifications" in filter.context,
- 'context_thread': "thread" in filter.context,
- 'whole_word': filter.whole_word})
- return render(request, 'filters/edit.html',
- { 'form': form,
- 'account': account,
- 'filter': filter,
- 'preferences': account.preferences})
+ form = FilterForm(
+ {
+ "phrase": filter.phrase,
+ "context_home": "home" in filter.context,
+ "context_public": "public" in filter.context,
+ "context_notes": "notifications" in filter.context,
+ "context_thread": "thread" in filter.context,
+ "whole_word": filter.whole_word,
+ }
+ )
+ return render(
+ request,
+ "filters/edit.html",
+ {
+ "form": form,
+ "account": account,
+ "filter": filter,
+ "preferences": account.preferences,
+ },
+ )
+
@br_login_required
def follow_requests(request, id=None):
account, mastodon = get_usercontext(request)
- if request.method == 'GET':
+ if request.method == "GET":
reqs = mastodon.follow_requests()
- return render(request, 'requests/list.html',
- {'account': account,
- 'preferences': account.preferences,
- 'requests': reqs})
+ return render(
+ request,
+ "requests/list.html",
+ {"account": account, "preferences": account.preferences, "requests": reqs},
+ )
elif id is None:
return redirect(follow_requests)
else:
@@ -1170,30 +1566,41 @@ def follow_requests(request, id=None):
mastodon.follow_request_reject(id)
return redirect(follow_requests)
+
@br_login_required
def accounts(request, id=None):
active_account, mastodon = get_usercontext(request)
- if request.method == 'GET':
- accounts = [x for x in request.session.get('accounts_dict').values()]
- return render(request, 'accounts/list.html',
- {'active_account': active_account,
- "own_acct": request.session["active_user"],
- 'accounts': accounts,
- 'preferences': active_account.preferences})
- if request.method == 'POST':
- if request.POST.get('activate'):
+ if request.method == "GET":
+ accounts = [x for x in request.session.get("accounts_dict").values()]
+ return render(
+ request,
+ "accounts/list.html",
+ {
+ "active_account": active_account,
+ "own_acct": request.session["active_user"],
+ "accounts": accounts,
+ "preferences": active_account.preferences,
+ },
+ )
+ if request.method == "POST":
+ if request.POST.get("activate"):
to_account = Account.objects.get(id=id).username
if switch_accounts(request, to_account):
return redirect(home)
else:
return redirect("accounts")
- elif request.POST.get('forget'):
+ elif request.POST.get("forget"):
account = Account.objects.get(id=id).username
return forget_account(request, account)
else:
- accounts = [x for x in request.session.get('accounts_dict').values()]
- return render(request, 'accounts/list.html',
- {'active_account': active_account,
- "own_acct": request.session["active_user"],
- 'accounts': accounts,
- 'preferences': active_account.preferences})
+ accounts = [x for x in request.session.get("accounts_dict").values()]
+ return render(
+ request,
+ "accounts/list.html",
+ {
+ "active_account": active_account,
+ "own_acct": request.session["active_user"],
+ "accounts": accounts,
+ "preferences": active_account.preferences,
+ },
+ )