← Back to team overview

widelands-dev team mailing list archive

[Merge] lp:~widelands-dev/widelands-website/mv_main_files into lp:widelands-website

 

kaputtnik has proposed merging lp:~widelands-dev/widelands-website/mv_main_files into lp:widelands-website.

Commit message:
Moved main files into folder mainpage

Requested reviews:
  Widelands Developers (widelands-dev)
Related bugs:
  Bug #1762164 in Widelands Website: "Update website code to use python 3.x"
  https://bugs.launchpad.net/widelands-website/+bug/1762164

For more details, see:
https://code.launchpad.net/~widelands-dev/widelands-website/mv_main_files/+merge/365634

Python3 is more restrictive with relative imports. Moving the mainfiles into the directory 'mainpage' is made to perform this.

In python terms: The folder widelands (containing manage.py) will no longer be a 'package'. Running manage.py will call anything inside the package 'mainpage' and thus relative imports will work again.

This reflects also the initial structure of a django project, like shown here: https://docs.djangoproject.com/en/2.2/intro/reusable-apps/#your-project-and-your-reusable-app

Running the 2to3 script (for porting python2 to python3 code) produces less faulty code in regard to imports after this change.

I have also moved the privacy template to his origin (privacy_policy).

Should be tested on alpha.
-- 
Your team Widelands Developers is requested to review the proposed merge of lp:~widelands-dev/widelands-website/mv_main_files into lp:widelands-website.
=== modified file 'README.txt'
--- README.txt	2018-12-30 11:45:03 +0000
+++ README.txt	2019-04-07 09:29:16 +0000
@@ -57,6 +57,7 @@
 
 This will take a while. If no errors are shown we should be fine.
 
+
 Setting up the website
 ======================
 
@@ -68,8 +69,8 @@
 those files and modify them to your needs - most likely everything works
 directly, but you might want to edit the bd variable in local_settings.py::
 
-   $ ln -s local_urls.py.sample local_urls.py
-   $ ln -s local_settings.py.sample local_settings.py
+   $ ln -s local_urls.py.sample mainpage/local_urls.py
+   $ ln -s local_settings.py.sample mainpage/local_settings.py
 
 Setting up the database
 -----------------------
@@ -125,60 +126,63 @@
 See also https://docs.djangoproject.com/en/dev/ref/django-admin/#examples-of-using-different-ports-and-addresses
 for further details.
 
+
 Dependencies between website and widelands source code
 ======================================================
 
-Some parts of the website need access to the source code of widelands:
-
-* Online help/Encyclopedia
-* Possibility to upload a map onto the local website
-* Source code documentation
-
-You will need the widelands source code for this, see
+Some parts of the website need access to the source code of widelands, other 
+parts need some widelands executables.
+
+Source code only
+----------------
+
+The documentation is made out of the source code. To get a copy, see:
 
 https://wl.widelands.org/wiki/BzrPrimer/
 
 After the source code is downloaded, adjust the path of 
 
-WIDELANDS_SVN_DIR
-
-in local_settings.py to the path where the widelands source code is found.
-
-Setting up the online help / encyclopedia
------------------------------------------
-
-You will need graphviz to generate the graphs for the online help. On Ubuntu run:
+WIDELANDS_SVN_DIR = '/path/to/widelands/trunk'
+
+in mainpage/local_settings.py to the path where the widelands source code can be
+found. Then run:
+
+   $ ./manage.py create_docs
+
+After finishing without errors, type localhost:8000/documentation/index.html
+in your browsers addressbar or click on "Development -> Documentation".
+
+Widelands executables
+---------------------
+
+Widelands executables are needed to:
+
+* Upload maps to the website
+* Create the Encylopdia
+
+Either install widelands as a program to your operating system, or create the 
+binarys by compiling the source code. If you want to compile, run:
+
+   $ ./compile.sh -r
+
+inside of the WIDELANDS_SVN_DIR to create a release build.
+
+Uploading maps should work now.
+
+Creating the encyclopdia needs graphviz to generate the graphs. On Ubuntu run:
 
    $ sudo apt-get install graphviz
 
-To generate the online help database switch to your local environment and run:
+To generate the online help switch to your local environment and run:
 
    $ ./manage.py update_help
 
-After that you can create the overview pdf files with
+Now you can create the economy graphs:
 
    $ ./manage.py update_help_pdf
 
-Setting up widelands source code documentation
-----------------------------------------------
-
-There is a small helper script to get the documenation. Be sure
-you have set WIDELANDS_SVN_DIR set in local_settings.py. Run:
-
-   $ ./manage.py create_docs
-
-After finishing without errors, type localhost:8000/documentation/index.html
-in your browsers addressbar or click on "Development -> Documentation".
-
-
-Uploading a map to the local website
-------------------------------------
-
-Compile the widelands binaries by using the compile.sh script
-
-   $ ./compile.sh
-
-Now you should be able to upload a map onto your local website.
+You can access the encyclopdia by clicking on 'The Game -> Encyclopedia' now.
+
 
 Contact
 =======

=== removed file '__init__.py'
=== renamed file 'mainpage/urls.py' => 'mainpage/mainpage_urls.py'
=== renamed file 'online_users_middleware.py' => 'mainpage/online_users_middleware.py'
=== renamed file 'settings.py' => 'mainpage/settings.py'
--- settings.py	2019-03-04 17:53:53 +0000
+++ mainpage/settings.py	2019-04-07 09:29:16 +0000
@@ -3,7 +3,7 @@
 # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
 import os
 
