Skip to content

Commit edd547b

Browse files
committed
fixes #128, adds spec2nexus dependence
1 parent 7132c69 commit edd547b

File tree

5 files changed

+27
-13
lines changed

5 files changed

+27
-13
lines changed

apstools/filewriters.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -528,8 +528,13 @@ def newfile(self, filename=None, scan_id=None, RE=None):
528528
self.clear()
529529
filename = filename or self.make_default_filename()
530530
if os.path.exists(filename):
531-
# raise ValueError(f"file {filename} exists")
532-
_z = 2 # TODO: examine the file per issue #128
531+
from spec2nexus.spec import SpecDataFile
532+
sdf = SpecDataFile(filename)
533+
scan_list = sdf.getScanNumbers()
534+
l = len(scan_list)
535+
m = max(map(float, scan_list))
536+
highest = int(max(l, m) + 0.9999) # solves issue #128
537+
scan_id = max(scan_id or 0, highest)
533538
self.spec_filename = filename
534539
self.spec_epoch = int(time.time()) # ! no roundup here!!!
535540
self.spec_host = socket.gethostname() or 'localhost'
@@ -542,7 +547,8 @@ def newfile(self, filename=None, scan_id=None, RE=None):
542547
# False means do not modify it
543548
scan_id = {True: SCAN_ID_RESET_VALUE, False: None}[scan_id]
544549
if scan_id is not None and RE is not None:
545-
# RE is an instance of bluesky.run_engine.RunEngine (or duck type for testing)
550+
# RE is an instance of bluesky.run_engine.RunEngine
551+
# (or duck type for testing)
546552
RE.md["scan_id"] = scan_id
547553
self.scan_id = scan_id
548554
return self.spec_filename

conda-recipe/meta.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ requirements:
4343
- pyRestTable
4444
- pandas
4545
- xlrd
46+
- spec2nexus
4647

4748
test:
4849
imports:

requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@ ophyd
55
pandas
66
pyRestTable
77
xlrd
8+
spec2nexus

tests/__main__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,11 @@
1313
def suite(*args, **kw):
1414

1515
import test_simple
16+
import test_filewriter
1617
# import test_excel
1718
test_list = [
1819
test_simple,
20+
test_filewriter,
1921
# test_excel
2022
]
2123

tests/test_filewriter.py

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -159,23 +159,27 @@ class my_RunEngine:
159159
specwriter.scan_id = -5 # an unusual value for testing only
160160
RE.md["scan_id"] = -10 # an unusual value for testing only
161161
specwriter.newfile(filename=testfile, scan_id=None, RE=RE)
162-
self.assertEqual(specwriter.scan_id, -5, "scan_id unchanged")
163-
self.assertEqual(RE.md["scan_id"], -10, "RE.md['scan_id'] unchanged")
162+
self.assertEqual(specwriter.scan_id, 108, "scan_id unchanged")
163+
self.assertEqual(RE.md["scan_id"], 108, "RE.md['scan_id'] unchanged")
164164

165+
specwriter.scan_id = -5 # an unusual value for testing only
166+
RE.md["scan_id"] = -10 # an unusual value for testing only
165167
specwriter.newfile(filename=testfile, scan_id=False, RE=RE)
166-
self.assertEqual(specwriter.scan_id, -5, "scan_id unchanged")
167-
self.assertEqual(RE.md["scan_id"], -10, "RE.md['scan_id'] unchanged")
168+
self.assertEqual(specwriter.scan_id, 108, "scan_id unchanged")
169+
self.assertEqual(RE.md["scan_id"], 108, "RE.md['scan_id'] unchanged")
168170

171+
specwriter.scan_id = -5 # an unusual value for testing only
172+
RE.md["scan_id"] = -10 # an unusual value for testing only
169173
specwriter.newfile(filename=testfile, scan_id=True, RE=RE)
170-
self.assertEqual(specwriter.scan_id, SCAN_ID_RESET_VALUE, "scan_id reset")
171-
self.assertEqual(RE.md["scan_id"], SCAN_ID_RESET_VALUE, "RE.md['scan_id'] reset")
174+
self.assertEqual(specwriter.scan_id, 108, "scan_id reset")
175+
self.assertEqual(RE.md["scan_id"], 108, "RE.md['scan_id'] reset")
172176

173-
for n in (0, 108, 110):
177+
for n, s in {'0': 108, '108': 108, '110': 110}.items():
174178
specwriter.scan_id = -5 # an unusual value for testing only
175179
RE.md["scan_id"] = -10 # an unusual value for testing only
176-
specwriter.newfile(filename=testfile, scan_id=n, RE=RE)
177-
self.assertEqual(specwriter.scan_id, n, f"scan_id set to {n}")
178-
self.assertEqual(RE.md["scan_id"], n, f"RE.md['scan_id'] set to {n}")
180+
specwriter.newfile(filename=testfile, scan_id=int(n), RE=RE)
181+
self.assertEqual(specwriter.scan_id, s, f"scan_id set to {n}, actually {s}")
182+
self.assertEqual(RE.md["scan_id"], s, f"RE.md['scan_id'] set to {n}, actually {s}")
179183

180184
def test__rebuild_scan_command(self):
181185
from apstools.filewriters import _rebuild_scan_command

0 commit comments

Comments
 (0)