return func
-def execute_query(request, query):
- if not 'manifold' in request.session or not 'auth' in request.session['manifold']:
- print "W: Using hardcoded demo account for execute_query"
- manifold_api_session_auth = {'AuthMethod': 'password', 'Username': 'demo', 'AuthString': 'demo'}
- else:
- manifold_api_session_auth = request.session['manifold']['auth']
+def _execute_query(request, query, manifold_api_session_auth):
manifold_api = ManifoldAPI(auth=manifold_api_session_auth)
print "-"*80
print query
#Error running query: {'origin': [0, 'XMLRPCAPI'], 'code': 2, 'description': 'No such session: No row was found for one()', 'traceback': 'Traceback (most recent call last):\n File "/usr/local/lib/python2.7/dist-packages/manifold/core/xmlrpc_api.py", line 68, in xmlrpc_forward\n user = Auth(auth).check()\n File "/usr/local/lib/python2.7/dist-packages/manifold/auth/__init__.py", line 245, in check\n return self.auth_method.check()\n File "/usr/local/lib/python2.7/dist-packages/manifold/auth/__init__.py", line 95, in check\n raise AuthenticationFailure, "No such session: %s" % e\nAuthenticationFailure: No such session: No row was found for one()\n', 'type': 2, 'ts': None, 'value': None}
return result['value']
+
+def execute_query(request, query):
+ if not 'manifold' in request.session or not 'auth' in request.session['manifold']:
+ raise Exception, "User not authenticated"
+ manifold_api_session_auth = request.session['manifold']['auth']
+ return _execute_query(request, query, manifold_api_session_auth)
+
+def execute_admin_query(request, query):
+ config = Config()
+ admin_user, admin_password = config.manifold_admin_user_password()
+ admin_auth = {'AuthMethod': 'password', 'Username': admin_user, 'AuthString': admin_password}
+ return _execute_query(request, query, admin_auth)
# if you use a development backend running on this box, use "http://localhost:7080/"
# the INRIA setup is with "http://manifold.pl.sophia.inria.fr:7080/"
+ default_manifold_admin_user = 'admin'
+ default_manifold_admin_password = None
+
_config_parser = None
# having grown tired of screwing up with git stashes
# taking away my local config, we now more properly use
# an external config file to override teh default
+ # XXX we might use support from manifold util classes --jordan
@staticmethod
def manifold_url ():
if Config._config_parser:
Config._config_parser=config
return Config.manifold_url()
+ @staticmethod
+ def manifold_admin_user_password():
+ if Config._config_parser:
+ admin_user = Config._config_parser.get('manifold','admin_user')
+ admin_password = Config._config_parser.get('manifold','admin_password')
+ return (admin_user, admin_password)
+ config = RawConfigParser ()
+ config.add_section('manifold')
+ config.set ('manifold', 'admin_user', Config.default_manifold_admin_user)
+ config.set ('manifold', 'admin_password', Config.default_manifold_admin_password)
+ config.read (os.path.join(ROOT,'myslice/myslice.ini'))
+ Config._config_parser=config
+ return Config.manifold_admin_user_password()
+
# exporting these details to js
@staticmethod
def manifold_js_export ():
# email = forms.EmailField()
# cc_myself = forms.BooleanField(required=False)
- slice_name = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control'}))
- authority_hrn = forms.ChoiceField(choices=[(1, 'un')],widget=forms.Select(attrs={'class':'form-control'}))
- number_of_nodes = forms.DecimalField(widget=forms.TextInput(attrs={'class':'form-control'}))
- type_of_nodes = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control'}))
- purpose = forms.CharField(widget=forms.Textarea(attrs={'class':'form-control'}))
- email = forms.EmailField(widget=forms.TextInput(attrs={'class':'form-control'}))
- cc_myself = forms.BooleanField(required=False,widget=forms.CheckboxInput(attrs={'class':'form-control'}))
+ slice_name = forms.CharField(
+ widget=forms.TextInput(attrs={'class':'form-control'}),
+ help_text="Enter a name for the slice you wish to create")
+ authority_hrn = forms.ChoiceField(
+ widget = forms.Select(attrs={'class':'form-control'}),
+ choices = [],
+ help_text = "Please select an authority responsible for vetting your slice")
+ number_of_nodes = forms.DecimalField(
+ widget = forms.TextInput(attrs={'class':'form-control'}),
+ help_text = "Enter the number of nodes you expect to request (informative only)")
+ type_of_nodes = forms.CharField(
+ widget = forms.TextInput(attrs={'class':'form-control'}),
+ help_text = "Enter the type of nodes you expect to request (informative only)")
+ purpose = forms.CharField(
+ widget = forms.Textarea(attrs={'class':'form-control'}),
+ help_text = "Enter the purpose of your experiment (informative only)")
+ email = forms.EmailField(
+ widget = forms.TextInput(attrs={'class':'form-control'}),
+ help_text = "Enter your email address")
+ cc_myself = forms.BooleanField(
+ widget = forms.CheckboxInput(attrs={'class':'form-control'}),
+ required = False,
+ help_text = "Please indicate whether you would like to be CC'ed to the request email")
def __init__(self, *args, **kwargs):
initial = kwargs.get('initial', {})
from unfold.page import Page
from ui.topmenu import topmenu_items
-from manifold.manifoldapi import execute_query
+from manifold.manifoldapi import execute_admin_query
from manifold.core.query import Query
from portal.models import PendingUser
errors = []
authorities_query = Query.get('authority').\
- filter_by('authority_hrn', 'included', ['ple.inria', 'ple.upmc']).\
select('name', 'authority_hrn')
- #authorities_query = Query.get('authority').select('authority_hrn')
- authorities = execute_query(request, authorities_query)
+
+ onelab_enabled_query = Query.get('local:platform').filter_by('platform', '==', 'ple-onelab').filter_by('disabled', '==', 'False')
+ onelab_enabled = not not execute_admin_query(request, onelab_enabled_query)
+ if onelab_enabled:
+ print "ONELAB ENABLED"
+ authorities_query = authorities_query.filter_by('authority_hrn', 'included', ['ple.inria', 'ple.upmc'])
+ else:
+ print "FIREXP ENABLED"
+
+ authorities = execute_admin_query(request, authorities_query)
# xxx tocheck - if authorities is empty, it's no use anyway
# (users won't be able to validate the form anyway)
from django.core.mail import send_mail
from manifold.core.query import Query
-from manifold.manifoldapi import execute_query
+from manifold.manifoldapi import execute_admin_query, execute_query
from portal.models import PendingSlice
from portal.actions import authority_get_pi_emails
class SliceRequestView (LoginRequiredAutoLogoutView):
def authority_hrn_initial (self, request):
-# authorities_query = Query.get('authority').filter_by('authority_hrn', 'included', ['ple.inria', 'ple.upmc']).select('name', 'authority_hrn')
- authorities_query = Query.get('authority').select('authority_hrn')
- authorities = execute_query(request, authorities_query)
- authorities = sorted(authorities)
+ authorities_query = Query.get('authority').\
+ select('name', 'authority_hrn')
- authority_hrn_tuples = [ (authority['authority_hrn'], authority['name'],) for authority in authorities ]
+ onelab_enabled_query = Query.get('local:platform').filter_by('platform', '==', 'ple-onelab').filter_by('disabled', '==', 'False')
+ onelab_enabled = not not execute_admin_query(request, onelab_enabled_query)
+ if onelab_enabled:
+ authorities_query = authorities_query.filter_by('authority_hrn', 'included', ['ple.inria', 'ple.upmc'])
+
+ authorities = execute_admin_query(request, authorities_query)
+ #authorities = sorted(authorities)
+
+ authority_hrn_tuples = [ (authority['authority_hrn'], authority['name'] if authority['name'] else authority['authority_hrn'],) for authority in authorities ]
+ print "authority_hrn_tuples=", authority_hrn_tuples
return {'authority_hrn': authority_hrn_tuples}
# because we inherit LoginRequiredAutoLogoutView that is implemented by redefining 'dispatch'
{% for field in form %}
<div class="form-group">
<label for="{{ field.html_name }}" class="col-xs-4 control-label">{{ field.label }}</label>
- <div class="col-xs-4"> {{ field.errors }} {{ field }} <p class="form-hint">{{ field.help_text }}</p> </div>
+ <div class="col-xs-4"> {{ field.errors }} {{ field }} </div>
+ <div class="col-xs-4"> <p class="form-hint">{{ field.help_text }}</p> </div>
</div>
{% endfor %}
<div class="col-xs-offset-4 col-xs-4">