-BASE_DIR = os.path.dirname(os.path.abspath(__file__))
+BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 DEBUG = True
 
 ADMINS = (
@@ -39,6 +39,7 @@
 
 SITE_ID = 1
 
+#LOGIN_URL = '/registration/login/'
 # Where should logged in user go by default?
 LOGIN_REDIRECT_URL = '/'
 
@@ -68,7 +69,7 @@
 # Make this unique, and don't share it with anybody.
 SECRET_KEY = '#*bc7*q0-br42fc&6l^x@zzk&(=-#gr!)fn@t30n54n05jkqcu'
 
-ROOT_URLCONF = 'urls'
+ROOT_URLCONF = 'mainpage.urls'
 
 # List of finder classes that know how to find static files in
 # various locations.
@@ -132,7 +133,7 @@
     
     # Foreign middleware
     'dj_pagination.middleware.PaginationMiddleware',
-    'online_users_middleware.OnlineNowMiddleware',
+    'mainpage.online_users_middleware.OnlineNowMiddleware',
 ]
 
 TEMPLATES = [

=== renamed file 'sitemap_urls.py' => 'mainpage/sitemap_urls.py'
--- sitemap_urls.py	2018-03-21 21:10:46 +0000
+++ mainpage/sitemap_urls.py	2019-04-07 09:29:16 +0000
@@ -1,6 +1,5 @@
-from django.conf.urls import *
+from django.conf.urls import url
 
-from mainpage.views import mainpage
 from django.contrib.sitemaps.views import sitemap
 from static_sitemap import StaticViewSitemap
 from wiki.sitemap import *

=== renamed file 'static_sitemap.py' => 'mainpage/static_sitemap.py'
=== modified file 'mainpage/templatetags/wl_markdown.py'
--- mainpage/templatetags/wl_markdown.py	2018-11-30 14:31:47 +0000
+++ mainpage/templatetags/wl_markdown.py	2019-04-07 09:29:16 +0000
@@ -13,7 +13,7 @@
 from django.conf import settings
 from django.utils.encoding import smart_str, force_unicode
 from django.utils.safestring import mark_safe
-from settings import BLEACH_ALLOWED_TAGS, BLEACH_ALLOWED_ATTRIBUTES
+from django.conf import settings
 from markdownextensions.semanticwikilinks.mdx_semanticwikilinks import SemanticWikiLinkExtension
 
 # Try to get a not so fully broken markdown module
@@ -38,17 +38,17 @@
 
 # We will also need the site domain
 from django.contrib.sites.models import Site
-from settings import SITE_ID, SMILEYS, SMILEY_DIR
+from django.conf import settings
 
 try:
-    _domain = Site.objects.get(pk=SITE_ID).domain
+    _domain = Site.objects.get(pk=settings.SITE_ID).domain
 except:
     _domain = ''
 
 # Getting local domain lists
 try:
-    from settings import LOCAL_DOMAINS as _LOCAL_DOMAINS
-    LOCAL_DOMAINS = [_domain] + _LOCAL_DOMAINS
+    from django.conf import settings
+    LOCAL_DOMAINS = [_domain] + settings.LOCAL_DOMAINS
 except ImportError:
     LOCAL_DOMAINS = [_domain]
 
@@ -76,12 +76,12 @@
 
         for i, word in enumerate(words):
             smiley = ''
-            for sc, img in SMILEYS:
+            for sc, img in settings.SMILEYS:
                 if word == sc:
                     smiley = img
             if smiley:
                 img_tag = BeautifulSoup(features='lxml').new_tag('img')
-                img_tag['src'] = '{}{}'.format(SMILEY_DIR, smiley)
+                img_tag['src'] = '{}{}'.format(settings.SMILEY_DIR, smiley)
                 img_tag['alt'] = smiley
                 tmp_content.append(img_tag)
                 # apply a space after the smiley
@@ -204,7 +204,7 @@
     if bs4_string.parent.name.lower() == 'code':
         return False
 
-    for sc in SMILEYS:
+    for sc in settings.SMILEYS:
         if sc[0] in bs4_string:
             return True
     return False
@@ -223,7 +223,7 @@
     # Sanitize posts from potencial untrusted users (Forum/Wiki/Maps)
     if 'bleachit' in args:
         html = mark_safe(bleach.clean(
-            html, tags=BLEACH_ALLOWED_TAGS, attributes=BLEACH_ALLOWED_ATTRIBUTES))
+            html, tags=settings.BLEACH_ALLOWED_TAGS, attributes=settings.BLEACH_ALLOWED_ATTRIBUTES))
 
     # Prepare the html and apply smileys and classes.
     # BeautifulSoup objects are all references, so changing a variable

