Statistics
| Branch: | Tag: | Revision:

root / snf-astakos-app / astakos / im / management / commands / user-invite.py @ 6bdf0aa3

History | View | Annotate | Download (3 kB)

1 add3d318 Giorgos Verigakis
# Copyright 2012 GRNET S.A. All rights reserved.
2 add3d318 Giorgos Verigakis
#
3 add3d318 Giorgos Verigakis
# Redistribution and use in source and binary forms, with or
4 add3d318 Giorgos Verigakis
# without modification, are permitted provided that the following
5 add3d318 Giorgos Verigakis
# conditions are met:
6 add3d318 Giorgos Verigakis
#
7 add3d318 Giorgos Verigakis
#   1. Redistributions of source code must retain the above
8 add3d318 Giorgos Verigakis
#      copyright notice, this list of conditions and the following
9 add3d318 Giorgos Verigakis
#      disclaimer.
10 add3d318 Giorgos Verigakis
#
11 add3d318 Giorgos Verigakis
#   2. Redistributions in binary form must reproduce the above
12 add3d318 Giorgos Verigakis
#      copyright notice, this list of conditions and the following
13 add3d318 Giorgos Verigakis
#      disclaimer in the documentation and/or other materials
14 add3d318 Giorgos Verigakis
#      provided with the distribution.
15 add3d318 Giorgos Verigakis
#
16 add3d318 Giorgos Verigakis
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 add3d318 Giorgos Verigakis
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 add3d318 Giorgos Verigakis
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 add3d318 Giorgos Verigakis
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 add3d318 Giorgos Verigakis
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 add3d318 Giorgos Verigakis
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 add3d318 Giorgos Verigakis
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 add3d318 Giorgos Verigakis
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 add3d318 Giorgos Verigakis
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 add3d318 Giorgos Verigakis
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 add3d318 Giorgos Verigakis
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 add3d318 Giorgos Verigakis
# POSSIBILITY OF SUCH DAMAGE.
28 add3d318 Giorgos Verigakis
#
29 add3d318 Giorgos Verigakis
# The views and conclusions contained in the software and
30 add3d318 Giorgos Verigakis
# documentation are those of the authors and should not be
31 add3d318 Giorgos Verigakis
# interpreted as representing official policies, either expressed
32 add3d318 Giorgos Verigakis
# or implied, of GRNET S.A.
33 add3d318 Giorgos Verigakis
34 add3d318 Giorgos Verigakis
from django.core.management.base import BaseCommand, CommandError
35 ebd369d0 Sofia Papagiannaki
from django.db.utils import IntegrityError
36 18ffbee1 Sofia Papagiannaki
from django.db import transaction
37 add3d318 Giorgos Verigakis
38 8f5a3a06 Sofia Papagiannaki
from astakos.im.functions import invite, SendMailError
39 18ffbee1 Sofia Papagiannaki
from astakos.im.models import Invitation
40 397d5cbe Giorgos Verigakis
41 397d5cbe Giorgos Verigakis
from ._common import get_user
42 add3d318 Giorgos Verigakis
43 5ce3ce4f Sofia Papagiannaki
44 18ffbee1 Sofia Papagiannaki
@transaction.commit_manually
45 add3d318 Giorgos Verigakis
class Command(BaseCommand):
46 add3d318 Giorgos Verigakis
    args = "<inviter id or email> <email> <real name>"
47 d01e7b22 Antony Chazapis
    help = "Invite a user"
48 5ce3ce4f Sofia Papagiannaki
49 add3d318 Giorgos Verigakis
    def handle(self, *args, **options):
50 add3d318 Giorgos Verigakis
        if len(args) != 3:
51 add3d318 Giorgos Verigakis
            raise CommandError("Invalid number of arguments")
52 5ce3ce4f Sofia Papagiannaki
53 0a569195 Sofia Papagiannaki
        inviter = get_user(args[0], is_active=True)
54 fc28d013 Sofia Papagiannaki
        if not inviter:
55 e939cf3d Sofia Papagiannaki
            raise CommandError("Unknown inviter")
56 5ce3ce4f Sofia Papagiannaki
        if not inviter.is_active:
57 e939cf3d Sofia Papagiannaki
            raise CommandError("Inactive inviter")
58 5ce3ce4f Sofia Papagiannaki
59 add3d318 Giorgos Verigakis
        if inviter.invitations > 0:
60 397d5cbe Giorgos Verigakis
            email = args[1]
61 397d5cbe Giorgos Verigakis
            realname = args[2]
62 5ce3ce4f Sofia Papagiannaki
63 add3d318 Giorgos Verigakis
            try:
64 5ce3ce4f Sofia Papagiannaki
                invitation = Invitation(
65 5ce3ce4f Sofia Papagiannaki
                    username=email, realname=realname, inviter=inviter)
66 8f5a3a06 Sofia Papagiannaki
                invite(invitation, inviter)
67 add3d318 Giorgos Verigakis
                self.stdout.write("Invitation sent to '%s'\n" % (email,))
68 8f5a3a06 Sofia Papagiannaki
            except SendMailError, e:
69 18ffbee1 Sofia Papagiannaki
                transaction.rollback()
70 8f5a3a06 Sofia Papagiannaki
                raise CommandError(e.message)
71 ebd369d0 Sofia Papagiannaki
            except IntegrityError, e:
72 18ffbee1 Sofia Papagiannaki
                transaction.rollback()
73 5ce3ce4f Sofia Papagiannaki
                raise CommandError(
74 5ce3ce4f Sofia Papagiannaki
                    "There is already an invitation for %s" % (email,))
75 18ffbee1 Sofia Papagiannaki
            else:
76 18ffbee1 Sofia Papagiannaki
                transaction.commit()
77 add3d318 Giorgos Verigakis
        else:
78 add3d318 Giorgos Verigakis
            raise CommandError("No invitations left")