fixtures.py 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. import base64
  2. from misago.settings.models import Group, Setting
  3. from misago.utils import ugettext_lazy as _
  4. from misago.utils import get_msgid
  5. try:
  6. import cPickle as pickle
  7. except ImportError:
  8. import pickle
  9. settings_fixture = (
  10. # Basic options
  11. ('basic', {
  12. 'name': _("Basic Settings"),
  13. 'settings': (
  14. ('board_name', {
  15. 'value': "Misago",
  16. 'type': "string",
  17. 'input': "text",
  18. 'separator': _("Board Name"),
  19. 'name': _("Board Name"),
  20. }),
  21. ('board_header', {
  22. 'type': "string",
  23. 'input': "text",
  24. 'name': _("Board Header"),
  25. 'description': _("Some themes allow you to define text in board header. Leave empty to use Board Name instead."),
  26. }),
  27. ('board_header_postscript', {
  28. 'value': "Work in progress ",
  29. 'type': "string",
  30. 'input': "text",
  31. 'name': _("Board Header Postscript"),
  32. 'description': _("Additional text displayed in some themes board header after board name."),
  33. }),
  34. ('board_index_title', {
  35. 'type': "string",
  36. 'input': "text",
  37. 'separator': _("Board Index"),
  38. 'name': _("Board Index Title"),
  39. 'description': _("If you want to, you can replace page title content on Board Index with custom one."),
  40. }),
  41. ('board_index_meta', {
  42. 'type': "string",
  43. 'input': "text",
  44. 'name': _("Board Index Meta-Description"),
  45. 'description': _("Meta-Description used to describe your board's index page."),
  46. }),
  47. ('board_credits', {
  48. 'type': "string",
  49. 'input': "textarea",
  50. 'separator': _("Board Footer"),
  51. 'name': _("Custom Credit"),
  52. 'description': _("Custom Credit to display in board footer above software and theme copyright information. You can use HTML."),
  53. }),
  54. ('email_footnote', {
  55. 'type': "string",
  56. 'input': "textarea",
  57. 'separator': _("Board E-Mails"),
  58. 'name': _("Custom Footnote in HTML E-mails"),
  59. 'description': _("Custom Footnote to display in HTML e-mail messages sent by board."),
  60. }),
  61. ('email_footnote_plain', {
  62. 'type': "string",
  63. 'input': "textarea",
  64. 'name': _("Custom Footnote in plain text E-mails"),
  65. 'description': _("Custom Footnote to display in plain text e-mail messages sent by board."),
  66. }),
  67. ),
  68. }),
  69. )
  70. def load_settings_group_fixture(group, fixture):
  71. model_group = Group(
  72. key=group,
  73. name=get_msgid(fixture['name']),
  74. description=get_msgid(fixture.get('description'))
  75. )
  76. model_group.save(force_insert=True)
  77. fixture = fixture.get('settings', ())
  78. position = 0
  79. for setting in fixture:
  80. value = setting[1].get('value')
  81. value_default = setting[1].get('default')
  82. # Convert boolean True and False to 1 and 0, otherwhise it wont work
  83. if setting[1].get('type') == 'boolean':
  84. value = 1 if value else 0
  85. value_default = 1 if value_default else 0
  86. # Convert array value to string
  87. if setting[1].get('type') == 'array':
  88. value = ','.join(value) if value else ''
  89. value_default = ','.join(value_default) if value_default else ''
  90. # Store setting in database
  91. model_setting = Setting(
  92. setting=setting[0],
  93. group=model_group,
  94. value=value,
  95. value_default=value_default,
  96. type=setting[1].get('type'),
  97. input=setting[1].get('input'),
  98. extra=base64.encodestring(pickle.dumps(setting[1].get('extra', {}), pickle.HIGHEST_PROTOCOL)),
  99. position=position,
  100. separator=get_msgid(setting[1].get('separator')),
  101. name=get_msgid(setting[1].get('name')),
  102. description=get_msgid(setting[1].get('description')),
  103. )
  104. model_setting.save(force_insert=True)
  105. position += 1
  106. def update_settings_group_fixture(group, fixture):
  107. try:
  108. model_group = Group.objects.get(key=group)
  109. settings = {}
  110. for setting in model_group.setting_set.all():
  111. settings[setting.pk] = setting.value
  112. model_group.delete()
  113. load_settings_group_fixture(group, fixture)
  114. for setting in settings:
  115. try:
  116. new_setting = Setting.objects.get(pk=setting)
  117. new_setting.value = settings[setting]
  118. new_setting.save(force_update=True)
  119. except Setting.DoesNotExist:
  120. pass
  121. except Group.DoesNotExist:
  122. load_settings_group_fixture(group, fixture)
  123. def load_settings_fixture(fixture):
  124. for group in fixture:
  125. load_settings_group_fixture(group[0], group[1])
  126. def update_settings_fixture(fixture):
  127. for group in fixture:
  128. update_settings_group_fixture(group[0], group[1])
  129. def load_fixtures():
  130. load_settings_fixture(settings_fixture)
  131. def update_fixtures():
  132. update_settings_fixture(settings_fixture)