=== renamed file 'urls.py' => 'mainpage/urls.py'
--- urls.py	2019-03-16 10:11:05 +0000
+++ mainpage/urls.py	2019-04-07 09:29:16 +0000
@@ -13,7 +13,7 @@
 
 urlpatterns = [
     # Creating a sitemap.xml
-    url(r'^sitemap\.xml/', include('sitemap_urls')),
+    url(r'^sitemap\.xml/', include('mainpage.sitemap_urls')),
     # Static view of robots.txt
     url(r'^robots\.txt/', TemplateView.as_view(template_name='robots.txt', content_type="text/plain")),
 
@@ -45,7 +45,7 @@
     url(r'^forum/', include('pybb.urls')),
 
     # WL specific:
-    url(r'^', include('mainpage.urls')),
+    url(r'^', include('mainpage.mainpage_urls')),
     url(r'^help/(?P<path>.*)', RedirectView.as_view(url='/encyclopedia/%(path)s',
                                                    permanent=True)),  # to not break old links
     url(r'^encyclopedia/', include('wlhelp.urls')),

=== modified file 'mainpage/utest/test_wl_markdown.py'
--- mainpage/utest/test_wl_markdown.py	2016-12-13 18:28:51 +0000
+++ mainpage/utest/test_wl_markdown.py	2019-04-07 09:29:16 +0000
@@ -17,9 +17,9 @@
 import unittest
 from wiki.models import Article
 from django.contrib.sites.models import Site
-from settings import SITE_ID
+from django.conf import settings
 from django.test import TestCase as DBTestCase
-_domain = Site.objects.get(pk=SITE_ID).domain
+_domain = Site.objects.get(pk=settings.SITE_ID).domain
 
 from templatetags.wl_markdown import do_wl_markdown
 

=== modified file 'mainpage/views.py'
--- mainpage/views.py	2019-02-09 14:50:47 +0000
+++ mainpage/views.py	2019-04-07 09:29:16 +0000
@@ -1,4 +1,4 @@
-from settings import WIDELANDS_SVN_DIR, INQUIRY_RECIPIENTS
+from django.conf import settings
 from templatetags.wl_markdown import do_wl_markdown
 from operator import itemgetter
 from django.core.mail import send_mail
@@ -33,7 +33,7 @@
 
             # get email addresses which are in form of ('name','email'),
             recipients = []
-            for recipient in INQUIRY_RECIPIENTS:
+            for recipient in settings.INQUIRY_RECIPIENTS:
                 recipients.append(recipient[1])
 
             send_mail(subject, message, sender,
@@ -46,7 +46,7 @@
 
     return render(request, 'mainpage/legal_notice.html', {
         'form': form,
-        'inquiry_recipients': INQUIRY_RECIPIENTS,
+        'inquiry_recipients': settings.INQUIRY_RECIPIENTS,
     })
 
 
@@ -67,7 +67,7 @@
     txt = '[TOC]\n\n'
     transl_files = []
     transl_list = []
-    path = os.path.normpath(WIDELANDS_SVN_DIR + 'data/i18n/locales/')
+    path = os.path.normpath(settings.WIDELANDS_SVN_DIR + 'data/i18n/locales/')
     try:
         transl_files = os.listdir(path)
         if transl_files:
@@ -100,7 +100,7 @@
     # Get other developers, put in the translators list
     # at given position and prepare all for wl_markdown
     try:
-        with open(WIDELANDS_SVN_DIR + 'data/txts/developers.json', 'r') as f:
+        with open(settings.WIDELANDS_SVN_DIR + 'data/txts/developers.json', 'r') as f:
             json_data = json.load(f)['developers']
 
         for head in json_data:
@@ -145,7 +145,7 @@
     This replaces the wiki changelog
 
     """
-    data = codecs.open(WIDELANDS_SVN_DIR + 'ChangeLog', encoding='utf-8', mode='r').read()
+    data = codecs.open(settings.WIDELANDS_SVN_DIR + 'ChangeLog', encoding='utf-8', mode='r').read()
     return render(request, 'mainpage/changelog.html',
                   {'changelog': data},
                   )

=== renamed file 'wl_utils.py' => 'mainpage/wl_utils.py'
=== renamed file 'wlwebsite_wsgi.py' => 'mainpage/wlwebsite_wsgi.py'
--- wlwebsite_wsgi.py	2016-12-13 18:28:51 +0000
+++ mainpage/wlwebsite_wsgi.py	2019-04-07 09:29:16 +0000
@@ -22,7 +22,7 @@
 sys.path.append(code_directory)
 sys.path.append(os.path.join(code_directory, 'widelands'))
 
-os.environ['DJANGO_SETTINGS_MODULE'] = 'widelands.settings'
+os.environ['DJANGO_SETTINGS_MODULE'] = 'mainpage.settings'
 
 if os.path.exists('/usr/games'):
     os.environ['PATH'] += ':/usr/games'

=== modified file 'manage.py'
--- manage.py	2016-12-13 18:28:51 +0000
+++ manage.py	2019-04-07 09:29:16 +0000
@@ -3,7 +3,7 @@
 import sys
 
 if __name__ == '__main__':
-    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'settings')
+    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mainpage.settings')
 
     from django.core.management import execute_from_command_line
 

=== modified file 'news/models.py'
--- news/models.py	2018-04-08 14:40:17 +0000
+++ news/models.py	2019-04-07 09:29:16 +0000
@@ -6,7 +6,6 @@
 from news.managers import PublicManager
 from django.urls import reverse
 import datetime
-import settings
 import tagging
 
 

=== added directory 'privacy_policy/templates'
=== added directory 'privacy_policy/templates/privacy_policy'
=== renamed file 'mainpage/templates/mainpage/privacy_policy.html' => 'privacy_policy/templates/privacy_policy/privacy_policy.html'
=== modified file 'privacy_policy/views.py'
--- privacy_policy/views.py	2019-02-09 19:57:06 +0000
+++ privacy_policy/views.py	2019-04-07 09:29:16 +0000
@@ -43,4 +43,4 @@
         'cur_lang': current_lang,
     }
 
-    return render(request, 'mainpage/privacy_policy.html', context)
+    return render(request, 'privacy_policy/privacy_policy.html', context)

=== modified file 'threadedcomments/views.py'
--- threadedcomments/views.py	2018-10-10 18:02:55 +0000
+++ threadedcomments/views.py	2019-04-07 09:29:16 +0000
@@ -8,7 +8,7 @@
 from threadedcomments.forms import ThreadedCommentForm
 from threadedcomments.models import ThreadedComment, DEFAULT_MAX_COMMENT_LENGTH
 from threadedcomments.utils import JSONResponse, XMLResponse
-from wl_utils import get_real_ip
+from mainpage.wl_utils import get_real_ip
 
 
 def _adjust_max_comment_length(form, field_name='comment'):

=== modified file 'widelandslib/make_flow_diagram.py'
--- widelandslib/make_flow_diagram.py	2016-12-13 18:28:51 +0000
+++ widelandslib/make_flow_diagram.py	2019-04-07 09:29:16 +0000
@@ -3,7 +3,7 @@
 
 import pydot as d
 
-from settings import MEDIA_ROOT
+from django.conf import settings
 from widelandslib.tribe import *
 
 from os import makedirs, path
@@ -182,7 +182,7 @@
     global tdir
     tdir = mkdtemp(prefix='widelands-help')
 
-    json_directory = path.normpath(MEDIA_ROOT + '/map_object_info')
+    json_directory = path.normpath(settings.MEDIA_ROOT + '/map_object_info')
     tribeinfo_file = open(path.normpath(
         json_directory + '/tribe_' + tribe_name + '.json'), 'r')
     tribeinfo = json.load(tribeinfo_file)

=== modified file 'widelandslib/tribe.py'
--- widelandslib/tribe.py	2016-12-13 18:28:51 +0000
+++ widelandslib/tribe.py	2019-04-07 09:29:16 +0000
@@ -4,8 +4,8 @@
 import os.path as p
 import json
 try:
-    from settings import WIDELANDS_SVN_DIR
-    basedir = WIDELANDS_SVN_DIR
+    from django.conf import settings
+    basedir = settings.WIDELANDS_SVN_DIR
 except:
     basedir = p.join(p.dirname(__file__), p.pardir, p.pardir)
 
@@ -20,7 +20,7 @@
 
     @property
     def image(self):
-        return p.abspath(p.join(WIDELANDS_SVN_DIR, 'data', self._json['icon']))
+        return p.abspath(p.join(settings.WIDELANDS_SVN_DIR, 'data', self._json['icon']))
 
 
 class Ware(BaseDescr):

=== renamed file 'diff_match_patch.py' => 'wiki/diff_match_patch.py'
=== modified file 'wiki/forms.py'
--- wiki/forms.py	2018-09-18 06:42:18 +0000
+++ wiki/forms.py	2019-04-07 09:29:16 +0000
@@ -7,14 +7,15 @@
 
 from wiki.models import Article
 from wiki.models import ChangeSet
-from settings import WIKI_WORD_RE
+from django.conf import settings
+
 try:
     from notification import models as notification
 except:
     notification = None
 
 
-wikiword_pattern = re.compile('^' + WIKI_WORD_RE + '$')
+wikiword_pattern = re.compile('^' + settings.WIKI_WORD_RE + '$')
 
 
 class ArticleForm(forms.ModelForm):

=== modified file 'wiki/urls.py'
--- wiki/urls.py	2017-02-24 20:12:28 +0000
+++ wiki/urls.py	2019-04-07 09:29:16 +0000
@@ -3,7 +3,7 @@
 from django.conf.urls import *
 from django.http import HttpResponseRedirect
 from wiki import views, models
-from settings import WIKI_URL_RE
+from django.conf import settings
 from django.views.generic import RedirectView
 from wiki.feeds import RssHistoryFeed, AtomHistoryFeed, RssArticleHistoryFeed, AtomArticleHistoryFeed
 
@@ -25,38 +25,38 @@
     # Feeds
     url(r'^feeds/rss/$', RssHistoryFeed(), name='wiki_history_feed_rss'),
     url(r'^feeds/atom/$', AtomHistoryFeed(), name='wiki_history_feed_atom'),
-    url(r'^(?P<title>' + WIKI_URL_RE + r')/feeds/rss/$', RssArticleHistoryFeed(),
+    url(r'^(?P<title>' + settings.WIKI_URL_RE + r')/feeds/rss/$', RssArticleHistoryFeed(),
         name='wiki_article_history_feed_rss'),
-    url(r'^(?P<title>' + WIKI_URL_RE + r')/feeds/atom/$', AtomArticleHistoryFeed(),
+    url(r'^(?P<title>' + settings.WIKI_URL_RE + r')/feeds/atom/$', AtomArticleHistoryFeed(),
         name='wiki_article_history_feed_atom'),
 
-    url(r'^(?P<title>' + WIKI_URL_RE + r')/$',
+    url(r'^(?P<title>' + settings.WIKI_URL_RE + r')/$',
         views.view_article, name='wiki_article'),
 
-    url(r'^(?P<title>' + WIKI_URL_RE + r')/(?P<revision>\d+)/$',
+    url(r'^(?P<title>' + settings.WIKI_URL_RE + r')/(?P<revision>\d+)/$',
         views.view_article, name='wiki_article_revision'),
 
-    url(r'^edit/(?P<title>' + WIKI_URL_RE + r')/$',
+    url(r'^edit/(?P<title>' + settings.WIKI_URL_RE + r')/$',
         views.edit_article, name='wiki_edit'),
 
-    url(r'observe/(?P<title>' + WIKI_URL_RE + r')/$',
+    url(r'observe/(?P<title>' + settings.WIKI_URL_RE + r')/$',
         views.observe_article, name='wiki_observe'),
 
-    url(r'observe/(?P<title>' + WIKI_URL_RE + r')/stop/$', views.stop_observing_article,
+    url(r'observe/(?P<title>' + settings.WIKI_URL_RE + r')/stop/$', views.stop_observing_article,
         name='wiki_stop_observing'),
 
-    url(r'^history/(?P<title>' + WIKI_URL_RE + r')/$',
+    url(r'^history/(?P<title>' + settings.WIKI_URL_RE + r')/$',
         views.article_history, name='wiki_article_history'),
 
-    url(r'^history/(?P<title>' + WIKI_URL_RE + r')/changeset/(?P<revision>\d+)/$', views.view_changeset,
+    url(r'^history/(?P<title>' + settings.WIKI_URL_RE + r')/changeset/(?P<revision>\d+)/$', views.view_changeset,
         name='wiki_changeset',),
 
-    url(r'^history/(?P<title>' + WIKI_URL_RE + r')/changeset/(?P<revision_from>\d+)/(?P<revision>\d+)/$', views.view_changeset,
+    url(r'^history/(?P<title>' + settings.WIKI_URL_RE + r')/changeset/(?P<revision_from>\d+)/(?P<revision>\d+)/$', views.view_changeset,
         name='wiki_changeset_compare',),
 
-    url(r'^history/(?P<title>' + WIKI_URL_RE + r')/revert/$', views.revert_to_revision,
+    url(r'^history/(?P<title>' + settings.WIKI_URL_RE + r')/revert/$', views.revert_to_revision,
         name='wiki_revert_to_revision'),
 
-    url(r'^backlinks/(?P<title>' + WIKI_URL_RE + r')/$', views.backlinks,
+    url(r'^backlinks/(?P<title>' + settings.WIKI_URL_RE + r')/$', views.backlinks,
         name='backlinks'),
 ]

=== modified file 'wiki/views.py'
--- wiki/views.py	2018-12-31 10:36:13 +0000
+++ wiki/views.py	2019-04-07 09:29:16 +0000
@@ -20,8 +20,8 @@
 from mainpage.templatetags.wl_markdown import do_wl_markdown
 from markdownextensions.semanticwikilinks.mdx_semanticwikilinks import WIKILINK_RE
 
-from wl_utils import get_real_ip
-from wl_utils import get_valid_cache_key
+from mainpage.wl_utils import get_real_ip
+from mainpage.wl_utils import get_valid_cache_key
 
 import re
 import urllib

=== modified file 'wlggz/migrations/0001_initial.py'
--- wlggz/migrations/0001_initial.py	2016-12-13 18:28:51 +0000
+++ wlggz/migrations/0001_initial.py	2019-04-07 09:29:16 +0000
@@ -3,7 +3,7 @@
 
 from django.db import models, migrations
 from django.conf import settings
-import wl_utils
+import mainpage.wl_utils as wl_utils
 
 
 class Migration(migrations.Migration):

=== modified file 'wlggz/models.py'
--- wlggz/models.py	2016-12-13 18:28:51 +0000
+++ wlggz/models.py	2019-04-07 09:29:16 +0000
@@ -9,12 +9,10 @@
 
 from django.db import models
 from django.contrib.auth.models import User
-from wl_utils import AutoOneToOneField
+from mainpage.wl_utils import AutoOneToOneField
 from django.utils.translation import ugettext_lazy as _
 from pybb.models import Post
 
-import settings
-
 
 class GGZAuth(models.Model):
     user = AutoOneToOneField(

=== modified file 'wlhelp/management/commands/update_help.py'
--- wlhelp/management/commands/update_help.py	2018-03-24 09:22:11 +0000
+++ wlhelp/management/commands/update_help.py	2019-04-07 09:29:16 +0000
@@ -26,7 +26,7 @@
 import subprocess
 import collections
 
-from settings import MEDIA_ROOT, WIDELANDS_SVN_DIR, MEDIA_URL
+from django.conf import settings
 
 from widelandslib.tribe import *
 from widelandslib.make_flow_diagram import make_all_subgraphs
@@ -45,8 +45,8 @@
         self._delete_old_media_dir(
             name)  # You can deactivate this line if you don't need to clean house.
 
-        base_directory = os.path.normpath(WIDELANDS_SVN_DIR + '/data')
-        json_directory = os.path.normpath(MEDIA_ROOT + '/map_object_info')
+        base_directory = os.path.normpath(settings.WIDELANDS_SVN_DIR + '/data')
+        json_directory = os.path.normpath(settings.MEDIA_ROOT + '/map_object_info')
 
         tribeinfo_file = open(os.path.normpath(
             json_directory + '/tribe_' + name + '.json'), 'r')
@@ -59,7 +59,7 @@
         self._to.descr = tribeinfo['tooltip']
         # copy icon
         dn = os.path.normpath('%s/wlhelp/img/%s/' %
-                              (MEDIA_ROOT, tribeinfo['name']))
+                              (settings.MEDIA_ROOT, tribeinfo['name']))
         try:
             os.makedirs(dn)
         except OSError, o:
@@ -69,7 +69,7 @@
         file = os.path.normpath(base_directory + '/' + tribeinfo['icon'])
         shutil.copy(file, new_name)
         self._to.icon_url = path.normpath(
-            '%s/%s' % (MEDIA_URL, new_name[len(MEDIA_ROOT):]))
+            '%s/%s' % (settings.MEDIA_URL, new_name[len(settings.MEDIA_ROOT):]))
         self._to.save()
 
     def parse(self, tribename, base_directory, json_directory):
@@ -117,7 +117,7 @@
 
         print('Deleting old media files...')
         sdir = os.path.normpath(os.path.join(
-            MEDIA_ROOT, 'wlhelp/img', tribename))
+            settings.MEDIA_ROOT, 'wlhelp/img', tribename))
         if os.path.exists(sdir):
             shutil.rmtree(sdir)
 
@@ -144,7 +144,7 @@
 
         """
         dn = os.path.normpath('%s/wlhelp/img/%s/%s/' %
-                              (MEDIA_ROOT, self._to.name, name))
+                              (settings.MEDIA_ROOT, self._to.name, name))
         try:
             os.makedirs(dn)
         except OSError, o:
@@ -153,7 +153,7 @@
         new_name = path.join(dn, fname)
         shutil.copy(file, new_name)
 
-        return '%s%s' % (MEDIA_URL, new_name[len(MEDIA_ROOT):])
+        return '%s%s' % (settings.MEDIA_URL, new_name[len(settings.MEDIA_ROOT):])
 
     def _parse_workers(self, base_directory, workersinfo):
         """Put the workers into the database."""
@@ -283,9 +283,9 @@
     help =\
         '''Regenerates and parses the json files in a current checkout. '''
 
-    def handle(self, directory=os.path.normpath(WIDELANDS_SVN_DIR + '/data'), **kwargs):
+    def handle(self, directory=os.path.normpath(settings.WIDELANDS_SVN_DIR + '/data'), **kwargs):
 
-        json_directory = os.path.normpath(MEDIA_ROOT + '/map_object_info')
+        json_directory = os.path.normpath(settings.MEDIA_ROOT + '/map_object_info')
 
         if not os.path.exists(json_directory):
             os.makedirs(json_directory)
@@ -295,7 +295,7 @@
         # First, we make sure that JSON files have been generated.
         current_dir = os.path.dirname(os.path.realpath(__file__))
         is_json_valid = False
-        os.chdir(WIDELANDS_SVN_DIR)
+        os.chdir(settings.WIDELANDS_SVN_DIR)
         try:
             subprocess.check_call(
                 [os.path.normpath('wl_map_object_info'), json_directory])
@@ -306,7 +306,7 @@
 
         # Now we validate that they are indeed JSON files (syntax check only)
         validator_script = os.path.normpath(
-            WIDELANDS_SVN_DIR + '/utils/validate_json.py')
+            settings.WIDELANDS_SVN_DIR + '/utils/validate_json.py')
         if not os.path.isfile(validator_script):
             print("Wrong path for 'utils/validate_json.py': " +
                   validator_script + ' does not exist!')

