Statistics
| Branch: | Tag: | Revision:

root / snf-astakos-app / astakos / im / management / commands / _common.py @ a3c6203c

History | View | Annotate | Download (5.2 kB)

1 a3c6203c Giorgos Korfiatis
# Copyright 2012, 2013 GRNET S.A. All rights reserved.
2 397d5cbe Giorgos Verigakis
#
3 397d5cbe Giorgos Verigakis
# Redistribution and use in source and binary forms, with or
4 397d5cbe Giorgos Verigakis
# without modification, are permitted provided that the following
5 397d5cbe Giorgos Verigakis
# conditions are met:
6 397d5cbe Giorgos Verigakis
#
7 397d5cbe Giorgos Verigakis
#   1. Redistributions of source code must retain the above
8 397d5cbe Giorgos Verigakis
#      copyright notice, this list of conditions and the following
9 397d5cbe Giorgos Verigakis
#      disclaimer.
10 397d5cbe Giorgos Verigakis
#
11 397d5cbe Giorgos Verigakis
#   2. Redistributions in binary form must reproduce the above
12 397d5cbe Giorgos Verigakis
#      copyright notice, this list of conditions and the following
13 397d5cbe Giorgos Verigakis
#      disclaimer in the documentation and/or other materials
14 397d5cbe Giorgos Verigakis
#      provided with the distribution.
15 397d5cbe Giorgos Verigakis
#
16 397d5cbe Giorgos Verigakis
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 397d5cbe Giorgos Verigakis
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 397d5cbe Giorgos Verigakis
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 397d5cbe Giorgos Verigakis
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 397d5cbe Giorgos Verigakis
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 397d5cbe Giorgos Verigakis
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 397d5cbe Giorgos Verigakis
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 397d5cbe Giorgos Verigakis
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 397d5cbe Giorgos Verigakis
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 397d5cbe Giorgos Verigakis
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 397d5cbe Giorgos Verigakis
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 397d5cbe Giorgos Verigakis
# POSSIBILITY OF SUCH DAMAGE.
28 397d5cbe Giorgos Verigakis
#
29 397d5cbe Giorgos Verigakis
# The views and conclusions contained in the software and
30 397d5cbe Giorgos Verigakis
# documentation are those of the authors and should not be
31 397d5cbe Giorgos Verigakis
# interpreted as representing official policies, either expressed
32 397d5cbe Giorgos Verigakis
# or implied, of GRNET S.A.
33 397d5cbe Giorgos Verigakis
34 397d5cbe Giorgos Verigakis
from datetime import datetime
35 397d5cbe Giorgos Verigakis
36 397d5cbe Giorgos Verigakis
from django.utils.timesince import timesince, timeuntil
37 30dc8c1a Sofia Papagiannaki
from django.contrib.auth.models import Permission
38 30dc8c1a Sofia Papagiannaki
from django.contrib.contenttypes.models import ContentType
39 397d5cbe Giorgos Verigakis
40 a3c6203c Giorgos Korfiatis
from synnefo.lib.ordereddict import OrderedDict
41 397d5cbe Giorgos Verigakis
from astakos.im.models import AstakosUser
42 397d5cbe Giorgos Verigakis
43 9a06d96f Olga Brani
DEFAULT_CONTENT_TYPE = None
44 397d5cbe Giorgos Verigakis
45 5ce3ce4f Sofia Papagiannaki
46 0a569195 Sofia Papagiannaki
def get_user(email_or_id, **kwargs):
47 397d5cbe Giorgos Verigakis
    try:
48 397d5cbe Giorgos Verigakis
        if email_or_id.isdigit():
49 397d5cbe Giorgos Verigakis
            return AstakosUser.objects.get(id=int(email_or_id))
50 397d5cbe Giorgos Verigakis
        else:
51 789a5951 Sofia Papagiannaki
            return AstakosUser.objects.get(email__iexact=email_or_id, **kwargs)
52 0a569195 Sofia Papagiannaki
    except AstakosUser.DoesNotExist, AstakosUser.MultipleObjectsReturned:
53 397d5cbe Giorgos Verigakis
        return None
