Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitd646017

Browse files
committed
don't allow . in signal/system names (state names are OK)
1 parentc17a389 commitd646017

File tree

2 files changed

+21
-3
lines changed

2 files changed

+21
-3
lines changed

‎control/namedio.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
__all__= ['issiso','timebase','common_timebase','timebaseEqual',
1515
'isdtime','isctime']
16+
1617
# Define module default parameter values
1718
_namedio_defaults= {
1819
'namedio.state_name_delim':'_',
@@ -57,6 +58,8 @@ def _name_or_default(self, name=None):
5758
ifnameisNone:
5859
name="sys[{}]".format(NamedIOSystem._idCounter)
5960
NamedIOSystem._idCounter+=1
61+
elifre.match(r".*\..*",name):
62+
raiseValueError(f"invalid system name '{name}' ('.' not allowed)")
6063
returnname
6164

6265
# Check if system name is generic
@@ -174,7 +177,6 @@ def copy(self, name=None, use_prefix_suffix=True):
174177
returnnewsys
175178

176179
defset_inputs(self,inputs,prefix='u'):
177-
178180
"""Set the number/names of the system inputs.
179181
180182
Parameters
@@ -258,7 +260,7 @@ def set_states(self, states, prefix='x'):
258260
259261
"""
260262
self.nstates,self.state_index= \
261-
_process_signal_list(states,prefix=prefix)
263+
_process_signal_list(states,prefix=prefix,allow_dot=True)
262264

263265
deffind_state(self,name):
264266
"""Find the index for a state given its name (`None` if not found)"""
@@ -613,7 +615,7 @@ def _process_dt_keyword(keywords, defaults={}, static=False):
613615

614616

615617
# Utility function to parse a list of signals
616-
def_process_signal_list(signals,prefix='s'):
618+
def_process_signal_list(signals,prefix='s',allow_dot=False):
617619
ifsignalsisNone:
618620
# No information provided; try and make it up later
619621
returnNone, {}
@@ -624,10 +626,17 @@ def _process_signal_list(signals, prefix='s'):
624626

625627
elifisinstance(signals,str):
626628
# Single string given => single signal with given name
629+
ifnotallow_dotandre.match(r".*\..*",signals):
630+
raiseValueError(
631+
f"invalid signal name '{signals}' ('.' not allowed)")
627632
return1, {signals:0}
628633

629634
elifall(isinstance(s,str)forsinsignals):
630635
# Use the list of strings as the signal names
636+
forsignalinsignals:
637+
ifnotallow_dotandre.match(r".*\..*",signal):
638+
raiseValueError(
639+
f"invalid signal name '{signal}' ('.' not allowed)")
631640
returnlen(signals), {signals[i]:iforiinrange(len(signals))}
632641

633642
else:

‎control/tests/namedio_test.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,3 +323,12 @@ def test_find_signals():
323323
assertsys.find_outputs(['y','z'])== [0,1,2,3]
324324
assertsys.find_outputs(['y[1:]','z'])== [1,2,3]
325325
assertsys.find_outputs(['y','z[:1]'])== [0,1,2,3]
326+
327+
328+
# Invalid signal names
329+
deftest_invalid_signal_names():
330+
withpytest.raises(ValueError,match="invalid signal name"):
331+
sys=ct.rss(4,inputs="input.signal",outputs=1)
332+
333+
withpytest.raises(ValueError,match="invalid system name"):
334+
sys=ct.rss(4,inputs=1,outputs=1,name="system.subsys")

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp