Revision e1a80257 snf-astakos-app/astakos/im/views.py
b/snf-astakos-app/astakos/im/views.py | ||
---|---|---|
53 | 53 |
from django.template import RequestContext, loader as template_loader |
54 | 54 |
from django.utils.http import urlencode |
55 | 55 |
from django.utils.translation import ugettext as _ |
56 |
from django.views.generic.create_update import (delete_object, |
|
57 |
get_model_and_form_class) |
|
56 |
from django.views.generic.create_update import ( |
|
57 |
create_object, delete_object, get_model_and_form_class |
|
58 |
) |
|
58 | 59 |
from django.views.generic.list_detail import object_list |
59 | 60 |
from django.core.xheaders import populate_xheaders |
60 | 61 |
from django.core.exceptions import ValidationError, PermissionDenied |
... | ... | |
63 | 64 |
from django.db.models import Q |
64 | 65 |
|
65 | 66 |
from astakos.im.activation_backends import get_backend, SimpleBackend |
66 |
from astakos.im.models import (AstakosUser, ApprovalTerms, AstakosGroup, |
|
67 |
EmailChange, GroupKind, Membership, |
|
68 |
RESOURCE_SEPARATOR, AstakosUserAuthProvider) |
|
67 |
from astakos.im.models import ( |
|
68 |
AstakosUser, ApprovalTerms, AstakosGroup, |
|
69 |
EmailChange, GroupKind, Membership, |
|
70 |
RESOURCE_SEPARATOR, AstakosUserAuthProvider, |
|
71 |
ProjectApplication |
|
72 |
) |
|
69 | 73 |
from astakos.im.util import get_context, prepare_response, get_query, restrict_next |
70 |
from astakos.im.forms import (LoginForm, InvitationForm, ProfileForm, |
|
71 |
FeedbackForm, SignApprovalTermsForm, |
|
72 |
EmailChangeForm, |
|
73 |
AstakosGroupCreationForm, AstakosGroupSearchForm, |
|
74 |
AstakosGroupUpdateForm, AddGroupMembersForm, |
|
75 |
MembersSortForm, AstakosGroupSortForm, |
|
76 |
TimelineForm, PickResourceForm, |
|
77 |
AstakosGroupCreationSummaryForm) |
|
74 |
from astakos.im.forms import ( |
|
75 |
LoginForm, InvitationForm, ProfileForm, |
|
76 |
FeedbackForm, SignApprovalTermsForm, |
|
77 |
EmailChangeForm, |
|
78 |
AstakosGroupCreationForm, AstakosGroupSearchForm, |
|
79 |
AstakosGroupUpdateForm, AddGroupMembersForm, |
|
80 |
MembersSortForm, AstakosGroupSortForm, |
|
81 |
TimelineForm, PickResourceForm, |
|
82 |
AstakosGroupCreationSummaryForm, |
|
83 |
ProjectApplicationForm |
|
84 |
) |
|
78 | 85 |
from astakos.im.functions import (send_feedback, SendMailError, |
79 | 86 |
logout as auth_logout, |
80 | 87 |
activate as activate_func, |
81 | 88 |
send_activation as send_activation_func, |
82 |
send_group_creation_notification, |
|
89 |
# send_group_creation_notification,
|
|
83 | 90 |
SendNotificationError) |
84 | 91 |
from astakos.im.endpoints.qh import timeline_charge |
85 | 92 |
from astakos.im.settings import (COOKIE_DOMAIN, LOGOUT_NEXT, |
86 | 93 |
LOGGING_LEVEL, PAGINATE_BY, RESOURCES_PRESENTATION_DATA, PAGINATE_BY_ALL) |
87 | 94 |
#from astakos.im.tasks import request_billing |
88 | 95 |
from astakos.im.api.callpoint import AstakosCallpoint |
96 |
# from .generic_views import create_object |
|
89 | 97 |
|
90 | 98 |
import astakos.im.messages as astakos_messages |
91 | 99 |
from astakos.im import settings |
... | ... | |
802 | 810 |
@signed_terms_required |
803 | 811 |
@login_required |
804 | 812 |
def group_add(request, kind_name='default'): |
805 |
|
|
806 | 813 |
result = callpoint.list_resources() |
807 | 814 |
resource_catalog = ResourcePresentation(RESOURCES_PRESENTATION_DATA) |
808 | 815 |
resource_catalog.update_from_result(result) |
... | ... | |
863 | 870 |
return HttpResponse(t.render(c)) |
864 | 871 |
|
865 | 872 |
|
866 |
#@require_http_methods(["POST"]) |
|
873 |
#@require_hsttp_methods(["POST"])
|
|
867 | 874 |
@require_http_methods(["GET", "POST"]) |
868 | 875 |
@signed_terms_required |
869 | 876 |
@login_required |
877 |
@transaction.commit_manually |
|
870 | 878 |
def group_add_complete(request): |
871 | 879 |
model = AstakosGroup |
872 | 880 |
form = AstakosGroupCreationSummaryForm(request.POST) |
... | ... | |
876 | 884 |
result = callpoint.create_groups((d,)).next() |
877 | 885 |
if result.is_success: |
878 | 886 |
new_object = result.data[0] |
879 |
msg = _(astakos_messages.OBJECT_CREATED) %\ |
|
880 |
{"verbose_name": model._meta.verbose_name} |
|
881 |
messages.success(request, msg, fail_silently=True) |
|
882 |
|
|
883 | 887 |
# send notification |
884 | 888 |
try: |
885 | 889 |
send_group_creation_notification( |
... | ... | |
892 | 896 |
) |
893 | 897 |
except SendNotificationError, e: |
894 | 898 |
messages.error(request, e, fail_silently=True) |
895 |
post_save_redirect = '/im/group/%(id)s/' |
|
896 |
return HttpResponseRedirect(post_save_redirect % new_object) |
|
899 |
transaction.rollback() |
|
900 |
else: |
|
901 |
msg = _(astakos_messages.OBJECT_CREATED) %\ |
|
902 |
{"verbose_name": model._meta.verbose_name} |
|
903 |
message = _(astakos_messages.NOTIFICATION_SENT) % 'a project' |
|
904 |
messages.success(request, msg, fail_silently=True) |
|
905 |
transaction.commit() |
|
897 | 906 |
else: |
898 | 907 |
d = {"verbose_name": model._meta.verbose_name, |
899 | 908 |
"reason":result.reason} |
... | ... | |
1389 | 1398 |
# return data |
1390 | 1399 |
|
1391 | 1400 |
|
1392 |
#@require_http_methods(["GET"]) |
|
1393 |
@require_http_methods(["POST", "GET"]) |
|
1394 |
@signed_terms_required |
|
1395 |
@login_required |
|
1396 |
def timeline(request): |
|
1397 |
# data = {'entity':request.user.email} |
|
1398 |
timeline_body = () |
|
1399 |
timeline_header = () |
|
1400 |
# form = TimelineForm(data) |
|
1401 |
form = TimelineForm() |
|
1402 |
if request.method == 'POST': |
|
1403 |
data = request.POST |
|
1404 |
form = TimelineForm(data) |
|
1405 |
if form.is_valid(): |
|
1406 |
data = form.cleaned_data |
|
1407 |
timeline_header = ('entity', 'resource', |
|
1408 |
'event name', 'event date', |
|
1409 |
'incremental cost', 'total cost') |
|
1410 |
timeline_body = timeline_charge( |
|
1411 |
data['entity'], data['resource'], |
|
1412 |
data['start_date'], data['end_date'], |
|
1413 |
data['details'], data['operation']) |
|
1414 |
|
|
1415 |
return render_response(template='im/timeline.html', |
|
1416 |
context_instance=get_context(request), |
|
1417 |
form=form, |
|
1418 |
timeline_header=timeline_header, |
|
1419 |
timeline_body=timeline_body) |
|
1420 |
return data |
|
1401 |
# #@require_http_methods(["GET"])
|
|
1402 |
# @require_http_methods(["POST", "GET"])
|
|
1403 |
# @signed_terms_required
|
|
1404 |
# @login_required
|
|
1405 |
# def timeline(request):
|
|
1406 |
# # data = {'entity':request.user.email}
|
|
1407 |
# timeline_body = ()
|
|
1408 |
# timeline_header = ()
|
|
1409 |
# # form = TimelineForm(data)
|
|
1410 |
# form = TimelineForm()
|
|
1411 |
# if request.method == 'POST':
|
|
1412 |
# data = request.POST
|
|
1413 |
# form = TimelineForm(data)
|
|
1414 |
# if form.is_valid():
|
|
1415 |
# data = form.cleaned_data
|
|
1416 |
# timeline_header = ('entity', 'resource',
|
|
1417 |
# 'event name', 'event date',
|
|
1418 |
# 'incremental cost', 'total cost')
|
|
1419 |
# timeline_body = timeline_charge(
|
|
1420 |
# data['entity'], data['resource'],
|
|
1421 |
# data['start_date'], data['end_date'],
|
|
1422 |
# data['details'], data['operation'])
|
|
1423 |
# |
|
1424 |
# return render_response(template='im/timeline.html',
|
|
1425 |
# context_instance=get_context(request),
|
|
1426 |
# form=form,
|
|
1427 |
# timeline_header=timeline_header,
|
|
1428 |
# timeline_body=timeline_body)
|
|
1429 |
# return data
|
|
1421 | 1430 |
|
1422 | 1431 |
|
1423 | 1432 |
# TODO: action only on POST and user should confirm the removal |
... | ... | |
1441 | 1450 |
return render_response( |
1442 | 1451 |
template='im/how_it_works.html', |
1443 | 1452 |
context_instance=get_context(request),) |
1453 |
|
|
1454 |
@require_http_methods(["GET", "POST"]) |
|
1455 |
@signed_terms_required |
|
1456 |
@login_required |
|
1457 |
def project_add(request): |
|
1458 |
result = callpoint.list_resources() |
|
1459 |
resource_catalog = ResourcePresentation(RESOURCES_PRESENTATION_DATA) |
|
1460 |
resource_catalog.update_from_result(result) |
|
1461 |
|
|
1462 |
if not result.is_success: |
|
1463 |
messages.error( |
|
1464 |
request, |
|
1465 |
'Unable to retrieve system resources: %s' % result.reason |
|
1466 |
) |
|
1467 |
extra_context = {'resource_catalog':resource_catalog} |
|
1468 |
return create_object(request, template_name='im/projects/projectapplication_form.html', |
|
1469 |
extra_context=extra_context, post_save_redirect=request.path, |
|
1470 |
form_class=ProjectApplicationForm) |
|
1471 |
|
|
1472 |
@require_http_methods(["GET"]) |
|
1473 |
@signed_terms_required |
|
1474 |
@login_required |
|
1475 |
def project_application_list(request): |
|
1476 |
queryset = ProjectApplication.objects.all() |
|
1477 |
return object_list( |
|
1478 |
request, |
|
1479 |
queryset, |
|
1480 |
paginate_by=PAGINATE_BY_ALL, |
|
1481 |
page=request.GET.get('page') or 1, |
|
1482 |
template_name='im/projects/projectapplication_list.html') |
|
1483 |
|
|
1484 |
|
|
1485 |
@require_http_methods(["GET"]) |
|
1486 |
@signed_terms_required |
|
1487 |
@login_required |
|
1488 |
def project_list(request): |
|
1489 |
pass |
|
1490 |
|
|
1491 |
@require_http_methods(["GET", "POST"]) |
|
1492 |
@signed_terms_required |
|
1493 |
@login_required |
|
1494 |
def project_detail(request, serial): |
|
1495 |
pass |
|
1496 |
|
|
1497 |
@require_http_methods(["GET", "POST"]) |
|
1498 |
@signed_terms_required |
|
1499 |
@login_required |
|
1500 |
def project_search(request): |
|
1501 |
pass |
|
1502 |
|
|
1503 |
@require_http_methods(["GET"]) |
|
1504 |
@signed_terms_required |
|
1505 |
@login_required |
|
1506 |
def project_all(request): |
|
1507 |
pass |
|
1508 |
|
|
1509 |
@require_http_methods(["GET", "POST"]) |
|
1510 |
@signed_terms_required |
|
1511 |
@login_required |
|
1512 |
def project_join(request, serial): |
|
1513 |
pass |
|
1514 |
|
|
1515 |
@require_http_methods(["GET", "POST"]) |
|
1516 |
@signed_terms_required |
|
1517 |
@login_required |
|
1518 |
def project_leave(request, serial): |
|
1519 |
pass |
|
1520 |
|
|
1521 |
@require_http_methods(["POST"]) |
|
1522 |
@signed_terms_required |
|
1523 |
@login_required |
|
1524 |
def project_approve_member(request, serial, user_id): |
|
1525 |
pass |
|
1526 |
|
|
1527 |
@require_http_methods(["POST"]) |
|
1528 |
@signed_terms_required |
|
1529 |
@login_required |
|
1530 |
def project_remove_member(request, serial, user_id): |
|
1531 |
pass |
|
1444 | 1532 |
|
Also available in: Unified diff