54 397d5cbe Giorgos Verigakis
55 5ce3ce4f Sofia Papagiannaki
56 397d5cbe Giorgos Verigakis
def format_bool(b):
57 397d5cbe Giorgos Verigakis
    return 'YES' if b else 'NO'
58 397d5cbe Giorgos Verigakis
59 397d5cbe Giorgos Verigakis
60 397d5cbe Giorgos Verigakis
def format_date(d):
61 397d5cbe Giorgos Verigakis
    if not d:
62 397d5cbe Giorgos Verigakis
        return ''
63 397d5cbe Giorgos Verigakis
64 397d5cbe Giorgos Verigakis
    if d < datetime.now():
65 397d5cbe Giorgos Verigakis
        return timesince(d) + ' ago'
66 397d5cbe Giorgos Verigakis
    else:
67 397d5cbe Giorgos Verigakis
        return 'in ' + timeuntil(d)
68 30dc8c1a Sofia Papagiannaki
69 437c0052 Sofia Papagiannaki
def format_dict(d, level=1, ident=22):
70 a3c6203c Giorgos Korfiatis
    iteritems = d.iteritems()
71 a3c6203c Giorgos Korfiatis
    if not isinstance(d, OrderedDict):
72 a3c6203c Giorgos Korfiatis
        iteritems = sorted(iteritems)
73 a3c6203c Giorgos Korfiatis
74 a3c6203c Giorgos Korfiatis
    l = ['%s: %s\n' % (k.rjust(level*ident), format(v, level+1))
75 a3c6203c Giorgos Korfiatis
         for k, v in iteritems]
76 437c0052 Sofia Papagiannaki
    l.insert(0, '\n')
77 437c0052 Sofia Papagiannaki
    return ''.join(l)
78 437c0052 Sofia Papagiannaki
79 437c0052 Sofia Papagiannaki
def format_set(s):
80 437c0052 Sofia Papagiannaki
    return list(s)
81 437c0052 Sofia Papagiannaki
82 437c0052 Sofia Papagiannaki
def format(obj, level=1, ident=22):
83 437c0052 Sofia Papagiannaki
    if isinstance(obj, bool):
84 437c0052 Sofia Papagiannaki
        return format_bool(obj)
85 437c0052 Sofia Papagiannaki
    elif isinstance(obj, datetime):
86 437c0052 Sofia Papagiannaki
        return format_date(obj)
87 437c0052 Sofia Papagiannaki
    elif isinstance(obj, dict):
88 437c0052 Sofia Papagiannaki
        return format_dict(obj, level, ident)
89 437c0052 Sofia Papagiannaki
    elif isinstance(obj, set):
90 437c0052 Sofia Papagiannaki
        return format_set(obj)
91 437c0052 Sofia Papagiannaki
    else:
92 437c0052 Sofia Papagiannaki
        return obj
93 5ce3ce4f Sofia Papagiannaki
94 30dc8c1a Sofia Papagiannaki
def get_astakosuser_content_type():
95 30dc8c1a Sofia Papagiannaki
    try:
96 30dc8c1a Sofia Papagiannaki
        return ContentType.objects.get(app_label='im',
97 30dc8c1a Sofia Papagiannaki
                                       model='astakosuser')
98 30dc8c1a Sofia Papagiannaki
    except:
99 9a06d96f Olga Brani
        return DEFAULT_CONTENT_TYPE
100 5ce3ce4f Sofia Papagiannaki
101 5ce3ce4f Sofia Papagiannaki
102 30dc8c1a Sofia Papagiannaki
def add_user_permission(user, pname):
103 30dc8c1a Sofia Papagiannaki
    content_type = get_astakosuser_content_type()
104 30dc8c1a Sofia Papagiannaki
    if user.has_perm(pname):
105 30dc8c1a Sofia Papagiannaki
        return 0, None
106 30dc8c1a Sofia Papagiannaki
    p, created = Permission.objects.get_or_create(codename=pname,
107 30dc8c1a Sofia Papagiannaki
                                                  name=pname.capitalize(),
108 30dc8c1a Sofia Papagiannaki
                                                  content_type=content_type)
