Moving all core module to base module
parent
5ac392231b
commit
f16899a963
|
@ -2,22 +2,21 @@
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from greenqueue.core import Library
|
from celery import task
|
||||||
register = Library()
|
|
||||||
|
|
||||||
from django.template import loader
|
from django.template import loader
|
||||||
from django.utils import translation
|
from django.utils import translation
|
||||||
from django.core import mail
|
from django.core import mail
|
||||||
|
|
||||||
from greenmine.core.utils.auth import set_token
|
from greenmine.base.utils.auth import set_token
|
||||||
|
|
||||||
@register.task(name='send-mail')
|
@task(name='send-mail')
|
||||||
def send_mail(subject, body, to):
|
def send_mail(subject, body, to):
|
||||||
email_message = mail.EmailMessage(body=body, subject=subject, to=to)
|
email_message = mail.EmailMessage(body=body, subject=subject, to=to)
|
||||||
email_message.content_subtype = "html"
|
email_message.content_subtype = "html"
|
||||||
email_message.send()
|
email_message.send()
|
||||||
|
|
||||||
@register.task(name='send-bulk-mail')
|
@task(name='send-bulk-mail')
|
||||||
def send_bulk_mail(emails):
|
def send_bulk_mail(emails):
|
||||||
emessages = [mail.EmailMessage(body=body, subject=subject, to=to)
|
emessages = [mail.EmailMessage(body=body, subject=subject, to=to)
|
||||||
for subject, body, to in emails]
|
for subject, body, to in emails]
|
|
@ -1,38 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
from django.conf import settings
|
|
||||||
from django.http import HttpResponseRedirect, HttpResponse
|
|
||||||
from django.utils.translation import ugettext_lazy as _
|
|
||||||
from functools import wraps
|
|
||||||
import json
|
|
||||||
|
|
||||||
from superview.views import LazyEncoder
|
|
||||||
|
|
||||||
def login_required(view_func):
|
|
||||||
@wraps(view_func)
|
|
||||||
def _wrapper(self, request, *args, **kwargs):
|
|
||||||
if request.user.is_authenticated():
|
|
||||||
return view_func(self, request, *args, **kwargs)
|
|
||||||
|
|
||||||
if request.is_ajax():
|
|
||||||
response_dict = {'valid': False, 'errors':[_(u"Permission denied.")]}
|
|
||||||
response_data = json.dumps(response_dict, cls=LazyEncoder, indent=4, sort_keys=True)
|
|
||||||
return HttpResponse(response_data, mimetype='text/plain')
|
|
||||||
|
|
||||||
return HttpResponseRedirect(settings.LOGIN_URL)
|
|
||||||
return _wrapper
|
|
||||||
|
|
||||||
|
|
||||||
def staff_required(view_func):
|
|
||||||
@wraps(view_func)
|
|
||||||
def _wrapper(self, request, *args, **kwargs):
|
|
||||||
if request.user.is_staff:
|
|
||||||
return view_func(self, request, *args, **kwargs)
|
|
||||||
|
|
||||||
if request.is_ajax():
|
|
||||||
response_dict = {'valid': False, 'errors':[_(u"Permission denied.")]}
|
|
||||||
response_data = json.dumps(response_dict, cls=LazyEncoder, indent=4, sort_keys=True)
|
|
||||||
return HttpResponse(response_data, mimetype='text/plain')
|
|
||||||
|
|
||||||
return HttpResponseRedirect(settings.LOGIN_URL)
|
|
||||||
return _wrapper
|
|
|
@ -1,46 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
from django.views.decorators.cache import cache_page
|
|
||||||
from django.utils.translation import ugettext_lazy as _
|
|
||||||
from django.utils.encoding import force_unicode
|
|
||||||
from django.http import HttpResponseRedirect, HttpResponse, Http404
|
|
||||||
from django.core.paginator import Paginator, InvalidPage, EmptyPage
|
|
||||||
from django.core.urlresolvers import reverse
|
|
||||||
from django.core.mail import EmailMessage
|
|
||||||
from django.shortcuts import render_to_response, get_object_or_404
|
|
||||||
from django.template.loader import render_to_string
|
|
||||||
from django.template import RequestContext, loader
|
|
||||||
from django.contrib import messages
|
|
||||||
from django.db.utils import IntegrityError
|
|
||||||
from django.utils.decorators import method_decorator
|
|
||||||
from superview.views import SuperView as View
|
|
||||||
|
|
||||||
from greenmine.core import permissions
|
|
||||||
from greenmine.core.middleware import PermissionDeniedException
|
|
||||||
|
|
||||||
|
|
||||||
class GenericView(View):
|
|
||||||
""" Generic view with some util methods. """
|
|
||||||
|
|
||||||
def render_to_ok(self, context={}):
|
|
||||||
response = {'valid': True, 'errors': []}
|
|
||||||
response.update(context)
|
|
||||||
return self.render_json(response, ok=True)
|
|
||||||
|
|
||||||
def render_to_error(self, context={}):
|
|
||||||
response = {'valid': False, 'errors': []}
|
|
||||||
response.update(context)
|
|
||||||
return self.render_json(response, ok=False)
|
|
||||||
|
|
||||||
def redirect_referer(self, msg=None):
|
|
||||||
if msg is not None:
|
|
||||||
messages.info(self.request, msg)
|
|
||||||
|
|
||||||
referer = self.request.META.get('HTTP_REFERER', '/')
|
|
||||||
return self.render_redirect(referer)
|
|
||||||
|
|
||||||
def check_role(self, user, project, perms, exception=PermissionDeniedException):
|
|
||||||
ok = permissions.has_perms(user, project, perms)
|
|
||||||
if exception is not None and not ok:
|
|
||||||
raise exception()
|
|
||||||
return ok
|
|
|
@ -1,3 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
|
|
|
@ -1,13 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
from django.http import HttpResponse, HttpResponseForbidden
|
|
||||||
|
|
||||||
class PermissionDeniedException(Exception):
|
|
||||||
pass
|
|
||||||
|
|
||||||
class PermissionMiddleware(object):
|
|
||||||
def process_exception(self, request, exception):
|
|
||||||
if not isinstance(exception, PermissionDeniedException):
|
|
||||||
return None
|
|
||||||
|
|
||||||
return HttpResponseForbidden("Permission denied for %s" % (request.path))
|
|
|
@ -1,7 +1,7 @@
|
||||||
# -* coding: utf-8 -*-
|
# -* coding: utf-8 -*-
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
|
||||||
from greenmine.core.utils.slug import slugify_uniquely as slugify
|
from greenmine.base.utils.slug import slugify_uniquely as slugify
|
||||||
from greenmine.taggit.managers import TaggableManager
|
from greenmine.taggit.managers import TaggableManager
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -10,8 +10,8 @@ from django.core.files.storage import FileSystemStorage
|
||||||
from django.contrib.contenttypes.models import ContentType
|
from django.contrib.contenttypes.models import ContentType
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
|
||||||
from greenmine.core.fields import DictField, ListField
|
from greenmine.base.fields import DictField, ListField
|
||||||
from greenmine.core.utils import iter_points
|
from greenmine.base.utils import iter_points
|
||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
import re
|
import re
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from greenmine.core.utils.slug import slugify_uniquely
|
from greenmine.base.utils.slug import slugify_uniquely
|
||||||
from greenmine.taggit.managers import TaggableManager
|
from greenmine.taggit.managers import TaggableManager
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -10,9 +10,9 @@ from django.contrib.contenttypes.models import ContentType
|
||||||
from django.contrib.contenttypes import generic
|
from django.contrib.contenttypes import generic
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
|
||||||
from greenmine.core.utils.slug import slugify_uniquely, ref_uniquely
|
from greenmine.base.utils.slug import slugify_uniquely, ref_uniquely
|
||||||
from greenmine.core.fields import DictField
|
from greenmine.base.fields import DictField
|
||||||
from greenmine.core.utils import iter_points
|
from greenmine.base.utils import iter_points
|
||||||
from greenmine.taggit.managers import TaggableManager
|
from greenmine.taggit.managers import TaggableManager
|
||||||
|
|
||||||
from greenmine.scrum.choices import *
|
from greenmine.scrum.choices import *
|
||||||
|
@ -113,7 +113,7 @@ class Project(models.Model):
|
||||||
super(Project, self).save(*args, **kwargs)
|
super(Project, self).save(*args, **kwargs)
|
||||||
|
|
||||||
def add_user(self, user, role):
|
def add_user(self, user, role):
|
||||||
from greenmine.core import permissions
|
from greenmine.base import permissions
|
||||||
return ProjectUserRole.objects.create(
|
return ProjectUserRole.objects.create(
|
||||||
project=self,
|
project=self,
|
||||||
user=user,
|
user=user,
|
||||||
|
|
|
@ -2,18 +2,20 @@
|
||||||
|
|
||||||
from django.db.models.signals import post_save
|
from django.db.models.signals import post_save
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
from django.contrib.auth.models import User
|
from django.conf import settings
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
from django.utils.translation import ugettext
|
||||||
|
from django.template.loader import render_to_string
|
||||||
|
|
||||||
|
from django.contrib.auth.models import User
|
||||||
|
|
||||||
from greenmine.profile.models import Profile
|
from greenmine.profile.models import Profile
|
||||||
from greenmine.scrum.models import UserStory, Task, ProjectUserRole
|
from greenmine.scrum.models import UserStory, Task, ProjectUserRole
|
||||||
from greenmine.core.utils import normalize_tagname
|
from greenmine.base import signals
|
||||||
from greenmine.core import signals
|
from greenmine.base.utils import normalize_tagname
|
||||||
from greenmine.core.utils.auth import set_token
|
from greenmine.base.utils.auth import set_token
|
||||||
|
from greenmine.base.mail.task import send_email, send_bulk_email
|
||||||
|
|
||||||
from django.conf import settings
|
|
||||||
from django.utils.translation import ugettext
|
|
||||||
from django.template.loader import render_to_string
|
|
||||||
|
|
||||||
@receiver(signals.mail_new_user)
|
@receiver(signals.mail_new_user)
|
||||||
def mail_new_user(sender, user, **kwargs):
|
def mail_new_user(sender, user, **kwargs):
|
||||||
|
@ -24,8 +26,8 @@ def mail_new_user(sender, user, **kwargs):
|
||||||
})
|
})
|
||||||
|
|
||||||
subject = ugettext("Greenmine: wellcome!")
|
subject = ugettext("Greenmine: wellcome!")
|
||||||
# TODO: convert to celery
|
send_mail.delay(subject, template, [user.email])
|
||||||
#send_task("send-mail", args = [subject, template, [user.email]])
|
|
||||||
|
|
||||||
@receiver(signals.mail_recovery_password)
|
@receiver(signals.mail_recovery_password)
|
||||||
def mail_recovery_password(sender, user, **kwargs):
|
def mail_recovery_password(sender, user, **kwargs):
|
||||||
|
@ -35,8 +37,7 @@ def mail_recovery_password(sender, user, **kwargs):
|
||||||
"current_host": settings.HOST,
|
"current_host": settings.HOST,
|
||||||
})
|
})
|
||||||
subject = ugettext("Greenmine: password recovery.")
|
subject = ugettext("Greenmine: password recovery.")
|
||||||
# TODO: convert to celery
|
send_mail.delay(subject, template, [user.email])
|
||||||
#send_task("send-mail", args = [subject, template, [user.email]])
|
|
||||||
|
|
||||||
|
|
||||||
@receiver(signals.mail_milestone_created)
|
@receiver(signals.mail_milestone_created)
|
||||||
|
@ -59,8 +60,7 @@ def mail_milestone_created(sender, milestone, user, **kwargs):
|
||||||
|
|
||||||
emails_list.append([subject, template, [person.email]])
|
emails_list.append([subject, template, [person.email]])
|
||||||
|
|
||||||
# TODO: convert to celery
|
send_bulk_mail.delay(emails_list)
|
||||||
#send_task("send-bulk-mail", args=[emails_list])
|
|
||||||
|
|
||||||
@receiver(signals.mail_userstory_created)
|
@receiver(signals.mail_userstory_created)
|
||||||
def mail_userstory_created(sender, us, user, **kwargs):
|
def mail_userstory_created(sender, us, user, **kwargs):
|
||||||
|
@ -83,8 +83,7 @@ def mail_userstory_created(sender, us, user, **kwargs):
|
||||||
|
|
||||||
emails_list.append([subject, template, [person.email]])
|
emails_list.append([subject, template, [person.email]])
|
||||||
|
|
||||||
# TODO: convert to celery
|
send_bulk_mail.delay(emails_list)
|
||||||
#send_task("send-bulk-mail", args=[emails_list])
|
|
||||||
|
|
||||||
|
|
||||||
@receiver(signals.mail_task_created)
|
@receiver(signals.mail_task_created)
|
||||||
|
@ -108,8 +107,7 @@ def mail_task_created(sender, task, user, **kwargs):
|
||||||
|
|
||||||
emails_list.append([subject, template, [person.email]])
|
emails_list.append([subject, template, [person.email]])
|
||||||
|
|
||||||
# TODO: convert to celery
|
send_bulk_mail.delay(emails_list)
|
||||||
#send_task("send-bulk-mail", args=[emails_list])
|
|
||||||
|
|
||||||
|
|
||||||
@receiver(signals.mail_task_assigned)
|
@receiver(signals.mail_task_assigned)
|
||||||
|
@ -122,5 +120,4 @@ def mail_task_assigned(sender, task, user, **kwargs):
|
||||||
})
|
})
|
||||||
|
|
||||||
subject = ugettext("Greenmine: task assigned")
|
subject = ugettext("Greenmine: task assigned")
|
||||||
# TODO: convert to celery
|
send_mail.delay(subject, template, [task.assigned_to.email])
|
||||||
#send_task("send-mail", args = [subject, template, [task.assigned_to.email]])
|
|
||||||
|
|
|
@ -4,10 +4,10 @@ from django.conf import settings
|
||||||
from django.http import Http404
|
from django.http import Http404
|
||||||
from haystack.query import EmptySearchQuerySet
|
from haystack.query import EmptySearchQuerySet
|
||||||
|
|
||||||
from greenmine.core.decorators import login_required
|
from greenmine.base.decorators import login_required
|
||||||
from greenmine.core.generic import GenericView
|
from greenmine.base.generic import GenericView
|
||||||
from greenmine.scrum.models import Project
|
from greenmine.scrum.models import Project
|
||||||
from .forms import SearchForm
|
from greenmine.search.forms import SearchForm
|
||||||
|
|
||||||
|
|
||||||
SEARCH_RESULTS_PER_PAGE = getattr(settings, 'SEARCH_RESULTS_PER_PAGE', 20)
|
SEARCH_RESULTS_PER_PAGE = getattr(settings, 'SEARCH_RESULTS_PER_PAGE', 20)
|
||||||
|
|
|
@ -1,7 +1,11 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from django.utils.translation import ugettext_lazy as _
|
|
||||||
import os.path, sys, os
|
import os.path, sys, os
|
||||||
|
import djcelery
|
||||||
|
|
||||||
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
|
djcelery.setup_loader()
|
||||||
|
|
||||||
PROJECT_ROOT = os.path.abspath(
|
PROJECT_ROOT = os.path.abspath(
|
||||||
os.path.join(os.path.dirname(os.path.realpath(__file__)), '..')
|
os.path.join(os.path.dirname(os.path.realpath(__file__)), '..')
|
||||||
|
@ -163,7 +167,6 @@ MIDDLEWARE_CLASSES = [
|
||||||
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||||
'django.contrib.messages.middleware.MessageMiddleware',
|
'django.contrib.messages.middleware.MessageMiddleware',
|
||||||
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
||||||
'greenmine.core.middleware.PermissionMiddleware',
|
|
||||||
'django.middleware.transaction.TransactionMiddleware',
|
'django.middleware.transaction.TransactionMiddleware',
|
||||||
'reversion.middleware.RevisionMiddleware',
|
'reversion.middleware.RevisionMiddleware',
|
||||||
]
|
]
|
||||||
|
@ -284,7 +287,7 @@ LOGGING = {
|
||||||
|
|
||||||
|
|
||||||
AUTH_PROFILE_MODULE = 'profile.Profile'
|
AUTH_PROFILE_MODULE = 'profile.Profile'
|
||||||
FORMAT_MODULE_PATH = 'greenmine.core.formats'
|
FORMAT_MODULE_PATH = 'greenmine.base.formats'
|
||||||
DATE_INPUT_FORMATS = (
|
DATE_INPUT_FORMATS = (
|
||||||
'%Y-%m-%d', '%m/%d/%Y', '%d/%m/%Y', '%b %d %Y',
|
'%Y-%m-%d', '%m/%d/%Y', '%d/%m/%Y', '%b %d %Y',
|
||||||
'%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y',
|
'%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y',
|
||||||
|
|
Loading…
Reference in New Issue