0001_initial.py 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345
  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. class Migration(migrations.Migration):
  10. initial = True
  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. migrations.CreateModel(
  135. name='Online',
  136. fields=[
  137. ('current_ip', models.GenericIPAddressField()),
  138. ('last_click', models.DateTimeField(default=django.utils.timezone.now)),
  139. (
  140. 'user', models.OneToOneField(
  141. related_name='online_tracker',
  142. on_delete=django.db.models.deletion.CASCADE,
  143. primary_key=True,
  144. serialize=False,
  145. to=settings.AUTH_USER_MODEL
  146. )
  147. ),
  148. ],
  149. options={},
  150. bases=(models.Model, ),
  151. ),
  152. migrations.CreateModel(
  153. name='UsernameChange',
  154. fields=[
  155. (
  156. 'id', models.AutoField(
  157. verbose_name='ID', serialize=False, auto_created=True, primary_key=True
  158. )
  159. ),
  160. ('changed_by_username', models.CharField(max_length=30)),
  161. ('changed_on', models.DateTimeField(default=django.utils.timezone.now)),
  162. ('new_username', models.CharField(max_length=255)),
  163. ('old_username', models.CharField(max_length=255)),
  164. (
  165. 'changed_by', models.ForeignKey(
  166. related_name='user_renames',
  167. on_delete=django.db.models.deletion.SET_NULL,
  168. blank=True,
  169. to=settings.AUTH_USER_MODEL,
  170. null=True
  171. )
  172. ),
  173. (
  174. 'user', models.ForeignKey(
  175. related_name='namechanges',
  176. on_delete=django.db.models.deletion.CASCADE,
  177. to=settings.AUTH_USER_MODEL,
  178. )
  179. ),
  180. ],
  181. options={
  182. 'get_latest_by': 'changed_on',
  183. },
  184. bases=(models.Model, ),
  185. ),
  186. migrations.CreateModel(
  187. name='Rank',
  188. fields=[
  189. (
  190. 'id', models.AutoField(
  191. verbose_name='ID', serialize=False, auto_created=True, primary_key=True
  192. )
  193. ),
  194. ('name', models.CharField(max_length=255)),
  195. ('slug', models.CharField(unique=True, max_length=255)),
  196. ('description', models.TextField(null=True, blank=True)),
  197. ('title', models.CharField(max_length=255, null=True, blank=True)),
  198. ('css_class', models.CharField(max_length=255, null=True, blank=True)),
  199. ('is_default', models.BooleanField(default=False)),
  200. ('is_tab', models.BooleanField(default=False)),
  201. ('order', models.IntegerField(default=0)),
  202. ('roles', models.ManyToManyField(to='misago_acl.Role', null=True, blank=True)),
  203. ],
  204. options={
  205. 'get_latest_by': 'order',
  206. },
  207. bases=(models.Model, ),
  208. ),
  209. migrations.AddField(
  210. model_name='user',
  211. name='rank',
  212. field=models.ForeignKey(
  213. on_delete=django.db.models.deletion.PROTECT,
  214. to_field='id',
  215. blank=True,
  216. to='misago_users.Rank',
  217. null=True
  218. ),
  219. preserve_default=True,
  220. ),
  221. migrations.AddField(
  222. model_name='user',
  223. name='follows',
  224. field=models.ManyToManyField(related_name='followed_by', to=settings.AUTH_USER_MODEL),
  225. preserve_default=True,
  226. ),
  227. migrations.AddField(
  228. model_name='user',
  229. name='blocks',
  230. field=models.ManyToManyField(related_name='blocked_by', to=settings.AUTH_USER_MODEL),
  231. preserve_default=True,
  232. ),
  233. migrations.CreateModel(
  234. name='ActivityRanking',
  235. fields=[
  236. (
  237. 'id', models.AutoField(
  238. verbose_name='ID', serialize=False, auto_created=True, primary_key=True
  239. )
  240. ),
  241. (
  242. 'user', models.ForeignKey(
  243. related_name='+',
  244. on_delete=django.db.models.deletion.CASCADE,
  245. to=settings.AUTH_USER_MODEL,
  246. )
  247. ),
  248. ('score', models.PositiveIntegerField(default=0, db_index=True)),
  249. ],
  250. options={},
  251. bases=(models.Model, ),
  252. ),
  253. migrations.CreateModel(
  254. name='Avatar',
  255. fields=[
  256. (
  257. 'id', models.AutoField(
  258. auto_created=True, primary_key=True, serialize=False, verbose_name='ID'
  259. )
  260. ),
  261. (
  262. 'user', models.ForeignKey(
  263. on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL
  264. )
  265. ),
  266. ('size', models.PositiveIntegerField(default=0)),
  267. (
  268. 'image', models.ImageField(
  269. max_length=255, upload_to=misago.users.avatars.store.upload_to
  270. )
  271. ),
  272. ],
  273. ),
  274. migrations.CreateModel(
  275. name='AvatarGallery',
  276. fields=[
  277. (
  278. 'id', models.AutoField(
  279. auto_created=True, primary_key=True, serialize=False, verbose_name='ID'
  280. )
  281. ),
  282. ('gallery', models.CharField(max_length=255)),
  283. (
  284. 'image', models.ImageField(
  285. max_length=255, upload_to=misago.users.avatars.store.upload_to
  286. )
  287. ),
  288. ],
  289. options={
  290. 'ordering': ['gallery', 'pk'],
  291. },
  292. ),
  293. migrations.CreateModel(
  294. name='Ban',
  295. fields=[
  296. (
  297. 'id', models.AutoField(
  298. verbose_name='ID', serialize=False, auto_created=True, primary_key=True
  299. )
  300. ),
  301. ('check_type', models.PositiveIntegerField(default=0, db_index=True)),
  302. ('banned_value', models.CharField(max_length=255, db_index=True)),
  303. ('user_message', models.TextField(null=True, blank=True)),
  304. ('staff_message', models.TextField(null=True, blank=True)),
  305. ('expires_on', models.DateTimeField(null=True, blank=True, db_index=True)),
  306. ('is_checked', models.BooleanField(default=True, db_index=True)),
  307. ],
  308. bases=(models.Model, ),
  309. ),
  310. migrations.CreateModel(
  311. name='BanCache',
  312. fields=[
  313. ('user_message', models.TextField(null=True, blank=True)),
  314. ('staff_message', models.TextField(null=True, blank=True)),
  315. ('bans_version', models.PositiveIntegerField(default=0)),
  316. ('expires_on', models.DateTimeField(null=True, blank=True)),
  317. (
  318. 'ban', models.ForeignKey(
  319. on_delete=django.db.models.deletion.SET_NULL,
  320. blank=True,
  321. to='misago_users.Ban',
  322. null=True
  323. )
  324. ),
  325. (
  326. 'user', models.OneToOneField(
  327. related_name='ban_cache',
  328. on_delete=django.db.models.deletion.CASCADE,
  329. primary_key=True,
  330. serialize=False,
  331. to=settings.AUTH_USER_MODEL
  332. )
  333. ),
  334. ],
  335. options={},
  336. bases=(models.Model, ),
  337. ),
  338. ]