Skip to content

Commit 7cecbff

Browse files
committed
jmol: access files through features, for simpler configuration
1 parent 917060c commit 7cecbff

File tree

3 files changed

+48
-5
lines changed

3 files changed

+48
-5
lines changed

src/sage/env.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ def var(key: str, *fallbacks: Optional[str], force: bool = False) -> Optional[st
211211
POLYTOPE_DATA_DIR = var("POLYTOPE_DATA_DIR")
212212

213213
# installation directories for various packages
214-
JMOL_DIR = var("JMOL_DIR", join(SAGE_SHARE, "jmol"))
214+
JMOL_DIR = var("JMOL_DIR")
215215
MATHJAX_DIR = var("MATHJAX_DIR", join(SAGE_SHARE, "mathjax"))
216216
MTXLIB = var("MTXLIB", join(SAGE_SHARE, "meataxe"))
217217
THREEJS_DIR = var("THREEJS_DIR", join(SAGE_SHARE, "threejs-sage"))

src/sage/features/jmol.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import os
2+
3+
from . import StaticFile
4+
5+
6+
class JmolDataJar(StaticFile):
7+
r"""
8+
A :class:`~sage.features.Feature` which describes the presence of
9+
JmolData.jar in a few standard locations.
10+
11+
EXAMPLES::
12+
13+
sage: from sage.features.jmol import JmolDataJar
14+
sage: bool(JmolDataJar().is_present()) # needs jmol
15+
True
16+
"""
17+
18+
def __init__(self):
19+
r"""
20+
TESTS::
21+
22+
sage: from sage.features.jmol import JmolDataJar
23+
sage: isinstance(JmolDataJar(), JmolDataJar)
24+
True
25+
"""
26+
from sage.env import SAGE_SHARE, JMOL_DIR
27+
28+
jmol_search_path = JMOL_DIR or (
29+
os.path.join(SAGE_SHARE, "sagemath", "jmol"),
30+
os.path.join(SAGE_SHARE, "jmol")
31+
)
32+
33+
StaticFile.__init__(
34+
self, name="jmol",
35+
filename="JmolData.jar",
36+
search_path=jmol_search_path,
37+
spkg="jmol",
38+
type="standard",
39+
description="Java viewer for chemical structures in 3D")
40+
41+
42+
def all_features():
43+
return [JmolDataJar()]

src/sage/interfaces/jmoldata.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
from sage.structure.sage_object import SageObject
2323

24-
from sage.env import JMOL_DIR
24+
from sage.features.jmol import JmolDataJar
2525
from sage.misc.temporary_file import tmp_filename
2626
from sage.cpython.string import bytes_to_str
2727

@@ -79,11 +79,11 @@ def jmolpath(self):
7979
8080
sage: from sage.interfaces.jmoldata import JmolData
8181
sage: JData = JmolData()
82-
sage: JData.jmolpath()
82+
sage: JData.jmolpath() # needs jmol
8383
'.../JmolData.jar'
8484
8585
"""
86-
jmolpath = os.path.join(JMOL_DIR, "JmolData.jar")
86+
jmolpath = JmolDataJar().absolute_filename()
8787

8888
return jmolpath
8989

@@ -100,7 +100,7 @@ def is_jmol_available(self):
100100
sage: type(JData.is_jmol_available())
101101
<... 'bool'>
102102
"""
103-
if not os.path.isfile(self.jmolpath()):
103+
if not JmolDataJar().is_present():
104104
return False
105105

106106
if not self.is_jvm_available():

0 commit comments

Comments
 (0)