import ConfigParser
import datetime
from time import mktime
+import xmltodict
from django.shortcuts import render_to_response
from django.http import HttpResponse
urn = ''
hrn = ''
object_type = ''
+ display = None
+ recursive = False
if request.method == 'POST':
req_items = request.POST
urn = el[1]
elif el[0].startswith('type'):
object_type = el[1]
+ elif el[0].startswith('recursive'):
+ if el[1] == '1':
+ recursive = True
+ else:
+ recursive = False
+ elif el[0].startswith('display'):
+ display = el[1]
if method not in ['GetVersion','ListResources']:
try:
#results = {'method':method,'platforms':platforms,'rspec':rspec,'options':options}
result = []
+ dict_result = {}
+ data = []
+ columns = []
api_options = {}
api_options['geni_rspec_version'] = {'type': 'GENI', 'version': '3'}
+ api_options['list_leases'] = 'all'
server_am = False
from manifoldapi.manifoldapi import execute_admin_query
for pf in platforms:
if method == "GetVersion":
result = server.GetVersion()
else:
- # AM V3
+ # AM API Calls
if server_am:
if method == "ListResources":
result = server.ListResources([user_cred], api_options)
+ dict_result = xmltodict.parse(result['value'])
+ result['json'] = json.dumps(dict_result)
+ if isinstance(dict_result['rspec']['node'], list):
+ columns.extend(dict_result['rspec']['node'][0].keys())
+ else:
+ columns.extend(dict_result['rspec']['node'].keys())
+
elif method == "Describe":
+ version = server.GetVersion()
+ logger.debug(version['geni_api'])
# if GetVersion = v2
- # ListResources(slice_hrn)
+ if version['geni_api'] == 2:
+ # ListResources(slice_hrn)
+ api_options['geni_slice_urn'] = urn
+ result = server.ListResources([object_cred], api_options)
+ dict_result = xmltodict.parse(result['value'])
# else GetVersion = v3
- result = server.Describe([urn] ,[object_cred], api_options)
+ else:
+ result = server.Describe([urn] ,[object_cred], api_options)
+ dict_result = xmltodict.parse(result['value']['geni_rspec'])
+
+ result['json'] = json.dumps(dict_result)
+ if isinstance(dict_result['rspec']['node'], list):
+ columns.extend(dict_result['rspec']['node'][0].keys())
+ else:
+ columns.extend(dict_result['rspec']['node'].keys())
+
elif method == 'Renew':
- result = server.Renew([urn] ,[object_cred], api_options)
+ # Renew till 1 month from now
+ d = datetime.datetime.utcnow() + datetime.timedelta(365/12)
+ date = d.isoformat("T") + "Z"
+ result = server.Renew([urn] ,[object_cred], date, api_options)
elif method == 'Delete':
result = server.Delete([urn] ,[object_cred], api_options)
elif method == 'Allocate':
#return HttpResponse(json.dumps({'error' : '-3','msg':'method not supported by AM'}), content_type="application/json")
logger.debug('method %s not handled by AM' % method)
result = []
+
+ # Registry API Calls
else:
+ record_dict = {'urn': urn, 'hrn': hrn, 'type': object_type}
if method == "List":
# hrn is required
+ options['recursive'] = recursive
result = server.List(hrn, user_cred, options)
- logger.debug(result)
+ if object_type:
+ result = filter_records(object_type, result)
elif method == "Resolve":
# hrn is required
# details can be True or False
options['details']=True
result = server.Resolve(hrn, user_cred, options)
- logger.debug(result)
+ if object_type:
+ result = filter_records(object_type, result)
elif method == "Register":
# record_dict must be crafted
# auth_cred must be selected in the list of auth_creds from user's account
result = []
results[pf] = result
+ if dict_result:
+ if isinstance(dict_result['rspec']['node'], list):
+ data = data + dict_result['rspec']['node']
+ else:
+ data.append(dict_result['rspec']['node'])
except Exception,e:
import traceback
logger.error(traceback.format_exc())
logger.error(e)
results[pf] = {'error':'-3', 'error_msg': str(e)}
-
- return HttpResponse(json.dumps(results, cls=MyEncoder), content_type="application/json")
+ if display == 'table':
+ return render_to_response('table-default.html', {'data' : data, 'fields' : columns, 'id' : '@component_id', 'options' : None})
+ else:
+ results['columns'] = columns
+ return HttpResponse(json.dumps(results, cls=MyEncoder), content_type="application/json")
def get_user_account(user_email, platform_name):
"""
def get_platforms():
ret = list()
- platforms = db.query(Platform).all()
+ platforms = db.query(Platform).filter(Platform.gateway_type == 'sfa', Platform.disabled == 0).all()
for p in platforms:
ret.append(p.platform)
return ret
def get_platform_config(platform_name):
platform = db.query(Platform).filter(Platform.platform == platform_name).one()
return json.loads(platform.config) if platform.config else {}
+
+def filter_records(type, records):
+ filtered_records = []
+ for record in records:
+ if (record['type'] == type) or (type == "all"):
+ filtered_records.append(record)
+ return filtered_records