Skip to content

Commit

Permalink
Merge c05dfc7 into 1d32f40
Browse files Browse the repository at this point in the history
  • Loading branch information
andreif committed Dec 1, 2017
2 parents 1d32f40 + c05dfc7 commit 0b46d0a
Show file tree
Hide file tree
Showing 24 changed files with 211 additions and 126 deletions.
66 changes: 42 additions & 24 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,35 +4,42 @@ sudo: false
python: 3.5

env:
- TOXENV=py27-django15
- TOXENV=py27-django16
- TOXENV=py27-django17
- TOXENV=py27-django18
- TOXENV=py27-django19
- TOXENV=py27-django110
- TOXENV=py27-django111

- TOXENV=py34-django16
- TOXENV=py34-django17
- TOXENV=py34-django18
- TOXENV=py34-django19
- TOXENV=py34-django110
- TOXENV=py34-django111

- TOXENV=py35-django18
- TOXENV=py35-django19
- TOXENV=py35-django110
- TOXENV=py35-django111

- TOXENV=lint
- TOXENV=coverage
# NOTE: On Travis web page define private STASH_URL, STASH_TOKEN, STASH_SECRET.
global:
- STASH_BOX=$TRAVIS_REPO_SLUG:$TRAVIS_BUILD_NUMBER:$STASH_SECRET
matrix:
- TOXENV=py27-django15
- TOXENV=py27-django16
- TOXENV=py27-django17
- TOXENV=py27-django18
- TOXENV=py27-django19
- TOXENV=py27-django110
- TOXENV=py27-django111

- TOXENV=py34-django17
- TOXENV=py34-django18
- TOXENV=py34-django19
- TOXENV=py34-django110
- TOXENV=py34-django111
- TOXENV=py34-django20

- TOXENV=py35-django18
- TOXENV=py35-django19
- TOXENV=py35-django110
- TOXENV=py35-django111
- TOXENV=py35-django20

- TOXENV=lint
- TOXENV=coverage

matrix:
include:
- env: TOXENV=py26-django15
python: 2.6
- env: TOXENV=py26-django16
python: 2.6
- env: TOXENV=py33-django15
python: 3.3
- env: TOXENV=py33-django16
python: 3.3
- env: TOXENV=py33-django17
Expand All @@ -41,13 +48,24 @@ matrix:
python: 3.3
- env: TOXENV=py36-django111
python: 3.6
- env: TOXENV=py36-django20
python: 3.6


install:
- pip install tox
- pip install --upgrade pip
- pip install tox stasher

script:
- tox
- if [[ $TOXENV =~ coverage ]] && [ -n "$STASH_SECRET" ]; then
stash pull $STASH_BOX -wc $(TOXENV= tox -l | wc -l);
fi
- if [[ ! $TOXENV =~ coverage ]] || [ -n "$STASH_SECRET" ]; then
tox;
fi
- if [[ $TOXENV =~ py ]] && [ -n "$STASH_SECRET" ]; then
stash push $STASH_BOX $(ls .coverage.*);
fi

after_success:
- if [[ $TOXENV =~ coverage ]]; then
Expand Down
4 changes: 2 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
FROM python:3
FROM python:3.6.3

# Install system dependencies
RUN apt-get update && apt-get install -y \
gettext && \
pip install "Django<1.9"
pip install "Django>=2.0b1,<2.1"

# Install Djedi-CMS
COPY . /djedi-cms
Expand Down
26 changes: 19 additions & 7 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,6 +1,22 @@
.DEFAULT_GOAL := help

.PHONY: help # shows available commands
help:
@echo "\nAvailable commands:\n\n $(shell sed -n 's/^.PHONY:\(.*\)/ *\1\\n/p' Makefile)"

.PHONY: test
test:
python setup.py test
coverage run setup.py test

.PHONY: test_all # runs tests using detox, combines coverage and reports it
test_all:
detox
make coverage

.PHONY: coverage # combines coverage and reports it
coverage:
coverage combine || true
coverage report

.PHONY: lint
lint:
Expand All @@ -26,12 +42,8 @@ build_example:
.PHONY: example
example:
docker-compose start || make build_example
@echo "\n✨ Djedi-CMS example is running at http://localhost:8000 ✨\n"

