def DELETE(self):
"""
Delete file replicas at a given RSE.
HTTP Success:
200 Ok
HTTP Error:
401 Unauthorized
409 Conflict
500 Internal Error
"""
json_data = data()
try:
parameters = parse_response(json_data)
except ValueError:
raise generate_http_error(400, 'ValueError', 'Cannot decode json parameter list')
try:
delete_replicas(rse=parameters['rse'], files=parameters['files'], issuer=ctx.env.get('issuer'), ignore_availability=parameters.get('ignore_availability', False))
except AccessDenied, e:
raise generate_http_error(401, 'AccessDenied', e.args[0][0])
except RSENotFound, e:
raise generate_http_error(404, 'RSENotFound', e[0][0])
except ResourceTemporaryUnavailable, e:
raise generate_http_error(503, 'ResourceTemporaryUnavailable', e[0][0])
except ReplicaNotFound, e:
raise generate_http_error(404, 'ReplicaNotFound', e.args[0][0])
except RucioException, e:
raise generate_http_error(500, e.__class__.__name__, e.args[0][0])
except Exception, e:
print format_exc()
raise InternalError(e)
raise OK()
python类data()的实例源码
def POST(self):
"""
List the DIDs associated to a list of replicas.
HTTP Success:
200 OK
HTTP Error:
401 Unauthorized
500 InternalError
:returns: A list of dictionaries containing the mAPPing PFNs to DIDs.
"""
json_data = data()
rse, pfns = None, []
header('Content-Type', 'application/x-json-stream')
rse = None
try:
params = parse_response(json_data)
if 'pfns' in params:
pfns = params['pfns']
if 'rse' in params:
rse = params['rse']
except ValueError:
raise generate_http_error(400, 'ValueError', 'Cannot decode json parameter list')
try:
for pfn in get_did_from_pfns(pfns, rse):
yield dumps(pfn) + '\n'
except RucioException, e:
raise generate_http_error(500, e.__class__.__name__, e.args[0][0])
except Exception, e:
print format_exc()
raise InternalError(e)
def POST(self):
"""
Declare a list of bad replicas.
HTTP Success:
200 OK
HTTP Error:
401 Unauthorized
500 InternalError
"""
json_data = data()
pfns = []
header('Content-Type', 'application/x-json-stream')
try:
params = parse_response(json_data)
if 'pfns' in params:
pfns = params['pfns']
if 'reason' in params:
reason = params['reason']
except ValueError:
raise generate_http_error(400, 'ValueError', 'Cannot decode json parameter list')
not_declared_files = {}
try:
not_declared_files = declare_bad_file_replicas(pfns=pfns, reason=reason, issuer=ctx.env.get('issuer'))
except ReplicaNotFound, e:
raise generate_http_error(404, 'ReplicaNotFound', e.args[0][0])
except RucioException, e:
raise generate_http_error(500, e.__class__.__name__, e.args[0][0])
except Exception, e:
print format_exc()
raise InternalError(e)
raise Created(dumps(not_declared_files))
def POST(self, key):
"""
Create a new value for a key.
HTTP Success:
201 Created
HTTP Error:
401 Unauthorized
404 Not Found
409 Conflict
500 Internal Error
:param Rucio-Auth-Account: Account identifier.
:param Rucio-Auth-Token: as an 32 character hex string.
:params Rucio-Account: account belonging to the new scope.
"""
json_data = data()
try:
params = loads(json_data)
value = params['value']
except ValueError:
raise generate_http_error(400, 'ValueError', 'Cannot decode json parameter list')
try:
add_value(key=key, value=value, issuer=ctx.env.get('issuer'))
except Duplicate, e:
raise generate_http_error(409, 'Duplicate', e[0][0])
except InvalidValueForKey, e:
raise generate_http_error(400, 'InvalidValueForKey', e[0][0])
except KeyNotFound, e:
raise generate_http_error(400, 'KeyNotFound', e[0][0])
except RucioException, e:
raise generate_http_error(500, e.__class__.__name__, e.args[0][0])
except Exception, e:
print e
raise InternalError(e)
raise Created()
def PUT(self, rse):
""" Update RSE properties (e.g. name, availability).
HTTP Success:
201 Created
HTTP Error:
400 Bad request
401 Unauthorized
404 Resource not Found
409 Conflict
500 Internal Error
"""
json_data = data()
kwargs = {}
try:
parameters = json_data and loads(json_data)
kwargs['parameters'] = parameters
except ValueError:
raise generate_http_error(400, 'ValueError', 'Cannot decode json parameter dictionary')
kwargs['issuer'] = ctx.env.get('issuer')
try:
update_rse(rse, **kwargs)
except InvalidObject, error:
raise generate_http_error(400, 'InvalidObject', error[0][0])
except AccessDenied, error:
raise generate_http_error(401, 'AccessDenied', error.args[0][0])
except RSENotFound, error:
raise generate_http_error(404, 'RSENotFound', error.args[0][0])
except Duplicate, error:
raise generate_http_error(409, 'Duplicate', error[0][0])
except RucioException, error:
raise generate_http_error(500, error.__class__.__name__, error.args[0][0])
except Exception, error:
print error
print format_exc()
raise InternalError(error)
raise Created()
def POST(self, rse, key):
""" create rse with given RSE name.
HTTP Success:
201 Created
HTTP Error:
400 Bad request
401 Unauthorized
500 Internal Error
:param rse: RSE name.
:param key: Key attribute.
"""
json_data = data()
try:
parameter = loads(json_data)
except ValueError:
raise generate_http_error(400, 'ValueError', 'Cannot decode json parameter dictionary')
try:
value = parameter['value']
except KeyError, error:
raise generate_http_error(400, 'KeyError', '%s not defined' % str(error))
try:
add_rse_attribute(rse=rse, key=key, value=value, issuer=ctx.env.get('issuer'))
except AccessDenied, error:
raise generate_http_error(401, 'AccessDenied', error.args[0][0])
except Duplicate, error:
raise generate_http_error(409, 'Duplicate', error[0][0])
except Exception, error:
raise InternalError(error)
raise Created()
def PUT(self, rse, scheme, hostname=None, port=None):
"""
Updates attributes of an existing protocol entry. Because protocol identifier, hostname,
and port are used as unique identifier they are immutable.
HTTP Success:
200 OK
HTTP Error:
400 Bad Request
401 Unauthorized
404 Resource not Found
409 Conflict
500 InternalError
"""
json_data = data()
try:
parameter = loads(json_data)
except ValueError:
raise generate_http_error(400, 'ValueError', 'Cannot decode json parameter dictionary')
try:
update_protocols(rse, issuer=ctx.env.get('issuer'), scheme=scheme, hostname=hostname, port=port, data=parameter)
except InvalidObject, error:
raise generate_http_error(400, 'InvalidObject', error[0][0])
except RSEProtocolNotSupported, error:
raise generate_http_error(404, 'RSEProtocolNotSupported', error[0][0])
except RSENotFound, error:
raise generate_http_error(404, 'RSENotFound', error[0][0])
except RSEProtocolDomainNotSupported, error:
raise generate_http_error(404, 'RSEProtocolDomainNotSupported', error[0][0])
except RSEProtocolPriorityError, error:
raise generate_http_error(409, 'RSEProtocolPriorityError', error[0][0])
except RucioException, error:
raise generate_http_error(500, error.__class__.__name__, error.args[0][0])
except Exception, error:
print error
print format_exc()
raise InternalError(error)
raise OK()
def PUT(self, rse):
""" Update RSE usage information.
HTTP Success:
200 Updated
HTTP Error:
400 Bad Request
401 Unauthorized
404 Not Found
409 Conflict
500 Internal Error
:param rse: The RSE name.
"""
json_data = data()
try:
parameter = loads(json_data)
except ValueError:
raise generate_http_error(400, 'ValueError', 'Cannot decode json parameter dictionary')
try:
set_rse_usage(rse=rse, issuer=ctx.env.get('issuer'), **parameter)
except AccessDenied, error:
raise generate_http_error(401, 'AccessDenied', error.args[0][0])
except RSENotFound, error:
raise generate_http_error(404, 'RSENotFound', error.args[0][0])
except RucioException, error:
raise generate_http_error(500, error.__class__.__name__, error.args[0][0])
except Exception, error:
print format_exc()
raise InternalError(error)
raise OK()
def PUT(self, rse):
""" Update RSE limits.
HTTP Success:
200 Updated
HTTP Error:
400 Bad Request
401 Unauthorized
404 Not Found
409 Conflict
500 Internal Error
:param rse: The RSE name.
"""
header('Content-Type', 'application/json')
json_data = data()
try:
parameter = loads(json_data)
except ValueError:
raise generate_http_error(400, 'ValueError', 'Cannot decode json parameter dictionary')
try:
set_rse_limits(rse=rse, issuer=ctx.env.get('issuer'), **parameter)
except AccessDenied, error:
raise generate_http_error(401, 'AccessDenied', error.args[0][0])
except RSENotFound, error:
raise generate_http_error(404, 'RSENotFound', error.args[0][0])
except RucioException, error:
raise generate_http_error(500, error.__class__.__name__, error.args[0][0])
except Exception, error:
print format_exc()
raise InternalError(error)
raise OK()
def POST(self):
json_data = data()
try:
dids = loads(json_data)
except ValueError:
raise generate_http_error(400, 'ValueError', 'Cannot decode json parameter list')
try:
add_temporary_dids(dids=dids, issuer=ctx.env.get('issuer'))
except RucioException, e:
raise generate_http_error(500, e.__class__.__name__, e.args[0][0])
except Exception, e:
print format_exc()
raise InternalError(e)
raise Created()
def POST(self, rse, operation):
"""
Get URLs for files at a given RSE.
HTTP Success:
200 OK
HTTP Error:
401 Unauthorized
500 Internal Error
"""
header('Content-Type', 'application/json')
json_data = data()
try:
parameters = parse_response(json_data)
except ValueError:
raise generate_http_error(400, 'ValueError', 'Cannot decode json parameter list')
try:
result = objectstore.get_signed_urls(parameters, rse=rse, operation=operation)
for url in result:
if isinstance(result[url], Exception):
raise result[url]
return render_json(**result)
except RucioException, e:
raise generate_http_error(500, e.__class__.__name__, e.args[0][0])
except Exception, e:
print traceback.format_exc()
raise InternalError(e)
def POST(self, rse):
"""
Get files metadata at a given RSE.
HTTP Success:
200 OK
HTTP Error:
401 Unauthorized
500 Internal Error
"""
header('Content-Type', 'application/json')
json_data = data()
try:
parameters = parse_response(json_data)
except ValueError:
raise generate_http_error(400, 'ValueError', 'Cannot decode json parameter list')
try:
url = parameters['url']
new_url = parameters['new_url']
objectstore.rename(url, new_url, rse=rse)
except RucioException, e:
raise generate_http_error(500, e.__class__.__name__, e.args[0][0])
except Exception, e:
print traceback.format_exc()
raise InternalError(e)
raise OK()
# ----------------------
# Web service startup
# ----------------------
def GET(self, scope):
"""
Return all data identifiers in the given scope.
HTTP Success:
200 OK
HTTP Error:
401 Unauthorized
404 Not Found
:param scope: The scope name.
"""
header('Content-Type', 'application/x-json-stream')
name = None
recursive = False
if ctx.query:
params = parse_qs(ctx.query[1:])
if 'name' in params:
name = params['name'][0]
if 'recursive' in params:
recursive = True
try:
for did in scope_list(scope=scope, name=name, recursive=recursive):
yield render_json(**did) + '\n'
except DataIdentifierNotFound, error:
raise generate_http_error(404, 'DataIdentifierNotFound', error.args[0][0])
except Exception, error:
print format_exc()
raise InternalError(error)
def GET(self, scope):
"""
List all data identifiers in a scope which match a given metadata.
HTTP Success:
200 OK
HTTP Error:
401 Unauthorized
404 KeyNotFound
409 UnsupportedOperation
:param scope: The scope name.
"""
header('Content-Type', 'application/x-json-stream')
filters = {}
long = False
if ctx.query:
params = parse_qs(ctx.query[1:])
for k, v in params.items():
if k == 'type':
type = v[0]
elif k == 'long':
long = bool(v[0])
else:
filters[k] = v[0]
try:
for did in list_dids(scope=scope, filters=filters, type=type, long=long):
yield dumps(did) + '\n'
except UnsupportedOperation, error:
raise generate_http_error(409, 'UnsupportedOperation', error.args[0][0])
except KeyNotFound, error:
raise generate_http_error(404, 'KeyNotFound', error.args[0][0])
except Exception, error:
print format_exc()
raise InternalError(error)
def POST(self):
try:
json_data = loads(data())
except ValueError:
raise generate_http_error(400, 'ValueError', 'Cannot decode json parameter list')
try:
add_dids(json_data, issuer=ctx.env.get('issuer'))
except DataIdentifierNotFound, error:
raise generate_http_error(404, 'DataIdentifierNotFound', error.args[0][0])
except DuplicateContent, error:
raise generate_http_error(409, 'DuplicateContent', error.args[0][0])
except DataIdentifierAlreadyExists, error:
raise generate_http_error(409, 'DataIdentifierAlreadyExists', error.args[0][0])
except AccessDenied, error:
raise generate_http_error(401, 'AccessDenied', error.args[0][0])
except UnsupportedOperation, error:
raise generate_http_error(409, 'UnsupportedOperation', error.args[0][0])
except DatabaseException, error:
raise generate_http_error(500, 'DatabaseException', error.args)
except RucioException, error:
raise generate_http_error(500, error.__class__.__name__, error.args[0])
except Exception, error:
print format_exc()
raise InternalError(error)
raise Created()
def POST(self):
# To be moved in a common processor
attachments, ignore_duplicate = [], False
try:
json_data = loads(data())
if type(json_data) is dict:
attachments = json_data.get('attachments')
ignore_duplicate = json_data.get('ignore_duplicate')
elif type(json_data) is list:
attachments = json_data
except ValueError:
raise generate_http_error(400, 'ValueError', 'Cannot decode json parameter list')
try:
attach_dids_to_dids(attachments=attachments, ignore_duplicate=ignore_duplicate, issuer=ctx.env.get('issuer'))
except DataIdentifierNotFound, error:
raise generate_http_error(404, 'DataIdentifierNotFound', error.args[0][0])
except DuplicateContent, error:
raise generate_http_error(409, 'DuplicateContent', error.args[0][0])
except DataIdentifierAlreadyExists, error:
raise generate_http_error(409, 'DataIdentifierAlreadyExists', error.args[0][0])
except AccessDenied, error:
raise generate_http_error(401, 'AccessDenied', error.args[0][0])
except UnsupportedOperation, error:
raise generate_http_error(409, 'UnsupportedOperation', error.args[0][0])
except RucioException, error:
raise generate_http_error(500, error.__class__.__name__, error.args[0])
except Exception, error:
print format_exc()
raise InternalError(error)
raise Created()
def PUT(self, scope, name):
"""
Update data identifier status.
HTTP Success:
200 OK
HTTP Error:
401 Unauthorized
500 InternalError
:param scope: data identifier scope.
:param name: data identifier name.
"""
json_data = data()
try:
kwargs = loads(json_data)
except ValueError:
raise generate_http_error(400, 'ValueError', 'Cannot decode json data parameter')
try:
set_status(scope=scope, name=name, issuer=ctx.env.get('issuer'), **kwargs)
except DataIdentifierNotFound, error:
raise generate_http_error(404, 'DataIdentifierNotFound', error.args[0][0])
except UnsupportedStatus, error:
raise generate_http_error(409, 'UnsupportedStatus', error.args[0][0])
except UnsupportedOperation, error:
raise generate_http_error(409, 'UnsupportedOperation', error.args[0][0])
except AccessDenied, error:
raise generate_http_error(401, 'AccessDenied', error.args[0][0])
except RucioException, error:
raise generate_http_error(500, error.__class__.__name__, error.args[0][0])
except Exception, error:
print format_exc()
raise InternalError(error)
raise OK()
def GET(self, scope, name):
"""
Returns the contents of a data identifier.
HTTP Success:
200 OK
HTTP Error:
401 Unauthorized
500 InternalError
:param scope: The scope of the data identifier.
:param name: The name of the data identifier.
:returns: A list with the contents.
"""
header('Content-Type', 'application/x-json-stream')
try:
for did in list_content(scope=scope, name=name):
yield render_json(**did) + '\n'
except DataIdentifierNotFound, error:
raise generate_http_error(404, 'DataIdentifierNotFound', error.args[0][0])
except RucioException, error:
raise generate_http_error(500, error.__class__.__name__, error.args[0][0])
except Exception, error:
print format_exc()
raise InternalError(error)
def POST(self, scope, name):
"""
Append data identifiers to data identifiers.
HTTP Success:
200 OK
HTTP Error:
401 Unauthorized
500 InternalError
:param scope: Create the data identifier within this scope.
:param name: Create the data identifier with this name.
"""
try:
json_data = loads(data())
except ValueError:
raise generate_http_error(400, 'ValueError', 'Cannot decode json parameter list')
try:
attach_dids(scope=scope, name=name, attachment=json_data, issuer=ctx.env.get('issuer'))
except DataIdentifierNotFound, error:
raise generate_http_error(404, 'DataIdentifierNotFound', error.args[0][0])
except DuplicateContent, error:
raise generate_http_error(409, 'DuplicateContent', error.args[0][0])
except AccessDenied, error:
raise generate_http_error(401, 'AccessDenied', error.args[0][0])
except UnsupportedOperation, error:
raise generate_http_error(409, 'UnsupportedOperation', error.args[0][0])
except RSENotFound, error:
raise generate_http_error(404, 'RSENotFound', error.args[0][0])
except RucioException, error:
raise generate_http_error(500, error.__class__.__name__, error.args[0])
except Exception, error:
print format_exc()
raise InternalError(error)
raise Created()