Opened 5 years ago

Closed 5 years ago

Last modified 5 years ago

#4125 closed defect (not a bug)

Command argument quoting not working for single quotes

Reported by: Daniel Esteban Palma Igor Owned by: Greg Couch
Priority: normal Milestone:
Component: Command Line Version:
Keywords: Cc: chimera-programmers
Blocked By: Blocking:
Notify when closed: Platform: all
Project: ChimeraX

Description

The following bug report has been submitted:
Platform:        Linux-5.8.18-1-MANJARO-x86_64-with-arch-Manjaro-Linux
ChimeraX Version: 1.1 (2020-09-09 22:22:27 UTC)
Description
atomspec with single quotation marks cause error but double quotation marks are ok, example:
select '#1'

Log:
Startup Messages  
---  
notes | ChimeraX-XKnot Bundle Info loaded from:
/home/danpal/code/chimerax/xknot  
module chimerax.xknot imported from:
/home/danpal/code/chimerax/xknot/src/__init__.py  
Registered commands from: /home/danpal/code/chimerax/xknot  
  
UCSF ChimeraX version: 1.1 (2020-09-09)  
© 2016-2020 Regents of the University of California. All rights reserved.  
How to cite UCSF ChimeraX  

> open 2efv

2efv title:  
Crystal Structure of a Hypothetical Protein(MJ0366) from Methanocaldococcus
jannaschii [more info...]  
  
Chain information for 2efv #1  
---  
Chain | Description  
A | Hypothetical protein MJ0366  
  
Non-standard residues in 2efv #1  
---  
PO4 — phosphate ion  
  
2efv mmCIF Assemblies  
---  
1| author_defined_assembly  
  

> select "#1"

762 atoms, 699 bonds, 151 residues, 1 model selected  

> select '#1'

Expected an objects specifier or a keyword  
incomplete quoted text  

> select

762 atoms, 699 bonds, 151 residues, 1 model selected  
incomplete quoted text  

> select ':1'

Expected an objects specifier or a keyword  




OpenGL version: 4.6 (Core Profile) Mesa 20.2.3
OpenGL renderer: AMD Radeon(TM) Vega 8 Graphics (RAVEN, DRM 3.38.0, 5.8.18-1-MANJARO, LLVM 11.0.0)
OpenGL vendor: X.Org
Manufacturer: Acer
Model: Aspire A315-41
OS: Manjaro Linux 20.2 Nibia
Architecture: 64bit ELF
CPU: 8 AMD Ryzen 5 2500U with Radeon Vega Mobile Gfx
Cache Size: 512 KB
Memory:
	              total        used        free      shared  buff/cache   available
	Mem:           10Gi       3.3Gi       4.4Gi       124Mi       2.9Gi       6.9Gi
	Swap:          22Gi          0B        22Gi

Graphics:
	03:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Raven Ridge [Radeon Vega Series / Radeon Vega Mobile Series] [1002:15dd] (rev c4)	
	Subsystem: Acer Incorporated [ALI] Device [1025:1259]	
	Kernel driver in use: amdgpu
