Skip to content
This repository has been archived by the owner on Oct 1, 2020. It is now read-only.

Commit

Permalink
Merge cf7bdaf into 3a3b150
Browse files Browse the repository at this point in the history
  • Loading branch information
rochacbruno committed Dec 6, 2015
2 parents 3a3b150 + cf7bdaf commit 5f79c61
Show file tree
Hide file tree
Showing 73 changed files with 1,210 additions and 985 deletions.
2 changes: 1 addition & 1 deletion Makefile
Expand Up @@ -8,7 +8,7 @@ shell:

.PHONY: test
test: pep8
QUOKKA_MODE=test py.test --cov=quokka quokka/
QUOKKA_MODE=test py.test --cov=quokka -l --tb=short --maxfail=1 quokka/

.PHONY: install
install:
Expand Down
32 changes: 32 additions & 0 deletions etc/fixtures/demo_data.json
Expand Up @@ -31,6 +31,38 @@
"order" : 0
}
]
},
{
"name" : "author",
"email" : "author@example.com",
"gravatar_email": "rochacbruno+quokka@gmail.com",
"password" : "author",
"roles" : [ "author" ],
"bio": "Quokka Example Author",
"tagline": "It is nice to write in Quokka CMS!",
"links": [
{
"title" : "facebook",
"link" : "http://facebook.com/quokkaproject",
"icon" : "facebook",
"css_class" : "facebook",
"order" : 0
},
{
"title" : "github",
"link" : "http://github.com/quokkaproject",
"icon" : "github",
"css_class" : "github",
"order" : 0
},
{
"title" : "twitter",
"link" : "http://twitter.com/quokkaproject",
"icon" : "twitter",
"css_class" : "twitter",
"order" : 0
}
]
}
],
"configs": [
Expand Down
32 changes: 32 additions & 0 deletions etc/fixtures/initial_data.json
Expand Up @@ -31,6 +31,38 @@
"order" : 0
}
]
},
{
"name" : "author",
"email" : "author@example.com",
"gravatar_email": "rochacbruno+quokka@gmail.com",
"password" : "author",
"roles" : [ "author" ],
"bio": "Quokka Example Author",
"tagline": "It is nice to write in Quokka CMS!",
"links": [
{
"title" : "facebook",
"link" : "http://facebook.com/quokkaproject",
"icon" : "facebook",
"css_class" : "facebook",
"order" : 0
},
{
"title" : "github",
"link" : "http://github.com/quokkaproject",
"icon" : "github",
"css_class" : "github",
"order" : 0
},
{
"title" : "twitter",
"link" : "http://twitter.com/quokkaproject",
"icon" : "twitter",
"css_class" : "twitter",
"order" : 0
}
]
}
],
"configs": [
Expand Down
4 changes: 3 additions & 1 deletion etc/openshift_clean.py
Expand Up @@ -5,7 +5,9 @@
OR AT YOUR OWN RISK!!!!
"""
from quokka import create_app
from quokka.core.models import Content, Channel, Config
from quokka.core.models.content import Content
from quokka.core.models.config import Config
from quokka.core.models.channel import Channel
from quokka.modules.accounts.models import User

app = create_app()
Expand Down
18 changes: 9 additions & 9 deletions quokka/__init__.py
Expand Up @@ -11,13 +11,12 @@
__copyright__ = "Copyright 2014, Quokka Project"


try:
from .core.admin import create_admin
from .core.app import QuokkaApp
# from .core.middleware import HTTPMethodOverrideMiddleware
admin = create_admin()
except:
pass
from quokka.core.admin import create_admin
from quokka.core.app import QuokkaApp
from quokka.core.middleware import HTTPMethodOverrideMiddleware
from quokka.ext import configure_extensions

admin = create_admin()


def create_app_base(config=None, test=False, admin_instance=None, **settings):
Expand All @@ -32,9 +31,10 @@ def create_app(config=None, test=False, admin_instance=None, **settings):
app = create_app_base(
config=config, test=test, admin_instance=admin_instance, **settings
)
from .ext import configure_extensions

configure_extensions(app, admin_instance or admin)
# app.wsgi_app = HTTPMethodOverrideMiddleware(app.wsgi_app)
if app.config.get("HTTP_PROXY_METHOD_OVERRIDE"):
app.wsgi_app = HTTPMethodOverrideMiddleware(app.wsgi_app)
return app


Expand Down
47 changes: 22 additions & 25 deletions quokka/core/admin/__init__.py
@@ -1,47 +1,41 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*

import logging
from werkzeug.utils import import_string

from flask import request, session
from flask.ext.admin import Admin

from ..models import (Link, Config, SubContentPurpose, ChannelType,
ContentTemplateType, Channel)
from quokka.core.models.subcontent import SubContentPurpose
from quokka.core.models.config import Config
from quokka.core.models.channel import Channel, ChannelType
from quokka.core.models.content import Link, ContentTemplateType

from quokka.utils.translation import _l, _n
from quokka.utils.settings import get_setting_value

from .models import ModelAdmin, FileAdmin, BaseIndexView
from .views import (IndexView, InspectorView, LinkAdmin, ConfigAdmin,
SubContentPurposeAdmin, ChannelTypeAdmin,
ContentTemplateTypeAdmin, ChannelAdmin)

from quokka.utils.translation import _l, _n
from quokka.utils.settings import get_setting_value


'''
_n is here only for backwards compatibility, to be imported by 3rd party
modules. The below _n below is to avoid pep8 error
'''
_n # noqa

logger = logging.getLogger()


class QuokkaAdmin(Admin):
registered = []

def register(self, model, view=None, *args, **kwargs):
_view = view or ModelAdmin
admin_view_exclude = get_setting_value('ADMIN_VIEW_EXCLUDE', [])
identifier = '.'.join((model.__module__, model.__name__))
if identifier not in admin_view_exclude:
if (identifier not in admin_view_exclude) and (
identifier not in self.registered):
self.add_view(_view(model, *args, **kwargs))
# try:
# self.add_view(_view(model, *args, **kwargs))
# except Exception as e:
# logger.warning(
# "admin.register({0}, {1}, {2}, {3}) error: {4}".format(
# model, view, args, kwargs, e.message
# )
# )
self.registered.append(identifier)


def create_admin(app=None):
Expand Down Expand Up @@ -87,8 +81,8 @@ def get_locale():
return session.get('lang', 'en')

admin.locale_selector(get_locale)
except:
pass # Exception: Can not add locale_selector second time.
except Exception as e:
app.logger.info('Cannot add locale_selector. %s' % e)

for entry in app.config.get('FILE_ADMIN', []):
try:
Expand All @@ -104,8 +98,7 @@ def get_locale():
)
)
except Exception as e:
logger.info(e)
# need to check blueprint endpoisnt colision
app.logger.info(e)

# register all themes in file manager
for k, theme in app.theme_manager.themes.items():
Expand Down Expand Up @@ -144,8 +137,12 @@ def get_locale():
'DEFAULT_EDITABLE_EXTENSIONS')
)
)
except:
pass
except Exception as e:
app.logger.warning(
'Error registering %s folder to file admin %s' % (
theme.identifier, e
)
)

# adding views
admin.add_view(InspectorView(category=_l("Settings"),
Expand Down
23 changes: 13 additions & 10 deletions quokka/core/admin/fields.py
Expand Up @@ -8,7 +8,7 @@
from flask.ext.admin.form.upload import ImageUploadInput
from flask.ext.admin._compat import urljoin

from quokka.core.models import SubContent, SubContentPurpose
from quokka.core.models.subcontent import SubContent, SubContentPurpose
from quokka.modules.media.models import Image

if sys.version_info.major == 3:
Expand All @@ -21,15 +21,18 @@ class ThumbWidget(ImageUploadInput):
' <img %(image)s>'
'</div>')

def get_url(self, field):
if field.thumbnail_size:
filename = field.thumbnail_fn(field.data)
else:
filename = field.data

if field.url_relative_path:
filename = urljoin(field.url_relative_path, filename)

@staticmethod
def get_url(field):
'''
This meethod is not used, but is here for compatibility
'''
# if field.thumbnail_size:
# filename = field.thumbnail_fn(field.data)
# else:
# filename = field.data
#
# if field.url_relative_path:
# filename = urljoin(field.url_relative_path, filename)
return field.data


Expand Down
33 changes: 18 additions & 15 deletions quokka/core/admin/models.py
Expand Up @@ -3,17 +3,17 @@
import random
import datetime

from flask.ext.admin.contrib.mongoengine import ModelView
from flask.ext.admin.contrib.fileadmin import FileAdmin as _FileAdmin
from flask.ext.admin.babel import gettext, ngettext
from flask.ext.admin import AdminIndexView
from flask.ext.admin import BaseView as AdminBaseView
from flask.ext.admin.actions import action
from flask.ext.admin import helpers as h
from flask.ext.security import current_user
from flask.ext.security.utils import url_for_security
from flask import redirect, flash, url_for, Response, current_app

from flask_admin.contrib.mongoengine import ModelView
from flask_admin.contrib.fileadmin import FileAdmin as _FileAdmin
from flask_admin.babel import gettext, ngettext
from flask_admin import AdminIndexView
from flask_admin import BaseView as AdminBaseView
from flask_admin.actions import action
from flask_admin import helpers as h
from flask_security import current_user
from flask_security.utils import url_for_security
from flask.ext.htmlbuilder import html

from quokka.modules.accounts.models import User
Expand All @@ -23,9 +23,9 @@
from quokka.utils.upload import dated_path, lazy_media_path
from quokka.utils import is_accessible
from quokka.utils.settings import get_setting_value
from .fields import ThumbField

from .utils import _, _l, _n
from quokka.core.admin.fields import ThumbField
from quokka.core.admin.utils import _, _l, _n


class ThemeMixin(object):
Expand All @@ -39,7 +39,7 @@ def render(self, template, **kwargs):
kwargs['h'] = h
# Contribute extra arguments
kwargs.update(self._template_args)
theme = current_app.config.get('ADMIN_THEME', None)
theme = current_app.config.get('ADMIN_THEME')
return render_template(template, theme=theme, **kwargs)


Expand All @@ -49,7 +49,7 @@ def is_accessible(self):
roles_accepted = getattr(self, 'roles_accepted', None)
return is_accessible(roles_accepted=roles_accepted, user=current_user)

def _handle_view(self, name, *args, **kwargs):
def _handle_view(self, *args, **kwargs):
if not current_user.is_authenticated():
return redirect(url_for_security('login', next="/admin"))
if not self.is_accessible():
Expand All @@ -64,7 +64,10 @@ def format_datetime(self, request, obj, fieldname, *args, **kwargs):

def view_on_site(self, request, obj, fieldname, *args, **kwargs):
available = obj.is_available
endpoint = kwargs.pop('endpoint', 'detail' if available else 'preview')
endpoint = kwargs.pop(
'endpoint',
'quokka.core.detail' if available else 'quokka.core.preview'
)
return html.a(
href=obj.get_absolute_url(endpoint),
target='_blank',
Expand Down Expand Up @@ -104,7 +107,7 @@ def format_status(self, request, obj, fieldname, *args, **kwargs):
def get_url(self, request, obj, fieldname, *args, **kwargs):
column_formatters_args = getattr(self, 'column_formatters_args', {})
_args = column_formatters_args.get('get_url', {}).get(fieldname, {})
attribute = _args.get('attribute', None)
attribute = _args.get('attribute')
method = _args.get('method', 'get_absolute_url')
text = getattr(obj, fieldname, '')
if attribute:
Expand Down
2 changes: 1 addition & 1 deletion quokka/core/admin/views.py
Expand Up @@ -2,7 +2,7 @@

from flask import current_app, flash
from flask.ext.admin.actions import action
from quokka.core.models import Content
from quokka.core.models.content import Content
from quokka.utils.routing import expose
from quokka.core.widgets import TextEditor, PrepopulatedText
from .utils import _, _l
Expand Down
15 changes: 14 additions & 1 deletion quokka/core/app.py
@@ -1,4 +1,5 @@
from flask import Flask, Blueprint
from flask.helpers import _endpoint_from_view_func
from quokka.core.config import QuokkaConfig
from quokka.utils.aliases import dispatch_aliases

Expand All @@ -23,6 +24,18 @@ def preprocess_request(self):
return dispatch_aliases() or super(QuokkaApp,
self).preprocess_request()

def add_quokka_url_rule(self, rule, endpoint=None,
view_func=None, **options):
if endpoint is None:
endpoint = _endpoint_from_view_func(view_func)
if not endpoint.startswith('quokka.'):
endpoint = 'quokka.core.' + endpoint
self.add_url_rule(rule, endpoint, view_func, **options)


class QuokkaModule(Blueprint):
"for future overriding"
"Overwrite blueprint namespace to quokka.modules.name"

def __init__(self, name, *args, **kwargs):
name = "quokka.modules." + name
super(QuokkaModule, self).__init__(name, *args, **kwargs)

0 comments on commit 5f79c61

Please sign in to comment.