=== modified file 'wlhelp/management/commands/update_help_pdf.py'
--- wlhelp/management/commands/update_help_pdf.py	2016-07-02 12:38:06 +0000
+++ wlhelp/management/commands/update_help_pdf.py	2019-04-07 09:29:16 +0000
@@ -1,7 +1,7 @@
 from ...models import Tribe as TribeModel
 
 from django.core.management.base import BaseCommand, CommandError
-from settings import MEDIA_ROOT, WIDELANDS_SVN_DIR, MEDIA_URL
+from django.conf import settings
 
 import os
 import shutil
@@ -17,7 +17,7 @@
     help =\
         """Update the overview pdfs of all tribes in a current checkout"""
 
-    def handle(self, json_directory=os.path.normpath(MEDIA_ROOT + '/map_object_info'), **kwargs):
+    def handle(self, json_directory=os.path.normpath(settings.MEDIA_ROOT + '/map_object_info'), **kwargs):
         source_file = open(os.path.normpath(
             json_directory + '/tribes.json'), 'r')
         tribesinfo = json.load(source_file)
@@ -31,7 +31,7 @@
             pdffile = path.join(gdir, tribename + '.pdf')
             giffile = path.join(gdir, tribename + '.gif')
 
-            targetdir = path.normpath(path.join(MEDIA_ROOT, 'wlhelp',
+            targetdir = path.normpath(path.join(settings.MEDIA_ROOT, 'wlhelp',
                                                 'network_graphs', tribename))
 
             try:
@@ -45,9 +45,9 @@
             tribe = Tribe.objects.get(name=tribename)
             if tribe:
                 tribe.network_pdf_url = path.normpath(
-                    '%s/%s/%s' % (MEDIA_URL, targetdir[len(MEDIA_ROOT):], tribename + '.pdf'))
+                    '%s/%s/%s' % (settings.MEDIA_URL, targetdir[len(settings.MEDIA_ROOT):], tribename + '.pdf'))
                 tribe.network_gif_url = path.normpath(
-                    '%s/%s/%s' % (MEDIA_URL, targetdir[len(MEDIA_ROOT):], tribename + '.gif'))
+                    '%s/%s/%s' % (settings.MEDIA_URL, targetdir[len(settings.MEDIA_ROOT):], tribename + '.gif'))
                 tribe.save()
             else:
                 print 'Could not set tribe urls'

