Statistics
| Branch: | Tag: | Revision:

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

History | View | Annotate | Download (3.2 kB)

1 ff5edb80 Giorgos Korfiatis
# Copyright 2013-2014 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 a3e3917f Giorgos Korfiatis
from django.db import transaction
37 9096ffbb Giorgos Korfiatis
from astakos.im.models import AstakosUser, Project
38 2f0cd9e1 Giorgos Korfiatis
from astakos.im.functions import (join_project, leave_project,
39 770dba12 Giorgos Korfiatis
                                  submit_application, approve_application,
40 9096ffbb Giorgos Korfiatis
                                  check_pending_app_quota,
41 f12bcb3d Giorgos Korfiatis
                                  ProjectForbidden)
42 2f0cd9e1 Giorgos Korfiatis
43 770dba12 Giorgos Korfiatis
44 a3e3917f Giorgos Korfiatis
@transaction.commit_on_success
45 9096ffbb Giorgos Korfiatis
def join(proj_id, user):
46 9096ffbb Giorgos Korfiatis
    return join_project(proj_id, user)
47 770dba12 Giorgos Korfiatis
48 2f0cd9e1 Giorgos Korfiatis
49 a3e3917f Giorgos Korfiatis
@transaction.commit_on_success
50 9096ffbb Giorgos Korfiatis
def leave(memb_id, request_user):
51 9096ffbb Giorgos Korfiatis
    return leave_project(memb_id, request_user)
52 770dba12 Giorgos Korfiatis
53 2f0cd9e1 Giorgos Korfiatis
54 a3e3917f Giorgos Korfiatis
@transaction.commit_on_success
55 9096ffbb Giorgos Korfiatis
def submit(name, user_id, project_id=None):
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 9096ffbb Giorgos Korfiatis
    project = (Project.objects.get(id=project_id) if project_id is not None
62 9096ffbb Giorgos Korfiatis
               else None)
63 9096ffbb Giorgos Korfiatis
    ok, limit = check_pending_app_quota(owner, project=project)
64 770dba12 Giorgos Korfiatis
    if not ok:
65 f12bcb3d Giorgos Korfiatis
        raise ProjectForbidden('Limit %s reached', limit)
66 770dba12 Giorgos Korfiatis
67 2070c5f8 Giorgos Korfiatis
    resource_policies = {'cyclades.network.private': {'member_capacity': 5,
68 2070c5f8 Giorgos Korfiatis
                                                      'project_capacity': 10}}
69 2f0cd9e1 Giorgos Korfiatis
    data = {'owner': owner,
70 2f0cd9e1 Giorgos Korfiatis
            'name': name,
71 9096ffbb Giorgos Korfiatis
            'project_id': project_id,
72 2f0cd9e1 Giorgos Korfiatis
            'end_date': datetime.now() + timedelta(days=1),
73 2f0cd9e1 Giorgos Korfiatis
            'member_join_policy': 1,
74 2f0cd9e1 Giorgos Korfiatis
            'member_leave_policy': 1,
75 9096ffbb Giorgos Korfiatis
            'resources': resource_policies,
76 770dba12 Giorgos Korfiatis
            'request_user': owner
77 2f0cd9e1 Giorgos Korfiatis
            }
78 2f0cd9e1 Giorgos Korfiatis
79 770dba12 Giorgos Korfiatis
    app = submit_application(**data)
80 9096ffbb Giorgos Korfiatis
    return app.id, app.chain_id
81 2f0cd9e1 Giorgos Korfiatis
82 770dba12 Giorgos Korfiatis
83 a3e3917f Giorgos Korfiatis
@transaction.commit_on_success
84 770dba12 Giorgos Korfiatis
def approve(app_id):
85 2f0cd9e1 Giorgos Korfiatis
    approve_application(app_id)