Add support for filelist ranges

This commit is contained in:
usov_i 2020-07-29 17:56:58 +02:00
parent 581fb88509
commit 6d645d5b48
2 changed files with 35 additions and 7 deletions

View File

@ -134,14 +134,39 @@ class AnatricConfig:
@property
def filelist_ranges(self):
range_vals = self._filelist_elem.find("range").attrib
return (int(range_vals["start"]), int(range_vals["end"]))
ranges = []
for range_elem in self._filelist_elem.findall("range"):
ranges.append((int(range_elem.attrib["start"]), int(range_elem.attrib["end"])))
for range_elem in self._filelist_elem.findall("file"):
ranges.append(int(range_elem.attrib["value"]))
return ranges
@filelist_ranges.setter
def filelist_ranges(self, value):
range_vals = self._filelist_elem.find("range").attrib
range_vals["start"] = str(value[0])
range_vals["end"] = str(value[1])
# clear old range elements
filelist_elem = self._filelist_elem
for range_elem in filelist_elem.findall("range"):
filelist_elem.remove(range_elem)
for range_elem in filelist_elem.findall("file"):
filelist_elem.remove(range_elem)
# add new range elements
for range_vals in value:
if len(range_vals) == 1:
# single file
tag = "file"
attrib = {"value": range_vals[0]}
else:
# range of files
tag = "range"
attrib = {"start": range_vals[0], "end": range_vals[1]}
range_elem = ET.Element(tag, attrib=attrib)
range_elem.tail = "\n"
filelist_elem.append(range_elem)
@property
def crystal_sample(self):

View File

@ -20,7 +20,7 @@ def create():
filelist_type.value = config.filelist_type
filelist_format_textinput.value = config.filelist_format
filelist_datapath_textinput.value = config.filelist_datapath
filelist_ranges_textareainput.value = str(config.filelist_ranges)
filelist_ranges_textareainput.value = "\n".join(map(str, config.filelist_ranges))
crystal_sample_textinput.value = config.crystal_sample
lambda_textinput.value = config.crystal_lambda
@ -123,7 +123,10 @@ def create():
filelist_datapath_textinput.on_change("value", filelist_datapath_textinput_callback)
def filelist_ranges_textareainput_callback(_attr, _old, new):
config.ranges = new
ranges = []
for line in new.splitlines():
ranges.append(re.findall(r"\b\d+\b", line))
config.filelist_ranges = ranges
filelist_ranges_textareainput = TextAreaInput(title="ranges:", height=100)
filelist_ranges_textareainput.on_change("value", filelist_ranges_textareainput_callback)