#9170 closed defect (fixed)
SMILES needs escape-sequence insertion
| Reported by: | Tristan Croll | Owned by: | Eric Pettersen |
|---|---|---|---|
| Priority: | normal | Milestone: | |
| Component: | Input/Output | Version: | |
| Keywords: | Cc: | ||
| Blocked By: | Blocking: | ||
| Notify when closed: | Platform: | all | |
| Project: | ChimeraX |
Description
The following bug report has been submitted:
Platform: Linux-5.19.0-43-generic-x86_64-with-glibc2.35
ChimeraX Version: 1.6.1 (2023-05-09 17:57:07 UTC)
Description
Trying to create a molecule from a SMILES string with explicit hydrogens didn't go so well, due to mis-parsing of the string at the command-line stage. Trying to fetch it via the `smiles.fetch_smiles` API also failed at first, with the string being rejected by the server. Entering the string directly at https://cactus.nci.nih.gov/translate/ worked, and inspection of the result showed it expected most of the symbols to be escaped. This works:
{{{
def escape_for_html(string):
string = string.replace('[','%5B')
string = string.replace(']','%5D')
string = string.replace('(','%28')
string = string.replace(')','%29')
string = string.replace('@','%40')
string = string.replace('+','%2B')
return string
smiles = '[H:10][C:1]1([C:2]([C:4]([C:7]([C:5]([C:3]1([H:14])[H:15])([H:18])[H:19])([H:23])[C@:8]([H:24])([C:6]([H:20])([H:21])[H:22])[N+:9]([H:25])([H:26])[H:27])([H:16])[H:17])([H:12])[H:13])[H:11]'
from chimerax.smiles.smiles import fetch_smiles
m = fetch_smiles(session, escape_for_html(smiles))[0]
}}}
... although I'm not sure this example contains *every* character that needs to be escaped.
Log:
> isolde shorthand
Initialising ISOLDE-specific command aliases:
Alias Equivalent full command
-------------------------------------------------
st isolde step {arguments}
aw isolde add water {arguments}
awsf isolde add water {arguments} sim false
al isolde add ligand {arguments}
aa isolde add aa $1 sel {arguments}
ht isolde mod his sel {arguments}
so setattr sel atoms occupancy {arguments}
ab isolde adjust bfactors {arguments}
ss isolde sim start sel
rt isolde release torsions sel {arguments}
rd isolde release distances sel {arguments}
ra rd; rt
pf isolde pepflip sel
cf isolde cisflip sel
cbb color bfactor {arguments}
cbo color byattr occupancy {arguments}
cbc color {arguments} bychain; color {arguments} byhet
cs clipper set contourSensitivity {arguments}
UCSF ChimeraX version: 1.6.1 (2023-05-09)
© 2016-2023 Regents of the University of California. All rights reserved.
How to cite UCSF ChimeraX
> ui tool show Shell
> usage smiles
"smiles" is not a command name
> open
> b'[H:10][C:1]1([C:2]([C:4]([C:7]([C:5]([C:3]1([H:14])[H:15])([H:18])[H:19])([H:23])[C@:8]([H:24])([C:6]([H:20])([H:21])[H:22])[N+:9]([H:25])([H:26])[H:27])([H:16])[H:17])([H:12])[H:13])[H:11]'
> format smiles
> open
> [H:10][C:1]1([C:2]([C:4]([C:7]([C:5]([C:3]1([H:14])[H:15])([H:18])[H:19])([H:23])[C@:8]([H:24])([C:6]([H:20])([H:21])[H:22])[N+:9]([H:25])([H:26])[H:27])([H:16])[H:17])([H:12])[H:13])[H:11]
> format smiles
[Repeated 1 time(s)]
> usage open format smiles
'smiles' is a database format type; use the command 'usage open database' with
the corresponding database type instead
> open
> [H:10][C:1]1([C:2]([C:4]([C:7]([C:5]([C:3]1([H:14])[H:15])([H:18])[H:19])([H:23])[C@:8]([H:24])([C:6]([H:20])([H:21])[H:22])[N+:9]([H:25])([H:26])[H:27])([H:16])[H:17])([H:12])[H:13])[H:11]
> from smiles
> usage open database
Missing or invalid "database" argument: Expected one of 'alphafold', 'ccd',
'cellpack', 'cod', 'eds', 'edsdiff', 'emdb', 'emdb_china', 'emdb_europe',
'emdb_japan', 'emdb_us', 'esmfold', 'ftp', 'help', 'http', 'https', 'pcod',
'pdb', 'pdbdev', 'pdbe', 'pdbe_bio', 'pdbj', 'pubchem', 'rcsb_bio', 'smiles',
'tcia', or 'uniprot'
> usage open smiles
Expected fewer arguments
> usage open
open names [format format] [fromDatabase fromDatabase] [name a text string]
[format/database-specific arguments]
— read and display data
names: file names to open; a name of 'browse' will bring up a file browser
format: one of aln, amber, amira, apbs, bild, brix, ccd, ccp4, cellpack,
clustal, cmap, cmd, cod, collada, com, compiled python, coords, corecif, cube,
dat, dcd, defattr, delphi, dicom, dock, dsn6, dv, dynamo, emanhdf, fasta,
fchk, fsc, generic_particles, geomodel, gltf, gopenmol, gro, hdf, hssp, html,
ihm, images, imagic, imod, imodmap, ims, log, macmolplt, markers, mmcif, mmtf,
model2point, mol2, mole, motivelist, motl, mrc, msf, mtz, nbo31, nbo47,
netcdfmap, nifti, nrrd, obj, out, pcod, pdb, pdbqt, peet, pfam, photo, pif,
pir, positions, priism, profec, pseudobonds, psf, python, qout, relion, rmf,
rsf, schrodinger maestro, sdf, segger, session, sff, situs, smallcif, smiles,
spider, sqmout, star, stl, stockholm, storm, swc, swissdock, tbl, tom_em, trr,
uhbd, uniprot, viperdb, vtk, web fetch, xplor, xtc, xyz, or zdock
fromDatabase: one of alphafold, ccd, cellpack, cod, eds, edsdiff, emdb,
emdb_china, emdb_europe, emdb_japan, emdb_us, esmfold, ftp, help, http, https,
pcod, pdb, pdbdev, pdbe, pdbe_bio, pdbj, pubchem, rcsb_bio, smiles, tcia, or
uniprot
format/database-specific arguments: format- or database-specific arguments; to
see their syntax use 'usage open format format' or 'usage open database
database' commands respectively, where format and database are as per the
above
> open
> [H:10][C:1]1([C:2]([C:4]([C:7]([C:5]([C:3]1([H:14])[H:15])([H:18])[H:19])([H:23])[C@:8]([H:24])([C:6]([H:20])([H:21])[H:22])[N+:9]([H:25])([H:26])[H:27])([H:16])[H:17])([H:12])[H:13])[H:11]
> format smiles
No such database '[h'
> open
> [H:10][C:1]1([C:2]([C:4]([C:7]([C:5]([C:3]1([H:14])[H:15])([H:18])[H:19])([H:23])[C@:8]([H:24])([C:6]([H:20])([H:21])[H:22])[N+:9]([H:25])([H:26])[H:27])([H:16])[H:17])([H:12])[H:13])[H:11]
> format smiles
No such database '[h'
> usage open format smiles
'smiles' is a database format type; use the command 'usage open database' with
the corresponding database type instead
> usage open smiles
Expected fewer arguments
> usage open database smiles
open names [ignoreCache true or false] [resName a text string]
— read and display data
names: file names to open; a name of 'browse' will bring up a file browser
> open
> \\[H:10\\]\\[C:1\\]1(\\[C:2\\](\\[C:4\\](\\[C:7\\](\\[C:5\\](\\[C:3\\]1(\\[H:14\\])\\[H:15\\])(\\[H:18\\])\\[H:19\\])(\\[H:23\\])\\[C@:8\\](\\[H:24\\])(\\[C:6\\](\\[H:20\\])(\\[H:21\\])\\[H:22\\])\\[N+:9\\](\\[H:25\\])(\\[H:26\\])\\[H:27\\])(\\[H:16\\])\\[H:17\\])(\\[H:12\\])\\[H:13\\])\\[H:11\\]
> from smiles
> open CCCC fromDatabase smiles
Translated SMILES to 3D structure via NCI web service (SMILES: CCCC)
> close
> open
> [H:10][C:1]1([C:2]([C:4]([C:7]([C:5]([C:3]1([H:14])[H:15])([H:18])[H:19])([H:23])[C@:8]([H:24])([C:6]([H:20])([H:21])[H:22])[N+:9]([H:25])([H:26])[H:27])([H:16])[H:17])([H:12])[H:13])[H:11]
> from smiles
No such database '[h'
> open
> r'[H:10][C:1]1([C:2]([C:4]([C:7]([C:5]([C:3]1([H:14])[H:15])([H:18])[H:19])([H:23])[C@:8]([H:24])([C:6]([H:20])([H:21])[H:22])[N+:9]([H:25])([H:26])[H:27])([H:16])[H:17])([H:12])[H:13])[H:11]'
> from smiles
No such database 'r'[h'
Failed to translate SMILES to 3D structure via NCI web service(SMILES:
[H:10][C:1]1([C:2]([C:4]([C:7]([C:5]([C:3]1([H:14])[H:15])([H:18])[H:19])([H:23])[C@:8]([H:24])([C:6]([H:20])([H:21])[H:22])[N+:9]([H:25])([H:26])[H:27])([H:16])[H:17])([H:12])[H:13])[H:11])
> open
> %5BH:10%5D%5BC:1%5D1%28%5BC:2%5D%28%5BC:4%5D%28%5BC:7%5D%28%5BC:5%5D%28%5BC:3%5D1%28%5BH:14%5D%29%5BH:15%5D%29%28%5BH:18%5D%29%5BH:19%5D%29%28%5BH:23%5D%29%5BC%40:8%5D%28%5BH:24%5D%29%28%5BC:6%5D%28%5BH:20%5D%29%28%5BH:21%5D%29%5BH:22%5D%29%5BN%2B:9%5D%28%5BH:25%5D%29%28%5BH:26%5D%29%5BH:27%5D%29%28%5BH:16%5D%29%5BH:17%5D%29%28%5BH:12%5D%29%5BH:13%5D%29%5BH:11%5D
> from smiles
[Repeated 1 time(s)]
OpenGL version: 3.3.0 NVIDIA 515.105.01
OpenGL renderer: NVIDIA GeForce RTX 3070/PCIe/SSE2
OpenGL vendor: NVIDIA Corporation
Python: 3.9.11
Locale: en_GB.UTF-8
Qt version: PyQt6 6.4.2, Qt 6.4.2
Qt runtime version: 6.4.3
Qt platform: xcb
XDG_SESSION_TYPE=x11
DESKTOP_SESSION=ubuntu
XDG_SESSION_DESKTOP=ubuntu
XDG_CURRENT_DESKTOP=ubuntu:GNOME
DISPLAY=:1
Manufacturer: Dell Inc.
Model: XPS 8950
OS: Ubuntu 22.04 Jammy Jellyfish
Architecture: 64bit ELF
Virtual Machine: none
CPU: 20 12th Gen Intel(R) Core(TM) i7-12700
Cache Size: 25600 KB
Memory:
total used free shared buff/cache available
Mem: 31Gi 6.0Gi 7.6Gi 225Mi 17Gi 24Gi
Swap: 2.0Gi 0B 2.0Gi
Graphics:
0000:01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA104 [GeForce RTX 3070 Lite Hash Rate] [10de:2488] (rev a1)
Subsystem: Dell GA104 [GeForce RTX 3070 Lite Hash Rate] [1028:c903]
Kernel driver in use: nvidia
Installed Packages:
alabaster: 0.7.13
appdirs: 1.4.4
asttokens: 2.2.1
Babel: 2.12.1
backcall: 0.2.0
beautifulsoup4: 4.11.2
blockdiag: 3.0.0
build: 0.10.0
certifi: 2023.5.7
cftime: 1.6.2
charset-normalizer: 3.1.0
ChimeraX-AddCharge: 1.5.9.1
ChimeraX-AddH: 2.2.5
ChimeraX-AlignmentAlgorithms: 2.0.1
ChimeraX-AlignmentHdrs: 3.3.1
ChimeraX-AlignmentMatrices: 2.1
ChimeraX-Alignments: 2.9.3
ChimeraX-AlphaFold: 1.0
ChimeraX-AltlocExplorer: 1.0.3
ChimeraX-AmberInfo: 1.0
ChimeraX-Arrays: 1.1
ChimeraX-Atomic: 1.43.10
ChimeraX-AtomicLibrary: 10.0.6
ChimeraX-AtomSearch: 2.0.1
ChimeraX-AxesPlanes: 2.3.2
ChimeraX-BasicActions: 1.1.2
ChimeraX-BILD: 1.0
ChimeraX-BlastProtein: 2.1.2
ChimeraX-BondRot: 2.0.1
ChimeraX-BugReporter: 1.0.1
ChimeraX-BuildStructure: 2.8
ChimeraX-Bumps: 1.0
ChimeraX-BundleBuilder: 1.2.2
ChimeraX-ButtonPanel: 1.0.1
ChimeraX-CageBuilder: 1.0.1
ChimeraX-CellPack: 1.0
ChimeraX-Centroids: 1.3.2
ChimeraX-ChangeChains: 1.0.2
ChimeraX-CheckWaters: 1.3.1
ChimeraX-ChemGroup: 2.0.1
ChimeraX-Clashes: 2.2.4
ChimeraX-Clipper: 0.21.0
ChimeraX-ColorActions: 1.0.3
ChimeraX-ColorGlobe: 1.0
ChimeraX-ColorKey: 1.5.3
ChimeraX-CommandLine: 1.2.5
ChimeraX-ConnectStructure: 2.0.1
ChimeraX-Contacts: 1.0.1
ChimeraX-Core: 1.6.1
ChimeraX-CoreFormats: 1.1
ChimeraX-coulombic: 1.4.2
ChimeraX-Crosslinks: 1.0
ChimeraX-Crystal: 1.0
ChimeraX-CrystalContacts: 1.0.1
ChimeraX-DataFormats: 1.2.3
ChimeraX-Dicom: 1.2
ChimeraX-DistMonitor: 1.4
ChimeraX-DockPrep: 1.1.1
ChimeraX-Dssp: 2.0
ChimeraX-EMDB-SFF: 1.0
ChimeraX-ESMFold: 1.0
ChimeraX-FileHistory: 1.0.1
ChimeraX-FunctionKey: 1.0.1
ChimeraX-Geometry: 1.3
ChimeraX-gltf: 1.0
ChimeraX-Graphics: 1.1.1
ChimeraX-Hbonds: 2.4
ChimeraX-Help: 1.2.1
ChimeraX-HKCage: 1.3
ChimeraX-IHM: 1.1
ChimeraX-ImageFormats: 1.2
ChimeraX-IMOD: 1.0
ChimeraX-IO: 1.0.1
ChimeraX-ISOLDE: 1.6.0
ChimeraX-ItemsInspection: 1.0.1
ChimeraX-Label: 1.1.7
ChimeraX-LinuxSupport: 1.0.1
ChimeraX-ListInfo: 1.1.1
ChimeraX-Log: 1.1.5
ChimeraX-LookingGlass: 1.1
ChimeraX-Maestro: 1.8.2
ChimeraX-Map: 1.1.4
ChimeraX-MapData: 2.0
ChimeraX-MapEraser: 1.0.1
ChimeraX-MapFilter: 2.0.1
ChimeraX-MapFit: 2.0
ChimeraX-MapSeries: 2.1.1
ChimeraX-Markers: 1.0.1
ChimeraX-Mask: 1.0.2
ChimeraX-MatchMaker: 2.0.12
ChimeraX-MDcrds: 2.6
ChimeraX-MedicalToolbar: 1.0.2
ChimeraX-Meeting: 1.0.1
ChimeraX-MLP: 1.1.1
ChimeraX-mmCIF: 2.12
ChimeraX-MMTF: 2.2
ChimeraX-Modeller: 1.5.9
ChimeraX-ModelPanel: 1.3.7
ChimeraX-ModelSeries: 1.0.1
ChimeraX-Mol2: 2.0
ChimeraX-Mole: 1.0
ChimeraX-Morph: 1.0.2
ChimeraX-MouseModes: 1.2
ChimeraX-Movie: 1.0
ChimeraX-Neuron: 1.0
ChimeraX-Nifti: 1.0
ChimeraX-NRRD: 1.0
ChimeraX-Nucleotides: 2.0.3
ChimeraX-OpenCommand: 1.10.1
ChimeraX-PDB: 2.7.2
ChimeraX-PDBBio: 1.0
ChimeraX-PDBLibrary: 1.0.2
ChimeraX-PDBMatrices: 1.0
ChimeraX-PickBlobs: 1.0.1
ChimeraX-Positions: 1.0
ChimeraX-PresetMgr: 1.1
ChimeraX-PubChem: 2.1
ChimeraX-QScore: 1.0
ChimeraX-ReadPbonds: 1.0.1
ChimeraX-Registration: 1.1.1
ChimeraX-RemoteControl: 1.0
ChimeraX-RenderByAttr: 1.1
ChimeraX-RenumberResidues: 1.1
ChimeraX-ResidueFit: 1.0.1
ChimeraX-RestServer: 1.1
ChimeraX-RNALayout: 1.0
ChimeraX-RotamerLibMgr: 3.0
ChimeraX-RotamerLibsDunbrack: 2.0
ChimeraX-RotamerLibsDynameomics: 2.0
ChimeraX-RotamerLibsRichardson: 2.0
ChimeraX-SaveCommand: 1.5.1
ChimeraX-SchemeMgr: 1.0
ChimeraX-SDF: 2.0.1
ChimeraX-Segger: 1.0
ChimeraX-Segment: 1.0.1
ChimeraX-SelInspector: 1.0
ChimeraX-SeqView: 2.8.3
ChimeraX-Shape: 1.0.1
ChimeraX-Shell: 1.0.1
ChimeraX-Shortcuts: 1.1.1
ChimeraX-ShowSequences: 1.0.1
ChimeraX-SideView: 1.0.1
ChimeraX-Smiles: 2.1
ChimeraX-SmoothLines: 1.0
ChimeraX-SpaceNavigator: 1.0
ChimeraX-StdCommands: 1.10.3
ChimeraX-STL: 1.0.1
ChimeraX-Storm: 1.0
ChimeraX-StructMeasure: 1.1.2
ChimeraX-Struts: 1.0.1
ChimeraX-Surface: 1.0.1
ChimeraX-SwapAA: 2.0.1
ChimeraX-SwapRes: 2.2.1
ChimeraX-TapeMeasure: 1.0
ChimeraX-Test: 1.0
ChimeraX-Toolbar: 1.1.2
ChimeraX-ToolshedUtils: 1.2.1
ChimeraX-Topography: 1.0
ChimeraX-Tug: 1.0.1
ChimeraX-UI: 1.28.4
ChimeraX-uniprot: 2.2.2
ChimeraX-UnitCell: 1.0.1
ChimeraX-ViewDockX: 1.2
ChimeraX-VIPERdb: 1.0
ChimeraX-Vive: 1.1
ChimeraX-VolumeMenu: 1.0.1
ChimeraX-VTK: 1.0
ChimeraX-WavefrontOBJ: 1.0
ChimeraX-WebCam: 1.0.2
ChimeraX-WebServices: 1.1.1
ChimeraX-Zone: 1.0.1
colorama: 0.4.6
comm: 0.1.3
contourpy: 1.0.7
cxservices: 1.2.2
cycler: 0.11.0
Cython: 0.29.33
debugpy: 1.6.7
decorator: 5.1.1
distro: 1.7.0
docutils: 0.19
executing: 1.2.0
filelock: 3.9.0
fonttools: 4.39.3
funcparserlib: 1.0.1
grako: 3.16.5
h5py: 3.8.0
html2text: 2020.1.16
idna: 3.4
ihm: 0.35
imagecodecs: 2022.9.26
imagesize: 1.4.1
importlib-metadata: 6.6.0
ipykernel: 6.21.1
ipython: 8.10.0
ipython-genutils: 0.2.0
ipywidgets: 8.0.6
jedi: 0.18.2
Jinja2: 3.1.2
jupyter-client: 8.0.2
jupyter-core: 5.3.0
jupyterlab-widgets: 3.0.7
kiwisolver: 1.4.4
line-profiler: 4.0.2
lxml: 4.9.2
lz4: 4.3.2
MarkupSafe: 2.1.2
matplotlib: 3.6.3
matplotlib-inline: 0.1.6
msgpack: 1.0.4
nest-asyncio: 1.5.6
netCDF4: 1.6.2
networkx: 2.8.8
nibabel: 5.0.1
nptyping: 2.5.0
numexpr: 2.8.4
numpy: 1.23.5
openvr: 1.23.701
packaging: 23.1
ParmEd: 3.4.3
parso: 0.8.3
pep517: 0.13.0
pexpect: 4.8.0
pickleshare: 0.7.5
Pillow: 9.3.0
pip: 23.0
pkginfo: 1.9.6
platformdirs: 3.5.0
prompt-toolkit: 3.0.38
psutil: 5.9.4
ptyprocess: 0.7.0
pure-eval: 0.2.2
pycollada: 0.7.2
pydicom: 2.3.0
Pygments: 2.14.0
pynrrd: 1.0.0
PyOpenGL: 3.1.5
PyOpenGL-accelerate: 3.1.5
pyparsing: 3.0.9
pyproject-hooks: 1.0.0
PyQt6-commercial: 6.4.2
PyQt6-Qt6: 6.4.3
PyQt6-sip: 13.4.1
PyQt6-WebEngine-commercial: 6.4.0
PyQt6-WebEngine-Qt6: 6.4.3
python-dateutil: 2.8.2
pytz: 2023.3
pyzmq: 25.0.2
qtconsole: 5.4.0
QtPy: 2.3.1
RandomWords: 0.4.0
rdkit-pypi: 2022.9.2
requests: 2.28.2
scipy: 1.9.3
setuptools: 67.4.0
sfftk-rw: 0.7.3
six: 1.16.0
snowballstemmer: 2.2.0
sortedcontainers: 2.4.0
soupsieve: 2.4.1
sphinx: 6.1.3
sphinx-autodoc-typehints: 1.22
sphinxcontrib-applehelp: 1.0.4
sphinxcontrib-blockdiag: 3.0.0
sphinxcontrib-devhelp: 1.0.2
sphinxcontrib-htmlhelp: 2.0.1
sphinxcontrib-jsmath: 1.0.1
sphinxcontrib-qthelp: 1.0.3
sphinxcontrib-serializinghtml: 1.1.5
stack-data: 0.6.2
tables: 3.7.0
tcia-utils: 1.2.0
tifffile: 2022.10.10
tinyarray: 1.2.4
tomli: 2.0.1
tornado: 6.3.1
traitlets: 5.9.0
typing-extensions: 4.5.0
tzdata: 2023.3
urllib3: 1.26.15
wcwidth: 0.2.6
webcolors: 1.12
wheel: 0.38.4
wheel-filename: 1.4.1
widgetsnbextension: 4.0.7
zipp: 3.15.0
Change History (9)
comment:1 by , 2 years ago
| Component: | Unassigned → Input/Output |
|---|---|
| Owner: | set to |
| Platform: | → all |
| Project: | → ChimeraX |
| Status: | new → accepted |
| Summary: | ChimeraX bug report submission → SMILES needs escape-sequence insertion |
comment:2 by , 2 years ago
| Resolution: | → fixed |
|---|---|
| Status: | accepted → closed |
comment:3 by , 2 years ago
I figured there must be something like that, but my google-fu only got me as far as `html.escape()` which did nothing. :) A follow-on problem: a particularly long SMILES string leads to failure because the temp file name is too long (I guess mostly because I'm currently passing the pre-processed string to `fetch_smiles()` rather than modified the method to process it internally... but it could in theory happen regardless). [Errno 36] File name too long: '/tmp/tmp2nfd85co%5BH%3A24%5D%5Bc%3A9%5D1%5Bc%3A10%5D%28%5Bc%3A14%5D2%5Bc%3A13%5D%28%5Bc%3A12%5D%28%5Bc%3A11%5D1%5BO%3A7%5D%5BC%3A16%5D%28%5BH%3A27%5D%29%28%5BH%3A28%5D%29%5BC%3A20%5D3%28%5BC%3A18%5D%28%5BC%3A19%5D3%28%5BH%3A32%5D%29%5BH%3A33%5D%29%28%5BH%3A30%5D%29%5BH%3A31%5D%29%5BC%3A6%5D%23%5BN%3A1%5D%29%5BC%3A15%5D%28%5BH%3A26%5D%29%28%5BF%3A4%5D%29%5BF%3A5%5D%29%5BC%3A17%5D%28%5BC%3A21%5D%28%5BS%3A22%5D2%28%3D%5BO%3A2%5D%29%3D%5BO%3A3%5D%29%28%5BH%3A34%5D%29%5BH%3A35%5D%29%28%5BH%3A29%5D%29%5BO%3A8%5D%5BH%3A23%5D%29%5BH%3A25%5D' On Mon, Jun 12, 2023 at 10:23 PM ChimeraX <ChimeraX-bugs-admin@cgl.ucsf.edu> wrote: > > > > > >
comment:4 by , 2 years ago
Is there a stack trace that goes along with that error? My reading of the code suggests that it is urllib.request.urlopen() using a temp file under the hood -- which would be difficult for me to do anything about. But that's somewhat guesswork and a stack trace would clarify whether my analysis was in fact correct...
comment:5 by , 2 years ago
That was running in a loop where I was just catching and reporting the text of any errors before continuing, so I’m afraid not. But can generate it tomorrow. Was nit much more than a call to `fetch_smiles(session, smiles=already_quoted_string)`. On Tue, 13 Jun 2023 at 19:00, ChimeraX <ChimeraX-bugs-admin@cgl.ucsf.edu> wrote: > >
comment:6 by , 2 years ago
Well, if my guess was wrong then the stack trace will point me in the right direction! :-)
comment:7 by , 2 years ago
Sorry it took a little longer than expected to get back to this, but here
you go:
{{{
smiles_str =
'''%5BH%3A32%5D%5Bc%3A14%5D1%5Bc%3A17%5D%28%5Bc%3A18%5D2%5Bc%3A19%5D%28%5
Bc%3A15%5D%28%5Bc%3A16%5D1%5BO%3A5%5D%5BH%3A27%5D%29%5BCl%3A3%5D%29%5BC%3A21%5D%
28%2F%5BC%3A13%5D%28%3D%5BC%3A12%5D%28%5C%5BC%3A20%5D%28%2F%5BC%3A10%5D%28%3D%5B
C%3A11%5D%28%5C%5BC%40%40%3A25%5D3%28%5BC%40%3A26%5D%28%5BO%3A8%5D3%29%28%5BC%3A
23%5D%28%5BC%40%40%3A24%5D%28%5BO%3A7%5D%5BC%3A9%5D2%3D%5BO%3A2%5D%29%28%5BH%3A4
2%5D%29%5BC%3A22%5D%28%5BH%3A37%5D%29%28%5BH%3A38%5D%29%5BH%3A39%5D%29%28%5BH%3A
40%5D%29%5BH%3A41%5D%29%5BH%3A44%5D%29%5BH%3A43%5D%29%2F%5BH%3A30%5D%29%2F%5BH%3
A29%5D%29%28%5BH%3A33%5D%29%5BH%3A34%5D%29%2F%5BH%3A31%5D%29%2F%5BN%3A4%5D%3D%5B
O%3A1%5D%29%28%5BH%3A35%5D%29%5BH%3A36%5D%29%5BO%3A6%5D%5BH%3A28%5D'''
fetch_smiles(session, smiles_str)
---------------------------------------------------------------------------
OSError Traceback (most recent call last)
Cell In[5], line 1
----> 1 fetch_smiles(session, smiles_str)
File
/usr/lib/ucsf-chimerax/lib/python3.9/site-packages/chimerax/smiles/smiles.py:39,
in fetch_smiles(session, smiles_string, res_name, **kw)
37 for fetcher, moniker, ack_name, info_url in fetcher_info:
38 try:
---> 39 path = fetcher(session, smiles_string, web_smiles)
40 except SmilesTranslationError:
41 pass
File
/usr/lib/ucsf-chimerax/lib/python3.9/site-packages/chimerax/smiles/smiles.py:81,
in _indiana_fetch(session, smiles, web_smiles)
79 from chimerax.core.fetch import fetch_file
80 import os
---> 81 filename = fetch_file(session, "
http://cheminfov.informatics.indiana.edu/rest/thread/d3.py/"
82 "SMILES/%s" % smiles, 'SMILES %s' % smiles, web_smiles, None)
83 return filename
File
/usr/lib/ucsf-chimerax/lib/python3.9/site-packages/chimerax/core/fetch.py:79,
in fetch_file(session, url, name, save_name, save_dir, uncompress,
transmit_compressed, ignore_cache, check_certificates, timeout,
error_status)
77 if save_dir is None:
78 import tempfile
---> 79 f = tempfile.NamedTemporaryFile(suffix=save_name)
80 filename = f.name
81 f.close()
File /usr/lib/ucsf-chimerax/lib/python3.9/tempfile.py:545, in
NamedTemporaryFile(mode, buffering, encoding, newline, suffix, prefix, dir,
delete, errors)
542 if _os.name == 'nt' and delete:
543 flags |= _os.O_TEMPORARY
--> 545 (fd, name) = _mkstemp_inner(dir, prefix, suffix, flags, output_type)
546 try:
547 file = _io.open(fd, mode, buffering=buffering,
548 newline=newline, encoding=encoding,
errors=errors)
File /usr/lib/ucsf-chimerax/lib/python3.9/tempfile.py:255, in
_mkstemp_inner(dir, pre, suf, flags, output_type)
253 _sys.audit("tempfile.mkstemp", file)
254 try:
--> 255 fd = _os.open(file, flags, 0o600)
256 except FileExistsError:
257 continue # try again
OSError: [Errno 36] File name too long:
'/tmp/tmp28e4vnq0%5BH%3A32%5D%5Bc%3A14%5D1%5Bc%3A17%5D%28%5Bc%3A18%5D2%5Bc%3A19%5D%28%5Bc%3A15%5D%28%5Bc%3A16%5D1%5BO%3A5%5D%5BH%3A27%5D%29%5BCl%3A3%5D%29%5BC%3A21%5D%28%2F%5BC%3A13%5D%28%3D%5BC%3A12%5D%28%5C%5BC%3A20%5D%28%2F%5BC%3A10%5D%28%3D%5BC%3A11%5D%28%5C%5BC%40%40%3A25%5D3%28%5BC%40%3A26%5D%28%5BO%3A8%5D3%29%28%5BC%3A23%5D%28%5BC%40%40%3A24%5D%28%5BO%3A7%5D%5BC%3A9%5D2%3D%5BO%3A2%5D%29%28%5BH%3A42%5D%29%5BC%3A22%5D%28%5BH%3A37%5D%29%28%5BH%3A38%5D%29%5BH%3A39%5D%29%28%5BH%3A40%5D%29%5BH%3A41%5D%29%5BH%3A44%5D%29%5BH%3A43%5D%29%2F%5BH%3A30%5D%29%2F%5BH%3A29%5D%29%28%5BH%3A33%5D%29%5BH%3A34%5D%29%2F%5BH%3A31%5D%29%2F%5BN%3A4%5D%3D%5BO%3A1%5D%29%28%5BH%3A35%5D%29%5BH%3A36%5D%29%5BO%3A6%5D%5BH%3A28%5D'
}}}
On Tue, Jun 13, 2023 at 7:07 PM ChimeraX <ChimeraX-bugs-admin@cgl.ucsf.edu>
wrote:
>
>
comment:8 by , 2 years ago
Well, two things:
(1) This is a limitation of tempfile.NamedTemporaryFile() creating a long file name on Windows. I've now truncated the file-name parameter passed into the fetch_file() routine (that calls NamedTemporaryFile()) since we are not going to cache the result.
(2) The value passed into fetch_smiles() should be the normal unquoted SMILES string, since fetch_smiles() will do its own quoting and you don't want two layers of quoting.
comment:9 by , 2 years ago
Well... it will now. :) It didn't in the version I was using. I realise it's much, much less likely to hit the filename length limit after that change. On Wed, Jun 21, 2023 at 9:32 PM ChimeraX <ChimeraX-bugs-admin@cgl.ucsf.edu> wrote: > > > >
The SMILES code already did some bespoke quoting of the SMILES string before sending it. Now uses the more comprehensive urllib.parse.quote() function to do the quoting.
Fix: https://github.com/RBVI/ChimeraX/commit/fd5df299e02ba0bce4d090374355cb3cf7112636