0001_initial.py 15 KB

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