forked from talishte/django-mtr-sync
-
Notifications
You must be signed in to change notification settings - Fork 0
/
helpers.py
71 lines (46 loc) · 1.75 KB
/
helpers.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import os
from functools import wraps
import django
from django.shortcuts import render
from django.utils.translation import gettext_lazy as gettext_lazy_original
def gettext_prefix(string, context=None):
"""Adding prefix for gettext message string"""
return '{}:{}'.format('mtr.sync' or context, string)
def gettext_lazy(string, context=None):
"""Lazy gettext shortcut"""
return gettext_lazy_original(gettext_prefix(string, context))
def themed(template, version_subdirectory=False):
"""Changing template themes by setting THEME_PATH and django version"""
path = 'default'
if version_subdirectory:
path = os.path.join(path, django.get_version()[:3])
return os.path.join('mtr', 'sync', path, template)
def render_to(template, *args, **kwargs):
"""Shortuct for rendering templates,
creates functions that returns decorator for view"""
decorator_kwargs = kwargs
# outer decorator
def decorator(f):
# inner decorator
@wraps(f)
def wrapper(request, *args, **kwargs):
response = f(request, *args, **kwargs)
if isinstance(response, dict):
new_template = template
if decorator_kwargs.pop('themed', True):
new_template = themed(template)
return render(
request, new_template,
response, **decorator_kwargs)
else:
return response
return wrapper
return decorator
def make_from_params(cls, params):
"""Create or fetch Model instance from params"""
instance_id = params.get('id', False)
if instance_id:
instance = cls.objects.get(pk=instance_id)
else:
instance = cls(**params)
return instance