rucio 37.5.0__py3-none-any.whl → 37.6.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of rucio might be problematic. Click here for more details.
- rucio/cli/bin_legacy/rucio.py +1 -1
- rucio/cli/bin_legacy/rucio_admin.py +1 -1
- rucio/cli/did.py +2 -2
- rucio/cli/rse.py +2 -3
- rucio/cli/subscription.py +1 -1
- rucio/client/baseclient.py +5 -1
- rucio/client/didclient.py +16 -16
- rucio/client/downloadclient.py +14 -14
- rucio/client/lockclient.py +3 -3
- rucio/client/replicaclient.py +2 -2
- rucio/client/touchclient.py +1 -1
- rucio/client/uploadclient.py +725 -181
- rucio/common/config.py +1 -2
- rucio/common/constants.py +2 -0
- rucio/common/didtype.py +2 -2
- rucio/common/dumper/__init__.py +1 -1
- rucio/common/pcache.py +20 -25
- rucio/common/plugins.py +10 -17
- rucio/common/schema/__init__.py +7 -5
- rucio/common/utils.py +1 -1
- rucio/core/authentication.py +1 -1
- rucio/core/credential.py +1 -1
- rucio/core/did.py +54 -54
- rucio/core/did_meta_plugins/__init__.py +10 -10
- rucio/core/did_meta_plugins/did_column_meta.py +9 -9
- rucio/core/did_meta_plugins/did_meta_plugin_interface.py +3 -3
- rucio/core/did_meta_plugins/elasticsearch_meta.py +7 -7
- rucio/core/did_meta_plugins/json_meta.py +2 -2
- rucio/core/did_meta_plugins/mongo_meta.py +9 -9
- rucio/core/did_meta_plugins/postgres_meta.py +7 -7
- rucio/core/dirac.py +1 -1
- rucio/core/lifetime_exception.py +2 -2
- rucio/core/lock.py +7 -7
- rucio/core/meta_conventions.py +2 -2
- rucio/core/monitor.py +1 -1
- rucio/core/naming_convention.py +1 -1
- rucio/core/nongrid_trace.py +2 -2
- rucio/core/oidc.py +2 -2
- rucio/core/permission/__init__.py +7 -5
- rucio/core/permission/generic.py +2 -2
- rucio/core/permission/generic_multi_vo.py +2 -2
- rucio/core/replica.py +17 -17
- rucio/core/rule.py +30 -30
- rucio/core/rule_grouping.py +2 -3
- rucio/core/scope.py +1 -1
- rucio/core/trace.py +2 -2
- rucio/daemons/auditor/__init__.py +1 -1
- rucio/daemons/badreplicas/minos.py +9 -3
- rucio/daemons/badreplicas/minos_temporary_expiration.py +5 -2
- rucio/daemons/badreplicas/necromancer.py +9 -3
- rucio/daemons/bb8/common.py +1 -1
- rucio/daemons/bb8/nuclei_background_rebalance.py +1 -1
- rucio/daemons/bb8/t2_background_rebalance.py +1 -1
- rucio/daemons/cache/consumer.py +1 -1
- rucio/daemons/conveyor/finisher.py +13 -4
- rucio/daemons/conveyor/poller.py +5 -2
- rucio/daemons/conveyor/receiver.py +1 -1
- rucio/daemons/follower/follower.py +1 -1
- rucio/daemons/hermes/hermes.py +2 -2
- rucio/daemons/judge/cleaner.py +2 -2
- rucio/daemons/judge/evaluator.py +7 -7
- rucio/daemons/judge/injector.py +2 -2
- rucio/daemons/judge/repairer.py +2 -2
- rucio/daemons/replicarecoverer/suspicious_replica_recoverer.py +1 -1
- rucio/daemons/storage/consistency/actions.py +3 -3
- rucio/daemons/transmogrifier/transmogrifier.py +1 -1
- rucio/daemons/undertaker/undertaker.py +6 -6
- rucio/db/sqla/constants.py +4 -3
- rucio/db/sqla/migrate_repo/versions/3082b8cef557_add_naming_convention_table_and_closed_.py +1 -1
- rucio/db/sqla/migrate_repo/versions/4df2c5ddabc0_remove_temporary_dids.py +1 -1
- rucio/db/sqla/migrate_repo/versions/c129ccdb2d5_add_lumiblocknr_to_dids.py +1 -1
- rucio/db/sqla/models.py +1 -1
- rucio/db/sqla/session.py +7 -7
- rucio/gateway/account.py +65 -90
- rucio/gateway/did.py +26 -26
- rucio/gateway/dirac.py +1 -1
- rucio/gateway/lifetime_exception.py +1 -1
- rucio/gateway/replica.py +2 -2
- rucio/rse/protocols/ngarc.py +2 -2
- rucio/rse/protocols/srm.py +1 -1
- rucio/rse/protocols/webdav.py +8 -1
- rucio/tests/common.py +4 -4
- rucio/vcsversion.py +3 -3
- rucio/web/rest/flaskapi/v1/accounts.py +20 -20
- rucio/web/rest/flaskapi/v1/archives.py +2 -2
- rucio/web/rest/flaskapi/v1/common.py +1 -1
- rucio/web/rest/flaskapi/v1/dids.py +188 -188
- rucio/web/rest/flaskapi/v1/lifetime_exceptions.py +5 -5
- rucio/web/rest/flaskapi/v1/locks.py +13 -13
- rucio/web/rest/flaskapi/v1/main.py +1 -0
- rucio/web/rest/flaskapi/v1/redirect.py +2 -2
- rucio/web/rest/flaskapi/v1/replicas.py +16 -16
- rucio/web/rest/flaskapi/v1/requests.py +16 -16
- rucio/web/rest/flaskapi/v1/subscriptions.py +7 -7
- {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-abacus-account +8 -1
- {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-abacus-rse +8 -1
- {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-auditor +1 -1
- {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-conveyor-throttler +7 -1
- {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-follower +1 -1
- {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-judge-cleaner +9 -1
- {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-necromancer +7 -1
- {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-replica-recoverer +31 -9
- {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-undertaker +8 -2
- {rucio-37.5.0.dist-info → rucio-37.6.0.dist-info}/METADATA +1 -1
- {rucio-37.5.0.dist-info → rucio-37.6.0.dist-info}/RECORD +155 -155
- {rucio-37.5.0.data → rucio-37.6.0.data}/data/rucio/etc/alembic.ini.template +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/data/rucio/etc/alembic_offline.ini.template +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/data/rucio/etc/globus-config.yml.template +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/data/rucio/etc/ldap.cfg.template +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/data/rucio/etc/mail_templates/rule_approval_request.tmpl +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/data/rucio/etc/mail_templates/rule_approved_admin.tmpl +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/data/rucio/etc/mail_templates/rule_approved_user.tmpl +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/data/rucio/etc/mail_templates/rule_denied_admin.tmpl +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/data/rucio/etc/mail_templates/rule_denied_user.tmpl +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/data/rucio/etc/mail_templates/rule_ok_notification.tmpl +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/data/rucio/etc/rse-accounts.cfg.template +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/data/rucio/etc/rucio.cfg.atlas.client.template +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/data/rucio/etc/rucio.cfg.template +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/data/rucio/etc/rucio_multi_vo.cfg.template +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/data/rucio/requirements.server.txt +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/data/rucio/tools/bootstrap.py +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/data/rucio/tools/merge_rucio_configs.py +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/data/rucio/tools/reset_database.py +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-abacus-collection-replica +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-admin +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-atropos +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-automatix +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-bb8 +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-cache-client +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-cache-consumer +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-conveyor-finisher +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-conveyor-poller +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-conveyor-preparer +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-conveyor-receiver +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-conveyor-stager +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-conveyor-submitter +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-dark-reaper +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-dumper +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-hermes +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-judge-evaluator +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-judge-injector +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-judge-repairer +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-kronos +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-minos +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-minos-temporary-expiration +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-oauth-manager +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-reaper +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-rse-decommissioner +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-storage-consistency-actions +0 -0
- {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-transmogrifier +0 -0
- {rucio-37.5.0.dist-info → rucio-37.6.0.dist-info}/WHEEL +0 -0
- {rucio-37.5.0.dist-info → rucio-37.6.0.dist-info}/licenses/AUTHORS.rst +0 -0
- {rucio-37.5.0.dist-info → rucio-37.6.0.dist-info}/licenses/LICENSE +0 -0
- {rucio-37.5.0.dist-info → rucio-37.6.0.dist-info}/top_level.txt +0 -0
rucio/vcsversion.py
CHANGED
|
@@ -4,8 +4,8 @@ This file is automatically generated; Do not edit it. :)
|
|
|
4
4
|
'''
|
|
5
5
|
VERSION_INFO = {
|
|
6
6
|
'final': True,
|
|
7
|
-
'version': '37.
|
|
7
|
+
'version': '37.6.0',
|
|
8
8
|
'branch_nick': 'release-37',
|
|
9
|
-
'revision_id': '
|
|
10
|
-
'revno':
|
|
9
|
+
'revision_id': '30f77937bd8dd8b480072448e64a5398dbad0c9f',
|
|
10
|
+
'revno': 13789
|
|
11
11
|
}
|
|
@@ -76,7 +76,7 @@ class Attributes(ErrorHandlingMethodView):
|
|
|
76
76
|
description: "Not acceptable."
|
|
77
77
|
"""
|
|
78
78
|
try:
|
|
79
|
-
attribs = list_account_attributes(account, vo=request.environ
|
|
79
|
+
attribs = list_account_attributes(account, vo=request.environ['vo'])
|
|
80
80
|
except AccountNotFound as error:
|
|
81
81
|
return generate_http_error_flask(404, error)
|
|
82
82
|
|
|
@@ -134,7 +134,7 @@ class Attributes(ErrorHandlingMethodView):
|
|
|
134
134
|
parameters = json_parameters()
|
|
135
135
|
value = param_get(parameters, 'value')
|
|
136
136
|
try:
|
|
137
|
-
add_account_attribute(key=key, value=value, account=account, issuer=request.environ
|
|
137
|
+
add_account_attribute(key=key, value=value, account=account, issuer=request.environ['issuer'], vo=request.environ['vo'])
|
|
138
138
|
except AccessDenied as error:
|
|
139
139
|
return generate_http_error_flask(401, error)
|
|
140
140
|
except Duplicate as error:
|
|
@@ -173,7 +173,7 @@ class Attributes(ErrorHandlingMethodView):
|
|
|
173
173
|
description: "No account found for the given id."
|
|
174
174
|
"""
|
|
175
175
|
try:
|
|
176
|
-
del_account_attribute(account=account, key=key, issuer=request.environ
|
|
176
|
+
del_account_attribute(account=account, key=key, issuer=request.environ['issuer'], vo=request.environ['vo'])
|
|
177
177
|
except AccessDenied as error:
|
|
178
178
|
return generate_http_error_flask(401, error)
|
|
179
179
|
except AccountNotFound as error:
|
|
@@ -333,10 +333,10 @@ class AccountParameter(ErrorHandlingMethodView):
|
|
|
333
333
|
frontend = request.headers.get('X-Requested-Host', default=None)
|
|
334
334
|
if frontend:
|
|
335
335
|
return redirect(f'{frontend}/accounts/{request.environ.get("issuer")}', code=302)
|
|
336
|
-
return redirect(request.environ
|
|
336
|
+
return redirect(request.environ['issuer'], code=303)
|
|
337
337
|
|
|
338
338
|
try:
|
|
339
|
-
acc = get_account_info(account, vo=request.environ
|
|
339
|
+
acc = get_account_info(account, vo=request.environ['vo'])
|
|
340
340
|
except AccountNotFound as error:
|
|
341
341
|
return generate_http_error_flask(404, error)
|
|
342
342
|
except AccessDenied as error:
|
|
@@ -383,7 +383,7 @@ class AccountParameter(ErrorHandlingMethodView):
|
|
|
383
383
|
parameters = json_parameters()
|
|
384
384
|
for key, value in parameters.items():
|
|
385
385
|
try:
|
|
386
|
-
update_account(account, key=key, value=value, issuer=request.environ
|
|
386
|
+
update_account(account, key=key, value=value, issuer=request.environ['issuer'], vo=request.environ['vo'])
|
|
387
387
|
except ValueError:
|
|
388
388
|
return generate_http_error_flask(400, ValueError.__name__, f'Unknown value {value}')
|
|
389
389
|
except AccessDenied as error:
|
|
@@ -442,7 +442,7 @@ class AccountParameter(ErrorHandlingMethodView):
|
|
|
442
442
|
type_param = param_get(parameters, 'type')
|
|
443
443
|
email = param_get(parameters, 'email')
|
|
444
444
|
try:
|
|
445
|
-
add_account(account, type_param, email, issuer=request.environ
|
|
445
|
+
add_account(account, type_param, email, issuer=request.environ['issuer'], vo=request.environ['vo'])
|
|
446
446
|
except Duplicate as error:
|
|
447
447
|
return generate_http_error_flask(409, error)
|
|
448
448
|
except AccessDenied as error:
|
|
@@ -475,7 +475,7 @@ class AccountParameter(ErrorHandlingMethodView):
|
|
|
475
475
|
description: "Account not found"
|
|
476
476
|
"""
|
|
477
477
|
try:
|
|
478
|
-
del_account(account, issuer=request.environ
|
|
478
|
+
del_account(account, issuer=request.environ['issuer'], vo=request.environ['vo'])
|
|
479
479
|
except AccessDenied as error:
|
|
480
480
|
return generate_http_error_flask(401, error)
|
|
481
481
|
except AccountNotFound as error:
|
|
@@ -520,7 +520,7 @@ class Account(ErrorHandlingMethodView):
|
|
|
520
520
|
for account in list_accounts(filter_=_filter, vo=vo):
|
|
521
521
|
yield render_json(**account) + "\n"
|
|
522
522
|
|
|
523
|
-
return try_stream(generate(_filter=dict(request.args.items(multi=False)), vo=request.environ
|
|
523
|
+
return try_stream(generate(_filter=dict(request.args.items(multi=False)), vo=request.environ['vo']))
|
|
524
524
|
|
|
525
525
|
|
|
526
526
|
class LocalAccountLimits(ErrorHandlingMethodView):
|
|
@@ -561,7 +561,7 @@ class LocalAccountLimits(ErrorHandlingMethodView):
|
|
|
561
561
|
description: "Not Acceptable"
|
|
562
562
|
"""
|
|
563
563
|
try:
|
|
564
|
-
limits = get_local_account_limit(account=account, rse=rse, vo=request.environ
|
|
564
|
+
limits = get_local_account_limit(account=account, rse=rse, vo=request.environ['vo'])
|
|
565
565
|
except RSENotFound as error:
|
|
566
566
|
return generate_http_error_flask(404, error)
|
|
567
567
|
|
|
@@ -606,7 +606,7 @@ class GlobalAccountLimits(ErrorHandlingMethodView):
|
|
|
606
606
|
description: "Not Acceptable"
|
|
607
607
|
"""
|
|
608
608
|
try:
|
|
609
|
-
limits = get_global_account_limit(account=account, rse_expression=rse_expression, vo=request.environ
|
|
609
|
+
limits = get_global_account_limit(account=account, rse_expression=rse_expression, vo=request.environ['vo'])
|
|
610
610
|
except RSENotFound as error:
|
|
611
611
|
return generate_http_error_flask(404, error)
|
|
612
612
|
|
|
@@ -677,8 +677,8 @@ class Identities(ErrorHandlingMethodView):
|
|
|
677
677
|
authtype = param_get(parameters, 'authtype')
|
|
678
678
|
email = param_get(parameters, 'email')
|
|
679
679
|
|
|
680
|
-
issuer = request.environ
|
|
681
|
-
vo = request.environ
|
|
680
|
+
issuer = request.environ['issuer']
|
|
681
|
+
vo = request.environ['vo']
|
|
682
682
|
|
|
683
683
|
if not issuer or not vo:
|
|
684
684
|
return generate_http_error_flask(400, ValueError.__name__, 'Issuer and VO must be set.')
|
|
@@ -745,7 +745,7 @@ class Identities(ErrorHandlingMethodView):
|
|
|
745
745
|
for identity in list_identities(account, vo=vo):
|
|
746
746
|
yield render_json(**identity) + "\n"
|
|
747
747
|
|
|
748
|
-
return try_stream(generate(request.environ
|
|
748
|
+
return try_stream(generate(request.environ['vo']))
|
|
749
749
|
except AccountNotFound as error:
|
|
750
750
|
return generate_http_error_flask(404, error)
|
|
751
751
|
|
|
@@ -790,8 +790,8 @@ class Identities(ErrorHandlingMethodView):
|
|
|
790
790
|
identity = param_get(parameters, 'identity')
|
|
791
791
|
authtype = param_get(parameters, 'authtype')
|
|
792
792
|
|
|
793
|
-
issuer = request.environ
|
|
794
|
-
vo = request.environ
|
|
793
|
+
issuer = request.environ['issuer']
|
|
794
|
+
vo = request.environ['vo']
|
|
795
795
|
|
|
796
796
|
if not issuer or not vo:
|
|
797
797
|
return generate_http_error_flask(400, ValueError.__name__, 'Issuer and VO must be set.')
|
|
@@ -846,7 +846,7 @@ class Rules(ErrorHandlingMethodView):
|
|
|
846
846
|
for rule in list_replication_rules(filters=filters, vo=vo):
|
|
847
847
|
yield dumps(rule, cls=APIEncoder) + '\n'
|
|
848
848
|
|
|
849
|
-
return try_stream(generate(vo=request.environ
|
|
849
|
+
return try_stream(generate(vo=request.environ['vo']))
|
|
850
850
|
except RuleNotFound as error:
|
|
851
851
|
return generate_http_error_flask(404, error)
|
|
852
852
|
|
|
@@ -901,7 +901,7 @@ class UsageHistory(ErrorHandlingMethodView):
|
|
|
901
901
|
description: "Not acceptable"
|
|
902
902
|
"""
|
|
903
903
|
try:
|
|
904
|
-
usage = get_usage_history(account=account, rse=rse, issuer=request.environ
|
|
904
|
+
usage = get_usage_history(account=account, rse=rse, issuer=request.environ['issuer'], vo=request.environ['vo'])
|
|
905
905
|
except (AccountNotFound, CounterNotFound) as error:
|
|
906
906
|
return generate_http_error_flask(404, error)
|
|
907
907
|
except AccessDenied as error:
|
|
@@ -972,7 +972,7 @@ class LocalUsage(ErrorHandlingMethodView):
|
|
|
972
972
|
for usage in get_local_account_usage(account=account, rse=rse, issuer=issuer, vo=vo):
|
|
973
973
|
yield dumps(usage, cls=APIEncoder) + '\n'
|
|
974
974
|
|
|
975
|
-
return try_stream(generate(issuer=request.environ
|
|
975
|
+
return try_stream(generate(issuer=request.environ['issuer'], vo=request.environ['vo']))
|
|
976
976
|
except (AccountNotFound, RSENotFound) as error:
|
|
977
977
|
return generate_http_error_flask(404, error)
|
|
978
978
|
except AccessDenied as error:
|
|
@@ -1036,7 +1036,7 @@ class GlobalUsage(ErrorHandlingMethodView):
|
|
|
1036
1036
|
for usage in get_global_account_usage(account=account, rse_expression=rse_expression, issuer=issuer, vo=vo):
|
|
1037
1037
|
yield dumps(usage, cls=APIEncoder) + '\n'
|
|
1038
1038
|
|
|
1039
|
-
return try_stream(generate(vo=request.environ
|
|
1039
|
+
return try_stream(generate(vo=request.environ['vo'], issuer=request.environ['issuer']))
|
|
1040
1040
|
except (AccountNotFound, RSENotFound) as error:
|
|
1041
1041
|
return generate_http_error_flask(404, error)
|
|
1042
1042
|
except AccessDenied as error:
|
|
@@ -54,10 +54,10 @@ class Archive(ErrorHandlingMethodView):
|
|
|
54
54
|
type: object
|
|
55
55
|
properties:
|
|
56
56
|
scope:
|
|
57
|
-
description: "The scope of the
|
|
57
|
+
description: "The scope of the DID."
|
|
58
58
|
type: string
|
|
59
59
|
name:
|
|
60
|
-
description: "The name of the
|
|
60
|
+
description: "The name of the DID."
|
|
61
61
|
type: string
|
|
62
62
|
bytes:
|
|
63
63
|
description: "The number of bytes."
|
|
@@ -234,7 +234,7 @@ def parse_scope_name(scope_name: str, vo: Optional[str]) -> tuple[str, ...]:
|
|
|
234
234
|
if not vo:
|
|
235
235
|
vo = 'def'
|
|
236
236
|
|
|
237
|
-
# The ':' in
|
|
237
|
+
# The ':' in DID is replaced by '/', also an '/' is added. Why?
|
|
238
238
|
pattern = get_schema_value('SCOPE_NAME_REGEXP', vo)
|
|
239
239
|
text = '/' + scope_name
|
|
240
240
|
|