=== modified file 'wlhelp/views.py'
--- wlhelp/views.py	2018-03-09 12:12:02 +0000
+++ wlhelp/views.py	2019-04-07 09:29:16 +0000
@@ -3,8 +3,6 @@
 from django.http import HttpResponse
 from .models import Worker, Ware, Building, Tribe
 
-from settings import WIDELANDS_SVN_DIR, MEDIA_ROOT
-
 
 def index(request):
     tribes = Tribe.objects.all().order_by('displayname')

=== modified file 'wlimages/models.py'
--- wlimages/models.py	2018-10-03 20:25:05 +0000
+++ wlimages/models.py	2019-04-07 09:29:16 +0000
@@ -6,7 +6,7 @@
 from django.utils.translation import ugettext_lazy as _
 from django.db import IntegrityError
 from datetime import datetime
-from settings import MEDIA_ROOT, MEDIA_URL
+from django.conf import settings
 from django.core.files.storage import FileSystemStorage
 
 
@@ -39,7 +39,7 @@
         safe_filename = storage.get_valid_name(image.name)
         im = self.create(content_type=content_type, object_id=object_id,
                          user=user, revision=1, name=image.name)
-        path = '%swlimages/%s' % (MEDIA_ROOT, safe_filename)
+        path = '%swlimages/%s' % (settings.MEDIA_ROOT, safe_filename)
 
         destination = open(path, 'wb')
         for chunk in image.chunks():

