##// END OF EJS Templates
Merged with default branch
Merged with default branch

File last commit:

r990:28175b48 default
r1015:c84f21f3 merge decentral
Show More
utils.py
69 lines | 1.9 KiB | text/x-python | PythonLexer
"""
This module contains helper functions and helper classes.
"""
import time
import hmac
from django.core.cache import cache
from django.db.models import Model
from django.utils import timezone
from neboard import settings
KEY_CAPTCHA_FAILS = 'key_captcha_fails'
KEY_CAPTCHA_DELAY_TIME = 'key_captcha_delay_time'
KEY_CAPTCHA_LAST_ACTIVITY = 'key_captcha_last_activity'
def get_client_ip(request):
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
if x_forwarded_for:
ip = x_forwarded_for.split(',')[-1].strip()
else:
ip = request.META.get('REMOTE_ADDR')
return ip
# TODO The output format is not epoch because it includes microseconds
def datetime_to_epoch(datetime):
return int(time.mktime(timezone.localtime(
datetime,timezone.get_current_timezone()).timetuple())
* 1000000 + datetime.microsecond)
def get_websocket_token(user_id='', timestamp=''):
"""
Create token to validate information provided by new connection.
"""
sign = hmac.new(settings.CENTRIFUGE_PROJECT_SECRET.encode())
sign.update(settings.CENTRIFUGE_PROJECT_ID.encode())
sign.update(user_id.encode())
sign.update(timestamp.encode())
token = sign.hexdigest()
return token
def cached_result(function):
"""
Caches method result in the Django's cache system, persisted by object name,
object name and model id if object is a Django model.
"""
def inner_func(obj, *args, **kwargs):
# TODO Include method arguments to the cache key
cache_key = obj.__class__.__name__ + '_' + function.__name__
if isinstance(obj, Model):
cache_key += '_' + str(obj.id)
persisted_result = cache.get(cache_key)
if persisted_result:
result = persisted_result
else:
result = function(obj, *args, **kwargs)
cache.set(cache_key, result)
return result
return inner_func