Statistics
| Branch: | Tag: | Revision:

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

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.core.exceptions import PermissionDenied
37
from astakos.im.models import AstakosUser, ProjectApplication
38
from astakos.im.functions import (join_project, leave_project,
39
                                  submit_application, approve_application,
40
                                  get_user_by_id, check_pending_app_quota)
41
from snf_django.lib.db.transaction import commit_on_success_strict
42

    
43

    
44
@commit_on_success_strict()
45
def join(proj_id, user_id):
46
    join_project(proj_id, get_user_by_id(user_id))
47

    
48

    
49
@commit_on_success_strict()
50
def leave(proj_id, user_id):
51
    leave_project(proj_id, get_user_by_id(user_id))
52

    
53

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

    
61
    precursor = (ProjectApplication.objects.get(id=prec)
62
                 if prec is not None
63
                 else None)
64

    
65
    ok, limit = check_pending_app_quota(owner, precursor=precursor)
66
    if not ok:
67
        raise PermissionDenied('Limit %s reached', limit)
68

    
69
    resource_policies = [('cyclades.network.private', 5)]
70
    data = {'owner': owner,
71
            'name': name,
72
            'precursor_id': prec,
73
            'end_date': datetime.now() + timedelta(days=1),
74
            'member_join_policy': 1,
75
            'member_leave_policy': 1,
76
            'resource_policies': resource_policies,
77
            'request_user': owner
78
            }
79

    
80
    app = submit_application(**data)
81
    return app.id
82

    
83

    
84
@commit_on_success_strict()
85
def approve(app_id):
86
    approve_application(app_id)