0001_initial.py 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356
  1. # -*- coding: utf-8 -*-
  2. from __future__ import unicode_literals
  3. import django.db.models.deletion
  4. import django.utils.timezone
  5. from django.conf import settings
  6. from django.contrib.postgres.fields import JSONField
  7. from django.db import migrations, models
  8. import misago.users.avatars.store
  9. from misago.core.pgutils import CreatePartialIndex
  10. class Migration(migrations.Migration):
  11. initial = True
  12. dependencies = [
  13. ('auth', '0001_initial'),
  14. ('misago_acl', '0001_initial'),
  15. ]
  16. operations = [
  17. migrations.CreateModel(
  18. name='User',
  19. fields=[
  20. (
  21. 'id', models.AutoField(
  22. verbose_name='ID', serialize=False, auto_created=True, primary_key=True
  23. )
  24. ),
  25. ('password', models.CharField(max_length=128, verbose_name='password')),
  26. (
  27. 'last_login',
  28. models.DateTimeField(null=True, blank=True, verbose_name='last login')
  29. ),
  30. ('username', models.CharField(max_length=30)),
  31. ('slug', models.CharField(unique=True, max_length=30)),
  32. ('email', models.EmailField(max_length=255, db_index=True)),
  33. ('email_hash', models.CharField(unique=True, max_length=32)),
  34. (
  35. 'joined_on', models.DateTimeField(
  36. default=django.utils.timezone.now, verbose_name='joined on'
  37. )
  38. ),
  39. ('joined_from_ip', models.GenericIPAddressField()),
  40. ('last_ip', models.GenericIPAddressField(null=True, blank=True)),
  41. ('is_hiding_presence', models.BooleanField(default=False)),
  42. ('title', models.CharField(max_length=255, null=True, blank=True)),
  43. ('requires_activation', models.PositiveIntegerField(default=0)),
  44. (
  45. 'is_staff', models.BooleanField(
  46. default=False,
  47. help_text='Designates whether the user can log into admin sites.',
  48. verbose_name='staff status'
  49. )
  50. ),
  51. (
  52. 'is_superuser', models.BooleanField(
  53. default=False,
  54. help_text='Designates that this user has all permissions without explicitly assigning them.',
  55. verbose_name='superuser status'
  56. )
  57. ),
  58. ('acl_key', models.CharField(max_length=12, null=True, blank=True)),
  59. (
  60. 'is_active', models.BooleanField(
  61. db_index=True,
  62. default=True,
  63. verbose_name='active',
  64. help_text=(
  65. 'Designates whether this user should be treated as active. Unselect this instead of deleting '
  66. 'accounts.'
  67. )
  68. )
  69. ),
  70. ('is_active_staff_message', models.TextField(null=True, blank=True)),
  71. (
  72. 'groups', models.ManyToManyField(
  73. related_query_name='user',
  74. related_name='user_set',
  75. to='auth.Group',
  76. blank=True,
  77. help_text='The groups this user belongs to. A user will get all permissions granted to each of his/her group.',
  78. verbose_name='groups'
  79. )
  80. ),
  81. ('roles', models.ManyToManyField(to='misago_acl.Role')),
  82. (
  83. 'user_permissions', models.ManyToManyField(
  84. related_query_name='user',
  85. related_name='user_set',
  86. to='auth.Permission',
  87. blank=True,
  88. help_text='Specific permissions for this user.',
  89. verbose_name='user permissions'
  90. )
  91. ),
  92. (
  93. 'avatar_tmp', models.ImageField(
  94. max_length=255,
  95. upload_to=misago.users.avatars.store.upload_to,
  96. null=True,
  97. blank=True
  98. )
  99. ),
  100. (
  101. 'avatar_src', models.ImageField(
  102. max_length=255,
  103. upload_to=misago.users.avatars.store.upload_to,
  104. null=True,
  105. blank=True
  106. )
  107. ),
  108. ('avatar_crop', models.CharField(max_length=255, null=True, blank=True)),
  109. ('avatars', JSONField(null=True, blank=True)),
  110. ('is_avatar_locked', models.BooleanField(default=False)),
  111. ('avatar_lock_user_message', models.TextField(null=True, blank=True)),
  112. ('avatar_lock_staff_message', models.TextField(null=True, blank=True)),
  113. ('signature', models.TextField(null=True, blank=True)),
  114. ('signature_parsed', models.TextField(null=True, blank=True)),
  115. ('signature_checksum', models.CharField(max_length=64, null=True, blank=True)),
  116. ('is_signature_locked', models.BooleanField(default=False)),
  117. ('signature_lock_user_message', models.TextField(null=True, blank=True)),
  118. ('signature_lock_staff_message', models.TextField(null=True, blank=True)),
  119. ('following', models.PositiveIntegerField(default=0)),
  120. ('followers', models.PositiveIntegerField(default=0)),
  121. ('limits_private_thread_invites_to', models.PositiveIntegerField(default=0)),
  122. ('unread_private_threads', models.PositiveIntegerField(default=0)),
  123. ('sync_unread_private_threads', models.BooleanField(default=False)),
  124. ('subscribe_to_started_threads', models.PositiveIntegerField(default=0)),
  125. ('subscribe_to_replied_threads', models.PositiveIntegerField(default=0)),
  126. ('threads', models.PositiveIntegerField(default=0)),
  127. ('posts', models.PositiveIntegerField(default=0, db_index=True)),
  128. ('last_posted_on', models.DateTimeField(null=True, blank=True)),
  129. ],
  130. options={
  131. 'abstract': False,
  132. },
  133. bases=(models.Model, ),
  134. ),
  135. CreatePartialIndex(
  136. field='User.is_staff',
  137. index_name='misago_users_user_is_staff_partial',
  138. condition='is_staff = TRUE',
  139. ),
  140. CreatePartialIndex(
  141. field='User.requires_activation',
  142. index_name='misago_users_user_requires_activation_partial',
  143. condition='requires_activation > 0',
  144. ),
  145. migrations.CreateModel(
  146. name='Online',
  147. fields=[
  148. ('current_ip', models.GenericIPAddressField()),
  149. ('last_click', models.DateTimeField(default=django.utils.timezone.now)),
  150. (
  151. 'user', models.OneToOneField(
  152. related_name='online_tracker',
  153. on_delete=django.db.models.deletion.CASCADE,
  154. primary_key=True,
  155. serialize=False,
  156. to=settings.AUTH_USER_MODEL
  157. )
  158. ),
  159. ],
  160. options={},
  161. bases=(models.Model, ),
  162. ),
  163. migrations.CreateModel(
  164. name='UsernameChange',
  165. fields=[
  166. (
  167. 'id', models.AutoField(
  168. verbose_name='ID', serialize=False, auto_created=True, primary_key=True
  169. )
  170. ),
  171. ('changed_by_username', models.CharField(max_length=30)),
  172. ('changed_on', models.DateTimeField(default=django.utils.timezone.now)),
  173. ('new_username', models.CharField(max_length=255)),
  174. ('old_username', models.CharField(max_length=255)),
  175. (
  176. 'changed_by', models.ForeignKey(
  177. related_name='user_renames',
  178. on_delete=django.db.models.deletion.SET_NULL,
  179. blank=True,
  180. to=settings.AUTH_USER_MODEL,
  181. null=True
  182. )
  183. ),
  184. (
  185. 'user', models.ForeignKey(
  186. related_name='namechanges',
  187. on_delete=django.db.models.deletion.CASCADE,
  188. to=settings.AUTH_USER_MODEL,
  189. )
  190. ),
  191. ],
  192. options={
  193. 'get_latest_by': b'changed_on',
  194. },
  195. bases=(models.Model, ),
  196. ),
  197. migrations.CreateModel(
  198. name='Rank',
  199. fields=[
  200. (
  201. 'id', models.AutoField(
  202. verbose_name='ID', serialize=False, auto_created=True, primary_key=True
  203. )
  204. ),
  205. ('name', models.CharField(max_length=255)),
  206. ('slug', models.CharField(unique=True, max_length=255)),
  207. ('description', models.TextField(null=True, blank=True)),
  208. ('title', models.CharField(max_length=255, null=True, blank=True)),
  209. ('css_class', models.CharField(max_length=255, null=True, blank=True)),
  210. ('is_default', models.BooleanField(default=False)),
  211. ('is_tab', models.BooleanField(default=False)),
  212. ('order', models.IntegerField(default=0)),
  213. ('roles', models.ManyToManyField(to='misago_acl.Role', null=True, blank=True)),
  214. ],
  215. options={
  216. 'get_latest_by': b'order',
  217. },
  218. bases=(models.Model, ),
  219. ),
  220. migrations.AddField(
  221. model_name='user',
  222. name='rank',
  223. field=models.ForeignKey(
  224. on_delete=django.db.models.deletion.PROTECT,
  225. to_field='id',
  226. blank=True,
  227. to='misago_users.Rank',
  228. null=True
  229. ),
  230. preserve_default=True,
  231. ),
  232. migrations.AddField(
  233. model_name='user',
  234. name='follows',
  235. field=models.ManyToManyField(related_name='followed_by', to=settings.AUTH_USER_MODEL),
  236. preserve_default=True,
  237. ),
  238. migrations.AddField(
  239. model_name='user',
  240. name='blocks',
  241. field=models.ManyToManyField(related_name='blocked_by', to=settings.AUTH_USER_MODEL),
  242. preserve_default=True,
  243. ),
  244. migrations.CreateModel(
  245. name='ActivityRanking',
  246. fields=[
  247. (
  248. 'id', models.AutoField(
  249. verbose_name='ID', serialize=False, auto_created=True, primary_key=True
  250. )
  251. ),
  252. (
  253. 'user', models.ForeignKey(
  254. related_name='+',
  255. on_delete=django.db.models.deletion.CASCADE,
  256. to=settings.AUTH_USER_MODEL,
  257. )
  258. ),
  259. ('score', models.PositiveIntegerField(default=0, db_index=True)),
  260. ],
  261. options={},
  262. bases=(models.Model, ),
  263. ),
  264. migrations.CreateModel(
  265. name='Avatar',
  266. fields=[
  267. (
  268. 'id', models.AutoField(
  269. auto_created=True, primary_key=True, serialize=False, verbose_name='ID'
  270. )
  271. ),
  272. (
  273. 'user', models.ForeignKey(
  274. on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL
  275. )
  276. ),
  277. ('size', models.PositiveIntegerField(default=0)),
  278. (
  279. 'image', models.ImageField(
  280. max_length=255, upload_to=misago.users.avatars.store.upload_to
  281. )
  282. ),
  283. ],
  284. ),
  285. migrations.CreateModel(
  286. name='AvatarGallery',
  287. fields=[
  288. (
  289. 'id', models.AutoField(
  290. auto_created=True, primary_key=True, serialize=False, verbose_name='ID'
  291. )
  292. ),
  293. ('gallery', models.CharField(max_length=255)),
  294. (
  295. 'image', models.ImageField(
  296. max_length=255, upload_to=misago.users.avatars.store.upload_to
  297. )
  298. ),
  299. ],
  300. options={
  301. 'ordering': ['gallery', 'pk'],
  302. },
  303. ),
  304. migrations.CreateModel(
  305. name='Ban',
  306. fields=[
  307. (
  308. 'id', models.AutoField(
  309. verbose_name='ID', serialize=False, auto_created=True, primary_key=True
  310. )
  311. ),
  312. ('check_type', models.PositiveIntegerField(default=0, db_index=True)),
  313. ('banned_value', models.CharField(max_length=255, db_index=True)),
  314. ('user_message', models.TextField(null=True, blank=True)),
  315. ('staff_message', models.TextField(null=True, blank=True)),
  316. ('expires_on', models.DateTimeField(null=True, blank=True, db_index=True)),
  317. ('is_checked', models.BooleanField(default=True, db_index=True)),
  318. ],
  319. bases=(models.Model, ),
  320. ),
  321. migrations.CreateModel(
  322. name='BanCache',
  323. fields=[
  324. ('user_message', models.TextField(null=True, blank=True)),
  325. ('staff_message', models.TextField(null=True, blank=True)),
  326. ('bans_version', models.PositiveIntegerField(default=0)),
  327. ('expires_on', models.DateTimeField(null=True, blank=True)),
  328. (
  329. 'ban', models.ForeignKey(
  330. on_delete=django.db.models.deletion.SET_NULL,
  331. blank=True,
  332. to='misago_users.Ban',
  333. null=True
  334. )
  335. ),
  336. (
  337. 'user', models.OneToOneField(
  338. related_name='ban_cache',
  339. on_delete=django.db.models.deletion.CASCADE,
  340. primary_key=True,
  341. serialize=False,
  342. to=settings.AUTH_USER_MODEL
  343. )
  344. ),
  345. ],
  346. options={},
  347. bases=(models.Model, ),
  348. ),
  349. ]