Statistics
| Branch: | Tag: | Revision:

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

History | View | Annotate | Download (3.1 kB)

1
# Copyright 2013 GRNET S.A. All rights reserved.
2
#
3
# Redistribution and use in source and binary forms, with or
4
# without modification, are permitted provided that the following
5
# conditions are met:
6
#
7
#   1. Redistributions of source code must retain the above
8
#      copyright notice, this list of conditions and the following
9
#      disclaimer.
10
#
11
#   2. Redistributions in binary form must reproduce the above
12
#      copyright notice, this list of conditions and the following
13
#      disclaimer in the documentation and/or other materials
14
#      provided with the distribution.
15
#
16
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
# POSSIBILITY OF SUCH DAMAGE.
28
#
29
# The views and conclusions contained in the software and
30
# documentation are those of the authors and should not be
31
# interpreted as representing official policies, either expressed
32
# or implied, of GRNET S.A.
33

    
34
from datetime import datetime, timedelta
35

    
36
from django.db import transaction
37
from astakos.im.models import AstakosUser, Project
38
from astakos.im.functions import (join_project, leave_project,
39
                                  submit_application, approve_application,
40
                                  check_pending_app_quota,
41
                                  ProjectForbidden)
42

    
43

    
44
@transaction.commit_on_success
45
def join(proj_id, user):
46
    return join_project(proj_id, user)
47

    
48

    
49
@transaction.commit_on_success
50
def leave(memb_id, request_user):
51
    return leave_project(memb_id, request_user)
52

    
53

    
54
@transaction.commit_on_success
55
def submit(name, user_id, project_id=None):
56
    try:
57
        owner = AstakosUser.objects.get(id=user_id)
58
    except AstakosUser.DoesNotExist:
59
        raise AttributeError('user does not exist')
60

    
61
    project = (Project.objects.get(id=project_id) if project_id is not None
62
               else None)
63
    ok, limit = check_pending_app_quota(owner, project=project)
64
    if not ok:
65
        raise ProjectForbidden('Limit %s reached', limit)
66

    
67
    resource_policies = {'cyclades.network.private': {'member_capacity': 5}}
68
    data = {'owner': owner,
69
            'name': name,
70
            'project_id': project_id,
71
            'end_date': datetime.now() + timedelta(days=1),
72
            'member_join_policy': 1,
73
            'member_leave_policy': 1,
74
            'resources': resource_policies,
75
            'request_user': owner
76
            }
77

    
78
    app = submit_application(**data)
79
    return app.id, app.chain_id
80

    
81

    
82
@transaction.commit_on_success
83
def approve(app_id):
84
    approve_application(app_id)