|
@@ -8,7 +8,9 @@ import base64
|
|
import html2text
|
|
import html2text
|
|
import re
|
|
import re
|
|
from datetime import date, timedelta
|
|
from datetime import date, timedelta
|
|
|
|
+from contextlib import contextmanager
|
|
|
|
|
|
|
|
+from django.utils import translation
|
|
from django.core.mail import EmailMultiAlternatives
|
|
from django.core.mail import EmailMultiAlternatives
|
|
from django.core.files.storage import FileSystemStorage
|
|
from django.core.files.storage import FileSystemStorage
|
|
from django.conf import settings
|
|
from django.conf import settings
|
|
@@ -112,5 +114,34 @@ def end_of_month():
|
|
else:
|
|
else:
|
|
return date(today.year, today.month + 1, 1) - timedelta(days=1)
|
|
return date(today.year, today.month + 1, 1) - timedelta(days=1)
|
|
|
|
|
|
|
|
+@contextmanager
|
|
|
|
+def respect_language(language):
|
|
|
|
+ """Context manager that changes the current translation language for
|
|
|
|
+ all code inside the following block.
|
|
|
|
+ Can be used like this::
|
|
|
|
+ from amorce.utils import respect_language
|
|
|
|
+ def my_func(language='fr'):
|
|
|
|
+ with respect_language(language):
|
|
|
|
+ pass
|
|
|
|
+ """
|
|
|
|
+ if language:
|
|
|
|
+ prev = translation.get_language()
|
|
|
|
+ translation.activate(language)
|
|
|
|
+ try:
|
|
|
|
+ yield
|
|
|
|
+ finally:
|
|
|
|
+ translation.activate(prev)
|
|
|
|
+ else:
|
|
|
|
+ yield
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def respects_language(fun):
|
|
|
|
+ """Associated decorator"""
|
|
|
|
+ @wraps(fun)
|
|
|
|
+ def _inner(*args, **kwargs):
|
|
|
|
+ with respect_language(kwargs.pop('language', None)):
|
|
|
|
+ return fun(*args, **kwargs)
|
|
|
|
+ return _inner
|
|
|
|
+
|
|
if __name__ == '__main__':
|
|
if __name__ == '__main__':
|
|
print(ldap_hash('coin'))
|
|
print(ldap_hash('coin'))
|