Statistics
| Branch: | Tag: | Revision:

root / snf-astakos-app / astakos / test / views.py @ 26498848

History | View | Annotate | Download (3.1 kB)

1 2f0cd9e1 Giorgos Korfiatis
# Copyright 2013 GRNET S.A. All rights reserved.
2 2f0cd9e1 Giorgos Korfiatis
#
3 2f0cd9e1 Giorgos Korfiatis
# Redistribution and use in source and binary forms, with or
4 2f0cd9e1 Giorgos Korfiatis
# without modification, are permitted provided that the following
5 2f0cd9e1 Giorgos Korfiatis
# conditions are met:
6 2f0cd9e1 Giorgos Korfiatis
#
7 2f0cd9e1 Giorgos Korfiatis
#   1. Redistributions of source code must retain the above
8 2f0cd9e1 Giorgos Korfiatis
#      copyright notice, this list of conditions and the following
9 2f0cd9e1 Giorgos Korfiatis
#      disclaimer.
10 2f0cd9e1 Giorgos Korfiatis
#
11 2f0cd9e1 Giorgos Korfiatis
#   2. Redistributions in binary form must reproduce the above
12 2f0cd9e1 Giorgos Korfiatis
#      copyright notice, this list of conditions and the following
13 2f0cd9e1 Giorgos Korfiatis
#      disclaimer in the documentation and/or other materials
14 2f0cd9e1 Giorgos Korfiatis
#      provided with the distribution.
15 2f0cd9e1 Giorgos Korfiatis
#
16 2f0cd9e1 Giorgos Korfiatis
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 2f0cd9e1 Giorgos Korfiatis
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 2f0cd9e1 Giorgos Korfiatis
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 2f0cd9e1 Giorgos Korfiatis
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 2f0cd9e1 Giorgos Korfiatis
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 2f0cd9e1 Giorgos Korfiatis
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 2f0cd9e1 Giorgos Korfiatis
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 2f0cd9e1 Giorgos Korfiatis
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 2f0cd9e1 Giorgos Korfiatis
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 2f0cd9e1 Giorgos Korfiatis
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 2f0cd9e1 Giorgos Korfiatis
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 2f0cd9e1 Giorgos Korfiatis
# POSSIBILITY OF SUCH DAMAGE.
28 2f0cd9e1 Giorgos Korfiatis
#
29 2f0cd9e1 Giorgos Korfiatis
# The views and conclusions contained in the software and
30 2f0cd9e1 Giorgos Korfiatis
# documentation are those of the authors and should not be
31 2f0cd9e1 Giorgos Korfiatis
# interpreted as representing official policies, either expressed
32 2f0cd9e1 Giorgos Korfiatis
# or implied, of GRNET S.A.
33 2f0cd9e1 Giorgos Korfiatis
34 2f0cd9e1 Giorgos Korfiatis
from datetime import datetime, timedelta
35 2f0cd9e1 Giorgos Korfiatis
36 770dba12 Giorgos Korfiatis
from django.core.exceptions import PermissionDenied
37 770dba12 Giorgos Korfiatis
from astakos.im.models import AstakosUser, ProjectApplication
38 2f0cd9e1 Giorgos Korfiatis
from astakos.im.functions import (join_project, leave_project,
39 770dba12 Giorgos Korfiatis
                                  submit_application, approve_application,
40 3c22bad0 Giorgos Korfiatis
                                  get_user_by_id, check_pending_app_quota)
41 b830f774 Giorgos Korfiatis
from snf_django.lib.db.transaction import commit_on_success_strict
42 2f0cd9e1 Giorgos Korfiatis
43 770dba12 Giorgos Korfiatis
44 757f3256 Giorgos Korfiatis
@commit_on_success_strict()
45 770dba12 Giorgos Korfiatis
def join(proj_id, user_id):
46 770dba12 Giorgos Korfiatis
    join_project(proj_id, get_user_by_id(user_id))
47 770dba12 Giorgos Korfiatis
48 2f0cd9e1 Giorgos Korfiatis
49 757f3256 Giorgos Korfiatis
@commit_on_success_strict()
50 770dba12 Giorgos Korfiatis
def leave(proj_id, user_id):
51 770dba12 Giorgos Korfiatis
    leave_project(proj_id, get_user_by_id(user_id))
52 770dba12 Giorgos Korfiatis
53 2f0cd9e1 Giorgos Korfiatis
54 757f3256 Giorgos Korfiatis
@commit_on_success_strict()
55 770dba12 Giorgos Korfiatis
def submit(name, user_id, prec):
56 2f0cd9e1 Giorgos Korfiatis
    try:
57 2f0cd9e1 Giorgos Korfiatis
        owner = AstakosUser.objects.get(id=user_id)
58 2f0cd9e1 Giorgos Korfiatis
    except AstakosUser.DoesNotExist:
59 2f0cd9e1 Giorgos Korfiatis
        raise AttributeError('user does not exist')
60 2f0cd9e1 Giorgos Korfiatis
61 770dba12 Giorgos Korfiatis
    precursor = (ProjectApplication.objects.get(id=prec)
62 770dba12 Giorgos Korfiatis
                 if prec is not None
63 770dba12 Giorgos Korfiatis
                 else None)
64 770dba12 Giorgos Korfiatis
65 3c22bad0 Giorgos Korfiatis
    ok, limit = check_pending_app_quota(owner, precursor=precursor)
66 770dba12 Giorgos Korfiatis
    if not ok:
67 770dba12 Giorgos Korfiatis
        raise PermissionDenied('Limit %s reached', limit)
68 770dba12 Giorgos Korfiatis
69 770dba12 Giorgos Korfiatis
    resource_policies = [('cyclades.network.private', 5)]
70 2f0cd9e1 Giorgos Korfiatis
    data = {'owner': owner,
71 2f0cd9e1 Giorgos Korfiatis
            'name': name,
72 770dba12 Giorgos Korfiatis
            'precursor_id': prec,
73 2f0cd9e1 Giorgos Korfiatis
            'end_date': datetime.now() + timedelta(days=1),
74 2f0cd9e1 Giorgos Korfiatis
            'member_join_policy': 1,
75 2f0cd9e1 Giorgos Korfiatis
            'member_leave_policy': 1,
76 2f0cd9e1 Giorgos Korfiatis
            'resource_policies': resource_policies,
77 770dba12 Giorgos Korfiatis
            'request_user': owner
78 2f0cd9e1 Giorgos Korfiatis
            }
79 2f0cd9e1 Giorgos Korfiatis
80 770dba12 Giorgos Korfiatis
    app = submit_application(**data)
81 2f0cd9e1 Giorgos Korfiatis
    return app.id
82 2f0cd9e1 Giorgos Korfiatis
83 770dba12 Giorgos Korfiatis
84 757f3256 Giorgos Korfiatis
@commit_on_success_strict()
85 770dba12 Giorgos Korfiatis
def approve(app_id):
86 2f0cd9e1 Giorgos Korfiatis
    approve_application(app_id)