PyQt version: 5.12.3
Compiled Qt version: 5.12.4
Runtime Qt version: 5.12.9
Installed Packages:
    alabaster: 0.7.12
    appdirs: 1.4.4
    astroid: 2.4.2
    attrs: 20.3.0
    Babel: 2.8.0
    backcall: 0.2.0
    biopython: 1.78
    blockdiag: 2.0.1
    certifi: 2020.6.20
    chardet: 3.0.4
    ChimeraX-AddH: 2.1.3
    ChimeraX-AlignmentAlgorithms: 2.0
    ChimeraX-AlignmentHdrs: 3.2
    ChimeraX-AlignmentMatrices: 2.0
    ChimeraX-Alignments: 2.1
    ChimeraX-Arrays: 1.0
    ChimeraX-Atomic: 1.6.1
    ChimeraX-AtomSearch: 2.0
    ChimeraX-AxesPlanes: 2.0
    ChimeraX-BasicActions: 1.1
    ChimeraX-BILD: 1.0
    ChimeraX-BlastProtein: 1.0.1
    ChimeraX-BondRot: 2.0
    ChimeraX-BugReporter: 1.0
    ChimeraX-BuildStructure: 2.0
    ChimeraX-Bumps: 1.0
    ChimeraX-BundleBuilder: 1.0
    ChimeraX-ButtonPanel: 1.0
    ChimeraX-CageBuilder: 1.0
    ChimeraX-CellPack: 1.0
    ChimeraX-Centroids: 1.1
    ChimeraX-ChemGroup: 2.0
    ChimeraX-Clashes: 2.0
    ChimeraX-Clipper: 0.15.0
    ChimeraX-ColorActions: 1.0
    ChimeraX-ColorGlobe: 1.0
    ChimeraX-CommandLine: 1.1.3
    ChimeraX-ConnectStructure: 2.0
    ChimeraX-Contacts: 1.0
    ChimeraX-Core: 1.1
    ChimeraX-CoreFormats: 1.0
    ChimeraX-coulombic: 1.0.1
    ChimeraX-Crosslinks: 1.0
    ChimeraX-Crystal: 1.0
    ChimeraX-DataFormats: 1.0
    ChimeraX-DevelExtras: 0.3.0
    ChimeraX-Dicom: 1.0
    ChimeraX-DistMonitor: 1.1
    ChimeraX-DistUI: 1.0
    ChimeraX-Dssp: 2.0
    ChimeraX-EMDB-SFF: 1.0
    ChimeraX-ExperimentalCommands: 1.0
    ChimeraX-FileHistory: 1.0
    ChimeraX-FunctionKey: 1.0
    ChimeraX-Geometry: 1.1
    ChimeraX-gltf: 1.0
    ChimeraX-Graphics: 1.0
    ChimeraX-Hbonds: 2.0
    ChimeraX-Help: 1.0
    ChimeraX-HKCage: 1.3
    ChimeraX-IHM: 1.0
    ChimeraX-ImageFormats: 1.0
    ChimeraX-IMOD: 1.0
    ChimeraX-IO: 1.0
    ChimeraX-Label: 1.0
    ChimeraX-LinuxSupport: 1.0
    ChimeraX-ListInfo: 1.0
    ChimeraX-Log: 1.1.1
    ChimeraX-LookingGlass: 1.1
    ChimeraX-Map: 1.0.1
    ChimeraX-MapData: 2.0
    ChimeraX-MapEraser: 1.0
    ChimeraX-MapFilter: 2.0
    ChimeraX-MapFit: 2.0
    ChimeraX-MapSeries: 2.0
    ChimeraX-Markers: 1.0
    ChimeraX-Mask: 1.0
    ChimeraX-MatchMaker: 1.1
    ChimeraX-MDcrds: 2.0
    ChimeraX-MedicalToolbar: 1.0.1
    ChimeraX-Meeting: 1.0
    ChimeraX-MLP: 1.0
    ChimeraX-mmCIF: 2.2
    ChimeraX-MMTF: 2.0
    ChimeraX-Modeller: 1.0
    ChimeraX-ModelPanel: 1.0
    ChimeraX-ModelSeries: 1.0
    ChimeraX-Mol2: 2.0
    ChimeraX-Morph: 1.0
    ChimeraX-MouseModes: 1.0
    ChimeraX-Movie: 1.0
    ChimeraX-Neuron: 1.0
    ChimeraX-Nucleotides: 2.0
    ChimeraX-OpenCommand: 1.2.1
    ChimeraX-PDB: 2.1
    ChimeraX-PDBBio: 1.0
    ChimeraX-PickBlobs: 1.0
    ChimeraX-Positions: 1.0
    ChimeraX-PresetMgr: 1.0
    ChimeraX-PubChem: 2.0
    ChimeraX-Read-Pbonds: 1.0
    ChimeraX-Registration: 1.1
    ChimeraX-RemoteControl: 1.0
    ChimeraX-ResidueFit: 1.0
    ChimeraX-RestServer: 1.0
    ChimeraX-RNALayout: 1.0
    ChimeraX-RotamerLibMgr: 2.0
    ChimeraX-RotamerLibsDunbrack: 2.0
    ChimeraX-RotamerLibsDynameomics: 2.0
    ChimeraX-RotamerLibsRichardson: 2.0
    ChimeraX-SaveCommand: 1.2
    ChimeraX-SchemeMgr: 1.0
    ChimeraX-SDF: 2.0
    ChimeraX-Segger: 1.0
    ChimeraX-Segment: 1.0
    ChimeraX-SeqView: 2.2
    ChimeraX-Shape: 1.0.1
    ChimeraX-Shell: 1.0
    ChimeraX-Shortcuts: 1.0
    ChimeraX-ShowAttr: 1.0
    ChimeraX-ShowSequences: 1.0
    ChimeraX-SideView: 1.0
    ChimeraX-Smiles: 2.0
    ChimeraX-SmoothLines: 1.0
    ChimeraX-SpaceNavigator: 1.0
    ChimeraX-StdCommands: 1.0.4
    ChimeraX-STL: 1.0
    ChimeraX-Storm: 1.0
    ChimeraX-Struts: 1.0
    ChimeraX-Surface: 1.0
    ChimeraX-SwapAA: 2.0
    ChimeraX-SwapRes: 2.0
    ChimeraX-TapeMeasure: 1.0
    ChimeraX-Test: 1.0
    ChimeraX-Toolbar: 1.0
    ChimeraX-ToolshedUtils: 1.0
    ChimeraX-Tug: 1.0
    ChimeraX-UI: 1.2.3
    ChimeraX-uniprot: 2.0
    ChimeraX-ViewDockX: 1.0
    ChimeraX-Vive: 1.1
    ChimeraX-VolumeMenu: 1.0
    ChimeraX-VTK: 1.0
    ChimeraX-WavefrontOBJ: 1.0
    ChimeraX-WebCam: 1.0
    ChimeraX-WebServices: 1.0
    ChimeraX-Zone: 1.0
    colorama: 0.4.3
    comtypes: 1.1.7
    cxservices: 1.0
    cycler: 0.10.0
    Cython: 0.29.20
    decorator: 4.4.2
    distlib: 0.3.1
    distro: 1.5.0
    docutils: 0.16
    filelock: 3.0.12
    funcparserlib: 0.3.6
    grako: 3.16.5
    h5py: 2.10.0
    html2text: 2020.1.16
    idna: 2.10
    ihm: 0.16
    imagecodecs: 2020.5.30
    imagecodecs-lite: 2020.1.31
    imagesize: 1.2.0
    importlib-metadata: 3.1.1
    iniconfig: 1.1.1
    ipykernel: 5.3.0
    ipython: 7.15.0
    ipython-genutils: 0.2.0
    isort: 5.6.4
    jedi: 0.17.2
    Jinja2: 2.11.2
    jupyter-client: 6.1.3
    jupyter-core: 4.6.3
    kiwisolver: 1.2.0
    lazy-object-proxy: 1.4.3
    line-profiler: 2.1.2
    lxml: 4.5.1
    MarkupSafe: 1.1.1
    matplotlib: 3.2.1
    mccabe: 0.6.1
    msgpack: 1.0.0
    mypy: 0.790
    mypy-extensions: 0.4.3
    netifaces: 0.10.9
    networkx: 2.4
    numexpr: 2.7.1
    numpy: 1.18.5
    numpydoc: 1.0.0
    openvr: 1.12.501
    packaging: 20.4
    parso: 0.7.1
    pexpect: 4.8.0
    pickleshare: 0.7.5
    Pillow: 7.1.2
    pip: 20.2.2
    pkginfo: 1.5.0.1
    pluggy: 0.13.1
    prettytable: 2.0.0
    prompt-toolkit: 3.0.7
    psutil: 5.7.0
    PTable: 2.0.0
    ptyprocess: 0.6.0
    py: 1.9.0
    pycollada: 0.7.1
    pydicom: 2.0.0
    Pygments: 2.6.1
    pylint: 2.6.0
    PyOpenGL: 3.1.5
    PyOpenGL-accelerate: 3.1.5
    pyparsing: 2.4.7
    PyQt5-commercial: 5.12.3
    PyQt5-sip: 4.19.19
    pyqtgraph: 0.11.0
    PyQtWebEngine-commercial: 5.12.1
    pytest: 6.1.2
    python-dateutil: 2.8.1
    pytz: 2020.1
    pyzmq: 19.0.2
    qtconsole: 4.7.4
    QtPy: 1.9.0
    RandomWords: 0.3.0
    requests: 2.24.0
    scipy: 1.4.1
    setuptools: 49.4.0
    sfftk-rw: 0.6.6.dev0
    six: 1.15.0
    snowballstemmer: 2.0.0
    sortedcontainers: 2.2.2
    Sphinx: 3.1.1
    sphinxcontrib-applehelp: 1.0.2
    sphinxcontrib-blockdiag: 2.0.0
    sphinxcontrib-devhelp: 1.0.2
    sphinxcontrib-htmlhelp: 1.0.3
    sphinxcontrib-jsmath: 1.0.1
    sphinxcontrib-qthelp: 1.0.3
    sphinxcontrib-serializinghtml: 1.1.4
    suds-jurko: 0.6
    tables: 3.6.1
    tifffile: 2020.6.3
    tinyarray: 1.2.2
    toml: 0.10.2
    topoly: 0.9.8
    tornado: 6.0.4
    traitlets: 5.0.4
    typed-ast: 1.4.1
    typing-extensions: 3.7.4.3
    urllib3: 1.25.10
    wcwidth: 0.2.5
    webcolors: 1.11.1
    wheel: 0.34.2
    wrapt: 1.12.1
    zipp: 3.4.0

