from urllib.parse import parse_qsl LOGGER = getLogger("rucio.rule") SH = StreamHandler() SH.setLevel(DEBUG) LOGGER.addHandler(SH) URLS = insert_scope_name(( '/(.+)/locks', 'ReplicaLocks', '/(.+)/reduce', 'ReduceRule', '/(.+)/move', 'MoveRule', '%s/history', 'RuleHistoryFull', '/(.+)/history', 'RuleHistory', '/(.+)/analysis', 'RuleAnalysis', '/', 'AllRule', '/(.+)', 'Rule', )) class Rule: """ REST APIs for replication rules. """ @check_accept_header_wrapper(['application/json']) def GET(self, rule_id): """ get rule information for given rule id.
'/accounts/(.+)/usage/global/(.+)', 'AGlobalUsage', '/accounts/(.+)/usage/', 'ALocalUsage', '/accounts/(.+)/usage/(.+)', 'ALocalUsage', '/accounts/(.+)', 'AAccountParameter', '/accounts/?$', 'AAccount' ] URLS += [ '/accountlimits/local/(.+)/(.+)', 'ALLocalAccountLimit', '/accountlimits/global/(.+)/(.+)', 'ALGlobalAccountLimit', '/accountlimits/(.+)/(.+)', 'ALLocalAccountLimit', ] URLS += insert_scope_name(('/archives%s/files', 'AVArchive')) URLS += [ '/config/(.+)/(.+)/(.*)', 'COptionSet', '/config/(.+)/(.+)', 'COptionGetDel', '/config/(.+)', 'CSection', '/config', 'CConfig' ] URLS += insert_scope_name(( '/dids/(.*)/$', 'DScope', '/dids/(.*)/guid', 'DGUIDLookup', '/dids/(.*)/dids/search', 'DSearch', '/dids%s/files', 'DFiles',
from rucio.core.rse import get_rses_with_attribute_value, get_rse_name from rucio.db.sqla.constants import RequestState from rucio.web.rest.common import rucio_loadhook, RucioController, exception_wrapper, check_accept_header_wrapper from rucio.web.rest.utils import generate_http_error try: from urlparse import parse_qs except ImportError: from urllib.parse import parse_qs LOGGER = getLogger("rucio.request") SH = StreamHandler() SH.setLevel(DEBUG) LOGGER.addHandler(SH) URLS = insert_scope_name(('%s/(.+)', 'RequestGet', '/list', 'RequestsGet')) class RequestGet(RucioController): """ REST API to get requests. """ @exception_wrapper @check_accept_header_wrapper(['application/json']) def GET(self, scope, name, rse): """ List request for given DID to a destination RSE. HTTP Success: 200 OK HTTP Error: 401 Unauthorized
from rucio.web.rest.utils import generate_http_error from six import string_types from web import application, ctx, Created, data, header, InternalError, loadhook, OK, unloadhook try: from urllib import unquote from urlparse import parse_qs except ImportError: from urllib.parse import unquote from urllib.parse import parse_qs URLS = insert_scope_name( ('/list/?$', 'ListReplicas', '/?$', 'Replicas', '/suspicious/?$', 'SuspiciousReplicas', '/bad/states/?$', 'BadReplicasStates', '/bad/summary/?$', 'BadReplicasSummary', '/bad/dids/?$', 'BadDIDs', '/bad/pfns/?$', 'BadPFNs', '/rse/(.*)/?$', 'ReplicasRSE', '/bad/?$', 'BadReplicas', '/dids/?$', 'ReplicasDIDs', '%s/datasets$', 'DatasetReplicas', '/datasets_bulk/?$', 'DatasetReplicasBulk', '%s/datasets_vp$', 'DatasetReplicasVP', '%s/?$', 'Replicas', '/tombstone/?$', 'Tombstone')) class Replicas(RucioController): @check_accept_header_wrapper( ['application/x-json-stream', 'application/metalink4+xml']) def GET(self, scope, name): """ List all replicas for data identifiers. HTTP Success: 200 OK
from rucio.common.schema import insert_scope_name from rucio.core.replica_sorter import site_selector, sort_replicas from rucio.web.rest.common import RucioController, check_accept_header_wrapper from rucio.web.rest.utils import generate_http_error try: from urlparse import parse_qs except ImportError: from urllib.parse import parse_qs LOGGER = getLogger("rucio.rucio") SH = StreamHandler() SH.setLevel(DEBUG) LOGGER.addHandler(SH) URLS = insert_scope_name( ('%s/metalink?$', 'MetaLinkRedirector', '%s/?$', 'HeaderRedirector')) class MetaLinkRedirector(RucioController): @check_accept_header_wrapper(['application/metalink4+xml']) def GET(self, scope, name): """ Metalink redirect HTTP Success: 200 OK HTTP Error: 401 Unauthorized 500 InternalError 404 Notfound
URLS = insert_scope_name(( '/(.*)/$', 'Scope', '/(.*)/guid', 'GUIDLookup', '/(.*)/dids/search', 'Search', '/(.*)/dids/search_extended', 'SearchExtended', '%s/files', 'Files', '%s/dids/history', 'AttachmentHistory', '%s/dids', 'Attachment', '%s/meta/(.*)', 'SingleMeta', '%s/meta', 'Meta', '%s/status', 'DIDs', '%s/rules', 'Rules', '%s/parents', 'Parents', '%s/associated_rules', 'AssociatedRules', '%s/did_meta', 'DidMeta', '/(.*)/(.*)/(.*)/(.*)/(.*)/sample', 'Sample', '', 'BulkDIDS', '/attachments', 'Attachments', '/new', 'NewDIDs', '/resurrect', 'Resurrect', '%s/follow', 'Follow', '/bulkmeta', 'BulkMeta', '%s', 'DIDs', ))
from __future__ import print_function from json import dumps from logging import getLogger, StreamHandler, DEBUG from traceback import format_exc from web import application, ctx, loadhook, header, InternalError from rucio.api.did import list_archive_content from rucio.common.schema import insert_scope_name from rucio.web.rest.common import rucio_loadhook, RucioController, check_accept_header_wrapper LOGGER, SH = getLogger("rucio.meta"), StreamHandler() SH.setLevel(DEBUG) LOGGER.addHandler(SH) URLS = insert_scope_name(('%s/files', 'Archive')) class Archive(RucioController): """ REST APIs for archive. """ @check_accept_header_wrapper(['application/x-json-stream']) def GET(self, scope, name): """ List archive content keys. HTTP Success: 200 Success HTTP Error: 406 Not Acceptable """ header('Content-Type', 'application/x-json-stream')
from rucio.common.schema import insert_scope_name from rucio.common.utils import render_json from rucio.web.rest.common import rucio_loadhook, check_accept_header_wrapper from rucio.web.rest.utils import generate_http_error try: from urlparse import parse_qs except ImportError: from urllib.parse import parse_qs LOGGER = getLogger("rucio.lock") SH = StreamHandler() SH.setLevel(DEBUG) LOGGER.addHandler(SH) URLS = insert_scope_name(('%s', 'LockByScopeName', '/(.*)', 'LockByRSE')) class LockByRSE(object): """ REST APIs for dataset locks. """ @check_accept_header_wrapper(['application/x-json-stream']) def GET(self, rse): """ get locks for a given rse. HTTP Success: 200 OK HTTP Error: 404 Not Found 406 Not Acceptable 500 InternalError