.PHONY: coverage
coverage:
coverage run setup.py test
coverage report
@echo "\n✨ Djedi-CMS example is running now ✨\n"
docker-compose logs -f --tail=5 django

.PHONY: clean
clean:
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
![Django CMS](https://raw.github.com/5monkeys/djedi-cms/master/docs/_static/djedi-landscape.png)
<img alt="Django CMS" src="https://rawgit.com/5monkeys/djedi-cms/master/docs/_static/djedi-landscape.svg" style="width: 500px"/>

Django content management as it should be.

Expand Down
9 changes: 2 additions & 7 deletions djedi/admin/cms.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,11 @@
try:
from django.conf.urls import include, url
except ImportError:
from django.conf.urls.defaults import include, url

from django.contrib.admin import ModelAdmin
from django.core.exceptions import PermissionDenied
from django.views.generic import View

from .mixins import DjediContextMixin
from ..auth import has_permission
from ..compat import render
from ..compat import urlpatterns
from ..compat import patterns, url, include


class Admin(ModelAdmin):
Expand All @@ -19,7 +14,7 @@ class Admin(ModelAdmin):
verbose_name_plural = verbose_name

def get_urls(self):
return urlpatterns(
return patterns(
url(r'^', include('djedi.admin.urls', namespace='djedi')),
url(r'', lambda: None, name='djedi_cms_changelist') # Placeholder to show change link to CMS in admin
)
Expand Down
11 changes: 4 additions & 7 deletions djedi/admin/urls.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
try:
from django.conf.urls import url
except ImportError:
from django.conf.urls.defaults import url

from ..compat import urlpatterns
from ..compat import patterns, url

from .api import NodeApi, LoadApi, PublishApi, RevisionsApi, RenderApi, NodeEditor
from .cms import DjediCMS

urlpatterns = urlpatterns(
app_name = 'djedi'

urlpatterns = patterns(
url(r'^$', DjediCMS.as_view(), name='cms'),
url(r'^node/(?P<uri>.+)/editor$', NodeEditor.as_view(), name='cms.editor'),
url(r'^node/(?P<uri>.+)/load$', LoadApi.as_view(), name='api.load'),
Expand Down
42 changes: 32 additions & 10 deletions djedi/compat.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,39 @@
from django.template.response import TemplateResponse as BaseTemplateResponse


def urlpatterns(*urls):
if django.VERSION < (1, 10):
try:
from django.conf.urls.defaults import patterns
except ImportError:
from django.conf.urls import patterns
if django.VERSION < (1, 6):
from django.conf.urls.defaults import include, url
else:
from django.conf.urls import include, url

return patterns('', *urls)

# else
if django.VERSION < (2, 0):
from django.core.urlresolvers import reverse, NoReverseMatch
else:
from django.urls import reverse, NoReverseMatch


def patterns(*urls):
if django.VERSION < (1, 6):
from django.conf.urls.defaults import patterns
return patterns('', *urls)
elif django.VERSION < (1, 10):
from django.conf.urls import patterns
return patterns('', *urls)
return list(urls)


if django.VERSION >= (1, 9):
from django.template.library import parse_bits
if django.VERSION < (2, 0):
from django.template.library import parse_bits
else:
def parse_bits(parser, bits, params, varargs, varkw, defaults,
takes_context, name):
from django.template import library
return library.parse_bits(
parser=parser, bits=bits, params=params, varargs=varargs,
varkw=varkw, defaults=defaults, kwonly=(), kwonly_defaults=(),
takes_context=takes_context, name=name)

def generic_tag_compiler(parser, token, params, varargs, varkw, defaults,
name, takes_context, node_class):
Expand Down Expand Up @@ -55,6 +73,10 @@ def __init__(self, *args, **kwargs):

__all__ = ['render_to_string',
'render',
'urlpatterns',
'patterns',
'include',
'url',
'reverse',
'NoReverseMatch',
'generic_tag_compiler',
'parse_bits']
15 changes: 15 additions & 0 deletions djedi/middleware/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,21 @@

class DjediMiddleware(object):

def __init__(self, get_response=None):
self.get_response = get_response

def __call__(self, request):
response = self.process_request(request)
if not response:
try:
response = self.get_response(request)
response = self.process_response(request=request,
response=response)
except Exception as e:
self.process_exception(request=request, exception=e)
raise
return response

def process_request(self, request):
# Bootstrap content-io
pipeline.clear()
Expand Down
3 changes: 1 addition & 2 deletions djedi/middleware/mixins.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,12 @@
import cio

from django.core.exceptions import ImproperlyConfigured
from django.core.urlresolvers import reverse, NoReverseMatch
from django.utils import translation

from cio.conf import settings
from cio.pipeline import pipeline
from djedi.auth import has_permission
from djedi.compat import render_to_string
from djedi.compat import render_to_string, reverse, NoReverseMatch

_log = logging.getLogger(__name__)

Expand Down
12 changes: 11 additions & 1 deletion djedi/tests/compat.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,14 @@ def cmpt_context(context):
return Context(context)


__all__ = ['cmpt_context']
if django.VERSION < (1, 8):
from django.template.loader import get_template_from_string
else:
# Django 1.8+ has multiple template engines, we only test Django's for now.
from django.template import engines

def get_template_from_string(template_code):
return engines['django'].from_string(template_code)


__all__ = ['cmpt_context', 'get_template_from_string']
4 changes: 3 additions & 1 deletion djedi/tests/test_admin.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from django.core.urlresolvers import reverse
from djedi.utils.encoding import smart_unicode
from djedi.tests.base import ClientTest
from ..compat import reverse


class PanelTest(ClientTest):
Expand All @@ -16,6 +16,8 @@ def test_embed(self):
def test_middleware(self):
with self.settings(MIDDLEWARE_CLASSES=[
'djedi.middleware.translation.DjediTranslationMiddleware',
], MIDDLEWARE=[
'djedi.middleware.translation.DjediTranslationMiddleware',
]):
url = reverse('index')
response = self.client.get(url)
Expand Down
2 changes: 1 addition & 1 deletion djedi/tests/test_rest.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
import os
import simplejson as json
from django.core.files import File
from django.core.urlresolvers import reverse
from django.test import Client
from django.utils.http import urlquote
from cio.plugins import plugins
Expand All @@ -11,6 +10,7 @@
from cio.utils.uri import URI
from djedi.tests.base import DjediTest, UserMixin, ClientTest
from djedi.utils.encoding import smart_unicode
from ..compat import reverse


def json_node(response, simple=True):
Expand Down
11 changes: 1 addition & 10 deletions djedi/tests/test_templatetags.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,7 @@
from cio.pipeline import pipeline
from djedi.templatetags.template import register
from djedi.tests.base import DjediTest, AssertionMixin
from .compat import cmpt_context

try:
from django.template.loader import get_template_from_string
except ImportError:
# Django 1.8+ has multiple template engines, we only test Django's for now.
from django.template import engines

def get_template_from_string(template_code):
return engines['django'].from_string(template_code)
from .compat import cmpt_context, get_template_from_string


class TagTest(DjediTest, AssertionMixin):
Expand Down
18 changes: 9 additions & 9 deletions djedi/tests/urls.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
import django
from django.shortcuts import render_to_response

try:
from django.conf.urls import include, url
except ImportError:
from django.conf.urls.defaults import include, url

from django.contrib import admin
from ..compat import urlpatterns
from ..compat import patterns, url, include

admin.autodiscover()

urlpatterns = urlpatterns(
if django.VERSION < (2, 0):
admin_urls = include(admin.site.urls)
else:
admin_urls = admin.site.urls

urlpatterns = patterns(
url(r'^$', lambda r: render_to_response('index.html'), name='index'),
url(r'^adm1n/', include(admin.site.urls))
url(r'^adm1n/', admin_urls)
)
11 changes: 6 additions & 5 deletions djedi/urls.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
try:
from django.conf.urls import patterns, include
except ImportError:
from django.conf.urls.defaults import patterns, include
from .compat import include, patterns

app_name = 'djedi'

urlpatterns = patterns('', (r'^', include('djedi.admin.urls', namespace='djedi', app_name='djedi')))
urlpatterns = patterns(
'',
(r'^', include('djedi.admin.urls', namespace='djedi')),
)

0 comments on commit 0b46d0a

Please sign in to comment.