Skip to content

Commit 1a11c3a

Browse files
authored
Move snake_to_pascal back to root util (#277)
This is useful outside of EPICS contexts
1 parent 56dccba commit 1a11c3a

File tree

8 files changed

+48
-48
lines changed

8 files changed

+48
-48
lines changed

src/fastcs/transports/epics/ca/ioc.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@
2020
record_metadata_from_attribute,
2121
record_metadata_from_datatype,
2222
)
23-
from fastcs.transports.epics.util import controller_pv_prefix, snake_to_pascal
23+
from fastcs.transports.epics.util import controller_pv_prefix
24+
from fastcs.util import snake_to_pascal
2425

2526
EPICS_MAX_NAME_LENGTH = 60
2627

src/fastcs/transports/epics/gui.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
from fastcs.methods import Command
3737
from fastcs.transports.controller_api import ControllerAPI
3838
from fastcs.transports.epics.options import EpicsGUIFormat, EpicsGUIOptions
39-
from fastcs.transports.epics.util import snake_to_pascal
39+
from fastcs.util import snake_to_pascal
4040

4141
logger = bind_logger(logger_name=__name__)
4242

src/fastcs/transports/epics/pva/ioc.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,10 @@
44

55
from fastcs.attributes import AttrR, AttrRW, AttrW
66
from fastcs.transports.controller_api import ControllerAPI
7-
from fastcs.transports.epics.util import controller_pv_prefix, snake_to_pascal
7+
from fastcs.transports.epics.util import controller_pv_prefix
8+
from fastcs.util import snake_to_pascal
89

9-
from ._pv_handlers import (
10-
make_command_pv,
11-
make_shared_read_pv,
12-
make_shared_write_pv,
13-
)
10+
from ._pv_handlers import make_command_pv, make_shared_read_pv, make_shared_write_pv
1411
from .pvi import add_pvi_info
1512

1613

src/fastcs/transports/epics/pva/pvi.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
from fastcs.attributes import Attribute, AttrR, AttrRW, AttrW
1010
from fastcs.transports.controller_api import ControllerAPI
11-
from fastcs.transports.epics.util import snake_to_pascal
11+
from fastcs.util import snake_to_pascal
1212

1313
from .types import p4p_alarm_states, p4p_timestamp_now
1414

src/fastcs/transports/epics/util.py

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,5 @@
1-
import re
2-
31
from fastcs.transports.controller_api import ControllerAPI
4-
5-
6-
def snake_to_pascal(name: str) -> str:
7-
"""Converts string from snake case to Pascal case.
8-
If string is not a valid snake case it will be returned unchanged
9-
"""
10-
if re.fullmatch(r"[a-z][a-z0-9]*(?:_[a-z0-9]+)*", name):
11-
name = re.sub(r"(?:^|_)([a-z0-9])", lambda match: match.group(1).upper(), name)
12-
return name
2+
from fastcs.util import snake_to_pascal
133

144

155
def controller_pv_prefix(prefix: str, controller_api: ControllerAPI) -> str:

src/fastcs/util.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,13 @@
1+
import re
2+
13
ONCE = float("inf")
24
"""Sentinel value to call a ``scan`` or io ``update`` method once on start up"""
5+
6+
7+
def snake_to_pascal(name: str) -> str:
8+
"""Converts string from snake case to Pascal case.
9+
If string is not a valid snake case it will be returned unchanged
10+
"""
11+
if re.fullmatch(r"[a-z][a-z0-9]*(?:_[a-z0-9]+)*", name):
12+
name = re.sub(r"(?:^|_)([a-z0-9])", lambda match: match.group(1).upper(), name)
13+
return name

tests/test_util.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
from fastcs.util import snake_to_pascal
2+
3+
4+
def test_snake_to_pascal():
5+
name1 = "name_in_snake_case"
6+
name2 = "name-not-in-snake-case"
7+
name3 = "name_with-different_separators"
8+
name4 = "name_with_numbers_1_2_3"
9+
name5 = "numbers_1_2_3_in_the_middle"
10+
name6 = "1_2_3_starting_with_numbers"
11+
name7 = "name1_with2_a3_number4"
12+
name8 = "name_in_lower_case"
13+
name9 = "NameAlreadyInPascalCase"
14+
name10 = "Name_With_%_Invalid_&_Symbols_£_"
15+
name11 = "a_b_c_d"
16+
name12 = "test"
17+
assert snake_to_pascal(name1) == "NameInSnakeCase"
18+
assert snake_to_pascal(name2) == "name-not-in-snake-case"
19+
assert snake_to_pascal(name3) == "name_with-different_separators"
20+
assert snake_to_pascal(name4) == "NameWithNumbers123"
21+
assert snake_to_pascal(name5) == "Numbers123InTheMiddle"
22+
assert snake_to_pascal(name6) == "1_2_3_starting_with_numbers"
23+
assert snake_to_pascal(name7) == "Name1With2A3Number4"
24+
assert snake_to_pascal(name8) == "NameInLowerCase"
25+
assert snake_to_pascal(name9) == "NameAlreadyInPascalCase"
26+
assert snake_to_pascal(name10) == "Name_With_%_Invalid_&_Symbols_£_"
27+
assert snake_to_pascal(name11) == "ABCD"
28+
assert snake_to_pascal(name12) == "Test"

tests/transports/epics/test_epics_util.py

Lines changed: 1 addition & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2,34 +2,7 @@
22
from pvi.device import SignalR
33
from pydantic import ValidationError
44

5-
from fastcs.transports.epics.util import snake_to_pascal
6-
7-
8-
def test_snake_to_pascal():
9-
name1 = "name_in_snake_case"
10-
name2 = "name-not-in-snake-case"
11-
name3 = "name_with-different_separators"
12-
name4 = "name_with_numbers_1_2_3"
13-
name5 = "numbers_1_2_3_in_the_middle"
14-
name6 = "1_2_3_starting_with_numbers"
15-
name7 = "name1_with2_a3_number4"
16-
name8 = "name_in_lower_case"
17-
name9 = "NameAlreadyInPascalCase"
18-
name10 = "Name_With_%_Invalid_&_Symbols_£_"
19-
name11 = "a_b_c_d"
20-
name12 = "test"
21-
assert snake_to_pascal(name1) == "NameInSnakeCase"
22-
assert snake_to_pascal(name2) == "name-not-in-snake-case"
23-
assert snake_to_pascal(name3) == "name_with-different_separators"
24-
assert snake_to_pascal(name4) == "NameWithNumbers123"
25-
assert snake_to_pascal(name5) == "Numbers123InTheMiddle"
26-
assert snake_to_pascal(name6) == "1_2_3_starting_with_numbers"
27-
assert snake_to_pascal(name7) == "Name1With2A3Number4"
28-
assert snake_to_pascal(name8) == "NameInLowerCase"
29-
assert snake_to_pascal(name9) == "NameAlreadyInPascalCase"
30-
assert snake_to_pascal(name10) == "Name_With_%_Invalid_&_Symbols_£_"
31-
assert snake_to_pascal(name11) == "ABCD"
32-
assert snake_to_pascal(name12) == "Test"
5+
from fastcs.util import snake_to_pascal
336

347

358
def test_pvi_validation_error():

0 commit comments

Comments
 (0)