File tree Expand file tree Collapse file tree
tests/unit/synapseclient/extensions Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -1897,7 +1897,7 @@ def build_parser():
18971897 "--fix-schema-name" ,
18981898 action = "store_true" ,
18991899 default = False ,
1900- help = "Fixes the schema name to meet Synapse requirements by replacing dashes and underscores with periods. " ,
1900+ help = "Replaces dashes and underscores with periods in the schema name (e.g., 'my-schema_name' becomes 'my.schema.name') " ,
19011901 )
19021902 parser_register_json_schema .add_argument (
19031903 "--schema-version" ,
Original file line number Diff line number Diff line change 66"""
77
88import json
9+ import re
910from typing import TYPE_CHECKING , Optional
1011
1112from synapseclient .core .async_utils import wrap_async_to_sync
@@ -130,11 +131,13 @@ async def register_jsonschema_async(
130131 from synapseclient import Synapse
131132 from synapseclient .models .schema_organization import JSONSchema
132133
133- if fix_schema_name :
134- schema_name = schema_name .replace ("-" , "." ).replace ("_" , "." )
135-
136134 syn = Synapse .get_client (synapse_client = synapse_client )
137135
136+ if fix_schema_name :
137+ old_name = schema_name
138+ schema_name = fix_name (schema_name )
139+ syn .logger .info (f"Changed schema name from '{ old_name } ' to '{ schema_name } ' " )
140+
138141 with open (schema_path , "r" ) as f :
139142 schema_body = json .load (f )
140143
@@ -154,6 +157,24 @@ async def register_jsonschema_async(
154157 return json_schema
155158
156159
160+ def fix_name (name : str ) -> str :
161+ """
162+ Fixes a schema name to meet Synapse requirements by:
163+ - replacing dashes and underscores with periods.
164+ - collapsing multiple consecutive periods into a single period.
165+
166+ Arguments:
167+ name: The original schema name
168+
169+ Returns:
170+ The fixed schema name
171+
172+ """
173+ name = name .replace ("-" , "." ).replace ("_" , "." )
174+ name = re .sub (r"\.+" , "." , name )
175+ return name
176+
177+
157178def bind_jsonschema (
158179 entity_id : str ,
159180 json_schema_uri : str ,
Original file line number Diff line number Diff line change 44import pytest
55
66from synapseclient .extensions .curator import register_jsonschema_async
7+ from synapseclient .extensions .curator .schema_management import fix_name
78
89
910@pytest .fixture
@@ -94,3 +95,28 @@ async def test_register_jsonschema_async_fix_schema_name(
9495 )
9596
9697 assert result .uri == "syn123.456"
98+
99+
100+ @pytest .mark .parametrize (
101+ "name, expected_fixed_name" ,
102+ [
103+ ("name" , "name" ),
104+ ("name.name" , "name.name" ),
105+ ("name..name" , "name.name" ),
106+ ("name-name" , "name.name" ),
107+ ("name--name" , "name.name" ),
108+ ("name_name" , "name.name" ),
109+ ("name-_name" , "name.name" ),
110+ ],
111+ ids = [
112+ "No special characters" ,
113+ "One period" ,
114+ "Multiple periods" ,
115+ "One dash" ,
116+ "Multiple dashes" ,
117+ "Underscore" ,
118+ "Mixed special characters" ,
119+ ],
120+ )
121+ def test_fix_name (name , expected_fixed_name ):
122+ assert fix_name (name ) == expected_fixed_name
You can’t perform that action at this time.
0 commit comments