=== modified file 'wlmaps/forms.py'
--- wlmaps/forms.py	2017-03-07 16:02:24 +0000
+++ wlmaps/forms.py	2019-04-07 09:29:16 +0000
@@ -7,11 +7,10 @@
 from django import forms
 from django.forms import ModelForm
 from django.core.files.storage import default_storage
+from django.conf import settings
 
-from settings import MEDIA_ROOT
 from wlmaps.models import Map
 import os
-from settings import WIDELANDS_SVN_DIR
 
 class UploadMapForm(ModelForm):
     """
@@ -46,7 +45,7 @@
         try:
             # Try to make a safe filename
             safe_name = default_storage.get_valid_name(mem_file_obj.name)
-            file_path = MEDIA_ROOT + 'wlmaps/maps/' + safe_name
+            file_path = settings.MEDIA_ROOT + 'wlmaps/maps/' + safe_name
             saved_file = default_storage.save(file_path, mem_file_obj)
         except UnicodeEncodeError:
             self._errors['file'] = self.error_class(
@@ -57,7 +56,7 @@
         try:
             # call map info tool to generate minimap and json info file
             old_cwd = os.getcwd()
-            os.chdir(WIDELANDS_SVN_DIR)
+            os.chdir(settings.WIDELANDS_SVN_DIR)
             check_call(['wl_map_info', saved_file])
 
             # TODO(shevonar): delete file because it will be saved again when
@@ -90,7 +89,7 @@
 
         # mapinfo["minimap"] is an absolute path.
         # We partition it to get the correct file path
-        minimap_path = mapinfo['minimap'].partition(MEDIA_ROOT)[2]
+        minimap_path = mapinfo['minimap'].partition(settings.MEDIA_ROOT)[2]
         self.instance.minimap = '/' + minimap_path
 
         # the json file is no longer needed

=== modified file 'wlmaps/tests/test_views.py'
--- wlmaps/tests/test_views.py	2018-11-18 17:22:39 +0000
+++ wlmaps/tests/test_views.py	2019-04-07 09:29:16 +0000
@@ -11,8 +11,6 @@
 
 import os
 
-from settings import MEDIA_ROOT
-
 elven_forests = os.path.dirname(__file__) + '/data/Elven Forests.wmf'
 
 ###########

=== modified file 'wlmaps/views.py'
--- wlmaps/views.py	2018-11-18 17:22:39 +0000
+++ wlmaps/views.py	2019-04-07 09:29:16 +0000
@@ -7,9 +7,10 @@
 from django.contrib.auth.decorators import login_required
 from django.http import HttpResponseRedirect, HttpResponseNotAllowed, HttpResponse, HttpResponseBadRequest
 from django.urls import reverse
+from django.conf import settings
 import models
-from settings import MAPS_PER_PAGE
-from wl_utils import get_real_ip
+
+from mainpage.wl_utils import get_real_ip
 import os
 
 
@@ -20,7 +21,7 @@
     maps = models.Map.objects.all()
     return render(request, 'wlmaps/index.html',
                               {'maps': maps,
-                               'maps_per_page': MAPS_PER_PAGE,
+                               'maps_per_page': settings.MAPS_PER_PAGE,
                                })
 
 

=== modified file 'wlprofile/forms.py'
--- wlprofile/forms.py	2016-12-13 18:28:51 +0000
+++ wlprofile/forms.py	2019-04-07 09:29:16 +0000
@@ -9,7 +9,7 @@
 from django import forms
 from models import Profile
 
-import settings
+from django.conf import settings
 import re
 
 

=== modified file 'wlprofile/migrations/0001_initial.py'
--- wlprofile/migrations/0001_initial.py	2016-12-13 18:28:51 +0000
+++ wlprofile/migrations/0001_initial.py	2019-04-07 09:29:16 +0000
@@ -3,7 +3,7 @@
 
 from django.db import models, migrations
 from django.conf import settings
-import wl_utils
+import mainpage.wl_utils as wl_utils
 import wlprofile.fields
 
 

=== modified file 'wlprofile/models.py'
--- wlprofile/models.py	2018-12-21 09:50:32 +0000
+++ wlprofile/models.py	2019-04-07 09:29:16 +0000
@@ -1,11 +1,11 @@
 from django.db import models
 from django.contrib.auth.models import User
 from fields import ExtendedImageField
-from wl_utils import AutoOneToOneField
+from mainpage.wl_utils import AutoOneToOneField
 from django.utils.translation import ugettext_lazy as _
 from pybb.models import Post
 
-import settings
+from django.conf import settings
 
 TZ_CHOICES = [(float(x[0]), x[1]) for x in (
     (-12, '-12'), (-11, '-11'), (-10, '-10'), (-9.5, '-09.5'), (-9, '-09'),

=== modified file 'wlprofile/templatetags/custom_date.py'
--- wlprofile/templatetags/custom_date.py	2018-04-08 14:40:17 +0000
+++ wlprofile/templatetags/custom_date.py	2019-04-07 09:29:16 +0000
@@ -18,7 +18,7 @@
 from django.contrib.auth.models import User
 import re
 from datetime import date as ddate, tzinfo, timedelta, datetime
-from settings import DEFAULT_TIME_ZONE, DEFAULT_TIME_DISPLAY
+from django.conf import settings
 
 register = template.Library()
 
@@ -132,12 +132,12 @@
     """If this user is logged in, return his representation, otherwise, return
     a sane default."""
     if not user.is_authenticated:
-        return do_custom_date(DEFAULT_TIME_DISPLAY, date, float(DEFAULT_TIME_ZONE))
+        return do_custom_date(settings.DEFAULT_TIME_DISPLAY, date, float(settings.DEFAULT_TIME_ZONE))
     try:
         userprofile = User.objects.get(username=user).wlprofile
         return do_custom_date(userprofile.time_display, date, userprofile.time_zone)
     except ObjectDoesNotExist:
-        return do_custom_date(DEFAULT_TIME_DISPLAY, date, float(DEFAULT_TIME_ZONE))
+        return do_custom_date(settings.DEFAULT_TIME_DISPLAY, date, float(settings.DEFAULT_TIME_ZONE))
 
 custom_date.is_safe = False
 

=== modified file 'wlscreens/models.py'
--- wlscreens/models.py	2018-04-08 16:23:55 +0000
+++ wlscreens/models.py	2019-04-07 09:29:16 +0000
@@ -7,7 +7,7 @@
 from django.core.files.uploadedfile import SimpleUploadedFile, UploadedFile
 from django.core.files.storage import FileSystemStorage
 import os
-from settings import THUMBNAIL_SIZE, MEDIA_ROOT
+from django.conf import settings
 from django.urls import reverse
 
 
@@ -21,7 +21,7 @@
         # If the filename already exists, remove it as if it was a true file
         # system
         if self.exists(name):
-            os.remove(os.path.join(MEDIA_ROOT, name))
+            os.remove(os.path.join(settings.MEDIA_ROOT, name))
         return name
 
 
@@ -80,7 +80,7 @@
         if image.mode not in ('L', 'RGB'):
             image = image.convert('RGB')
 
-        image.thumbnail(THUMBNAIL_SIZE, Image.ANTIALIAS)
+        image.thumbnail(settings.THUMBNAIL_SIZE, Image.ANTIALIAS)
 
         # Save the thumbnail
         temp_handle = StringIO()

=== modified file 'wlscreens/tests/test_models.py'
--- wlscreens/tests/test_models.py	2016-12-13 18:28:51 +0000
+++ wlscreens/tests/test_models.py	2019-04-07 09:29:16 +0000
@@ -9,7 +9,7 @@
 # Last Modified: $Date$
 #
 
-from settings import THUMBNAIL_SIZE
+from django.conf import settings
 from django.test import TestCase as DjangoTest
 from django.db import IntegrityError
 from django.core.files.uploadedfile import SimpleUploadedFile
@@ -71,7 +71,7 @@
                                       screenshot=self.img,
                                       comment='This rockz!')
         self.assertEqual(i.pk, 1)
-        self.assertEqual(i.thumbnail.width, THUMBNAIL_SIZE[0])
+        self.assertEqual(i.thumbnail.width, settings.THUMBNAIL_SIZE[0])
 
 
 class TestScreenshot(_ScreenshotBase):


Follow ups