Moving all core module to base module

remotes/origin/enhancement/email-actions
Jesús Espino 2013-03-21 08:21:30 +01:00
parent 5ac392231b
commit f16899a963
26 changed files with 37 additions and 138 deletions

View File

@ -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]

View File

@ -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

View File

@ -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

View File

@ -1,3 +0,0 @@
# -*- coding: utf-8 -*-

View File

@ -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))

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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,

View File

@ -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]])

View File

@ -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)

View File

@ -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',