109 30dc8c1a Sofia Papagiannaki
    user.user_permissions.add(p)
110 30dc8c1a Sofia Papagiannaki
    return 1, created
111 30dc8c1a Sofia Papagiannaki
112 5ce3ce4f Sofia Papagiannaki
113 30dc8c1a Sofia Papagiannaki
def add_group_permission(group, pname):
114 30dc8c1a Sofia Papagiannaki
    content_type = get_astakosuser_content_type()
115 30dc8c1a Sofia Papagiannaki
    if pname in [p.codename for p in group.permissions.all()]:
116 30dc8c1a Sofia Papagiannaki
        return 0, None
117 30dc8c1a Sofia Papagiannaki
    content_type = ContentType.objects.get(app_label='im',
118 30dc8c1a Sofia Papagiannaki
                                           model='astakosuser')
119 30dc8c1a Sofia Papagiannaki
    p, created = Permission.objects.get_or_create(codename=pname,
120 30dc8c1a Sofia Papagiannaki
                                                  name=pname.capitalize(),
121 30dc8c1a Sofia Papagiannaki
                                                  content_type=content_type)
122 30dc8c1a Sofia Papagiannaki
    group.permissions.add(p)
123 30dc8c1a Sofia Papagiannaki
    return 1, created
124 30dc8c1a Sofia Papagiannaki
125 5ce3ce4f Sofia Papagiannaki
126 30dc8c1a Sofia Papagiannaki
def remove_user_permission(user, pname):
127 30dc8c1a Sofia Papagiannaki
    content_type = get_astakosuser_content_type()
128 30dc8c1a Sofia Papagiannaki
    if user.has_perm(pname):
129 30dc8c1a Sofia Papagiannaki
        return 0
130 30dc8c1a Sofia Papagiannaki
    try:
131 30dc8c1a Sofia Papagiannaki
        p = Permission.objects.get(codename=pname,
132 5ce3ce4f Sofia Papagiannaki
                                   content_type=content_type)
133 30dc8c1a Sofia Papagiannaki
        user.user_permissions.remove(p)
134 30dc8c1a Sofia Papagiannaki
        return 1
135 aab4d540 Sofia Papagiannaki
    except Permission.DoesNotExist:
136 30dc8c1a Sofia Papagiannaki
        return -1
137 30dc8c1a Sofia Papagiannaki
138 5ce3ce4f Sofia Papagiannaki
139 30dc8c1a Sofia Papagiannaki
def remove_group_permission(group, pname):
140 30dc8c1a Sofia Papagiannaki
    content_type = get_astakosuser_content_type()
141 30dc8c1a Sofia Papagiannaki
    if pname not in [p.codename for p in group.permissions.all()]:
142 30dc8c1a Sofia Papagiannaki
        return 0
143 30dc8c1a Sofia Papagiannaki
    try:
144 30dc8c1a Sofia Papagiannaki
        p = Permission.objects.get(codename=pname,
145 5ce3ce4f Sofia Papagiannaki
                                   content_type=content_type)
146 30dc8c1a Sofia Papagiannaki
        group.permissions.remove(p)
147 30dc8c1a Sofia Papagiannaki
        return 1
148 aab4d540 Sofia Papagiannaki
    except Permission.DoesNotExist:
149 5ce3ce4f Sofia Papagiannaki
        return -1
150 7eabbd72 Giorgos Korfiatis
151 7eabbd72 Giorgos Korfiatis
def shortened(s, limit, suffix=True):
152 7eabbd72 Giorgos Korfiatis
    length = len(s)
153 7eabbd72 Giorgos Korfiatis
    if length <= limit:
154 7eabbd72 Giorgos Korfiatis
        return s
155 7eabbd72 Giorgos Korfiatis
    else:
156 7eabbd72 Giorgos Korfiatis
        display = limit - 2
157 7eabbd72 Giorgos Korfiatis
        if suffix:
158 7eabbd72 Giorgos Korfiatis
            return '..' + s[-display:]
159 7eabbd72 Giorgos Korfiatis
        else:
160 7eabbd72 Giorgos Korfiatis
            return s[:display] + '..'