Change History (3)

comment:1 by Eric Pettersen, 5 years ago

Cc: chimera-programmers added
Component: UnassignedCommand Line
Owner: set to Greg Couch
Platform: all
Project: ChimeraX
Status: newassigned
Summary: ChimeraX bug report submissionCommand argument quoting not working for single quotes

comment:2 by Greg Couch, 5 years ago

Resolution: not a bug
Status: assignedclosed

The quoting behavior is by design. You are being bitten by the fact that model specifications are a subset of atom specifications. And atom specifications can have single quotes in them, primes, that are not related to quoting. So to quote atom specifications, you have to use double quotes. For example, C4' is an atom name. It is way simpler to require "@C4' @C5'" than to deal with '@C4' @C5''.

in reply to:  3 ; comment:3 by goddard@…, 5 years ago

There is ambiguity in interpreting atom specifier '@C4' @C5'.  It could mean @C4 @C5' if the first two single quotes are paired up, or it could mean @C4' @C5 if the first and last single quote are paired.  Still the case this user had and 99% of cases where single quotes are used only involve two single quotes.  If there is a leading single quote, then it always is intended to be quoting, so I guess I would prefer that if there is a leading quote and a trailing quote that it is always interpreted as quoting.  In the ambiguous cases (which would be exceedingly rare), either interpretation would be fine depending on whether the parsing code handles the whole expression or just the first word -- it is the user's mistake if they use ambiguous quoting.  Double quoting "@C4" @C5" is I guess allowed and that also should be thought of as a mistake by the user, and I don't know how our code interprets it.

The code currently works always does the wrong thing when the user using single quoting, while if single quotes were treated just like double quotes it would do the right thing in 99.9% of cases which seems like much better behavior.

Note: See TracTickets for help on using tickets.