mirror of
https://github.com/zulip/zulip.git
synced 2025-11-03 21:43:21 +00:00
926 lines
35 KiB
Python
926 lines
35 KiB
Python
# Generated by Django 1.11.2 on 2017-06-22 10:22
|
|
import bitfield.models
|
|
import django.contrib.auth.models
|
|
import django.core.validators
|
|
import django.db.models.deletion
|
|
import django.utils.timezone
|
|
from django.conf import settings
|
|
from django.db import migrations, models
|
|
from django.db.backends.postgresql.schema import DatabaseSchemaEditor
|
|
from django.db.migrations.state import StateApps
|
|
|
|
from zerver.models import generate_email_token_for_stream
|
|
|
|
|
|
def migrate_existing_attachment_data(apps: StateApps, schema_editor: DatabaseSchemaEditor) -> None:
|
|
Attachment = apps.get_model('zerver', 'Attachment')
|
|
Recipient = apps.get_model('zerver', 'Recipient')
|
|
Stream = apps.get_model('zerver', 'Stream')
|
|
|
|
attachments = Attachment.objects.all()
|
|
for entry in attachments:
|
|
owner = entry.owner
|
|
entry.realm = owner.realm
|
|
for message in entry.messages.all():
|
|
if owner == message.sender:
|
|
if message.recipient.type == Recipient.STREAM:
|
|
stream = Stream.objects.get(id=message.recipient.type_id)
|
|
is_realm_public = (
|
|
not stream.realm.is_zephyr_mirror_realm and not stream.invite_only
|
|
)
|
|
entry.is_realm_public = entry.is_realm_public or is_realm_public
|
|
|
|
entry.save()
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
|
|
initial = True
|
|
|
|
dependencies = [
|
|
('auth', '0001_initial'),
|
|
]
|
|
|
|
if settings.POSTGRESQL_MISSING_DICTIONARIES:
|
|
fts_sql = """
|
|
CREATE TEXT SEARCH CONFIGURATION zulip.english_us_search (COPY=pg_catalog.english);
|
|
"""
|
|
else:
|
|
fts_sql = """
|
|
CREATE TEXT SEARCH DICTIONARY english_us_hunspell
|
|
(template = ispell, DictFile = en_us, AffFile = en_us, StopWords = zulip_english);
|
|
CREATE TEXT SEARCH CONFIGURATION zulip.english_us_search (COPY=pg_catalog.english);
|
|
ALTER TEXT SEARCH CONFIGURATION zulip.english_us_search
|
|
ALTER MAPPING FOR asciiword, asciihword, hword_asciipart, word, hword, hword_part
|
|
WITH english_us_hunspell, english_stem;
|
|
"""
|
|
|
|
fts_sql += """
|
|
|
|
CREATE FUNCTION escape_html(text) RETURNS text IMMUTABLE LANGUAGE 'sql' AS $$
|
|
SELECT replace(replace(replace(replace(replace($1, '&', '&'), '<', '<'),
|
|
'>', '>'), '"', '"'), '''', ''');
|
|
$$ ;
|
|
|
|
ALTER TABLE zerver_message ADD COLUMN search_tsvector tsvector;
|
|
CREATE INDEX zerver_message_search_tsvector ON zerver_message USING gin(search_tsvector);
|
|
ALTER INDEX zerver_message_search_tsvector SET (fastupdate = OFF);
|
|
|
|
CREATE TABLE fts_update_log (id SERIAL PRIMARY KEY, message_id INTEGER NOT NULL);
|
|
CREATE FUNCTION do_notify_fts_update_log() RETURNS trigger LANGUAGE plpgsql AS
|
|
$$ BEGIN NOTIFY fts_update_log; RETURN NEW; END $$;
|
|
CREATE TRIGGER fts_update_log_notify AFTER INSERT ON fts_update_log
|
|
FOR EACH STATEMENT EXECUTE PROCEDURE do_notify_fts_update_log();
|
|
CREATE FUNCTION append_to_fts_update_log() RETURNS trigger LANGUAGE plpgsql AS
|
|
$$ BEGIN INSERT INTO fts_update_log (message_id) VALUES (NEW.id); RETURN NEW; END $$;
|
|
CREATE TRIGGER zerver_message_update_search_tsvector_async
|
|
BEFORE INSERT OR UPDATE OF subject, rendered_content ON zerver_message
|
|
FOR EACH ROW EXECUTE PROCEDURE append_to_fts_update_log();
|
|
"""
|
|
operations = [
|
|
migrations.CreateModel(
|
|
name='UserProfile',
|
|
fields=[
|
|
(
|
|
'id',
|
|
models.AutoField(
|
|
auto_created=True, primary_key=True, serialize=False, verbose_name='ID'
|
|
),
|
|
),
|
|
('password', models.CharField(max_length=128, verbose_name='password')),
|
|
(
|
|
'last_login',
|
|
models.DateTimeField(
|
|
default=django.utils.timezone.now, verbose_name='last login'
|
|
),
|
|
),
|
|
(
|
|
'is_superuser',
|
|
models.BooleanField(
|
|
default=False,
|
|
help_text='Designates that this user has all permissions without explicitly assigning them.',
|
|
verbose_name='superuser status',
|
|
),
|
|
),
|
|
('email', models.EmailField(db_index=True, max_length=75, unique=True)),
|
|
('is_staff', models.BooleanField(default=False)),
|
|
('is_active', models.BooleanField(default=True)),
|
|
('is_bot', models.BooleanField(default=False)),
|
|
('date_joined', models.DateTimeField(default=django.utils.timezone.now)),
|
|
('is_mirror_dummy', models.BooleanField(default=False)),
|
|
('full_name', models.CharField(max_length=100)),
|
|
('short_name', models.CharField(max_length=100)),
|
|
('pointer', models.IntegerField()),
|
|
('last_pointer_updater', models.CharField(max_length=64)),
|
|
('api_key', models.CharField(max_length=32)),
|
|
('enable_stream_desktop_notifications', models.BooleanField(default=True)),
|
|
('enable_stream_sounds', models.BooleanField(default=True)),
|
|
('enable_desktop_notifications', models.BooleanField(default=True)),
|
|
('enable_sounds', models.BooleanField(default=True)),
|
|
('enable_offline_email_notifications', models.BooleanField(default=True)),
|
|
('enable_offline_push_notifications', models.BooleanField(default=True)),
|
|
('enable_digest_emails', models.BooleanField(default=True)),
|
|
('default_desktop_notifications', models.BooleanField(default=True)),
|
|
(
|
|
'last_reminder',
|
|
models.DateTimeField(default=django.utils.timezone.now, null=True),
|
|
),
|
|
('rate_limits', models.CharField(default='', max_length=100)),
|
|
('default_all_public_streams', models.BooleanField(default=False)),
|
|
('enter_sends', models.NullBooleanField(default=True)),
|
|
('autoscroll_forever', models.BooleanField(default=False)),
|
|
('twenty_four_hour_time', models.BooleanField(default=False)),
|
|
(
|
|
'avatar_source',
|
|
models.CharField(
|
|
choices=[
|
|
('G', 'Hosted by Gravatar'),
|
|
('U', 'Uploaded by user'),
|
|
('S', 'System generated'),
|
|
],
|
|
default='G',
|
|
max_length=1,
|
|
),
|
|
),
|
|
(
|
|
'tutorial_status',
|
|
models.CharField(
|
|
choices=[('W', 'Waiting'), ('S', 'Started'), ('F', 'Finished')],
|
|
default='W',
|
|
max_length=1,
|
|
),
|
|
),
|
|
('onboarding_steps', models.TextField(default='[]')),
|
|
('invites_granted', models.IntegerField(default=0)),
|
|
('invites_used', models.IntegerField(default=0)),
|
|
('alert_words', models.TextField(default='[]')),
|
|
('muted_topics', models.TextField(default='[]')),
|
|
(
|
|
'bot_owner',
|
|
models.ForeignKey(
|
|
null=True,
|
|
on_delete=django.db.models.deletion.SET_NULL,
|
|
to=settings.AUTH_USER_MODEL,
|
|
),
|
|
),
|
|
],
|
|
options={
|
|
'abstract': False,
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name='Client',
|
|
fields=[
|
|
(
|
|
'id',
|
|
models.AutoField(
|
|
auto_created=True, primary_key=True, serialize=False, verbose_name='ID'
|
|
),
|
|
),
|
|
('name', models.CharField(db_index=True, max_length=30, unique=True)),
|
|
],
|
|
),
|
|
migrations.CreateModel(
|
|
name='DefaultStream',
|
|
fields=[
|
|
(
|
|
'id',
|
|
models.AutoField(
|
|
auto_created=True, primary_key=True, serialize=False, verbose_name='ID'
|
|
),
|
|
),
|
|
],
|
|
),
|
|
migrations.CreateModel(
|
|
name='Huddle',
|
|
fields=[
|
|
(
|
|
'id',
|
|
models.AutoField(
|
|
auto_created=True, primary_key=True, serialize=False, verbose_name='ID'
|
|
),
|
|
),
|
|
('huddle_hash', models.CharField(db_index=True, max_length=40, unique=True)),
|
|
],
|
|
),
|
|
migrations.CreateModel(
|
|
name='Message',
|
|
fields=[
|
|
(
|
|
'id',
|
|
models.AutoField(
|
|
auto_created=True, primary_key=True, serialize=False, verbose_name='ID'
|
|
),
|
|
),
|
|
('subject', models.CharField(db_index=True, max_length=60)),
|
|
('content', models.TextField()),
|
|
('rendered_content', models.TextField(null=True)),
|
|
('rendered_content_version', models.IntegerField(null=True)),
|
|
('pub_date', models.DateTimeField(db_index=True, verbose_name='date published')),
|
|
('last_edit_time', models.DateTimeField(null=True)),
|
|
('edit_history', models.TextField(null=True)),
|
|
('has_attachment', models.BooleanField(db_index=True, default=False)),
|
|
('has_image', models.BooleanField(db_index=True, default=False)),
|
|
('has_link', models.BooleanField(db_index=True, default=False)),
|
|
],
|
|
),
|
|
migrations.CreateModel(
|
|
name='PreregistrationUser',
|
|
fields=[
|
|
(
|
|
'id',
|
|
models.AutoField(
|
|
auto_created=True, primary_key=True, serialize=False, verbose_name='ID'
|
|
),
|
|
),
|
|
('email', models.EmailField(max_length=75)),
|
|
('invited_at', models.DateTimeField(auto_now=True)),
|
|
('status', models.IntegerField(default=0)),
|
|
],
|
|
),
|
|
migrations.CreateModel(
|
|
name='PushDeviceToken',
|
|
fields=[
|
|
(
|
|
'id',
|
|
models.AutoField(
|
|
auto_created=True, primary_key=True, serialize=False, verbose_name='ID'
|
|
),
|
|
),
|
|
('kind', models.PositiveSmallIntegerField(choices=[(1, 'apns'), (2, 'gcm')])),
|
|
('token', models.CharField(max_length=4096, unique=True)),
|
|
(
|
|
'last_updated',
|
|
models.DateTimeField(auto_now=True, default=django.utils.timezone.now),
|
|
),
|
|
('ios_app_id', models.TextField(null=True)),
|
|
(
|
|
'user',
|
|
models.ForeignKey(
|
|
on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL
|
|
),
|
|
),
|
|
],
|
|
),
|
|
migrations.CreateModel(
|
|
name='Realm',
|
|
fields=[
|
|
(
|
|
'id',
|
|
models.AutoField(
|
|
auto_created=True, primary_key=True, serialize=False, verbose_name='ID'
|
|
),
|
|
),
|
|
('domain', models.CharField(db_index=True, max_length=40, unique=True)),
|
|
('name', models.CharField(max_length=40, null=True)),
|
|
('restricted_to_domain', models.BooleanField(default=True)),
|
|
('invite_required', models.BooleanField(default=False)),
|
|
('invite_by_admins_only', models.BooleanField(default=False)),
|
|
('mandatory_topics', models.BooleanField(default=False)),
|
|
('show_digest_email', models.BooleanField(default=True)),
|
|
('name_changes_disabled', models.BooleanField(default=False)),
|
|
('date_created', models.DateTimeField(default=django.utils.timezone.now)),
|
|
('deactivated', models.BooleanField(default=False)),
|
|
],
|
|
options={
|
|
'permissions': (('administer', 'Administer a realm'),),
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name='RealmAlias',
|
|
fields=[
|
|
(
|
|
'id',
|
|
models.AutoField(
|
|
auto_created=True, primary_key=True, serialize=False, verbose_name='ID'
|
|
),
|
|
),
|
|
('domain', models.CharField(db_index=True, max_length=80, unique=True)),
|
|
(
|
|
'realm',
|
|
models.ForeignKey(
|
|
null=True, on_delete=django.db.models.deletion.CASCADE, to='zerver.Realm'
|
|
),
|
|
),
|
|
],
|
|
),
|
|
migrations.CreateModel(
|
|
name='RealmEmoji',
|
|
fields=[
|
|
(
|
|
'id',
|
|
models.AutoField(
|
|
auto_created=True, primary_key=True, serialize=False, verbose_name='ID'
|
|
),
|
|
),
|
|
('name', models.TextField()),
|
|
('img_url', models.TextField()),
|
|
(
|
|
'realm',
|
|
models.ForeignKey(
|
|
on_delete=django.db.models.deletion.CASCADE, to='zerver.Realm'
|
|
),
|
|
),
|
|
],
|
|
),
|
|
migrations.CreateModel(
|
|
name='RealmFilter',
|
|
fields=[
|
|
(
|
|
'id',
|
|
models.AutoField(
|
|
auto_created=True, primary_key=True, serialize=False, verbose_name='ID'
|
|
),
|
|
),
|
|
('pattern', models.TextField()),
|
|
('url_format_string', models.TextField()),
|
|
(
|
|
'realm',
|
|
models.ForeignKey(
|
|
on_delete=django.db.models.deletion.CASCADE, to='zerver.Realm'
|
|
),
|
|
),
|
|
],
|
|
),
|
|
migrations.CreateModel(
|
|
name='Recipient',
|
|
fields=[
|
|
(
|
|
'id',
|
|
models.AutoField(
|
|
auto_created=True, primary_key=True, serialize=False, verbose_name='ID'
|
|
),
|
|
),
|
|
('type_id', models.IntegerField(db_index=True)),
|
|
('type', models.PositiveSmallIntegerField(db_index=True)),
|
|
],
|
|
),
|
|
migrations.CreateModel(
|
|
name='Referral',
|
|
fields=[
|
|
(
|
|
'id',
|
|
models.AutoField(
|
|
auto_created=True, primary_key=True, serialize=False, verbose_name='ID'
|
|
),
|
|
),
|
|
('email', models.EmailField(max_length=75)),
|
|
('timestamp', models.DateTimeField(auto_now_add=True)),
|
|
(
|
|
'user_profile',
|
|
models.ForeignKey(
|
|
on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL
|
|
),
|
|
),
|
|
],
|
|
),
|
|
migrations.CreateModel(
|
|
name='ScheduledJob',
|
|
fields=[
|
|
(
|
|
'id',
|
|
models.AutoField(
|
|
auto_created=True, primary_key=True, serialize=False, verbose_name='ID'
|
|
),
|
|
),
|
|
('scheduled_timestamp', models.DateTimeField()),
|
|
('type', models.PositiveSmallIntegerField()),
|
|
('data', models.TextField()),
|
|
('filter_id', models.IntegerField(null=True)),
|
|
('filter_string', models.CharField(max_length=100)),
|
|
],
|
|
),
|
|
migrations.CreateModel(
|
|
name='Stream',
|
|
fields=[
|
|
(
|
|
'id',
|
|
models.AutoField(
|
|
auto_created=True, primary_key=True, serialize=False, verbose_name='ID'
|
|
),
|
|
),
|
|
('name', models.CharField(db_index=True, max_length=60)),
|
|
('invite_only', models.NullBooleanField(default=False)),
|
|
(
|
|
'email_token',
|
|
models.CharField(default=generate_email_token_for_stream, max_length=32),
|
|
),
|
|
('description', models.CharField(default='', max_length=1024)),
|
|
('date_created', models.DateTimeField(default=django.utils.timezone.now)),
|
|
('deactivated', models.BooleanField(default=False)),
|
|
(
|
|
'realm',
|
|
models.ForeignKey(
|
|
on_delete=django.db.models.deletion.CASCADE, to='zerver.Realm'
|
|
),
|
|
),
|
|
],
|
|
),
|
|
migrations.CreateModel(
|
|
name='Subscription',
|
|
fields=[
|
|
(
|
|
'id',
|
|
models.AutoField(
|
|
auto_created=True, primary_key=True, serialize=False, verbose_name='ID'
|
|
),
|
|
),
|
|
('active', models.BooleanField(default=True)),
|
|
('in_home_view', models.NullBooleanField(default=True)),
|
|
('color', models.CharField(default='#c2c2c2', max_length=10)),
|
|
('desktop_notifications', models.BooleanField(default=True)),
|
|
('audible_notifications', models.BooleanField(default=True)),
|
|
('notifications', models.BooleanField(default=False)),
|
|
(
|
|
'recipient',
|
|
models.ForeignKey(
|
|
on_delete=django.db.models.deletion.CASCADE, to='zerver.Recipient'
|
|
),
|
|
),
|
|
(
|
|
'user_profile',
|
|
models.ForeignKey(
|
|
on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL
|
|
),
|
|
),
|
|
],
|
|
),
|
|
migrations.CreateModel(
|
|
name='UserActivity',
|
|
fields=[
|
|
(
|
|
'id',
|
|
models.AutoField(
|
|
auto_created=True, primary_key=True, serialize=False, verbose_name='ID'
|
|
),
|
|
),
|
|
('query', models.CharField(db_index=True, max_length=50)),
|
|
('count', models.IntegerField()),
|
|
('last_visit', models.DateTimeField(verbose_name='last visit')),
|
|
(
|
|
'client',
|
|
models.ForeignKey(
|
|
on_delete=django.db.models.deletion.CASCADE, to='zerver.Client'
|
|
),
|
|
),
|
|
(
|
|
'user_profile',
|
|
models.ForeignKey(
|
|
on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL
|
|
),
|
|
),
|
|
],
|
|
),
|
|
migrations.CreateModel(
|
|
name='UserActivityInterval',
|
|
fields=[
|
|
(
|
|
'id',
|
|
models.AutoField(
|
|
auto_created=True, primary_key=True, serialize=False, verbose_name='ID'
|
|
),
|
|
),
|
|
('start', models.DateTimeField(db_index=True, verbose_name='start time')),
|
|
('end', models.DateTimeField(db_index=True, verbose_name='end time')),
|
|
(
|
|
'user_profile',
|
|
models.ForeignKey(
|
|
on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL
|
|
),
|
|
),
|
|
],
|
|
),
|
|
migrations.CreateModel(
|
|
name='UserMessage',
|
|
fields=[
|
|
(
|
|
'id',
|
|
models.AutoField(
|
|
auto_created=True, primary_key=True, serialize=False, verbose_name='ID'
|
|
),
|
|
),
|
|
(
|
|
'flags',
|
|
bitfield.models.BitField(
|
|
[
|
|
'read',
|
|
'starred',
|
|
'collapsed',
|
|
'mentioned',
|
|
'wildcard_mentioned',
|
|
'summarize_in_home',
|
|
'summarize_in_stream',
|
|
'force_expand',
|
|
'force_collapse',
|
|
'has_alert_word',
|
|
'historical',
|
|
'is_me_message',
|
|
],
|
|
default=0,
|
|
),
|
|
),
|
|
(
|
|
'message',
|
|
models.ForeignKey(
|
|
on_delete=django.db.models.deletion.CASCADE, to='zerver.Message'
|
|
),
|
|
),
|
|
(
|
|
'user_profile',
|
|
models.ForeignKey(
|
|
on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL
|
|
),
|
|
),
|
|
],
|
|
),
|
|
migrations.CreateModel(
|
|
name='UserPresence',
|
|
fields=[
|
|
(
|
|
'id',
|
|
models.AutoField(
|
|
auto_created=True, primary_key=True, serialize=False, verbose_name='ID'
|
|
),
|
|
),
|
|
('timestamp', models.DateTimeField(verbose_name='presence changed')),
|
|
('status', models.PositiveSmallIntegerField(default=1)),
|
|
(
|
|
'client',
|
|
models.ForeignKey(
|
|
on_delete=django.db.models.deletion.CASCADE, to='zerver.Client'
|
|
),
|
|
),
|
|
(
|
|
'user_profile',
|
|
models.ForeignKey(
|
|
on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL
|
|
),
|
|
),
|
|
],
|
|
),
|
|
migrations.AlterUniqueTogether(
|
|
name='userpresence',
|
|
unique_together={('user_profile', 'client')},
|
|
),
|
|
migrations.AlterUniqueTogether(
|
|
name='usermessage',
|
|
unique_together={('user_profile', 'message')},
|
|
),
|
|
migrations.AlterUniqueTogether(
|
|
name='useractivity',
|
|
unique_together={('user_profile', 'client', 'query')},
|
|
),
|
|
migrations.AlterUniqueTogether(
|
|
name='subscription',
|
|
unique_together={('user_profile', 'recipient')},
|
|
),
|
|
migrations.AlterUniqueTogether(
|
|
name='stream',
|
|
unique_together={('name', 'realm')},
|
|
),
|
|
migrations.AlterUniqueTogether(
|
|
name='recipient',
|
|
unique_together={('type', 'type_id')},
|
|
),
|
|
migrations.AlterUniqueTogether(
|
|
name='realmfilter',
|
|
unique_together={('realm', 'pattern')},
|
|
),
|
|
migrations.AlterUniqueTogether(
|
|
name='realmemoji',
|
|
unique_together={('realm', 'name')},
|
|
),
|
|
migrations.AddField(
|
|
model_name='realm',
|
|
name='notifications_stream',
|
|
field=models.ForeignKey(
|
|
blank=True,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.CASCADE,
|
|
related_name='+',
|
|
to='zerver.Stream',
|
|
),
|
|
),
|
|
migrations.AddField(
|
|
model_name='preregistrationuser',
|
|
name='realm',
|
|
field=models.ForeignKey(
|
|
null=True, on_delete=django.db.models.deletion.CASCADE, to='zerver.Realm'
|
|
),
|
|
),
|
|
migrations.AddField(
|
|
model_name='preregistrationuser',
|
|
name='referred_by',
|
|
field=models.ForeignKey(
|
|
null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL
|
|
),
|
|
),
|
|
migrations.AddField(
|
|
model_name='preregistrationuser',
|
|
name='streams',
|
|
field=models.ManyToManyField(null=True, to='zerver.Stream'),
|
|
),
|
|
migrations.AddField(
|
|
model_name='message',
|
|
name='recipient',
|
|
field=models.ForeignKey(
|
|
on_delete=django.db.models.deletion.CASCADE, to='zerver.Recipient'
|
|
),
|
|
),
|
|
migrations.AddField(
|
|
model_name='message',
|
|
name='sender',
|
|
field=models.ForeignKey(
|
|
on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL
|
|
),
|
|
),
|
|
migrations.AddField(
|
|
model_name='message',
|
|
name='sending_client',
|
|
field=models.ForeignKey(
|
|
on_delete=django.db.models.deletion.CASCADE, to='zerver.Client'
|
|
),
|
|
),
|
|
migrations.AddField(
|
|
model_name='defaultstream',
|
|
name='realm',
|
|
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='zerver.Realm'),
|
|
),
|
|
migrations.AddField(
|
|
model_name='defaultstream',
|
|
name='stream',
|
|
field=models.ForeignKey(
|
|
on_delete=django.db.models.deletion.CASCADE, to='zerver.Stream'
|
|
),
|
|
),
|
|
migrations.AlterUniqueTogether(
|
|
name='defaultstream',
|
|
unique_together={('realm', 'stream')},
|
|
),
|
|
migrations.AddField(
|
|
model_name='userprofile',
|
|
name='default_events_register_stream',
|
|
field=models.ForeignKey(
|
|
null=True,
|
|
on_delete=django.db.models.deletion.CASCADE,
|
|
related_name='+',
|
|
to='zerver.Stream',
|
|
),
|
|
),
|
|
migrations.AddField(
|
|
model_name='userprofile',
|
|
name='default_sending_stream',
|
|
field=models.ForeignKey(
|
|
null=True,
|
|
on_delete=django.db.models.deletion.CASCADE,
|
|
related_name='+',
|
|
to='zerver.Stream',
|
|
),
|
|
),
|
|
migrations.AddField(
|
|
model_name='userprofile',
|
|
name='groups',
|
|
field=models.ManyToManyField(
|
|
blank=True,
|
|
help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.',
|
|
related_name='user_set',
|
|
related_query_name='user',
|
|
to='auth.Group',
|
|
verbose_name='groups',
|
|
),
|
|
),
|
|
migrations.AddField(
|
|
model_name='userprofile',
|
|
name='realm',
|
|
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='zerver.Realm'),
|
|
),
|
|
migrations.AddField(
|
|
model_name='userprofile',
|
|
name='user_permissions',
|
|
field=models.ManyToManyField(
|
|
blank=True,
|
|
help_text='Specific permissions for this user.',
|
|
related_name='user_set',
|
|
related_query_name='user',
|
|
to='auth.Permission',
|
|
verbose_name='user permissions',
|
|
),
|
|
),
|
|
migrations.RunSQL(
|
|
sql=fts_sql,
|
|
),
|
|
migrations.AlterModelManagers(
|
|
name='userprofile',
|
|
managers=[
|
|
('objects', django.contrib.auth.models.UserManager()),
|
|
],
|
|
),
|
|
migrations.AlterField(
|
|
model_name='preregistrationuser',
|
|
name='email',
|
|
field=models.EmailField(max_length=254),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='preregistrationuser',
|
|
name='streams',
|
|
field=models.ManyToManyField(to='zerver.Stream'),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='pushdevicetoken',
|
|
name='last_updated',
|
|
field=models.DateTimeField(auto_now=True),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='referral',
|
|
name='email',
|
|
field=models.EmailField(max_length=254),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='userprofile',
|
|
name='email',
|
|
field=models.EmailField(db_index=True, max_length=254, unique=True),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='userprofile',
|
|
name='last_login',
|
|
field=models.DateTimeField(blank=True, null=True, verbose_name='last login'),
|
|
),
|
|
migrations.RunSQL(
|
|
sql='CREATE INDEX upper_subject_idx ON zerver_message ((upper(subject)));',
|
|
reverse_sql='DROP INDEX upper_subject_idx;',
|
|
),
|
|
migrations.RunSQL(
|
|
sql='CREATE INDEX upper_stream_name_idx ON zerver_stream ((upper(name)));',
|
|
reverse_sql='DROP INDEX upper_stream_name_idx;',
|
|
),
|
|
migrations.AddField(
|
|
model_name='userprofile',
|
|
name='left_side_userlist',
|
|
field=models.BooleanField(default=False),
|
|
),
|
|
migrations.AlterModelOptions(
|
|
name='realm',
|
|
options={
|
|
'permissions': (
|
|
('administer', 'Administer a realm'),
|
|
('api_super_user', 'Can send messages as other users for mirroring'),
|
|
)
|
|
},
|
|
),
|
|
migrations.RunSQL(
|
|
sql='CREATE INDEX upper_userprofile_email_idx ON zerver_userprofile ((upper(email)));',
|
|
reverse_sql='DROP INDEX upper_userprofile_email_idx;',
|
|
),
|
|
migrations.AlterField(
|
|
model_name='userprofile',
|
|
name='is_active',
|
|
field=models.BooleanField(db_index=True, default=True),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='userprofile',
|
|
name='is_bot',
|
|
field=models.BooleanField(db_index=True, default=False),
|
|
),
|
|
migrations.RunSQL(
|
|
sql='CREATE INDEX upper_preregistration_email_idx ON zerver_preregistrationuser ((upper(email)));',
|
|
reverse_sql='DROP INDEX upper_preregistration_email_idx;',
|
|
),
|
|
migrations.AlterField(
|
|
model_name='userprofile',
|
|
name='enable_stream_desktop_notifications',
|
|
field=models.BooleanField(default=False),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='userprofile',
|
|
name='enable_stream_sounds',
|
|
field=models.BooleanField(default=False),
|
|
),
|
|
migrations.AddField(
|
|
model_name='userprofile',
|
|
name='is_api_super_user',
|
|
field=models.BooleanField(db_index=True, default=False),
|
|
),
|
|
migrations.AddField(
|
|
model_name='userprofile',
|
|
name='is_realm_admin',
|
|
field=models.BooleanField(db_index=True, default=False),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='realmemoji',
|
|
name='img_url',
|
|
field=models.URLField(),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='realmemoji',
|
|
name='name',
|
|
field=models.TextField(
|
|
validators=[
|
|
django.core.validators.MinLengthValidator(1),
|
|
django.core.validators.RegexValidator(regex='^[0-9a-zA-Z.\\-_]+(?<![.\\-_])$'),
|
|
]
|
|
),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='realmemoji',
|
|
name='img_url',
|
|
field=models.URLField(max_length=1000),
|
|
),
|
|
migrations.CreateModel(
|
|
name='Attachment',
|
|
fields=[
|
|
(
|
|
'id',
|
|
models.AutoField(
|
|
auto_created=True, primary_key=True, serialize=False, verbose_name='ID'
|
|
),
|
|
),
|
|
('file_name', models.CharField(db_index=True, max_length=100)),
|
|
('path_id', models.TextField(db_index=True)),
|
|
(
|
|
'create_time',
|
|
models.DateTimeField(db_index=True, default=django.utils.timezone.now),
|
|
),
|
|
('messages', models.ManyToManyField(to='zerver.Message')),
|
|
(
|
|
'owner',
|
|
models.ForeignKey(
|
|
on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL
|
|
),
|
|
),
|
|
('is_realm_public', models.BooleanField(default=False)),
|
|
],
|
|
),
|
|
migrations.AddField(
|
|
model_name='realm',
|
|
name='create_stream_by_admins_only',
|
|
field=models.BooleanField(default=False),
|
|
),
|
|
migrations.AddField(
|
|
model_name='userprofile',
|
|
name='bot_type',
|
|
field=models.PositiveSmallIntegerField(db_index=True, null=True),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='realmemoji',
|
|
name='name',
|
|
field=models.TextField(
|
|
validators=[
|
|
django.core.validators.MinLengthValidator(1),
|
|
django.core.validators.RegexValidator(
|
|
message='Invalid characters in emoji name',
|
|
regex='^[0-9a-zA-Z.\\-_]+(?<![.\\-_])$',
|
|
),
|
|
]
|
|
),
|
|
),
|
|
migrations.AddField(
|
|
model_name='preregistrationuser',
|
|
name='realm_creation',
|
|
field=models.BooleanField(default=False),
|
|
),
|
|
migrations.AddField(
|
|
model_name='attachment',
|
|
name='realm',
|
|
field=models.ForeignKey(
|
|
blank=True,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.CASCADE,
|
|
to='zerver.Realm',
|
|
),
|
|
),
|
|
migrations.RunPython(
|
|
code=migrate_existing_attachment_data,
|
|
elidable=True,
|
|
),
|
|
migrations.AddField(
|
|
model_name='subscription',
|
|
name='pin_to_top',
|
|
field=models.BooleanField(default=False),
|
|
),
|
|
migrations.AddField(
|
|
model_name='userprofile',
|
|
name='default_language',
|
|
field=models.CharField(default='en', max_length=50),
|
|
),
|
|
migrations.AddField(
|
|
model_name='realm',
|
|
name='allow_message_editing',
|
|
field=models.BooleanField(default=True),
|
|
),
|
|
migrations.AddField(
|
|
model_name='realm',
|
|
name='message_content_edit_limit_seconds',
|
|
field=models.IntegerField(default=600),
|
|
),
|
|
migrations.AddField(
|
|
model_name='realm',
|
|
name='default_language',
|
|
field=models.CharField(default='en', max_length=50),
|
|
),
|
|
migrations.AddField(
|
|
model_name='userprofile',
|
|
name='tos_version',
|
|
field=models.CharField(max_length=10, null=True),
|
|
),
|
|
]
|