Raise errors regarding symbols not allowed in directory paths
Whilst working on https://github.com/pyansys/pymapdl/pull/643 I found that singular apostrophes are not allowed in pymapdl directory paths. Whilst inquiring about this it seems that there are actually several special characters that aren't allowed, that ARE allowed in Windows paths (at least).
We should raise an error when encountering these in a directory path, however, before we can do that we need a complete list of all the disallowed characters. As of now, I am aware of 2:
-
' -
$
Does anyone know of any others?
Made a simple script to test this:
import os
from ansys.mapdl.core import launch_mapdl, Mapdl
mapdl = launch_mapdl()
for i in range(256):
path = os.path.join('/tmp', chr(i))
try:
if not os.path.isdir(path):
os.mkdir(path)
except Exception as e:
print(e)
continue
try:
mapdl.cwd(path)
except Exception as e:
print('MAPDL failed due to' + str(e))
You're correct @jgd10, only $ and ' are issues (at least on Linux).
Should be a trivial PR to fix.
Editting Alex script for Windows:
import warnings
import os
from ansys.mapdl.core import launch_mapdl, Mapdl
mapdl = launch_mapdl(loglevel='ERROR')
for i in range(256):
path = os.path.join('C:\\Users\\gayuso\\AppData\\Local\\Temp', chr(i))
# print('\n\n' + chr(i)+ '\n' + path)
str_ = f'char({i}) - {chr(i)} '
try:
if not os.path.isdir(path):
os.mkdir(path)
except Exception as e:
# print('Error making directory')
continue
with warnings.catch_warnings(record=True) as w:
# Cause all warnings to always be triggered.
warnings.simplefilter("always")
# Trigger a warning.
# Verify some things
try:
mapdl.cwd(path)
if len(w) > 0 and issubclass(w[-1].category, UserWarning) and "*** WARNING ***" in str(w[-1].message):
print(str_ + ': CWD failed')
else:
print(str_ + ': another warning:\n' + w[-1].message)
except IndexError:
# print('There is no warning')
pass
except RuntimeError as e:
print(str_ + ': runtime error/ ' + e.args[0])
The ouput is:
(pymapdl) PS C:\Users\gayuso\pymapdl> & C:/Users/gayuso/.conda/envs/pymapdl/python.exe c:/Users/gayuso/test.py
char(39) - ' : runtime error/ The CWD command does not accept paths that contain singular quotes "
char(128) - : CWD failed
char(129) - : CWD failed
char(130) - : CWD failed
char(131) - : CWD failed
char(132) -
: CWD failed
char(133) -
: CWD failed
char(134) - : CWD failed
char(135) - : CWD failed
char(136) - : CWD failed
char(137) - : CWD failed
char(138) - : CWD failed
char(139) - : CWD failed
char(140) - : CWD failed
char(141) - : CWD failed
char(142) - : CWD failed
char(143) - : CWD failed
char(144) - : CWD failed
char(146) - : CWD failed
char(147) - : CWD failed
char(148) - : CWD failed
char(149) - : CWD failed
char(150) - : CWD failed
char(151) - : CWD failed
char(152) - : CWD failed
char(154) - : CWD failed
char(155) - WD failed
char(156) - : CWD failed
char(157) - : CWD failed
char(161) - ¡ : CWD failed
char(162) - ¢ : CWD failed
char(163) - £ : CWD failed
char(164) - ¤ : CWD failed
char(165) - ¥ : CWD failed
char(166) - ¦ : CWD failed
char(167) - § : CWD failed
char(168) - ¨ : CWD failed
char(169) - © : CWD failed
char(170) - ª : CWD failed
char(171) - « : CWD failed
char(172) - ¬ : CWD failed
char(173) - : CWD failed
char(174) - ® : CWD failed
char(175) - ¯ : CWD failed
char(176) - ° : CWD failed
char(177) - ± : CWD failed
char(178) - ² : CWD failed
char(179) - ³ : CWD failed
char(180) - ´ : CWD failed
char(181) - µ : CWD failed
char(182) - ¶ : CWD failed
char(183) - · : CWD failed
char(184) - ¸ : CWD failed
char(185) - ¹ : CWD failed
char(186) - º : CWD failed
char(187) - » : CWD failed
char(188) - ¼ : CWD failed
char(189) - ½ : CWD failed
char(190) - ¾ : CWD failed
char(191) - ¿ : CWD failed
char(192) - À : CWD failed
char(193) - Á : CWD failed
char(194) - Â : CWD failed
char(195) - Ã : CWD failed
char(196) - Ä : CWD failed
char(197) - Å : CWD failed
char(198) - Æ : CWD failed
char(199) - Ç : CWD failed
char(200) - È : CWD failed
char(201) - É : CWD failed
char(202) - Ê : CWD failed
char(203) - Ë : CWD failed
char(204) - Ì : CWD failed
char(205) - Í : CWD failed
char(206) - Î : CWD failed
char(207) - Ï : CWD failed
char(208) - Ð : CWD failed
char(209) - Ñ : CWD failed
char(210) - Ò : CWD failed
char(211) - Ó : CWD failed
char(212) - Ô : CWD failed
char(213) - Õ : CWD failed
char(214) - Ö : CWD failed
char(215) - × : CWD failed
char(216) - Ø : CWD failed
char(217) - Ù : CWD failed
char(218) - Ú : CWD failed
char(219) - Û : CWD failed
char(220) - Ü : CWD failed
char(221) - Ý : CWD failed
char(222) - Þ : CWD failed
char(223) - ß : CWD failed
char(224) - à : CWD failed
char(225) - á : CWD failed
char(226) - â : CWD failed
char(227) - ã : CWD failed
char(228) - ä : CWD failed
char(229) - å : CWD failed
char(230) - æ : CWD failed
char(231) - ç : CWD failed
char(232) - è : CWD failed
char(233) - é : CWD failed
char(234) - ê : CWD failed
char(235) - ë : CWD failed
char(236) - ì : CWD failed
char(237) - í : CWD failed
char(238) - î : CWD failed
char(239) - ï : CWD failed
char(240) - ð : CWD failed
char(241) - ñ : CWD failed
char(242) - ò : CWD failed
char(243) - ó : CWD failed
char(244) - ô : CWD failed
char(245) - õ : CWD failed
char(246) - ö : CWD failed
char(247) - ÷ : CWD failed
char(248) - ø : CWD failed
char(249) - ù : CWD failed
char(250) - ú : CWD failed
char(251) - û : CWD failed
char(252) - ü : CWD failed
char(253) - ý : CWD failed
char(254) - þ : CWD failed
char(255) - ÿ : CWD failed
Many characters fail with CWD, but the folders are already created.

Hope it helps.