diff options
author | Aurélien Bompard <aurelien@bompard.org> | 2013-07-15 12:02:04 +0200 |
---|---|---|
committer | Aurélien Bompard <aurelien@bompard.org> | 2013-07-15 12:02:04 +0200 |
commit | 1c0db6b8e3b262b9cdba6a32e71c9bbac8b5f7cc (patch) | |
tree | 54fecd587266ebac0efe2bd777d2fc2776fa092b /hyperkitty/lib/__init__.py | |
parent | 1a339ac1f7dac6e63b83864b6421aed1b0fdde75 (diff) | |
download | hyperkitty-1c0db6b8e3b262b9cdba6a32e71c9bbac8b5f7cc.tar.gz hyperkitty-1c0db6b8e3b262b9cdba6a32e71c9bbac8b5f7cc.tar.xz hyperkitty-1c0db6b8e3b262b9cdba6a32e71c9bbac8b5f7cc.zip |
Cleanups in the lib/__init__.py file
Diffstat (limited to 'hyperkitty/lib/__init__.py')
-rw-r--r-- | hyperkitty/lib/__init__.py | 204 |
1 files changed, 0 insertions, 204 deletions
diff --git a/hyperkitty/lib/__init__.py b/hyperkitty/lib/__init__.py index 9bcded3..1970917 100644 --- a/hyperkitty/lib/__init__.py +++ b/hyperkitty/lib/__init__.py @@ -19,59 +19,6 @@ # Author: Aurelien Bompard <abompard@fedoraproject.org> # -import urllib -from hashlib import md5 -import datetime - -from django.core.exceptions import SuspiciousOperation -from django.core.mail import EmailMessage -from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger -from django.utils.timezone import utc -from mailmanclient import MailmanConnectionError - -from hyperkitty.lib import mailman -from hyperkitty.models import ThreadCategory, LastView -from hyperkitty.views.forms import CategoryForm - - -FLASH_MESSAGES = { - "updated-ok": ("success", "The profile was successfully updated."), - "sent-ok": ("success", "The message has been sent successfully."), -} - - -def gravatar_url(email): - '''Return a gravatar url for an email address''' - size = 64 - default = "http://fedoraproject.org/static/images/" + \ - "fedora_infinity_%ix%i.png" % (size, size) - query_string = urllib.urlencode({'s': size, 'd': default}) - identifier = md5(email).hexdigest() - return 'http://www.gravatar.com/avatar/%s?%s' % (identifier, query_string) - - -def get_months(store, list_name): - """ Return a dictionnary of years, months for which there are - potentially archives available for a given list (based on the - oldest post on the list). - - :arg list_name, name of the mailing list in which this email - should be searched. - """ - date_first = store.get_start_date(list_name) - if not date_first: - return {} - archives = {} - now = datetime.datetime.now() - year = date_first.year - month = date_first.month - while year < now.year: - archives[year] = range(1, 13)[(month -1):] - year = year + 1 - month = 1 - archives[now.year] = range(1, 13)[:now.month] - return archives - def get_store(request): return request.environ["kittystore.store"] @@ -83,154 +30,3 @@ def stripped_subject(mlist, subject): if subject.lower().startswith(mlist.subject_prefix.lower()): subject = subject[len(mlist.subject_prefix) : ] return subject - - -def get_display_dates(year, month, day): - if day is None: - start_day = 1 - else: - start_day = int(day) - begin_date = datetime.datetime(int(year), int(month), start_day) - - if day is None: - end_date = begin_date + datetime.timedelta(days=32) - end_date = end_date.replace(day=1) - else: - end_date = begin_date + datetime.timedelta(days=1) - - return begin_date, end_date - - -def daterange(start_date, end_date): - for n in range(int((end_date - start_date).days)): - yield start_date + datetime.timedelta(n) - - -class PostingFailed(Exception): pass - -def post_to_list(request, mlist, subject, message, headers={}, - attachments=None): - if not mlist: - # Make sure the list exists to avoid posting to any email addess - raise SuspiciousOperation("I don't know this mailing-list") - # Check that the user is subscribed - try: - mailman.subscribe(mlist.name, request.user) - except MailmanConnectionError: - raise PostingFailed("Can't connect to Mailman's REST server, " - "your message has not been sent.") - # send the message - headers["User-Agent"] = "HyperKitty on %s" % request.build_absolute_uri("/") - if not request.user.first_name and not request.user.last_name: - from_email = request.user.email - else: - from_email = '"%s %s" <%s>' % (request.user.first_name, - request.user.last_name, - request.user.email) - msg = EmailMessage( - subject=subject, - body=message, - from_email=from_email, - to=[mlist.name], - headers=headers, - ) - # Attachments - if attachments: - if not isinstance(attachments, list): - attachments = [attachments] - for attach in attachments: - msg.attach(attach.name, attach.read()) - msg.send() - - -def paginate(objects, page_num, max_page_range=10, paginator=None): - try: - page_num = int(page_num) - except (TypeError, ValueError): - page_num = 1 - if paginator is None: - paginator = Paginator(objects, 10) # else use the provided instance - try: - objects = paginator.page(page_num) - except PageNotAnInteger: - # If page is not an integer, deliver first page. - objects = paginator.page(1) - except EmptyPage: - # If page is out of range (e.g. 9999), deliver last page of results. - objects = paginator.page(paginator.num_pages) - # Calculate the displayed page range - if paginator.num_pages > max_page_range: - objects.page_range = [ 1 ] - subrange_lower = page_num - (max_page_range / 2 - 2) - if subrange_lower > 3: - objects.page_range.append("...") - else: - subrange_lower = 2 - objects.page_range.extend(range(subrange_lower, page_num)) - if page_num != 1 and page_num != 100: - objects.page_range.append(page_num) - subrange_upper = page_num + (max_page_range / 2 - 2) - if subrange_upper >= paginator.num_pages - 2: - subrange_upper = paginator.num_pages - 1 - objects.page_range.extend(range(page_num+1, subrange_upper+1)) - if subrange_upper < paginator.num_pages - 2: - objects.page_range.append("...") - objects.page_range.append(paginator.num_pages) - else: - objects.page_range = [ p+1 for p in range(paginator.num_pages) ] - return objects - - -def get_category_widget(request=None, current_category=None): - """ - Returns the category form and the applicable category object (or None if no - category is set for this thread). - - If current_category is not provided or None, try to deduce it from the POST - request. - if request is not provided or None, don't return the category form, return - None instead. - """ - categories = [ (c.name, c.name.upper()) - for c in ThreadCategory.objects.all() ] \ - + [("", "no category")] - - if request: - if request.method == "POST": - category_form = CategoryForm(request.POST) - else: - category_form = CategoryForm(initial={"category": current_category or ""}) - category_form["category"].field.choices = categories - else: - category_form = None - if request and request.method == "POST" and category_form.is_valid(): - # is_valid() must be called after the choices have been set - current_category = category_form.cleaned_data["category"] - - if not current_category: - category = None - else: - try: - category = ThreadCategory.objects.get(name=current_category) - except ThreadCategory.DoesNotExist: - category = None - return category, category_form - - -def is_thread_unread(request, mlist_name, thread): - """Returns True or False if the thread is unread or not.""" - unread = False - if request.user.is_authenticated(): - try: - last_view_obj = LastView.objects.get( - list_address=mlist_name, - threadid=thread.thread_id, - user=request.user) - except LastView.DoesNotExist: - unread = True - else: - if thread.date_active.replace(tzinfo=utc) \ - > last_view_obj.view_date: - unread = True - return unread - |