Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 68a9974df8 | |||
| efb38d5825 | |||
| a48d2175ba | |||
| 8bffc8f82a | |||
| 1870635697 | |||
| 4e0c4a00e2 | |||
| 4b055f7ffa |
+65
-35
@@ -1,62 +1,92 @@
|
||||
language: python
|
||||
python: 3.5
|
||||
env:
|
||||
- TOX_ENV=py27-dj17
|
||||
- TOX_ENV=py27-dj18
|
||||
- TOX_ENV=py27-dj19
|
||||
- TOX_ENV=py27-dj110
|
||||
- TOX_ENV=py27-dj111
|
||||
- TOX_ENV=py34-dj17
|
||||
- TOX_ENV=py34-dj18
|
||||
- TOX_ENV=py34-dj19
|
||||
- TOX_ENV=py34-dj110
|
||||
- TOX_ENV=py34-dj111
|
||||
- TOX_ENV=py34-dj20
|
||||
- TOX_ENV=py35-dj18
|
||||
- TOX_ENV=py35-dj19
|
||||
- TOX_ENV=py35-dj110
|
||||
- TOX_ENV=py35-dj111
|
||||
- TOX_ENV=py35-dj20
|
||||
- TOX_ENV=py35-dj21
|
||||
- TOX_ENV=py35-djmaster
|
||||
# - TOX_ENV=py36-dj111
|
||||
# - TOX_ENV=py36-dj20
|
||||
# - TOX_ENV=py36-dj21
|
||||
# - TOX_ENV=py36-djmaster
|
||||
# - TOX_ENV=py37-dj20
|
||||
# - TOX_ENV=py37-dj21
|
||||
# - TOX_ENV=py37-djmaster
|
||||
- TOX_ENV=py27-dj17-sqlite
|
||||
- TOX_ENV=py27-dj17-postgres
|
||||
- TOX_ENV=py27-dj18-sqlite
|
||||
- TOX_ENV=py27-dj18-postgres
|
||||
- TOX_ENV=py27-dj19-sqlite
|
||||
- TOX_ENV=py27-dj19-postgres
|
||||
- TOX_ENV=py27-dj110-sqlite
|
||||
- TOX_ENV=py27-dj110-postgres
|
||||
- TOX_ENV=py27-dj111-sqlite
|
||||
- TOX_ENV=py27-dj111-postgres
|
||||
- TOX_ENV=py34-dj17-sqlite
|
||||
- TOX_ENV=py34-dj17-postgres
|
||||
- TOX_ENV=py34-dj18-sqlite
|
||||
- TOX_ENV=py34-dj18-postgres
|
||||
- TOX_ENV=py34-dj19-sqlite
|
||||
- TOX_ENV=py34-dj19-postgres
|
||||
- TOX_ENV=py34-dj110-sqlite
|
||||
- TOX_ENV=py34-dj110-postgres
|
||||
- TOX_ENV=py34-dj111-sqlite
|
||||
- TOX_ENV=py34-dj111-postgres
|
||||
- TOX_ENV=py34-dj20-sqlite
|
||||
- TOX_ENV=py34-dj20-postgres
|
||||
- TOX_ENV=py35-dj18-sqlite
|
||||
- TOX_ENV=py35-dj18-postgres
|
||||
- TOX_ENV=py35-dj19-sqlite
|
||||
- TOX_ENV=py35-dj19-postgres
|
||||
- TOX_ENV=py35-dj110-sqlite
|
||||
- TOX_ENV=py35-dj110-postgres
|
||||
- TOX_ENV=py35-dj111-sqlite
|
||||
- TOX_ENV=py35-dj111-postgres
|
||||
- TOX_ENV=py35-dj20-sqlite
|
||||
- TOX_ENV=py35-dj20-postgres
|
||||
- TOX_ENV=py35-dj21-sqlite
|
||||
- TOX_ENV=py35-dj21-postgres
|
||||
matrix:
|
||||
include:
|
||||
- python: "3.6"
|
||||
env: TOX_ENV=py36-dj111
|
||||
env:
|
||||
- TOX_ENV=py36-dj111-sqlite
|
||||
- TOX_ENV=py36-dj111-postgres
|
||||
- python: "3.6"
|
||||
env: TOX_ENV=py36-dj20
|
||||
env:
|
||||
- TOX_ENV=py36-dj20-sqlite
|
||||
- TOX_ENV=py36-dj20-postgres
|
||||
- python: "3.6"
|
||||
env: TOX_ENV=py36-dj21
|
||||
env:
|
||||
- TOX_ENV=py36-dj21-sqlite
|
||||
- TOX_ENV=py36-dj21-postgres
|
||||
- python: "3.6"
|
||||
env: TOX_ENV=py36-djmaster
|
||||
env:
|
||||
- TOX_ENV=py36-djmaster-sqlite
|
||||
- TOX_ENV=py36-djmaster-postgres
|
||||
- python: "3.7"
|
||||
env: TOX_ENV=py37-dj20
|
||||
env:
|
||||
- TOX_ENV=py37-dj20-sqlite
|
||||
- TOX_ENV=py37-dj20-postgres
|
||||
dist: xenial
|
||||
language: python
|
||||
sudo: required
|
||||
- python: "3.7"
|
||||
env: TOX_ENV=py37-dj21
|
||||
env:
|
||||
- TOX_ENV=py37-dj21-sqlite
|
||||
- TOX_ENV=py37-dj21-postgres
|
||||
dist: xenial
|
||||
language: python
|
||||
sudo: required
|
||||
- python: "3.7"
|
||||
env: TOX_ENV=py37-djmaster
|
||||
env:
|
||||
- TOX_ENV=py37-djmaster-sqlite
|
||||
- TOX_ENV=py37-djmaster-postgres
|
||||
dist: xenial
|
||||
language: python
|
||||
sudo: required
|
||||
allow_failures:
|
||||
- env: TOX_ENV=py35-djmaster
|
||||
- env: TOX_ENV=py36-djmaster
|
||||
- env: TOX_ENV=py37-djmaster
|
||||
- env:
|
||||
- TOX_ENV=py36-djmaster-sqlite
|
||||
- TOX_ENV=py36-djmaster-postgres
|
||||
- env:
|
||||
- TOX_ENV=py37-djmaster-sqlite
|
||||
- TOX_ENV=py37-djmaster-postgres
|
||||
install:
|
||||
- pip install tox
|
||||
services:
|
||||
- postgresql
|
||||
before_script:
|
||||
- psql -c 'create database admin_interface;' -U postgres
|
||||
script:
|
||||
- tox -e $TOX_ENV
|
||||
sudo: false
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11 on 2018-01-31 11:00
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('admin_interface', '0009_add_enviroment'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='theme',
|
||||
name='active',
|
||||
field=models.BooleanField(default=True, verbose_name='active'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='theme',
|
||||
name='css',
|
||||
field=models.TextField(blank=True, verbose_name='text color'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='theme',
|
||||
name='env',
|
||||
field=models.CharField(choices=[('development', 'Development'), ('testing', 'Testing'), ('staging', 'Staging'), ('production', 'Production')], default='development', max_length=50, verbose_name='environment'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='theme',
|
||||
name='logo',
|
||||
field=models.FileField(blank=True, help_text='Leave blank to use the default Django logo', upload_to='admin-interface/logo/', verbose_name='logo'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='theme',
|
||||
name='name',
|
||||
field=models.CharField(default='Django', max_length=50, verbose_name='name'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='theme',
|
||||
name='title',
|
||||
field=models.CharField(blank=True, default='Django administration', max_length=50, verbose_name='title'),
|
||||
),
|
||||
]
|
||||
@@ -28,16 +28,17 @@ class Theme(models.Model):
|
||||
|
||||
@staticmethod
|
||||
def get_active_theme():
|
||||
objs_active_qs = Theme.objects.filter(active=True)
|
||||
objs_manager = Theme.objects
|
||||
objs_active_qs = objs_manager.filter(active=True)
|
||||
objs_active_ls = list(objs_active_qs)
|
||||
objs_active_count = len(objs_active_ls)
|
||||
|
||||
if objs_active_count == 0:
|
||||
default_obj, default_obj_created = Theme.objects.get_or_create(
|
||||
pk='1', defaults={'active': True})
|
||||
if not default_obj_created:
|
||||
default_obj.set_active()
|
||||
obj = default_obj
|
||||
obj = objs_manager.all().first()
|
||||
if obj:
|
||||
obj.set_active()
|
||||
else:
|
||||
obj = objs_manager.create()
|
||||
|
||||
elif objs_active_count == 1:
|
||||
obj = objs_active_ls[0]
|
||||
|
||||
@@ -1,24 +1,18 @@
|
||||
if (typeof(django) !== 'undefined' && typeof(django.jQuery) !== 'undefined')
|
||||
{
|
||||
if (typeof(django) !== 'undefined' && typeof(django.jQuery) !== 'undefined') {
|
||||
(function($) {
|
||||
|
||||
'use strict';
|
||||
|
||||
$(document).ready(function() {
|
||||
|
||||
$('.cancel-link').click(function(e) {
|
||||
e.preventDefault();
|
||||
var parentWindow = window.parent;
|
||||
if (parentWindow && typeof(parentWindow.dismissRelatedObjectModal) === 'function') {
|
||||
if (parentWindow && typeof(parentWindow.dismissRelatedObjectModal) === 'function' && parentWindow !== window) {
|
||||
parentWindow.dismissRelatedObjectModal();
|
||||
} else {
|
||||
// fallback to default behavior
|
||||
history.back();
|
||||
window.history.back();
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
})(django.jQuery);
|
||||
}
|
||||
@@ -1,3 +1,3 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
__version__ = '0.9.0'
|
||||
__version__ = '0.9.2'
|
||||
|
||||
+24
-3
@@ -62,13 +62,34 @@ TEMPLATES = [{
|
||||
},
|
||||
},]
|
||||
|
||||
DATABASES = {
|
||||
'default': {
|
||||
database_engine = os.environ.get('DATABASE_ENGINE', 'sqlite')
|
||||
database_config = {
|
||||
'sqlite': {
|
||||
'ENGINE': 'django.db.backends.sqlite3',
|
||||
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
|
||||
'NAME': ':memory:',
|
||||
},
|
||||
# 'mysql': {
|
||||
# 'ENGINE': 'django.db.backends.mysql',
|
||||
# 'NAME': 'admin_interface',
|
||||
# 'USER': 'mysql',
|
||||
# 'PASSWORD': 'mysql',
|
||||
# 'HOST': '',
|
||||
# 'PORT': '',
|
||||
# },
|
||||
'postgres': {
|
||||
'ENGINE': 'django.db.backends.postgresql_psycopg2',
|
||||
'NAME': 'admin_interface',
|
||||
'USER': 'postgres',
|
||||
'PASSWORD': 'postgres',
|
||||
'HOST': '',
|
||||
'PORT': '',
|
||||
}
|
||||
}
|
||||
|
||||
DATABASES = {
|
||||
'default': database_config.get(database_engine),
|
||||
}
|
||||
|
||||
MEDIA_ROOT = os.path.join(BASE_DIR, 'admin_interface/public/media/')
|
||||
MEDIA_URL = '/media/'
|
||||
|
||||
|
||||
+24
-24
@@ -28,10 +28,10 @@ class AdminInterfaceTestCase(TestCase):
|
||||
|
||||
def __test_active_theme(self):
|
||||
theme = Theme.get_active_theme()
|
||||
print( theme )
|
||||
print(theme)
|
||||
self.assertTrue(theme != None)
|
||||
self.assertTrue(theme.active)
|
||||
self.assertEqual(Theme.objects.filter( active = True ).count(), 1);
|
||||
self.assertEqual(Theme.objects.filter(active=True).count(), 1);
|
||||
|
||||
def test_default_theme_created_if_no_themes(self):
|
||||
Theme.objects.all().delete()
|
||||
@@ -50,47 +50,47 @@ class AdminInterfaceTestCase(TestCase):
|
||||
|
||||
def test_default_theme_activated_after_update_if_no_active_themes(self):
|
||||
Theme.objects.all().delete()
|
||||
Theme.objects.all().update( active = False )
|
||||
Theme.objects.all().update(active=False)
|
||||
self.__test_active_theme()
|
||||
|
||||
def test_default_theme_activated_after_update_if_multiple_active_themes(self):
|
||||
Theme.objects.all().delete()
|
||||
theme_1 = Theme.objects.create( name = 'Custom 1', active = True )
|
||||
theme_2 = Theme.objects.create( name = 'Custom 2', active = True )
|
||||
theme_3 = Theme.objects.create( name = 'Custom 3', active = True )
|
||||
Theme.objects.update( active = False )
|
||||
Theme.objects.update( active = True )
|
||||
theme_1 = Theme.objects.create(name='Custom 1', active=True)
|
||||
theme_2 = Theme.objects.create(name='Custom 2', active=True)
|
||||
theme_3 = Theme.objects.create(name='Custom 3', active=True)
|
||||
Theme.objects.update(active=False)
|
||||
Theme.objects.update(active=True)
|
||||
self.__test_active_theme()
|
||||
|
||||
def test_default_theme_activated_on_active_theme_deleted(self):
|
||||
Theme.objects.all().delete()
|
||||
theme_1 = Theme.objects.create( name = 'Custom 1', active = True )
|
||||
theme_2 = Theme.objects.create( name = 'Custom 2', active = True )
|
||||
theme_3 = Theme.objects.create( name = 'Custom 3', active = True )
|
||||
Theme.objects.filter( pk = Theme.get_active_theme().pk ).delete()
|
||||
theme_1 = Theme.objects.create(name='Custom 1', active=True)
|
||||
theme_2 = Theme.objects.create(name='Custom 2', active=True)
|
||||
theme_3 = Theme.objects.create(name='Custom 3', active=True)
|
||||
Theme.objects.filter(pk=Theme.get_active_theme().pk).delete()
|
||||
self.__test_active_theme()
|
||||
|
||||
def test_last_theme_activated_on_multiple_themes_created(self):
|
||||
Theme.objects.all().delete()
|
||||
theme_1 = Theme.objects.create( name = 'Custom 1', active = True )
|
||||
theme_2 = Theme.objects.create( name = 'Custom 2', active = True )
|
||||
theme_3 = Theme.objects.create( name = 'Custom 3', active = True )
|
||||
self.assertEqual( Theme.get_active_theme().pk, theme_3.pk )
|
||||
theme_1 = Theme.objects.create(name='Custom 1', active=True)
|
||||
theme_2 = Theme.objects.create(name='Custom 2', active=True)
|
||||
theme_3 = Theme.objects.create(name='Custom 3', active=True)
|
||||
self.assertEqual(Theme.get_active_theme().pk, theme_3.pk)
|
||||
self.__test_active_theme()
|
||||
|
||||
def test_last_theme_activated_on_multiple_themes_activated(self):
|
||||
Theme.objects.all().delete()
|
||||
theme_1 = Theme.objects.create( name = 'Custom 1', active = True )
|
||||
theme_2 = Theme.objects.create( name = 'Custom 2', active = True )
|
||||
theme_3 = Theme.objects.create( name = 'Custom 3', active = True )
|
||||
theme_4 = Theme.objects.create( name = 'Custom 4', active = True )
|
||||
theme_5 = Theme.objects.create( name = 'Custom 5', active = True )
|
||||
themes = [ theme_1, theme_2, theme_3, theme_4, theme_5 ]
|
||||
theme_1 = Theme.objects.create(name='Custom 1', active=True)
|
||||
theme_2 = Theme.objects.create(name='Custom 2', active=True)
|
||||
theme_3 = Theme.objects.create(name='Custom 3', active=True)
|
||||
theme_4 = Theme.objects.create(name='Custom 4', active=True)
|
||||
theme_5 = Theme.objects.create(name='Custom 5', active=True)
|
||||
themes = [theme_1, theme_2, theme_3, theme_4, theme_5]
|
||||
for i in range(5):
|
||||
random.shuffle(themes)
|
||||
for theme in themes:
|
||||
theme.set_active()
|
||||
self.assertEqual( Theme.get_active_theme().pk, theme.pk )
|
||||
self.assertEqual(Theme.get_active_theme().pk, theme.pk)
|
||||
self.__test_active_theme()
|
||||
|
||||
def test_templatetags_get_theme(self):
|
||||
@@ -128,5 +128,5 @@ class AdminInterfaceTestCase(TestCase):
|
||||
|
||||
def test_repr(self):
|
||||
theme = Theme.get_active_theme()
|
||||
self.assertEqual( '{0}'.format(theme), 'Django' )
|
||||
self.assertEqual('{0}'.format(theme), 'Django')
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
[tox]
|
||||
envlist =
|
||||
py27-{dj17,dj18,dj19,dj110,dj111},
|
||||
py34-{dj17,dj18,dj19,dj110,dj111,dj20},
|
||||
py35-{dj18,dj19,dj110,dj111,dj20,dj21,djmaster},
|
||||
py36-{dj18,dj19,dj110,dj111,dj20,dj21,djmaster},
|
||||
py37-{dj20,dj21,djmaster},
|
||||
py27-{dj17,dj18,dj19,dj110,dj111}-{sqlite,postgres},
|
||||
py34-{dj17,dj18,dj19,dj110,dj111,dj20}-{sqlite,postgres},
|
||||
py35-{dj18,dj19,dj110,dj111,dj20,dj21}-{sqlite,postgres},
|
||||
py36-{dj18,dj19,dj110,dj111,dj20,dj21,djmaster}-{sqlite,postgres},
|
||||
py37-{dj20,dj21,djmaster}-{sqlite,postgres},
|
||||
[testenv]
|
||||
passenv = CI TRAVIS TRAVIS_*
|
||||
deps =
|
||||
@@ -16,8 +16,14 @@ deps =
|
||||
dj20: Django >= 2.0, < 2.1
|
||||
dj21: Django >= 2.1, < 2.2
|
||||
djmaster: https://github.com/django/django/archive/master.tar.gz
|
||||
# mysql: mysqlclient
|
||||
postgres: psycopg2-binary
|
||||
coverage
|
||||
codecov
|
||||
setenv =
|
||||
sqlite: DATABASE_ENGINE=sqlite
|
||||
# mysql: DATABASE_ENGINE=mysql
|
||||
postgres: DATABASE_ENGINE=postgres
|
||||
commands =
|
||||
coverage run --append --source=admin_interface setup.py test
|
||||
coverage report -m
|
||||
|
||||
Reference in New Issue
Block a user