74 lines
2.0 KiB
Python
74 lines
2.0 KiB
Python
import mimetypes
|
|
from itertools import count
|
|
import datetime
|
|
|
|
|
|
from django.utils import timezone
|
|
from django.contrib.auth.models import User
|
|
|
|
|
|
def clean_ldap_user(user):
|
|
'''Clean references to module in django-auth-ldap User model, allowing
|
|
pickling of the instances.'''
|
|
user.ldap_user = None
|
|
return user
|
|
|
|
def match_mime_type(t1, t2):
|
|
if t1.endswith('/*') or t2.endswith('/*'):
|
|
t1 = t1.split('/')[0]
|
|
t2 = t2.split('/')[0]
|
|
if '*' in (t1, t2):
|
|
return True
|
|
return t1 == t2
|
|
|
|
|
|
def match_mime_types(mime_type, mime_types):
|
|
for other_mime_type in mime_types:
|
|
if match_mime_type(other_mime_type, mime_type):
|
|
return True
|
|
return False
|
|
|
|
|
|
def file_match_mime_types(file_like, mime_types):
|
|
import magic
|
|
|
|
if not mime_types:
|
|
return True
|
|
mime_type = magic.from_buffer(file_like.read(), mime=True)
|
|
return match_mime_types(mime_type, mime_types)
|
|
|
|
|
|
def mime_types_to_extensions(mime_types):
|
|
extensions = set()
|
|
for mime_type in mime_types:
|
|
extensions.update(mimetypes.guess_all_extensions(mime_type, strict=False))
|
|
return sorted(extensions)
|
|
|
|
|
|
def get_free_delegation_number(user):
|
|
'''Allocate a new delegation username'''
|
|
for i in count(1):
|
|
delegate_username = user.username + '-%d' % i
|
|
try:
|
|
User.objects.get(username=delegate_username)
|
|
except User.DoesNotExist:
|
|
return delegate_username
|
|
|
|
from django.utils.http import int_to_base36
|
|
from django.contrib.auth.tokens import default_token_generator
|
|
from django.core.urlresolvers import reverse
|
|
|
|
def make_password_reset_url(request, user):
|
|
uid = int_to_base36(user.id)
|
|
token = default_token_generator.make_token(user)
|
|
return request.build_absolute_uri(
|
|
reverse('auth_password_reset_confirm',
|
|
kwargs={'uidb36': uid, 'token': token}))
|
|
|
|
def date_to_aware_datetime(date):
|
|
return timezone.make_aware(
|
|
datetime.datetime(date.year, date.month, date.day),
|
|
timezone.get_current_timezone())
|
|
|
|
|